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

Ben*_*ohn 5 markdown yaml pandoc

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

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

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

---
Run Code Online (Sandbox Code Playgroud)

然后我使用命令行:

pandoc -o guide.pdf articheck_guide.md
Run Code Online (Sandbox Code Playgroud)

确实产生了一个目录,但没有给章节编号。我想知道这是为什么,如果有办法可以从文档中指定这种东西,这样我就不需要在命令行中添加它。

sco*_*coa 5

YAML 元数据不pandoc作为参数传递,而是作为变量传递。当您调用pandocMWE 时,它不会产生以下结果:

pandoc -o guide.pdf articheck_guide.md --toc --number-sections
Run Code Online (Sandbox Code Playgroud)

正如我们所想的那样。相反,它调用:

pandoc -o guide.pdf articheck_guide.md -V toc:yes -V number-sections:yes
Run Code Online (Sandbox Code Playgroud)

那么,为什么你们 MWE 会制作目录呢?因为默认的乳胶模板使用toc变量:

~$ pandoc -D latex | grep toc

$if(toc)$
\setcounter{tocdepth}{$toc-depth$}
Run Code Online (Sandbox Code Playgroud)

因此,设置toc为任何值都应该生成一个目录,至少在乳胶输出中是这样。在这个模板中,没有number-sections变量,所以这个不起作用。然而,有一个numbersections变数:

~$ pandoc -D latex | grep number

$if(numbersections)$
Run Code Online (Sandbox Code Playgroud)

设置numbersections为任何值都会使用默认模板在乳胶输出中生成编号

---
title: My Title
toc: yes
numbersections: yes
---
Run Code Online (Sandbox Code Playgroud)

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