Alt ağaçların içeriğini, başlıkları olmadan vermek mümkün müdür?


28

Belgeleri org modunda hazırlarım ve gerektiğinde bunları LaTeX, HTML, vs.'ye aktarırım. :no_export:Çıktıda belirli bir alt ağacın görünmesini istemediğim zaman sık sık etiketi kullanırım .

Aynı zamanda istediğim şey, ihracatın belirli alt ağaç başlıklarını tamamen görmezden gelmesi , ancak o başlık altındaki alt ağaç içeriğini görmezden gelmemesi . Başka bir deyişle, belirli alt ağaçların, kendi alt ağaçlarına sahip olmak yerine, içerikleri yalnızca ana öğenin bir devamı gibi hazırlanmış olması gerekir.

İdeal olarak bir etiket hayal ediyorum :no_title:. Kuruluş modu taslağımın alışkın olduğum şekilde aşağı yukarı görünmesini istiyorum. Ancak benzer sonuçları olan diğer yaklaşımları da dikkate alacağım.

Göstermek için, burada org modunda hazırlanan bir belgenin MWE'si var.

* Chapter 1
** Section 1
*** Paragraph 1      :no_title:
First paragraph of text in the section.
*** Paragraph 2      :no_title:
Second paragraph of text in the section.
* Chapter 2
** Section 1
*** Subsection 1
**** Paragraph 1      :no_title:
First paragraph of text in the subsection.
**** Paragraph 2      :no_title:
Second paragraph of text in the subsection

Bunu şu anda dışa aktardığımda şöyle bir şey alıyorum:

1 Bölüm 1

1.1 Bölüm 1

1.1.1 Paragraf 1: no_title:

Bölümdeki metnin ilk paragrafı.

1.1.2 Paragraf 2: no_title:

Bölümdeki metnin ikinci paragrafı.

2 Bölüm 2

2.1 Bölüm 1

2.1.1 Alt Bölüm 1

2.1.1.1 Paragraf 1: no_title:

Alt bölümdeki metnin ilk paragrafı.

Ama istediğim daha çok şöyle:

1 Bölüm 1

1.1 Bölüm 1

Bölümdeki metnin ilk paragrafı.

Bölümdeki metnin ikinci paragrafı.

2 Bölüm 2

2.1 Bölüm 1

2.1.1 Alt Bölüm 1

Alt bölümdeki metnin ilk paragrafı.

Yanıtlar:


27

Bu, hedefinize ulaşmanın (basitliği nedeniyle) tercih edilen bir yolu olabilir - başka bir cevabın yorumlarına gömülmüş gibi görünüyor:

  1. Aşağıdakileri .emacsdosyanıza ekleyin :

    (require 'ox-extra)
    (ox-extras-activate '(ignore-headlines))
    
  2. ignoreYoksaymak istediğiniz başlıklardaki etiketi kullanın (içeriğini yok sayarak)

NOT: org-mode'u kurmak için ELPA kullanıyorsanız, org-mode deposunu ELPA depoları listenize eklemelisiniz. Daha fazla bilgi için buraya bakınız. Bu yapıldıktan sonra, paket listesini yenileyin ( M-x package-refresh-contents) ve org-plus-contribpaketi kurun (örn M-x package-install. İle ). Herhangi bir eski kuruluş modu kurulumdan kurtulmayı unutmayın.


2
bu doğru cevap.
— rasmus,

Benim için işe yaramayacak olmasına rağmen bunu cevap olarak kabul ettim. Org-extra.el dosyasını yüklemeyi denedim, ancak başka bir fonksiyon daha eksikti (Org 8.2.4 ile sıkışıp kaldım).
— Brian Z

Ox-extra paketini bulamıyorum ...
— Toothrot

1
@Toothrot contrib/lispklasörde - orgmode.org/cgit.cgi/org-mode.git/tree/contrib/lisp/ox-extra.el adresini ziyaret edin - emacs config dosyanızda, gibi bir satır eklemeniz gerekebilir (add-to-list 'load-path "/path/to/contrib/lisp").
— Mark

Bu sadece, org 8.3+ kelimelerinde olduğunu unutmayın. Ve sadece 8,3+ bağımlılığa sahip olan öküz-extra.el'i alamazsınız. Gerekli dosyaları bulamama konusunda dışa aktarma konusunda hata alırsınız.
— Dodgie

16

Evet , bu tamamen mümkün. Init dosyanıza aşağıdaki kodu ekleyin:

(defun org-remove-headlines (backend)
  "Remove headlines with :no_title: tag."
  (org-map-entries (lambda () (delete-region (point-at-bol) (point-at-eol)))
                   "no_title"))

(add-hook 'org-export-before-processing-hook #'org-remove-headlines)

Teşekkür

Bu soru daha önce StackOverflow'ta sorulmuştu (farklı bir odak ve ifadeyle, bu yüzden muhtemelen buraya göndermeden önce interneti aradığınızda bulamadınız). Yukarıdaki kod, kabul edilen yanıttaki kodun basitleştirilmiş bir sürümüdür ; 8.0'da tanıtılan yeni ihracatçı için çalışıyor org-modeve arka uç-agnostik .

Güncelleştirme

Yorumlarda tartışıldığı gibi, yukarıdaki kod , dışa aktarılan belgeden çıkarılmak üzere etiketlenmiş bir girdiden önce gelirse, etiketli girişlerin içeriğinin :no_title:kaybolmasına neden olur . Örneğin, aşağıdaki belgeyi dışa aktarma, başlık ve TOC içeren ancak içerik içermeyen bir belge üretecektir:

#+EXCLUDE_TAGS: no_export

* No export                          :no_export:
  This is not meant for you to see.
* No title                           :no_title:
  You should see this.

Bunun nedeni olduğunu org-modekaldırır başlık ile etiketlenmiş :no_title:o kaldırır önce giriş kimin başlık ile etiketlenmiş :no_export:. Sonuç olarak, no_exportgirişi silmek etrafına geldiğinde, girişin içeriğini no_titleönceki no_exportgirişe ait olarak kabul eder . Bu mükemmel bir anlam ifade eder, çünkü artık orijinal girdilerin içeriğini ayıran yapısal bir unsur (başlık) yoktur.

Bu sorunu çözmek için, no_exportgirişleri kaldırmakla ilgili sorumluluk aktarabiliriz org-remove-headlines. Bu şekilde, no_exportbaşlıklar no_titlegirdilerden kaldırılmadan önce tüm girişlerin bırakıldığından emin oluruz :

(defun org-remove-headlines (backend)
  "Remove headlines with :no_title: tag."
  (org-map-entries (lambda () (let ((beg (point)))
                                (outline-next-visible-heading 1)
                                (backward-char)
                                (delete-region beg (point))))
                   "no_export" tree)
  (org-map-entries (lambda () (delete-region (point-at-bol) (point-at-eol)))
                   "no_title"))

(add-hook 'org-export-before-processing-hook #'org-remove-headlines)

Bunu çok kullanıyorum, çok teşekkürler! Ama bir sorun farkettim ... Eğer etiketli bir başlık, etiketli bir başlıktan no_exporthemen önce gelirse no_title, ikinci başlığın içeriği de dışa aktarılmaz.
— Brian Z

@BrianZ Rica ederim! Are no_exportve no_titlebaşlıkları kardeşler (yani onlar lider yıldızlı aynı sayıda yapmak)? Değilse, iki başlığın hangisinde daha fazla yıldız var?
— itsjeyd

Onlar kardeşler. Bu oyuncak örnek bir ihracat hayır benim için hiç içeriği (sadece başlık, vs içindekiler tablosunu) sahiptir pastebin.com/KaiK9qJm
— Brian Z

1
@ BrianZ Kendi başına, org-remove-headlinessadece bir fonksiyondur; asla bir yerden aranmazsa size çok yardımcı olmaz. Bu yüzden evet, (add-hook 'org-export-before-processing-hook #'org-remove-headlines)doğru davranışı sağlamak için çizgiyi değerlendirmeniz gerekiyor . Muhtemelen orijinal cevabımdaki düzenlemelerde bu konuda açık olmalıydım. Gördüğünüz uyarılarla ilgili olarak: Ben Vanilya Emacs 24.4 ve Org Mode'un 8.2.10 sürümlerinde olanları anlamıyorum. Bahsettiğiniz uyarıdan kurtulmak (require 'org-agenda)için add-hookçizgiyi değerlendirmeden önce deneyebilirsiniz .
— itsjeyd

2
Bu özellik aynı zamanda org katkı olarak uygulanır. Ref: orgmode.org/cgit.cgi/org-mode.git/plain/contrib/lisp/…
— rudolfo.christ
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.