dsh-docx2md:把含公式的 Word 转成带 LaTeX 的 Markdown

前言

在 DeepSeek Harness(DSH)里处理技术文档时,常见路径是让用户上传 .docx,再由 Agent 转成 Markdown 入库或续写。直接用 Pandoc 往往卡在 Word 里的公式:OLE(Equation Editor / MathType)、Word 原生 OMML,以及截图式图片公式,载体不同,误差形态也不同。OLE 若只做二进制解码,常常不报错却给出残缺字符,比 outright 失败更难排查。

下面介绍社区插件 dsh-docx2md(维护者 stallenlu),分类为工作流。它把上述三类公式分别走确定性与读图两条路,尽量保留公式编号与文档结构,并在 DSH 中提供 inspect → extract → build 工具链,供 Agent 按步骤调用。

这是什么

dsh-docx2md 是发布在 npm 上的 DSH 插件(当前文档中的示例版本为 0.6.5),许可证为 MIT。一句话定位:把含公式的 Word 文档转成带 LaTeX 的 Markdown,跨平台运行;OLE、Word 原生 OMML、图片公式三种载体都会处理。

DSH 生态主张「一切皆插件」;SkillHub 等为社区目录站点,与 DeepSeek / 幻方无官方从属关系。插件在当前 DSH 进程的权限下运行,安装前应自行查看源码与许可证。

三种公式,三条处理路径

Word 里公式的存储方式决定了插件能否「确定性」转出 LaTeX,还是必须借助渲染后的位图。

OLE 公式 OMML(Word 原生) 图片公式
典型来源 Equation Editor / MathType;WPS 公式默认载体 Word 2007+ 插入公式默认格式 截图粘贴、扫描页、从 PDF 拷贝
插件策略 渲染 PNG → 视觉模型逐张转写 extract 阶段从 XML 确定性转 LaTeX 无法自动结构化;占位符 + media/ 原件供转写
纯 OMML 文档 混排时才需读图部分 全程可不读图 需人工参与

对 OLE,插件原则是:以渲染位图为准,不以 MTEF 解析字符为准。README 中举例:同一份多公式文档,直接解 MTEF 可能只得到两三个字符,却不报错。渲染失败会明确标记,不静默降级到错误解码。

纯 OMML 文档可用空的 LaTeX 表配合 docx2md_build 产出完整 Markdown(OMML 会预填);混排文档里 OLE 与图片公式部分才需要读图步骤。

核心能力(与 README 一致)

除正文与公式外,插件还处理文档中的复杂图形场景(细节以仓库 README 为准):

  1. 扫描与统计:docx2md_inspect 只输出事实(段落数、OLE / OMML / 图片公式候选数量、本机渲染引擎等),不下结论。
  2. 抽取中间物:docx2md_extract 写出 paras.json、eq_index.json(OMML 条目可带 latex 字段)、media/、png/、image_inventory.json 等;流程图画布可整块渲染为 media/canvasN.png,画布内公式在索引中标记 in_canvas,避免重复占位。
  3. 组装 Markdown:docx2md_build 根据工作目录与 LaTeX 映射生成最终 .md,并支持标题建议等可选参数(完整参数见 README)。

在 Agent 里可直接说明需求,例如:「把 论文.docx 转成 Markdown,公式要保留。」Agent 会加载 docx2md 技能并按 inspect → extract → 读图 → build 顺序执行。

运行环境

依赖 用途 必需
Python 3.9+ 运行 py/ 下脚本 是
olefile 解 OLE、读取 Equation Native 经 uvx 自动安装
uv(可选) 管理 Python 依赖 推荐

公式图渲染会按平台探测:Windows 桌面可用 GDI+;Linux / macOS 常用 LibreOffice(soffice),需自行安装;画布类 v:group / DrawingML 图版需无头浏览器(Edge / Chrome)。缺引擎时 docx2md_inspect 会说明,docx2md_extract 会把 render.ok 置为 false,不假装成功。

package.json 要求 Node ^22.19.0 || >=24.0.0,peer 依赖 @deepseek-ai/cordis ^4.0.2。

安装与启用

DSH 的 profile 用 pnpm 管理依赖(nodeLinker: hoisted)。日常使用建议装 npm 正式包,不要手工往 node_modules 拷贝目录。

在 desktop profile 下执行(版本号可按需替换):

cd ~/.dsh/profiles/desktop
pnpm add dsh-docx2md@0.6.5

或使用 DSH 安装器等价命令:

dsh plugin --profile desktop add dsh-docx2md@0.6.5

也可安装与 npm 包字节一致的 GitHub Release tarball:

dsh plugin --profile desktop add https://github.com/stallenlu/dsh-docx2md/releases/download/v0.6.5/dsh-docx2md-0.6.5.tgz

package.json 需同时满足两点:dependencies 里为 npm 版本号(pnpm add 会写入 lockfile);在 dsh.profile.bundles 中加入 "dsh-docx2md"。包内已声明 dsh.bundle.patch,不要再往 profile 的 cordis.patch.yml 手写 insert,否则会重复注册。

若希望改 bundles 后立即生效,可在 profile 的 package.json 配置:

"dsh": { "profile": { "patchReload": "live" } }

无此项时需重启 DSH 进程后工具才可用。仅开发插件源码时才考虑 file: 或 github: 依赖,正式环境请继续用 dsh-docx2md@0.6.5。

卸载时:

cd ~/.dsh/profiles/desktop
pnpm remove dsh-docx2md

并从 bundles 删除对应条目后重启 DSH。

典型用法

在 Agent 中

用自然语言交代路径与要求即可,由技能驱动工具链。

三个工具(摘要)

只读扫描:

docx2md_inspect(path)

抽取到目录(可选 outDir、render):

docx2md_extract(path, outDir?, render?)

生成 Markdown:

docx2md_build(workDir, latex, out, ...)

人工或模型需要为 OLE、图片公式填写/校对 LaTeX 时,读 png/ 与 eq_index.json;OMML 已在 extract 阶段写入 latex 字段。升级插件后,README 建议重启 DSH 并跑一次 docx2md_inspect 核对行为。

适用场景与注意

适合:

  • 论文、教材、技术规范等 Word 稿转 Markdown,且公式不能丢编号与结构;
  • 以 OMML 为主、少量 OLE 或图片公式的混排文档(OMML 部分可自动化);
  • 需要在 DSH 工作流里把「转档」拆成可检查的中间步骤(inspect / extract 便于排错)。

注意:

  • 图片公式与部分 OLE 依赖读图质量与人工校对,不能期望全自动零差错;
  • Linux / macOS 需自备 LibreOffice 等渲染能力;无头浏览器缺失时画布可能无法完整渲染,但会在 summary.json 等处给出警告而非静默丢图;
  • 插件不替代你对文档版权与敏感内容的审查;转换在本地 profile 环境中执行,权限与 DSH 进程一致。

结尾

dsh-docx2md 把「含公式 Word → LaTeX Markdown」拆成可观测的步骤:先分清 OLE、OMML、图片三种载体,再按路径转换或读图,避免 Pandoc 式静默残缺。若你在 DSH 里维护文档工作流,可从 npm 0.6.5 装入 profile,用 bundles 启用后交给 Agent 调用。

羽毛球分组比赛记分
小程序二维码

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

Xiaoye