背景

由于之前个人喜欢在Word里做笔记,而有很多笔记里存在着大量的公式。在早期,由于对Word自身的公式的不理解,所以便使用了MathType这个工具来编写公式。但是现在本人已经转战到LatTeX了(现在用LyTeX来做笔记),需要把之前的笔记转到LyTeX(LaTeX)下。

做为了一折腾电脑的人,我当然不可能把之前的内容全部手打一遍,所以结合自己的知识、百度搜索和对LyTeX的调教,发现可以直接由Word转换为LyX(LyTeX的源文件),其内核是使用Pandoc先将Word转为LaTeX的源文件(*.tex),再由LyTeX调用一个Python脚本文件,将tex文件转换为lyx文件。

然后,实际上没有那么简单。因为pandoc不支持OLE版本的公式(即MathType默认的嵌入方式)转换,仅支持Word自带的公式(由Equation Editor 6.0创建的OMML公式)转换,所以需要将MathType转换为OMML公式。那么问题来了,如何办呢?

在百度找到的一个最简单的方法是GrindEQ这个软件来进行转换,但是由于这个是收费软件,小弟我没有钱啊,所以就放弃了。

终于,让我在博客把word中的Mathtype公式转换为OMML公式中找到了一个解决方法。但是由于博客中的内容不完整,所以在折腾好几个小时之后终于成功。(其实第一次看到没有折腾成功,在今天又花了好几个小时来折腾,终于成功了)下面就放出来和大家分享。

实现基础

要求:

  • MathType
  • Word 2013/2016(10应该也可以,没有尝试)

首先,我们将下面一段文字复制到Word里粘贴,〔如果你有安装MathType的话,会提示你粘贴为MathType自带的OLE格式还是Word自身的OMML格式,具体的我记不清楚了,你选择OMML那个再确定就好〕会有神奇的事情发生:

<math xmlns='http://www.w3.org/1998/Math/MathML'> <mrow> <msqrt> <mrow> <msup> <mi>x</mi> <mn>2</mn> </msup> <mo>+</mo><msup> <mi>y</mi> <mn>2</mn> </msup> </mrow> </msqrt> </mrow> </math>

嗯,个人不喜欢配图,所以大家自己上Word吧,「自己动手,丰衣足食」,嘻嘻。

〔在这里,我假设你已经完成了上面的尝试〕

我们可以看到,上面的文件变成了Word自带的OMML公式,这个就是我们需要的内容。那么,上面的内容如何来呢?接着往下看。

根据先验知识(感觉概念论里的这个名称很好用,用没有,反正把锅都扔了,不关我的事儿),MathType里面有一个公式转换【MathType→Format→Convert Equations...】,这个可以把公式转为多种格式,这个就是我们今天需要使用的大杀器。

所以我们打开包含MathType公式(OLE公式)的文档,【MathType→Format→Convert Equations...】,在弹出的对话框里左侧勾选:

  • MathType or Equation Editor equations
  • Microsoft Word EQ fields

右侧选择:【Text using MathType translator:→MathML 2.0 (namespace attr)】「这儿是最主要的」

当然,下面的当前选择还是全文档看你自己的需要喽。

比如:

这个就是转换前后的对比。接下来就是把这个文字转换为OMML公式啦。

VBA编写

有了上面的基础,我们可以把上面的公式【选中→复制→粘贴为纯文本】,全手工操作。但是机智如我,怎么可能用这么笨的办法呢?于是我们的VBA大法来了。参见把word中的Mathtype公式转换为OMML公式

具体的实现就不说了,直接上代码:

Sub PlainMathMLToEquation()
Dim xmlns As String, mathText As String
xmlns = "xmlns=""http://www.w3.org/1998/Math/MathML""" ' set up find parameters
Selection.Find.ClearFormatting
With Selection.Find
.Text = "\<math?*\</math\>"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
Debug.Print "-------------<Start>-------------------"
Selection.SetRange 0, 0
While Selection.Find.Execute()
CopyPlainText
Waiting
Selection.PasteSpecial Link:=False, DataType:=wdPasteText, Placement:=wdInLine, DisplayAsIcon:=False
Wend
Debug.Print "-------------<Finished>-------------------" End Sub
' Waiting for sometime
Sub Waiting()
Dim t As Single
t = Timer
Do
DoEvents
Loop While Timer - t < 0.07 ' enlarger here if error 4605 happens
End Sub
Sub CopyPlainText()
With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
.SetText Selection.Text
.PutInClipboard
End With
End Sub

运行上面的PlainMathMLToEquation()宏,如果提示

运行时错误 '4605':

此方法或属性无效,因为 剪贴板是空的或无效的。

只需要将Waiting()子过程中的数值增大即可。

为了方便大家使用,我另外制作了ConvertEq.docm,大家可以使用这个文档来完成相应的转换。流程如下:

  1. 打开ConvertEq.docm,会在顶部提示宏安全,启用即可,你可以自己打开宏来看看代码;

  2. 将需要转换的内容复制到这个文档中;

  3. 使用MathType将OLE转换为MathML 2.0 (namespace attr)

  4. 在Word顶端的自定义工具栏中点击下面的按钮即可。

你的顶端工具栏和我的可以不一样,但是你把鼠标放上去,会提示PlainMathMLToEquation这样的字样,那么,就是这个按钮了。

  1. 转换结束后拷贝回原文档即可。

源码及模板在:链接: https://pan.baidu.com/s/1MqhxinKLmWX7dTfaJsm5lA 提取码: 5j5u

MathType转Word公式(OMML)的更多相关文章

  1. 怎么用MathType解决Word公式排版很乱的问题

    现在办公室起草文件,期刊论文投稿.学校试着编辑都要先在Word中编辑好后再打印出来.在Word中编辑这些文本内容时,如果遇到公式就要使用专门的MathType公式编辑器.而有很多人在用MathType ...

  2. word公式大小

    下面给出MathType与Word对应的字体关系,大家可以根据自己的实际需求,调整自己的公式大小.  MathType与Word对应的字体关系示例 以上给大家详细介绍了调整MathType公式字体大小 ...

  3. 详解如何将MathType嵌入word中

    将MathType嵌入word中的过程就是word插入对象的过程,插入对象是word软件中最常见的操作,MathType公式编辑器与所有的Office程序(OLE技术)都有很好的兼容性,本教程将详解如 ...

  4. MathType在手,公式不求人!

    很多论文达人们的论文排版是相当漂亮的,页面也非常整齐美观,即使是理工类的论文,里面有很多的数学符号和公式,排版也是非常整洁,为什么达人们的公式论文能排版的这么完美,而自已却总是不得其门而入,最后只好救 ...

  5. MathType出现乱码公式怎么恢复

    在我们平时使用word上的数学公式编辑器的时候,有时一些公式会出现乱码的问题.这个时候可以改为使用MathType时,那么MathType出现乱码公式怎么恢复呢?如果只是少量公式可以手动重新输入,如果 ...

  6. latex转word公式 java (latextoword,latex_word,latex2word,latex_omml)

    latex_word 主要目的:     给大家分享一个我的原创作品:latex转为word公式(omml)工具 [java] 此工具主要用于将含有latex公式的文本下载成word时,将latex转 ...

  7. 在windows10+word2010中完美使用北大方正word公式输入法总结

    如果在安装输入法时遇到了无法安装的情况,请首先百度下VC运行库安装下(32位64位都安就是),然后安装北大方正word公式输入法,此时不会再提示无法安装,接着(关键)在word应用程序图标右键-> ...

  8. word公式的使用

    插入->公式->插入新公式 优点:可以表示一些特殊符号,而且word公式的字更好看. 方法: 1.Shift+Enter,公式转入下一行 2.选择内嵌或显示 3.选择性粘贴->粘贴成 ...

  9. 图片转换成word 公式

    1 下载安装mathpix, 利用该软件将图片转换成LaTeX公式 2 参考此帖,将LaTeX公式转换成word公式 https://www.douban.com/note/648629593/ ht ...

随机推荐

  1. 实验吧之【简单的登录题(】CBC字节反转攻击)

    开始刷ctf题吧  慢慢来. 实验吧---简单的登录题 题目地址:http://ctf5.shiyanbar.com/web/jiandan/index.php 随便提交一个id,看到后台set了两个 ...

  2. phpstudy后门rce批量利用脚本

    写两个 一个批量检测的  一个交互式shell的 暂时py  图形化的qt写出来..有点问题 后门包 : GET / HTTP/1.1Host: 127.0.0.1User-Agent: Mozill ...

  3. 运用第一性原理探寻AI本质

    摘要:使用第一性原理探讨理解AI本质. 文章来源:宜信技术学院|宜信支付结算团队技术分享第二期-支付结算机器学习技术团队负责人 刘创 分享<AI与第一性原理> 分享者:宜信支付结算机器学习 ...

  4. 约瑟夫环问题详解(java版)

    1 什么是约瑟夫环问题? 约瑟夫,是一个古犹太人,曾经在一次罗马叛乱中担任将军,后来战败,他和朋友及另外39个人躲在一口井里,但还是被发现了.罗马人表示只要投降就不死,约瑟夫想投降,可是其他人坚决不同 ...

  5. TCP Traffic Analyzer

    TCP Traffic Analyzer 工具yahoo 发布的一款开源网络分析工具,可以分析网络应用在服务器端与客户端之间的运行状态Yconalyzer保持与tcpdump兼容,两者生成的抓取文件能 ...

  6. Halcon一日一练:图像设备介绍

    Halcon在设计之初就提供了完整的图像采集方案,适应了多种图像设备采集图像,以及各种不同环境的采集方案. 通常情况下,图像的采集应该是所有机器视觉项目首要解决的任务,不幸的是,需要解决图像采集的问题 ...

  7. 基于SignalR的服务端和客户端通讯处理

    SignalR是一个.NET Core/.NET Framework的实时通讯的框架,一般应用在ASP.NET上,当然也可以应用在Winform上实现服务端和客户端的消息通讯,本篇随笔主要基于Sign ...

  8. Intellij idea 自动生成serialVersionUID

    1 什么是UID 网络间的数据传输最终都是要转化为二进制流的方式进行传输,为了方便转换以及进行验证,我们应该把对角序列化,当实现Seriabizable接口时,UID就是一个必须的属性,可以方便进行版 ...

  9. Java基础(十一)回调(callback)与对象克隆(Cloneable)

    一.回调 1.回调是一种常见的程序设计模式,可以指出某个特定时间发生时应该采取的动作. 在java.swing包中有一个类Timer类,可以使用它在到达指定的时间间隔作出什么动作.那么就有两个问题,即 ...

  10. index.html

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...