网络教学环境下数学公式处理的解决方案
出版物刊名:中国教育信息化 高教职教 2007
【摘要】目前,网络教学、在线考试、题库建设以及教学中运用的各种交流形式(论坛、留言板、博客等),具备处理各种文字、图片等多媒体信息的能力,能够基本满足教学需要。但是在理科教学中,需要处理大量的公式,因此在网络环境下,公式的输入、显示、判断、存储等操作就需要特殊手段。本文准备将目前可行的几种方案进行对比,使我们可以根据实际情况选择实施。
【关键词】公式在线处理 TeX/LaTeX 科技文档 MathML WebEQ
一、引言
公式的处理一直比较困难,因为公式使用大量特殊符号组成,在书写排版时还需要随时调整大小、位置、对齐等属性,因此常规办法无法进行处理。随着计算机技术的提高,目前我们已经可以使用诸如Word中的公式编辑器等软件,可以实现公式的排版印刷,但是要在网页上实现交互就不成了。
通常我们的做法是,使用公式编辑器做好公式,使用抓图的办法保存成图像文件(GIF、JPG等),使用上传的办法进行,虽然制作网页时可以使用Namo WebEditor,但该软件也只是通过转换成图片的方法,单纯解决显示问题。除了操作繁琐外,我们还需要对公式能够实现在线编辑、判断、绘制函数图像及存储等操作,因此这种方法无法满足理科教学的需要。

以往这种需求只在高学中出现,但随着教育信息化建设的推进,许多中学开展了网络授课、在线考试、问题讨论等形式的教学。因此对在线公式的处理也提出了更高的要求。笔者工作的学校多年来开展信息技术试验班工作,因此对这个问题的解决,进行了长时间的探索,归纳出几套解决方案,可供大家联系实际,选择实施。
二、解决方案的核心技术
目前,表述公式最好的办法是使用TeX/LaTeX格式。
TeX技术源于Stanford大学Donald E.Knuth在1977年5月开始设计的TeX程序,该程序可以完成简单的排版操作和程序设计功能,基于此项技术,美国计算机学家Leslie Lamport在二十世纪八十年代初期开发了LaTeX格式。利用这种格式,对于描述复杂表格和数学公式非常简单。TeX 提供了一套功能强大并且十分灵活的排版语言,它多达900多条指令,并且 TeX 有宏功能,用户可以不断地定义自己适用的新命令来扩展TeX系统的功能。
TeX读作tech[tek],LaTeX读作lei tech,可以进行复杂公式的排版,比如:
这个公式我们可以用LaTeX格式描述为:\frac{-b\pm\sqrt{b^2-4ac}}{2a}。目前这种格式已经成为国际标准,得到了广泛支持(前面提到的Namo WebEditor也是使用LaTeX描述公式),许多大学理科专业也开设了这门课程,因此应用面非常宽广。
另外一种是使用MathML(MathML By Example)。
MathML使用XML来描述数学表达式的结构和内容,是由W3C于1997年首先提出,到了2001年2月给出了2.0正式版,也是目前最为成熟的版本。由于MathML使用XML来表述公式,与HTML处理文字非常相像,因此比较适合网页显示,如上面的公式使用MathML描述为:
<math display='block' xmlns='http://www.w3.org/1998/Math/MathML'> <semantics> <mrow> <mfrac> <mrow> <mo>−</mo><mi>b</mi><mo>±</mo><msqrt> <mrow> <msup> <mi>b</mi> <mn>2</mn> </msup> <mo>−</mo><mn>4</mn><mi>a</mi><mi>c</mi> </mrow> </msqrt> </mrow> <mrow> <mn>2</mn><mi>a</mi> </mrow> </mfrac> </mrow> </semantics> </math>
MathML语言一经提出就受到各方面的高度重视,目前许多浏览器都直接支持,如:Netscape、Amaya、Gozilla等(IE需要安装插件进行支持),使用脚本语言可以与LaTeX格式之间的转换。虽然目前MathML还没有被大家所熟知,但作为 “未来的数学网络标准语言”,它一定能被广泛的应用。
三、解决方案
1、使用TeX/LaTeX标准
我们可以免费下载使用《NicTeX 网络公式编辑器》,这是一个基于TeX/LaTeX标准的CGI应用程序,我们可以使用标准的TeX/LaTeX语言表述公式,具体做法如下:
(1)搭建CGI环境,可以使用IIS、Apache、Tomcat等Web服务器(包括Linux和FreeBSD等操作系统)
(2)建立cgi-bin目录,将文件nictex.exe复制到其中并打开此目录的执行权限

(3)使用浏览器测试,如:
http://127.0.0.1:8080/nictex/cgi-bin/nictex.exe?\blue\LARGE x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}

我们可以看出,在nictex.exe后给出了参数,其中“\blue”表示使用蓝颜色、“\LARGE”表示使用大字体,后面的“x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}”就是描述表述的TeX/LaTeX标准格式。
以下为在线输入TeX/LaTeX脚本编辑公式的示例:
<html> <head> <title> TeX/LaTeX脚本 </title> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312"> <script type="text/javascript"> function cleartext() { document.expression.formdata.value = ""; document.expression.formdata.focus(); } --> </script> </head> <body> <center> <table border="2" cellpadding="5" cellspacing="0"> <tr align="center"><td> <form name="expression" action="cgi-bin/nictex.exe" method="get" target="inlineframe"> <table border="0" cellpadding="0" cellspacing="1"> <tr align="left"> <td align="center"> <b>请按照 LaTeX </b><strong>格式,输入公式,并且提交</strong><br> <textarea name="formdata" rows="5" cols="72" >\Large f(x)=\int_{-\infty}^x e^{-t^2}dt</textarea> <br> </td></tr> <tr align="center"><td> <font size="-1"> <input type="button" onClick="cleartext()" value="清除公式"> <input type="submit" value="提交公式"> </font> </td></tr> </table> </form> </td></tr> <tr align="left"> <td align="center"> <b>公式实际效果如下</b> <br> <iframe name="inlineframe" align="middle" width="85%" height="110"> <p>iframe's not supported if you see this.</p> </iframe> </td></tr> </table> </center> <p> </p> </body> </html>
实际效果:

有了《NicTeX 网络公式编辑器》我们就可以在页面中处理公式了:
A.输入:使用表单的文本框进行TeX/LaTeX脚本输入
B.输出:使用<img src=”http://127.0.0.1:8080/nictex/cgi-bin/nictex.exe?公式脚本 “>
C.存储:由于脚本是纯文本方式,因此后台可以使用ASP、PHP、.Net等技术存入数据库,以便以后读取
D.判断:题目中包含的公式以及学生答题输入的公式都已文本方式存在,因此完全可以进行对比判断,从而得出“对/错”判断,这样我们就可以实现“在线考试”、“论坛答疑”等应用。
使用该方案,优点是可以非常简单的处理公式,缺点是:
A. TeX/LaTeX脚本需要学习与记忆,初学者需要一段时间适应
B.不能实现类似“Word公式编辑器”的可视化界面
C.由于使用CGI方式,因此访问量大时会对服务器产生压力
2、使用MathML格式
在IE环境下使用需要安装MathPlayer插件,可以在Design Science主页上下载:http://www.dessci.com/en/products/mathplayer/安装后,我们的IE就可以显示用MathML描述的公式了,具体实现的代码:
<html xmlns:m="http://www.w3.org/1998/Math/MathML"> <head> <object id="mathplayer" classid="clsid:32F66A20-7614-11D4-BD11-00104BD3F987"> </object><?import namespace="m" implementation="#mathplayer"?> </head> <body> <m:math display='block'> <m:mrow> <m:mfrac> <m:mrow> <m:mo>-</m:mo><m:mi>b</m:mi><m:mo>±</m:mo><m:msqrt> <m:mrow> <m:msup> <m:mi>b</m:mi> <m:mn>2</m:mn> </m:msup> <m:mo>-</m:mo><m:mn>4</m:mn><m:mi>a</m:mi><m:mi>c</m:mi> </m:mrow> </m:msqrt> </m:mrow> <m:mrow> <m:mn>2</m:mn><m:mi>a</m:mi> </m:mrow> </m:mfrac> </m:mrow> </m:math> </body> </html>
以上代码保存为HTML文件,在IE浏览器打开后,就可以看到预期的公式:

此时公式支持交互,单击公式后,变化如下:

实现显示的关键:
(1)插入mathplayer对象
<object id=”mathplayer” classid=”clsid:32F66A20-7614-11D4-BD11-00104BD3F987″>
</object><?import namespace=”m” implementation=”#mathplayer”?>
(2)公式脚本重的命名间隔为“m”
我们可以在源码中看到,描述公式的代码十分复杂,掌握起来非常困难。这时,我们可以使用MathType5进行可视化编辑。
MathType5是Word公式编辑器的增强版,可以到Design Science网站下载,国内各大软件下载网站还有汉化版提供。下载安装好MathType5后,Word中的公式编辑器就被替换成MathType5,在Word中调用或直接运行后,我们可以看到如下界面:

具体使用基本上同Word公式编辑器相仿,这里不作介绍,关键说明如何获取MathML代码。
点击Preferences → Translators

按照如下设置:

编辑好公式后,选中所需部分,复制到剪贴板

这时,剪贴板的数据就是以“m”为命名间隔的MathML格式的公式代码,我们把它贴在<body></body>之间就可以在IE中显示:

到这里,我们知道公式如何显示,由于同样为文本格式,那么输入、判断、存储也与上一个方案基本一致。使用此方案,可以不依赖Web服务器,而且调用MathType可以实现可视化编辑,另外通过编程,可以让熟悉TeX/LaTeX脚本的用户直接使用LaTeX语言书写公式(将TeX/LaTeX脚本转变为MathML代码),因此次方案既兼顾了初学者,又满足高级用户的使用。
3、使用WebEQ的Java Applet
WeqEQ与MathPlayer是Design Science旗下的同门师兄,同样采用MathML技术,并利用Java Applet的技术,在浏览器中提供可视化的输入界面。

要使用这个方案,我们需要作如下准备:
A.安装IE的Java支持环境,可以到微软网站下载msjavx86.exe
B.到Design Science网站下载WebEQApplet.rar(Java程序包)并安装
(1)显示公式
建立页面,插入如下代码:
<applet codebase='./' code='webeq3.ViewerControl' WIDTH=320 HEIGHT=100> <PARAM NAME='parser' VALUE='mathml'><param name='color' value='"+b.value+"'> <PARAM NAME='size' VALUE='18'> "<PARAM NAME=eq id=eq VALUE='<math><mrow><mfrac><mrow><mo>-</mo><mi>b</mi> <mo>±</mo><msqrt><mrow><msup><mrow><mi>b</mi></mrow><mrow><mn>2</mn> </mrow></msup><mo>-</mo><mn>4</mn><mi>ac</mi></mrow></msqrt></mrow><mrow><mn>2</mn> <mi>a</mi></mrow></mfrac></mrow></math>'> </applet>
最终效果如下:

(2)编辑公式
<applet codebase="./" code="webeq3.editor.InputControl" WIDTH=820 HEIGHT=200 NAME=eqn1 MAYSCRIPT> <PARAM NAME=eq id=eq VALUE=""> </applet>

var mml = document.eqn1.getMathML(); |
变量mml中就会得到MathML格式的公式,“eqn1”为输入对象的名称,此值可以直接赋给现实公式的对象,如:
document.myEQ.setMathML(mml); document.myEQ.refresh(); |
“myEQ”为现实公式对象的名称。由于得到了MathML公式脚本,因此对于公式的处理问题也就迎刃而解。
虽然在使用WebEQ的方案前,需要安装Java支持环境和Java Applet,但是它可以实现“可视化”输入公式,因此效果非常好,而且还可以绘制函数图像(另文讨论)。因此该方案比较适合中学生使用。
4、ScienceWord
星火燎原软件推出的ScienceWord是一款科技文档排版软件,它内置了大量的科技图符,提供了公式输入、函数绘制等一系列科技排版常用工具,它可以编排、数、理、化等学科的试卷、论文等文章,是目前最理想的科技文章编排工具。

在ScienceWord 系列产品中,有一款网页插件ScienceWord WebEdition,它可以在线实现ScienceWord所有功能,能够帮我们搭建在线题库制作、在线考试、在线讨论等应用平台,因此可以讲是效果最好的方案。ScienceWord的价格不菲,但是提供了详尽的使用说明和开发细节,帮助我们实现各种应用。

四、方案比较

根据以上方案的比较,笔者认为,针对高校学生,可以使用前2个方案,这样从学生掌握、环境搭建、费用支出等几个因素看都是最好的选择。对于中学生还是使用后面的2个方案,如果经费充足,建议使用最后的ScienceWord插件方案。
另外,如果单纯解决输入和显示问题,采用网页中嵌入Word控件也是不错的方案。
五、结束语
网络化教学是今后教育发展的方向,目前看也是非常好的补充手段,因此解决好网络环境下公式的处理是非常重要的。随着技术的进步,我们可以相信还会有更优秀的解决方案出现,为我们的教育信息化铺平道路。
2007年3月23日
参考文献
[1]文合平.数学公式的计算机表达.现代教育技术2003年第2期
[2] 深入讲述 MathML
[3]数学公式编辑器实现技术研究