使用C#编写的基于Web具有符号运算功能的数学公式编辑器,我最近在做这个工作,已经取得一些进展,我想大家都希望有这样一个东西,所以贴出来共同探讨.
我将陆续贴出一些文档,这要看大家的关心程度.

解决方案 »

  1.   

    http://search.csdn.net/Expert/topic/44/44060.xml?temp=.2595331这是一个相关的帖子
      

  2.   

    基本思路使用XML描述公式,但是又不想象MathML那样面面具到太大了反而不好用.
    输入命令采用WYSIWYG方式,可以使用鼠标象MathType一样,也可以采用LaTex命令(子集)输入.
    支持Web应用二次开发,能够输入大多数的数学物理公式.
    具有符号运算功能(使用MatLab或者Mathematica作为后台运算服务器,也可以借助Fortran的运算功能.
      

  3.   

    设计基于Web的教学系统时,使用现有的技术对数学符号的输入和符号运算功能的实现都会感到非常的棘手。所以大家都期望有系统能够以可视化方式输入数学公式,并具有一定的符号计算功能。本文描述这样一个系统,这个系统提供可视化的符号输入和复杂数学公式的编辑。完成这些操作用户可以使用鼠标也可以只使用键盘操作,对于熟练的用户可以使用Tex命令输入数学公式,系统自动转化为可视的数学公式显示。系统以通用的XML格式描述和序列化公式,并提供LaTex, MathML, Mathematica,Jpeg,GIF等格式输出。符号计算设计的难点在于公式格式的转化,一旦系统将输入的公式转化为Mathematica公式就可以通过SOAP协议交给远程的符号运算系统进行符号计算,并将计算结果转化为公式描述语言显示结果。
      

  4.   

    2.数学公式编辑器概况
    Web Based Mathematical Formula Editor(WMFE)是一个基于所见即所得(What You See Is What You Get,WYSIWYG)概念的数学公式编辑模块,它可以用于CAI系统,远程教学系统,独立的数学公式编辑器等需要数学公式编辑功能的系统。系统的设计充分考虑到二次开发的需要,采用现在流行的Web开发平台Microsoft DotNet FrameWork平台,使用先进的面向对象的C#语言作为的首选的开发工具,同时系统的设计采用OOA/OOD技术,和容易采用JAVA语言实现,移植到其他的平台。目前WMFE具有基本的输入和输出功能。
    当调用公式输入功能的时候,首先在屏幕上的公式编辑区域显示光标,提示用户可以开始输入公式,用户可以通过键盘输入需要的符号,并且可以立即在屏幕上显示相应的公式,WFME自动转换输入的字符串,并转换为公式表示语法,WMFE能够理解输入的字符串并且显示数学公式,如果需要输入根式、分式等符号可以通过鼠标从下拉菜单中选择相应的结构WFME会自动在光标位置插入所选择的结构并且使用空白符号作为为占位符,并自动将光标移动到输入位置。
    对于高级用户可以选择采用LaTex输入模式,用户通过键盘在命令区域输入LaTex数学表达式,WMFE能够理解LaTex公式命令并翻译成内部的公式语法显示公式。3.公式编辑器背景知识
    从根本上来说,一个文档只是对字符、线、多边形和其它图元的一种安排。然而,一个一个文档作者通常并不将这些元素看作图形项,而是看作文档的物理结构——行、列、图像、表和其他子结构。而这些子结构也有自己的子结构。[5] 
    一个公式编辑器就是一个限制功能的图文编辑器。数学公式通常通常由字符、线、多边形和其他描述公式结构的一些外观符号构成。如 由字母a,b,c,d,+以及一条表示分数线的线段组成,具有一定的几何外观,同时在不同的位置出现的字母有不同的数学意义,如a+b表示分子,c+d表示分母,只要有一点数学背景的人都能够非常直观的判断出来。通常使用飞线性的数据结构来描述一个数学公式,这个数据结构至少包括数学公式的几何外观的描述,符号的意义等。
    分析常用的数学公式,我们这些非线性的结构体分为上下标(OverUnderBox)、分式(DivisionBox)、根式(RootBox)、层叠式、括号(FenceBox)、矩阵行列式(MatrixBox)、方程组和字符(CharBox)等八类。基本上,所有的数学公式都可以通过这些结构组合构成。
    作为一个编辑器,为了让用户能够直接以所见即所得的方式编辑公式。应该让用户能够直接操作公式中的子对象,如 应该当成一个整体来操作,当然也应该支持把a+b当成分子作为一个整体操作,甚至可以直接操作其中的单个的字符。
    递归组合:
    层次结构信息的表述通常时通过一种称为递归组合(Recursive Composition)的技术来实现的。递归组合可以由较简单的元素逐渐建立复杂的元素,是我们通过简单图形元素构造复杂公式的方法之一。
    我们将每一个元素都描述成对象,就可以描述这种结构。它不仅包括字符,多边形,线条等可视元素,也包括不可见的、结构化的元素,如行,列等。
    通过使用对象来表示公式中的每一个字符和图形元素,我们可以提高编辑器的最佳设计的灵活性。我们能够在显示、格式化和互相嵌入等方面一致的对待图形和字文本(一行文本由多个字符对象构成)。我们能够扩展编辑器以支持新的字符集而不会影响原来的设计合功能。
    在这里隐含了两个重要的地方。第一个很明显,对象需要相应的类。第二个就不那么明显了,因为我们要一致的对待这些对象,所以必须要有兼容的接口。从具体的设计角度来说C#,Java这样的语言可以通过继承关系来关联类,使得接口兼容。
      

  5.   

    4.输入操作
    4.1 公式的结构
    4.1.1 使用XML描述数学公式
    WMFE采用国际标准化的信息交换语言 XML来描述数学公式。我们把基于XML描述的标记语言定义为Mathematical Equation Mark Language (MathEqML)。这种语言使用XML标准格式描述数学公式的每一个元素,定义了一套符合XML标准的词汇表,该词汇表包括了对所有数学公式结构的描述,同时对文本增加了字体属性的描述。如采用:
    <char></char>标记表示字符,<root></root>标记表示根式,<division></division>标记表示分式。下面是一个例子:
    <root>
    <n><char>3</char></n>
    <body><char>x</char></body>
    </root>
    图-1  的MathEqML标记语言描述标记 中文名称 含义
    char 文本
    root 根式
    division 分式
    row 行
    sup 上标
    sub 下标
    var 变量
    number 数字



    系统定义的标记
    4.1.2 有向树型数据结构
    为能够快速的编辑和绘制公式,在内存中使用树型数据结构来表示一行公式。公式的每一个元素都是结构化树的节点,字符作为树的叶子节点来描述,由于公式中有许多并列的结构的元素,但是他们的出现有先后顺序,所以采用有向树结构更恰当。采用孩子链表方式来表示节点的孩子元素,为能够快速的访问父节点,每一个孩子都增加一个指向父节点的指针。
      

  6.   

    我正在盛声请开通sf.net的GNU开源项目,倒时把代码公布大家一起完成该项目。