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 オブジェクトに変換することです。私が見つけた可能な方法の 1 つは、TeX で方程式を記述し、TeX を MathType OLE オブジェクトに置き換える MTCommand_TeXToggle (Word の MathType 6.5 ライブラリにあります) マクロをプログラムで呼び出すことです。しかし、どうにかして 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) 選択範囲を MathML から MathType OLE オブジェクトに変換する MS Word VB マクロを取得する方法はありますか?

前もってありがとう、ニック・スタンチ

4

4 に答える 4

4

ひび割れた!

object を使用COleClientItemして、コード内で MathType OLE Con​​trol のインスタンスを取得できます。これは、MathType SDK MFC サンプルに示されています。次に、 を操作してCOleDataSource、コントロールに MathML データをフィードし、呼び出しCOleClientItem::CopyToClipboard();ます。これで、コントロール自体を OLE オブジェクトとして表すデータが、Range::Paste(opt1, opt2);Word オートメーション クラスからの呼び出しで利用できるようになります。少し奇妙に見えますが、私にとってはうまくいきました:)そして、サンプルにもう1行、つまりCopyToClipboardメソッドを呼び出す行を追加するだけです。

于 2009-06-12T19:13:01.353 に答える
4

ニック、MathType SDK を試してみてください。「現状のまま」提供されますが、無料です: http://www.dessci.com/en/reference/sdk/

ロエルさん、嬉しいお言葉ありがとうございます。これをサポートチームに伝えます。

ボブ・マシューズ デザインサイエンス

更新:ここでは、MathType SDK を試すという私の推奨事項について、いくつかの説明と追加情報を示します。MathType 6.5 から、MathType オブジェクトで IDataObject インターフェイスを使用して、MathML を渡すことができます。MathML がエンコードする式は、現在のカーソル位置に挿入されます。したがって、一般的には、空白の MathType 方程式を挿入してアクティブ化し、IDataObject インターフェイスを取得して、MathML を介して方程式を設定し、方程式を再び閉じるという戦略がとられます。

MathType SDK には、詳細なドキュメントと、この手法を示すサンプルの "OLECont" アプリケーションが含まれています。ここに投稿した内容に基づいて、コードを機能させるのに問題はないはずです。

于 2009-06-10T14:16:20.200 に答える
0

私が提供できる唯一のアドバイスは、Design Science のサポートが非常に優れていることをいつも知っているということです。彼らの OLE インターフェイスが MathML をサポートしているかどうかを彼らに尋ねてみてください。

Word 2007 の数式エディタについてはまだ調査していません。別の自動化インターフェースがあれば、他のフォーマットをより簡単にインポートできるかもしれません。

于 2009-06-10T10:21:59.363 に答える