关于Latex 转成MS Word 2007的探讨

我们时不时的会收到编辑要求转换我们自以为很漂亮的Latex文档为Word文档. 关于这一要求的提出, 我不想多说, 只是还是忍不住发句牢骚: 妈的, 你就不能把打麻将, 聊qq 或者玩农场的时间学下TeX排版. 其次, 我想稍微的探讨下已经存在的方法. 我认为比较权威的参考可以见这里(Converters from LaTeX to PC Texprocessors—overview) 这是tug.org上的一篇文章, 我觉得比较中肯. 无论怎样, 我觉得都不是非常的理想, 特别是在现阶段的情形下. 例如, 大多是要付费或者有使用次数的限制. 或许你不认为这是一个问题, 大不了多装几次. 而问题却是, 似乎大多数这类软件不是很好重装. 又, 对中文的支持可谓很糟糕. 本文的目的就是提供一种可行的(现阶段还不太方便, 但是明显可以方便化), 对MS Word 2007支持良好的, 对中文支持良好的, 对参考文献, 引用等支持良好的解决方案.

首先, 几点准备知识.

  1. 不管你信不信, Word 2007已经支持mathml了, 只是似乎微软官方没有给出如何开启这一功能的步骤. 当然, 我会给出详细的步骤.
  2. 如果你还在问什么是mathml, 那我建议到网上搜搜, 简单而言, 就是一种用类似于html标记语言的数学公式标记.
  3. Mathml是什么样的, 有什么效果:

    上面这段代码就是公式 $$a^2+b^2=c^2$$ 的mathm代码.
  4. Latex可以转换为mathml: 这类工具较多, 例如tex4ht 是我比较喜欢的一个. 但是注意, ctex 套装或者Miktex似乎并没有配置好tex4ht. 需要手动修改下
  5. 于是我的思路就是latex->mathml->word 2007

下面来看看具体的过程

Word 2007 中mathml支持的开启

  1. 新建一个word文档, 插入一个数学公式例如就是那个二次多项式的求根公式(插入-> 右上角很大的一个$\pi$)
  2. 点击该公式, 使其处于编辑状态, 这时会出现设计面板, 点击该面板中工具的那个下箭头
  3. 在弹出的对话框中, 选择复制公式时, mathml被复制到剪贴板上是转换为纯文
  4. 这时当你把上面的那个求根公式复制到记事本, 你会发现这时得到的是该公式的mathml 代码
  5. 把mathml代码复制到word, 你神奇的发现竟然又是word中漂亮的数学公式了
  6. 到此, 说明你已经成功启用了word的mathml功能

Latex转换为mathml

  1. 重新安装tex4ht
    1. 下载tex4ht.zip
    2. 解压到c:\tex4ht目录下,即tex4ht目录下就是四个文件夹而非tex4ht文件夹; 注意一定是C 盘, 因为它内部的shell是在这里找批处理文件的.
    3. 如果你默认安装ctex套装到D盘, 那么不需要修改; 否则请修改以t开头的tfm文件夹的路径. 我这里是(d:\CTEX\MiKTeX\fonts\tfm!) 以及修改以i开头的htf字体文件的路径, 我这里是(D:\CTEX\MiKTeX\tex4ht\ht-fonts)
    4. 添加C:\tex4ht\bin\win32到系统path(开始菜单->运行->cmd->path C:\tex4ht\bin\win32;%path%)
    5. 如果你还希望能够转换公式为图片, 则需要安装IM(mathml用不到)
    6. 若还有不懂的地方, 请参考这里的安装步骤.
  2. 来个测试吧
    1. 新建tex文档
    2. 录入如下内容:
    3. 保存为test.tex(例如保存到D:\tex4ht_test\test\test.tex)
    4. 打开命令行, 定位到上述test.tex文件所在目录(cd D:\tex4ht_test\test)
    5. 输入 mzlatex test.tex (等价地, 你可以用命令 htlatex test.tex “xhtml,mozilla” ” -cmozhtf” “-cvalidate” 代替, 不知怎地, 我升级ctex后不能正常运行前面一个命令了.)
    6. 得到test.xml文件
    7. 用FireFox打开, 效果如图所示.注意由于IE不能直接支持mathml, 需要额外安装mathplayer

至此, 我们已经完成了LaTeX->MathML的转换.

好了,现在准备MathML->MS Word 2007

我准备用稍微复杂点的例子来说明

  1. 新建test.tex文档, 录入如下公式:
  2. 同样运行mzlatex test.tex
  3. 得到test.xml文档
  4. 用FireFox打开如图所示
  5. 在公式上右键->查看mathml源码
  6. 复制弹出窗口的代码到WinEdt
  7. 替换第一行的

  8. 在< 与 </后增加mml: 利用(WinEdt正则表达式替换)宏:替换\(\</|\<\)为 \0mml\:
  9. 查找HTML标记字符(&XXXX;): 这里是这些 &alpha;      α &beta;       β &epsilon;    ε &minus;      – &part;       ∂
  10. 更多的HTML字符对应表请参见 这里.
  11. 复制替换好的内容,直接粘贴到Word中,效果见下

总结: 本方法的关键在于mathml->word

有以下几点需要注意:

  1. Word的mathml头文件是不同的, 必须载入officeDocument/2006/math那段
  2. Word的mathml标记也是不同的, 在标签后增加了mml:
  3. Word不能识别HTML字符, 例如&alpha;表示α, 需要手动转换

我想这三点可以编程实现, 这样无疑为latex->word提供了一种途径.

中文的处理

关于中文的处理, 只需要把TeX源代码改为如下格式即可:

后面操作同英文处理. 最后于2012/06/18日修改更新.

3 Comments

  1. 您好,请教一下mathml 到word2007的转换。
    第7步 替换第一行的 为 <math xmlns:mml=”http://www.w3.org/1998/Math/MathML” xmlns:m=”http://schemas.openxmlformats.org/officeDocument/2006/math”>

    可是我生成的mathml代码中没有这一行。只有这一行,而且,也不是出现在第一行。这个怎么办?谢谢先

    • 第七步不必拘泥于一定要在第一行, 只要把相应的地方替换即可, 这主要是各自解释mathml的方式不同, 我们要用word2007的方式:你的例子中, 需要将

      替换为

  2. 你的意思没太明白, 你可以把fixfox的源代码贴出来吗? 放在(<pre lang="mathml"> < /pre >)之间, 会形成这样的格式:

发表评论