- MathML公式类使用MathType公式进行转换
- HTML格式导出Word(支持表格、图片、排序标签、转义字符等)
- Office2003+(Word And Excel) Best of 2007
- .Net Frameword4.0+
- MathType6.9+关于MathType6.9破解
关于MathTypeSDK可以在官网下载,上文中的MTSDKDN就是来自于该SDK在.NET平台上的一套SDK.
MathType SDK是针对MathType工具用VB完成的一套开发工具包,它允许开发人员改造、扩展、修改或者创建命令等,并且官方文档中提供了.NET平台上SDK的实现,你可以很方便的使用C#调用它们。如下图是.NET平台上公式支持的输入输出的格式:
EquationInput(公式输入)、EquationOutput(公式输出)和MTSDK(MathType连接、释放)作为ConverttEquation的成员变量,ConverttEquation初始化时首先完成了MTSDK对象的初始化。MTSDK包含了两个方法,Init()和DeInit(),用来连接MathType服务和释放服务。而后调用ConvertEquation中的Convert方法完成它们两个所支持的文件格式的转换.
目前采用的方式是使用EquationInputFileText类从磁盘文件中读入MathML数据类型的数据,然后使用EquationOutputClipboardText输出到系统的剪切板中,从剪切板中获取到该公式的对象并写入到Word文档中,当文件读取并转换完成后,生成Wrod文档并保存.
这篇文章主要介绍怎么使用MathType把MathML转换MathType类型的公式对象并嵌入到Word中。
最近,这里有个需求是需要转换一大批的MathML文件到Word文档中,如果使用Open-XML-SDK是非常容易实现的,你可以参考https://github.com/scalad/MathML2Word,但是,最重要的是这不是想要的结果,因为经过Open-XML-SDK的转换,这个公式的类型变成了OMML(Office Math Markup Language)格式的,什么是OMML呢?
我们知道,微软的Word包含了公式编辑器,其实它是一个缩小版本的MathType,这个从上世纪word出现时已经开始了。直到2007年,word才允许使用图形用户界面输入公式,并且转换为像MATHML格式的标记语言。随着微软发布了Microsoft Office 2007 和Office Open XML file formats,微软引进了一个使用新的格式的公式编辑器,即所谓的Office Math Markup Language(OMML)
,OMML与原来的公式编辑器存在着兼容性问题,因此很多学术官网都拒绝使用Microsoft Office写的文档.
Mathtype公式编辑器是基于宏或是VB编出来的,实际上,在Office2007之前的版本中,微软一直使用的是MathType提供的缩小版本的MathType公式编辑器,想要使用完整公式编辑器的还需要用户到MathType去买(没错,在长达15年的时间里,所有Office都自带MathType的缩小版),直到2007之后,微软才开发出属于自己的一套公式编辑器,它的公式类型是OMML(Office Math Markup Language).
1、特殊公式映射转换
static MathML()
{
equations.Add("∆", "Δ");
equations.Add("<mo><</mo>", "<mo><</mo>");
equations.Add("<mo>></mo>", "<mo>></mo>");
equations.Add("<mo>⪈</mo>", "<mo>≩</mo>");
equations.Add("<mo>⪇</mo>", "<mo>≨</mo>");
equations.Add("<mo>≢</mo>", "<mo>≠</mo>");
equations.Add("<mo>⊝</mo>", "<mo>⊖</mo>");
equations.Add("<mo>·</mo>", "<mo>⋅</mo>");
equations.Add("<mo>⋅</mo>", "<mo>⋅</mo>");
equations.Add("<mo> </mo>", "");
equations.Add("<mtext>¡Î</mtext>", "<mo>∥</mo>");//||
}
由于原来的数据是经过MathJax转换而来,因此,该平台上有的图标或者是公式在MathType上是无法转换,也就是说MathType无法识别这些图标,所以我们需要把这些不能识别的公式进行映射替换,替换为MathType可以识别的Unicode编码.
2、关于MathType弹出缺少字体的对话框 因为在上面的字符映射上可能使用了不同字体的Unicode编码,很有可能导致这个问题: MathType需要一个新版的MT Extra(TrueType)字体,请重新安装MathType(用CD或下载安装)以便获取正确的字体
这时,一些符号就无法使用。下面介绍解决以上问题的办法。
1,进入文件夹X:\Windows\Fonts(X为系统盘盘符,一般是C),如果有MT Extra(TrueType)字体或者快捷方式,则将其删除。
2,进入MathType安装目录的\Fonts\TrueType\文件夹,将里面的mtextra.ttf字体复制至文件夹X:\Windows\Fonts(粘贴时可能会有安装字体的提示)。
所谓的MaTHML,它也是基于XML的一种可扩展标记语言,如下面一个例子:
<math>
<semantics>
<mrow>
<mfrac>
<mrow>
<msup>
<mrow>
<mrow><mo>(</mo>
<mrow>
<mtable columnalign='left'>
<mtr columnalign='left'>
<mtd columnalign='left'>
<mrow>
<mn>2</mn><mo>×</mo><mfrac>
<mrow>
<mo>−</mo><mn>1</mn><mo>+</mo><msqrt>
<mn>3</mn>
</msqrt>
<mi>i</mi></mrow>
<mn>2</mn>
</mfrac>
</mrow>
</mtd>
</mtr>
</mtable></mrow>
<mo>)</mo></mrow></mrow>
<mn>3</mn>
</msup>
</mrow>
<mrow>
<munder>
<mrow>
<msup>
<mrow>
<mrow><mo>[</mo> <mrow>
<mtable columnalign='left'>
<mtr columnalign='left'>
<mtd columnalign='left'>
<mrow>
<msup>
<mrow>
<mrow><mo>(</mo>
<mrow>
<mtable columnalign='left'>
<mtr columnalign='left'>
<mtd columnalign='left'>
<mrow>
<mn>1</mn><mo>+</mo><mi>i</mi></mrow>
</mtd>
</mtr>
</mtable></mrow>
<mo>)</mo></mrow></mrow>
<mn>2</mn>
</msup>
</mrow>
</mtd>
</mtr>
</mtable></mrow> <mo>]</mo></mrow></mrow>
<mn>3</mn>
</msup>
</mrow>
<mrow>
<msub>
<mrow></mrow>
<mrow></mrow>
</msub>
</mrow>
</munder>
</mrow>
</mfrac>
</mrow>
</semantics>
</math>
你可以把这段MathML复制到记事本后再复制出来,然后再粘贴到Word文档中,如果你没有安装MathType工具,并且你Word版本是07或者07以上的版本的话,那么Word会使用一个转换文件——MML2OMML.xsl(这个文件是office自带的,位于目录:%ProgramFiles%\Microsoft Office\Office12\之下),将你的公式转换为OMML格式的公式,而如果你Word安装了MathType插件的话,你再粘贴文本时它会弹出一个选择MathType类型或者OMML类型让你选择: