问题 Pandoc - 在生成的目录之前插入页面


我一直在玩Pandoc。

无论如何在生成的目录之前插入页面?

例如:

  • 封面
  • 插入自定义页面001
  • 插入自定义页面002
  • (生成)目录

提前谢谢了!


5648
2017-08-31 11:28


起源

是的,看看 johnmacfarlane.net/pandoc/README.html#templates - mb21


答案:


对于这个答案,我将假设您正在生成markdown,尽管其他文件格式的过程也相同。

关键的见解是Pandoc使用模板来确定最终的位置。它有默认模板,如果您修改它们,您可以更改部分的顺序。

  1. 找到默认模板

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

    下一步你不需要这个,但是如果你好奇这些文件存在的地方,那么要求一个无意义的文件类型是有效的(虽然我确信有更好的方法):

    > pandoc -D nonsense
    pandoc: Could not find data file /usr/local/.../templates/default.nonsense
    
  2. 复制并修改默认模板

    > pandoc -D markdown > modified.markdown
    

    使用您喜欢的文本编辑器,您可以打开modified.markdown来放置 $body$ 之前 $toc$

    $body$
    $if(toc)$
    $toc$
    $endif$
    
  3. 使用修改后的模板

    > pandoc --template modified.markdown <... rest of your command ...>
    

7
2017-10-04 13:11



我不确定这是OP所要求的:他们想在TOC之前添加一些自定义页面,但不是整个身体,它应该仍然出现。 - scoa
是的,这个答案并没有真正考虑到身体应该仍然存在 后 TOC。我想在Markdown中创建一个标题页,它应该在TOC之前。这可能吗? - Joshua Muheim


我猜你想要创建一个带有标题页或标题信息的HTML文件。解决方案是在多个步骤中完成。

首先,将任何其他页面的标题页编译为一个html。

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

然后在body之前包含header.html:

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

完成。


pandoc帮助表明可以使多部分文档成为可能,-B和-H都可以工作,但我认为-B在我的情况下更正确。

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

在我的情况下,我用样式表做,并获得一个完美的文档:

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

3
2018-06-21 08:09