Pandoc 可以让 Markdown 正文继承单位 Word 模板中的样式、页眉、页脚和页面设置,但 --reference-doc 不会把模板正文原样插入输出文件。正确做法是:在单位模板里准备 Pandoc 会调用的样式与页眉页脚,用 --reference-doc 生成正文,再更新 Word 域;封面、签署页等固定前置内容另行合并。
1. 准备参考文档
以单位现有的 .docx 为基础,在 Word 样式窗格中检查并配置:
- Title、Subtitle;
- Heading 1—6;
- Body Text、First Paragraph;
- Source Code;
- Table Caption、Image Caption;
- TOC Heading、TOC 1—3。
中文字体、字号、段前段后、多级编号都应挂在样式上。手工把一段文字加粗并不能让 Pandoc 把它识别为标题。
如需查看 Pandoc 默认参考文档,可以执行:
pandoc --print-default-data-file reference.docx > pandoc-reference.docx
该文件适合用来核对样式名,不宜直接替换单位模板中的复杂节设置。
2. 设置页眉与页码
在单位模板中直接插入页眉文字和页码域。需要封面不显示页码、正文从 1 开始时,应在 Word 中设置分节符、取消“链接到前一节”,并配置“首页不同”。涉及横向页面或多节页眉时,应先做最小样本,因为过滤器或新增节可能影响页眉页脚关系。
3. 生成目录和正文
Markdown 标题应严格使用 #、##、###,不要跳级。转换命令示例:
pandoc input.md -o output.docx --reference-doc=单位模板.docx --toc --toc-depth=3 --number-sections
--toc 生成目录结构,--toc-depth=3 控制目录深度,--number-sections 为标题编号。目录外观由模板中的 TOC 样式控制。
4. 更新目录和页码
DOCX 中的目录和页码属于 Word 域。生成后在 Word 中执行 Ctrl+A,再按 F9 更新全部域。自动化流水线可以通过 Word COM 打开文档、更新域并保存;使用 LibreOffice 自动刷新时,需要另行验证目录和中文字体是否一致。
5. 固定封面怎么处理
reference.docx 的正文会被忽略,因此单位封面、声明页和签署页不能只放进参考文档正文期待它自动出现。常见做法有两种:
- 用 Pandoc 生成正文后,通过 Word 或 docxcompose 合并封面文件;
- 使用自定义 OpenXML 模板或 Lua filter,在指定位置插入前置内容。
严格格式的公文和论文应优先采用“封面文件 + 生成正文 + 最终合并”的流程,便于单独验证每一部分。
常见故障
- 目录为空:Markdown 没有真实标题层级,或只用了加粗文字。
- 标题字体不对:修改的是单个段落格式,而不是 Heading 样式。
- 页码没有显示:Word 域尚未更新。
- 页眉在横向页后消失:新增节没有继承 header/footer reference。
- 表格不符合单位规范:复杂三线表、合并单元格需要转换后再处理。