最近处理 Word 公式排版时,我一直在用这样一套流程:

1
2
3
4
5
大模型生成公式代码
-> 使用 pasteMD 渲染
-> 粘贴到 docx,生成 Word 原生公式
-> 使用 MathType 批量转换
-> 保存为 doc

这样处理的好处是,保存到旧版 doc 格式后,公式仍然可以编辑,而不是变成一张张图片。之前这套流程一直能用,直到有一次 MathType 突然识别不到文档里的公式。

问题现象

文档里的公式能被 Word 正常显示,也确实是 Word 原生公式。但在 MathType 的“转换公式”功能中执行批量转换时,程序直接提示:

没有公式被发现和/或更新。

MathType 在 Word 中执行批量公式转换

MathType 提示没有发现公式

一开始我把注意力放在文档本身,怀疑是文件损坏、公式格式不对,或者 MathType 出了 Bug。让大模型协助排查时,得到的判断也基本围绕这些方向,但重新建立文档和调整常规设置都没有解决问题。

后来看到有人提到 OMML2MML.XSL,再对照 WIRIS 的官方说明,才找到真正值得检查的地方。

OMML2MML.XSL 是做什么的

Word 2007 之后的原生公式使用 OMML,也就是 Office Math Markup Language。MathType 在转换 Word 原生公式时,需要借助 OMML2MML.XSL 把 OMML 转换为 MathML,再继续完成后面的转换。

因此,即使公式本身没有问题,只要这个 XSL 文件缺失、位置不符合 MathType 的预期,或者文件版本异常,MathType 就可能无法识别文档中的 OMML 公式,最后只给出“没有公式被发现”的提示。

这里需要修正我最初的判断:问题不一定是 XSL 文件损坏。按照 WIRIS 的说明,最直接的触发条件通常是文件不存在,或者文件虽然存在,却不在 MathType 查找的位置。

先确认文件在哪里

先彻底关闭 Word 和 MathType,再根据 Office 版本检查安装目录。WIRIS 给出的常见位置如下:

Word 版本 常见目录
Word 2007 C:\Program Files\Microsoft Office\Office12
Word 2010 C:\Program Files\Microsoft Office\Office14
Word 2013 C:\Program Files\Microsoft Office 15\root\office15
Word 2016 及之后版本 C:\Program Files\Microsoft Office\root\Office16

如果对应目录不存在,还要检查 C:\Program Files (x86) 下的同类路径。Office 和 MathType 的位数不同,也可能让 MathType 去另一个 Program Files 目录寻找文件。

可以在 PowerShell 中分别搜索:

1
2
3
4
5
Get-ChildItem "C:\Program Files\Microsoft Office" `
-Filter OMML2MML.XSL -Recurse -ErrorAction SilentlyContinue

Get-ChildItem "C:\Program Files (x86)\Microsoft Office" `
-Filter OMML2MML.XSL -Recurse -ErrorAction SilentlyContinue

我的修复过程

我这次的问题在替换为官方原版 OMML2MML.XSL 后恢复了。更稳妥的处理顺序是:

  1. 关闭 Word、MathType,以及可能占用 Office 文件的其他程序。
  2. 找到当前 Office 目录里的 OMML2MML.XSL
  3. 不要直接删除旧文件,先把它重命名为 OMML2MML.XSL.bak
  4. WIRIS 官方技术说明 提供的下载入口取得原版文件。
  5. 将新文件放入 MathType 实际查找的 Office 目录。写入 Program Files 通常需要管理员权限。
  6. 重新打开 Word,再执行一次 MathType 的“转换公式”。

如果文件在 C:\Program Files\Microsoft Office\root\Office16 中存在,但 C:\Program Files (x86)\Microsoft Office\root\Office16 中没有,WIRIS 给出的办法是建立后一个目录结构,并把文件复制过去。也就是说,不要一看到文件存在就急着覆盖,先确认是不是单纯放错了位置。

完成这些操作后,MathType 重新识别到了文档中的 Word 原生公式,批量转换也恢复正常。

仍然无效时检查什么

如果替换或补齐文件后还是没有效果,可以继续检查下面几项:

  • Office 的实际版本和安装路径是否与自己判断的一致;
  • Office 位于 Program Files 还是 Program Files (x86)
  • 两个目录中是否存在版本不同的同名 XSL 文件;
  • Word 和 MathType 是否已经彻底退出后重新启动;
  • Office 更新或修复之后,该文件是否又被移走或覆盖;
  • 当前环境是否属于 WIRIS 文档说明的适用范围,即 Windows 上的 MathType 7 和 Word 2007 及之后版本。

排查这类问题时,弹窗里写的是“没有公式”,但真正出错的未必是公式。沿着转换链路继续往下看,检查格式、转换依赖和文件路径,往往比反复重做文档更有效。

参考资料