我正在编写从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!"));
现在的问题是将MathML方程转换为嵌入式MathType对象。我发现的一种可能的方法是在TeX中编写方程式,然后以编程方式调用MTCommand_TeXToggle(在Word的MathType 6.5库中找到)宏,该宏将Math OLE对象替换为TeX。但是然后我必须以某种方式将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();
我最终没有一个合理的接口(interface)来向其提供MathML数据。
因此,问题是:
1)有没有一种方法可以控制OLE对象并向其发送一些MathML数据?
或者
2)有没有一种方法来获取MS Word VB宏,该宏将选择内容从MathML转换为MathType OLE对象?
提前致谢,
尼克·斯坦奇
最佳答案
尼克,您应该尝试使用我们的MathType SDK。它按“原样”提供,但免费:http://www.dessci.com/en/reference/sdk/
Roel,感谢您的客气话。我会将其传递给我们的支持团队。
鲍勃·马修斯(Bob Mathews)
设计科学
更新:这是一些有关我推荐使用MathType SDK的建议的说明和其他信息。从MathType 6.5开始,可以使用MathType对象上的IDataObject接口(interface)来传递MathML。 MathML编码的表达式将插入到当前光标位置。因此,通常的策略是插入一个空白的MathType方程,将其激活,获取IDataObject接口(interface),通过MathML设置该方程,然后再次关闭该方程。
MathType SDK包括具有更多详细信息的文档以及演示该技术的示例“OLECont”应用程序。根据您在此处发布的内容,使代码正常工作应该没有问题。
关于mfc - 在MS Word中将MathML转换为MathType,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/969406/