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

时间:2014-01-21 02:24:04

标签: pandoc

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

E.g。假设我有两个文件:

ch1.md

% Chapter 1
% John Doe
% 1 Jan 2014
Here is chapter 1.

ch2.md

% Chapter 2
% Jane Smith
% 3 Jan 2014
Here is chapter 2.

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

pandoc ch1.md ch2.md --standalone -o output.html

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

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

为什么?我可以:

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

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

2 个答案:

答案 0 :(得分:13)

我写了一个pandoc filter,当在每个章节的文件上运行时,插入标题栏作为标题(标题为1级,作者为2级,日期为3级。这就是HTML编写器确实如此。

这使您可以单独在每个章节上运行pandoc(以生成pandoc&#39; 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

我已经chmod +x chapter.hs在当前目录中。

(我还有一个title.txt,我在前面加上整个论文的标题栏(而不是每章的标题栏)。

我从pandoc google group获得了一些很棒的帮助。

答案 1 :(得分:2)

您无法使用%标题栏执行此操作,但您可以使用新的YAML标题栏执行此操作。

像这样开始每个文档:

---
title:  Chapter One
author:  Me
date: June 4
...

当文档连接在一起时,第一个值集将优先于其他值,因此将忽略使用相同参数的后续YAML行(例如&#34; title:&#34;)。 (参见&#34;扩展名下的readme:yaml_metadata_block&#34;。)