Tryb organizacji: podczas eksportu wykluczaj określone nagłówki z spisu treści

13

P: Jak mogę org-modewykluczyć określone nagłówki ze spisu treści podczas eksportowania?

Na przykład eksport

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

do HTML produkuje

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

ale chcę, żeby produkowało

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

Spis treści części org-modeinstrukcji nie posiada żadnych informacji na ten temat.

Wiem też, że nie mogę org-modeeksportować nagłówków, ustawiając COMMENTsłowo kluczowe via C-c ;( org-toggle-comment) lub oznaczając je tagami :noexport:. Mimo że nagłówki, których to dotyczy, nie pojawiają się w spisie treści, powodują również, że ich zawartość jest pomijana w powstałym dokumencie, co nie jest tym, czego chcę.

itsjeyd
źródło
1
Nie jest to odpowiedź, której szukasz, ale jako przypomnienie innego ślepego zaułka: EXPORT_OPTIONS: toc:nil prawie robi to, czego chcesz, ale tylko wtedy, gdy eksportujesz tylko tylko poddrzewo. Aby to wyjaśnić, czy chcesz, aby sekcja była nadal numerowana, czy może chcesz coś podobnego do LaTeXa \section*?
Sean Allred
@SeanAllred Chciałbym, aby sekcja była nadal numerowana. Mówiąc bardziej ogólnie, nie chcę niczego zmieniać w sposobie eksportu poszczególnych sekcji. Po prostu nie chcę, aby niektóre z nich pojawiały się w spisie treści.
itsjeyd

Odpowiedzi:

12

Org używa org-export-collect-headlinesdo zbierania nagłówków, które powinny znajdować się w spisie treści. Ta funkcja zawiera już dwa kryteria wykluczania nagłówków: głębokość nagłówka i to, czy jest to „sekcja przypisu” (*), więc łatwo jest dodać kolejne.

Zobacz zmodyfikowaną wersję org-export-collect-headlinesponiżej. Ta wersja umożliwia zapobieganie wyświetlaniu nagłówka w spisie treści przez ustawienie NOTOCwłaściwości.

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

(*) Nie wiem jednak, jakie są „sekcje przypisów”.

Działa to w przypadku backendów eksportu, które ręcznie konstruują spis treści. Backendy LaTeX, Beamer i Texinfo nie.

Dodając tę ​​radę do org-export-numbered-headline-pjednego z nich, można zrobić nagłówki z UNNUMBEREDeksportem nieruchomości as \section*{...}, wykluczając je z TOC podczas eksportu do LaTeX i Beamer:

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

Należy pamiętać, że od 2014-10-03 20:06:34 (GMT) kontrola UNNUMBERED jest już wbudowana

Konstantyn
źródło
1
Dzięki, działa to dobrze w przypadku eksportu HTML. Potrzebuję tego również do pracy dla LaTeX / Beamer; Nie wspominałem o tym na początku, ponieważ założyłem, że musi istnieć ogólne rozwiązanie, które będzie działać dla wszystkich (lub przynajmniej większości) back-endów eksportu ... Czy masz jakiś pomysł, jak rozwiązać ten problem w przypadku eksportu LaTeX? Porównując .htmli .texpliki, które org-modepowstają podczas eksportowania, wydaje się, że głównym problemem jest org-moderęczne tworzenie spisu treści dla HTML, ale po prostu zrzut pliku ogólnego \tableofcontentsdo .texpliku.
itsjeyd
@itsjeyd: Nie sądzę, aby możliwe było ogólne rozwiązanie: jak powiedziałeś, backendy eksportu LaTeX (i beamer oraz Texinfo) używają poleceń rodzimych do budowania TOC, podczas gdy inne backendy budują TOC ręcznie. To jest możliwe, aby wykluczyć sekcję z TOC w LaTeX , ale nie znalazłem rozwiązania, które zostanie zaakceptowane przez społeczność jako prawą . Używając pojęcia I umieszczonego w org-modekodzie eksportowej wymaga poważnych zmian org-latex-headline. Jeśli chodzi o implementację tego w kopii zapasowej Texinfo, nawet nie wiem od czego zacząć.
Constantine
OK, wielkie dzięki za kontynuację. W przypadku Beamera myślę, że skorzystam z tego, aby sekcje, których nie chcę pojawiać się w spisie treści, były nienumerowane . Sprawa zamknięta. :)
itsjeyd
@itsjeyd: Można modyfikować org-export-numbered-headline-p, aby uzyskać ten problem niemal automatycznie - jeśli przekształcając go bez numeru sekcji jest opcja, że jest. Mogę rozwinąć, jeśli jesteś zainteresowany.
Constantine
Proszę - zawsze zainteresowany uproszczeniem rozwiązań!
itsjeyd