请帮助乌克兰!
赞助商
Pandoc   一个通用文档转换器

Pandoc 用户手册

概要

pandoc [选项] [输入文件]…

描述

Pandoc 是一个用于在不同标记格式之间转换的 Haskell 库,也是一个使用此库的命令行工具。

Pandoc 可以在多种标记和字处理格式之间进行转换,包括但不限于各种风格的 MarkdownHTMLLaTeXWord docx。有关输入和输出格式的完整列表,请参阅下方 选项 中的 --from--to 选项。Pandoc 还可以生成 PDF 输出:请参阅下方的 创建 PDF

Pandoc 的增强版 Markdown 包含 表格定义列表元数据块脚注引用数学公式 等多种语法。请参阅下方的 Pandoc 的 Markdown 部分。

Pandoc 采用模块化设计:它由一组读取器(用于解析给定格式的文本并生成文档的本机表示,即抽象语法树或 AST)和一组写入器(用于将此本机表示转换为目标格式)组成。因此,添加输入或输出格式仅需添加相应的读取器或写入器。用户还可以运行自定义的 pandoc 过滤器 来修改中间的 AST。

由于 Pandoc 的文档中间表示不如许多它所转换的格式富有表现力,因此不应期望所有格式之间的转换都能做到完美。Pandoc 试图保留文档的结构元素,但不会保留页边距大小等格式细节。并且某些文档元素,例如复杂的表格,可能不适合 Pandoc 的简单文档模型。虽然从 Pandoc 的 Markdown 到所有格式的转换都力求完美,但从比 Pandoc 的 Markdown 更具表现力的格式进行的转换可能会有信息损失。

使用 pandoc

如果未指定输入文件,则默认从 stdin 读取输入。输出默认发送到 stdout。要输出到文件,请使用 -o 选项。

pandoc -o output.html input.txt

默认情况下,Pandoc 生成一个文档片段。要生成一个独立文档(例如,包含 <head><body> 的有效 HTML 文件),请使用 -s--standalone 标志。

pandoc -s -o output.html input.txt

有关如何生成独立文档的更多信息,请参阅下方的 模板

如果给定多个输入文件,Pandoc 将在解析之前将它们全部连接起来(文件之间用空行分隔)。(使用 --file-scope 单独解析文件。)

指定格式

输入和输出的格式可以使用命令行选项明确指定。输入格式可以使用 -f/--from 选项指定,输出格式可以使用 -t/--to 选项指定。因此,要将 hello.txt 从 Markdown 转换为 LaTeX,您可以输入:

pandoc -f markdown -t latex hello.txt

要将 hello.html 从 HTML 转换为 Markdown:

pandoc -f html -t markdown hello.html

支持的输入和输出格式列在下方的 选项 部分(请参阅 -f 了解输入格式,-t 了解输出格式)。您也可以使用 pandoc --list-input-formatspandoc --list-output-formats 来打印支持格式的列表。

如果未明确指定输入或输出格式,Pandoc 将尝试根据文件名的扩展名进行猜测。因此,例如:

pandoc -o hello.tex hello.txt

将把 hello.txt 从 Markdown 转换为 LaTeX。如果未指定输出文件(因此输出到 stdout),或者输出文件的扩展名未知,则输出格式将默认为 HTML。如果未指定输入文件(因此输入来自 stdin),或者输入文件的扩展名未知,则输入格式将假定为 Markdown。

字符编码

Pandoc 对输入和输出均使用 UTF-8 字符编码。如果您的本地字符编码不是 UTF-8,您应该通过 iconv 管道输入和输出。

iconv -t utf-8 input.txt | pandoc | iconv -f utf-8

请注意,在某些输出格式(如 HTML、LaTeX、ConTeXt、RTF、OPML、DocBook 和 Texinfo)中,字符编码信息包含在文档头部,只有在使用 -s/--standalone 选项时才会包含。

创建 PDF

要生成 PDF,请指定一个扩展名为 .pdf 的输出文件。

pandoc test.txt -o test.pdf

默认情况下,Pandoc 将使用 LaTeX 创建 PDF,这需要安装 LaTeX 引擎(请参阅下方的 --pdf-engine)。另外,Pandoc 可以使用 ConTeXt、roff ms 或 HTML 作为中间格式。为此,像以前一样指定一个扩展名为 .pdf 的输出文件,但在命令行中添加 --pdf-engine 选项或 -t context-t html-t ms。用于从中间格式生成 PDF 的工具可以使用 --pdf-engine 指定。

您可以使用变量控制 PDF 样式,具体取决于所使用的中间格式:请参阅 LaTeX 变量ConTeXt 变量wkhtmltopdf 变量ms 变量。当 HTML 用作中间格式时,输出可以使用 --css 进行样式设置。

为了调试 PDF 创建过程,查看中间表示会很有用:例如,不要使用 -o test.pdf,而是使用 -s -o test.tex 来输出生成的 LaTeX。然后您可以使用 pdflatex test.tex 进行测试。

使用 LaTeX 时,需要提供以下宏包(它们包含在所有最新版本的 TeX Live 中):amsfontsamsmathlmunicode-mathiftexlistings(如果使用 --listings 选项)、fancyvrblongtablebooktabs、[multirow](如果文档包含带有跨多行的单元格的表格)、graphicx(如果文档包含图像)、bookmarkxcolorsoulgeometry(设置了 geometry 变量时)、setspace(设置了 linestretch 时),以及 babel(设置了 lang 时)。如果设置了 CJKmainfont,则在使用 xelatex 时需要 xeCJK,否则在使用 lualatex 时需要 luatexja。如果代码在具有彩色背景的方案中突出显示,则需要 framed。使用 xelatexlualatex 作为 PDF 引擎需要 fontspeclualatex 使用 selnoliglua-ulxelatex 使用 bidi(设置了 dir 变量时)。如果设置了 mathspec 变量,xelatex 将使用 mathspec 而不是 unicode-math。如果可用,将使用 upquotemicrotype 宏包;如果 csquotes 变量或元数据字段设置为真值,将使用 csquotes 进行 排版。可选地,natbibbiblatexbibtexbiber 宏包可用于 引文渲染。如果存在以下宏包,它们将用于改善输出质量,但 Pandoc 不要求它们必须存在:upquote(用于逐字环境中直引号)、microtype(用于更好的间距调整)、parskip(用于更好的段落间距)、xurl(用于 URL 中更好的换行),以及 footnotehyperfootnote(允许表格中脚注)。

从 Web 读取

除了输入文件,还可以提供一个绝对 URI。在这种情况下,Pandoc 将使用 HTTP 获取内容。

pandoc -f html -t markdown https://www.fsf.org

从 URL 请求文档时,可以提供自定义的 User-Agent 字符串或其他 HTTP 头。

pandoc -f html -t markdown --request-header User-Agent:"Mozilla/5.0" \
  https://www.fsf.org

选项

通用选项

-f 格式, -r 格式, --from=格式, --read=格式

指定输入格式。格式 可以是:

可以通过在格式名称后附加 +EXTENSION-EXTENSION 来单独启用或禁用扩展。有关扩展及其名称的列表,请参阅下方的 扩展。请参阅下方的 --list-input-formats--list-extensions

-t 格式, -w 格式, --to=格式, --write=格式

指定输出格式。格式 可以是:

请注意,odtdocxepubpdf 输出默认不会直接输出到 stdout,除非强制使用 -o -

可以通过在格式名称后附加 +EXTENSION-EXTENSION 来单独启用或禁用扩展。有关扩展及其名称的列表,请参阅下方的 扩展。请参阅下方的 --list-output-formats--list-extensions

-o 文件, --output=文件

将输出写入 文件 而不是 stdout。如果 文件-,即使指定了非文本格式(docxodtepub2epub3),输出也将转到 stdout。如果输出格式是 chunkedhtml 并且 文件 没有扩展名,则 Pandoc 将创建一个名为 文件 的目录并在其中解压 zip 存档(除非 文件 已存在,在这种情况下将引发错误),而不是生成一个 .zip 文件。

--data-dir=目录

指定搜索 Pandoc 数据文件的用户数据目录。如果未指定此选项,将使用默认用户数据目录。在 *nix 和 macOS 系统上,这将是 XDG 数据目录的 pandoc 子目录(默认情况下为 $HOME/.local/share,可通过设置 XDG_DATA_HOME 环境变量覆盖)。如果该目录不存在但 $HOME/.pandoc 存在,则将使用它(为了向后兼容)。在 Windows 上,默认用户数据目录是 %APPDATA%\pandoc。您可以通过查看 pandoc --version 的输出来查找系统上的默认用户数据目录。放置在此目录中的数据文件(例如,reference.odtreference.docxepub.csstemplates)将覆盖 Pandoc 的正常默认设置。(请注意,用户数据目录不是由 Pandoc 创建的,因此如果您想使用它,需要自行创建。)

-d 文件, --defaults=文件

指定一组默认选项设置。文件 是一个 YAML 文件,其字段对应于命令行选项设置。文档转换的所有选项,包括输入和输出文件,都可以通过默认文件设置。文件将首先在工作目录中搜索,然后在用户数据目录的 defaults 子目录中搜索(请参阅 --data-dir)。可以省略 .yaml 扩展名。有关文件格式的更多信息,请参阅 默认文件 部分。默认文件中的设置可以被命令行上的后续选项覆盖或扩展。

--bash-completion

生成一个 bash 补全脚本。要为 Pandoc 启用 bash 补全,请将以下内容添加到您的 .bashrc

eval "$(pandoc --bash-completion)"
--verbose

输出详细的调试信息。

--quiet

抑制警告消息。

--fail-if-warnings[=true|false]

如果有任何警告,则以错误状态退出。

--log=文件

将日志消息以机器可读的 JSON 格式写入 文件。所有高于 DEBUG 级别的消息都将被写入,无论详细程度设置如何(--verbose, --quiet)。

--list-input-formats

列出支持的输入格式,每行一个。

--list-output-formats

列出支持的输出格式,每行一个。

--list-extensions[=格式]

列出 格式 支持的扩展,每行一个,前面带有 +- 表示其是否在 格式 中默认启用。如果未指定 格式,则给出 Pandoc 的 Markdown 的默认扩展。

--list-highlight-languages

列出支持的语法高亮语言,每行一个。

--list-highlight-styles

列出支持的语法高亮样式,每行一个。请参阅 --highlight-style

-v, --version

打印版本信息。

-h, --help

显示使用帮助信息。

读取器选项

--shift-heading-level-by=数字

将标题级别上移或下移一个正整数或负整数。例如,使用 --shift-heading-level-by=-1,2 级标题变为 1 级标题,3 级标题变为 2 级标题。标题级别不能小于 1,因此低于 1 级的标题将变为普通段落。例外:当移位为 -N 时,文档开头的 N 级标题将替换元数据标题。--shift-heading-level-by=-1 是转换 HTML 或 Markdown 文档时的不错选择,这些文档使用初始的 1 级标题作为文档标题,2 级及以上标题作为章节。--shift-heading-level-by=1 对于将使用 1 级标题作为章节的 Markdown 文档转换为 HTML 可能是一个不错的选择,因为 Pandoc 使用 1 级标题来渲染文档标题。

--base-header-level=数字

已弃用。请改用 --shift-heading-level-by=X,其中 X = 数字 - 1。 指定标题的基本级别(默认为 1)。

--indented-code-classes=

为缩进代码块指定要使用的类,例如 perl,numberLineshaskell。多个类可以用空格或逗号分隔。

--default-image-extension=扩展名

当图像路径/URL 没有扩展名时,指定要使用的默认扩展名。这允许您对需要不同类型图像的格式使用相同的源。目前此选项仅影响 Markdown 和 LaTeX 读取器。

--file-scope[=true|false]

在合并多文件文档之前,单独解析每个文件。这将允许不同文件中具有相同标识符的脚注按预期工作。如果设置了此选项,脚注和链接将无法跨文件工作。读取二进制文件(docx、odt、epub)意味着使用 --file-scope

如果使用 --file-scope 处理两个或更多文件,则会根据文件名向标识符添加前缀以消除歧义,并且内部链接也将相应调整。例如,subdir/file1.txt 中标识符为 foo 的标题其标识符将更改为 subdir__file1.txt__foo

-F 程序, --filter=程序

指定一个可执行文件作为过滤器,用于在输入解析后和输出写入前转换 Pandoc AST。该可执行文件应从 stdin 读取 JSON 并将 JSON 写入 stdout。JSON 必须格式化为 Pandoc 自己的 JSON 输入和输出。输出格式的名称将作为第一个参数传递给过滤器。因此:

pandoc --filter ./caps.py -t latex

等同于:

pandoc -t json | ./caps.py latex | pandoc -f json -t latex

后一种形式可能有助于调试过滤器。

过滤器可以用任何语言编写。Text.Pandoc.JSON 导出 toJSONFilter 以方便使用 Haskell 编写过滤器。那些喜欢用 Python 编写过滤器的人可以使用 pandocfilters 模块,该模块可从 PyPI 安装。还有适用于 PHPperlJavaScript/node.js 的 Pandoc 过滤器库。

按照优先顺序,Pandoc 将在以下位置查找过滤器:

  1. 指定的完整或相对路径(可执行或不可执行),

  2. $DATADIR/filters(可执行或不可执行),其中 $DATADIR 是用户数据目录(请参阅上方的 --data-dir),

  3. $PATH(仅限可执行文件)。

过滤器、Lua 过滤器和 citeproc 处理按照命令行上指定的顺序应用。

-L 脚本, --lua-filter=脚本

以类似于 JSON 过滤器的方式转换文档(请参阅 --filter),但使用 Pandoc 内置的 Lua 过滤系统。所提供的 Lua 脚本应返回一个 Lua 过滤器列表,这些过滤器将按顺序应用。每个 Lua 过滤器必须包含按 AST 元素名称索引的元素转换函数,过滤器函数将应用于该 AST 元素。

pandoc Lua 模块提供用于元素创建的辅助函数。它始终加载到脚本的 Lua 环境中。

有关更多详细信息,请参阅 Lua 过滤器文档

按照优先顺序,Pandoc 将在以下位置查找 Lua 过滤器:

  1. 指定的完整或相对路径,

  2. $DATADIR/filters,其中 $DATADIR 是用户数据目录(请参阅上方的 --data-dir)。

过滤器、Lua 过滤器和 citeproc 处理按照命令行上指定的顺序应用。

-M [=], --metadata=[:]

将元数据字段 设置为 。命令行中指定的值会覆盖文档中通过 YAML 元数据块 指定的值。值将被解析为 YAML 布尔值或字符串值。如果没有指定值,则该值将被视为布尔真。与 --variable 类似,--metadata 会导致模板变量被设置。但与 --variable 不同,--metadata 会影响底层文档的元数据(可以从过滤器访问,并且可以在某些输出格式中打印),并且元数据值在插入到模板时会被转义。

--metadata-file=文件

从提供的 YAML(或 JSON)文件读取元数据。此选项可用于所有输入格式,但元数据文件中的字符串标量将始终解析为 Markdown。(如果输入格式是 Markdown 或其变体,则将使用相同的变体解析元数据文件;如果是非 Markdown 格式,则将使用 Pandoc 的默认 Markdown 扩展。)此选项可以重复使用以包含多个元数据文件;命令行中后面指定的文件中的值将优先于前面指定的文件中的值。文档内部或通过 -M 指定的元数据值会覆盖通过此选项指定的值。文件将首先在工作目录中搜索,然后在用户数据目录的 metadata 子目录中搜索(请参阅 --data-dir)。

-p, --preserve-tabs[=true|false]

保留制表符而不是将其转换为空格。(默认情况下,Pandoc 在解析输入之前会将制表符转换为空格。)请注意,这只会影响字面代码跨度和代码块中的制表符。普通文本中的制表符始终被视为空格。

--tab-stop=数字

指定每个制表符对应的空格数(默认为 4)。

--track-changes=accept|reject|all

指定如何处理 MS Word “修订”功能产生的插入、删除和评论。accept(默认值)处理所有插入和删除。reject 忽略它们。acceptreject 都忽略评论。all 包含所有插入、删除和评论,分别包装在带有 insertiondeletioncomment-startcomment-end 类的 span 中。其中包含作者和更改时间。all 对于脚本编写很有用:例如,只接受来自特定审阅者的更改,或在特定日期之前的更改。如果插入或删除了一个段落,track-changes=all 将在受影响的段落换行符之前生成一个带有 paragraph-insertion/paragraph-deletion 类的 span。此选项仅影响 docx 读取器。

--extract-media=目录

将源文档中包含的或链接的图像和其他媒体提取到 目录 路径,如果需要则创建该目录,并调整文档中的图像引用,使其指向提取的文件。媒体将根据需要下载、从文件系统读取或从二进制容器(例如 docx)中提取。如果原始文件路径是不包含 .. 的相对路径,则使用原始文件路径。否则,文件名将根据内容的 SHA1 哈希值构建。

--abbreviations=文件

指定一个自定义缩写文件,每行一个缩写。如果未指定此选项,Pandoc 将从用户数据目录读取数据文件 abbreviations,否则将回退到系统默认设置。要查看系统默认设置,请使用 pandoc --print-default-data-file=abbreviations。Pandoc 对此列表的唯一用途是在 Markdown 读取器中。在此列表中找到的字符串后将跟一个不间断空格,并且在 LaTeX 等格式中句号不会产生句子结尾空格。字符串不能包含空格。

--trace[=true|false]

将跟踪解析器进度的诊断输出打印到 stderr。此选项旨在供开发人员用于诊断性能问题。

通用写入器选项

-s, --standalone

生成带有适当页眉和页脚的输出(例如,独立的 HTML、LaTeX、TEI 或 RTF 文件,而不是片段)。对于 pdfepubepub3fb2docxodt 输出,此选项会自动设置。对于 native 输出,此选项会导致包含元数据;否则,元数据将被抑制。

--template=文件|URL

使用指定的文件作为生成文档的自定义模板。隐含 --standalone。有关模板语法的描述,请参阅下方的 模板。如果找不到模板,Pandoc 将在用户数据目录的 templates 子目录中搜索(请参阅 --data-dir)。如果没有指定扩展名并且找不到无扩展名的模板,Pandoc 将查找一个与写入器对应的扩展名的模板,因此 --template=special 将为 HTML 输出查找 special.html。如果未使用此选项,将使用适合输出格式的默认模板(请参阅 -D/--print-default-template)。

-V [=], --variable=[=]

在独立模式下渲染文档时,将模板变量 设置为字符串值 。可以使用 := 来分隔 。如果未指定 ,则该键将被赋予 true 值。结构化值(列表、映射)不能使用此选项分配,但可以在 默认文件variables 部分或使用 --variable-json 选项进行分配。如果变量已具有 列表 值,则该值将被添加到列表中。如果它已经有另一种类型的值,它将成为一个包含旧值和新值的列表。例如,-V keyword=Joe -V author=Sue 会使 author 包含一个字符串列表:JoeSue

--variable-json=[=:JSON]

将模板变量 设置为由 JSON 字符串指定的值(这可以是布尔值、字符串、列表或映射;数字将被视为字符串)。例如,--variable-json foo=false 将使 foo 获得布尔值 false,而 --variable-json foo='"false"' 将使其获得字符串值 "false"。可以使用 := 来分隔 。如果变量已经有值,该值将被替换。

--sandbox[=true|false]

在沙盒中运行 Pandoc,将读取器和写入器中的 I/O 操作限制为只读取命令行上指定的文件。请注意,此选项不限制过滤器或生成 PDF 文档时的 I/O 操作。但它确实提供了安全保障,例如,防止通过使用 include 指令泄露文件。任何在不可信用户输入上使用 Pandoc 的人都应该使用此选项。

注意:某些读取器和写入器(例如 docx)需要访问数据文件。如果这些文件存储在文件系统中,那么在 --sandbox 模式下运行时,Pandoc 将无法找到它们并会引发错误。对于这些应用程序,我们建议使用带有 embed_data_files 选项编译的 Pandoc 二进制文件,这会使数据文件嵌入到二进制文件中,而不是存储在文件系统上。

-D 格式, --print-default-template=格式

打印输出 格式 的系统默认模板。(请参阅 -t 以获取可能的 格式 列表。)用户数据目录中的模板将被忽略。此选项可以与 -o/--output 一起使用以将输出重定向到文件,但 -o/--output 必须在命令行中位于 --print-default-template 之前。

请注意,某些默认模板使用局部文件,例如 styles.html。要打印局部文件,请使用 --print-default-data-file:例如,--print-default-data-file=templates/styles.html

--print-default-data-file=文件

打印系统默认数据文件。用户数据目录中的文件将被忽略。此选项可以与 -o/--output 一起使用以将输出重定向到文件,但 -o/--output 必须在命令行中位于 --print-default-data-file 之前。

--eol=crlf|lf|native

手动指定行尾符:crlf (Windows)、lf (macOS/Linux/UNIX) 或 native (与运行 Pandoc 的操作系统相适应的行尾符)。默认为 native

--dpi=数字

指定从像素到英寸/厘米转换的默认 dpi (每英寸点数) 值,反之亦然。(严格来说,正确的术语是 ppi:每英寸像素。)默认值为 96dpi。当图像内部包含 dpi 信息时,将使用编码值而不是此选项指定的默认值。

--wrap=auto|none|preserve

确定输出中(源代码,而非渲染版本)文本的换行方式。使用 auto(默认),Pandoc 将尝试将行限制在 --columns 指定的列宽(默认为 72)。使用 none,Pandoc 将完全不换行。使用 preserve,Pandoc 将尝试保留源文档中的换行(即,如果源中有非语义换行符,输出中也将有非语义换行符)。在 ipynb 输出中,此选项会影响 Markdown 单元格内容的换行。

--columns=数字

指定每行字符长度。这会影响生成源代码中的文本换行(请参阅 --wrap)。它还会影响纯文本表格的列宽计算(请参阅下方的 表格)。

--toc[=true|false], --table-of-contents[=true|false]

在输出文档中包含自动生成的目录(或者,对于 latexcontextdocxodtopendocumentrstms,是创建目录的指令)。此选项仅在使用 -s/--standalone 时有效,并且对 mandocbook4docbook5jats 输出无效。

请注意,如果您通过 ms 生成 PDF 并使用(默认的)pdfroff 作为 --pdf-engine,目录将出现在文档的开头,标题之前。如果您希望它出现在文档末尾,请使用选项 --pdf-engine-opt=--no-toc-relocation。如果使用 groff 作为 --pdf-engine,目录将始终出现在文档末尾。

--toc-depth=数字

指定目录中包含的章节级别数。默认值为 3(这意味着目录中将列出 1、2 和 3 级标题)。

--lof[=true|false], --list-of-figures[=true|false]

在输出文档中包含自动生成的插图列表(或者,在某些格式中,是创建列表的指令)。此选项仅在使用 -s/--standalone 时有效,并且仅对 latexcontextdocx 输出有效。

--lot[=true|false], --list-of-tables[=true|false]

在输出文档中包含自动生成的表格列表(或者,在某些格式中,是创建列表的指令)。此选项仅在使用 -s/--standalone 时有效,并且仅对 latexcontextdocx 输出有效。

--strip-comments[=true|false]

从 Markdown 或 Textile 源中删除 HTML 注释,而不是将其作为原始 HTML 传递到 Markdown、Textile 或 HTML 输出。当未设置 markdown_in_html_blocks 扩展时,这不适用于原始 HTML 块内的 HTML 注释。

--no-highlight

禁用代码块和内联代码的语法高亮,即使指定了语言属性。

--highlight-style=样式|文件

指定高亮源代码中使用的着色样式。选项包括 pygments(默认)、katemonochromebreezeDarkespressozenburnhaddocktango。有关 Pandoc 中语法高亮的更多信息,请参阅下方的 语法高亮。另请参阅 --list-highlight-styles

除了 样式 名称,还可以提供一个扩展名为 .theme 的 JSON 文件。该文件将被解析为 KDE 语法高亮主题,并且(如果有效)用作高亮样式。

要生成现有样式的 JSON 版本,请使用 --print-highlight-style

--print-highlight-style=样式|文件

打印高亮样式的 JSON 版本,可以修改、保存为 .theme 扩展名,并与 --highlight-style 一起使用。此选项可以与 -o/--output 一起使用以将输出重定向到文件,但 -o/--output 必须在命令行中位于 --print-highlight-style 之前。

--syntax-definition=文件

指示 Pandoc 加载 KDE XML 语法定义文件,该文件将用于适当标记的代码块的语法高亮。这可用于添加对新语言的支持或使用现有语言的修改语法定义。此选项可以重复使用以添加多个语法定义。

-H 文件, --include-in-header=文件|URL

在页眉末尾按原样包含 文件 的内容。例如,这可用于在 HTML 文档中包含特殊的 CSS 或 JavaScript。此选项可以重复使用以在页眉中包含多个文件。它们将按指定的顺序包含。隐含 --standalone

-B 文件, --include-before-body=文件|URL

在文档正文的开头(例如,HTML 中的 <body> 标签之后,或 LaTeX 中的 \begin{document} 命令之后)按原样包含 文件 的内容。这可用于在 HTML 文档中包含导航栏或横幅。此选项可以重复使用以包含多个文件。它们将按指定的顺序包含。隐含 --standalone。请注意,如果输出格式是 odt,此文件必须是适合插入文档正文的 OpenDocument XML 格式;如果输出是 docx,此文件必须是适当的 OpenXML 格式。

-A 文件, --include-after-body=文件|URL

在文档正文的末尾(在 HTML 中的 </body> 标签之前,或 LaTeX 中的 \end{document} 命令之前)按原样包含 文件 的内容。此选项可以重复使用以包含多个文件。它们将按指定的顺序包含。隐含 --standalone。请注意,如果输出格式是 odt,此文件必须是适合插入文档正文的 OpenDocument XML 格式;如果输出是 docx,此文件必须是适当的 OpenXML 格式。

--resource-path=搜索路径

搜索图像和其他资源的路径列表。在 Linux、UNIX 和 macOS 系统上,路径应由 : 分隔;在 Windows 上,应由 ; 分隔。如果未指定 --resource-path,默认资源路径是工作目录。请注意,如果指定了 --resource-path,则必须明确列出工作目录,否则将不会搜索。例如:--resource-path=.:test 将按此顺序搜索工作目录和 test 子目录。此选项可以重复使用。命令行上后出现的搜索路径组件将在先出现的组件之前被搜索,因此 --resource-path foo:bar --resource-path baz:bim 等同于 --resource-path baz:bim:foo:bar。请注意,此选项仅在 Pandoc 本身需要查找图像时才有效(例如,在生成 PDF 或 docx 时,或使用 --embed-resources 时)。在其他情况下(例如,Pandoc 生成 LaTeX 或 HTML 时),它不会导致图像路径被重写。

--request-header=名称:

在发出 HTTP 请求时,将请求头 名称 设置为 (例如,当命令行中给出 URL,或文档中使用的资源必须下载时)。如果您在代理后面,您还需要将环境变量 http_proxy 设置为 http://...

--no-check-certificate[=true|false]

禁用证书验证,以允许访问不安全的 HTTP 资源(例如当证书不再有效或自签名时)。

影响特定写入器的选项

--self-contained[=true|false]

--embed-resources --standalone 的已弃用同义词。

--embed-resources[=true|false]

生成一个独立的 HTML 文件,不带外部依赖项,使用 data: URI 嵌入链接的脚本、样式表、图像和视频的内容。生成的文件应是“自包含的”,这意味着它不需要外部文件和网络访问即可被浏览器正确显示。此选项仅适用于 HTML 输出格式,包括 html4html5html+lhshtml5+lhss5slidyslideousdzslidesrevealjs。绝对 URL 的脚本、图像和样式表将被下载;相对 URL 的脚本、图像和样式表将相对于工作目录(如果第一个源文件是本地的)或相对于基本 URL(如果第一个源文件是远程的)进行查找。带有属性 data-external="1" 的元素将被保留;它们链接的文档将不会被合并到文档中。限制:通过 JavaScript 动态加载的资源无法合并;因此,使用 --mathjax 时字体可能会缺失,并且某些高级功能(例如缩放或演讲者备注)可能无法在离线的“自包含”reveal.js 幻灯片演示中工作。

对于 SVG 图像,使用带有 data: URI 的 img 标签,除非图像具有 inline-svg 类,在这种情况下会插入内联 SVG 元素。当文档中多次出现相同的 SVG 时,建议使用此方法,因为将使用 <use> 元素来减少重复。

--link-images[=true|false]

包含图像链接而不是将图像嵌入到 ODT 中。(此选项目前仅影响 ODT 输出。)

--html-q-tags[=true|false]

在 HTML 中使用 <q> 标签表示引用。(此选项仅在所使用的输入格式启用了 smart 扩展时才有效。)

--ascii[=true|false]

在输出中只使用 ASCII 字符。目前支持 XML 和 HTML 格式(当选择此选项时使用实体而不是 UTF-8)、CommonMark、gfm 和 Markdown(使用实体)、roff man 和 ms(使用十六进制转义),以及在有限程度上支持 LaTeX(尽可能使用标准命令处理带重音符号的字符)。

--reference-links[=true|false]

在编写 Markdown 或 reStructuredText 时,使用引用式链接而不是内联链接。默认使用内联链接。链接引用的放置位置受 --reference-location 选项的影响。

--reference-location=block|section|document

指定脚注(如果设置了 reference-links 则包括引用)是放置在当前(顶级)块、当前章节还是文档的末尾。默认是 document。目前此选项仅影响 markdownmusehtmlepubslidys5slideousdzslidesrevealjs 写入器。在幻灯片格式中,指定 --reference-location=section 将导致注释渲染在幻灯片的底部。

--figure-caption-position=above|below

指定图注是位于图片上方还是下方(默认为 below)。此选项仅影响 HTML、LaTeX、Docx、ODT 和 Typst 输出。

--table-caption-position=above|below

指定表格标题是位于表格上方还是下方(默认为 above)。此选项仅影响 HTML、LaTeX、Docx、ODT 和 Typst 输出。

--markdown-headings=setext|atx

指定在 Markdown 输出中,1 级和 2 级标题是使用 ATX 样式(以 # 为前缀)还是 Setext 样式(带下划线)。(默认是 atx。)3 级及以上标题始终使用 ATX 样式。此选项还会影响 ipynb 输出中的 Markdown 单元格。

--list-tables[=true|false]

在 RST 输出中将表格渲染为列表表格。

--top-level-division=default|section|chapter|part

在 LaTeX、ConTeXt、DocBook 和 TEI 输出中,将顶级标题视为给定的划分类型。层级顺序是“部分 (part)”、“章 (chapter)”,然后是“节 (section)”;所有标题都会被移位,使得顶级标题成为指定的类型。默认行为是通过启发式方法确定最佳划分类型:除非适用其他条件,否则选择 section。当 documentclass 变量设置为 reportbookmemoir 时(除非指定了 article 选项),此选项的设置隐含为 chapter。如果输出格式是 beamer,指定 chapterpart 将导致顶级标题变为 \part{..},而二级标题仍保持其默认类型。

在 Docx 输出中,如果选择了 chapter,此选项会在一级标题前添加分节符;如果选择了 part,则会在一级和二级标题前添加分节符。除非参考文档修改了此设置,否则脚注编号将随每个分节符重新开始。

-N, --number-sections=[true|false]

在 LaTeX、ConTeXt、HTML、Docx、ms 或 EPUB 输出中对章节标题进行编号。默认情况下,章节不编号。带有 unnumbered 类的章节将永远不编号,即使指定了 --number-sections 选项。

--number-offset=数字[,数字,]

章节标题编号的偏移量。第一个数字添加到 1 级标题的章节编号,第二个添加到 2 级标题,以此类推。例如,如果您希望文档中的第一个 1 级标题编号为“6”而不是“1”,请指定 --number-offset=5。如果您的文档以一个 2 级标题开头,您希望其编号为“1.5”,请指定 --number-offset=1,4--number-offset 仅直接影响文档中第一个章节标题的编号;后续编号将以正常方式递增。隐含 --number-sections。目前此功能仅影响 HTML 和 Docx 输出。

--listings[=true|false]

为 LaTeX 代码块使用 listings 宏包。该宏包不支持源代码的多字节编码。要处理 UTF-8,您需要使用自定义模板。此问题在此处有详细说明:listings 宏包的编码问题

-i, --incremental[=true|false]

使幻灯片演示中的列表项逐步显示(一个接一个)。默认是列表一次性全部显示。

--slide-level=数字

指定具有指定级别的标题创建幻灯片(适用于 beamerrevealjspptxs5slidyslideousdzslides)。层级高于此级别的标题用于将幻灯片演示划分为节;低于此级别的标题在幻灯片内创建子标题。有效值为 0-6。如果指定幻灯片级别为 0,幻灯片将不会在标题处自动分割,必须使用水平线来指示幻灯片边界。如果未明确指定幻灯片级别,幻灯片级别将根据文档内容自动设置;请参阅 构建幻灯片演示

--section-divs[=true|false]

将章节包装在 <section> 标签(对于 html4 则是 <div> 标签)中,并将标识符附加到封闭的 <section>(或 <div>)而不是标题本身(请参阅下方的 标题标识符)。此选项仅影响 HTML 输出(不影响 HTML 幻灯片格式)。

--email-obfuscation=none|javascript|references

指定在 HTML 文档中混淆 mailto: 链接的方法。none 保持 mailto: 链接不变。javascript 使用 JavaScript 混淆它们。references 通过将其字母打印为十进制或十六进制字符引用来混淆它们。默认是 none

--id-prefix=字符串

指定一个前缀,添加到 HTML 和 DocBook 输出中的所有标识符和内部链接,以及 Markdown 和 Haddock 输出中的脚注编号。这对于在生成要包含在其他页面中的片段时防止重复标识符很有用。

-T 字符串, --title-prefix=字符串

指定 字符串 作为 HTML 头部中出现的标题的开头前缀(但不是在 HTML 正文开头出现的标题)。隐含 --standalone

-c URL, --css=URL

链接到 CSS 样式表。此选项可以重复使用以包含多个文件。它们将按指定的顺序包含。此选项仅影响 HTML(包括 HTML 幻灯片演示)和 EPUB 输出。它应与 -s/--standalone 一起使用,因为样式表的链接位于文档头部。

生成 EPUB 需要样式表。如果未使用此选项(或 cssstylesheet 元数据字段)提供样式表,Pandoc 将在用户数据目录中查找文件 epub.css(请参阅 --data-dir)。如果找不到,将使用合理的默认值。

--reference-doc=文件|URL

在生成 docx 或 ODT 文件时,使用指定文件作为样式参考。

Docx

为了获得最佳效果,参考 docx 应该是使用 Pandoc 生成的 docx 文件的修改版本。参考 docx 的内容将被忽略,但其样式表和文档属性(包括页边距、页面大小、页眉和页脚)将在新的 docx 中使用。如果命令行上未指定参考 docx,Pandoc 将在用户数据目录中查找文件 reference.docx(请参阅 --data-dir)。如果也未找到,将使用合理的默认值。

要生成自定义的 reference.docx,首先获取默认 reference.docx 的副本:pandoc -o custom-reference.docx --print-default-data-file reference.docx。然后用 Word 打开 custom-reference.docx,根据需要修改样式,并保存文件。为了获得最佳效果,除了修改 Pandoc 使用的样式外,不要对该文件进行其他更改。

段落样式

  • Normal
  • 正文文本
  • 首段
  • 紧凑
  • 标题
  • 副标题
  • 作者
  • 日期
  • 摘要
  • 摘要标题
  • 参考文献
  • 标题 1
  • 标题 2
  • 标题 3
  • 标题 4
  • 标题 5
  • 标题 6
  • 标题 7
  • 标题 8
  • 标题 9
  • 块文本 [用于块引用]
  • 脚注块文本 [用于脚注中的块引用]
  • 源代码
  • 脚注文本
  • 定义术语
  • 定义
  • 题注
  • 表格标题
  • 图片标题
  • 带题注的图
  • 目录标题

字符样式

  • 默认段落字体
  • 逐字字符
  • 脚注引用
  • 超链接
  • 章节编号

表格样式

  • 表格
ODT

为了获得最佳效果,参考 ODT 应该是使用 Pandoc 生成的 ODT 文件的修改版本。参考 ODT 的内容将被忽略,但其样式表将在新的 ODT 中使用。如果命令行上未指定参考 ODT,Pandoc 将在用户数据目录中查找文件 reference.odt(请参阅 --data-dir)。如果也未找到,将使用合理的默认值。

要生成自定义的 reference.odt,首先获取默认 reference.odt 的副本:pandoc -o custom-reference.odt --print-default-data-file reference.odt。然后用 LibreOffice 打开 custom-reference.odt,根据需要修改样式,并保存文件。

PowerPoint

已知 Microsoft PowerPoint 2013 附带的模板(无论是 .pptx 还是 .potx 扩展名)都可正常工作,从这些模板派生的大多数模板也一样。

具体要求是模板应包含以下名称的布局(如在 PowerPoint 中所见):

  • 标题幻灯片
  • 标题和内容
  • 节标题
  • 两栏内容
  • 比较
  • 带标题内容
  • 空白

对于每个名称,将使用找到的第一个具有该名称的布局。如果找不到任何具有其中一个名称的布局,Pandoc 将输出警告并改为使用默认参考文档中具有该名称的布局。(这些布局的使用方式在 PowerPoint 布局选择 中描述。)

最新版 MS PowerPoint 附带的所有模板都符合这些标准。(您可以在 Home 菜单下点击 Layout 进行检查。)

您也可以修改默认的 reference.pptx:首先运行 pandoc -o custom-reference.pptx --print-default-data-file reference.pptx,然后使用 MS PowerPoint 修改 custom-reference.pptx(pandoc 将使用上述名称的布局)。

--split-level=NUMBER

指定将 EPUB 或分块 HTML 文档拆分为单独文件的标题级别。默认情况下,EPUB 会在级别 1 标题处拆分为章节。对于 EPUB,此选项仅影响 EPUB 的内部构成,而不影响章节和部分向用户显示的方式。如果章节文件过大,某些阅读器可能会变慢,因此对于很少有级别 1 标题的大型文档,可能需要使用级别 2 或 3 的章节级别。对于分块 HTML,此选项决定每个“块”包含多少内容。

--chunk-template=PATHTEMPLATE

指定 chunkedhtml 文档中文件名的模板。在模板中,%n 将被替换为块号(前面用 0 填充到 3 位),%s 替换为块的节号,%h 替换为标题文本(去除格式),%i 替换为节标识符。例如,%section-%s-%i.html 可能会解析为 section-1.1-introduction.html。字符 /\ 在块模板中不允许使用,将被忽略。默认值为 %s-%i.html

--epub-chapter-level=NUMBER

已弃用,与 --split-level 含义相同。

--epub-cover-image=FILE

使用指定的图像作为 EPUB 封面。建议图像宽度和高度小于 1000px。请注意,在 Markdown 源文档中,您也可以在 YAML 元数据块中指定 cover-image(参见下文 EPUB 元数据)。

--epub-title-page=true|false

确定 EPUB 中是否包含标题页(默认为 true)。

--epub-metadata=FILE

在指定的 XML 文件中查找 EPUB 的元数据。该文件应包含一系列 都柏林核心元素。例如:

 <dc:rights>Creative Commons</dc:rights>
 <dc:language>es-AR</dc:language>

默认情况下,pandoc 将包含以下元数据元素:<dc:title>(来自文档标题),<dc:creator>(来自文档作者),<dc:date>(来自文档日期,应为 ISO 8601 格式),<dc:language>(来自 lang 变量,如果未设置则来自语言环境),以及 <dc:identifier id="BookId">(一个随机生成的 UUID)。这些元素中的任何一个都可以被元数据文件中的元素覆盖。

注意:如果源文档是 Markdown,则可以使用文档中的 YAML 元数据块代替。参见下文 EPUB 元数据

--epub-embed-font=FILE

在 EPUB 中嵌入指定的字体。此选项可以重复以嵌入多个字体。也可以使用通配符:例如,DejaVuSans-*.ttf。但是,如果在命令行中使用通配符,请务必将其转义或将整个文件名放在单引号中,以防止它们被 shell 解释。要使用嵌入字体,您需要在 CSS 中添加如下声明(参见 --css):

@font-face {
   font-family: DejaVuSans;
   font-style: normal;
   font-weight: normal;
   src:url("../fonts/DejaVuSans-Regular.ttf");
}
@font-face {
   font-family: DejaVuSans;
   font-style: normal;
   font-weight: bold;
   src:url("../fonts/DejaVuSans-Bold.ttf");
}
@font-face {
   font-family: DejaVuSans;
   font-style: italic;
   font-weight: normal;
   src:url("../fonts/DejaVuSans-Oblique.ttf");
}
@font-face {
   font-family: DejaVuSans;
   font-style: italic;
   font-weight: bold;
   src:url("../fonts/DejaVuSans-BoldOblique.ttf");
}
body { font-family: "DejaVuSans"; }
--epub-subdirectory=DIRNAME

指定 OCF 容器中用于存放 EPUB 特定内容的子目录。默认值为 EPUB。要将 EPUB 内容放在顶层,请使用空字符串。

--ipynb-output=all|none|best

确定 ipynb 输出单元格的处理方式。all 表示保留原始文件中包含的所有数据格式。none 表示省略数据单元格的内容。best 会使 pandoc 尝试在每个输出单元格中选择与输出格式兼容的最丰富的数据块。默认值为 best

--pdf-engine=PROGRAM

生成 PDF 输出时使用指定的引擎。有效值包括 pdflatexlualatexxelatexlatexmktectonicwkhtmltopdfweasyprintpagedjs-cliprincecontextgroffpdfrofftypst。如果引擎不在您的 PATH 中,可以在此处指定引擎的完整路径。如果未指定此选项,pandoc 将根据使用 -t/--to 指定的输出格式使用以下默认值:

  • -t latex 或无:pdflatex(其他选项:xelatexlualatextectoniclatexmk
  • -t contextcontext
  • -t htmlweasyprint(其他选项:princewkhtmltopdfpagedjs-cli;有关从 HTML/CSS 生成 PDF 的良好介绍,请参阅 print-css.rocks
  • -t mspdfroff
  • -t typsttypst

此选项通常用于将 PDF 文件指定为 -o/--output 时。但是,当请求其他输出格式时,它可能仍然会产生影响。例如,ms 输出只有在选择了 --pdf-engine 时才会包含 .pdfhref 宏,并且宏的编码会因指定的是 groff 还是 pdfroff 而异。

--pdf-engine-opt=STRING

将给定的字符串用作 pdf-engine 的命令行参数。例如,要为 latexmk 的辅助文件使用持久目录 foo,请使用 --pdf-engine-opt=-outdir=foo。请注意,不进行重复选项检查。

引文渲染

-C, --citeproc

处理文件中的引文,将其替换为渲染的引文并添加参考文献。除非提供书目数据,否则不会进行引文处理,书目数据可以通过使用 --bibliography 选项或元数据中的 bibliography 字段指定的外部文件提供,也可以通过元数据中包含 Markdown 格式的 CSL YAML 引文列表的 references 部分提供。样式由使用 --csl 选项或元数据中的 csl 字段指定的 CSL 样式表控制。(如果未指定样式表,默认将使用 chicago-author-date 样式。)引文处理转换可以在过滤器或 Lua 过滤器之前或之后应用(参见 --filter--lua-filter):这些转换按照它们在命令行中出现的顺序应用。有关更多信息,请参见 引文 部分。

注意:如果指定此选项,写入器中的 citations 扩展将自动禁用,以确保渲染 citeproc 生成的引文,而不是格式自身的引文语法。

--bibliography=FILE

将文档元数据中的 bibliography 字段设置为 FILE,覆盖元数据中设置的任何值。如果多次提供此参数,每个 FILE 都将添加到参考文献中。如果 FILE 是 URL,它将通过 HTTP 获取。如果工作目录中找不到 FILE,则将在资源路径中查找(参见 --resource-path)。

--csl=FILE

将文档元数据中的 csl 字段设置为 FILE,覆盖元数据中设置的任何值。(这等同于 --metadata csl=FILE。)如果 FILE 是 URL,它将通过 HTTP 获取。如果工作目录中找不到 FILE,则将在资源路径中查找(参见 --resource-path),最后在 pandoc 用户数据目录的 csl 子目录中查找。

--citation-abbreviations=FILE

将文档元数据中的 citation-abbreviations 字段设置为 FILE,覆盖元数据中设置的任何值。(这等同于 --metadata citation-abbreviations=FILE。)如果 FILE 是 URL,它将通过 HTTP 获取。如果工作目录中找不到 FILE,则将在资源路径中查找(参见 --resource-path),最后在 pandoc 用户数据目录的 csl 子目录中查找。

--natbib

在 LaTeX 输出中使用 natbib 进行引文。此选项不能与 --citeproc 选项或 PDF 输出一起使用。它旨在用于生成可以使用 bibtex 处理的 LaTeX 文件。

--biblatex

在 LaTeX 输出中使用 biblatex 进行引文。此选项不能与 --citeproc 选项或 PDF 输出一起使用。它旨在用于生成可以使用 bibtexbiber 处理的 LaTeX 文件。

HTML 中的数学渲染

默认情况下,尽可能使用 Unicode 字符渲染 TeX 数学。公式放在带有 class="math"span 内部,以便需要时可以与周围文本不同地设置样式。但是,这只对基本数学给出可接受的结果,通常您会希望使用 --mathjax 或以下其他选项。

--mathjax[=URL]

使用 MathJax 在 HTML 输出中显示嵌入的 TeX 数学。TeX 数学将放在 \(...\)(用于行内数学)或 \[...\](用于显示数学)之间,并用带有 math 类的 <span> 标签包裹。然后 MathJax JavaScript 将其渲染。URL 应指向 MathJax.js 加载脚本。如果未提供 URL,将插入指向 Cloudflare CDN 的链接。

--mathml

将 TeX 数学转换为 MathML(在 epub3docbook4docbook5jatshtml4html5 中)。这是 odt 输出中的默认设置。MathML 受到主要网络浏览器和部分电子书阅读器的原生支持。

--webtex[=URL]

将 TeX 公式转换为链接到将公式转换为图像的外部脚本的 <img> 标签。公式将被 URL 编码并与提供的 URL 连接。对于 SVG 图像,例如可以使用 --webtex https://latex.codecogs.com/svg.latex?。如果未指定 URL,将使用生成 PNG 的 CodeCogs URL (https://latex.codecogs.com/png.latex?)。注意:--webtex 选项将影响 Markdown 输出和 HTML 输出,这在您针对不支持原生数学的 Markdown 版本时很有用。

--katex[=URL]

使用 KaTeX 在 HTML 输出中显示嵌入的 TeX 数学。URL 是 KaTeX 库的基本 URL。该目录应包含 katex.min.jskatex.min.css 文件。如果未提供 URL,将插入指向 KaTeX CDN 的链接。

--gladtex

在 HTML 输出中将 TeX 数学括在 <eq> 标签中。然后生成的 HTML 可以由 GladTeX 处理,以生成排版公式的 SVG 图像和嵌入这些图像的 HTML 文件。

pandoc -s --gladtex input.md -o myfile.htex
gladtex -d image_dir myfile.htex
# produces myfile.html and images in image_dir

包装器脚本选项

--dump-args[=true|false]

将命令行参数信息打印到 stdout,然后退出。此选项主要用于包装器脚本。输出的第一行包含使用 -o 选项指定的输出文件名,如果未指定输出文件,则为 -(表示 stdout)。其余行包含命令行参数,每行一个,按其出现的顺序排列。这些不包括常规的 pandoc 选项及其参数,但包括命令行末尾 -- 分隔符之后出现的任何选项。

--ignore-args[=true|false]

忽略命令行参数(用于包装器脚本)。常规的 pandoc 选项不被忽略。因此,例如:

pandoc --ignore-args -o foo.html -s foo.txt -- -e latin1

等同于:

pandoc -o foo.html -s

退出代码

如果 pandoc 成功完成,它将返回退出代码 0。非零退出代码具有以下含义:

代码 错误
1 PandocIOError
3 PandocFailOnWarningError
4 PandocAppError
5 PandocTemplateError
6 PandocOptionError
21 PandocUnknownReaderError
22 PandocUnknownWriterError
23 PandocUnsupportedExtensionError
24 PandocCiteprocError
25 PandocBibliographyError
31 PandocEpubSubdirectoryError
43 PandocPDFError
44 PandocXMLError
47 PandocPDFProgramNotFoundError
61 PandocHttpError
62 PandocShouldNeverHappenError
63 PandocSomeError
64 PandocParseError
66 PandocMakePDFError
67 PandocSyntaxMapError
83 PandocFilterError
84 PandocLuaError
89 PandocNoScriptingEngine
91 PandocMacroLoop
92 PandocUTF8DecodingError
93 PandocIpynbDecodingError
94 PandocUnsupportedCharsetError
97 PandocCouldNotFindDataFileError
98 PandocCouldNotFindMetadataFileError
99 PandocResourceNotFound

默认文件

可以使用 --defaults 选项来指定选项包,形式为 YAML 文件。

省略的字段将只保留其常规默认值。因此,默认文件可以像一行代码一样简单:

verbosity: INFO

在需要文件路径(或文件路径列表)的字段中,可以使用以下语法来插入环境变量:

csl:  ${HOME}/mycsldir/special.csl

也可以使用 ${USERDATA};这总是解析为解析默认文件时当前的用户数据目录,无论环境变量 USERDATA 的设置如何。

${.} 将解析为包含默认文件本身的目录。这允许您引用该目录中包含的资源:

epub-cover-image: ${.}/cover.jpg
epub-metadata: ${.}/meta.xml
resource-path:
- .             # the working directory from which pandoc is run
- ${.}/images   # the images subdirectory of the directory
                # containing this defaults file

这种环境变量插值语法在需要文件路径的字段中起作用。

默认文件可以放置在用户数据目录的 defaults 子目录中,并从任何目录使用。例如,可以创建一个指定信件撰写默认值的文件,将其保存为用户数据目录的 defaults 子目录中的 letter.yaml,然后从任何目录使用 pandoc --defaults letterpandoc -dletter 调用这些默认值。

当使用多个默认值时,它们的内容将合并。

请注意,对于命令行参数可以重复的情况(--metadata-file--css--include-in-header--include-before-body--include-after-body--variable--metadata--syntax-definition),命令行上指定的值将与默认文件中指定的值合并,而不是替换它们。

下表显示了命令行和默认文件条目之间的映射。

命令行 默认文件
foo.md
input-file: foo.md
foo.md bar.md

input-files:
  - foo.md
  - bar.md

input-files 的值可以留空,表示从标准输入读取,也可以是空序列 [],表示没有输入。

通用选项

命令行 默认文件
--from markdown+emoji
from: markdown+emoji
reader: markdown+emoji
--to markdown+hard_line_breaks
to: markdown+hard_line_breaks
writer: markdown+hard_line_breaks
--output foo.pdf
output-file: foo.pdf
--output -
output-file:
--data-dir dir
data-dir: dir
--defaults file
defaults:
- file
--verbose
verbosity: INFO
--quiet
verbosity: ERROR
--fail-if-warnings
fail-if-warnings: true
--sandbox
sandbox: true
--log=FILE
log-file: FILE

默认文件本身中指定的选项始终优先于通过 defaults: 条目包含的其他文件中的选项。

verbosity 可以有 ERRORWARNINGINFO 值。

阅读器选项

命令行 默认文件
--shift-heading-level-by -1
shift-heading-level-by: -1
--indented-code-classes python
indented-code-classes:
  - python
--default-image-extension ".jpg"
default-image-extension: '.jpg'
--file-scope
file-scope: true
--citeproc \
 --lua-filter count-words.lua \
 --filter special.lua

filters:
  - citeproc
  - count-words.lua
  - type: json
    path: special.lua
--metadata key=value \
 --metadata key2
metadata:
  key: value
  key2: true
--metadata-file meta.yaml
metadata-files:
  - meta.yaml
metadata-file: meta.yaml
--preserve-tabs
preserve-tabs: true
--tab-stop 8
tab-stop: 8
--track-changes accept
track-changes: accept
--extract-media dir
extract-media: dir
--abbreviations abbrevs.txt
abbreviations: abbrevs.txt
--trace
trace: true

默认文件中指定的元数据值被解析为字面字符串文本,而不是 Markdown。

如果过滤器具有 .lua 扩展名,则假定它们是 Lua 过滤器,否则是 JSON 过滤器。但过滤器类型也可以明确指定,如所示。过滤器按指定顺序运行。要包含内置的 citeproc 过滤器,请使用 citeproc{type: citeproc}

通用写入器选项

命令行 默认文件
--standalone
standalone: true
--template letter
template: letter
--variable key=val \
  --variable key2
variables:
  key: val
  key2: true
--eol nl
eol: nl
--dpi 300
dpi: 300
--wrap 60
wrap: 60
--columns 72
columns: 72
--table-of-contents
table-of-contents: true
--toc
toc: true
--toc-depth 3
toc-depth: 3
--strip-comments
strip-comments: true
--no-highlight
highlight-style: null
--highlight-style kate
highlight-style: kate
--syntax-definition mylang.xml
syntax-definitions:
  - mylang.xml
syntax-definition: mylang.xml
--include-in-header inc.tex
include-in-header:
  - inc.tex
--include-before-body inc.tex
include-before-body:
  - inc.tex
--include-after-body inc.tex
include-after-body:
  - inc.tex
--resource-path .:foo
resource-path: ['.','foo']
--request-header foo:bar
request-headers:
  - ["User-Agent", "Mozilla/5.0"]
--no-check-certificate
no-check-certificate: true

影响特定写入器的选项

命令行 默认文件
--self-contained
self-contained: true
--link-images
link-images: true
--html-q-tags
html-q-tags: true
--ascii
ascii: true
--reference-links
reference-links: true
--reference-location block
reference-location: block
--figure-caption-position=above
figure-caption-position: above
--table-caption-position=below
table-caption-position: below
--markdown-headings atx
markdown-headings: atx
--list-tables
list-tables: true
--top-level-division chapter
top-level-division: chapter
--number-sections
number-sections: true
--number-offset=1,4
number-offset: \[1,4\]
--listings
listings: true
--list-of-figures
list-of-figures: true
--lof
lof: true
--list-of-tables
list-of-tables: true
--lot
lot: true
--incremental
incremental: true
--slide-level 2
slide-level: 2
--section-divs
section-divs: true
--email-obfuscation references
email-obfuscation: references
--id-prefix ch1
identifier-prefix: ch1
--title-prefix MySite
title-prefix: MySite
--css styles/screen.css  \
  --css styles/special.css
css:
  - styles/screen.css
  - styles/special.css
--reference-doc my.docx
reference-doc: my.docx
--epub-cover-image cover.jpg
epub-cover-image: cover.jpg
--epub-title-page=false
epub-title-page: false
--epub-metadata meta.xml
epub-metadata: meta.xml
--epub-embed-font special.otf \
  --epub-embed-font headline.otf
epub-fonts:
  - special.otf
  - headline.otf
--split-level 2
split-level: 2
--chunk-template="%i.html"
chunk-template: "%i.html"
--epub-subdirectory=""
epub-subdirectory: ''
--ipynb-output best
ipynb-output: best
--pdf-engine xelatex
pdf-engine: xelatex
--pdf-engine-opt=--shell-escape
pdf-engine-opts:
  - '-shell-escape'
pdf-engine-opt: '-shell-escape'

引文渲染

命令行 默认文件
--citeproc
citeproc: true
--bibliography logic.bib
bibliography: logic.bib
--csl ieee.csl
csl: ieee.csl
--citation-abbreviations ab.json
citation-abbreviations: ab.json
--natbib
cite-method: natbib
--biblatex
cite-method: biblatex

cite-method 可以是 citeprocnatbibbiblatex。这仅影响 LaTeX 输出。如果您想使用 citeproc 格式化引文,还应设置“citeproc: true”。

如果您需要控制 citeproc 处理相对于其他过滤器的执行时间,则应在 filters 列表中使用 citeproc(参见 阅读器选项)。

HTML 中的数学渲染

命令行 默认文件
--mathjax
html-math-method:
  method: mathjax
--mathml
html-math-method:
  method: mathml
--webtex
html-math-method:
  method: webtex
--katex
html-math-method:
  method: katex
--gladtex
html-math-method:
  method: gladtex

除了上面列出的值,method 可以有值 plain

如果命令行选项接受 URL 参数,则可以将 url: 字段添加到 html-math-method: 中。

包装器脚本选项

命令行 默认文件
--dump-args
dump-args: true
--ignore-args
ignore-args: true

模板

当使用 -s/--standalone 选项时,pandoc 使用模板添加独立文档所需的页眉和页脚材料。要查看使用的默认模板,只需输入:

pandoc -D *FORMAT*

其中 FORMAT 是输出格式的名称。可以使用 --template 选项指定自定义模板。您也可以通过将 templates/default.*FORMAT* 文件放置在用户数据目录中(参见上文 --data-dir)来覆盖给定输出格式 FORMAT 的系统默认模板。例外:

  • 对于 odt 输出,自定义 default.opendocument 模板。
  • 对于 docx 输出,自定义 default.openxml 模板。
  • 对于 pdf 输出,自定义 default.latex 模板(如果使用 -t context,则自定义 default.context 模板;如果使用 -t ms,则自定义 default.ms 模板;如果使用 -t html,则自定义 default.html 模板)。
  • pptx 没有模板。

请注意,docxodtpptx 输出也可以使用 --reference-doc 进行自定义。使用参考文档调整文档中的样式;使用模板处理变量插值和自定义元数据的呈现、目录的位置、样板文本等。

模板包含变量,允许在文件的任何位置包含任意信息。它们可以使用 -V/--variable 选项在命令行上设置。如果未设置变量,pandoc 将在文档的元数据中查找键,元数据可以使用 YAML 元数据块-M/--metadata 选项设置。此外,某些变量由 pandoc 赋予默认值。有关 pandoc 默认模板中使用的变量列表,请参见下文 变量

如果您使用自定义模板,则可能需要随着 pandoc 的更改而修订它们。我们建议跟踪默认模板的更改,并相应地修改您的自定义模板。一个简单的方法是分叉 pandoc-templates 存储库并在每次 pandoc 发布后合并更改。

模板语法

注释

序列 $-- 和行尾之间的任何内容都将被视为注释并从输出中省略。

分隔符

为了在模板中标记变量和控制结构,可以使用 $$${} 作为分隔符。同个模板中也可以混合使用这些样式,但开闭分隔符必须在每种情况下匹配。开分隔符后面可以跟一个或多个空格或制表符,这些将被忽略。闭分隔符前面可以跟一个或多个空格或制表符,这些将被忽略。

要在文档中包含字面量 $,请使用 $$

插值变量

插值变量的槽位是被匹配分隔符包围的变量名。变量名必须以字母开头,可以包含字母、数字、_-.。关键字 itifelseendifforsependfor 不能用作变量名。示例:

$foo$
$foo.bar.baz$
$foo_bar.baz-bim$
$ foo $
${foo}
${foo.bar.baz}
${foo_bar.baz-bim}
${ foo }

带点的变量名用于获取结构化变量值。例如,employee.salary 将返回作为 employee 字段值的对象的 salary 字段的值。

  • 如果变量的值是简单值,它将按原样渲染。(请注意,不进行转义;假定调用程序将根据输出格式适当地转义字符串。)
  • 如果值是列表,则这些值将连接起来。
  • 如果值是映射,则将渲染字符串 true
  • 所有其他值都将渲染为空字符串。

条件语句

条件语句以 if(variable)(括在匹配的分隔符中)开始,以 endif(括在匹配的分隔符中)结束。它可以选择包含一个 else(括在匹配的分隔符中)。如果 variable 具有真值,则使用 if 部分,否则使用 else 部分(如果存在)。以下值被视为真:

  • 任何映射
  • 任何包含至少一个真值的数组
  • 任何非空字符串
  • 布尔真

请注意,在 YAML 元数据(以及使用 -M/--metadata 在命令行上指定的元数据)中,未引用的 truefalse 将被解释为布尔值。但是,使用 -V/--variable 在命令行上指定的变量将始终被赋予字符串值。因此,如果您使用 -V foo=false,条件 if(foo) 将被触发,但如果您使用 -M foo=false,则不会。

示例

$if(foo)$bar$endif$

$if(foo)$
  $foo$
$endif$

$if(foo)$
part one
$else$
part two
$endif$

${if(foo)}bar${endif}

${if(foo)}
  ${foo}
${endif}

${if(foo)}
${ foo.bar }
${else}
no foo!
${endif}

关键字 elseif 可用于简化复杂的嵌套条件语句:

$if(foo)$
XXX
$elseif(bar)$
YYY
$else$
ZZZ
$endif$

for 循环

for 循环以 for(variable)(括在匹配的分隔符中)开始,以 endfor(括在匹配的分隔符中)结束。

  • 如果 variable 是一个数组,则循环内部的材料将重复评估,variable 依次设置为数组的每个值,并连接起来。
  • 如果 variable 是一个映射,则内部的材料将设置为该映射。
  • 如果关联变量的值不是数组或映射,则将对其值执行单次迭代。

示例

$for(foo)$$foo$$sep$, $endfor$

$for(foo)$
  - $foo.last$, $foo.first$
$endfor$

${ for(foo.bar) }
  - ${ foo.bar.last }, ${ foo.bar.first }
${ endfor }

$for(mymap)$
$it.name$: $it.office$
$endfor$

您可以选择使用 sep(括在匹配的分隔符中)在连续值之间指定分隔符。sependfor 之间的材料是分隔符。

${ for(foo) }${ foo }${ sep }, ${ endfor }

在循环内部,可以使用特殊的指示性关键字 it 来代替 variable

${ for(foo.bar) }
  - ${ it.last }, ${ it.first }
${ endfor }

局部模板

局部模板(存储在不同文件中的子模板)可以通过使用局部模板的名称,后跟 () 来包含,例如:

${ styles() }

局部模板将在包含主模板的目录中查找。如果文件名没有扩展名,则假定其具有与主模板相同的扩展名。调用局部模板时,也可以使用包含文件扩展名的完整名称:

${ styles.html() }

(如果在模板目录中找不到局部模板,并且模板路径是相对路径,它还将在用户数据目录的 templates 子目录中查找。)

局部模板可以选择使用冒号应用于变量:

${ date:fancy() }

${ articles:bibentry() }

如果 articles 是一个数组,这将遍历其值,将局部模板 bibentry() 应用于每个值。因此,上面的第二个示例等同于:

${ for(articles) }
${ it:bibentry() }
${ endfor }

请注意,在遍历局部模板时必须使用指示性关键字 it。在上述示例中,bibentry 局部模板应包含 it.title(等等)而不是 articles.title

包含的局部模板中会省略末尾的换行符。

局部模板可以包含其他局部模板。

数组值之间的分隔符可以用方括号指定,紧跟在变量名或局部模板之后:

${months[, ]}

${articles:bibentry()[; ]}

在这种情况下,分隔符是字面量(与显式 for 循环中的 sep 不同),不能包含插值变量或其他模板指令。

嵌套

为确保内容“嵌套”,即后续行缩进,请使用 ^ 指令:

$item.number$  $^$$item.description$ ($item.price$)

在此示例中,如果 item.description 有多行,它们都将缩进以与第一行对齐:

00123  A fine bottle of 18-year old
       Oban whiskey. ($148)

要将多行嵌套到同一级别,请在模板中将它们与 ^ 指令对齐。例如:

$item.number$  $^$$item.description$ ($item.price$)
               (Available til $item.sellby$.)

将产生:

00123  A fine bottle of 18-year old
       Oban whiskey. ($148)
       (Available til March 30, 2020.)

如果一个变量单独出现在一行上,前面有空白字符,并且同一行上没有其他文本或指令,并且变量的值包含多行,它将自动嵌套。

可断行空格

通常,模板中的空格(与插值变量的值相反)是不可断行的,但它们可以通过使用 ~ 关键字(以另一个 ~ 结束)在模板的一部分中变为可断行。

$~$This long line may break if the document is rendered
with a short line length.$~$

管道

管道转换变量或局部变量的值。管道使用斜杠(/)在变量名(或局部变量)和管道名之间指定。示例:

$for(name)$
$name/uppercase$
$endfor$

$for(metadata/pairs)$
- $it.key$: $it.value$
$endfor$

$employee:name()/uppercase$

管道可以链式调用:

$for(employees/pairs)$
$it.key/alpha/uppercase$. $it.name$
$endfor$

一些管道接受参数:

|----------------------|------------|
$for(employee)$
$it.name.first/uppercase/left 20 "| "$$it.name.salary/right 10 " | " " |"$
$endfor$
|----------------------|------------|

目前预定义了以下管道:

  • pairs:将映射或数组转换为映射数组,每个映射具有 keyvalue 字段。如果原始值是数组,则 key 将是数组索引,从 1 开始。

  • uppercase:将文本转换为大写。

  • lowercase:将文本转换为小写。

  • length:返回值的长度:文本值为字符数,映射或数组为元素数。

  • reverse:反转文本值或数组,对其他值无效。

  • first:如果应用于非空数组,则返回数组的第一个值;否则返回原始值。

  • last:如果应用于非空数组,则返回数组的最后一个值;否则返回原始值。

  • rest:如果应用于非空数组,则返回数组中除第一个值之外的所有值;否则返回原始值。

  • allbutlast:如果应用于非空数组,则返回数组中除最后一个值之外的所有值;否则返回原始值。

  • chomp:移除尾随的换行符(和可断行空格)。

  • nowrap:禁用可断行空格上的换行。

  • alpha:将可读作整数的文本值转换为小写字母 a..z(模 26)。这可用于从数组索引获取字母枚举。要获取大写字母,请与 uppercase 链式调用。

  • roman:将可读作整数的文本值转换为小写罗马数字。这可用于从数组索引获取字母枚举。要获取大写罗马数字,请与 uppercase 链式调用。

  • left n "leftborder" "rightborder":以宽度 n 的块形式渲染文本值,左对齐,可选带左边框和右边框。对其他值无效。这可用于在表格中对齐材料。宽度是正整数,表示字符数。边框是双引号内的字符串;字面量 "\ 字符必须进行反斜杠转义。

  • right n "leftborder" "rightborder":以宽度 n 的块形式渲染文本值,右对齐,对其他值无效。

  • center n "leftborder" "rightborder":以宽度 n 的块形式渲染文本值,居中对齐,对其他值无效。

变量

元数据变量

title, author, date

允许识别文档的基本方面。通过 LaTeX 和 ConTeXt 包含在 PDF 元数据中。这些可以通过 pandoc 标题块(允许多个作者)或 YAML 元数据块 设置。

---
author:
- Aristotle
- Peter Abelard
...

请注意,如果您只想设置 PDF 或 HTML 元数据,而不在文档本身包含标题块,则可以设置 title-metaauthor-metadate-meta 变量。(默认情况下,这些变量会根据 titleauthordate 自动设置。)HTML 中的页面标题由 pagetitle 设置,默认情况下它等于 title

subtitle
文档副标题,包含在 HTML、EPUB、LaTeX、ConTeXt 和 docx 文档中
abstract
文档摘要,包含在 HTML、LaTeX、ConTeXt、AsciiDoc 和 docx 文档中
abstract-title
摘要标题,目前仅用于 HTML、EPUB 和 docx。这会自动设置为本地化值,取决于 lang,但可以手动覆盖。
keywords
要包含在 HTML、PDF、ODT、pptx、docx 和 AsciiDoc 元数据中的关键词列表;重复方式与上述 author 相同
subject
文档主题,包含在 ODT、PDF、docx、EPUB 和 pptx 元数据中
description
文档描述,包含在 ODT、docx 和 pptx 元数据中。某些应用程序将其显示为 Comments 元数据。
category
文档类别,包含在 docx 和 pptx 元数据中

此外,任何未包含在 ODT、docx 或 pptx 元数据中的根级字符串元数据都将作为自定义属性添加。例如,以下 YAML 元数据块:

---
title:  'This is the title'
subtitle: "This is the subtitle"
author:
- Author One
- Author Two
description: |
    This is a long
    description.

    It consists of two paragraphs
...

在转换为 docx、ODT 或 pptx 时,将包含 titleauthordescription 作为标准文档属性,并将 subtitle 作为自定义属性。

语言变量

lang

使用 IETF 语言标签(遵循 BCP 47 标准),例如 enen-GB,标识文档的主要语言。语言子标签查找 工具可以查找或验证这些标签。这会影响大多数格式,并在使用 LaTeX(通过 babelpolyglossia)或 ConTeXt 时控制 PDF 输出中的断字。

使用带有 lang 属性的原生 pandoc Divs 和 Spans 来切换语言:

---
lang: en-GB
...

Text in the main document language (British English).

::: {lang=fr-CA}
> Cette citation est écrite en français canadien.
:::

More text in English. ['Zitat auf Deutsch.']{lang=de}
dir

基本脚本方向,可以是 rtl(从右到左)或 ltr(从左到右)。

对于双向文档,带有 dir 属性(值 rtlltr)的原生 pandoc spandiv 可用于在某些输出格式中覆盖基本方向。如果最终渲染器(例如,生成 HTML 时的浏览器)支持 Unicode 双向算法,这可能并非总是必要的。

在使用 LaTeX 处理双向文档时,仅完全支持 xelatex 引擎(使用 --pdf-engine=xelatex)。

HTML 变量

document-css
启用在 styles.html 局部模板 中包含大部分 CSS(可以使用 pandoc --print-default-data-file=templates/styles.html 查看)。除非您使用 --css,否则此变量默认设置为 true。您可以通过例如 pandoc -M document-css=false 禁用它。
mainfont
设置 html 元素的 CSS font-family 属性。
fontsize
设置基本 CSS font-size,通常将其设置为例如 20px,但它也接受 pt(大多数浏览器中 12pt = 16px)。
fontcolor
设置 html 元素的 CSS color 属性。
linkcolor
设置所有链接的 CSS color 属性。
monofont
设置 code 元素的 CSS font-family 属性。
monobackgroundcolor
设置 code 元素的 CSS background-color 属性并添加额外填充。
linestretch
设置 html 元素的 CSS line-height 属性,最好是无单位的。
maxwidth
设置 CSS max-width 属性(默认值为 36em)。
backgroundcolor
设置 html 元素的 CSS background-color 属性。
margin-left, margin-right, margin-top, margin-bottom
设置 body 元素对应的 CSS padding 属性。

要为单个文档覆盖或扩展某些 CSS,例如包含:

---
header-includes: |
  <style>
  blockquote {
    font-style: italic;
  }
  tr.even {
    background-color: #f0f0f0;
  }
  td, th {
    padding: 0.5em 2em 0.5em 0.5em;
  }
  tbody {
    border-bottom: none;
  }
  </style>
---

HTML 数学变量

classoption
当使用 --katex 时,您可以使用 YAML 元数据-M classoption=fleqn 将显示数学方程左对齐渲染。

HTML 幻灯片变量

这些变量影响 使用 pandoc 制作幻灯片 时的 HTML 输出。

institute
作者单位:多作者时可为列表
revealjs-url
reveal.js 文档的基本 URL(默认为 https://unpkg.com/reveal.js@^5
s5-url
S5 文档的基本 URL(默认为 s5/default
slidy-url
Slidy 文档的基本 URL(默认为 https://www.w3.org/Talks/Tools/Slidy2
slideous-url
Slideous 文档的基本 URL(默认为 slideous
title-slide-attributes
reveal.js 幻灯片标题页的额外属性。有关示例,请参见 reveal.js、beamer 和 pptx 中的背景

所有 reveal.js 配置选项 都可以作为变量使用。要关闭 reveal.js 中默认为真的布尔标志,请使用 0

Beamer 幻灯片变量

这些变量改变使用 beamer 生成 PDF 幻灯片的外观。

aspectratio
幻灯片纵横比(43 表示 4:3 [默认],169 表示 16:9,1610 表示 16:10,149 表示 14:9,141 表示 1.41:1,54 表示 5:4,32 表示 3:2)
beameroption
使用 \setbeameroption{} 添加额外的 beamer 选项
institute
作者单位:多作者时可为列表
logo
幻灯片徽标图像
navigation
控制导航符号(默认为 empty 表示无导航符号;其他有效值为 frameverticalhorizontal
section-titles
为新节启用“标题页”(默认为 true)
theme, colortheme, fonttheme, innertheme, outertheme
beamer 主题
themeoptions, colorthemeoptions, fontthemeoptions, innerthemeoptions, outerthemeoptions
LaTeX beamer 主题选项(列表)
titlegraphic
标题幻灯片图像:可以是一个列表
titlegraphicoptions
标题幻灯片图像选项
shorttitle, shortsubtitle, shortauthor, shortinstitute, shortdate
一些 beamer 主题使用标题、副标题、作者、机构、日期的短版本

PowerPoint 变量

这些变量控制幻灯片的视觉方面,而这些方面不易通过模板控制。

monofont
用于代码的字体。

LaTeX 变量

Pandoc 在使用 LaTeX 引擎 创建 PDF 时使用这些变量。

布局

block-headings

使 \paragraph\subparagraph(第四级和第五级标题,或使用书本类时为第五级和第六级)成为独立而非行内;需要进一步格式化以与 \subsubsection(第三级或第四级标题)区分开来。除了使用此选项外,KOMA-Script 可以更广泛地调整标题。

---
documentclass: scrartcl
header-includes: |
  \RedeclareSectionCommand[
    beforeskip=-10pt plus -2pt minus -1pt,
    afterskip=1sp plus -1sp minus 1sp,
    font=\normalfont\itshape]{paragraph}
  \RedeclareSectionCommand[
    beforeskip=-10pt plus -2pt minus -1pt,
    afterskip=1sp plus -1sp minus 1sp,
    font=\normalfont\scshape,
    indent=0pt]{subparagraph}
...
classoption

文档类选项,例如 oneside;多个选项重复。

---
classoption:
- twocolumn
- landscape
...
documentclass
文档类:通常是标准类之一,articlebookreportKOMA-Script 等效类 scrartclscrbookscrreprt(默认页边距较小);或 memoir
geometry

geometry 包选项,例如 margin=1in;多个选项重复

---
geometry:
- top=30mm
- left=20mm
- heightrounded
...
hyperrefoptions

hyperref 包选项,例如 linktoc=all;多个选项重复

---
hyperrefoptions:
- linktoc=all
- pdfwindowui
- pdfpagemode=FullScreen
...
indent
如果为 true,pandoc 将使用文档类设置进行缩进(否则默认 LaTeX 模板会移除缩进并在段落之间添加空格)
linestretch
使用 setspace 包调整行间距,例如 1.251.5
margin-left, margin-right, margin-top, margin-bottom
如果未使用 geometry,则设置页边距(否则 geometry 会覆盖这些设置)
pagestyle
控制 \pagestyle{}:默认的 article 类支持 plain(默认)、empty(无页眉或页码)和 headings(页眉中的节标题)
papersize
纸张大小,例如 letter, a4
secnumdepth
章节编号深度(使用 --number-sections 选项或 numbersections 变量)
beamerarticle
从 Beamer 幻灯片生成文章。注意:如果您设置此变量,则必须指定 beamer writer,但使用默认的 LaTeX 模板:例如,pandoc -Vbeamerarticle -t beamer --template default.latex
handout
生成 Beamer 幻灯片的讲义版本(将覆盖层浓缩为单张幻灯片)
csquotes
加载 csquotes 包并使用 \enquote\enquote* 处理引用的文本。
csquotesoptions
用于 csquotes 包的选项(多个选项重复)。
babeloptions
传递给 babel 包的选项(可以重复以指定多个选项)。如果主语言不是用拉丁语、西里尔字母或越南语书写的欧洲语言,则默认为 provide=*。大多数用户不需要调整默认设置。

字体

fontenc
允许通过 fontenc 包(与 pdflatex 一起使用)指定字体编码;默认值为 T1(参见 LaTeX 字体编码指南
fontfamily
用于 pdflatex 的字体包:TeX Live 包含许多选项,在 LaTeX 字体目录 中有详细说明。默认是 Latin Modern
fontfamilyoptions

用作 fontfamily 的包的选项;多个选项重复。例如,要使用 Libertine 字体和比例小写(旧式)数字通过 libertinus 包:

---
fontfamily: libertinus
fontfamilyoptions:
- osf
- p
...
fontsize
正文的字体大小。标准类允许 10pt、11pt 和 12pt。要使用其他大小,请将 documentclass 设置为 KOMA-Script 类之一,例如 scrartclscrbook
mainfont, sansfont, monofont, mathfont, CJKmainfont, CJKsansfont, CJKmonofont
用于 xelatexlualatex 的字体系列:使用 fontspec 包,接受任何系统字体的名称。如果使用 xelatexCJKmainfont 使用 xecjk 包;如果使用 lualatex,则使用 luatexja 包。
mainfontoptions, sansfontoptions, monofontoptions, mathfontoptions, CJKoptions, luatexjapresetoptions

xelatexlualatex 中的 mainfont, sansfont, monofont, mathfont, CJKmainfont 一起使用的选项。允许通过 fontspec 提供的任何选择;多个选项重复。例如,要使用带小写数字的 TeX Gyre 版本 Palatino:

---
mainfont: TeX Gyre Pagella
mainfontoptions:
- Numbers=Lowercase
- Numbers=Proportional
...
mainfontfallback, sansfontfallback, monofontfallback

如果在 mainfontsansfontmonofont 中找不到字形时要尝试的字体。这些是列表。字体名称后必须跟一个冒号,并且可以选择一组选项,例如:

---
mainfontfallback:
  - "FreeSans:"
  - "NotoColorEmoji:mode=harf"
...

字体回退目前仅适用于 lualatex

babelfonts

一个将 Babel 语言名称(例如 chinese)映射到与该语言一起使用的字体的映射

---
babelfonts:
  chinese-hant: "Noto Serif CJK TC"
  russian: "Noto Serif"
...
microtypeoptions
传递给 microtype 包的选项

前言

lof, lot
包含图表列表、表格列表(也可以使用 --lof/--list-of-figures--lot/--list-of-tables 设置)
thanks
文档标题后的致谢脚注内容
toc
包含目录(也可以使用 --toc/--table-of-contents 设置)
toc-depth
目录中包含的章节级别

BibLaTeX 参考文献

这些变量在使用 BibLaTeX 进行 引文渲染 时起作用。

biblatexoptions
biblatex 选项列表
biblio-style
--natbib--biblatex 一起使用时的参考文献样式
biblio-title
--natbib--biblatex 一起使用时的参考文献标题
bibliography
用于解析引用的参考文献
natbiboptions
natbib 选项列表

ConTeXt 变量

Pandoc 在使用 ConTeXt 创建 PDF 时使用这些变量。

fontsize
正文的字体大小(例如 10pt12pt
headertext, footertext
放置在运行页眉或页脚中的文本(参见 ConTeXt 页眉和页脚);最多重复四次以进行不同位置的放置
indenting
控制段落缩进,例如 yes,small,next(参见 ConTeXt 缩进);多个选项重复
interlinespace
调整行间距,例如 4ex(使用 setupinterlinespace);多个选项重复
layout
页面边距和文本排列选项(参见 ConTeXt 布局);多个选项重复
linkcolor, contrastcolor
页面外部和内部链接的颜色,例如 red, blue(参见 ConTeXt 颜色
linkstyle
链接的字体样式,例如 normalboldslantedboldslantedtypecapsmall
lof, lot
包含图表列表、表格列表
mainfont, sansfont, monofont, mathfont
字体系列:接受任何系统字体名称(参见 ConTeXt 字体切换
mainfontfallback, sansfontfallback, monofontfallback
要尝试的字体列表,按顺序排列,如果主字体中未找到字形。使用 \definefallbackfamily 兼容的字体名称语法。不支持 Emoji 字体。
margin-left, margin-right, margin-top, margin-bottom
设置页边距,如果未使用 layout(否则 layout 会覆盖这些设置)
pagenumbering
页码样式和位置(使用 setuppagenumbering);多个选项重复
papersize
纸张大小,例如 letterA4landscape(参见 ConTeXt 纸张设置);多个选项重复
pdfa
在序言中添加生成指定类型 PDF/A 所需的设置,例如 1a:20052a。如果未指定类型(即,值设置为 True,例如通过 --metadata=pdfa 或 YAML 元数据块中的 pdfa: true),出于向后兼容性原因,将默认使用 1b:2005。不支持在未指定值的情况下使用 --variable=pdfa。要成功生成 PDF/A,需要 ICC 颜色配置文件可用,并且内容和所有包含的文件(如图像)必须符合标准。ICC 配置文件和输出意图可以使用变量 pdfaiccprofilepdfaintent 指定。另请参阅 ConTeXt PDFA 以获取更多详细信息。
pdfaiccprofile
pdfa 结合使用时,指定 PDF 中使用的 ICC 配置文件,例如 default.cmyk。如果未指定,则默认使用 sRGB.icc。可以重复以包含多个配置文件。请注意,配置文件必须在系统上可用。可以从 ConTeXt ICC Profiles 获取它们。
pdfaintent
pdfa 结合使用时,指定颜色的输出意图,例如 ISO coated v2 300\letterpercent\space (ECI)。如果未指定,则默认使用 sRGB IEC61966-2.1
toc
包含目录(也可以使用 --toc/--table-of-contents 设置)
urlstyle
无链接文本链接的字体样式,例如 normalboldslantedboldslantedtypecapsmall
whitespace
段落之间的间距,例如 nonesmall(使用 setupwhitespace
includesource
将所有源文档作为文件附件包含在 PDF 文件中

wkhtmltopdf 变量

Pandoc 在使用 wkhtmltopdf 创建 PDF 时使用这些变量。--css 选项也会影响输出。

footer-html, header-html
在页眉和页脚中添加信息
margin-left, margin-right, margin-top, margin-bottom
设置页边距
papersize
设置 PDF 纸张大小

man 页面变量

adjusting
将文本调整到左(l)、右(r)、居中(c)或两边(b)页边距
footer
man 页面中的页脚
header
man 页面中的页眉
section
man 页面中的节号

Texinfo 变量

version
软件版本(用于标题和标题页)
filename
要生成的信息文件的名称(默认为基于 texi 文件名的名称)

Typst 变量

template
要使用的 Typst 模板。
margin
一个字典,包含 Typst 文档中定义的字段:xytopbottomleftright
papersize
纸张大小:a4, us-letter 等。
mainfont
用于主字体的系统字体名称。
fontsize
字体大小(例如,12pt)。
section-numbering
用于节编号的方案,例如 1.A.1
page-numbering
用于页码编号的方案,例如 1i,或空字符串以省略页码编号。
columns
正文的列数。

ms 变量

fontfamily
A (Avant Garde), B (Bookman), C (Helvetica), HN (Helvetica Narrow), P (Palatino), 或 T (Times New Roman)。此设置不影响源代码,源代码始终使用等宽 Courier 显示。这些内置字体在字符覆盖方面有限。可以使用 Peter Schaffter 提供的脚本 install-font.sh 安装额外字体,其详细文档可在 他的网站 上找到。
indent
段落缩进(例如 2m
lineheight
行高(例如 12p
pointsize
磅值(例如 10p

自动设置的变量

Pandoc 会根据 选项 或文档内容自动设置这些变量;用户也可以修改它们。这些变量因输出格式而异,包括以下内容:

body
文档正文
date-meta
转换为 ISO 8601 YYYY-MM-DD 格式的 date 变量,包含在所有基于 HTML 的格式中(dzslides, epub, html, html4, html5, revealjs, s5, slideous, slidy)。date 可识别的格式有:mm/dd/yyyy, mm/dd/yy, yyyy-mm-dd (ISO 8601), dd MM yyyy (例如 02 Apr 201802 April 2018), MM dd, yyyy (例如 Apr. 02, 2018April 02, 2018), yyyy[mm[dd]] (例如 20180402, 2018042018)。
header-includes
-H/--include-in-header 指定的内容(可以有多个值)
include-before
-B/--include-before-body 指定的内容(可以有多个值)
include-after
-A/--include-after-body 指定的内容(可以有多个值)
meta-json
文档所有元数据的 JSON 表示。字段值会转换为所选的输出格式。
numbersections
如果指定了 -N/--number-sections,则为非空值
sourcefile, outputfile

源文件和目标文件名,如命令行所示。如果输入来自多个文件,sourcefile 也可以是列表;如果输入来自标准输入,则为空。您可以在模板中使用以下片段来区分它们:

$if(sourcefile)$
$for(sourcefile)$
$sourcefile$
$endfor$
$else$
(stdin)
$endif$

同样,如果输出到终端,outputfile 可以是 -

如果需要绝对路径,请使用例如 $curdir$/$sourcefile$

pdf-engine
如果使用 --pdf-engine 提供了 PDF 引擎名称,或者如果请求 PDF 输出,则为该格式的默认引擎。
curdir
运行 pandoc 的工作目录。
pandoc-version
pandoc 版本。
toc
如果指定了 --toc/--table-of-contents,则为非空值
toc-title
目录标题(仅适用于 EPUB、HTML、revealjs、opendocument、odt、docx、pptx、beamer、LaTeX)。请注意,在 docx 和 pptx 中,自定义的 toc-title 将从元数据中获取,但不能设置为变量。

扩展

可以通过启用或禁用各种扩展来调整某些阅读器和写入器的行为。

可以通过在格式名称后添加 +EXTENSION 来启用扩展,通过添加 -EXTENSION 来禁用扩展。例如,--from markdown_strict+footnotes 是启用了脚注的严格 Markdown,而 --from markdown-footnotes-pipe_tables 是不带脚注或管道表格的 pandoc Markdown。

Markdown 阅读器和写入器对扩展的使用最多。因此,仅它们使用的扩展在下文的 Pandoc 的 Markdown 部分介绍(commonmarkgfmMarkdown 变体)。接下来,将介绍也适用于其他格式的扩展。

请注意,添加到 ipynb 格式的 Markdown 扩展会影响 Jupyter 笔记本中的 Markdown 单元格(就像命令行选项如 --markdown-headings 一样)。

排版

扩展:smart

将直引号解释为花引号,--- 解释为长破折号,-- 解释为短破折号,... 解释为省略号。在某些缩写后插入不间断空格,例如“Mr.”

此扩展可以为以下格式启用/禁用:

输入格式
markdown, commonmark, latex, mediawiki, org, rst, twiki, html
输出格式
markdown, latex, context, rst
默认启用:
markdown, latex, context(输入和输出均是)

注意:如果您正在编写 Markdown,则 smart 扩展具有相反的效果:本应是花引号的会变为直引号。

在 LaTeX 中,smart 表示使用标准的 TeX 连字来表示引号(``'' 用于双引号,`' 用于单引号)和破折号(-- 用于短破折号,--- 用于长破折号)。如果禁用 smart,则在读取 LaTeX 时,pandoc 将按字面意义解析这些字符。在编写 LaTeX 时,启用 smart 告诉 pandoc 在可能的情况下使用连字;如果禁用 smart,pandoc 将使用 Unicode 引号和破折号字符。

标题和章节

扩展:auto_identifiers

没有明确指定标识符的标题将根据标题文本自动分配唯一的标识符。

此扩展可以为以下格式启用/禁用:

输入格式
markdown, latex, rst, mediawiki, textile
输出格式
markdown, muse
默认启用:
markdown, muse

用于从标题文本派生标识符的默认算法是:

  • 删除所有格式、链接等。
  • 删除所有脚注。
  • 删除所有非字母数字字符,下划线、连字符和句点除外。
  • 将所有空格和换行符替换为连字符。
  • 将所有字母字符转换为小写。
  • 删除第一个字母之前的所有内容(标识符不能以数字或标点符号开头)。
  • 如果在此之后什么都没有剩下,则使用标识符 section

因此,例如:

标题 标识符
HTML 中的标题标识符 heading-identifiers-in-html
Maître d'hôtel maître-dhôtel
*Dogs*?--in *my* house? dogs--in-my-house
[HTML], [S5], or [RTF]? html-s5-or-rtf
3. Applications applications
33 section

在大多数情况下,这些规则应该允许从标题文本确定标识符。例外情况是当几个标题具有相同的文本时;在这种情况下,第一个将获得如上所述的标识符;第二个将获得相同的标识符,并附加 -1;第三个附加 -2;依此类推。

(然而,如果启用了 gfm_auto_identifiers,则使用不同的算法;参见下文。)

这些标识符用于为 --toc|--table-of-contents 选项生成的目录提供链接目标。它们还方便了从文档的一个部分链接到另一个部分。例如,指向此部分的链接可能如下所示:

See the section on
[heading identifiers](#heading-identifiers-in-html-latex-and-context).

然而,请注意,这种提供章节链接的方法仅适用于 HTML、LaTeX 和 ConTeXt 格式。

如果指定了 --section-divs 选项,那么每个节将被包裹在一个 section 标签中(如果指定了 html4,则为 div 标签),并且标识符将附加到封闭的 <section>(或 <div>)标签,而不是标题本身。这允许使用 JavaScript 操作整个节,或在 CSS 中以不同方式处理。

扩展:ascii_identifiers

使 auto_identifiers 生成的标识符为纯 ASCII。带重音的拉丁字母会去除重音,非拉丁字母会被省略。

扩展:gfm_auto_identifiers

auto_identifiers 使用的算法更改为符合 GitHub 的方法。空格转换为连字符(-),大写字符转换为小写字符,除了 -_ 之外的标点符号字符被移除。表情符号被替换为其名称。

数学输入

扩展 tex_math_dollarstex_math_gfmtex_math_single_backslashtex_math_double_backslash 在 Pandoc 的 Markdown 部分有详细描述。

但是,它们也可以与 HTML 输入一起使用。这对于读取使用 MathJax 格式化的网页非常方便,例如。

原始 HTML/TeX

以下扩展在 Pandoc 的 Markdown 各自部分中进行了更详细的描述:

  • raw_html 允许将 pandoc 的 AST 中无法表示的 HTML 元素解析为原始 HTML。默认情况下,此功能对 HTML 输入禁用。

  • raw_tex 允许将原始 LaTeX、TeX 和 ConTeXt 包含在文档中。此扩展可以为以下格式启用/禁用(除了 markdown):

    输入格式
    latex, textile, html (仅环境,\ref\eqref), ipynb
    输出格式
    textile, commonmark

    注意:应用于 ipynb 时,raw_htmlraw_tex 不仅影响 Markdown 单元格中的原始 TeX,还影响输出单元格中 MIME 类型为 text/html 的数据。由于 ipynb 阅读器在给定多个选项时会尝试保留最丰富的输出,因此在转换为 docx 等不允许原始 htmltex 的格式时,禁用 raw_htmlraw_tex 将获得最佳效果。

  • native_divs 使 HTML div 元素被解析为原生 pandoc Div 块。如果您希望它们被解析为原始 HTML,请使用 -f html-native_divs+raw_html

  • native_spans 使 HTML span 元素被解析为原生 pandoc Span 内联元素。如果您希望它们被解析为原始 HTML,请使用 -f html-native_spans+raw_html。如果您想在将 HTML 转换为 Markdown 时删除所有 divspan,可以使用 pandoc -f html-native_divs-native_spans -t markdown

Haskell 文学编程支持

扩展:literate_haskell

将文档视为 Haskell 文学编程源文件。

此扩展可以为以下格式启用/禁用:

输入格式
markdown, rst, latex
输出格式
markdown, rst, latex, html

如果您在上述格式之一后附加 +lhs(或 +literate_haskell),pandoc 会将文档视为 Haskell 文学编程源文件。这意味着:

  • 在 Markdown 输入中,“鸟足迹”部分将被解析为 Haskell 代码而不是块引用。\begin{code}\end{code} 之间的文本也将被视为 Haskell 代码。对于 ATX 风格的标题,将使用字符“=”代替“#”。

  • 在 Markdown 输出中,带有 haskellliterate 类的代码块将使用鸟足迹渲染,块引用将缩进一个空格,因此它们不会被视为 Haskell 代码。此外,标题将以 setext 风格(带下划线)而非 ATX 风格(带“#”字符)渲染。(这是因为 ghc 将第 1 列中的“#”字符视为行号的引入。)

  • 在 restructured text 输入中,“鸟迹”部分将被解析为 Haskell 代码。

  • 在 restructured text 输出中,带有 haskell 类的代码块将使用鸟迹渲染。

  • 在 LaTeX 输入中,code 环境中的文本将被解析为 Haskell 代码。

  • 在 LaTeX 输出中,带有 haskell 类的代码块将在 code 环境内渲染。

  • 在 HTML 输出中,带有 haskell 类的代码块将使用 literatehaskell 类和鸟迹渲染。

示例

pandoc -f markdown+lhs -t html

读取采用 Markdown 约定格式化的 Literate Haskell 源代码,并写入普通的 HTML(不带鸟迹)。

pandoc -f markdown+lhs -t html+lhs

写入带有 Haskell 代码(以鸟迹表示)的 HTML,以便它可以作为 Literate Haskell 源代码进行复制和粘贴。

请注意,GHC 要求鸟迹位于第一列,因此,缩进的 Literate 代码块(例如,在条目化环境内部)将不会被 Haskell 编译器识别。

其他扩展

扩展:empty_paragraphs

允许空段落。默认情况下,空段落会被省略。

此扩展可以为以下格式启用/禁用:

输入格式
docx, html
输出格式
docx, odt, opendocument, html, latex

扩展:native_numbering

启用图表和表格的本地编号。枚举从 1 开始。

此扩展可以为以下格式启用/禁用:

输出格式
odt, opendocument, docx

扩展:xrefs_name

文档内部指向标题、图表和表格的链接将替换为交叉引用,这些交叉引用将使用引用项目的名称或标题。生成的文档刷新后,原始链接文本将被替换。此扩展可以与 xrefs_number 结合使用,在这种情况下,数字将出现在名称之前。

交叉引用中的文本仅在文档刷新后才能与引用的项目保持一致。

此扩展可以为以下格式启用/禁用:

输出格式
odt, opendocument

扩展:xrefs_number

文档内部指向标题、图表和表格的链接将替换为交叉引用,这些交叉引用将使用引用项目的编号。原始链接文本将被丢弃。此扩展可以与 xrefs_name 结合使用,在这种情况下,名称或标题编号将出现在数字之后。

为了使 xrefs_number 有用,生成的文档中必须启用标题编号,并且还必须使用例如 native_numbering 扩展来启用表格和图表的标题。

交叉引用中的数字仅在最终文档中可见,并且只有在刷新后才可见。

此扩展可以为以下格式启用/禁用:

输出格式
odt, opendocument

扩展:styles

从 docx 转换时,为所有 docx 样式添加 custom-styles 属性,无论 pandoc 是否理解这些样式的含义。因为属性不能直接添加到 pandoc AST 中的段落或文本中,段落样式将导致创建 Div 元素,字符样式将导致创建 Span 元素来保存属性。(表格样式将直接添加到 Table 元素中。)此扩展可与 docx 自定义样式一起使用。

输入格式
docx

扩展:amuse

muse 输入格式中,这将启用 Text::Amuse 对 Emacs Muse 标记的扩展。

扩展:raw_markdown

ipynb 输入格式中,这会导致 Markdown 单元格作为原始 Markdown 块(允许无损往返转换)而非被解析地包含进来。仅当您以 ipynb 或基于 Markdown 的输出格式为目标时才使用此功能。

扩展:citations (typst)

citations 扩展在 typst 中启用时(默认情况下启用),typst 引用将被解析为原生的 pandoc 引用,原生的 pandoc 引用将渲染为 typst 引用。

扩展:citations (org)

citations 扩展在 org 中启用时,org-cite 和 org-ref 样式的引用将被解析为原生的 pandoc 引用,并且 org-cite 引用将用于渲染原生的 pandoc 引用。

扩展:citations (docx)

citationsdocx 中启用时,Zotero、Mendeley 或 EndNote 插件插入的引用将被解析为原生的 pandoc 引用。(否则,由文献软件生成的格式化引用将作为普通文本解析。)

扩展:fancy_lists (org)

Pandoc Markdown 的花式列表的某些方面在 org 输入中也受支持,模仿 Emacs 中的选项 org-list-allow-alphabetical。与 Org Mode 中一样,启用此扩展允许有序列表除了阿拉伯数字外,还可以解析小写和大写字母标记。请注意,对于 Org,这不包括罗马数字或 Pandoc Markdown 中由扩展启用的 # 占位符。

扩展:element_citations

jats 输出格式中,这会导致引用项被替换为 <element-citation> 元素。这些元素不受 CSL 样式的影响,但项目的全部信息都包含在标签中。

扩展:ntb

context 输出格式中,这将启用 自然表格 (TABLE) 的使用,而非默认的 极限表格 (xtables)。自然表格允许更细粒度的全局定制,但与极限表格相比会带来性能损失。

扩展:tagging

context 输出中启用此扩展将生成适合制作带标签 PDF 的标记。这包括段落的附加标记和强调文本的替代标记。如果启用此扩展,emphasis-command 模板变量将被设置。

Pandoc 的 Markdown

Pandoc 理解 John Gruber 的 Markdown 语法的扩展和略微修订版本。本文档解释了该语法,并指出了与原始 Markdown 的差异。除非另有说明,否则这些差异可以通过使用 markdown_strict 格式而不是 markdown 来抑制。扩展可以启用或禁用,以更精细地指定行为。它们在下文中描述。另请参见上面的扩展,了解也适用于其他格式的扩展。

设计理念

Markdown 的设计宗旨是易于书写,更重要的是易于阅读

一个 Markdown 格式的文档应该能够直接以纯文本形式发布,而不需要看起来像是被标签或格式指令标记过。
—— John Gruber

这一原则指导了 pandoc 在为表格、脚注和其他扩展寻找语法方面的决策。

然而,在某一方面,pandoc 的目标与 Markdown 的原始目标不同。Markdown 最初设计时考虑的是 HTML 生成,而 pandoc 旨在支持多种输出格式。因此,虽然 pandoc 允许嵌入原始 HTML,但它不鼓励这样做,并提供了其他非 HTML 的方式来表示重要的文档元素,如定义列表、表格、数学公式和脚注。

段落

一个段落是由一行或多行文本以及其后的一行或多行空行组成的。换行符被视为空格,因此您可以根据需要重新排布段落。如果您需要强制换行,请在行末添加两个或更多空格。

扩展:escaped_line_breaks

反斜杠后跟换行符也是一个强制换行符。注意:在多行和网格表格单元格中,这是创建强制换行的唯一方法,因为单元格中的尾随空格会被忽略。

标题

标题有两种:Setext 样式和 ATX 样式。

Setext 样式标题

Setext 样式标题是一行文本,通过一行 = 符号(用于一级标题)或 - 符号(用于二级标题)“加下划线”

A level-one heading
===================

A level-two heading
-------------------

标题文本可以包含行内格式,例如强调(参见下面的行内格式)。

ATX 样式标题

ATX 样式标题由一到六个 # 符号和一行文本组成,可选地后跟任意数量的 # 符号。行开头的 # 符号数量即为标题级别

## A level-two heading

### A level-three heading ###

与 Setext 样式标题一样,标题文本可以包含格式。

# A level-one heading with a [link](/url) and *emphasis*

扩展:blank_before_header

原始 Markdown 语法不要求标题前有空行。Pandoc 则要求有空行(当然,文档开头除外)。这样要求的原因是,# 符号很容易因意外(可能是换行)而出现在行首。例如,考虑以下情况

I like several of their flavors of ice cream:
#22, for example, and #5.

扩展:space_in_atx_header

许多 Markdown 实现不要求 ATX 标题开头的 # 符号与标题文本之间有空格,因此 #5 bolt#hashtag 都被算作标题。启用此扩展后,pandoc 要求有空格。

标题标识符

另请参见上面的auto_identifiers 扩展

扩展:header_attributes

标题可以在包含标题文本的行末使用此语法来分配属性

{#identifier .class .class key=value key=value}

因此,例如,以下标题都将被分配标识符 foo

# My heading {#foo}

## My heading ##    {#foo}

My other heading   {#foo}
---------------

(此语法与 PHP Markdown Extra 兼容。)

请注意,虽然此语法允许分配类和键/值属性,但通常编写器不会使用所有这些信息。标识符、类和键/值属性用于 HTML 和基于 HTML 的格式,例如 EPUB 和 slidy。标识符用于 LaTeX、ConTeXt、Textile、Jira 标记和 AsciiDoc 编写器中的标签和链接锚点。

带有 unnumbered 类的标题将不会被编号,即使指定了 --number-sections。在属性上下文中,单个连字符(-)等同于 .unnumbered,在非英语文档中更受欢迎。因此,

# My heading {-}

与...相同

# My heading {.unnumbered}

如果除了 unnumbered 之外还存在 unlisted 类,该标题将不会包含在目录中。(目前此功能仅针对某些格式实现:基于 LaTeX 和 HTML 的格式、PowerPoint 和 RTF。)

扩展:implicit_header_references

Pandoc 的行为就好像为每个标题都定义了引用链接一样。因此,要链接到一个标题

# Heading identifiers in HTML

您可以简单地写

[Heading identifiers in HTML]

或者

[Heading identifiers in HTML][]

或者

[the section on heading identifiers][heading identifiers in
HTML]

而不是显式地给出标识符

[Heading identifiers in HTML](#heading-identifiers-in-html)

如果有多个文本相同的标题,相应的引用将仅链接到第一个,您需要使用显式链接来链接到其他标题,如上所述。

与常规引用链接一样,这些引用不区分大小写。

显式链接引用定义始终优先于隐式标题引用。因此,在以下示例中,链接将指向 bar,而不是 #foo

# Foo

[foo]: bar

See [foo]

块引用

Markdown 使用电子邮件约定来引用文本块。块引用是一个或多个段落或其他块级元素(如列表或标题),每行前面都有一个 > 字符和可选的空格。(> 不必从左边距开始,但其缩进不能超过三个空格。)

> This is a block quote. This
> paragraph has two lines.
>
> 1. This is a list inside a block quote.
> 2. Second item.

一种“懒惰”形式,即仅在每个块的第一行要求 > 字符,也受允许

> This is a block quote. This
paragraph has two lines.

> 1. This is a list inside a block quote.
2. Second item.

块引用中可以包含的块元素包括其他块引用。也就是说,块引用可以嵌套

> This is a block quote.
>
> > A block quote within a block quote.

如果 > 字符后面跟着一个可选的空格,该空格将被视为块引用标记的一部分,而不是内容缩进的一部分。因此,要在块引用中放置缩进的代码块,您需要在 > 之后添加五个空格

>     code

扩展:blank_before_blockquote

原始 Markdown 语法不要求块引用前有空行。Pandoc 则要求有空行(当然,文档开头除外)。这样要求的原因是,> 符号很容易因意外(可能是换行)而出现在行首。因此,除非使用 markdown_strict 格式,否则以下内容在 pandoc 中不会生成嵌套块引用

> This is a block quote.
>> Not nested, since `blank_before_blockquote` is enabled by default

逐字(代码)块

缩进代码块

缩进四个空格(或一个制表符)的文本块被视为逐字文本:也就是说,特殊字符不会触发特殊格式,所有空格和换行符都将保留。例如,

    if (a > 3) {
      moveShip(5 * gravity, DOWN);
    }

初始的(四个空格或一个制表符)缩进不被视为逐字文本的一部分,并在输出中被移除。

注意:逐字文本中的空行不必以四个空格开头。

围栏式代码块

扩展:fenced_code_blocks

除了标准缩进代码块外,pandoc 还支持围栏式代码块。这些代码块以一排三个或更多波浪线(~)开头,并以一排波浪线结尾,且结尾的波浪线长度必须至少与开头的波浪线一样长。这些行之间的所有内容都将被视为代码。无需缩进

~~~~~~~
if (a > 3) {
  moveShip(5 * gravity, DOWN);
}
~~~~~~~

与普通代码块一样,围栏式代码块必须与周围文本用空行分隔。

如果代码本身包含一排波浪线或反引号,只需在开头和结尾使用更长一排的波浪线或反引号

~~~~~~~~~~~~~~~~
~~~~~~~~~~
code including tildes
~~~~~~~~~~
~~~~~~~~~~~~~~~~

扩展:backtick_code_blocks

fenced_code_blocks 相同,但使用反引号(`)而不是波浪线(~)。

扩展:fenced_code_attributes

您可以选择使用此语法将属性附加到围栏式或反引号代码块

~~~~ {#mycode .haskell .numberLines startFrom="100"}
qsort []     = []
qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++
               qsort (filter (>= x) xs)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

这里 mycode 是一个标识符,haskellnumberLines 是类,startFrom 是一个值为 100 的属性。某些输出格式可以使用此信息进行语法高亮显示。目前,唯一使用此信息的输出格式是 HTML、LaTeX、Docx、Ms 和 PowerPoint。如果您的输出格式和语言支持高亮显示,则上述代码块将显示为高亮,并带有行号。(要查看支持哪些语言,请键入 pandoc --list-highlight-languages。)否则,上述代码块将显示如下

<pre id="mycode" class="haskell numberLines" startFrom="100">
  <code>
  ...
  </code>
</pre>

numberLines(或 number-lines)类将使代码块的行带上编号,从 1startFrom 属性的值开始。lineAnchors(或 line-anchors)类将使行在 HTML 输出中成为可点击的锚点。

还可以使用快捷形式来指定代码块的语言

```haskell
qsort [] = []
```

这等同于

``` {.haskell}
qsort [] = []
```

这种快捷形式可以与属性结合使用

```haskell {.numberLines}
qsort [] = []
```

这等同于

``` {.haskell .numberLines}
qsort [] = []
```

如果 fenced_code_attributes 扩展被禁用,但输入包含代码块的类属性,则第一个类属性将在起始围栏之后作为裸词打印。

若要阻止所有高亮显示,请使用 --no-highlight 标志。若要设置高亮样式,请使用 --highlight-style。有关高亮显示的更多信息,请参见下面的语法高亮

行块

扩展:line_blocks

行块是一系列以竖线(|)和随后的一个空格开头的行。行的划分将在输出中保留,任何前导空格也将保留;否则,这些行将按 Markdown 格式化。这对于诗歌和地址很有用

| The limerick packs laughs anatomical
| In space that is quite economical.
|    But the good ones I've seen
|    So seldom are clean
| And the clean ones so seldom are comical

| 200 Main St.
| Berkeley, CA 94718

如果需要,行可以强制换行,但续行必须以一个空格开头。

| The Right Honorable Most Venerable and Righteous Samuel L.
  Constable, Jr.
| 200 Main St.
| Berkeley, CA 94718

内容中允许使用行内格式(例如强调),但不能跨行。不识别块级格式(例如块引用或列表)。

此语法借鉴自 reStructuredText

列表

无序列表

无序列表是项目符号列表项的列表。项目符号列表项以项目符号(*+-)开头。这是一个简单示例

* one
* two
* three

这将生成一个“紧凑”列表。如果您想要一个“松散”列表,其中每个项目都格式化为一个段落,请在项目之间留出空格

* one

* two

* three

项目符号不必与左边距齐平;它们可以缩进一、二或三个空格。项目符号后面必须有空格。

如果后续行与第一行(在项目符号之后)齐平,列表项看起来最佳

* here is my first
  list item.
* and my second.

但 Markdown 也允许“懒惰”格式

* here is my first
list item.
* and my second.

列表项中的块内容

一个列表项可以包含多个段落和其他块级内容。但是,后续段落必须以空行开头,并缩进以与列表标记后的第一个非空白内容对齐。

  * First paragraph.

    Continued.

  * Second paragraph. With a code block, which must be indented
    eight spaces:

        { code }

例外:如果列表标记后跟一个缩进代码块(该代码块必须在列表标记后空出 5 个空格开始),则后续段落必须在列表标记的最后一个字符之后两列开始

*     code

  continuation paragraph

列表项可以包含其他列表。在这种情况下,前面的空行是可选的。嵌套列表必须缩进,以与包含列表项的列表标记后的第一个非空白字符对齐。

* fruits
  + apples
    - macintosh
    - red delicious
  + pears
  + peaches
* vegetables
  + broccoli
  + chard

如上所述,Markdown 允许您“懒惰”地编写列表项,而不是缩进续行。但是,如果列表项中有多个段落或其他块,则每个段落或块的第一行必须缩进。

+ A lazy, lazy, list
item.

+ Another one; this looks
bad but is legal.

    Second paragraph of second
list item.

有序列表

有序列表的工作方式与无序列表相同,只是项目以编号符而不是项目符号开头。

在原始 Markdown 中,编号符是十进制数字,后跟句点和空格。数字本身被忽略,因此此列表之间没有区别

1.  one
2.  two
3.  three

和这个列表

5.  one
7.  two
1.  three

扩展:fancy_lists

与原始 Markdown 不同,pandoc 允许有序列表项除了阿拉伯数字外,还可以用大写和小写字母以及罗马数字标记。列表标记可以括在括号中,或后跟单个右括号或句点。它们必须与后面的文本至少间隔一个空格;如果列表标记是带句点的大写字母,则必须至少间隔两个空格。1

fancy_lists 扩展还允许使用“#”作为有序列表标记来代替数字

#. one
#. two

注意:‘#’ 有序列表标记不适用于 commonmark

扩展:startnum

Pandoc 还关注所使用的列表标记类型和起始编号,并且在输出格式中尽可能保留这两者。因此,以下内容生成一个列表,其中数字后跟单个括号,从 9 开始,以及一个带有小写罗马数字的子列表

 9)  Ninth
10)  Tenth
11)  Eleventh
       i. subone
      ii. subtwo
     iii. subthree

每当使用不同类型的列表标记时,Pandoc 都会开始一个新的列表。因此,以下内容将创建三个列表

(2) Two
(5) Three
1.  Four
*   Five

如果需要默认列表标记,请使用 #.

#.  one
#.  two
#.  three

扩展:task_lists

Pandoc 支持任务列表,使用 GitHub-Flavored Markdown 的语法。

- [ ] an unchecked task list item
- [x] checked item

定义列表

扩展:definition_lists

Pandoc 支持定义列表,使用 PHP Markdown Extra 的语法,并带有一些扩展。2

Term 1

:   Definition 1

Term 2 with *inline markup*

:   Definition 2

        { some code, part of Definition 2 }

    Third paragraph of definition 2.

每个术语必须在一行内,后面可以有一个空行(可选),并且必须后跟一个或多个定义。定义以冒号或波浪线开头,可以缩进一到两个空格。

一个术语可以有多个定义,并且每个定义可以包含一个或多个块元素(段落、代码块、列表等),每个缩进四个空格或一个制表符。定义的主体(不包括第一行)应该缩进四个空格。然而,与其他 Markdown 列表一样,您可以“懒惰地”省略缩进,但段落或其他块元素的开头除外

Term 1

:   Definition
with lazy continuation.

    Second paragraph of the definition.

如果您在定义前留有空格(如上例所示),定义文本将被视为一个段落。在某些输出格式中,这意味着术语/定义对之间会有更大的间距。要获得更紧凑的定义列表,请省略定义前的空格

Term 1
  ~ Definition 1

Term 2
  ~ Definition 2a
  ~ Definition 2b

请注意,定义列表中的项目之间需要有空格。(一个放宽此要求但禁止“懒惰”强制换行的变体,可以通过compact_definition_lists 扩展激活。)

编号示例列表

扩展:example_lists

特殊的列表标记 @ 可用于按顺序编号的示例。文档中第一个带有 @ 标记的列表项将被编号为“1”,下一个为“2”,依此类推。编号的示例不必出现在单个列表中;每个使用 @ 的新列表将从上一个列表停止的地方继续。因此,例如

(@)  My first example will be numbered (1).
(@)  My second example will be numbered (2).

Explanation of examples.

(@)  My third example will be numbered (3).

编号的示例可以在文档的其他地方被标记和引用

(@good)  This is a good example.

As (@good) illustrates, ...

标签可以是任何由字母数字字符、下划线或连字符组成的字符串。

示例列表中的续段落必须始终缩进四个空格,无论列表标记的长度如何。也就是说,示例列表始终表现为已设置 four_space_rule 扩展。这是因为示例标签通常较长,将内容缩进到标签后的第一个非空格字符会很尴尬。

您可以通过重复使用其标签来重复之前的编号示例

(@foo) Sample sentence.

Intervening text...

This theory can explain the case we saw earlier (repeated):

(@foo) Sample sentence.

然而,这只有在重复项单独位于一个列表中时才能可靠地工作,因为每个编号示例列表都将从其起始编号连续编号。

结束列表

如果您想在列表后放置一个缩进的代码块怎么办?

-   item one
-   item two

    { my code block }

麻烦了!在这里,pandoc(像其他 Markdown 实现一样)会将 { my code block } 视为第二项的第二个段落,而不是一个代码块。

要在第二项后“截断”列表,您可以插入一些非缩进内容,例如 HTML 注释,这在任何格式中都不会产生可见输出

-   item one
-   item two

<!-- end of list -->

    { my code block }

如果您想要两个连续的列表而不是一个大列表,您可以使用相同的技巧

1.  one
2.  two
3.  three

<!-- -->

1.  uno
2.  dos
3.  tres

水平分隔线

包含三个或更多 *-_ 字符(可选地由空格分隔)的行会生成一条水平分隔线

*  *  *  *

---------------

我们强烈建议水平分隔线与周围文本用空行分隔。如果水平分隔线后面没有空行,pandoc 可能会尝试将后面的行解释为 YAML 元数据块或表格。

表格

可以使用四种表格。前三种表格预设使用固定宽度字体,例如 Courier。第四种表格可与比例字体一起使用,因为它不要求对齐列。

扩展:table_captions

所有四种表格都可以选择提供标题(如下例所示)。标题是一个以字符串 Table:(或 table: 或仅 :)开头的段落,该字符串将被剥离。它可以出现在表格之前或之后。

扩展:simple_tables

简单表格如下所示

  Right     Left     Center     Default
-------     ------ ----------   -------
     12     12        12            12
    123     123       123          123
      1     1          1             1

Table:  Demonstration of simple table syntax.

表头和表格行必须各占一行。列对齐方式由表头文本相对于其下方虚线的位置决定:3

  • 如果虚线右侧与表头文本对齐,但左侧超出表头文本,则该列右对齐。
  • 如果虚线左侧与表头文本对齐,但右侧超出表头文本,则该列左对齐。
  • 如果虚线在两侧都超出表头文本,则该列居中对齐。
  • 如果虚线在两侧都与表头文本齐平,则使用默认对齐方式(在大多数情况下,这将是左对齐)。

表格必须以空行结束,或者以一行虚线后跟空行结束。

列标题行可以省略,但前提是使用虚线来结束表格。例如

-------     ------ ----------   -------
     12     12        12             12
    123     123       123           123
      1     1          1              1
-------     ------ ----------   -------

当省略表头行时,列对齐方式将根据表格主体的第一行确定。因此,在上面的表格中,列将分别右对齐、左对齐、居中对齐和右对齐。

扩展:multiline_tables

多行表格允许表头和表格行跨越多行文本(但不支持跨多列或多行的单元格)。这是一个示例

-------------------------------------------------------------
 Centered   Default           Right Left
  Header    Aligned         Aligned Aligned
----------- ------- --------------- -------------------------
   First    row                12.0 Example of a row that
                                    spans multiple lines.

  Second    row                 5.0 Here's another one. Note
                                    the blank line between
                                    rows.
-------------------------------------------------------------

Table: Here's the caption. It, too, may span
multiple lines.

它们的工作方式与简单表格类似,但有以下不同之处

  • 它们必须在表头文本之前以一行虚线开头(除非省略表头行)。
  • 它们必须以一行虚线,然后一个空行结束。
  • 行必须用空行分隔。

在多行表格中,表格解析器会关注列的宽度,并且写入器会尝试在输出中重现这些相对宽度。因此,如果您发现输出中的某一列太窄,请尝试在 Markdown 源中加宽它。

多行表格和简单表格都可以省略表头

----------- ------- --------------- -------------------------
   First    row                12.0 Example of a row that
                                    spans multiple lines.

  Second    row                 5.0 Here's another one. Note
                                    the blank line between
                                    rows.
----------- ------- --------------- -------------------------

: Here's a multiline table without a header.

多行表格可能只有一行,但该行后应跟一个空行(然后是结束表格的虚线行),否则表格可能被解释为简单表格。

扩展:grid_tables

网格表格如下所示

: Sample grid table.

+---------------+---------------+--------------------+
| Fruit         | Price         | Advantages         |
+===============+===============+====================+
| Bananas       | $1.34         | - built-in wrapper |
|               |               | - bright color     |
+---------------+---------------+--------------------+
| Oranges       | $2.10         | - cures scurvy     |
|               |               | - tasty            |
+---------------+---------------+--------------------+

= 行将表头与表格主体分隔开,对于无表头的表格可以省略。网格表格的单元格可以包含任意块元素(多个段落、代码块、列表等)。

单元格可以跨多列或多行

+---------------------+----------+
| Property            | Earth    |
+=============+=======+==========+
|             | min   | -89.2 °C |
| Temperature +-------+----------+
| 1961-1990   | mean  | 14 °C    |
|             +-------+----------+
|             | max   | 56.7 °C  |
+-------------+-------+----------+

表格的表头可以包含多行

+---------------------+-----------------------+
| Location            | Temperature 1961-1990 |
|                     | in degree Celsius     |
|                     +-------+-------+-------+
|                     | min   | mean  | max   |
+=====================+=======+=======+=======+
| Antarctica          | -89.2 | N/A   | 19.8  |
+---------------------+-------+-------+-------+
| Earth               | -89.2 | 14    | 56.7  |
+---------------------+-------+-------+-------+

对齐方式可以像管道表格一样指定,通过在表头后的分隔线边界放置冒号

+---------------+---------------+--------------------+
| Right         | Left          | Centered           |
+==============:+:==============+:==================:+
| Bananas       | $1.34         | built-in wrapper   |
+---------------+---------------+--------------------+

对于无表头的表格,冒号则位于顶行

+--------------:+:--------------+:------------------:+
| Right         | Left          | Centered           |
+---------------+---------------+--------------------+

可以通过使用 = 而不是 - 的分隔线来定义表尾

 +---------------+---------------+
 | Fruit         | Price         |
 +===============+===============+
 | Bananas       | $1.34         |
 +---------------+---------------+
 | Oranges       | $2.10         |
 +===============+===============+
 | Sum           | $3.44         |
 +===============+===============+

表尾必须始终放置在表格的最底部。

网格表格可以使用 Emacs 的 table-mode (M-x table-insert) 轻松创建。

扩展:pipe_tables

管道表格如下所示

| Right | Left | Default | Center |
|------:|:-----|---------|:------:|
|   12  |  12  |    12   |    12  |
|  123  |  123 |   123   |   123  |
|    1  |    1 |     1   |     1  |

  : Demonstration of pipe table syntax.

语法与 PHP Markdown Extra 表格相同。起始和结束的管道字符是可选的,但所有列之间都必须有管道。冒号指示如所示的列对齐方式。表头不能省略。要模拟无表头的表格,请包含一个带有空白单元格的表头。

由于管道指示列边界,列不必像上述示例那样垂直对齐。因此,这是一个完全合法(尽管丑陋)的管道表格

fruit| price
-----|-----:
apple|2.05
pear|1.37
orange|3.09

管道表格的单元格不能包含段落和列表等块元素,也不能跨多行。如果 Markdown 源的任何行长于列宽(参见 --columns),则表格将占据整个文本宽度,并且单元格内容将自动换行,相对单元格宽度由分隔表头和表格主体的行中虚线的数量决定。(例如,---|- 将使第一列占整个文本宽度的 3/4,第二列占 1/4。)另一方面,如果没有行宽于列宽,则单元格内容将不会换行,并且单元格将根据其内容调整大小。

注意:pandoc 也识别以下形式的管道表格,这种形式可以通过 Emacs 的 orgtbl-mode 生成

| One | Two   |
|-----+-------|
| my  | table |
| is  | nice  |

区别在于使用 + 代替 |。其他 orgtbl 功能不受支持。特别地,要获得非默认的列对齐方式,您需要如上所述添加冒号。

元数据块

扩展:pandoc_title_block

如果文件以标题块开头

% title
% author(s) (separated by semicolons)
% date

它将被解析为书目信息,而不是常规文本。(例如,它将用于独立 LaTeX 或 HTML 输出的标题。)该块可以只包含标题、日期和作者,或者这三个元素。如果您想包含作者但没有标题,或者有标题和日期但没有作者,您需要一个空行

%
% Author
% My title
%
% June 15, 2006

标题可以占据多行,但续行必须以开头空格开始,因此

% My title
  on multiple lines

如果文档有多个作者,作者可以放在单独的行上,带有前导空格,或者用分号分隔,或者两者兼有。因此,以下所有内容都是等效的

% Author One
  Author Two
% Author One; Author Two
% Author One;
  Author Two

日期必须在一行内。

所有三个元数据字段都可以包含标准行内格式(斜体、链接、脚注等)。

标题块将始终被解析,但它们仅在选择 --standalone (-s) 选项时才会影响输出。在 HTML 输出中,标题将出现两次:一次在文档头部——这是浏览器窗口顶部显示的标题——另一次在文档主体开头。文档头部标题可以附加一个可选前缀(--title-prefix-T 选项)。主体中的标题显示为带有“title”类的 H1 元素,因此可以使用 CSS 抑制或重新格式化。如果使用 -T 指定了标题前缀,并且文档中没有标题块,则标题前缀将单独用作 HTML 标题。

man 页面编写器从标题行中提取标题、man 页面节号以及其他页眉和页脚信息。标题被认为是标题行的第一个单词,它可能可选地以括号中的(一位数字)节号结尾。(标题和括号之间不应有空格。)此后的任何内容都被视为额外的页脚和页眉文本。应使用单个管道字符(|)来分隔页脚文本和页眉文本。因此,

% PANDOC(1)

将生成一个标题为 PANDOC 且节号为 1 的 man 页面。

% PANDOC(1) Pandoc User Manuals

页脚也将包含“Pandoc User Manuals”。

% PANDOC(1) Pandoc User Manuals | Version 4.0

页眉也将包含“Version 4.0”。

扩展:yaml_metadata_block

一个 YAML 元数据块是一个有效的 YAML 对象,顶部由一行三个连字符(---)分隔,底部由一行三个连字符(---)或三个点(...)分隔。初始行 --- 后不能有空行。YAML 元数据块可以出现在文档的任何位置,但如果它不在开头,则必须在其前面有一个空行。

请注意,由于 pandoc 在提供多个输入文件时连接文件的方式,您也可以将元数据保存在单独的 YAML 文件中,并将其作为参数与您的 Markdown 文件一起传递给 pandoc

pandoc chap1.md chap2.md chap3.md metadata.yaml -s -o book.html

只需确保 YAML 文件以 --- 开头并以 ---... 结尾。或者,您可以使用 --metadata-file 选项。然而,使用这种方法,您无法从主 Markdown 输入文档中引用内容(例如脚注)。

元数据将从 YAML 对象的字段中获取,并添加到任何现有文档元数据中。元数据可以包含列表和对象(任意嵌套),但所有字符串标量都将被解释为 Markdown。名称以下划线结尾的字段将被 pandoc 忽略。(它们可能由外部处理器赋予角色。)字段名不能被解释为 YAML 数字或布尔值(因此,例如,yesTrue15 不能用作字段名)。

一个文档可以包含多个元数据块。如果两个元数据块尝试设置相同的字段,则将采用第二个块中的值。

每个元数据块在内部都被视为独立的 YAML 文档。这意味着,例如,在一个块中定义的任何 YAML 锚点都不能在另一个块中引用。

当 pandoc 与 -t markdown 一起用于创建 Markdown 文档时,只有在使用 -s/--standalone 选项时才会生成 YAML 元数据块。所有元数据将以一个单独的块出现在文档的开头。

请注意,必须遵循 YAML 转义规则。因此,例如,如果标题包含冒号,则必须加引号;如果它包含反斜杠转义,则必须确保它不会被视为 YAML 转义序列。管道字符(|)可以用于开始一个缩进块,该块将被字面解释,无需转义。当字段包含空行或块级格式时,此形式是必需的

---
title:  'This is the title: it contains a colon'
author:
- Author One
- Author Two
keywords: [nothing, nothingness]
abstract: |
  This is the abstract.

  It consists of two paragraphs.
...

| 后面的字面块必须相对于包含 | 的行进行缩进。否则,YAML 将无效,pandoc 也不会将其解释为元数据。有关 YAML 复杂规则的概述,请参阅 维基百科上的 YAML 语法条目

模板变量将从元数据中自动设置。因此,例如,在编写 HTML 时,变量 abstract 将设置为 abstract 字段中 Markdown 的 HTML 等效内容

<p>This is the abstract.</p>
<p>It consists of two paragraphs.</p>

变量可以包含任意 YAML 结构,但模板必须与此结构匹配。默认模板中的 author 变量需要一个简单的列表或字符串,但可以更改以支持更复杂的结构。例如,以下组合将在给定作者的情况下为其添加隶属关系

---
title: The document title
author:
- name: Author One
  affiliation: University of Somewhere
- name: Author Two
  affiliation: University of Nowhere
...

要使用上述示例中的结构化作者,您需要一个自定义模板

$for(author)$
$if(author.name)$
$author.name$$if(author.affiliation)$ ($author.affiliation$)$endif$
$else$
$author$
$endif$
$endfor$

可以使用 header-includes 指定要包含在文档头部中的原始内容;但是,重要的是使用 raw_attribute 扩展将此内容标记为特定输出格式的原始代码,否则它将被解释为 Markdown。例如

header-includes:
- |
  ```{=latex}
  \let\oldsection\section
  \renewcommand{\section}[1]{\clearpage\oldsection{#1}}
  ```

注意:yaml_metadata_block 扩展适用于 commonmarkmarkdown(并且在 gfmcommonmark_x 中默认启用)。然而,在这些格式中,适用以下限制

  • YAML 元数据块必须出现在文档的开头(并且只能有一个)。如果将多个文件作为参数提供给 pandoc,则只有第一个文件可以是 YAML 元数据块。

  • YAML 结构的叶节点彼此独立解析,也与文档的其余部分独立解析。因此,例如,如果链接定义位于文档的其他位置,则不能在这些上下文中使用引用链接。

反斜杠转义

扩展:all_symbols_escapable

除了在代码块或行内代码中,任何前面有反斜杠的标点符号或空格字符都将被字面处理,即使它通常表示格式。因此,例如,如果有人写

*\*hello\**

将得到

<em>*hello*</em>

而不是

<strong>hello</strong>

这个规则比原始 Markdown 的规则更容易记住,原始 Markdown 只允许以下字符进行反斜杠转义

\`*_{}[]()>#+-.!

(但是,如果使用 markdown_strict 格式,则将使用原始 Markdown 规则。)

反斜杠转义的空格被解析为不间断空格。在 TeX 输出中,它将显示为 ~。在 HTML 和 XML 输出中,它将显示为字面 Unicode 不间断空格字符(请注意,因此它在生成的 HTML 源中实际上看起来是“不可见的”;您仍然可以使用 --ascii 命令行选项使其显示为显式实体)。

反斜杠转义的换行符(即行末出现的反斜杠)被解析为强制换行。它在 TeX 输出中显示为 \\,在 HTML 中显示为 <br />。这是 Markdown 通过行末两个尾随空格来指示强制换行的“不可见”方式的一个很好的替代方案。

反斜杠转义在逐字上下文中不起作用。

行内格式

强调

强调某些文本,请用 *_ 将其包围,像这样

This text is _emphasized with underscores_, and this
is *emphasized with asterisks*.

双重 *_ 会产生强强调

This is **strong emphasis** and __with underscores__.

被空格包围或反斜杠转义的 *_ 字符不会触发强调

This is * not emphasized *, and \*neither is this\*.

扩展:intraword_underscores

因为 _ 有时用于单词和标识符内部,所以 pandoc 不会将受字母数字字符包围的 _ 解释为强调标记。如果您只想强调单词的一部分,请使用 *

feas*ible*, not feas*able*.

删除线

扩展:strikeout

要用横线划掉一段文本,请用 ~~ 将其包围。因此,例如,

This ~~is deleted text.~~

上标和下标

扩展:superscript, subscript

上标可以通过用 ^ 字符包围上标文本来书写;下标可以通过用 ~ 字符包围下标文本来书写。因此,例如,

H~2~O is a liquid.  2^10^ is 1024.

^...^~...~ 之间的文本不能包含空格或换行符。如果上标或下标文本包含空格,这些空格必须用反斜杠转义。(这是为了防止通过普通使用 ~^ 导致意外上标和下标,以及与脚注的不良交互。)因此,如果您想要字母 P 带“a cat”的下标,请使用 P~a\ cat~,而不是 P~a cat~

逐字

要使一小段文本逐字显示,请将其放在反引号内

What is the difference between `>>=` and `>>`?

如果逐字文本包含反引号,请使用双反引号

Here is a literal backtick `` ` ``.

(起始反引号后的空格和结束反引号前的空格将被忽略。)

一般规则是,逐字跨度以一串连续的反引号(可选地后跟一个空格)开始,并以相同数量的反引号(可选地前跟一个空格)结束。

请注意,反斜杠转义(以及其他 Markdown 构造)在逐字上下文中不起作用

This is a backslash followed by an asterisk: `\*`.

扩展:inline_code_attributes

属性可以附加到逐字文本上,就像围栏式代码块一样

`<$>`{.haskell}

下划线

要为文本添加下划线,请使用 underline

[Underline]{.underline}

或者,不使用 bracketed_spans 扩展(但使用 native_spans

<span class="underline">Underline</span>

这将在所有支持下划线的输出格式中生效。

小型大写字母

要书写小型大写字母,请使用 smallcaps

[Small caps]{.smallcaps}

或者,不使用 bracketed_spans 扩展

<span class="smallcaps">Small caps</span>

为了与其他 Markdown 风格兼容,也支持 CSS

<span style="font-variant:small-caps;">Small caps</span>

这将在所有支持小型大写字母的输出格式中生效。

高亮

要高亮文本,请使用 mark

[Mark]{.mark}

或者,不使用 bracketed_spans 扩展(但使用 native_spans

<span class="mark">Mark</span>

这将在所有支持高亮显示的输出格式中生效。

数学

扩展:tex_math_dollars

两个 $ 字符之间的任何内容都将被视为 TeX 数学公式。开头的 $ 必须在其右侧紧跟着一个非空格字符,而结尾的 $ 必须在其左侧紧跟着一个非空格字符,并且不能紧跟着一个数字。因此,$20,000 and $30,000 不会被解析为数学公式。如果由于某种原因您需要将文本包含在字面 $ 字符中,请用反斜杠对其进行转义,这样它们就不会被视为数学分隔符。

对于显示数学,请使用 $$ 分隔符。(在这种情况下,分隔符可以与公式之间用空格分隔。但是,起始和结束 $$ 分隔符之间不能有空行。)

TeX 数学公式将打印在所有输出格式中。它的渲染方式取决于输出格式

LaTeX
它将逐字显示,并由 \(...\)(用于行内数学公式)或 \[...\](用于显示数学公式)包围。
Markdown, Emacs Org mode, ConTeXt, ZimWiki
它将逐字显示,并由 $...$(用于行内数学公式)或 $$...$$(用于显示数学公式)包围。
XWiki
它将逐字显示,并由 {{formula}}..{{/formula}} 包围。
reStructuredText
它将使用解释文本角色 :math:进行渲染。
AsciiDoc
对于 AsciiDoc 输出,数学公式将逐字显示,并由 latexmath:[...] 包围。对于 asciidoc_legacy,方括号内的内容还将包括行内或显示数学分隔符。
Texinfo
它将在 @math 命令内部渲染。
roff man, Jira markup
它将逐字渲染,不带 $ 符号。
MediaWiki, DokuWiki
它将在 <math> 标签内部渲染。
Textile
它将在 <span class="math"> 标签内部渲染。
RTF, OpenDocument
如果可能,它将使用 Unicode 字符渲染,否则将逐字显示。
ODT
如果可能,它将使用 MathML 渲染。
DocBook
如果使用 --mathml 标志,它将使用 MathML 在 inlineequationinformalequation 标签中渲染。否则,如果可能,它将使用 Unicode 字符渲染。
Docx and PowerPoint
它将使用 OMML 数学标记渲染。
FictionBook2
如果使用 --webtex 选项,公式将使用 CodeCogs 或其他兼容的 Web 服务渲染为图像,下载并嵌入到电子书中。否则,它们将逐字显示。
HTML, Slidy, DZSlides, S5, EPUB
数学公式在 HTML 中的渲染方式将取决于所选的命令行选项。因此,请参见上面的HTML 中的数学公式渲染

原始 HTML

扩展:raw_html

Markdown 允许您在文档中的任何位置插入原始 HTML(或 DocBook)(除了逐字上下文,在其中 <>& 会被字面解释)。(从技术上讲,这不是一个扩展,因为标准 Markdown 允许它,但为了可以根据需要禁用,它已被设置为一个扩展。)

原始 HTML 在 HTML、S5、Slidy、Slideous、DZSlides、EPUB、Markdown、CommonMark、Emacs Org mode 和 Textile 输出中会原样传递,而在其他格式中会被抑制。

要以更明确的方式在 Markdown 文档中包含原始 HTML,请参见raw_attribute 扩展

在 CommonMark 格式中,如果启用 raw_html,上标、下标、删除线和小型大写字母将以 HTML 形式表示。否则,将使用纯文本回退。请注意,即使 raw_html 被禁用,如果表格不能使用管道语法,它们也将以 HTML 语法渲染。

扩展:markdown_in_html_blocks

原始 Markdown 允许您包含 HTML“块”:位于平衡标签之间,与周围文本用空行分隔,并从左边距开始和结束的 HTML 块。在这些块中,所有内容都被解释为 HTML,而不是 Markdown;因此(例如),* 不表示强调。

当使用 markdown_strict 格式时,Pandoc 的行为方式与此相同;但默认情况下,pandoc 会将 HTML 块标签之间的内容解释为 Markdown。因此,例如,pandoc 将把

<table>
<tr>
<td>*one*</td>
<td>[a link](https://google.com)</td>
</tr>
</table>

转换为

<table>
<tr>
<td><em>one</em></td>
<td><a href="https://google.com">a link</a></td>
</tr>
</table>

Markdown.pl 将保持原样。

这条规则有一个例外:<script><style><pre><textarea> 标签之间的文本不会被解释为 Markdown。

这种与原始 Markdown 的背离应该使得 Markdown 与 HTML 块元素混合使用变得更容易。例如,可以用 <div> 标签包围 Markdown 文本块,而不会阻止它被解释为 Markdown。

扩展:native_divs

<div> 标签内部的内容使用原生的 pandoc Div 块。在大多数情况下,这应该产生与 markdown_in_html_blocks 相同的输出,但它使得编写 pandoc 过滤器来操作块组变得更容易。

扩展:native_spans

<span> 标签内部的内容使用原生的 pandoc Span 块。在大多数情况下,这应该产生与 raw_html 相同的输出,但它使得编写 pandoc 过滤器来操作行内元素组变得更容易。

扩展:raw_tex

除了原始 HTML,pandoc 还允许在文档中包含原始 LaTeX、TeX 和 ConTeXt。行内 TeX 命令将被保留并原样传递给 LaTeX 和 ConTeXt 编写器。因此,例如,您可以使用 LaTeX 来包含 BibTeX 引用

This result was proved in \cite{jones.1967}.

请注意,在 LaTeX 环境中,例如

\begin{tabular}{|l|l|}\hline
Age & Frequency \\ \hline
18--25  & 15 \\
26--35  & 33 \\
36--45  & 22 \\ \hline
\end{tabular}

begin 和 end 标签之间的内容将被解释为原始 LaTeX,而不是 Markdown。

要以更明确和灵活的方式在 Markdown 文档中包含原始 TeX,请参见raw_attribute 扩展

行内 LaTeX 在 Markdown、LaTeX、Emacs Org mode 和 ConTeXt 之外的输出格式中会被忽略。

通用原始属性

扩展:raw_attribute

行内 span 和带有特殊属性的围栏式代码块将被解析为指定格式的原始内容。例如,以下内容会生成一个原始的 roff ms 块:

```{=ms}
.MYMACRO
blah blah
```

以下内容会生成一个原始的 html 行内元素:

This is `<a>html</a>`{=html}

这对于将原始 XML 插入 docx 文档非常有用,例如插入一个分页符:

```{=openxml}
<w:p>
  <w:r>
    <w:br w:type="page"/>
  </w:r>
</w:p>
```

格式名称应与目标格式名称匹配(有关列表,请参阅上面的-t/--to 选项,或使用pandoc --list-output-formats)。对于 docx 输出,请使用 openxml;对于 odt 输出,请使用 opendocument;对于 epub3 输出,请使用 html5;对于 epub2 输出,请使用 html4;对于 pdf 输出,请使用 latexbeamermshtml5(取决于您用于--pdf-engine 的引擎)。

此扩展假设启用了相关类型的行内代码或围栏式代码块。因此,例如,要将原始属性与反引号代码块一起使用,必须启用 backtick_code_blocks

原始属性不能与常规属性结合使用。

LaTeX 宏

扩展:latex_macros

当启用此扩展时,Pandoc 将解析 LaTeX 宏定义,并将生成的宏应用于所有 LaTeX 数学和原始 LaTeX 内容。因此,例如,以下内容将在所有输出格式中生效,而不仅仅是 LaTeX:

\newcommand{\tuple}[1]{\langle #1 \rangle}

$\tuple{a, b, c}$

请注意,如果 LaTeX 宏出现在标有raw_attribute 扩展的原始 span 或块中,则不会应用它们。

latex_macros 被禁用时,原始 LaTeX 和数学内容将不会应用宏。当您以 LaTeX 或 PDF 为目标时,这通常是一种更好的方法。

LaTeX 中的宏定义只有在未启用 latex_macros 时才作为原始 LaTeX 内容传递。Markdown 源(或其他允许 raw_tex 的格式)中的宏定义无论是否启用 latex_macros 都会被传递。

图像

紧跟在 ! 之后的链接将被视为图像。链接文本将用作图像的替代文本(alt text):

![la lune](lalune.jpg "Voyage to the moon")

![movie reel]

[movie reel]: movie.gif

扩展:implicit_figures

一个带有非空替代文本的图像,如果单独出现在一个段落中,将作为带标题的图渲染。图像的替代文本将用作标题。

![This is the caption](/url/of/image.png)

如何渲染取决于输出格式。某些输出格式(例如 RTF)尚不支持图。在这些格式中,您只会得到一个单独在段落中的图像,没有标题。

如果您只是想要一个常规的行内图像,只需确保它不是段落中唯一的内容。一种方法是在图像后插入一个不间断空格:

![This image won't be a figure](/url/of/image.png)\

请注意,在 reveal.js 幻灯片中,如果段落中单独存在的图像带有 r-stretch 类,它将填满屏幕,并且将省略标题和图标签。

Divs 和 Spans

使用 native_divsnative_spans 扩展(请参阅上文),HTML 语法可以作为 Markdown 的一部分使用,以在 Pandoc AST 中创建原生的 DivSpan 元素(而不是原始 HTML)。但是,也有更简洁的语法可用:

扩展:fenced_divs

允许对原生 Div 块使用特殊的围栏式语法。一个 Div 以一个包含至少三个连续冒号加上一些属性的围栏开始。属性后面可以选择性地跟一个连续冒号的字符串。

注意:commonmark 解析器不允许属性后面有冒号。

属性语法与围栏式代码块中的属性语法完全相同(请参阅扩展:fenced_code_attributes)。与围栏式代码块一样,可以使用花括号中的属性或单个不带花括号的单词,该单词将被视为类名。Div 以另一行结束,该行包含一个至少三个连续冒号的字符串。围栏式 Div 应与前后块之间用空行分隔。

示例:

::::: {#special .sidebar}
Here is a paragraph.

And another.
:::::

围栏式 Div 可以嵌套。开围栏的特点是它们必须有属性:

::: Warning ::::::
This is a warning.

::: Danger
This is a warning within a warning.
:::
::::::::::::::::::

没有属性的围栏总是闭围栏。与围栏式代码块不同,闭围栏中的冒号数量不需要与开围栏中的数量匹配。但是,使用不同长度的围栏来区分嵌套 div 与其父 div,有助于提高视觉清晰度。

扩展:bracketed_spans

一个用方括号括起来的行内序列,就像开始一个链接一样,如果后面紧跟着属性,将被视为一个带有属性的 Span

[This is *some text*]{.class key="val"}

脚注

扩展:footnotes

Pandoc 的 Markdown 允许使用以下语法创建脚注:

Here is a footnote reference,[^1] and another.[^longnote]

[^1]: Here is the footnote.

[^longnote]: Here's one with multiple blocks.

    Subsequent paragraphs are indented to show that they
belong to the previous footnote.

        { some.code }

    The whole paragraph can be indented, or just the first
    line.  In this way, multi-paragraph footnotes work like
    multi-paragraph list items.

This paragraph won't be part of the note, because it
isn't indented.

脚注引用中的标识符不能包含空格、制表符、换行符或字符 ^[]。这些标识符仅用于将脚注引用与脚注本身关联起来;在输出中,脚注将按顺序编号。

脚注本身不必放在文档的末尾。它们可以出现在任何地方,除了其他块元素内部(列表、块引用、表格等)。每个脚注应与周围内容(包括其他脚注)用空行分隔。

扩展:inline_notes

也允许行内脚注(尽管与常规脚注不同,它们不能包含多个段落)。语法如下:

Here is an inline note.^[Inline notes are easier to write, since
you don't have to pick an identifier and move down to type the
note.]

行内脚注和常规脚注可以自由混合使用。

引用语法

扩展:citations

要引用一个带有标识符 foo 的书目项,请使用语法 @foo。正常引用应包含在方括号中,并用分号分隔不同的项:

Blah blah [@doe99; @smith2000; @smith2004].

其渲染方式取决于引用样式。在作者-日期样式中,它可能渲染为:

Blah blah (Doe 1999, Smith 2000, 2004).

在脚注样式中,它可能渲染为:

Blah blah.[^1]

[^1]:  John Doe, "Frogs," *Journal of Amphibians* 44 (1999);
Susan Smith, "Flies," *Journal of Insects* (2000);
Susan Smith, "Bees," *Journal of Insects* (2004).

有关 CSL 样式及其如何影响渲染的更多信息,请参阅CSL 用户文档

除非引用键以字母、数字或 _ 开头,并且只包含字母数字和单个内部标点符号(:.#$%&-+?<>~/),否则它必须用花括号括起来,花括号不被视为键的一部分。在 @Foo_bar.baz. 中,键是 Foo_bar.baz,因为最后一个句点不是内部标点,所以它不包含在键中。在 @{Foo_bar.baz.} 中,键是 Foo_bar.baz.,包括最后一个句点。在 @Foo_bar--baz 中,键是 Foo_bar,因为重复的内部标点符号终止了键。如果您使用 URL 作为键,建议使用花括号:[@{https://example.com/bib?name=foobar&date=2000}, p. 33]

引用项可以选择包含前缀、定位符和后缀。在

Blah blah [see @doe99, pp. 33-35 and *passim*; @smith04, chap. 1].

第一个条目(doe99)有前缀 see,定位符 pp. 33-35,和后缀 and *passim*。第二个条目(smith04)有定位符 chap. 1,没有前缀或后缀。

Pandoc 使用一些启发式方法将定位符与其余部分分开。它对 CSL 区域设置文件中定义的定位符术语敏感。缩写形式和非缩写形式都可接受。在 en-US 区域设置中,定位符术语可以写成单数或复数形式,如 book, bk./bks.; chapter, chap./chaps.; column, col./cols.; figure, fig./figs.; folio, fol./fols.; number, no./nos.; line, l./ll.; note, n./nn.; opus, op./opp.; page, p./pp.; paragraph, para./paras.; part, pt./pts.; section, sec./secs.; sub verbo, s.v./s.vv.; verse, v./vv.; volume, vol./vols.; /¶¶; §/§§。如果没有使用定位符术语,则假定为“page”。

在复杂情况下,您可以通过用花括号括起来强制将其视为定位符,或者通过在前面加上花括号来防止将后缀解析为定位符:

[@smith{ii, A, D-Z}, with a suffix]
[@smith, {pp. iv, vi-xi, (xv)-(xvii)} with suffix here]
[@smith{}, 99 years later]

@ 前面的减号(-)将抑制引用中作者的提及。当作者已在文本中提及时,这会很有用:

Smith says blah [-@smith04].

您还可以通过省略方括号来编写文本内作者引用:

@smith04 says blah.

@smith04 [p. 33] says blah.

这将导致作者姓名被渲染,后跟书目详细信息。当您想将引用作为句子的主语时,请使用此形式。

当您使用注释样式时,通常最好让 citeproc 从引用创建脚注,而不是手动编写显式注释。如果您确实编写了包含引用的显式注释,请注意,正常引用将放在括号中,而文本内引用则不会。因此,在使用注释样式时,有时最好在注释内部使用文本内样式。

非默认扩展

以下 Markdown 语法扩展在 Pandoc 中默认不启用,但可以通过在格式名称后添加 +EXTENSION 来启用,其中 EXTENSION 是扩展的名称。因此,例如,markdown+hard_line_breaks 是带有硬换行的 Markdown。

扩展:rebase_relative_paths

根据包含链接或图像链接的文件路径,重写 Markdown 链接和图像的相对路径。对于每个链接或图像,pandoc 将计算包含文件的目录相对于工作目录的路径,并将生成的路径添加到链接或图像路径的前面。

此扩展的使用最好通过示例来理解。假设您为书的每个章节都有一个子目录,chap1chap2chap3。每个子目录都包含一个 text.md 文件和章节中使用的许多图像。您希望 chap1/text.md 中的 ![image](spider.jpg) 指向 chap1/spider.jpg,而 chap2/text.md 中的 ![image](spider.jpg) 指向 chap2/spider.jpg。为此,请使用:

pandoc chap*/*.md -f markdown+rebase_relative_paths

如果没有此扩展,您将不得不在 chap1/text.md 中使用 ![image](chap1/spider.jpg),并在 chap2/text.md 中使用 ![image](chap2/spider.jpg)。带有相对路径的链接将以与图像相同的方式重写。

绝对路径和 URL 不会被更改。空路径或完全由片段组成的路径(例如 #foo)也不会改变。

请注意,引用链接和图像中的相对路径将相对于包含链接引用定义的文件重写,而不是相对于包含引用链接或图像本身的文件,如果它们不同。

扩展:mark

要突出显示文本部分,请以 == 开始和结束。例如:

This ==is deleted text.==

扩展:attributes

在解析 commonmark 时,允许将属性附加到任何行内或块级元素。属性的语法与 header_attributes 中使用的语法相同。

  • 紧跟在行内元素后的属性会影响该元素。如果它们后面跟着空格,则它们属于该空格。(因此,此选项包含了 inline_code_attributeslink_attributes。)
  • 紧接在块元素之前,单独一行上的属性会影响该元素。
  • 可以连续使用属性说明符,无论是用于块还是用于行内。它们的属性将合并。
  • 出现在 Setext 或 ATX 标题文本末尾(与文本用空格分隔)的属性会影响标题元素。(因此,此选项包含了 header_attributes。)
  • 出现在围栏式代码块开围栏后的属性会影响代码块元素。(因此,此选项包含了 fenced_code_attributes。)
  • 出现在引用链接定义末尾的属性会影响引用该定义的链接。

请注意,Pandoc 的 AST 目前不允许将属性附加到任意元素。因此,如果需要,将添加一个 Span 或 Div 容器。

扩展:old_dashes

选择 Pandoc <= 1.8.2.1 版本的智能破折号解析行为:数字前的 - 是半破折号(en-dash),-- 是全破折号(em-dash)。此选项仅在启用 smart 时有效。对于 textile 输入,它会自动选择。

扩展:angle_brackets_escapable

允许 <> 使用反斜杠转义,就像在 GitHub flavored Markdown 中可以那样,但原始 Markdown 不行。这由 Pandoc 的默认 all_symbols_escapable 暗示。

扩展:lists_without_preceding_blankline

允许列表紧跟在段落后面出现,中间没有空白。

扩展:four_space_rule

选择 Pandoc <= 2.0 版本的列表解析行为,因此列表项延续段落需要四个空格缩进。

扩展:hard_line_breaks

使段落内的所有换行符都被解释为硬换行而不是空格。

扩展:ignore_line_breaks

使段落内的换行符被忽略,而不是被视为空格或硬换行。此选项旨在用于词语之间不使用空格,但文本为了可读性而分行的东亚语言。

扩展:east_asian_line_breaks

使段落内的换行符在两个东亚宽字符之间出现时被忽略,而不是被视为空格或硬换行。对于包含东亚宽字符和其他字符混合的文本,这是比 ignore_line_breaks 更好的选择。

扩展:emoji

将文本表情符号(如 :smile:)解析为 Unicode 表情符号。

扩展:tex_math_gfm

支持两种 GitHub 特定的数学格式。行内数学:$`e=mc^2`$

显示数学:

``` math
e=mc^2
```

扩展:tex_math_single_backslash

使 \(\) 之间的任何内容被解释为行内 TeX 数学,\[\] 之间的任何内容被解释为显示 TeX 数学。注意:此扩展的一个缺点是它排除了转义 ([ 的可能性。

扩展:tex_math_double_backslash

使 \\(\\) 之间的任何内容被解释为行内 TeX 数学,\\[\\] 之间的任何内容被解释为显示 TeX 数学。

扩展:markdown_attribute

默认情况下,Pandoc 将块级标签内的内容解释为 Markdown。此扩展改变了行为,只有当标签具有属性 markdown=1 时,Markdown 才会在块级标签内被解析。

扩展:mmd_title_block

在文档顶部启用 MultiMarkdown 风格的标题块,例如:

Title:   My title
Author:  John Doe
Date:    September 1, 2008
Comment: This is a sample mmd title block, with
         a field spanning multiple lines.

详情请参阅 MultiMarkdown 文档。如果 pandoc_title_blockyaml_metadata_block 启用,它将优先于 mmd_title_block

扩展:abbreviations

解析 PHP Markdown Extra 的缩写键,例如:

*[HTML]: Hypertext Markup Language

请注意,Pandoc 文档模型不支持缩写,因此如果启用此扩展,缩写键将被简单跳过(而不是被解析为段落)。

扩展:alerts

支持 GitHub 风格的 Markdown 警报,例如:

> [!TIP]
> Helpful advice for doing things better or more easily.

注意:此扩展目前仅适用于 commonmark:commonmarkgfmcommonmark_x

扩展:mmd_header_identifiers

解析 MultiMarkdown 风格的标题标识符(在标题后、ATX 标题中的任何尾随 # 之前,用方括号括起来)。

扩展:compact_definition_lists

激活 Pandoc 1.12.x 及更早版本的定义列表语法。此语法与上文定义列表中描述的语法在几个方面有所不同:

  • 定义列表的连续项目之间不需要空行。
  • 要获得“紧凑”列表,请省略连续项目之间的空格;术语与其定义之间的空格不影响任何内容。
  • 不允许段落的惰性换行:整个定义必须缩进四个空格。4

扩展:gutenberg

plain 输出使用 古腾堡计划约定:全大写表示强强调,用下划线括起来表示常规强调,标题周围添加额外的空白。

扩展:sourcepos

解析 commonmark 时包含源位置属性。对于接受属性的元素,会添加一个 data-pos 属性;其他元素则放在带有 data-pos 属性的 Div 或 Span 元素中。

扩展:short_subsuperscripts

解析 MultiMarkdown 风格的下标和上标,它们分别以“~”或“^”字符开头,并包含后面的字母数字序列。例如:

x^2 = 4

或者

Oxygen is O~2.

Markdown 变体

除了 Pandoc 的扩展 Markdown,还支持以下 Markdown 变体:

  • markdown_phpextra (PHP Markdown Extra)
  • markdown_github (已废弃的 GitHub-Flavored Markdown)
  • markdown_mmd (MultiMarkdown)
  • markdown_strict (Markdown.pl)
  • commonmark (CommonMark)
  • gfm (Github-Flavored Markdown)
  • commonmark_x (CommonMark with many pandoc extensions)

要查看给定格式支持哪些扩展以及默认启用哪些扩展,可以使用以下命令:

pandoc --list-extensions=FORMAT

其中 FORMAT 替换为格式名称。

请注意,commonmarkgfmcommonmark_x 的扩展列表是相对于默认 commonmark 定义的。因此,例如,backtick_code_blocks 不会显示为扩展,因为它默认启用且无法禁用。

引用

当使用 --citeproc 选项时,Pandoc 可以自动生成多种样式的引文和参考文献。基本用法是:

pandoc --citeproc myinput.txt

要使用此功能,您需要具备:

  • 包含引文的文档(请参阅引文语法);
  • 书目数据源:外部书目文件或文档 YAML 元数据中的 references 列表;
  • 可选的 CSL 引文样式。

指定书目数据

您可以使用 YAML 元数据部分中的 bibliography 元数据字段或 --bibliography 命令行参数来指定外部书目。如果您想使用多个书目文件,可以提供多个 --bibliography 参数或将 bibliography 元数据字段设置为 YAML 数组。书目可以是以下任何一种格式:

格式 文件扩展名
BibLaTeX .bib
BibTeX .bibtex
CSL JSON .json
CSL YAML .yaml
RIS .ris

请注意,.bib 可用于 BibTeX 和 BibLaTeX 文件;使用扩展名 .bibtex 可强制将其解释为 BibTeX。

在 BibTeX 和 BibLaTeX 数据库中,Pandoc 会解析 title 等字段内的 LaTeX 标记;在 CSL YAML 数据库中,解析 Pandoc Markdown;在 CSL JSON 数据库中,解析类似 HTML 的标记:HTML-like markup

<i>...</i>
斜体
<b>...</b>
粗体
<span style="font-variant:small-caps;">...</span><sc>...</sc>
小型大写字母
<sub>...</sub>
下标
<sup>...</sup>
上标
<span class="nocase">...</span>
阻止短语在标题大小写中大写

作为使用 --bibliography 或 YAML 元数据字段 bibliography 指定书目文件的替代方案,您可以直接在文档 YAML 元数据的 references 字段中包含引文数据。该字段应包含一个 YAML 编码的引用数组,例如:

---
references:
- type: article-journal
  id: WatsonCrick1953
  author:
  - family: Watson
    given: J. D.
  - family: Crick
    given: F. H. C.
  issued:
    date-parts:
    - - 1953
      - 4
      - 25
  title: 'Molecular structure of nucleic acids: a structure for
    deoxyribose nucleic acid'
  title-short: Molecular structure of nucleic acids
  container-title: Nature
  volume: 171
  issue: 4356
  page: 737-738
  DOI: 10.1038/171737a0
  URL: https://www.nature.com/articles/171737a0
  language: en-GB
...

如果同时提供了外部书目和行内(YAML 元数据)引用,两者都将使用。如果 id 冲突,行内引用将优先。

请注意,Pandoc 可以用于从 BibTeX、BibLaTeX 或 CSL JSON 书目生成此类 YAML 元数据部分:

pandoc chem.bib -s -f biblatex -t markdown
pandoc chem.json -s -f csljson -t markdown

实际上,Pandoc 可以在任何这些引用格式之间进行转换:

pandoc chem.bib -s -f biblatex -t csljson
pandoc chem.yaml -s -f markdown -t biblatex

使用 --citeproc 选项在书目文件上运行 Pandoc 将以您选择的格式创建格式化书目:

pandoc chem.bib -s --citeproc -o chem.html
pandoc chem.bib -s --citeproc -o chem.pdf

标题中的大写

如果您正在使用 bibtex 或 biblatex 书目,请遵守以下规则:

  • 英文标题应采用标题大小写。非英文标题应采用句子大小写,并且 biblatex 中的 langid 字段应设置为相关语言。(以下值被视为英文:american, british, canadian, english, australian, newzealand, USenglish, 或 UKenglish。)

  • 按照 bibtex/biblatex 的标准,专有名词应受花括号保护,以免在要求句子大小写的样式中被小写。例如:

    title = {My Dinner with {Andre}}
  • 此外,应保护应保持小写(或驼峰式)的单词:

    title = {Spin Wave Dispersion on the {nm} Scale}

    虽然在 bibtex/biblatex 中这不是必需的,但在 citeproc 中是必需的,citeproc 内部以句子大小写存储标题,并在需要时转换为标题大小写。在这里,我们保护“nm”,使其在此阶段不会转换为“Nm”。

如果您使用 CSL 书目(JSON 或 YAML),请遵守以下规则:

  • 所有标题都应采用句子大小写。

  • 对于非英文标题,请使用 language 字段以防止其在需要时转换为标题大小写。(仅当 languageen 开头或为空时才发生转换。)

  • 使用此语法保护不应转换为标题大小写的单词:

    Spin wave dispersion on the <span class="nocase">nm</span> scale

会议论文,已发表 vs. 未发表

对于正式发表的会议论文,请使用 biblatex 条目类型 inproceedings(将映射到 CSL paper-conference)。

对于未发表的手稿,请使用不带 eventtitle 字段的 biblatex 条目类型 unpublished(此条目类型将映射到 CSL manuscript)。

对于演讲、未发表的会议论文或海报展示,请使用带有 eventtitle 字段的 biblatex 条目类型 unpublished(此条目类型将映射到 CSL speech)。使用 biblatex type 字段指示类型,例如“Paper”或“Poster”。venueeventdate 也可能有用,尽管大多数 CSL 样式不会渲染 eventdate。请注意,venue 是指活动地点,与描述出版商地点的 location 不同;未发表的会议论文不要使用后者。

指定引用样式

引用和参考文献可以使用 引文样式语言 (Citation Style Language) 支持的任何样式进行格式化,这些样式列在 Zotero 样式库中。这些文件使用 --csl 选项或 csl(或 citation-style)元数据字段指定。默认情况下,Pandoc 将使用 芝加哥大学出版物格式手册 (Chicago Manual of Style) 的作者-日期格式。(您可以通过将所选 CSL 样式复制到用户数据目录中的 default.csl 来覆盖此默认设置。)CSL 项目提供了有关查找和编辑样式的更多信息。

可以使用 --citation-abbreviations 选项(或 citation-abbreviations 元数据字段)指定一个 JSON 文件,其中包含在指定 form="short" 时,格式化书目中应使用的期刊缩写。该文件的格式可以通过示例说明:

{ "default": {
    "container-title": {
            "Lloyd's Law Reports": "Lloyd's Rep",
            "Estates Gazette": "EG",
            "Scots Law Times": "SLT"
    }
  }
}

注释样式中的引用

Pandoc 的引用处理旨在让您在作者-日期、数字和注释样式之间切换,而无需修改 Markdown 源。当您使用注释样式时,请避免手动插入脚注。相反,像在作者-日期样式中一样插入引用——例如:

Blah blah [@foo, p. 33].

脚注将自动创建。Pandoc 会根据 notes-after-punctuation 的设置(如下文其他相关元数据字段所述),负责删除空格并将注释移到句号之前或之后。

在某些情况下,您可能需要将引用放在常规脚注中。脚注中的正常引用(如 [@foo, p. 33])将以括号形式呈现。文本内引用(如 @foo [p. 33])将不带括号呈现。(如果合适,将添加逗号。)因此:

[^1]:  Some studies [@foo; @bar, p. 33] show that
frubulicious zoosnaps are quantical.  For a survey
of the literature, see @baz [chap. 1].

书目位置

如果样式要求列出引用的作品,它将被放置在一个 id 为 refs 的 div 中(如果存在的话):

::: {#refs}
:::

否则,它将被放置在文档的末尾。可以通过在 YAML 元数据中设置 suppress-bibliography: true 来抑制书目的生成。

如果您希望书目有一个章节标题,您可以在元数据中设置 reference-section-title,或者将标题放在 id 为 refs 的 div(如果您正在使用它)的开头或文档的末尾:

last paragraph...

# References

书目将插入在此标题之后。请注意,unnumbered 类将被添加到此标题中,因此该章节将不编号。

如果您想将书目放入模板中的变量,一种方法是将 id 为 refs 的 div 放入元数据字段,例如:

---
refs: |
   ::: {#refs}
   :::
...

然后您可以将变量 $refs$ 放入您的模板中,放在您希望书目放置的位置。

在书目中包含未引用的条目

如果您想在书目中包含项目而不在正文中实际引用它们,您可以定义一个虚拟的 nocite 元数据字段并将引用放在那里:

---
nocite: |
  @item1, @item2
...

@item3

在此示例中,文档将只包含 item3 的引用,但书目将包含 item1item2item3 的条目。

可以使用通配符创建包含所有引用的书目,无论它们是否出现在文档中:

---
nocite: |
  @*
...

对于 LaTeX 输出,您还可以使用 natbibbiblatex 来渲染书目。为此,请按照上述说明指定书目文件,并向 Pandoc 调用添加 --natbib--biblatex 参数。请记住,书目文件必须是 BibTeX(用于 --natbib)或 BibLaTeX(用于 --biblatex)格式。

其他相关元数据字段

还有几个元数据字段会影响书目格式:

link-citations
如果为 true,引用将超链接到相应的书目条目(仅适用于作者-日期和数字样式)。默认为 false。
link-bibliography
如果为 true,书目中的 DOI、PMCID、PMID 和 URL 将呈现为超链接。(如果条目包含 DOI、PMCID、PMID 或 URL,但样式未渲染这些字段,则标题或在没有标题的情况下,整个条目将超链接。)默认为 true。
lang

lang 字段将影响样式的本地化方式,例如标签的翻译、引号的使用以及项目的排序方式。(为了向后兼容,可以使用 locale 代替 lang,但此用法已弃用。)

期望使用 BCP 47 语言标签:例如 endeen-USfr-CAug-Cyrl。Unicode 扩展语法(在 -u- 之后)可用于更精确地指定排序选项。以下是一些示例:

  • zh-u-co-pinyin:带拼音排序的中文。
  • es-u-co-trad:带传统排序的西班牙语(ChC 之后排序)。
  • fr-u-kb:带“反向”重音排序的法语(cotécôte 之后排序)。
  • en-US-u-kf-upper:英文,大写字母排在小写字母之前(默认是小写字母排在大写字母之前)。
notes-after-punctuation
如果为 true(注释样式的默认值),Pandoc 会将脚注引用或上标数字引用放在其后的标点符号之后。例如,如果源包含 blah blah [@jones99].,结果将看起来像 blah blah.[^1],其中注释移到了句号之后并且空格折叠。如果为 false,空格仍将被折叠,但脚注不会移到标点符号之后。此选项也可用于使用上标数字作为引用数字的数字样式(但对于这些样式,默认是不移动引用的)。

幻灯片演示

您可以使用 Pandoc 生成 HTML + JavaScript 幻灯片演示文稿,并通过网络浏览器查看。有五种方法可以实现此目的,分别使用 S5DZSlidesSlidySlideousreveal.js。您还可以使用 LaTeX beamer 生成 PDF 幻灯片演示文稿,或生成 Microsoft PowerPoint 格式的幻灯片演示文稿。

以下是一个简单幻灯片演示 habits.txt 的 Markdown 源文件:

% Habits
% John Doe
% March 22, 2005

# In the morning

## Getting up

- Turn off alarm
- Get out of bed

## Breakfast

- Eat eggs
- Drink coffee

# In the evening

## Dinner

- Eat spaghetti
- Drink wine

------------------

![picture of spaghetti](images/spaghetti.jpg)

## Going to sleep

- Get in bed
- Count sheep

要生成 HTML/JavaScript 幻灯片演示,只需键入:

pandoc -t FORMAT -s habits.txt -o habits.html

其中 FORMATs5slidyslideousdzslidesrevealjs 之一。

对于 Slidy、Slideous、reveal.js 和 S5,Pandoc 使用 -s/--standalone 选项生成的文件会嵌入 JavaScript 和 CSS 文件的链接,这些文件假定可在相对路径 s5/default(S5)、slideous(Slideous)、reveal.js(reveal.js)或 Slidy 网站 w3.org(Slidy)上找到。(这些路径可以通过设置 slidy-urlslideous-urlrevealjs-urls5-url 变量来更改;请参阅上面的HTML 幻灯片变量。)对于 DZSlides,默认情况下,(相对较短的)JavaScript 和 CSS 已包含在文件中。

对于所有 HTML 幻灯片格式,可以使用 --self-contained 选项来生成一个包含显示幻灯片演示所需所有数据(包括链接的脚本、样式表、图像和视频)的单个文件。

要使用 beamer 生成 PDF 幻灯片演示,请键入:

pandoc -t beamer habits.txt -o habits.pdf

请注意,reveal.js 幻灯片演示也可以通过从浏览器打印到文件来转换为 PDF。

要生成 PowerPoint 幻灯片演示,请键入:

pandoc habits.txt -o habits.pptx

幻灯片演示的结构

默认情况下,幻灯片级别是文档中某处紧跟内容(而不是另一个标题)的层次结构中最高的标题级别。在上面的示例中,级别 1 标题后面总是跟着级别 2 标题,而级别 2 标题后面跟着内容,因此幻灯片级别是 2。此默认值可以使用 --slide-level 选项覆盖。

文档根据以下规则被分割成幻灯片:

  • 水平线始终开始一个新幻灯片。

  • 幻灯片级别的标题始终开始一个新幻灯片。

  • 层次结构中低于幻灯片级别的标题在幻灯片内部创建标题。(在 beamer 中,将创建一个“块”。如果标题具有 example 类,将使用 exampleblock 环境;如果它具有 alert 类,将使用 alertblock;否则将使用常规的 block。)

  • 层次结构中高于幻灯片级别的标题会创建“标题幻灯片”,其中只包含章节标题,有助于将幻灯片演示文稿分成若干部分。这些标题下的非幻灯片内容将包含在标题幻灯片中(对于 HTML 幻灯片演示文稿)或后续具有相同标题的幻灯片中(对于 beamer)。

  • 如果存在文档的标题块,则会自动构建一个标题页。(对于 beamer,可以通过注释掉默认模板中的某些行来禁用此功能。)

这些规则旨在支持多种不同风格的幻灯片演示。如果您不关心将幻灯片结构化为章节和小节,则可以只对所有幻灯片使用一级标题(在这种情况下,一级将是幻灯片级别),或者将 --slide-level=0

注意:在 reveal.js 幻灯片演示中,如果幻灯片级别为 2,将生成二维布局,其中级别 1 标题水平构建,级别 2 标题垂直构建。不建议您在 reveal.js 中使用更深的节级别嵌套,除非您设置 --slide-level=0(这允许 reveal.js 生成一维布局,并且只将水平线解释为幻灯片边界)。

PowerPoint 布局选择

创建幻灯片时,pptx 写入器根据幻灯片内容从多个预定义布局中选择:

标题幻灯片
此布局用于初始幻灯片,如果存在 dateauthortitle 元数据字段,则从中生成并填充。
节标题
此布局用于 Pandoc 所称的“标题幻灯片”,即以层次结构中高于幻灯片级别的标题开头的幻灯片。
两栏内容
此布局用于双列幻灯片,即包含一个类为 columns 的 div,且该 div 中包含至少两个类为 column 且带有 width 属性的 div 的幻灯片。
比较
此布局用于任何至少有一列包含文本后跟非文本(例如图像或表格)的双列幻灯片,替代“Two Content”布局。
带标题内容
此布局用于任何非双列幻灯片,其中包含文本后跟非文本(例如图像或表格)。
空白
此布局用于任何只包含空白内容的幻灯片,例如只包含演讲者备注的幻灯片,或只包含不间断空格的幻灯片。
标题和内容
此布局用于所有不符合其他布局标准的幻灯片。

这些布局选自 Pandoc 附带的默认 pptx 引用文档,除非使用 --reference-doc 指定了替代引用文档。

增量列表

默认情况下,这些写入器生成的列表会“一次性”显示。如果您希望列表增量显示(一次显示一个项目),请使用 -i 选项。如果您希望某个特定列表偏离默认设置,请将其放在类为 incrementalnonincrementaldiv 块中。因此,例如,使用 fenced div 语法,以下内容将是增量的,无论文档默认设置如何:

::: incremental

- Eat spaghetti
- Drink wine

:::

或者

::: nonincremental

- Eat spaghetti
- Drink wine

:::

虽然使用 incrementalnonincremental div 是按情况设置增量列表的推荐方法,但也支持一种较旧的方法:将列表放在块引用中将偏离文档默认设置(即,在没有 -i 选项时增量显示,在有 -i 选项时一次性显示):

> - Eat spaghetti
> - Drink wine

两种方法都允许在单个文档中混合使用增量列表和非增量列表。

如果您想包含一个块引用的列表,您可以通过将列表放在一个围栏式 div 中来解决此行为,这样它就不是块引用的直接子元素:

> ::: wrapper
> - a
> - list in a quote
> :::

插入停顿

您可以通过包含一个包含三个点(用空格分隔)的段落来在幻灯片中添加“停顿”:

# Slide with a pause

content before the pause

. . .

content after the pause

注意:此功能尚未在 PowerPoint 输出中实现。

幻灯片样式

您可以通过将自定义 CSS 文件放置在 $DATADIR/s5/default(用于 S5)、$DATADIR/slidy(用于 Slidy)或 $DATADIR/slideous(用于 Slideous)中来更改 HTML 幻灯片的样式,其中 $DATADIR 是用户数据目录(请参阅上文的--data-dir)。原始文件可以在 Pandoc 的系统数据目录中找到(通常是 $CABALDIR/pandoc-VERSION/s5/default)。Pandoc 将在那里查找在用户数据目录中找不到的任何文件。

对于 dzslides,CSS 包含在 HTML 文件本身中,可以在那里修改。

所有 reveal.js 配置选项都可以通过变量设置。例如,可以通过设置 theme 变量来使用主题:

-V theme=moon

或者您可以使用 --css 选项指定自定义样式表。

要设置 beamer 幻灯片的样式,可以使用 -V 选项指定 themecolorthemefontthemeinnerthemeoutertheme

pandoc -t beamer habits.txt -V theme:Warsaw -o habits.pdf

请注意,在 HTML 幻灯片格式中,标题属性将转换为幻灯片属性(在 <div><section> 上),允许您为单个幻灯片设置样式。在 beamer 中,许多标题类和属性被识别为帧选项,并将作为选项传递给帧:请参阅下面的beamer 中的帧属性

演讲者备注

演讲者备注支持 reveal.js、PowerPoint (pptx) 和 beamer 输出。您可以在 Markdown 文档中添加备注,如下所示:

::: notes

This is my note.

- It can contain Markdown
- like this list

:::

要在 reveal.js 中显示备注窗口,请在查看演示文稿时按 s。PowerPoint 中的演讲者备注将像往常一样在讲义和演示者视图中可用。

其他幻灯片格式尚不支持备注,但备注不会出现在幻灯片本身上。

要将内容并排放置在列中,可以使用类为 columns 的原生 div 容器,其中包含两个或更多类为 column 并带有 width 属性的 div 容器:

:::::::::::::: {.columns}
::: {.column width="40%"}
contents...
:::
::: {.column width="60%"}
contents...
:::
::::::::::::::

注意:目前,指定列宽对 PowerPoint 无效。

beamer 中的附加列属性

类为 columnscolumn 的 div 容器可以选择具有 align 属性。类为 columns 可以选择具有 totalwidth 属性或 onlytextwidth 类。

:::::::::::::: {.columns align=center totalwidth=8em}
::: {.column width="40%"}
contents...
:::
::: {.column width="60%" align=bottom}
contents...
:::
::::::::::::::

columnscolumn 上的 align 属性可与 toptop-baselinecenterbottom 值一起使用,以垂直对齐列。在 columns 中,它默认为 top

totalwidth 属性将列的宽度限制为给定值。

:::::::::::::: {.columns align=top .onlytextwidth}
::: {.column width="40%" align=center}
contents...
:::
::: {.column width="60%"}
contents...
:::
::::::::::::::

onlytextwidth 类将 totalwidth 设置为 \textwidth

有关更多详细信息,请参阅 Beamer 用户指南的第 12.7 节。

beamer 中的帧属性

有时需要在 beamer 中为帧添加 LaTeX [fragile] 选项(例如,在使用 minted 环境时)。这可以通过将 fragile 类添加到引入幻灯片的标题来强制实现:

# Fragile slide {.fragile}

Beamer 用户指南》第 8.1 节中描述的所有其他帧属性也可以使用:allowdisplaybreaksallowframebreaksbcstenvironmentlabelplainshrinkstandoutnoframenumberingsqueeze。特别推荐 allowframebreaks 用于参考文献,因为它允许在内容溢出帧时创建多个幻灯片:

# References {.allowframebreaks}

此外,frameoptions 属性可用于将任意帧选项传递给 beamer 幻灯片:

# Heading {frameoptions="squeeze,shrink,customoption=foobar"}

reveal.js、beamer 和 pptx 中的背景

背景图像可以添加到独立的 reveal.js 幻灯片、beamer 幻灯片和 pptx 幻灯片中。

所有幻灯片上(beamer、reveal.js、pptx)

对于 beamer 和 reveal.js,background-image 配置选项可以在 YAML 元数据块中或作为命令行变量使用,以便在每张幻灯片上获得相同的图像。

请注意,对于 reveal.js,background-image 将用作 parallaxBackgroundImage(见下文)。

对于 pptx,您可以使用一个 --reference-doc,其中已在相关布局上设置了背景图像。

parallaxBackgroundImage (reveal.js)

对于 reveal.js,还有一个 reveal.js 原生选项 parallaxBackgroundImage,它生成一个视差滚动背景。您还必须设置 parallaxBackgroundSize,并且可以选择设置 parallaxBackgroundHorizontalparallaxBackgroundVertical 来配置滚动行为。有关这些选项含义的更多详细信息,请参阅 reveal.js 文档

在 reveal.js 的概览模式下,视差背景图像将仅在第一张幻灯片上显示。

在单个幻灯片上(reveal.js、pptx)

要为特定的 reveal.js 或 pptx 幻灯片设置图像,请将 {background-image="/path/to/image"} 添加到幻灯片上的第一个幻灯片级别标题(甚至可以是空的)。

由于 HTML 写入器会透传未知属性,其他 reveal.js 背景设置也适用于单个幻灯片,包括 background-sizebackground-repeatbackground-colortransitiontransition-speed。(data- 前缀将自动添加。)

注意:为了与 reveal.js 保持一致,pptx 也支持 data-background-image – 如果找不到 background-image,将检查 data-background-image

在标题幻灯片上(reveal.js、pptx)

要为 reveal.js 自动生成的标题幻灯片添加背景图像,请在 YAML 元数据块中使用 title-slide-attributes 变量。它必须包含属性名称和值的映射。(请注意,此处需要 data- 前缀,因为它不会自动添加。)

对于 pptx,请传递一个设置了“标题幻灯片”布局背景图像的 --reference-doc

示例 (reveal.js)

---
title: My Slide Show
parallaxBackgroundImage: /path/to/my/background_image.png
title-slide-attributes:
    data-background-image: /path/to/title_image.png
    data-background-size: contain
---

## Slide One

Slide 1 has background_image.png as its background.

## {background-image="/path/to/special_image.jpg"}

Slide 2 has a special image for its background, even though the heading has no content.

EPUBs

EPUB 元数据

有两种方法可以为 EPUB 指定元数据。第一种是使用 --epub-metadata 选项,该选项以包含 都柏林核心元素 的 XML 文件作为参数。

第二种方法是使用 YAML,可以在 Markdown 文档中的 YAML 元数据块中,也可以在用 --metadata-file 指定的单独 YAML 文件中。以下是一个带有 EPUB 元数据的 YAML 元数据块示例:

---
title:
- type: main
  text: My Book
- type: subtitle
  text: An investigation of metadata
creator:
- role: author
  text: John Smith
- role: editor
  text: Sarah Jones
identifier:
- scheme: DOI
  text: doi:10.234234.234/33
publisher:  My Press
rights: © 2007 John Smith, CC BY-NC
ibooks:
  version: 1.3.4
...

识别以下字段:

identifier
字符串值或具有 textscheme 字段的对象。scheme 的有效值为 ISBN-10, GTIN-13, UPC, ISMN-10, DOI, LCCN, GTIN-14, ISBN-13, Legal deposit number, URN, OCLC, ISMN-13, ISBN-A, JP, OLCC
标题
字符串值,或带有 file-astype 字段的对象,或此类对象的列表。type 的有效值为 main, subtitle, short, collection, edition, extended
creator
字符串值,或包含 rolefile-astext 字段的对象,或此类对象的列表。role 的有效值为 MARC 关系者,但 Pandoc 会尝试将人类可读的版本(如“author”和“editor”)转换为相应的 MARC 关系者。
contributor
格式与 creator 相同。
日期
格式为 YYYY-MM-DD 的字符串值。(只需要年份。)Pandoc 会尝试转换其他常见的日期格式。
lang(或旧版:language
符合 BCP 47 格式的字符串值。如果未指定,Pandoc 将默认为本地语言。
subject
字符串值,或具有 textauthorityterm 字段的对象,或此类对象的列表。authority 的有效值是 保留的权威值(目前有 AATBICBISACCLCDDCCLILEuroVocMEDTOPLCSHNDCThemaUDCWGS)或标识自定义方案的绝对 IRI。term 的有效值由方案定义。
description
一个字符串值。
类型
一个字符串值。
format
一个字符串值。
relation
一个字符串值。
coverage
一个字符串值。
rights
一个字符串值。
belongs-to-collection
一个字符串值。标识 EPUB 出版物所属的集合名称。
group-position
group-position 字段表示 EPUB 出版物相对于属于同一 belongs-to-collection 字段的其他作品的数字位置。
封面图片
字符串值(封面图片路径)。
css (或 legacy: stylesheet)
字符串值(CSS 样式表路径)。
页面阅读方向
ltrrtl。指定 spine 元素page-progression-direction 属性。
访问模式
字符串数组(schema)。默认为 ["textual"]
足够的访问模式
字符串数组(schema)。默认为 ["textual"]
无障碍危害
字符串数组(schema)。默认为 ["none"]
无障碍特性

字符串数组(schema)。默认为

- "alternativeText"
- "readingOrder"
- "structuralNavigation"
- "tableOfContents"
无障碍摘要
一个字符串值。
iBooks

iBooks 专用元数据,包含以下字段

  • version: (字符串)
  • specified-fonts: true|false (默认 false)
  • ipad-orientation-lock: portrait-only|landscape-only
  • iphone-orientation-lock: portrait-only|landscape-only
  • binding: true|false (默认 true)
  • scroll-axis: vertical|horizontal|default

epub:type 属性

对于 epub3 输出,您可以使用 epub:type 属性来标记与 EPUB 章对应的标题。例如,要将属性设置为 prologue 值,请使用以下 Markdown

# My chapter {epub:type=prologue}

结果将是

<body epub:type="frontmatter">
  <section epub:type="prologue">
    <h1>My chapter</h1>

Pandoc 将输出 <body epub:type="bodymatter">,除非您使用以下值之一,在这种情况下将输出 frontmatterbackmatter

第一个部分的 epub:type 正文的 epub:type
序言 扉页
abstract 扉页
致谢 扉页
版权页 扉页
献词 扉页
鸣谢 扉页
keywords 扉页
版权说明 扉页
贡献者 扉页
其他鸣谢 扉页
勘误表 扉页
修订历史 扉页
标题页 扉页
副标题页 扉页
系列页 扉页
前言 扉页
扉页
卷首插画 扉页
附录 尾页
结语 尾页
bibliography 尾页
索引 尾页

链接媒体

默认情况下,pandoc 会下载生成的 EPUB 中任何 <img><audio><video><source> 元素引用的媒体,并将其包含在 EPUB 容器中,从而生成一个完全自包含的 EPUB。如果您想链接外部媒体资源,请在源中使用原始 HTML,并在带有 src 属性的标签中添加 data-external="1"。例如

<audio controls="1">
  <source src="https://example.com/music/toccata.mp3"
          data-external="1" type="audio/mpeg">
  </source>
</audio>

如果输入格式已经是 HTML,那么 data-external="1" 将对 <img> 元素按预期工作。类似地,对于 Markdown,可以使用 ![img](url){external=1} 声明外部图片。请注意,这仅适用于图片;其他媒体元素在 pandoc 的 AST 中没有原生表示,需要使用原始 HTML。

EPUB 样式

默认情况下,pandoc 会包含其 epub.css 数据文件中所含的一些基本样式。(要查看此内容,请使用 pandoc --print-default-data-file epub.css。)要使用不同的 CSS 文件,只需使用--css 命令行选项。此外还定义了一些内联样式;这些对于 pandoc 的 HTML 输出的正确格式化至关重要。

如果需要 pandoc 默认 HTML 模板中更具主观性的样式,可以设置 document-css 变量(在这种情况下,HTML 变量中定义的变量可用于微调样式)。

分块 HTML

pandoc -t chunkedhtml 将生成一个包含链接 HTML 文件的 zip 存档,原始文档的每个部分对应一个文件。内部链接将自动调整以指向正确的位置,工作目录下链接的图片将被包含在内,并且将添加导航链接。此外,还将包含一个 sitemap.json JSON 文件,描述文件的层次结构。

如果指定了不带扩展名的输出文件,则它将被解释为一个目录,并且 zip 存档将自动解压缩到其中(除非它已经存在,在这种情况下将引发错误)。否则将生成一个 .zip 文件。

导航链接可以通过调整模板进行自定义。默认情况下,目录仅包含在首页上。要在每个页面上包含它,请手动设置 toc 变量。

Jupyter 笔记

创建 Jupyter 笔记时,pandoc 将尝试推断笔记结构。带有 code 类的代码块将被视为代码单元格,而中间内容将被视为 Markdown 单元格。Markdown 单元格中的图片将自动创建附件。元数据将从 jupyter 元数据字段中获取。例如

---
title: My notebook
jupyter:
  nbformat: 4
  nbformat_minor: 5
  kernelspec:
     display_name: Python 2
     language: python
     name: python2
  language_info:
     codemirror_mode:
       name: ipython
       version: 2
     file_extension: ".py"
     mimetype: "text/x-python"
     name: "python"
     nbconvert_exporter: "python"
     pygments_lexer: "ipython2"
     version: "2.7.15"
---

# Lorem ipsum

**Lorem ipsum** dolor sit amet, consectetur adipiscing elit. Nunc luctus
bibendum felis dictum sodales.

``` code
print("hello")
```

## Pyout

``` code
from IPython.display import HTML
HTML("""
<script>
console.log("hello");
</script>
<b>HTML</b>
""")
```

## Image

This image ![image](myimage.png) will be
included as a cell attachment.

如果您想添加单元格属性、以不同方式分组单元格或向代码单元格添加输出,则需要包含 div 来指示结构。您可以使用围栏式 div原生 div 来实现此目的。这是一个例子

:::::: {.cell .markdown}
# Lorem

**Lorem ipsum** dolor sit amet, consectetur adipiscing elit. Nunc luctus
bibendum felis dictum sodales.
::::::

:::::: {.cell .code execution_count=1}
``` {.python}
print("hello")
```

::: {.output .stream .stdout}
```
hello
```
:::
::::::

:::::: {.cell .code execution_count=2}
``` {.python}
from IPython.display import HTML
HTML("""
<script>
console.log("hello");
</script>
<b>HTML</b>
""")
```

::: {.output .execute_result execution_count=2}
```{=html}
<script>
console.log("hello");
</script>
<b>HTML</b>
hello
```
:::
::::::

如果您在输出单元格中包含原始 HTML 或 TeX,请使用原始属性,如上例的最后一个单元格所示。尽管 pandoc 可以处理“裸”原始 HTML 和 TeX,但结果通常是原始元素和普通文本元素交错,而在输出单元格中,pandoc 期望一个单一的、连续的原始块。为了避免使用原始 HTML 或 TeX,除非使用原始属性明确标记,我们建议在 Markdown 和 ipynb 笔记之间转换时指定扩展 -raw_html-raw_tex+raw_attribute

请注意,影响 Markdown 读取和写入的选项和扩展也将影响 ipynb 笔记中的 Markdown 单元格。例如,--wrap=preserve 将保留 Markdown 单元格中的软换行符;--markdown-headings=setext 将导致使用 Setext 样式标题;而 --preserve-tabs 将阻止制表符转换为空格。

语法高亮

Pandoc 会自动高亮显示用语言名称标记的围栏代码块中的语法。Haskell 库 skylighting 用于高亮显示。目前,高亮显示仅支持 HTML、EPUB、Docx、Ms、Man 和 LaTeX/PDF 输出。要查看 pandoc 能识别的语言名称列表,请键入 pandoc --list-highlight-languages

颜色方案可以使用--highlight-style 选项选择。默认颜色方案是 pygments,它模仿了 Python 库 pygments 使用的默认颜色方案(尽管 pygments 实际上并未用于高亮显示)。要查看高亮样式列表,请键入 pandoc --list-highlight-styles

如果您不满意预定义的样式,可以使用--print-highlight-style 生成一个 JSON .theme 文件,该文件可以修改并用作--highlight-style 的参数。例如,要获取 pygments 样式的 JSON 版本

pandoc -o my.theme --print-highlight-style pygments

然后编辑 my.theme 并像这样使用它

pandoc --highlight-style my.theme

如果您不满意内置的高亮显示,或者您想高亮显示不支持的语言,可以使用--syntax-definition 选项加载一个 KDE 风格的 XML 语法定义文件。在编写自己的文件之前,请查看 KDE 的语法定义仓库

如果您收到 pandoc “无法读取高亮主题”的错误,请检查 JSON 文件是否使用 UTF-8 编码且没有字节顺序标记(BOM)。

要禁用高亮显示,请使用--no-highlight 选项。

自定义样式

自定义样式可用于 docx、odt 和 ICML 格式。

输出

默认情况下,pandoc 的 odt、docx 和 ICML 输出会为段落和块引用等块应用一组预定义样式,并为内联元素主要使用默认格式(斜体、粗体)。这适用于大多数用途,特别是与参考文档文件一起使用时。但是,如果您需要将自己的样式应用于块,或匹配一组预先存在的样式,pandoc 允许您分别使用 divspan 为块和文本定义自定义样式。

如果您定义了一个带有 custom-style 属性的 Div、Span 或 Table,pandoc 将把您指定的样式应用于包含的元素(除了其功能依赖于样式的元素,如标题、代码块、块引用或链接)。因此,例如,使用 bracketed_spans 语法,

[Get out]{custom-style="Emphatically"}, he said.

将生成一个文件,其中“Get out”使用字符样式 Emphatically 进行了样式设置。类似地,使用 fenced_divs 语法,

Dickinson starts the poem simply:

::: {custom-style="Poetry"}
| A Bird came down the Walk---
| He did not know I saw---
:::

将使用 Poetry 段落样式设置包含的两行的样式。

如果样式尚未在您的参考文档中定义,则样式将在输出文件中定义为继承自普通文本 (docx) 或默认段落样式 (odt)。如果它们已经定义,pandoc 将不会更改定义。

此功能与 pandoc 过滤器结合使用时,可实现最大程度的自定义。如果您希望块引用后的所有段落都缩进,您可以编写一个过滤器来应用必要的样式。如果您希望所有斜体都转换为 Emphasis 字符样式(可能为了改变它们的颜色),您可以编写一个过滤器,将所有斜体内联元素转换为 Emphasis 自定义样式 span 内的内联元素。

对于 docx 或 odt 输出,您无需启用任何扩展即可使自定义样式生效。

输入

默认情况下,docx 阅读器仅读取可以通过直接转换或解释输入文档样式派生来转换为 pandoc 元素的样式。

通过在 docx 阅读器中启用styles 扩展-f docx+styles),您可以生成保留输入文档样式、使用 custom-style 类的输出。每个样式都将添加一个 custom-style 属性。将创建 Div 以容纳段落样式,Span 以容纳字符样式。表格样式将直接应用于 Table。

例如,使用测试目录中的 custom-style-reference.docx 文件,我们有以下不同的输出

没有 +styles 扩展

$ pandoc test/docx/custom-style-reference.docx -f docx -t markdown
This is some text.

This is text with an *emphasized* text style. And this is text with a
**strengthened** text style.

> Here is a styled paragraph that inherits from Block Text.

并带有扩展

$ pandoc test/docx/custom-style-reference.docx -f docx+styles -t markdown

::: {custom-style="First Paragraph"}
This is some text.
:::

::: {custom-style="Body Text"}
This is text with an [emphasized]{custom-style="Emphatic"} text style.
And this is text with a [strengthened]{custom-style="Strengthened"}
text style.
:::

::: {custom-style="My Block Style"}
> Here is a styled paragraph that inherits from Block Text.
:::

有了这些自定义样式,您可以在创建 docx 输出时(见下文)使用输入文档作为参考文档,并在输入和输出文件中保持相同的样式。

自定义读取器和写入器

Pandoc 可以通过用 Lua 编写的自定义读取器和写入器进行扩展。(Pandoc 包含一个 Lua 解释器,因此无需单独安装 Lua。)

要使用自定义读取器或写入器,只需指定 Lua 脚本的路径来代替输入或输出格式。例如

pandoc -t data/sample.lua
pandoc -f my_custom_markup_language.lua -t latex -s

如果脚本在工作目录中找不到,它将在用户数据目录的 custom 子目录中查找(参见--data-dir)。

自定义读取器是一个 Lua 脚本,它定义了一个函数 Reader,该函数以字符串作为输入并返回一个 Pandoc AST。有关可用于创建 pandoc AST 元素的函数的文档,请参阅 Lua 过滤器文档。对于解析,默认情况下提供了 lpeg 解析库。要查看自定义读取器示例

pandoc --print-default-data-file creole.lua

如果您希望自定义读取器能够访问读取器选项(例如制表位设置),则可以为您的 Reader 函数提供第二个 options 参数。

自定义写入器是一个 Lua 脚本,它定义了一个函数,用于指定如何渲染 Pandoc AST 中的每个元素。有关功能齐全的示例,请参阅 djot-writer.lua

请注意,自定义写入器没有默认模板。如果您想将--standalone 与自定义写入器一起使用,您需要使用--template 手动指定模板,或者将一个名为 default.NAME_OF_CUSTOM_WRITER.lua 的新默认模板添加到用户数据目录的 templates 子目录中(参见Templates)。

可复现构建

Pandoc 目标的一些文档格式(例如 EPUB、docx 和 ODT)在生成的文档中包含构建时间戳。这意味着即使源文件没有改变,连续构建生成的文件也会不同。为避免此问题,请设置 SOURCE_DATE_EPOCH 环境变量,时间戳将从中获取而不是当前时间。SOURCE_DATE_EPOCH 应包含一个整数 Unix 时间戳(指定自协调世界时 1970 年 1 月 1 日午夜以来的秒数)。

某些文档格式还包含唯一标识符。对于 EPUB,可以通过设置 identifier 元数据字段明确设置此项(参见上文EPUB 元数据)。

无障碍 PDF 和 PDF 归档标准

PDF 是一种灵活的格式,在特定上下文中使用 PDF 需要遵循额外的约定。例如,PDF 默认情况下不可访问;它们定义了字符如何在页面上放置,但不包含内容的语义信息。然而,可以生成可访问的 PDF,它们使用标签为文档添加语义信息。

Pandoc 默认使用 LaTeX 生成 PDF。LaTeX 中的标签支持正在开发中,尚未完全可用,因此以这种方式生成的 PDF 将始终未加标签且不可访问。这意味着必须使用其他引擎来生成可访问的 PDF。

PDF 标准 PDF/A 和 PDF/UA 定义了旨在优化 PDF 以进行归档和可访问性的进一步限制。标签通常与这些标准结合使用以确保最佳结果。

但请注意,标准合规性取决于许多因素,包括嵌入图像的色彩空间。Pandoc 无法检查此项,必须使用外部程序来确保生成的 PDF 符合标准。

ConTeXt

ConTeXt 总是生成带标签的 PDF,但质量取决于输入。Pandoc 生成的默认 ConTeXt 标记针对可读性和重用进行了优化,而不是标签。启用tagging 格式扩展以强制生成针对标签优化的标记。例如

pandoc -t context+tagging doc.md -o doc.pdf

应使用最新版本的 context,因为旧版本包含导致 PDF 元数据无效的错误。

WeasyPrint

基于 HTML 的引擎 WeasyPrint 自 57 版本起包含了对 PDF/A 和 PDF/UA 的实验性支持。可以创建带标签的 PDF:

pandoc --pdf-engine=weasyprint \
       --pdf-engine-opt=--pdf-variant=pdf/ua-1 ...

该功能是实验性的,不应假定其符合标准。

Prince XML

非免费的 HTML-to-PDF 转换器 prince 对各种 PDF 标准和标签都有广泛的支持。例如:

pandoc --pdf-engine=prince \
       --pdf-engine-opt=--tagged-pdf ...

有关更多信息,请参阅 prince 文档。

Typst

Typst 0.12 可以生成 PDF/A-2b

pandoc --pdf-engine=typst --pdf-engine-opt=--pdf-standard=a-2b ...

文字处理器

LibreOffice 和 MS Word 等文字处理器也可用于生成标准化和带标签的 PDF 输出。Pandoc 不支持通过这些工具进行直接转换。但是,pandoc 可以将文档转换为 docxodt 文件,然后可以使用相应的文字处理器打开并转换为 PDF。有关更多信息,请参阅 WordLibreOffice 的文档。

将 pandoc 作为 Web 服务器运行

如果您将 pandoc 可执行文件重命名(或创建符号链接)为 pandoc-server,或者在调用 pandoc 时将 server 作为第一个参数,它将启动一个带有 JSON API 的 Web 服务器。此服务器暴露了 pandoc 的大部分转换功能。有关完整文档,请参阅 pandoc-server 手册页。

如果您将 pandoc 可执行文件重命名(或创建符号链接)为 pandoc-server.cgi,它将作为一个 CGI 程序运行,暴露与 pandoc-server 相同的 API。

pandoc-server 旨在实现最大限度的安全性;它使用 Haskell 的类型系统来提供强大的保证,即在 pandoc 转换期间不会在服务器上执行任何 I/O。

将 pandoc 作为 Lua 解释器运行

pandoc-lua 名称或将 lua 作为第一个参数调用 pandoc 可执行文件,将使其作为独立的 Lua 解释器运行。其行为与版本 5.4 的独立 lua 可执行文件基本相同。所有 pandoc.* 包,以及 relpeg 包,都通过全局变量可用。此外,全局变量 PANDOC_VERSIONPANDOC_STATEPANDOC_API_VERSION 在启动时设置。有关完整文档,请参阅 pandoc-lua 手册页。

安全注意事项

  1. 尽管 pandoc 本身不会创建或修改您明确要求它创建的文件(用于生成 PDF 的临时文件除外),但过滤器或自定义写入器原则上可以在您的文件系统上执行任何操作。在使用过滤器和自定义写入器之前,请非常仔细地审计它们。

  2. 几种输入格式(包括 LaTeX、Org、RST 和 Typst)支持 include 指令,允许将文件内容包含在输出中。不受信任的攻击者可能会利用这些指令查看文件系统上的文件内容。(使用--sandbox 选项可以防止这种威胁。)

  3. 几种输出格式(包括 RTF、FB2、带有--self-contained 的 HTML、EPUB、Docx 和 ODT)会将编码或原始图像嵌入到输出文件中。不受信任的攻击者可能会利用此漏洞查看文件系统上非图像文件的内容。(使用--sandbox 选项可以防止这种威胁,但也会阻止在这些格式中包含图像。)

  4. 在读取 HTML 文件时,pandoc 将尝试通过从本地文件或 src 指定的 URL 获取内容来包含 iframe 元素的内容。如果在服务器上处理不受信任的 HTML,这可能会暴露运行服务器的进程可读取的任何内容。使用-f html+raw_html 将导致整个 iframe 被解析为原始 HTML 块,从而减轻此威胁。使用 --sandbox 也可以防止这种威胁。

  5. 如果您的应用程序将 pandoc 作为 Haskell 库使用(而不是通过执行外部命令),则可以通过在 PandocPure monad 中运行 pandoc 操作,以完全隔离 pandoc 与您的文件系统的方式使用它。有关更多详细信息,请参阅文档使用 pandoc API。(这对应于命令行上使用--sandbox 选项。)

  6. Pandoc 的解析器在某些极端情况下可能会表现出病态性能。将任何 pandoc 操作置于超时控制下是明智的,以避免利用这些问题的 DOS 攻击。如果您正在使用 pandoc 可执行文件,可以添加命令行选项 +RTS -M512M -RTS(例如)以将堆大小限制为 512MB。请注意,commonmark 解析器(包括 commonmark_xgfm)比 markdown 解析器更不容易出现病态性能问题,因此在处理不受信任的输入时是更好的选择。

  7. Pandoc 生成的 HTML 不保证安全。如果 Markdown 输入启用了 raw_html,用户可以注入任意 HTML。即使禁用了 raw_html,用户也可以在 URL 和属性中包含危险内容。为了安全起见,您应该通过 HTML 清理器处理所有从不受信任的用户输入生成的 HTML。

作者

版权所有 2006–2024 John MacFarlane ([email protected])。根据 GPL 版本 2 或更高版本发布。本软件不附带任何形式的担保。(有关完整的版权和担保声明,请参阅 COPYRIGHT 文件。)有关贡献者的完整列表,请参阅 pandoc 源代码中的 AUTHORS.md 文件。


  1. 此规则的目的是确保以人名首字母开头的普通段落,例如:

    B. Russell won a Nobel Prize (but not for "On Denoting").

    不被视为列表项。

    此规则不会阻止

    (C) 2007 Joe Smith

    被解释为列表项。在这种情况下,可以使用反斜杠转义:

    (C\) 2007 Joe Smith
    ↩︎
  2. 我受到了 David Wheeler 建议的影响。↩︎

  3. 该方案由 Michel Fortin 提出,他在 Markdown 讨论列表上提出了此方案。↩︎

  4. 要了解为什么惰性与放宽项目之间空行要求不兼容,请考虑以下示例

    bar
    :    definition
    foo
    :    definition

    这到底是一个包含“bar”的两个定义(其中第一个是惰性换行)的单个列表项,还是两个列表项?为了消除歧义,我们必须要么禁止惰性换行,要么要求列表项之间有一个空行。↩︎