Python 在Mac上将MathType对象转换为MathML

Python 在Mac上将MathType对象转换为MathML,python,macos,mathtype,Python,Macos,Mathtype,我正在使用from Python从MathType对象获取MathML。在Windows中,MTXFormEqn()可以将剪贴板上的MathType对象替换为转换后的等效对象。这似乎是标准方法 lib.MTXFormSetTranslator(4, TRANSLATOR_TDL_FILENAME) lib.MTXFormEqn(mtxfmCLIPBOARD, mtxfmTEXT, None, 0, # source mtxfmCLIPBOARD, mtxf

我正在使用from Python从MathType对象获取MathML。在Windows中,
MTXFormEqn()
可以将剪贴板上的MathType对象替换为转换后的等效对象。这似乎是标准方法

lib.MTXFormSetTranslator(4, TRANSLATOR_TDL_FILENAME)
lib.MTXFormEqn(mtxfmCLIPBOARD, mtxfmTEXT, None, 0,      # source
               mtxfmCLIPBOARD, mtxfmTEXT, None, 0,      # dest
               '', None)
我正在尝试将其移植到OSX,但我无法确定要将哪些数据传递到
MTXFormEqn()
。调用上面的简单代码将返回
mtOK
MTXFormGetStatus()
报告一般错误

建议源必须为“文件”。文档中列出了“PICT”作为一种可能的输入格式
MTEquationOnClipboard()
将MathType剪贴板对象报告为WMF类型(
2
),但我可以使用
NSPasteboard
获取其
PICT
等效对象

pb = NSPasteboard.generalPasteboard()
data = pb.dataForType_(NSPICTPboardType)
是否有人成功使用
MTXFormEqn()
在Mac上转换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())

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


应在任一平台(Mac或Win)上工作。如何将MT eqn数据放到剪贴板上?当您调用MTXFormEqn时,您有没有办法知道剪贴板上实际有什么内容

我使用MathType编辑器将公式复制到系统剪贴板。调用
MTEquationOnClipboard()
会将数据报告为类型
2
--
mtWMF\u方程
。可以使用
NSPasteboard
将其转换为“PICT”对象,但我不知道如何将其传递到
MTXFormEqn()
。在Windows上,运行
MTXFormEqn()
很简单,目标是剪贴板,MathML就在剪贴板上。在OSX上,原始剪贴板数据保持不变。MTEquationOnClipboard返回mtWMF_公式是一个错误。Mac上没有WMF,剪贴板上的实际上是一个PICT。我不明白为什么调用MTXFormEqn(source=mtxfmCLIPBOARD)失败了。我将看看是否可以复制您所看到的内容(或者更好的是编写一个有效的代码片段)。从剪贴板上的MathType对象开始。在Windows中运行后,我在剪贴板上获得MathML。在OSX上,MathType对象保留在剪贴板上。你能复制这个行为吗?更新:我还在要点中添加了
NSPasteboard.types()
的输出。PICT型显然在那里。剪贴板到剪贴板的操作是否会失败,因为
mtequalationonclipboard()
正在报告
mtWMF_方程
而不是
mtMAC_PICT_方程
?没有MTXFormEqn调用mtequalationonclipboard,因此mtequalationonclipboard返回mtWMF_方程这一事实并不重要。调用MTXFormEqn将在剪贴板上查找任何MathType eqn数据。您的剪贴板类型列表表明MathType是将数据放置在剪贴板上的应用程序(“CorePasteboardFlavorType 0x45514E44”是“EQND”,MathType本机eqn数据格式)。鉴于EQND在剪贴板上,MTXFormEqn应该只使用它(即,甚至不用担心PICT)。我看不出MTXFormEqn失败的原因。
lib.MTXFormEqn(mtxfmCLIPBOARD, mtxfmTEXT, None, 0,      # source
               mtxfmCLIPBOARD, mtxfmTEXT, None, 0,      # dest
               '', None)