Pandoc - Inserting pages before generated Table of Contents

前端 未结 4 1972
心在旅途
心在旅途 2020-12-16 12:03

I\'ve been playing around with Pandoc.

Is there anyway to insert pages before the generated Table of Contents?

For example:

  • Title Page
相关标签:
4条回答
  • 2020-12-16 12:42

    For this answer, I'm going to assume you are generating markdown, though the process is the same for other file formats as well.

    The key insight is that Pandoc uses templates to determine the final placement. It has default templates and if you modify them, you can change the order of sections.

    1. Find the default template

      > pandoc -D markdown
      $if(titleblock)$
      $titleblock$
      
      $endif$
      $for(header-includes)$
      $header-includes$
      
      $endfor$
      $for(include-before)$
      $include-before$
      
      $endfor$
      $if(toc)$
      $toc$
      
      $endif$
      $body$
      $for(include-after)$
      
      $include-after$
      $endfor$
      

      You won't need this for the next step, but if you are curious where these files live, asking for a nonsense file type works (though I'm sure there is a better way):

      > pandoc -D nonsense
      pandoc: Could not find data file /usr/local/.../templates/default.nonsense
      
    2. Copy and modify the default template

      > pandoc -D markdown > modified.markdown
      

      Using your favorite text editor, you can open modified.markdown to put the $body$ before the $toc$.

      $body$
      $if(toc)$
      $toc$
      $endif$
      
    3. Use the modified template

      > pandoc --template modified.markdown <... rest of your command ...>
      
    0 讨论(0)
  • 2020-12-16 12:57

    I am guessing you want to create a HTML File with Title Page or Header Information. The solution is to do it in more than one Step.

    First you compile the Title Page together any other pages to one html.

    $ pandoc .\01_HEADER.markdown -o header.html
    

    Then you include that header.html before the body:

    $ pandoc -s -S --toc -B .\header.html .\02_Document.markdown -o complete_doc.html
    

    Done.


    The pandoc help states it's possibilities to make multi-part documents possible, both -B and -H work, but i think -B is more correct in my case.

      -H FILENAME           --include-in-header=FILENAME                    
      -B FILENAME           --include-before-body=FILENAME                  
      -A FILENAME           --include-after-body=FILENAME                  
    

    In my case i do it with a stylesheet and get a perfect document:

    $ pandoc -s -S -c .\res\github-pandoc.css .\01_HEADER.markdown -o header.html
    $ pandoc -s -S --toc --toc-depth=2 -c .\res\github-pandoc.css -B .\header.html .\02_Document.markdown -o complete_document.html
    
    0 讨论(0)
  • 2020-12-16 12:58

    Use the include-before tag you can observe in the output of pandoc --print-default-template=markdown

    ---
    title: My Way
    toc: true
    include-before: |
        See these lines
        Come __before__ the [toc](/dev/null)
    ---
    
    # I've lived a life that's full
    # I traveled each and every highway
    # But more, much more than this
    # I did it my way
    
    0 讨论(0)
  • 2020-12-16 13:04

    None of these solutions worked for me, and one top-level comment suggested using Pandoc templates without details. So here's a simple fix.

    • Download the default Pandoc template from here: https://github.com/jgm/pandoc-templates, e.g. I used default.tex but renamed it template.tex.

    • Modify the template to insert additional content, create new pages, etc. e.g.:

      \input{title.tex}
      \newpage
      \input{acknowledgements.tex}
      \newpage
      
      $if(toc)$
      $if(toc-title)$
      \renewcommand*\contentsname{$toc-title$}
      $endif$
      
      \newpage
      
    • Use this modified template rather than the default template, e.g.

      pandoc --template=template.tex -o document.pdf document.tex`.
      

    That's it.

    0 讨论(0)
提交回复
热议问题