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



Pandoc在markdown文档中支持YAML元数据块。这可以设置标题和作者等。它还可以通过更改包含的图形的字体大小、边距宽度和框架大小来操纵PDF输出的外观。这里有很多细节。

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

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

然后我使用命令行:

pandoc -o guide.pdf articheck_guide.md

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

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呢?因为默认的latex模板使用了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设置为任何值将在latex输出中使用默认模板生成编号

---
title: My Title
toc: yes
numbersections: yes
---

这个解决方案的问题是它只适用于某些输出格式。我想我在pandoc邮件列表的某个地方读到过,我们很快就能按照预期在YAML块中使用元数据。作为参数而不是变量),但我找不到它了,所以可能不会很快发生。

看看panzer(GitHub repository)

这是Mark Sprevak最近宣布并发布的一个软件,它为Pandoc添加了"样式"的概念。

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

style提供了一种方法来设置所有选项的Pandoc文档转换过程中的一行("I want this document be a article/CV/notes/letter.")

您可以将其视为比Pandoc模板更一般的抽象。样式是…的组合

  • …Pandoc命令行选项,
  • …元数据设置,
  • …模板,
  • …运行过滤器的指令,以及

这些设置可以针对每个输出类型以及每个文档进行定制。

  • …组合和
  • …彼此之间可以承受继承关系。

panzer样式简化了Makefiles:它们将与文档外观有关的所有内容捆绑在一个地方——YAML元数据(Markdown文件中的一个块,或一个单独的文件)。

您只需添加一行元数据(style: ...)到您的文档,它将被视为一封信/文章/CV/笔记本或其他。

最新更新