使用标题块将多个文件编译为一个文件

mat*_*fee 12 pandoc

我想知道如何将多个pandoc文件编译成一个输出文档,其中每个输入文件都有一个标题块.

例如,假设我有两个文件:

ch1.md:

% Chapter 1
% John Doe
% 1 Jan 2014
Here is chapter 1.
Run Code Online (Sandbox Code Playgroud)

ch2.md:

% Chapter 2
% Jane Smith
% 3 Jan 2014
Here is chapter 2.
Run Code Online (Sandbox Code Playgroud)

通常使用多个输入文件,您可以通过将它们提供给pandoc来编译它们:

pandoc ch1.md ch2.md --standalone -o output.html
Run Code Online (Sandbox Code Playgroud)

但是,pandoc在编译之前连接输入文件,这意味着只有第一个标题块(from ch1.md)被正确设置样式.我希望每个标题块都适当地设置样式(例如,在html中,标题块的第一行用样式<h1 class="title">,第二行<h2 class="author">等等).

(注意:我还尝试将每个章节单独编译为独立,然后使用它们将它们连接在一起pandoc.这将删除1之后章节的标题样式,但保留作者/日期的样式).

为什么?我可以:

  • 在每个章节中编写自己独立的文档,并适当标记作者/标题/日期
  • 将整个文档编译在一起,并为每一章适当标记作者/标题/日期(可以使用该--chapters选项)

我可以直接使用'#'(h1)指定标题,使用'##'(h2)指定作者,并在每个章节文件中直接指定'###'(h3),但这意味着pandoc不会"知道"我的文件的标题/标题/日期是什么,所以(例如)如果我编译成乳胶,它将不会适当地使用\date{}\author{}标签.

mat*_*fee 13

我写了一个pandoc过滤器,当在每个章节的文件上运行时,插入标题作为标题(标题为1级,作者为2级,日期为3级.这是HTML编写者所做的).

这可以让你在每章运行pandoc单独(生产pandoc'd输出加上格式化的标题栏),然后在所有的章节运行pandoc 一起编译单一文件.

过滤器在这里是基础(我对代码故障等不负责任):https://gist.github.com/mathematicalcoffee/e4f25350449e6004014f

你可以修改它,如果你想要它的格式不同(例如像这样作者/日期出现在目录中,因为它们是标题,这是不正确的......但这是一个不同的问题,因为它发生在默认情况下也是HTML编写者.

我的工作流程现在是这样的:

FORMAT=latex  # as understood by -t <format> in pandoc
FLAGS=--toc   # other flags for pandoc, --smart, etc
OUT=pdf       # output extension
for f in Chapter*.md; do \
    pandoc $FLAGS -t $FORMAT --filter ./chapter.hs $f; \
    echo ""; \
done | pandoc $FLAGS --standalone -o thesis.$OUT
Run Code Online (Sandbox Code Playgroud)

我在哪里chmod +x chapter.hs,它在当前目录中.

(我还有一个title.txt我用前面的整个论文的标题栏(与每章的标题栏相对)).

我收到了pandoc google小组的一些帮助,这很棒.