APP下载

可扩展数学公式编辑器的设计与实现*

2016-03-15巫继鹏王樱子吕毅斌蔡光程

计算机与数字工程 2016年2期
关键词:可扩展性数学公式

巫继鹏 王樱子 吕毅斌 蔡光程 吴 强

(1.昆明理工大学理学院 昆明 650500)(2.昆明理工大学计算中心 昆明 650500)



可扩展数学公式编辑器的设计与实现*

巫继鹏1王樱子2吕毅斌1蔡光程1吴强1

(1.昆明理工大学理学院昆明650500)(2.昆明理工大学计算中心昆明650500)

摘要针对当前对数学公式不能有效地保存与重用的现状,提出了一种可扩展的数学公式编辑器的实现方案。它利用数学公式本身结构上多层嵌套的特点,使用链表结构描述数学公式,在Java平台下实现。该编辑器能够在自由编辑的基础上自动化地处理用户输入的数学公式,使得数学公式在界面上显示的同时得以以MathML标记的形式保存下来,从而使用户对输入的数学公式做进一步的计算或传输等再加工成为可能,并且通过Java平台易于对数式对象做进一步的处理和解析。具有很强的灵活性、可扩展性。

关键词数学公式; 公式编辑器; 可扩展性; 链表结构; Java; MathML

Design and Implementation of A Expandable Mathematical Formula Editor

WU Jipeng1WANG Yingzi2LV Yibin1CAI Guangcheng1WU Qiang1

(1. Faculty of Science, Kunming University of Science and Technology, Kunming650500)

(2. Computer Center, Kunming University of Science and Technology, Kunming650500)

AbstractIn this paper, a method of design mathematical formula editor is proposed based on Mathematical Markup Language(MathML) for the current mathematical formula cannot effectively preserve and reuse. In our method, the editor can create a mathematical formula based on Java platform using a linked list structure, and automatically handle mathematical formula which is inputted by the users, and it has very great flexibility and extensibility. Therefore mathematical formula is displayed on the screen and preserved in the form of MathML markup. Finally it is possible to allow users to calculate and transmit the inputted mathematical formulas.

Key Wordsmathematical, formula, formula editor, expandable, linked list structure, Java, MathML

Class NumberTP391

1引言

随着计算机技术的快速发展,越来越多的人通过电脑软件和Web应用来获取和传播知识。如今,我国的高校都已广泛采用多媒体手段辅助教学,各种在线教育平台也正在兴起,便捷的网络为我们带来了更多的学习的机会,但也存在这一些亟待解决的问题。在理工科,尤其是数学、物理等理科领域的教学、学术交流和科学计算中,数学公式和符号的输入、显示和传输以及对数式的进一步处理和解析都是相当复杂的问题[1]。

目前实现数学公式编辑器GUI主要有以下两种方式: 1) 采用JavaScript脚本语言实现,如MathEdit[2]; 2) 采用Java Applet编写,代表的有Design Science的WebEQ[3]。这两种数学公式编辑器可以实现在线编辑,并通过将数式转换为MathML(Mathematical Markup Language)[4]实现数式的保存。但需要网络环境,需要提供网络服务器。前者数式对象在客户端保持,难以直接利用;后者需要安装相应的Java插件,而且公式一旦提交后再修改必须重新输入新的公式,比较繁琐。两种方式实现的数学公式编辑器可扩展性不理想。

本文旨在介绍一种通过Java Swing编写的轻量级的数学公式编辑器(Math Formula Editor),将数学公式作为Java对象保持,并实现数式对象与MathML的相互转换,实现数式的保存。本编辑器运行在客户端,响应速度快,不需要安装,只需点击提供的exe文件即可运行。它的特点是不但保留了传统公式编辑器对公式的可视化输入方法,而且最重要的是数式以Java对象保持,这样既可以在后台将公式本身的数学意义以标记语言MathML的形式保存,又使对数式做进一步的计算和解析成为可能,具有很强的可扩展性。

2常用数学公式信息处理手段

数学公式的信息处理包含两个方面:公式的显示和存储。人们对计算机当中的数学公式的需求已经不仅仅是在屏幕上显示出来或是打印,而是能够自由地修改,保存甚至直接对其进行计算,这就需要对其采用特殊的处理手段。目前,有如下几种对数学公式的处理手段[5]。

2.1数学公式图像化

利用一些开源的数学公式图像化处理软件将公式转化成PNG、JPG等图像文件再将图像嵌入到需要引用的位置,如文档、网页等。这样的处理方式事实上只是解决了公式的显示问题,表示出来的公式只有形而没有义,不能直接对公式进行处理;而且,以图片形式保存的公式比起文本形式所占的系统资源要大得多,不利于传输和保存;此外,过程中还需要其他软件的支持,操作繁琐。

2.2数学语言描述

有很多数学软件有自己的编程体系,如Matlab、Mathematica、Maple,在它们的编程语言中给用户提供了数学公式的表示方法。与第一种方式相反,这种方法只解决了数学公式的处理问题,表示出来的公式只有义而没有形,不能很直观地描述公式。更重要的是,对于数学计算资源跨平台的调用,不同的数学计算软件或者数据库可能有完全不同的语言规范,用户必须用该软件或数据库规定的语言来描述问题,而采用一种软件所规定语言书写的任务程序往往难以被另一种软件理解。

2.3数学标记描述

现在也有一些人为约定的可以用于表示数学公式的语言规范,如LaTex[6]、MathML等为人熟知的语言。与数学编程语言不同的是,无论是排版语言LaTex[7]还是标记语言MathML都不受平台的局限,即这是一种通用的可跨平台的标准化的表示方式。利用这两种语言作为中间数据格式可以实现公式显示和存储之间的自由转换。但尽管LaTex是公认的标准排版格式,其本质与采用图片保存的方式区别不大,数学符号将被当作小图形文件进行拼接,仍然存在不可修改的问题。为了实现方便存储和即时修改,最优的选择就是使用数学标记语言MathML来描述数学公式。

3基于MathML的数学公式的表示方法

MathML是国际互联网标准组织W3C(World Wide Web Consortium)制定的描述数式的语言,是计算机之间交换数学信息的基本标准。它完全采用XML的定义规范,继承了XML的大部分优点,具有强大的数学公式表达能力[8]。在2010年10月发布了最新版MathML 3.0[9]。

MathML提供两种描述数学公式的标记:Presentation标记和Content标记。这两种标记都可以完整地描述任何一个数学公式,但是它们的侧重点不同:前者用来描述数学表达式的二维布局结构,它更注重表达式的显示方式;后者描述用于计算和处理的数学信息,它更关注表达式的内在含义。

MathML使用标记语言文本的形式来描述数学公式[10],很好地解决了过去Web中使用图片表达公式的缺点。它本身所具有的树形结构与递归性使得开发人员在编程时可以方便、快捷的实现。可以说,用MathML表达的数学公式,不仅准确地描述了其数学含义,而且可以自由地在其他的程序中对其进行转换和再利用。

此外、MathML能较好地嵌入到HTML文件中,目前IE浏览器、Firefox等浏览器支持MathML的显示。

4数式编辑器的设计

4.1数学公式的基本结构

数学公式的基本结构指其表现形式。常见的数式类型有上下标、分式、根式、层叠式和矩阵行列式等[11]。这里数学公式的基本结构采用框式构造法(Box-type Structure Grammar,BSG)描述,框式构造简称Box构造。

图1所示为常见的几种数式Box构造例。

图1 数式Box例

分式可以认为是ColumnBox构造,极限、累加和、累乘、积分类型的数式可以看作RowBox和ColumnBox构造的组合,同样矩阵、行列式也可以认为是RowBox和ColumnBox构造的组合。

以上各种数式Box嵌套使用,可以表示复杂的数式。

4.2数学公式的数据结构

4.3数学公式的绘制方法设计

公式的显示主要包括绘制符号和绘制图形两部分。其中符号包括常用的数学符号,而图形则是指如分数线、根号等需要灵活调整且无特定编码的数学符号。

对于不同类型的公式来说,在一些特征上的处理也各有区别。在编写时需要考虑公式的中心位置,对齐位置、长度、高度等等,且必须要考虑它们的实时变化。

4.4公式编辑器的功能设计

为了方便用户的输入,编辑器具备以下几个功能:

1) 光标的自由切换

光标的作用是记录用户当前的输入位置,用户的操作应当在光标处执行,用户通过鼠标的点击和键盘的控制可以改变光标的位置[2]。不同的光标位置对应的占位符情况如图2所示。

图2 当前光标位置及占位符

2) 输入内容的回删

从实际应用的角度看,用户在输入过程中难免出错,应该可以通过按键及鼠标拖选的方式实现对出错部分的删除。

3) 公式的保存

为了方便公式的再利用,提供数式MathML转换器,实现数式与MathML标记代码的转换,并以mml文件的形式保存。

4.5数学公式编辑器的体系结构

数学公式编辑器包括数学公式的编辑和数学公式的保存两大模块,其体系结构如图3所示。

图3 Math Formula Editor体系结构图

5数式编辑器的实现

5.1图形界面的实现

数学公式编辑器(Math Formula Editor)GUI通过Java提供的Swing工具包实现[13]。软件界面分为菜单栏、工具栏、编辑区域三个部分。其中文件菜单提供文件操作,实现数式与MathML的转换并可以将转换的MathML以mml文件的形式保存。工具栏提供常用的数学公式按钮及常用函数、符号按钮。而公式编辑区域则需要在面板的基础上自行编写,在界面初始时为空白区域。编辑区域的输入分为两部分:普通字符的输入和公式的录入。初始状态为普通字符输入状态,各公式按钮为非工作模式,工具栏的“E”按钮为普通字符与公式录入功能的切换键,点击“E”按钮。效果如图4:各公式按钮为工作模式,可以实现任意公式的录入、编辑。

除字符以外所有数式采用Box构造,在编辑区以方框的形式存在,当光标位于数式方框外或另起一行时,默认为字符输入模式,不显示输入数式的方框。如图5所示。

图4 公式编辑器初始界面

图5 字符输入模式窗口

5.2公式绘制的实现

数学公式编辑器(Math Formula Editor)的公式绘制分为两个部分,一是根据用户的输入在编辑区域显示相应的输入结果;二是实时地根据用户新输入的内容调整已显示的公式。其中第二部分是个难点,也是非常重要的一个环节。例如,用户在输入分数的分子或分母时,随其内容的改变,分数线应随之调整,保证公式的美观。

在设计的部分,已经将数式的数据结构抽象为链表,因为往往一个数式存在多层次的嵌套,所以可以采用递归的方式来处理,这在绘制数式时也同样适用。

图6 使用公式编辑器输入

对复合数式的处理仍以求根公式为例。当用户点击分式工具按钮,在当前光标位置处生成分式对象输入框,分式输入框中以分数线为中心轴,上下两个子输入框分别为分子、分母输入框。随着用户的输入,系统实时捕捉分式输入框内容的最大宽度从而动态计算分数线的长度,并调整分式输入框的宽度。当用户点击根式工具按钮时,在光标所在位置生成根式输入方框。在程序内部将根式对象作为分式对象的子对象处理,实现复杂数式对象的保持,从而使复杂数式的编辑成为可能。图6为根式输入效果图。

5.3使用MathML保存数学公式

由于MathML本身的结构与公式生成的结构一致,可直接利用递归生成的方式产生MathML代码,并自动保存在mml文件中[14]。本编辑器生成的MathML基于W3C3.0标准[4]。下列是将分式转化成MathML语言的代码,

public String toMathML() {

StringBuildermathml = new StringBuilder();

mathml.append("〈mfrac〉 ");//分式标记

mathml.append("〈mrow〉 ").append(nume.toMathML()).append("〈/mrow〉 ");//分子

mathml.append("〈mrow〉 ").append(deno.toMathML()).append("〈/mrow〉 ");//分母

mathml.append(" 〈/mfrac〉 ");s

returnmathml.toString();

}

图7 公式以MathML形式保存

6结语

可扩展的数学公式编辑器解决了传统公式编辑器不能有效保存和重用数学公式的缺陷,为后续的对公式的计算与利用做出了铺垫,有很大的实用价值。该编辑器操作简便,功能齐全,且具有一定的可移植性,可以推广到在线平台使用。为获得更好的使用效果,还需增加对更多公式类型的支持,不断完善并推广这项应用。

参 考 文 献

[1] 古乐声,朱家义,王建平.基于MathML的数学公式在线编辑与传输的研究[J].计算机应用与软件,2009,26(8):93-95,132.

GU Yuesheng, ZHU Jiayi, WANG Jianping. On Online Editing and Transmitting Mathematics Formula Based on MathML[J]. Computer Applications and Software,2009,26(8):93-95,132.

[2] 赵燕娟,李廉,苏伟,等.基于MathML的网络数学公式编辑器的实现[J].计算机工程,2008,34(7):76-78.

ZHAO Yanjuan, LI Lian, SU Wei, et al. Implementation of MathML-Based Web Mathematical Expressions Editor[J]. Computer Engineering,2008,34(7):76-78.

[3] 童宁江,古辉.WebEQ插件相关技术综述[J].中国科技信息,2007,19(6):149-150.

TONG Ningjiang, GI Hui. A Technology Overview for WebEQ Plug-In[J]. China Science and Technology Information,2007,19(6):149-150.

[4] W3CMathWorkingGroup. MathML[EB/OL]. (2015-3-13)[2015-3-26]http://www.w3.org/Math/.

[5] 欧阳辰.数学公式与WEB[J].计算机工程与应用,2001,37(17):89-92.

OUYANG Chen. Mathematical formula and Web[J]. Computer Engineering and Applications,2001,37(17):89-92.

[6] LaTexWikipediaLaTex[EB/OL]. (2015-3-25)[2015-3-26]http://en.wikipedia.org/wiki/LaTeX.

[7] 刘海洋.LATEX入门[M].北京:电子工业出版社,2013,6:220-283.

LIU Haiyang. The Art of LATEX[M]. Beijing: Publishing House of Electronics Industry,2013,6:220-283.

[8] 刘峰,袁春风.基于MathML的数学表达式等价性的研究[J].计算机应用研究,2004,21(11):54-56.

LIU Feng, YUAN Chunfeng. Research on the Equipollence of MathML-based Math Expressions[J]. Application Research of Computers,2004,21(11):54-56.

[9] W3C. MathML3.0[EB/OL].(2014-4-10)[2015-3-26]http://www.w3.org/TR/MathML3/.

[10] 刘琼华.采用标记语言构造数学公式编辑器的方法[J].计算机工程,2003,29(18):82-83,121.

LIU Qionghua. Method of Constructing Mathematical Expression Editor by Using Markup Language[J]. Computer Engineering,2003,29(18):82-83,121.

[11] 曾青松.基于MathML的科技文献公式编辑器的设计与实现[D].广州:中山大学,2005:1-59.

ZENG Qingsong. The Design and Implementation of Formula Editor for Scientific Documents Described with MathML[D]. Guangzhou: Sun Yat-sen University,2005:1-59.

[12] Mark Allen Weiss.数据结构与算法分析(C++描述)[M].英文版,第三版.北京:人民邮电出版社,2006:71-77.

Mark Allen Weiss. Data Structures and Algorithm Analysis in C++[M]. Third Edition. Beijing: Posts & Telecom Press,2006:71-77.

[13] 吕校春,李玲莉.基于Swing的JavaGUI组件开发[J].机械工程师,2008,(5):129-131.

LV Xiaochun, LI Lingli. Developing Java GUI Component Based on Swing[J]. Mechanical Engineer,2008,(5):129-131.

[14] 崔梦天,赵海军.基于MathML的在Web上表示和传输数学公式的方法[J].西安邮电学院学报,2006,11(3):67-69.

CUI Mengtian, ZHAO haijun. Methods to resolve mathematical equation for MathML-based Web[J]. Journal of Xi’an Institute of Posts and Telecommunications,2006,11(3):67-69.

中图分类号TP391

DOI:10.3969/j.issn.1672-9722.2016.02.041

作者简介:巫继鹏,男,研究方向:信息与计算科学。王樱子,女,硕士,讲师,研究方向:网络应用系统的构筑、设计及数学应用软件设计。吕毅斌,男,博士,副教授,研究方向:科学计算和图像处理。蔡光程,男,博士,教授,研究方向:数字图像处理中的运动物体跟踪。吴强,男,研究方向:信息与计算科学。

基金项目:国家自然科学基金项目(编号:11461037);国家级大学生创新项目(编号:201310674021)资助。

*收稿日期:2015年8月17日,修回日期:2015年9月27日

猜你喜欢

可扩展性数学公式
形神兼备,聚焦小学数学公式定律教学策略
数学难题解开啦
恩智浦推出全新i.MX 8X 处理器,为工业应用带来更高的安全性、可靠性和可扩展性
基于微软技术的高可扩展性中小企业系统解决方案研究
基于物联网的智能停车场管理系统设计及实现
活用数学公式 优化数学课堂
一种基于MapReduce的频繁项集挖掘算法
巧拼火柴棒