数学公式:使用xsltml将MathML转LaTex

96
Jarhf
0.1 2018.10.25 08:56* 字数 331

公式技术简介

MathML和LaTex是描述数学公式两种比较常用的格式,这两种格式是可以互相转换的。

MathType是一种常用的公式编辑器,主要嵌入在Word中使用,他本身支持将公式复制为MathML或者Latex等多种格式。
利用MathType的API可以比较完美的解决MathML转LaTex的问题,但是依赖项较多,需要Windows环境,Word和MathType进程,不适合封装为程序包给别人调用。

fmath是一个公式处理工具包,提供Java版和C#版。
经测试C#版的貌似功能较少,没找到MML转LaTex的功能。
Java版的提供了MML,LaTex转换,以及将公式渲染成图片等功能,比较强大。测试发现渲染图片功能比较稳定,效果也好。 但是转LaTex也有非常多的错误,无法用于正式项目,遂放弃。

XSLT

XSLT (Extensible Stylesheet Language Transformations) 是一种将XML文档转换为其他XML文档或其他格式的语言。

从网上找到了MML转换LaTex的xslt文件,下载地址:

https://sourceforge.net/projects/xsltml/

http://xsltml.sourceforge.net/

C#使用XSLT将MML转换为LaTex

System.Xml.Xsl.XslCompiledTransform transform = new XslCompiledTransform();
XsltSettings settings = new XsltSettings(true, false);
XmlUrlResolver resolver = new XmlUrlResolver();
transform.Load(AppDomain.CurrentDomain.BaseDirectory + "\\Resources\\MML2LaTex\\mmltex.xsl", settings, resolver);

StringBuilder sb = new StringBuilder();
using (StringReader sr = new StringReader(mathml))
using (XmlReader reader = XmlReader.Create(sr))
{
       using (StringWriter writer = new StringWriter(sb))
       {
            transform.Transform(reader, null, writer);
      }
}
string latex= sb.ToString();
Programming