Word 文档生成 — md→pandoc→docx 管道
从中文 md(或翻译后的英文 md)生成 Word 文档,样式参照研究小组的参考手稿:pandoc 转换 + Python zipfile 后处理,直接读写 docx 的 XML。
六条铁律(先记住)
\tag{n}会被 pandoc 静默丢弃:生成前,将\tag{…}替换为\qquad\text{(n)},使编号位于公式右端;md 源文件保留标准的\tag拼写不变。- 禁用隐式图片:
-f markdown-implicit_figures,图片 alt 文本留空——否则 pandoc 会从 alt 文本自动生成重复的标题。 - 反向引用语法因语言而异:Python
re.sub使用\1/\g<1>;PowerShell/JS 使用$1。使用错误的习惯会输出字面量($1)。 - 公式字体是一个雷区:OMML 数学运行依赖于
w:ascii="Cambria Math";任何文档级别的字体替换必须拆分<m:oMath>…</m:oMath>并仅修改外部部分,验证 Cambria Math 的数量不变。 - 覆盖前先验证:临时副本 → 验证(特征计数 + 通过
minidom.parseString检查 XML 良好构成 + pandoc 回读)→os.replace;这扇门正好抓住了两个真实的 bug。 - 编辑样式表胜过编辑正文 XML:pandoc 从
--reference-doc继承样式和 sectPr;参考文档剖析操作手册在参考文档 §3.5 中。
内容地图
完整细节(pandoc 层陷阱、OOXML/正则表达式层陷阱、工程实践、第二轮公式布局和标题规则陷阱、可重用脚本)存放在 references/word-pandoc-pitfalls.md。提取的格式规范本身(页面/排版/标题/公式/表格)存放在 references/word-format-spec.md。
可重用脚本(随 scripts\ 提供)
_rebuild_word.py:完整的 md→docx 管道(\tag预处理、样式注入、后处理、写入前验证);_fix_docx_format.py:就地修补手动编辑的 docx 中的三个格式项(TNR、图片居中、表格网格线);- 调用方式(从手稿目录运行;输入和输出是相对路径):
python <skill-path>\scripts\_rebuild_word.py input.md output.docx。
如何选择:用户手动编辑了 Word 文件 → 仅就地修补(重新生成会丢失编辑);用户希望从 md 重新构建 → 完整管道。先询问,或检查是否存在 ~$ 锁文件以确定文档是否正在编辑。
范围边界
- Word 评论/修订(属于 docx-editor MCP 领域):不属于本技能;
- 手稿格式规范本身(页面/排版/标题约定):由本技能的
references/word-format-spec.md携带; - 驱动脚本时的 PowerShell 引号陷阱:参见 references/word-pandoc-pitfalls.md §3.4。