Org-mode: Kecualikan tajuk utama dari TOC saat mengekspor

13

T: Bagaimana saya bisa mengatakan org-modeuntuk mengecualikan tajuk utama dari daftar isi saat mengekspor?

Misalnya, mengekspor

* Headline 1: Put me in TOC
* Headline 2: Put me in TOC
* Headline 3: DO NOT put me in TOC

untuk menghasilkan HTML

...
<div id="text-table-of-contents">
  <ul>
    <li><a href="#sec-1">1. Headline 1: Put me in TOC</a></li>
    <li><a href="#sec-2">2. Headline 2: Put me in TOC</a></li>
    <li><a href="#sec-3">3. Headline 3: DO NOT put me in TOC</a></li>
  </ul>
</div>
...

tapi saya ingin menghasilkan

...
<div id="text-table-of-contents">
  <ul>
    <li><a href="#sec-1">1. Headline 1: Put me in TOC</a></li>
    <li><a href="#sec-2">2. Headline 2: Put me in TOC</a></li>
  </ul>
</div>
...

Bagian Daftar Isi dari org-modemanual ini tidak memiliki informasi mengenai hal ini.

Selain itu, saya tahu bahwa saya dapat menjaga agar tidak org-modemengekspor berita utama dengan menetapkan COMMENTkata kunci melalui C-c ;( org-toggle-comment) atau dengan memberi tag :noexport:. Meskipun hal ini menjaga agar tajuk berita yang terkena dampak tidak muncul di TOC, namun juga menyebabkan kontennya dihilangkan dari dokumen yang dihasilkan, yang bukan yang saya inginkan.

itu hanya
sumber
1
Ini bukan jawaban yang Anda cari, tetapi hanya sebagai catatan jalan buntu lain: EXPORT_OPTIONS: toc:nil hampir melakukan apa yang Anda inginkan, tetapi hanya ketika Anda mengekspor hanya subtree saja. Untuk memperjelas, apakah Anda ingin bagian masih diberi nomor, atau Anda ingin sesuatu yang mirip dengan LaTeX \section*?
Sean Allred
@SeanAllred Saya ingin bagian ini masih diberi nomor. Secara umum, saya tidak ingin mengubah apa pun tentang cara setiap bagian diekspor. Saya hanya tidak ingin beberapa dari mereka muncul di TOC.
itsjeyd

Jawaban:

12

Org menggunakan org-export-collect-headlinesuntuk mengumpulkan tajuk berita yang seharusnya ada di TOC. Fungsi ini sudah mencakup dua kriteria untuk mengecualikan tajuk utama: kedalaman tajuk dan apakah itu merupakan "bagian catatan kaki" (*), sehingga mudah untuk menambahkan yang lain.

Lihat versi modifikasi di org-export-collect-headlinesbawah ini. Versi ini memungkinkan untuk mencegah tajuk berita muncul di TOC dengan mengatur NOTOCproperti.

* Section 1: shows up in the TOC

* Section 2: modified Org code (not in the TOC)
  :PROPERTIES:
  :NOTOC:    t
  :END:

  This is the modified =org-export-collect-headlines=:

  #+BEGIN_SRC elisp
  (defun org-export-collect-headlines (info &optional n)
    "Collect headlines in order to build a table of contents. [...]

  Return a list of all exportable headlines as parsed elements.
  Footnote sections, if any, will be ignored."
    (let ((limit (plist-get info :headline-levels)))
      (setq n (if (wholenump n) (min n limit) limit))
      (org-element-map (plist-get info :parse-tree) 'headline
        #'(lambda (headline)
            (unless (or (org-element-property :NOTOC headline)               ; new condition
                        (org-element-property :footnote-section-p headline)) ; old condition
              (let ((level (org-export-get-relative-level headline info)))
                (and (<= level n) headline))))
        info)))
  #+END_SRC

** Sub-section
   This shows up in the TOC: property inheritance is off by default.

(*) Tapi saya tidak tahu apa "bagian catatan kaki".

Ini berfungsi untuk backend ekspor yang membuat TOC secara manual. Backend LaTeX, Beamer, dan Texinfo tidak.

Dengan menambahkan saran ini ke org-export-numbered-headline-pseseorang dapat menjadi berita utama dengan UNNUMBEREDekspor properti sebagai \section*{...}, tidak termasuk mereka dari TOC ketika mengekspor ke LaTeX dan Beamer:

(advice-add 'org-export-numbered-headline-p :around
            (lambda (orig headline info)
              (and (funcall orig headline info)
                   (not (org-element-property :UNNUMBERED headline)))))

Perhatikan bahwa pada 2014-10-03 20:06:34 (GMT) cek UNNUMBERED sudah built-in

Constantine
sumber
1
Terima kasih, ini berfungsi dengan baik untuk ekspor HTML. Saya sebenarnya juga membutuhkan ini untuk bekerja untuk LaTeX / Beamer; Saya tidak menyebutkan ini pada awalnya karena saya berasumsi bahwa harus ada solusi generik yang akan bekerja untuk semua (atau paling tidak sebagian besar) ekspor back-end ... Apakah Anda punya ide bagaimana mengatasi masalah ini untuk ekspor LaTeX? Membandingkan .htmldan .texfile yang org-modemenghasilkan saat mengekspor, masalah utama tampaknya adalah org-modemembangun TOC secara manual untuk HTML, tetapi hanya membuang generik \tableofcontentske dalam .texfile.
itsjeyd
@itsjeyd: Saya rasa solusi generik tidak mungkin: seperti yang Anda katakan, LaTeX (dan beamer, dan Texinfo) mengekspor backend menggunakan perintah asli untuk membangun TOC sementara backend lainnya membangun TOC secara manual. Hal ini dimungkinkan untuk mengecualikan bagian dari TOC di LaTeX , tapi saya belum menemukan solusi yang diterima oleh masyarakat sebagai salah satu yang tepat . Menggunakan ide yang saya tautkan dalam org-modekode ekspor akan membutuhkan perubahan besar org-latex-headline. Adapun untuk menerapkan ini di Texinfo yang didukung, saya bahkan tidak tahu harus mulai dari mana.
Constantine
OK, terima kasih banyak untuk menindaklanjuti. Untuk Beamer, saya pikir saya hanya akan membuat bagian yang saya tidak ingin muncul di TOC bernomor . Kasus ditutup. :)
itsjeyd
@itsjeyd: Anda dapat memodifikasi org-export-numbered-headline-puntuk mendapatkan perilaku ini hampir secara otomatis - jika mengubahnya menjadi bagian yang tidak bernomor adalah opsi, yaitu. Saya bisa menguraikan jika Anda tertarik.
Constantine
Tolong lakukan - selalu tertarik untuk menyederhanakan solusi!
itsjeyd