dsh-formula-docx:把 Markdown 转成含 Word 原生公式(OMML)的 docx

前言

在 DSH 工作流里把技术文档从 Markdown 落到 Word,公式往往是最易出错的一环:常见管线会把公式变成图片、用上标字符拼成「伪公式」,或留下一段 LaTeX 源码,后续在 Word 里难以双击编辑,导出 PDF 也容易发糊。若文档里公式多、还要在 Word / WPS 里继续改稿,就需要一条能把 LaTeX 写成 Word 原生公式对象(OMML) 的路径,并在生成后做数量与版式校验,而不是只写完 docx 就结束。

下面介绍社区插件 dsh-formula-docx(维护者 Red-Rayux,分类:工作流)。它在 DeepSeek Harness 生态里以插件形式接入,核心是把 Markdown 经 LaTeX → MathML → OMML 写入 .docx,并可通过导出 PDF、逐页看图的方式核对公式是否都正确渲染。

这是什么

dsh-formula-docx 的职责可以概括为:把 Markdown 变成公式为 Word 原生公式对象(OMML)的 .docx——在 Word 里可双击编辑,WPS 可正常打开,导出 PDF 时不依赖公式截图。它与「公式图片」或「上标下标字符拼贴」不是同一类方案。

  • 插件名称(npm / 包名):dsh-formula-docx
  • 维护者:Red-Rayux
  • 当前包版本(package.json):0.1.0
  • 许可证:MIT
  • 社区目录页:https://www.skillhub.cn/plugins/Red-Rayux/dsh-formula-docx
  • 源码与说明:https://github.com/Red-Rayux/dsh-formula-docx

DSH 的理念是「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。安装插件前,建议自行阅读仓库源码与许可证;插件在 当前 dsh 进程权限 下运行,应与对待任意第三方依赖一样谨慎。

核心功能

根据仓库 README 与包描述,已核实的能力包括:

  1. 公式转换链路:每个公式走 LaTeX → MathML → OMML,以原生方程对象写入文档,而非图片或字符 hack。
  2. 多文件合并构建:build.py 可接收一个或多个 Markdown 文件(或 glob),按顺序拼接,可选封面(cover.json)与页码。
  3. Markdown 扩展语法:标题(h1 自动分页)、行内与块级公式、表格(含列宽如 [w:20,30,50])、::: core 等 callout 块等;完整说明见仓库 references/syntax.md。
  4. 校验流程:
    - check_docx.py:对比 docx 中方程数量与 Markdown 源里的 LaTeX 数量,发现遗漏或重复渲染(静默失败常表现为空框或重复公式)。
    - preview.py:经 Word 导出 PDF(LibreOffice 可作后备),将每页渲染为 PNG,用于发现 XML 里看不出的版式问题(表格挤压、标题孤行、callout 跨页等)。
  5. 生产踩坑文档:仓库 references/pitfalls.md 记录了六类常见问题及修复思路(重复公式空框、WPS 与 ns0: 命名空间、\text{} 内中文、编号列表被公式打断、粗体内含行内公式、\xrightarrow 与 OMML 映射等)。

没有安装 Microsoft Office 时仍可生成 docx,但会失去基于 Word 的 PDF 预览校验能力。

依赖与环境

需求 用途
Python 3.9+ 运行转换脚本
pip install lxml latex2mathml python-docx 转换与写 docx
MML2OMML.XSL 随 Microsoft Office 提供;可自动检测,或通过环境变量 MML2OMML_XSL 指定
Microsoft Word PDF 预览校验(LibreOffice 可作后备)
pip install pymupdf 预览校验阶段渲染 PDF 页面

DSH 插件侧声明的对等依赖:@deepseek-ai/dsh-tools(>=0.1.0-rc.1 <0.2.0-0)。

安装与启用

在已配置 DSH 的环境里,按 README 给出的命令安装插件(勿自行改写 owner/repo 格式):

dsh plugin add Red-Rayux/dsh-formula-docx

本地跑转换脚本前,先装好 Python 依赖:

pip install lxml latex2mathml python-docx pymupdf

典型用法

README 建议 先做冒烟测试,再构建自己的文档。下列命令均来自仓库快速开始说明。

1. 冒烟测试(不要跳过)

python scripts/build.py /tmp/smoke.docx examples/smoke.md
python scripts/check_docx.py /tmp/smoke.docx --md examples/smoke.md
python scripts/preview.py /tmp/smoke.docx

2. 合并多章 Markdown 并加封面

python scripts/build.py out.docx ch01.md ch02.md ch03.md --cover cover.json

3. 校验与预览

python scripts/check_docx.py out.docx --md ch0*.md --pdf out.pdf
python scripts/preview.py out.docx --dpi 120

语法示例(节选,与 README 一致):

# Headings (h1 auto page-breaks)

**Bold with an inline formula $E=\pi L$ inside.**

$$R=\frac{\pi\left(L-L_P\right)}{T_\phi\left(T_\theta E_0\cos\theta+E_D\right)}$$

[w:20,30,50]
| Quantity | Definition | Unit |
|---|---|---|
| Radiance | flux per projected area per solid angle | $\mathrm{W\cdot m^{-2}\cdot sr^{-1}}$ |

::: core
**Callout block** — holds paragraphs, lists, and display formulas.
:::

经过上面的步骤,你得到的是可编辑 OMML 公式的 docx,并用数量对比与 PDF 逐页图把「公式丢了」和「版式坏了」两类问题尽量拦在发布前。

适用场景与注意

更适合:

  • 公式密集的说明书、讲义、技术章节,需要在 Word / WPS 中继续改公式、再导出 PDF。
  • 希望把工作流里的 Markdown 源与 Word 交付物绑定,且愿意把 check_docx.py / preview.py 当成发布流水线的一部分。

需要注意:

  • 校验是流程的一部分,而不是可选 ornament;方程计数不一致往往不会在 XML 里 loudly 失败。
  • 中文应尽量放在公式外的正文;\text{} 内中文可能导致转换问题(见 pitfalls 文档)。
  • 插件通过 DSH 加载后,其行为取决于你本机 Python、Office 与脚本调用方式;在无 Word 环境下要接受「无视觉 PDF 校验」的折中。

结尾

dsh-formula-docx 针对的是 Markdown 转 Word 时公式不可编辑、易糊、难验收的痛点:用 OMML 落盘,并用计数校验加 PDF 翻页看图把风险压到可控范围。若你要在 DSH 工作流里接这条链路,可从社区目录与 GitHub 仓库对照安装命令与脚本用法。

  • 目录页:https://www.skillhub.cn/plugins/Red-Rayux/dsh-formula-docx
  • GitHub:https://github.com/Red-Rayux/dsh-formula-docx
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye