Mode Org: exclure des titres spécifiques de la table des matières lors de l'exportation

13

Q: Comment puis-je dire org-moded'exclure des titres spécifiques de la table des matières lors de l'exportation?

Par exemple, exporter

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

au HTML produit

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

mais je veux qu'il produise

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

La section Table des matières du org-modemanuel ne contient aucune information à ce sujet.

De plus, je sais que je peux éviter org-moded'exporter les titres en définissant le COMMENTmot - clé via C-c ;( org-toggle-comment) ou en les marquant avec :noexport:. Bien que cela empêche les titres concernés d'apparaître dans la table des matières, cela entraîne également l'omission de leur contenu dans le document résultant, ce qui n'est pas ce que je veux.

itsjeyd
la source
1
Ce n'est pas la réponse que vous cherchez, mais juste comme une note d'une autre impasse: fait EXPORT_OPTIONS: toc:nil presque ce que vous voulez, mais uniquement lorsque vous exportez uniquement le sous-arbre. Pour clarifier, voulez-vous que la section soit toujours numérotée, ou voulez-vous quelque chose qui ressemble à LaTeX \section*?
Sean Allred
@SeanAllred J'aimerais que la section soit toujours numérotée. Plus généralement, je ne veux rien changer à la façon dont les sections individuelles sont exportées. Je ne veux tout simplement pas que certains d'entre eux apparaissent dans la table des matières.
itsjeyd

Réponses:

12

Org utilise org-export-collect-headlinespour collecter les titres qui devraient figurer dans la table des matières. Cette fonction inclut déjà deux critères pour exclure les titres: la profondeur du titre et s'il s'agit d'une "section de note de bas de page" (*), il est donc facile d'en ajouter une autre.

Voir la version modifiée de org-export-collect-headlinesci - dessous. Cette version permet d'empêcher un titre de s'afficher dans la table des matières en définissant la NOTOCpropriété.

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

(*) Je ne sais pas ce que sont les "sections de notes de bas de page".

Cela fonctionne pour les backends d'exportation qui génèrent la table des matières manuellement. Les backends LaTeX, Beamer et Texinfo ne le font pas.

En ajoutant ces conseils à org-export-numbered-headline-pun, vous pouvez faire les gros titres avec l' UNNUMBEREDexportation de propriété en les \section*{...}excluant de la table des matières lors de l'exportation vers LaTeX et Beamer:

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

Notez que depuis le 2014-10-03 20:06:34 (GMT), la vérification de UNNUMBERED est déjà intégrée

Constantine
la source
1
Merci, cela fonctionne très bien pour les exportations HTML. En fait, j'ai également besoin de cela pour travailler pour LaTeX / Beamer; Je n'ai pas mentionné cela au départ parce que je supposais qu'il devait y avoir une solution générique qui fonctionnerait pour tous (ou au moins la plupart) des back-ends d'exportation ... Avez-vous une idée de comment résoudre ce problème pour l'exportation LaTeX? La comparaison .htmlet les .texfichiers qui org-modeproduisent lors de l' exportation, le principal problème semble être que org-modeconstruit la table des matières manuellement pour le HTML, mais dépotoirs simplement un générique \tableofcontentsdans le .texfichier.
itsjeyd
@itsjeyd: Je ne pense pas qu'une solution générique soit possible: comme vous l'avez dit, les backends d'exportation LaTeX (et beamer et Texinfo) utilisent des commandes natives pour construire la table des matières tandis que d'autres backends construisent la table des matières manuellement. Il est possible d' exclure une section de la table des matières dans LaTeX , mais je n'ai pas trouvé de solution acceptée par la communauté comme étant la bonne . L'utilisation de l'idée à laquelle j'ai lié dans org-modele code d'exportation nécessiterait des modifications majeures org-latex-headline. Quant à la mise en œuvre de cela dans le Texinfo soutenu, je ne sais même pas par où commencer.
Constantine
OK, merci beaucoup pour le suivi. Pour Beamer, je pense que je vais simplement recourir à rendre les sections que je ne veux pas apparaître dans la table des matières non numérotées . Affaire classée. :)
itsjeyd
@itsjeyd: Vous pouvez modifier org-export-numbered-headline-ppour obtenir ce comportement presque automatiquement - si le transformer en une section non numérotée est une option, c'est-à-dire. Je peux élaborer si vous êtes intéressé.
Constantine
Veuillez faire - toujours intéressé à simplifier les solutions!
itsjeyd