在Mac上将MathType对象转换为MathML
我正在使用来自 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时,剪贴板上到底有什么内容?