摘要:随着基础教育信息化的推进,许多中小学开始利用网络开展教学与交流,但Web数学公式的输入和显示一直是一个难题。本文介绍了几种Web数学公式的显示方法及其原理,给出了普通网页、博客、Moodle系统中输入和显示数学公式的几种实现方法。
关键词:数学公式 TeX MathML ASCIIMathML
一、计算机表现数学公式的几种方法
1、面向桌面的TeX系统
TeX 是Knuth 教授开发的一种优秀的桌面电子排版系统。它提供了一套功能强大并且十分灵活的排版语言,有多达900多条指令,并且具有宏功能,用户可以不断地定义自己适用的新命令来扩展TeX系统的功能。
TeX系统有许多优点,如开源、易移植、排版质量高、输出结果与设备无关等。同时,它也是公认的最好的数学公式排版系统,它在数学和工程领域得到了广泛的使用,相关领域的学术论文基本都由TeX系统或其兼容系统(如LaTeX系统)排版生成。
在TeX系统中,各种数学符号和公式由不同的数学记号来表示,如/sin表示sin、/sqrt表示根号等。数学记号和数字的组合一般放在/[.../]里面,或$...$之间。下表中列出了几个数学公式及其TeX指令:(本文采用$...$标记形式)
数学公式 TeX指令
$/frac{3+x}{5}$
$f(x)=x^2-1$
$/sqrt[3]{x^4-3x+1}$
$/sum/limits_{i= 1}^/infty x_i$
图表1 TeX标记的数学公式
一般来说,TeX指令和它所表示的数学公式本身非常接近,或者是该数学符号的英文缩写。因此TeX指令比较直观、易学,也很方便输入,中小学数学涉及的数学符号更是如此。
2、面向互联网的数学标记语言MathML
TeX系统虽然能完美地显示数学公式,但是无法在互联网上使用。而HTML超文本标记语言由于自身的缺陷,也很难显示数学公式。针对这些问题,国际互联网协会(World Wide Web Consortium,W3C)于1997年成立了W3C数学工作组,制定一种基于XML语言标准的数学标记语言(Mathematical Markup Language,MathML)。该组织于1998年发布了MathML 1.0版本,当前最新版本是2.0SE。
MathML语言主要从表现(Presentation)和内容(Content)两个维度来定义各种数学符号和公式。表现标记是从数学表达式的显示形式来描述数学公式,如<msup>标记表示上标符号,<msub>表示下标符号等;而内容标记是从数学表达式本身的内在含义进行描述数学公式,如<plus/>标记表示相加。二者可以从各自的角度表示同一个数学公式,以公式 为例,表现标记和内容标记分别如下:
表现标记 内容标记
图表2 MathML标记的数学公式
MathML数学标记语言是一个国际标准,Mozilla/Firefox/Netscape(7.1+)浏览器已默认支持MathML语言,但Internet Explorer暂不支持MathML标准,需要安装MathPlayer插件来解析含有MathML标记的网页。
3、ASCIIMathML转换方法
简单地说,TeX指令和MathML标记语言是两种互补性很强的语言。采用TeX指令描述的数学公式简单、直观,但浏览器不能直接识别和显示;MathML数学标记语言虽然是为互联网而设计的,但它的标记语言又相对复杂,不便于输入。因此,有研究者结合两者的优点,开发了TeX指令与MathML自动转换的Java 程序,ASCIIMathML就是其中的佼佼者。
ASCIIMathML转换程序由美国加州查普曼大学Peter Jipsen开发,其设计思想是在网页上插入一段JSP代码,将网页中的TeX指令(TeX/LaTeX-style)自动转换成MathML表现标记语言,再返回给支持MathML标准的网络浏览器识别和显示。
由于微软Internet Explorer浏览器不支持MathML标准,若要正确地显示数学公式,IE客户端还需要安装MathPlayer插件,这增加了用户的不便。因此,皮尔斯学院David Lippman在ASCIIMathML转换方法基础上,开发了ASCIIMath Image Fallback转换程序,该转换程序自动判断客户端浏览器是否支持MathML,若支持,则返回MathML表现标记;若不支持,则返回该公式的GIF图像(远程调用互联网上的cgi程序生成图像)。另外,作者也提供了ASCIIMathTeXImg转换,直接由TeX指令生成GIF图像(方法同上)。
ASCIIMathML和ASCIIMath Image Fallback转换程序的原理如下图所示:
图表3 ASCIIMathML解析数学公式的原理
二、在Web系统中输入和显示数学公式
随着基础教育信息化的推进,越来越多的中小学开始利用网络来开展教学和交流,如校园网站、BBS、博客、Moodle教学平台、学科资源库等。如何在网页上输入和显示数学公式,成了束缚数学学科开展网络教学的一个难题。
下面我们采用ASCIIMathML转换方法,通过修改源代码,使中小学常见的Web系统支持输入和显示数学公式。(考虑到国内IE用户占绝大多数,本文采用ASCIIMath Image Fallback转换程序,IE客户端无需安装MathPlayer插件即可显示数学公式。如果采用其它转换程序,请修改为相应的js程序文件名。)
1、普通网页
对于普通网页,无论是静态的还是动态的,只要在网页<head>和</head>之间增加一句代码,就可以显示数学公式。具体方法是先将ASCIIMathMLwFallback.js复制到网站的根目录下,然后在网页任意位置书写TeX指令描述的数学公式即可,如下:
修改源代码: … <head>… < src="/blog/"/ASCIIMathMLwFallback.js"" type=""text/java""></> </head>… … 在需要显示数学公式的位置放置TeX语言标记的数学公式,如$f(x)=x^2-1$ … |
2、oBlog博客系统
oBlog是一个开源的多用户博客系统,许多中小学利用这个平台开展教学和师生交流。oBlog博客系统本身不支持数学公式的输入和显示,下面我们修改oBlog系统源代码,使它支持数学公式的输入和显示,具体方法如下:(在oBlog 4.0 Access免费版中测试通过)
将ASCIIMathMLwFallback.js文件复制到oBlog网站根目录,修改oBlog文件夹下面的/inc/class_blog.asp程序第1247行:
修改源代码: …"</head>" … 修改为: …"< src="/blog/"/ASCIIMathMLwFallback.js"" type=""text/java""></></head>"… |
修改之后,所有oBlog博客用户都可以在自己的博客中输入和显示TeX指令描述的数学公式,如下图:
图表4 oBlog博客中显示数学公式
3、Moodle教学平台
Moodle课程管理系统(CMS)是一个优秀的开源教学平台,在黎加厚教授、郭绍青教授等研究者的大力推广下,国内已经有不少学校开始采用Moodle平台开展网络教学。让Moodle支持数学公式,有两种方法:
(1) ASCIIMath2TeX过滤器法。具体方法为:下载ASCIIMath2TeX Moodle filter,并上传到Moodle网站filter文件夹;以管理员身份登陆Moodle平台,在管理 ? 设置 ? 过滤器中设置asciimath2tex为活跃的。需要注意的是,采用这种方法时,TeX指令描述的数学公式应该放在##…##之间,而不是前面所述的$…$之间,例如## f(x)=x^2-1 ##。
(2) ASCIIMath Image Fallback转换法。Moodle是一个开源系统,因此我们也可以通过修改源代码,使其支持数学公式的输入和显示。具体方法如下:(在Apache 2.2.0、MySQL 5.0.20、 PHP 5.1.2、Moodle 1.5.4环境下测试通过)
将ASCIIMathMLwFallback.js文件复制到当前主题风格文件夹下(如formal_white),修改该文件夹中的header.html文件,在第9行“</head>”语句之前增加一行PHP代码:
修改源代码: … < type="text/java" src="<?php echo "$CFG->wwwroot/theme/$CFG->theme" ?>/ASCIIMathMLwFallback.js"></> … |