Org-режим: під час експорту виключайте конкретні заголовки з TOC


13

Питання: Як я можу org-modeзапропонувати виключити конкретні заголовки зі змісту під час експорту?

Наприклад, експорт

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

до 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>
...

але я хочу, щоб це виробило

...
<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>
...

У розділі Змістorg-mode посібника немає жодної інформації щодо цього.

Також я знаю, що не можу org-modeекспортувати заголовки, встановивши COMMENTключове слово через C-c ;( org-toggle-comment) або позначивши їх :noexport:. Хоча це не дозволяє відображати заголовки заголовків у TOC, це також спричиняє відсутність їх вмісту з отриманого документа, а це не те, що я хочу.


1
Це не відповідь, яку ви шукаєте, але лише як примітка чергового тупика: EXPORT_OPTIONS: toc:nil майже робить те, що ви хочете, але лише тоді, коли ви експортуєте лише лише піддерево. Щоб уточнити, чи хочете ви, щоб розділ все ще був пронумерований, чи ви хочете щось подібне до LaTeX \section*?
Шон Алред

@SeanAllred Я хотів би, щоб розділ все ще був пронумерований. Загалом, я не хочу нічого змінювати щодо експорту окремих розділів. Я просто не хочу, щоб деякі з них з'являлися в TOC.
itsjeyd

Відповіді:


12

Org використовує org-export-collect-headlinesдля збору заголовків, які мають бути в TOC. Ця функція вже включає два критерії виключення заголовків: глибина заголовка та чи є "розділом виноски" (*), тому легко додати ще один.

Дивіться модифіковану версію org-export-collect-headlinesнижче. Ця версія дозволяє запобігти появі заголовка в TOC, встановивши NOTOCвластивість.

* 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.

(*) Я не знаю, що таке "розділи виносок".

Це працює для експортних програм, які створюють TOC вручну. Програми LaTeX, Beamer і Texinfo не відповідають.

Додавши цю пораду до org-export-numbered-headline-pодного, можна зробити заголовки з UNNUMBEREDекспортом власності як \section*{...}, виключаючи їх з TOC при експорті до LaTeX та Beamer:

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

Зауважте, що станом на 10.10.2014 20:06:34 (GMT) чек UNNUMBERED вже вбудований


1
Дякую, це добре працює для експорту HTML. Насправді мені також це потрібно для роботи в LaTeX / Beamer; Я не згадував про це спочатку, тому що я припускав, що повинно бути загальне рішення, яке б спрацювало для всіх (або принаймні більшості) експортних зворотних торгів ... Чи маєте ви уявлення, як вирішити цю проблему для експорту LaTeX? Порівнюючи .htmlта .texфайли, що org-modeстворюються при експорті, головна проблема, здається, полягає в тому, що org-modeбудується TOC вручну для HTML, а просто скидає загальний файл \tableofcontentsу .texфайл.
itsjeyd

@itsjeyd: Я не думаю, що загальне рішення неможливе: як ви вже говорили, LaTeX (і перемикач, і Texinfo) експортні пакети використовують вбудовані команди для побудови TOC, тоді як інші пакети будують TOC вручну. Це є можливим виключити розділ зі змісту в латексі , але я не знайшов рішення , яке приймається співтовариством як права . Використання ідеї, до якої я посилаюся в org-modeекспортному коді, потребує значних змін org-latex-headline. Щодо втілення цього в підтримку Texinfo, я навіть не знаю, з чого почати.
Костянтин

Добре, дякую за продовження роботи. Що стосується Бімера, я думаю, що я просто вдадусь до того, щоб розділи, які я не хочу показувати в TOC, пронумерованими . Справа закрита. :)
itsjeyd

@itsjeyd: Ви можете модифікувати org-export-numbered-headline-pтаку поведінку майже автоматично - якщо перетворення її на ненумерований розділ - це варіант, тобто. Я можу розробити, якщо вам цікаво.
Костянтин

Будь ласка - завжди зацікавлений у спрощенні рішень!
itsjeyd
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.