使用 Pandoc 打造一套可复用的 Word 模板(docx)
Pandoc 是一款非常强大的文档转换工具,常用于将 Markdown 转换为 Word(docx)、PDF、HTML 等格式。在实际工程或文档规范化场景中,docx 模板(reference-docx)几乎是必不可少的。
本文将系统介绍:
- Pandoc 的 docx 模板工作原理
- 如何制作一个“Pandoc 友好”的 Word 模板
- 常见样式(标题、列表、代码、图片等)的正确设置方式
- 常见问题与踩坑总结
一、Pandoc 的 docx 模板原理
Pandoc 在生成 Word 文档时,并不是“复制现有 Word 内容”,而是:
根据 Markdown 结构,映射到 Word 的“样式(Style)”,再由样式决定最终外观
也就是说:
- Pandoc 只关心样式定义
- 不关心你在 Word 里对某一段“手工点出来”的格式
因此,Pandoc 的 docx 模板本质上是一个:
样式配置文件,而不是示例文档
二、reference-docx 是什么
Pandoc 通过参数指定 Word 模板:
pandoc input.md -o output.docx --reference-doc=template.docx
这个 template.docx 需要满足一个核心条件:
必须修改的是“内置样式”,而不是新增样式
Pandoc 只会识别 Word 内置样式,如:
- Heading 1 / Heading 2 / Heading 3
- Normal
- List Paragraph
- Source Code
- Caption
- Image Caption(Figure Caption)
三、推荐的模板制作流程
1. 生成一个基础模板(推荐)
让 Pandoc 先帮你生成一个“标准骨架”:
pandoc -o reference.docx --print-default-data-file=reference.docx
这个文件包含了 Pandoc 实际会使用的全部样式,是最佳起点。
2. 打开 reference.docx,进入“样式编辑模式”
在 Word 中:
- 打开“开始” → “样式”
- 右键样式 → 修改
- 通过“格式”按钮修改字体、颜色、段落等
不要直接选中文字去改颜色或字体
四、常见样式的正确设置方式
4.1 标题样式
Pandoc 将 Markdown 标题映射为 Word 内置的标题样式:
# 一级标题 → Heading 1
## 二级标题 → Heading 2
### 三级标题 → Heading 3
因此,必须修改 Word 的内置标题样式本身。
修改「标题样式本身」(推荐做法)
以下步骤以 Heading 1(标题 1) 为例,其他级别标题完全相同。
打开模板文件,使用 Word 打开你的模板文件
进入样式管理
- 切换到 Word 顶部菜单 “开始”
- 在“样式”区域找到 “标题 1”
- 右键点击 “标题 1”
- 选择 “修改”
注意:
不要选中正文里的某一行标题去改格式,这样 Pandoc 不会识别。
修改字体属性(颜色、字号等)
在“修改样式”窗口中:
- 点击左下角 “格式”
- 选择 “字体”
- 设置你需要的属性,例如:
- 字体:黑体 / Arial
- 字号:16 pt
- 颜色:红色 / 深蓝色
- 点击“确定”
修改段落属性(间距、行距)
仍在“修改样式”窗口中:
-
点击 “格式” → “段落”
-
推荐设置:
-
段前:12 磅
-
段后:6 磅
-
行距:单倍或 1.3 倍
-
-
确认
步骤 关键选项(非常重要)
在“修改样式”窗口底部勾选: “基于该模板的新文档”
这一步决定了:
-
Pandoc 生成的新 docx 是否真正使用你的样式
-
模板是否可复用
保存模板
-
点击“确定”
-
保存
pandocmuban.docx
4.2 正文样式(Normal)
Pandoc 中的普通文本对应 Word 的 Normal 样式。
修改方法
- 开始 → 样式
- 右键 Normal → 修改
- 设置:
- 字体(如宋体 / 思源宋体)
- 字号(10.5~12 pt)
- 行距(1.3~1.5)
- 勾选 “基于该模板的新文档”
- 保存
4.3 无序列表 / 有序列表
Markdown 示例
- 第一项
- 第二项
1. 第一项
2. 第二项
对应 Word 样式
- List Paragraph
- Word 内置多级列表
修改步骤
- 开始 → 样式
- 找到 List Paragraph
- 右键 → 修改
- 点击 格式 → 段落
- 建议设置:
- 左缩进:0
- 悬挂缩进:0.63 cm
- 保存
不要在模板中手动输入
-或1.
列表符号由 Word 列表系统控制
4.4 行内代码(Inline Code)
Markdown 示例
这是 `inline code` 示例
对应 Word 样式
- Verbatim Char
- 或 Source Code Char(不同 Pandoc 版本略有差异)
修改方法
- 样式窗格中找到对应字符样式
- 右键 → 修改
- 设置:
- 等宽字体(Consolas / JetBrains Mono)
- 字体颜色(深灰或蓝色)
- 保存
4.5 代码块(Code Block)
Markdown 示例
```c
int main() {
return 0;
}
#### 对应 Word 样式
- Source Code
- Code Block
#### 修改步骤
1. 右键 **Source Code** → 修改
2. 设置:
- 等宽字体
- 左右缩进
- 行距略小
3. 可选:浅灰背景(不建议太深)
### 4.6 图片与图片说明
#### Markdown 示例
```markdown

对应 Word 样式
- 图片本身:普通段落
- 图片说明:Figure Caption / Caption
修改建议
- 修改 Caption / Figure Caption
- 设置:
- 字号小于正文
- 灰色字体
- 居中对齐
4.7 表格与表格标题
Markdown
| A | B |
|---|---|
| 1 | 2 |
Pandoc 会使用:
- Table
- Table Caption
建议:
- 统一表头加粗
- 设置单元格内边距
- 不要依赖手工边框
4.8 核心原则总结
所有样式修改都遵循同一原则:
- 修改 样式
- 不修改 具体段落
- 使用 Word 内置样式
- 勾选 “基于该模板的新文档”
只要遵守这四点,Pandoc 的 docx 转换结果将稳定且可控。
五、resource-path 与模板的配合
当 Markdown 中包含图片时,需要确保 Pandoc 能找到资源路径:
pandoc input.md \
--resource-path=".;./images" \
--reference-doc=reference.docx \
-o output.docx
注意:
-
--resource-path只能写一次 -
多个路径用
;(Windows)或:(Linux/macOS)
六、常见问题与踩坑总结
1. 标题颜色不生效
原因:
只修改了某个标题段落的颜色,而不是 Heading 样式。
解决:
右键修改 Heading 样式本身。
2. 自定义样式不生效
原因:
Pandoc 不识别你新建的样式名。
解决:
只修改 Pandoc 使用的内置样式。
3. 样式被 Normal 覆盖
原因:
Heading 样式继承了 Normal,但自身未显式设置属性。
解决:
在 Heading 样式中明确设置字体、颜色、段落。
七、结语
Pandoc + Word 模板的核心思想只有一句话:
Markdown 管结构,Word 样式管外观
只要牢牢遵守这一点,Pandoc 完全可以成为一套稳定、可复用、可自动化的文档生产工具。
如果你希望进一步深入:
- 样式与 Lua filter 联动
- 自定义样式映射