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 语言标签。

2003年7月26日星期六

增加 MT 编辑区的按钮

直接输入 HTML 代码总是比较麻烦的事情,MT 的编辑区提供了几个按钮,方便了一些常用的格式输入,但功能还是太少了。在网络上找到了几个解决办法。

htmlArea 是一个所见即所得的解决方案,而且是免费的,安装也很简单。你可以参考这里(英文),如果你不懂英文的话,可以看这里(中文)。花点时间看看 htmlArea 的说明文件和例子,你可以很容易的定制 htmlArea 的工具条。

htmlArea 提供了很不错的功能,我安装试用了一下,很好用。但是又把它卸掉了。也许是用惯了 LaTeX 的原因吧,我对所见即所得的东西都有点抵触,因为你不知道它把你的文字变成了什么样子,而且这种所见即所得和 Word 还有不同,你在浏览器上看到的最后效果很可能和你在 htmlArea 里的不同。此外,我想我的页面会以简洁明了为主,不会用到太多的复杂效果,用 htmlArea 就是大材小用了 :)

最后还是装了QinYu制作的增加文字编辑区的功能按钮。简单够用,和 MT 原来的风格融为一体,很好!

2003年7月25日星期五

终于改完模版了

最初想直接从网络上找一个合适的模版,可是很让我失望。虽然 BlogSkins.com 可以找到很多 MT 的 skin,但是很难找到满意的。于是参考我比较喜欢 billgrady.com 的界面自己修改了一个有自己特色的模版。发现其实修改模版很简单,当然你需要有一点 html 和 css 的知识,而我正好有那么一点点,足够了 :)

我的空中楼阁

花了两天,终于把自己的 blog 建立起来了。虽然很早就见过 blog 这个词,可是一直不知道是什么意思。前天为了给 ctex.org 找一个合适的 cms (content management system) 到了 opensourcecms.com 网站终于知道了 blog 是 weblog 的简写,也是 cms 的一种,多用于个人主页的建设。然后到 google.com 搜了一下,才知道这东西竟然在今年成为网络的一大热门!还有个中文名字叫“博客”,呵呵,有趣。但是我不喜欢这个名字。

我发现很多东西到了中国人手上总能来个大变样,blog 也不例外。我觉得 blog 应该是比较个人的东西,这是它和 bbs 以及公共网站的不同之处。blog 可以是个人的流水日记,心情记录或者知识笔记等等,而不应该仅仅为了发表而发表,还要借此来吵做。我最讨厌吵做了。

刚开始在 opensourcecms.com 上没有看到 MT,于是在 b2 和 Nucleus 之间做了一下比较。相对喜欢 b2 简洁的风格和易用的界面,但是它的功能和整体结构都输给了 Nucleus。于是就安装了一个 Nucleus 来试用。安装倒是很简单,可是遇到了一个奇怪的问题,就是无法生成 cookie,每换一个页面都要重新登录。在官方论坛上找了一个晚上尝试了各种方法也没有解决。据说这个问题会莫名其妙的消失,但我不可能慢慢等它哪一天变好,于是决定放弃。又到 google 搜索了一下,发现很多人推崇 MT。于是就有了现在这个 blog。

MT 的安装也不麻烦,但是它需要很多的 Perl 模块。还好我的服务器上就有 CPAN 的镜象,装起来还算快。网络上可以找到中文化的 MT,但是我决定不采用,就用官方的好了,因为汉化主要是管理界面,直接看英文反而更能理解原文的意思。

为了支持中文,要对配置文件做一些修改,主要是设置 mt.cfg 文件的两个地方:

NoHTMLEntities 1
PublishCharset UTF-8

如果你想用其他的编码,例如 GB2312 就把 UTF-8 改为 GB2312。使用 UTF-8 的原因是看到了QinYu朋友的一个建议,我觉得很有道理,Unicode 是未来互联网的趋势,不如趁早做起。

修改了一下界面,不过还是用的官方网站提供的样式 Plain Jane。等有时间了再慢慢修改出自己的特色来吧,还要学 css 先 :)