0

我正在使用 Python 中的MathType SDK从 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()。调用上面的代码简单返回mtOKMTXFormGetStatus()报告一般错误。

该图表表明源必须是“文件”。文档将“PICT”列为可能的输入格式。MTEquationOnClipboard()将 MathType 剪贴板对象报告为 WMF ( 2) 类型,但我可以PICT使用NSPasteboard.

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

有没有人成功地用来MTXFormEqn()在 Mac 上翻译 MathType 对象?我找不到任何使用 Windows 标准剪贴板到剪贴板方法的示例(在文档中或在线)。


这是工作 Windows 代码的精简版。为简洁起见,省略了错误检查和 const 定义。

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())
4

1 回答 1

0

如果剪贴板上有 MathType 方程数据(任何类型),那么

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

应该可以在任一平台(Mac 或 Win)上工作。您如何将 MT eqn 数据放到剪贴板上?当你调用 MTXFormEqn 时,你有办法告诉剪贴板上的实际内容吗?

于 2012-02-02T20:30:30.090 回答