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
羽毛球分组比赛记分
小程序二维码

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

小夜