MathML 2.0扩展了MathML 1.0的符号和表达式集,改进了与其它一些W3C技术的集成。MathML 2.0支持Tex和MathML的互操作,MathML 2.0还能处理用ISO 12083格式编码的文档。MathML可以用作专用数学方程编辑器,它含有一个特殊数学符号的大字符名称集,而且将支持方程的朗读。数学方程可以用层叠样式表(CSS)来设计,可以通过XLink同任何数学表达式链接,MathML元素可以包含于带命名空间的XHTML文档。MathML 2.0还包含MathML DOM(MathML文档对象模型),可以识别MathML组件并能用任何脚本语言操作它。
目前数学公式在网页上显示的方法主要有三种:图片显示,数学标记语言(MathML),和文档排版系统(LaTeX)。下面就简单介绍一下这几种公式显示方式。
一、图片显示
图片显示分为两种方式:第一种是静态图片显示,这种方式最简单直接,就是用Word等软件的公式编辑器,编辑公式好以后,将软件生成的图片嵌入到网页中,用标签进行显示:
(图一)嵌入静态图片显示公式
这种方法有很多的缺点:
如果网站公式比较多,服务器就需要维护大量公式图片;
图片体积一般都比较大,会影响网页加载效率,占用较多的带宽;
公式不能重用,如果公式发生变化,需要重新编辑图片;
图片放大后会变得比较模糊。
第二种方式就是动态生成图片,首先需要将数学公式转换为表示公式的TeX语言,用程序将TeX语言生成与公式对应的图片,这种方法解决了直接使用静态图片不能重用的问题,但是这种方法比较复杂,需要后台代码来实现,也可以使用网上开放的API,如Google Charts,如果使用SVG格式图片,公式在放大后也不会影响清晰度。
二、数学标记语言(MathML)
MathML(Mathematical Markup Language)是W3C制定的为了使数学公式在网络上、计算机代数等软件、打印排版、语音合成上使用和重用的语言规范。MathML严格遵守XML规范,因此已经运用XML的软件可以轻易地解析MathML,比如,Open Office和Microsoft Office都支持MathML格式的公式解析。MathML也很容易嵌入到HTML文档中,从而在浏览器上显示数学公式,Firefox原生支持MathML;Internet Explorer可通过MathPlayer插件显示MathML文档;Chrome从版本24之后,暂时取消了对MathML文档的支持。Chrome和其它一些不支持MathML的浏览器,仍可以通过适当的HTML+CSS代码将MathML显示出来。下面是二次函数求根公式的MathML代码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE math PUBLIC "-//W3C//DTD MathML 2.0//EN"
"http://www.w3.org/Math/DTD/mathml2/mathml2.dtd">
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mi>x</mi>
<mo>=</mo>
<mfrac>
<mrow>
<mrow>
<mo>-</mo>
<mi>b</mi>
</mrow>
<mo>±</mo>
<msqrt>
<msup>
<mi>b</mi>
<mn>2</mn>
</msup>
<mo>-</mo>
<mrow>
<mn>4</mn>
<mo></mo>
<mi>a</mi>
<mo></mo>
<mi>c</mi>
</mrow>
</msqrt>
</mrow>
<mrow>
<mn>2</mn>
<mo></mo>
<mi>a</mi>
</mrow>
</mfrac>
</math>
(代码一)二次函数求根公式的MathML代码
下图是上述代码在Firefox中呈现的效果:
(图二)MathML在Firefox中显示的效果
MathML的标准过于复杂,虽然用计算机很容易对其进行解析,但是不利于人工编写公式,人工编写MathML公式一般需要借助专用的代码生成工具完成,如Amaya等。
三、文档排版系统(LaTeX)
LaTeX是一个优质的文档排版系统,它被设计用于生成技术性和学术性文档,LaTeX已经成为科技文档在传输和发行中事实上的标准。用LaTeX编辑公式非常容易,即使用户没有排版和程序设计的知识也可以充分发挥由LaTeX所提供的强大功能。例如,二次求根公式用LaTeX语言可以写成:
x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}
(代码二)二次函数求根公式的LaTeX代码
相对于之前的二次函数求根公式的MathML代码(代码一)简短了许多。但是LaTeX代码不能够直接被浏览器所解析,因此,任何浏览器都需要利用插件(如,Mathjax)将LaTeX代码转换为HTML+CSS代码进行显示。
(图三)利用Mathjax插件显示二次函数求根公式
LaTeX还可用于信件、书籍等各种文档的排版,因而具有更好的兼容性。
用LaTeX编辑数学公式比较简单,有很好的重用性,在印刷业中也被广泛使用;其次,各浏览器对MathML标准的支持并不够完善,同样需要通过插件来获得跨浏览器的支持。因此,综合上述各方案的特点,利用插件在网页上显示LaTeX语言公式是目前最适用于Web的数学公式显示方案。
CSS hack 用来让网页兼容各种浏览器(在各种环境下都能“正确的”显示)*+html 与 *html 是IE特有的标签, firefox 暂不支持.而*+html 又为 IE7特有标签.
所以*+html.img_cpzs,.img_cpzs ul{---样式代码---}
只在IE7下面有效