2003年7月28日星期一

在主页上显示 MathML 数学公式

能够在主页上显示漂亮的数学公式是一个很诱人的想法。MT-plugins.org 上面有一个 itex2MML 的插件,利用 itex2MML 可以把 itex (LaTeX 的一个子集)转换为 MathML。itex2MML 是开发来配合 Mozilla 使用的,而 Mozilla 是目前唯一能够直接解释 MathML 语句的浏览器。而 IE 需要装一个插件 MathPlayer 才能正确解释 MathML 语句。

为了让 itex2MML 生成的 MathML 语句能够在 MathPlayer 下面正常工作,我修改了 itex2MML 的源码。其实就是把 itex2MML 生成的所有标签都改为在一个名字空间里,这样才能让 IE 去启动 MathPlayer。详细的说,就是把 itex2MML 的源码中的 itex2MML.y 文件里的所有 < 都改为 <m: (文件开头的两个 #include 语句中的不能改),把所有的 </ 都改为 </m: 。然后用 make 编译得到 itex2MML 可执行文件,放到 /usr/local/bin 目录下(参考 itex2MML 插件的安装说明)。

最后需要修改 MT 的模版,每个模版需要改两个地方,一个是开头的 <html> 标签里面要加上
xmlns:m="http://www.w3.org/1998/Math/MathML"
其次在 <body> 标签之前加上
<OBJECT ID=MathPlayer CLASSID="clsid:32F66A20-7614-11D4-BD11-00104BD3F987"></OBJECT><?IMPORT NAMESPACE="m" IMPLEMENTATION="#MathPlayer"?>
重新生成 MT 的所有文件就可以了。

测试一下今晚的成果先 :)

后记:因为上面针对 MT 模版的修改会导致产生的文件不符合 XHTML 的校验,所以我去掉了这部分代码。因此现在你无法看到具体的效果,但是你查看网页的源文件仍然可以看到产生的 MathML 代码。

此外,我还找到了另外一种使得现有浏览器支持 MathML 的方法,就是在网页的头部加上 XSL (XML Stylesheet Language)的信息:

同时把网页保存为 .xml 文件。由于 IE 会因安全问题而拒绝使用远程的 XSL,你需要把 mathml.xslpmathml.xslctop.xslpmathmlcss.xsl 文件下载下来,保存到你的服务器上面,然后把上面语句中的
http://www.w3.org/Math/XSL/
改为你的服务器的相应地址。具体问题可以参考这篇文章

这种方法除了可以用于上面修改过的 itex2MML,也支持使用原来的 itex2MML 产生的页面,也就是不使用名字空间的 MathML 语言标签。