Skip to content

Commit 95a2627

Browse files
committed
clean system
1 parent 49f0bf3 commit 95a2627

File tree

7 files changed

+104
-37
lines changed

7 files changed

+104
-37
lines changed

ConvertEquations/ConvertEquations/ConvertEquations.csproj

Lines changed: 11 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,20 @@
5252
<WarningLevel>4</WarningLevel>
5353
</PropertyGroup>
5454
<ItemGroup>
55+
<Reference Include="Microsoft.Office.Interop.Excel, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
56+
<EmbedInteropTypes>True</EmbedInteropTypes>
57+
</Reference>
58+
<Reference Include="Microsoft.Office.Interop.Word, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
59+
<EmbedInteropTypes>True</EmbedInteropTypes>
60+
</Reference>
5561
<Reference Include="System" />
5662
<Reference Include="System.configuration" />
5763
<Reference Include="System.Data" />
5864
<Reference Include="System.Drawing" />
5965
<Reference Include="System.Windows.Forms" />
6066
<Reference Include="System.Xml" />
67+
<Reference Include="Microsoft.CSharp" />
68+
<Reference Include="System.Core" />
6169
</ItemGroup>
6270
<ItemGroup>
6371
<Compile Include="Common.cs" />
@@ -66,7 +74,9 @@
6674
</Compile>
6775
</ItemGroup>
6876
<ItemGroup>
69-
<None Include="app.config" />
77+
<None Include="app.config">
78+
<SubType>Designer</SubType>
79+
</None>
7080
<None Include="ClassDiagram1.cd">
7181
<SubType>Designer</SubType>
7282
</None>
@@ -98,33 +108,6 @@
98108
</BootstrapperPackage>
99109
</ItemGroup>
100110
<ItemGroup>
101-
<COMReference Include="Microsoft.Office.Core">
102-
<Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid>
103-
<VersionMajor>2</VersionMajor>
104-
<VersionMinor>4</VersionMinor>
105-
<Lcid>0</Lcid>
106-
<WrapperTool>primary</WrapperTool>
107-
<Isolated>False</Isolated>
108-
<EmbedInteropTypes>True</EmbedInteropTypes>
109-
</COMReference>
110-
<COMReference Include="Microsoft.Office.Interop.Excel">
111-
<Guid>{00020813-0000-0000-C000-000000000046}</Guid>
112-
<VersionMajor>1</VersionMajor>
113-
<VersionMinor>6</VersionMinor>
114-
<Lcid>0</Lcid>
115-
<WrapperTool>primary</WrapperTool>
116-
<Isolated>False</Isolated>
117-
<EmbedInteropTypes>False</EmbedInteropTypes>
118-
</COMReference>
119-
<COMReference Include="Microsoft.Office.Interop.Word">
120-
<Guid>{00020905-0000-0000-C000-000000000046}</Guid>
121-
<VersionMajor>8</VersionMajor>
122-
<VersionMinor>4</VersionMinor>
123-
<Lcid>0</Lcid>
124-
<WrapperTool>primary</WrapperTool>
125-
<Isolated>False</Isolated>
126-
<EmbedInteropTypes>True</EmbedInteropTypes>
127-
</COMReference>
128111
<COMReference Include="VBIDE">
129112
<Guid>{0002E157-0000-0000-C000-000000000046}</Guid>
130113
<VersionMajor>5</VersionMajor>

ConvertEquations/ConvertEquations/Program.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,14 @@ class Program
3030
[STAThread]
3131
static void Main(string[] args)
3232
{
33-
Console.WriteLine("请先选择excel文件,是否继续?enter");
33+
Console.Write("请先选择excel文件,是否继续?enter");
3434
int read = Console.Read();
3535
if (read != 0)
3636
{
37-
Console.WriteLine(read);
3837
Program program = new Program();
3938
OpenFileDialog fileDialog = new OpenFileDialog();
4039
fileDialog.Multiselect = true;
41-
fileDialog.Title = "请选择文件";
40+
fileDialog.Title = "请选择需要转换的Excel文件";
4241
fileDialog.Filter = "所有文件(*.xlsx)|*.*";
4342
string file = "";
4443
if (fileDialog.ShowDialog() == DialogResult.OK)
@@ -50,8 +49,7 @@ static void Main(string[] args)
5049
{
5150
string savepath = System.Configuration.ConfigurationManager.AppSettings["savepath"];
5251
Console.WriteLine("正在读取Excel...");
53-
var result = program.MathML2MathTypeWord(program, new ConvertEquation(), savepath, file);
54-
Console.Write(result);
52+
program.MathML2MathTypeWord(program, new ConvertEquation(), savepath, file);
5553
}
5654
else
5755
{
Binary file not shown.
Binary file not shown.

README.md

Lines changed: 90 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,18 @@
1010
* .Net Frameword4.0+
1111
* MathType6.9+[关于MathType6.9破解](http://download.csdn.net/detail/qq_20545159/9921565)
1212

13+
### Operation ###
14+
![](https://github.com/scalad/MathML2MathTypeEquation/blob/master/doc/effect.gif)
15+
1316
### Introduce ###
1417

1518
这篇文章主要介绍怎么使用[MathType](https://www.dessci.com/en/reference/sdk/)[MathML](https://zh.wikipedia.org/wiki/%E6%95%B0%E5%AD%A6%E7%BD%AE%E6%A0%87%E8%AF%AD%E8%A8%80)转换MathType类型的公式对象并嵌入到Word中。
1619

1720
最近,这里有个需求是需要转换一大批的MathML文件到Word文档中,如果使用[Open-XML-SDK](https://github.com/OfficeDev/Open-XML-SDK)是非常容易实现的,你可以参考[https://github.com/scalad/MathML2Word](https://github.com/scalad/MathML2Word),但是,最重要的是这不是想要的结果,因为经过Open-XML-SDK的转换,这个公式的类型变成了[OMML(Office Math Markup Language)](https://en.wikipedia.org/wiki/Mathematical_markup_language)格式的,什么是OMML呢?
1821

19-
我们知道,微软的Word包含了公式编辑器,其实它是一个缩小版本的MathType,这个从上世纪word出现时已经开始了。直到2007年,word才允许使用[图形用户界面](https://en.wikipedia.org/wiki/Graphical_user_interface)输入公式,并且转换为像MATHML格式的标记语言。随着微软发布了[Microsoft Office 2007](https://en.wikipedia.org/wiki/Microsoft_Office_2007)[Office Open XML file formats](https://en.wikipedia.org/wiki/Office_Open_XML_file_formats),微软引进了一个使用新的格式的公式编辑器,即所谓的`Office Math Markup Language(OMML)`,OMML与原来的公式编辑器存在着兼容性问题,因此很多学术官网都拒绝使用Microsoft Office写的文档
22+
我们知道,微软的Word包含了公式编辑器,其实它是一个缩小版本的MathType,这个从上世纪word出现时已经开始了。直到2007年,word才允许使用[图形用户界面](https://en.wikipedia.org/wiki/Graphical_user_interface)输入公式,并且转换为像MATHML格式的标记语言。随着微软发布了[Microsoft Office 2007](https://en.wikipedia.org/wiki/Microsoft_Office_2007)[Office Open XML file formats](https://en.wikipedia.org/wiki/Office_Open_XML_file_formats),微软引进了一个使用新的格式的公式编辑器,即所谓的`Office Math Markup Language(OMML)`,OMML与原来的公式编辑器存在着兼容性问题,因此很多学术官网都拒绝使用Microsoft Office写的文档.
2023

21-
Mathtype公式编辑器是基于宏或是VB编出来的,实际上,在Office2007之前的版本中,微软一直使用的是MathType提供的缩小版本的MathType公式编辑器,想要使用完整公式编辑器的还需要用户到MathType去买(没错,在长达15年的时间里,所有Office都自带MathType的缩小版),直到2007之后,微软才开发出属于自己的一套公式编辑器,它的公式类型是OMML(Office Math Markup Language),并且和原有的MathType公式类型不兼容,因此,有许多学术网站都明确提出了不使用Office2007以及后面的版本。
24+
Mathtype公式编辑器是基于宏或是VB编出来的,实际上,在Office2007之前的版本中,微软一直使用的是MathType提供的缩小版本的MathType公式编辑器,想要使用完整公式编辑器的还需要用户到MathType去买(没错,在长达15年的时间里,所有Office都自带MathType的缩小版),直到2007之后,微软才开发出属于自己的一套公式编辑器,它的公式类型是OMML(Office Math Markup Language).
2225

2326
MathType SDK是针对MathType工具用VB完成的一套开发工具包,它允许开发人员改造、扩展、修改或者创建命令等,并且官方文档中提供了.NET平台上SDK的实现,你可以很方便的使用C#调用它们。如下图是.NET平台上公式支持的输入输出的格式:
2427

@@ -28,6 +31,9 @@ EquationInput(公式输入)、EquationOutput(公式输出)和MTSDK(MathType连
2831

2932
目前采用的方式是使用EquationInputFileText类从磁盘文件中读入MathML数据类型的数据,然后使用EquationOutputClipboardText输出到系统的剪切板中,从剪切板中获取到该公式的对象并写入到Word文档中,当文件读取并转换完成后,生成Wrod文档并保存。
3033

34+
### System Architecture ###
35+
![](https://github.com/scalad/MathML2MathTypeEquation/blob/master/doc/image/mathml转word系统架构.png)
36+
3137
### Question ###
3238
1、特殊公式映射转换
3339

@@ -59,5 +65,85 @@ MathType需要一个新版的MT Extra(TrueType)字体,请重新安装MathT
5965

6066
2,进入MathType安装目录的\Fonts\TrueType\文件夹,将里面的mtextra.ttf字体复制至文件夹X:\Windows\Fonts(粘贴时可能会有安装字体的提示)。
6167

62-
### Operation ###
63-
![](https://github.com/scalad/MathML2MathTypeEquation/blob/master/doc/effect.gif)
68+
### 关于MathML转换 ###
69+
70+
所谓的MaTHML,它也是基于XML的一种可扩展标记语言,如下面一个例子:
71+
72+
```xml
73+
<math>
74+
<semantics>
75+
<mrow>
76+
<mfrac>
77+
<mrow>
78+
<msup>
79+
<mrow>
80+
<mrow><mo>(</mo>
81+
<mrow>
82+
<mtable columnalign='left'>
83+
<mtr columnalign='left'>
84+
<mtd columnalign='left'>
85+
<mrow>
86+
<mn>2</mn><mo>&#x00D7;</mo><mfrac>
87+
<mrow>
88+
<mo>&#x2212;</mo><mn>1</mn><mo>+</mo><msqrt>
89+
<mn>3</mn>
90+
</msqrt>
91+
<mi>i</mi></mrow>
92+
<mn>2</mn>
93+
</mfrac>
94+
</mrow>
95+
</mtd>
96+
</mtr>
97+
</mtable></mrow>
98+
<mo>)</mo></mrow></mrow>
99+
<mn>3</mn>
100+
</msup>
101+
</mrow>
102+
<mrow>
103+
<munder>
104+
<mrow>
105+
<msup>
106+
<mrow>
107+
<mrow><mo>[</mo> <mrow>
108+
<mtable columnalign='left'>
109+
<mtr columnalign='left'>
110+
<mtd columnalign='left'>
111+
<mrow>
112+
<msup>
113+
<mrow>
114+
<mrow><mo>(</mo>
115+
<mrow>
116+
<mtable columnalign='left'>
117+
<mtr columnalign='left'>
118+
<mtd columnalign='left'>
119+
<mrow>
120+
<mn>1</mn><mo>+</mo><mi>i</mi></mrow>
121+
</mtd>
122+
</mtr>
123+
</mtable></mrow>
124+
<mo>)</mo></mrow></mrow>
125+
<mn>2</mn>
126+
</msup>
127+
</mrow>
128+
</mtd>
129+
</mtr>
130+
</mtable></mrow> <mo>]</mo></mrow></mrow>
131+
<mn>3</mn>
132+
</msup>
133+
</mrow>
134+
<mrow>
135+
<msub>
136+
<mrow></mrow>
137+
<mrow></mrow>
138+
</msub>
139+
</mrow>
140+
</munder>
141+
</mrow>
142+
</mfrac>
143+
</mrow>
144+
</semantics>
145+
</math>
146+
```
147+
你可以把这段MathML复制到记事本后再复制出来,然后再粘贴到Word文档中,如果你没有安装MathType工具,并且你Word版本是07或者07以上的版本的话,那么Word会使用一个转换文件——MML2OMML.xsl(这个文件是office自带的,位于目录:%ProgramFiles%\Microsoft Office\Office12\之下),将你的公式转换为OMML格式的公式,而如果你Word安装了MathType插件的话,你再粘贴文本时它会弹出一个选择MathType类型或者OMML类型让你选择:
148+
149+
![](https://github.com/scalad/MathML2MathTypeEquation/blob/master/doc/image/mathtypePast.png)
33.4 KB
Loading

doc/image/mathtypePast.png

15.3 KB
Loading

0 commit comments

Comments
 (0)