拾穗者  
只因在人群中多看了你一眼,从此你的好你的不好都留在了脑海.....

最近在的项目中需要实现一个数学公式编辑器,用于实现用户的公式输入和计算,在查找相关资料后决定采用基于MathMl的方式实现,并在网上找到一些相关的资料,最终将这些资料整合到项目中实现了该功能。
在项目中主要分两个部分:显示和编辑,解析和计算。
在显示和编辑的实现上网上主要有以下几种实现思路:
1.在页面输入TeX/LaTeX指令后传回到服务器,在服务端生成相应的小图片来显示公式。
2.使用flash实现。
3.在页面输入TeX/LaTeX指令通过js解析成mathml在页面显示。
第一种方式在用户编辑时需要与服务端实时交互,不知道效率如何,所以没有采用,但该方式有一个好处就是因为是生成的图片所以在任何浏览器上都可以显示,不需要安装其他的插件。
在项目使用的是第三种方式,实现初期由于IE浏览器不支持mathml直接显示,需要安装了mathplayer,来支持mathml在ie浏览器的显示,考虑到用户可能不愿意安装额外的东西,最后在W3c的网站发现可以用css来显示mathml。就是把mathml直接转换成html了,不过显示效果感觉没mathplayer好。

具体实现过程其实就是把网上搜集来的资料拼凑出来的,
貌似本人比较懒 公式编辑的输入部分就直接采别人的了,其中主要用于了ASCIIMathML.js的开源项目将LaTeX转换成MathMl。
原文地址:http://blog.csdn.net/admans/archive/2009/08/06/4416918.aspx ,有兴趣的朋友可以看一下,原文将编辑器与FCKeditor集成的。
该编辑器在IE浏览器中需要安装mathplayer,才能正确显示MathMl。


编辑器输入解决后就到显示了。其实用mathplayer也是可以的,不过mathplayer在第一次显示的时候会填出一个版本信息框,本人不喜欢,所有窃以为用户也不喜欢,其实主要是怕老大不喜欢, 所以决定将使用css替代mathplayer来显示MathMl,主要思路就是mathml结合样式表文件直接生成一个html文件,

详细信息可参考http://www.w3.org/Math/XSL
从上面可以下载mathml.xsl, pmathml.xsl, ctop.xsl and pmathmlcss.xsl样式表文件,

剩下的事情就是利用这些xsl来动态解析mathml了,至于动态解析xml网上一搜一大把,

主要是使用Msxml2.FreeThreadedDOMDocument 和 Msxml2.XSLTemplate.3.0 两个对象,这里就详细叙述了。

在实际项目中我将公式输入页面改成xml文件格式并引入样式文件pmathmlcss.xsl:
<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="pmathmlcss.xsl"?> //指定样式文件 页面加载会解析出css样

<html xmlns="http://www.w3.org/1999/xhtml">
...页面内容...
</html>
但这样的做法需要其他显示公式的页面改成xml文件(在其它的页面需读取数据库的mathml并显示)。
那如果不想改怎么呢,其实办法很简单就是pmathmlcss.xsl中的css样式复制出来放到单独的css文件中,链接到页面中就可以了。

至于公式的计算部分在网上找个一Converting math equations to C#项目,可以将mathMl转换成C#数学方程表达式(暂这么叫吧),详细地址http://www.codeproject.com/KB/recipes/mmlsharp.aspx
最后将通过动态编译将表达式计算公式的结果,当然在现在项目中只支持简单的一些运算。对于复杂的公式计算还得另外实现。

posted on 2011-06-01 16:03  hcy_2011  阅读(3082)  评论(0)    收藏  举报