Modo Org: excluir titulares específicos de TOC al exportar

13

P: ¿Cómo puedo decir org-modeque excluya titulares 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 org-modemanual no tiene ninguna información al respecto.

Además, sé que puedo evitar org-modeexportar titulares configurando la COMMENTpalabra clave a través de C-c ;( org-toggle-comment) o etiquetándolas con :noexport:. Si bien esto evita que los titulares afectados aparezcan en la tabla de contenido, también hace que su contenido se omita del documento resultante, que no es lo que quiero.

itsjeyd
fuente
1
Esta no es la respuesta que está buscando, sino solo como una nota de otro callejón sin salida: EXPORT_OPTIONS: toc:nil casi hace lo que quiere, pero solo cuando exporta solo el subárbol. Para aclarar, ¿desea que la sección siga numerada o desea algo similar a LaTeX \section*?
Sean Allred
@SeanAllred Me gustaría que la sección aún esté numerada. En términos más generales, no quiero cambiar nada sobre la forma en que se exportan las secciones individuales. Simplemente no quiero que algunos de ellos aparezcan en la tabla de contenido.
itsjeyd

Respuestas:

12

Org utiliza org-export-collect-headlinespara recopilar 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 es una "sección de nota al pie" (*), por lo que es fácil agregar otra.

Vea la versión modificada de org-export-collect-headlinesabajo. Esta versión permite evitar que aparezca un título en la tabla de contenido al establecer la NOTOCpropiedad.

* 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 los backends de exportación que crean el TOC manualmente. Los backends de LaTeX, Beamer y Texinfo no lo hacen.

Al agregar este consejo a org-export-numbered-headline-puno, puede aparecer titulares con la UNNUMBEREDexportación de propiedades 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 del 2014-10-03 20:06:34 (GMT) la verificación de UNNUMBERED ya está integrada

Constantina
fuente
1
Gracias, esto funciona bien para las exportaciones HTML. De hecho, también necesito que esto funcione para LaTeX / Beamer; No mencioné esto inicialmente porque supuse que tenía que haber una solución genérica que funcionara para todos (o al menos la mayoría) de los back-end de exportación ... ¿Tiene alguna idea de cómo abordar este problema para la exportación de LaTeX? La comparación .htmly los .texarchivos que se org-modeproducen al exportar, el problema principal parece ser que org-modeconstruye el TOC manualmente para HTML, pero simplemente descarga un genérico \tableofcontentsen el .texarchivo.
itsjeyd
@itsjeyd: No creo que sea posible una solución genérica: como dijiste, los backends de exportación de LaTeX (y beamer y Texinfo) usan comandos nativos para construir TOC, mientras que otros backends construyen TOC manualmente. Que es posible excluir una sección de TOC en LaTeX , pero no he encontrado una solución que sea aceptada por la comunidad como el más adecuado . Usar la idea a la que me vinculé en org-modeel código de exportación requeriría grandes cambios org-latex-headline. En cuanto a la implementación de esto en el Texinfo respaldado, incluso no sé por dónde empezar.
Constantino
OK, muchas gracias por seguirnos. Para Beamer, creo que simplemente recurriré a hacer que las secciones que no quiero mostrar en el TOC estén sin numerar . Caso cerrado. :)
itsjeyd
@itsjeyd: puede modificar org-export-numbered-headline-ppara obtener este comportamiento casi automáticamente, si convertirlo en una sección sin numerar es una opción, es decir. Puedo dar más detalles si te interesa.
Constantine
¡Por favor, siempre interesado en simplificar las soluciones!
itsjeyd