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.