pandoc

被称为文档转换界的“瑞士军刀”,它是一个由纯命令行驱动的开源工具。简单来说,Pandoc 不仅仅是一个“格式转换器”,它更像是一个**文档编译器**。

#type / resource #status / evergreen

[!info] related notes

pandoc

一、 核心原理解析:为什么它这么强?

传统的文件转换器通常是“点对点”硬翻译(比如尝试把 Word 的底层 XML 直接映射成 HTML),这种方式极其容易导致格式错乱。

Pandoc 采用的是类似现代编译器(如 Babel 或 Astro)的架构:解析(Parse) -> 抽象语法树(AST) -> 生成(Render)

  1. 读取器(Reader):首先把你的 Markdown(或 LaTeX、HTML)读取进来。
  2. 抽象语法树(AST):把它转换为一种中间的、与具体格式无关的内存数据结构(比如把 # 标题 统一识别为 Header(level=1))。
  3. 写入器(Writer):最后,根据你指定的输出格式,把 AST 渲染成目标文件(如 .docx.pdf)。

这种“内容与表现解耦”的架构,完美契合了我们之前讨论的“让 AI 专注写 Markdown 纯文本,格式交给工具处理”的思路。

二、 毕业论文的杀手锏:--reference-doc(样式挂载)

这是 Pandoc 在学术界备受推崇的最重要原因。

你的学校肯定发了一个《毕业论文样例.docx》或是排版规范。Word 的排版本质上是一套“样式表”(就像前端的 CSS)。Pandoc 允许你将这个学校的样例作为**模板(Reference)**挂载进去。

具体操作流程:

  1. 制作参考模板:把学校的《样例.docx》复制一份,命名为 template.docx。把里面的文字内容全部删掉,但保留所有的“样式”(如:标题1、标题2、正文、图表题注等)。
  2. AI 生成内容:在 OpenCode 中,让 AI 生成 Markdown 格式的论文内容,保存为 thesis.md。如果你平时习惯用 Markdown 构建个人知识库和记笔记,这一步的代码块、列表、表格语法你绝对得心应手。
  3. 一键编译:在终端执行以下命令:
pandoc thesis.md -o thesis_final.docx --reference-doc=template.docx

发生了什么? Pandoc 会读取 thesis.md 里的 # 一级标题,然后去 template.docx 里寻找名为“标题 1”的样式(比如黑体、三号、段前段后 1 行),并完美套用在生成的 Word 文档中。全程无需你手动刷格式!

三、 进阶功能:解决学术痛点

除了基础的排版套用,Pandoc 还能解决毕业论文中的几个大麻烦:

  • 自动化参考文献 (--citeproc): 在写论文时,手动排版参考文献(GB/T 7714 格式)极其痛苦。

    有了 Pandoc,你可以把所有的参考文献导出一个 .bib.json 数据库文件。在 Markdown 中只需写 [@smith2023],Pandoc 在编译时会自动在文末生成标准的参考文献列表,并在文中插入正确的引用上标。

  • 数学公式完美兼容: 如果你在 Markdown 里使用了 LaTeX 语法写公式(比如 $E=mc^2$),Pandoc 转出 Word 时,会无损转换为 Word 原生的公式对象,依然可以双击编辑。

  • Lua 过滤器(Filters): 既然你懂编程,如果你发现 Pandoc 的默认转换不符合你的特殊需求,你可以写一段简短的 Lua 脚本介入 AST 树的生成过程,实现高度定制化的文档处理逻辑。

四、 如何优雅地落地这个方案?

放弃让 AI 去调用臃肿的 Word 操控工具,你的 S.O.P(标准作业程序)可以进化为:

  1. AI 架构师:把开题报告喂给 AI,让它生成论文的 Markdown 目录大纲。
  2. AI 程序员:结合你实际项目的代码结构和业务逻辑,让 AI 逐节填充大纲,产出纯纯的 Markdown 文本(包含代码块、Markdown 表格)。
  3. Pandoc 编译器:在终端敲下一行命令,把 Markdown + 学校的 template.docx + 参考文献库,一键编译成最终交稿的 Word 文件。
创建于 2026/3/8 更新于 2026/5/27