2014-01-21 31 views
7

我想知道如何编译多个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在com之前连接输入文件打桩,意思是只有第一个标题栏(从ch1.md)是适当的样式。 我想每个标题块被适当地样式化(例如在html中,标题栏的第一行的样式为<h1 class="title">,第二行<h2 class="author">等等)。 (注意:我也尝试将每章分别编译为独立,然后使用pandoc将它们连接在一起。这为1之后的章节删除标题样式,但为作者/日期保留样式)。

为什么?我可以:

  • 编译它自己单独的文档中每个章节和作者/标题/日期被标记适当
  • 一起编译整个文档和作者/标题/日期被适当标记为每个章节在各(可使用--chapters选项)

我可以指定与 '#'(H1),作者,标题 '##'(H2),和日期 '###'(H3)章节文件,但这意味着pandoc不会“知道”我的文档的标题/标题/日期是什么,所以(例如)如果我编译为latex,它不会使用\date{}\author{}标签适当。

+0

你可能想分别编译它们,然后用pdf concatter连接它们。我会把这个问题提交给邮件列表,希望有人能有更好的解决方案。 – Shahbaz

+0

@Shahbaz - 我不希望受到PDF的限制,但是如果我对PDF输出感兴趣,那是可行的。现在我已经在一起攻击了一个足够好的解决方案。 –

回答

13

我写了一个pandoc filter,它在每个单独章节的文件上运行时,将标题块作为标题插入(标题级别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 

在那里我已经chmod +x chapter.hs,它是在当前目录中。 (我另外有一个title.txt,我用整个论文的标题栏(而不是每章的标题栏))突出前面。

我从pandoc google group得到了一些帮助,这很棒。

2

你不能用%标题栏来做到这一点,但你可以用新的YAML标题栏来完成。

开始每个文档是这样的:

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

当文档被连接到一起,第一个值组将优先于其他人,所以使用相同的参数(例如后续YAML线“的称号:” )将被忽略。 (请参阅“扩展名:yaml_metadata_block”下的readme。)

+0

这可以单独编译每个文档,但是当我一起编译文档时,会丢失后续章节的标题等(因为随后的YAML块会被忽略)。目前我只有一个Makefile,当编译单独的文档(将标题块降级为章节)时,用标题/作者/日期替换%块为'#','##'等。我想我应该编写一个适当的脚本,将每个标题作为章节编译成一个级别时将其降级一级? (我想用乳胶你必须选择说第一章作为文件标题/作者)。 –

相关问题