4.3 模板

当 Pandoc 将 Markdown 转换为另一种输出格式时,它在幕后使用模板。模板是一个纯文本文件,其中包含一些格式为 $variable$ 的变量。这些变量将由 Pandoc 生成的值替换。下面是一个非常简短的 HTML 输出模板:

<html>
  <head>
    <title>$title$</title>
  </head>
  
  <body>
  $body$
  </body>
</html>

它有两个变量 titlebodytitle 的值来自 YAML 元数据的 title 字段,body 是从 Markdown 输入文档的正文生成的 HTML 代码。例如,假设我们有一个 Markdown 文档:

---
title: 一本好书
---

# 简介

这是一本**优秀的**书!

如果我们使用上述文档生成 HTML 文档,其源代码如下:

<html>
  <head>
    <title>一本好书</title>
  </head>
  
  <body>
  
  <h1>简介</h1>
  
  <p>这是一本<strong>优秀的</strong>书!</p>
  
  </body>
</html>

实际的 HTML、LaTeX 和 EPUB 模板更加复杂,但其中的核心思想是一样的。你需要知道哪些变量可以使用:有些变量是内置的 Pandoc 变量,有些可以由用户在 YAML 元数据中定义,或者从命令行选项 -V--variable 传递。某些变量仅在特定的输出格式中有意义,例如,documentclass 变量仅用于 LaTeX 输出。请参阅 Pandoc 文档以了解有关这些变量的更多信息,你可以在 GitHub 存储库 https://github.com/jgm/pandoc-templates 中找到所有默认的 Pandoc 模板。

请注意,对于 HTML 输出,bookdown 需要模板中的一些附加注释标记,我们已经在第 3.1.3 节中对它们进行了解释。