DOCX Pipeline v1.2.0:Markdown 转 Word,顺便把 LaTeX 公式也塞进去
DOCX Pipeline 是个把 Markdown 转成中文 DOCX 的命令行工具。双后端:Pure Python 零外部依赖,Pandoc 质量更高。v1.2.0 补上了纯 Python 后端对 LaTeX 数学公式的支持,写论文、出报告时不用硬装 Pandoc。
下面先说怎么用,再简单提实现。
安装
Python 3.10 以上:
pip install git+https://github.com/redamancy231-create/docx-pipeline.git |
核心依赖会一起装好:python-docx、PyYAML、click、Pillow。Pandoc 和 mermaid-cli 是可选的,后面按需安装。
一分钟上手
1. 初始化项目
docx-pipeline init --project-dir ./my-doc --template report --name "技术报告" |
执行完会在 ./my-doc 下生成 project.yaml,里面包含页面、字体、路径、后端开关等所有配置。
四个内置模板:
| 模板 | 场景 | 默认后端 |
|---|---|---|
default |
通用中文文档 | Pure Python |
academic |
论文/学位论文 | Pure Python |
report |
技术报告,带目录和 Mermaid | Pandoc |
strategy |
量化策略文档 | Pure Python |
2. 写 Markdown
模板会给你一个入口文件路径,默认在 ./md/main.md。直接写普通 Markdown 就行,公式用 $...$ 行内、$$...$$ 独立:
--- |
3. 转换
cd ./my-doc |
输出路径由 project.yaml 里的 paths.docx_output 决定,默认 ./output/doc.docx。
想换输出文件:
docx-pipeline convert --config ./project.yaml --output ./out/报告.docx |
只想看会不会报错,不生成文件:
docx-pipeline convert --config ./project.yaml --dry-run |
常用命令
# 查看配置摘要 |
init 和 convert 是日常使用最多的两个命令。
配置重点
project.yaml 是全部行为的入口。几个常见调整:
改输入输出路径
paths: |
改字体
fonts: |
字体必须在系统里已安装,否则 Word 会回退默认字体。
页面和缩进
page: |
后端开关
pandoc: |
enabled: false 时走 Pure Python,LaTeX 公式由 v1.2.0 新增的 latex2mathml → MathML → OMML 桥转换。enabled: true 时走 Pandoc,公式渲染质量更好,但需要系统里有 pandoc。
后端怎么选
- 不想装 pandoc → Pure Python,一个 Python 环境就够了,公式也能转。
- 要代码语法高亮、复杂表格、章节自动编号 → Pandoc。
- 想精确控制中文字体、缩进、行距 → Pure Python 更直接。
Auto 模式(默认)会先看 pandoc.enabled,再看 pandoc 是否在 PATH 里,能 pandoc 就 pandoc,不能就自动降级到 Pure Python。
Mermaid 图表
report 模板默认开启 Mermaid。需要 Node.js 和 mermaid-cli:
npm install -g @mermaid-js/mermaid-cli |
Markdown 里写:
```mermaid |
转换时会自动渲染成 PNG 嵌入 DOCX。渲染失败的代码块会保留原文并加警告注释。
v1.2.0 公式实现简说
纯 Python 后端新增了一条 LaTeX → Word 原生公式的路径:
- 扫描 Markdown,把
$...$和$$...$$抠出来,替换成占位符。 - 用
latex2mathml把 LaTeX 转成 MathML。 - 用
lxml遍历 MathML 树,生成 Word 的m:oMath/m:oMathPara。 - 行内公式挂到段落里,独立公式包成居中段落。
- 转换失败就回退成原始 LaTeX 文本,不会让整个文档崩掉。
覆盖分数、根号、上下标、极限、n 元运算符、重音、矩阵、括号、围栏等 14 种结构,有 21 个自动化用例校验。
不过说实话,Pure Python 的 OMML 渲染在分式、根号、大型运算符等复杂式子上还是有缺陷;Pandoc 后端十五年打磨的 TeX 引擎更稳。所以能装 pandoc 的话,复杂公式建议优先 Pandoc 后端。
两个容易踩的坑
Windows 乱码
中文输出在 Windows 下可能乱码,加环境变量:
export PYTHONIOENCODING=utf-8 |
PowerShell:
$env:PYTHONIOENCODING = "utf-8" |
目录重复
如果 Markdown 里已经手写了一个”目录”章节,pipeline 又会自动插入 Word 的 TOC 域,结果出现双目录。要么在 Markdown 里删掉手工目录,要么在 project.yaml 里设 styles.toc.enabled: false。
一句话总结
DOCX Pipeline 让 Markdown → Word 这件事可以一条命令跑完;v1.2.0 之后,公式也不需要 Pandoc 了。写报告、论文、技术文档时,它能省下大量调格式的时间。
