Skip to content

使用C#调用MathType将MathML格式的公式转换为MathType类型的公式并写入到Word中)Using MathType to converting MathML to mathtype equation and embedded in microsoft word document. Also, you can convert html into word,including tables、image or rank tag

License

Notifications You must be signed in to change notification settings

scalad/MathML2MathTypeEquation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MathML2MathTypeEquation

Support

  • MathML公式类使用MathType公式进行转换
  • HTML格式导出Word(支持表格、图片、排序标签、转义字符等)

Required

Operation

About MathType SDK

关于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文档并保存.

Introduce

这篇文章主要介绍怎么使用MathTypeMathML转换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 2007Office 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).

System Architecture

Question

1、特殊公式映射转换

static MathML()
{
    equations.Add("", "Δ");
    equations.Add("<mo><</mo>", "<mo>&#x003C;</mo>");
    equations.Add("<mo>></mo>", "<mo>&#x003E;</mo>");
    equations.Add("<mo>⪈</mo>", "<mo>&#x2269;</mo>");
    equations.Add("<mo>⪇</mo>", "<mo>&#x2268;</mo>");
    equations.Add("<mo>≢</mo>", "<mo>&#x2260;</mo>");
    equations.Add("<mo>⊝</mo>", "<mo>&#x2296;</mo>");
    equations.Add("<mo>·</mo>", "<mo>&#x22C5;</mo>");
    equations.Add("<mo>⋅</mo>",  "<mo>&#x22C5;</mo>");
    equations.Add("<mo>&nbsp;</mo>", "");
    equations.Add("<mtext>&#x00A1;&#x00CE;</mtext>", "<mo>&#x2225;</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转换

所谓的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>&#x00D7;</mo><mfrac>
              <mrow>
               <mo>&#x2212;</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类型让你选择:

About

使用C#调用MathType将MathML格式的公式转换为MathType类型的公式并写入到Word中)Using MathType to converting MathML to mathtype equation and embedded in microsoft word document. Also, you can convert html into word,including tables、image or rank tag

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published