Modo organizacional: excluir títulos específicos do sumário ao exportar

13

P: Como posso saber org-modepara excluir títulos específicos do índice ao exportar?

Por exemplo, exportando

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

para HTML produz

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

mas eu quero que ele produza

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

A seção Índice do org-modemanual não possui nenhuma informação sobre isso.

Além disso, sei que não posso org-modeexportar títulos definindo a COMMENTpalavra-chave via C-c ;( org-toggle-comment) ou marcando-os com :noexport:. Embora isso evite que as manchetes afetadas apareçam no sumário, também faz com que o conteúdo seja omitido no documento resultante, o que não é o que eu quero.

itsjeyd
fonte
1
Esta não é a resposta que você está procurando, mas apenas como uma nota de outro beco sem saída: EXPORT_OPTIONS: toc:nil quase faz o que deseja, mas apenas quando você exporta apenas a subárvore. Para esclarecer, você deseja que a seção ainda seja numerada ou deseja algo semelhante ao LaTeX \section*?
Sean Allred
@SeanAllred Gostaria que a seção ainda estivesse numerada. De maneira mais geral, não quero alterar nada sobre a maneira como as seções individuais são exportadas. Só não quero que alguns deles apareçam no sumário.
itsjeyd

Respostas:

12

A organização usa org-export-collect-headlinespara coletar manchetes que devem estar no sumário. Essa função já inclui dois critérios para excluir títulos: a profundidade do título e se é uma "seção de nota de rodapé" (*), portanto é fácil adicionar outro.

Veja a versão modificada org-export-collect-headlinesabaixo. Esta versão permite impedir que um título apareça no sumário definindo a NOTOCpropriedade

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

(*) Não sei o que são "seções de notas de rodapé".

Isso funciona para back-ends de exportação que criam o sumário manualmente. Os back-ends LaTeX, Beamer e Texinfo não.

Ao adicionar esse conselho a org-export-numbered-headline-palguém pode ser manchete com a UNNUMBEREDexportação de propriedades como \section*{...}, excluindo-as do TOC ao exportar para o LaTeX e Beamer:

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

Observe que, a partir de 2014-10-03 20:06:34 (GMT), a verificação de UNNUMBERED já está embutida

Constantine
fonte
1
Obrigado, isso funciona bem para exportações de HTML. Na verdade, eu também preciso que isso funcione para o LaTeX / Beamer; Não mencionei isso inicialmente porque supus que deveria haver uma solução genérica que funcionaria para todos (ou pelo menos a maioria) dos back-ends de exportação ... Você tem alguma idéia de como resolver esse problema para a exportação do LaTeX? Comparando .htmle .texarquivos org-modeproduzidos durante a exportação, o principal problema parece ser que org-modecria o sumário manualmente para HTML, mas simplesmente despeja um genérico \tableofcontentsno .texarquivo.
itsjeyd
@itsjeyd: Eu não acho que uma solução genérica seja possível: como você disse, os back-ends de exportação do LaTeX (e beamer e Texinfo) usam comandos nativos para criar o TOC, enquanto outros back-ends criam o TOC manualmente. Ele é possível excluir uma seção de TOC em LaTeX , mas eu não encontrei uma solução que seja aceite pela comunidade como o caminho certo . Usar a idéia a que vinculei no org-modecódigo de exportação exigiria grandes alterações org-latex-headline. Quanto à implementação disso no Texinfo, nem sei por onde começar.
Constantine
OK, muito obrigado pelo acompanhamento. Para Beamer, acho que vou apenas recortar as seções que não quero que apareçam no sumário . Caso encerrado. :)
itsjeyd
@itsjeyd: Você pode modificar org-export-numbered-headline-ppara obter esse comportamento quase automaticamente - se transformá-lo em uma seção não numerada, é uma opção. Eu posso elaborar se você estiver interessado.
Constantine
Por favor, sempre interessado em simplificar soluções!
itsjeyd