我可以使用YAML元数据设置命令行参数

时间:2015-05-27 12:59:31

标签: yaml markdown pandoc

Pandoc支持降价文档中的YAML metadata block。这可以设置标题和作者等。它还可以通过更改字体大小,边距宽度和包含的图形的帧大小来操纵PDF输出的外观。提供了大量详细信息here

我想使用元数据块来记住我应该使用的命令行参数,例如--toc--number-sections。我尝试了这个,将以下内容添加到我的降价顶部:

---
title: My Title
toc: yes
number-sections: yes

---

然后我使用了命令行:

pandoc -o guide.pdf articheck_guide.md

确实生成了一个目录,但未对这些部分进行编号。我想知道为什么会这样,如果有一种方法我可以从文档中指定这种东西,这样我就不需要在命令行中添加它。

2 个答案:

答案 0 :(得分:3)

YAML元数据不作为参数传递给pandoc,而是作为变量传递。当您在MWE上呼叫pandoc时,它不会产生此信息:

pandoc -o guide.pdf articheck_guide.md --toc --number-sections
我们认为会这样做。相反,它叫:

pandoc -o guide.pdf articheck_guide.md -V toc:yes -V number-sections:yes

那么,为什么MWE会产生一个toc?因为默认的乳胶模板使用toc变量:

~$ pandoc -D latex | grep toc

$if(toc)$
\setcounter{tocdepth}{$toc-depth$}

因此将toc设置为任何值都应该生成一个目录,至少在latex输出中。在此模板中,没有number-sections个变量,因此这个变量不起作用。但是,有一个numbersections变量:

~$ pandoc -D latex | grep number

$if(numbersections)$

numbersections设置为任何值将使用默认模板

在乳胶输出中生成编号
---
title: My Title
toc: yes
numbersections: yes
---

此解决方案的问题在于它仅适用于某种输出格式。我以为我已经阅读了pandoc邮件列表上的某个地方,我们很快就可以按照预期使用YAML块中的元数据(即作为参数而不是变量),但我不能再找到它了,所以也许它很快就不会发生。

答案 1 :(得分:3)

查看 panzer (GitHub存储库)

这是最近由Mark Sprevak宣布并发布的 - 一款软件,增加了'款式的概念。到潘多克。

它基本上是Pandoc的包装器。它最大限度地利用了YAML元数据块的概念。

'风格'提供了一种方法,用一行来设置Pandoc文档转换过程的所有选项("我希望这个文档是文章/ CV / notes / letter。" )。

您可以将此视为比Pandoc模板更通用的抽象。样式是......的组合。

  • ... Pandoc命令行选项,
  • ...元数据设置,
  • ...模板,
  • ...运行过滤器的说明,
  • ...运行前/后处理器的说明。

可以按输出类型和每个文档自定义这些设置。风格可以......

  • ...合并
  • ......可以相互承担继承关系。

panzer样式简化了Makefile:它们将有关文档外观的所有内容捆绑在一个位置 - YAML元数据(Markdown文件中的块或单独的文件)。

您只需在文档中添加一行元数据(style: ...),它就会被视为字母/文章/简历/笔记本或其他任何内容。