6

我正在编写一个从 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 库中找到)宏,它将 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();

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

在此先感谢,尼克斯坦奇

4

4 回答 4

4

Nick,你应该试试我们的 MathType SDK。它按“原样”提供,但它是免费的:http: //www.dessci.com/en/reference/sdk/

罗尔,谢谢你的好话。我会将其传递给我们的支持团队。

Bob Mathews 设计科学

更新:这里有一些关于我建议尝试 MathType SDK 的说明和附加信息。从 MathType 6.5 开始,可以使用 MathType 对象上的 IDataObject 接口来传递 MathML。MathML 编码的表达式被插入到当前光标位置。因此,一般来说,策略是插入一个空白的 MathType 方程,激活它,获取 IDataObject 接口,通过 MathML 设置方程,然后再次关闭方程。

MathType SDK 包括更详细的文档,以及演示该技术的示例“OLECont”应用程序。根据您在此处发布的内容,您应该可以毫无问题地让代码正常工作。

于 2009-06-10T14:16:20.200 回答
4

破解它!

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

于 2009-06-12T19:13:01.353 回答
0

我能提供的唯一建议是,我一直认为 Design Science 支持非常好。您可能想询问他们的 OLE 界面是否提供 MathML 支持。

我还没有研究过 Word 2007 公式编辑器。如果它有不同的自动化接口,也许它可以更容易地导入其他格式。

于 2009-06-10T10:21:59.363 回答
0

以下简单程序有效:

  • 配置 MathType 以将首选项复制/粘贴到:“Mathml”(选择合适的版本)
  • 将您的 Mathml 方程式粘贴到 Mathtype 面板中:方程式出现并且可以编辑/修改 -> 微调您的方程式。
  • 将 Mathtype 的复制/粘贴首选项重新配置为“方程式对象(Windows OLE 图形)” - 现在将方程式从 MathType 复制粘贴到 Word
于 2022-01-15T19:43:02.370 回答