• Mathtype公式自动转Word自带公式



    前言/word技巧

    • word公式
      • 用ALT+=号可以输入简单latex显示公式;复杂度,需要引入latex包的不行;显示不出来的话按一下enter键就出来了,需要手动删除换行
      • 公式末尾加#(1)会显示编号(1);不会自动更新编号
    • Mathtype公式
      • 选择公式,右键;对象,转化为office math,可以变为word公式
      • 在我的电脑上无效;可能是因为word版本原因(需要2016甚至更新);可能是因为mathtype是破解的
    • AxMath
      • 可以直接转word公式
      • 没有破解版仅仅找到32位的;我的64位不能用
      • 费用36元,不想给
    • GrandEq
      • 可以latex、word、pdf、公式互转
      • 巨贵,买不起
      • 安装了,发现没有10次免费试用了

    探索过程

    • 基于各种原因,转换失败;

    • 参考博客,发现可以:

      • 通过mathtype全文公式转化为arc语句,再手动复制粘贴转为word公式
      • 为了自动化,可以再编写vba命令,自动完成

    参考资料(有效与无效)


    全自动方案/代码/教程

    • 转换公式为attr代码;记得勾选包括译者名字
      在这里插入图片描述

    • 转化结果,非常长; 观察首尾译者名字,每个人的不太一样
      在这里插入图片描述

    • word中编写代码

      • Alt+F11
      • 插入,模块
        在这里插入图片描述
    • 粘贴代码;修改自这里

    Sub MathML2OMML(k As Integer)
    '用k记录总的转换成功数。
    On Error GoTo ErrorHandler   ' 启用错误处理
    Application.ScreenUpdating = False '关闭屏幕刷新
    Dim i, j, m As Integer
    i = 0  '记录转换的公式总数,失败的也会记录在内
    j = 0  '防止死循环用的,记录错误次数
    m = 0  '记录转换失败次数
     
    With Selection.Find   '设置查找表达式,查找转换后的MathML代码
        .ClearFormatting
        .Replacement.ClearFormatting
        .Text = "\<\!-- MathType\@Translator?*End\@5\@5\@ --\>" '通配符选择公式,注意mathtype转换时,最后两个复选框要选中;每个人的开头不同,修改成你自己的;?*是通配符
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindStop
        .Format = False
        .MatchWildcards = True
     
        Selection.SetRange 0, 0 '回到文首
     
        Do While .Execute
            With Selection
                .Copy '复制MathML代码
                .PasteAndFormat (WdRecoveryType.wdFormatPlainText) '无格式粘贴MathML代码
            End With
            i = i + 1 '转换公式数+1
        Loop
    End With
     
    Application.ScreenUpdating = True '开启屏幕刷新
    'MsgBox "新转换成功" & i & "个公式,如数字偏大,建议重复运行"
     
    k = k + i - m
     
    If (m > 10 And i - m > 0) Then
           Call MathML2OMML(k)  '只要失败数超过10,且有新成功的,就重复运行,
     
    Else
        a = MsgBox("最后一次运行转换失败" & m & "个公式,是否重复运行", vbYesNo)
       
        If a = vbYes Then
            Call MathML2OMML(k)  '选择是,则重复运行
        Else
            MsgBox ("共新转换成功" & k & "个公式")
            Exit Sub
        End If
     
    End If
     
    'Exit Sub
     
    ErrorHandler:       ' 错误处理
      j = j + 1       '错误出现次数加一
       If j < 100 Then
        Resume       ' 100次以内直接忽略错误,继续执行
       Else
         j = 0    '防止死循环,跳过一行后,继续执行知道100次错误出现
         'MsgBox "运行出错"
         m = m + 1
         Resume Next
       End If
      
     
    End Sub
     
    Sub 公式转换()
    Call MathML2OMML(0)
    End Sub
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 按F5运行;成功转换98%的公式;剩下的异常的手动调调
    • 注意通配符头尾根据自己的译者名字修改;不然搜索不到MathML代码
      在这里插入图片描述
      在这里插入图片描述
  • 相关阅读:
    Redis Cluster集群方案
    MediaCodec 异步方式完成AAC硬解成PCM
    数据结构--排序(1)
    Conditional DETR浅析
    【golang】深入理解GMP调度模型
    Python数据分析
    需要3D地图做数字孪生?选择这款数字孪生软件,全国各省份多种风格的三维地图任你选用
    【Computer Vision】基于卷积神经网络实现美食分类
    传统分拣弊端明显,AI机器视觉赋能物流行业包裹分类产线数智化升级
    Pycharm/Dataspell中使用jupyter导入ros humble包
  • 原文地址:https://blog.csdn.net/zhuazengbian9095/article/details/134357179