在 MS Word 中将 MathML 转换为 MathType

sta*_*nch 6 mfc automation ole mathml

我正在编写一个从 XML&MathML 到 MS Word 文档的转换器。
我正在使用 MFC 和 Word 自动化,因此编写这样的文本没有问题:

_Application app;  
COleVariant vtOpt(DISP_E_PARAMNOTFOUND, VT_ERROR),
            vtTrue((short)TRUE),
            vtFalse((short)FALSE);
app.CreateDispatch("Word.Application",NULL);
Documents docs = app.GetDocuments();
_Document doc = docs.Add (vtOpt, vtOpt, vtOpt, vtOpt);
Range range = doc.Range (vtOpt, vtOpt);
range.InsertAfter (_T("Hello Word!"));
Run Code Online (Sandbox Code Playgroud)

现在的问题是将 MathML 方程转换为嵌入的 MathType 对象。我发现的一种可能方法是在 TeX 中编写方程,然后以编程方式调用 MTCommand_TeXToggle(在 Word 的 MathType 6.5 库中找到)宏,该宏将 TeX 替换为 MathType OLE 对象。但是后来我必须以某种方式将 MathML 转换为 TeX,这并不容易。

我知道,MathType OLE 对象应该接受原始 MathML 数据,但是当我尝试以编程方式创建和访问 OLE 对象时:

InlineShapes shapes = doc.GetInlineShapes ();
InlineShape control = shapes.AddOLEObject (COleVariant("Equation.DSMT4"), vtOpt, vtFalse, vtFalse, vtOpt, vtOpt, vtOpt, vtOpt);
OLEFormat fm = control.GetOLEFormat ();
COleDispatchDriver drv = fm.GetObject();
Run Code Online (Sandbox Code Playgroud)

我最终没有合理的接口来为它提供 MathML 数据。所以,问题是:1)有没有办法控制 OLE 对象并向它发送一些 MathML 数据?或者 2) 有没有办法获得 MS Word VB 宏,将选择从 MathML 转换为 MathType OLE 对象?

提前致谢,尼克斯坦奇

sta*_*nch 4

破解了!

可以COleClientItem在代码中使用 object 来获取 MathType OLE Con​​trol 的实例。MathType SDK MFC 示例中显示了这一点。然后,操作COleDataSource,向控件提供 MathML 数据并调用COleClientItem::CopyToClipboard();现在,表示控件本身的数据(作为 OLE 对象)可在Range::Paste(opt1, opt2);从 Word 自动化类调用时使用。看起来有点奇怪,但对我有用:)您所要做的就是在示例中再添加一行,即调用CopyToClipboard方法的行。