Pregunta:
P: ¿Cómo puedo decirle org-mode
que excluya títulos específicos de la tabla de contenido al exportar?
Por ejemplo, exportando
* Headline 1: Put me in TOC
* Headline 2: Put me in TOC
* Headline 3: DO NOT put me in TOC
a HTML produce
...
<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>
...
pero quiero que produzca
...
<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 sección Tabla de contenido del manual del org-mode
no tiene información sobre esto.
Además, sé que puedo evitar que org-mode
exporte titulares estableciendo la palabra clave COMMENT
través de Cc; ( org-toggle-comment
) o etiquetándolos con :noexport:
Si bien esto evita que los titulares afectados aparezcan en el TOC, también hace que su contenido se omita del documento resultante, que no es lo que quiero.
Respuesta:
Org utiliza org-export-collect-headlines
para recopilar los titulares que deberían estar en la tabla de contenido. Esta función ya incluye dos criterios para excluir títulos: la profundidad del título y si se trata de una "sección de nota al pie" (*), por lo que es fácil agregar otro.
Vea la versión modificada de org-export-collect-headlines
continuación. Esta versión permite evitar que aparezca un título en la tabla de contenido mediante la configuración de la propiedad 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.
(*) Sin embargo, no sé qué son las "secciones de notas al pie".
Esto funciona para exportar backends que construyen el TOC manualmente. Los backends LaTeX, Beamer y Texinfo no lo hacen.
Al agregar este consejo a org-export-numbered-headline-p
uno puede crear titulares con la propiedad UNNUMBERED
export como \section*{...}
, excluyéndolos de TOC al exportar a LaTeX y Beamer:
(advice-add 'org-export-numbered-headline-p :around
(lambda (orig headline info)
(and (funcall orig headline info)
(not (org-element-property :UNNUMBERED headline)))))
Tenga en cuenta que a partir de 2014-10-03 20:06:34 (GMT) la verificación de UNNUMBERED ya está incorporada