在Mac上将MathType对象转换为MathML

0 投票
1 回答
2413 浏览
提问于 2025-04-17 12:08

我正在使用来自 MathType SDK 的工具,通过 Python 从 MathType 对象中获取 MathML。在 Windows 系统中,MTXFormEqn() 可以把剪贴板上的 MathType OLE 对象替换成它的转换版本。这似乎是标准的做法。

lib.MTXFormSetTranslator(4, TRANSLATOR_TDL_FILENAME)
lib.MTXFormEqn(mtxfmCLIPBOARD, mtxfmTEXT, None, 0,      # source
               mtxfmCLIPBOARD, mtxfmTEXT, None, 0,      # dest
               '', None)

我正在尝试把这个功能移植到 OSX,但我不知道该传递什么数据给 MTXFormEqn()。调用上面的代码只返回 mtOK,而 MTXFormGetStatus() 报告了一个通用错误。

这个图表建议源数据必须是 'file'。文档中提到 "PICT" 是一个可能的输入格式。MTEquationOnClipboard() 报告剪贴板上的 MathType 对象类型为 WMF (2),但我可以通过 NSPasteboard 获取它的 PICT 等价物。

pb = NSPasteboard.generalPasteboard()
data = pb.dataForType_(NSPICTPboardType)

有没有人成功在 Mac 上使用 MTXFormEqn() 来转换 MathType 对象?我找不到任何例子(在文档或网上)使用除了 Windows 的标准剪贴板到剪贴板的方法。


这里有一个 简化版 的 Windows 工作代码。为了简洁,省略了错误检查和常量定义。

import sys
from ctypes import *

TRANSLATOR_TDL = 'MathML2 (namespace attr).tdl'

def main():
    # On OSX, use the following line instead:
    #    lib = cdll.LoadLibrary('/Library/Frameworks/MT6Lib.framework/MT6Lib')
    lib = windll.LoadLibrary('MT6.dll')
    lib.MTAPIConnect(0, 30)
    lib.MTXFormSetTranslator(4, TRANSLATOR_TDL)

    eq_type = lib.MTEquationOnClipboard()
    if eq_type == 8:            # mtOLE2_EQUATION -- Windows only
        lib.MTXFormEqn(mtxfmCLIPBOARD, mtxfmTEXT, None, 0,      # source
                       mtxfmCLIPBOARD, mtxfmTEXT, None, 0,      # dest
                       '', None)
        #
        # MathML contents now on clipboard as string
        #
    elif eq_type == 2:          # mtWMF_EQUATION -- Mac OSX
        ???
    return 0

if __name__ == "__main__":
    sys.exit(main())

1 个回答

0

如果剪贴板上有MathType的公式数据(不管是什么类型),那么

lib.MTXFormEqn(mtxfmCLIPBOARD, mtxfmTEXT, None, 0,      # source
               mtxfmCLIPBOARD, mtxfmTEXT, None, 0,      # dest
               '', None) 

在Mac或Windows平台上都应该能正常工作。你是怎么把MathType的公式数据放到剪贴板上的?你有没有办法查看在你调用MTXFormEqn时,剪贴板上到底有什么内容?

撰写回答