Konvertieren von MathML zu MathType in MS Word
Schreibe ich einen Konverter von XML - &MathML in MS-Word-Dokument.
Ich bin mit MFC und Word automation, so gibt es kein problem, schreiben, text wie diesem:
_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!"));
Nun das problem liegt in der Konvertierung MathML-Gleichungen in eingebetteten MathType Objekte. Eine der Möglichkeiten, die ich gefunden habe, ist zu schreiben, Formeln in TeX und dann programmgesteuert aufrufen MTCommand_TeXToggle (gefunden in MathType 6.5 Bibliothek für Word-makro, das ersetzt TeX mit MathType OLE-Objekte. Aber dann habe ich zum konvertieren von MathML nach TeX irgendwie, das ist nicht so einfach.
Weiß ich, dass MathType OLE-Objekt annehmen sollte, raw MathML-Daten, aber wenn ich versuche zu erstellen und den Zugriff auf OLE-Objekt programmgesteuert:
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();
Habe ich am Ende keine vernünftige Schnittstelle zu füttern, mit der MathML-Daten.
Die Frage ist also:
1) gibt es eine Möglichkeit Kontrolle zu bekommen über das OLE-Objekt aus und senden Sie es einige MathML-Daten?
Oder
2) gibt es eine Möglichkeit, um eine MS-Word-VB-makro konvertiert die Auswahl von MathML zu MathType OLE-Objekt?
Vielen Dank im Voraus,
Nick Stillen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nick, sollten Sie versuchen, unsere MathType SDK. Es wird angeboten "as-is", aber es ist kostenlos: http://www.dessci.com/en/reference/sdk/
Roel, vielen Dank für die freundlichen Worte. Werde ich gehen Sie dies an unser Support-team.
Bob Mathews
Design Science
Update: Hier einige Klarstellungen und zusätzliche Informationen zu meiner Empfehlung, zu versuchen, die MathType-SDK. Beginnend mit MathType 6.5, kann man die IDataObject-Schnittstelle auf ein MathType-Objekt zu übergeben, in MathML. Der Ausdruck der MathML kodiert, eingefügt wird an der aktuellen cursor-Position. Also, im Allgemeinen, ist die Strategie legen Sie eine leere MathType-Gleichung, aktivieren Sie es, Holen Sie sich die IDataObject-Schnittstelle, stellen Sie die Gleichung mittels MathML, und schließen Sie dann die Gleichung wieder.
Den MathType-SDK enthält die Dokumentation mit weiteren Details und ein Beispiel "OLECont" Anwendung demonstriert die Technik. Basierend auf dem, was du gepostet hast hier, Sie sollten kein problem haben, Ihren code zu arbeiten.
Es geknackt!
Kann man
COleClientItem
Objekt zum abrufen einer Instanz von MathType OLE-Steuerelement in seinem code. Dargestellt ist in der MathType-SDK, MFC-Beispiel. Dann, Manipulation derCOleDataSource
feed the control mit MathML-Daten und callCOleClientItem::CopyToClipboard();
Nun die Daten, die die Steuerung selbst, als ein OLE-Objekt ist verfügbar nachRange::Paste(opt1, opt2);
Aufruf von Word automation Klassen. Sieht ein bisschen komisch, aber bei mir funktioniert 🙂 Und alles, was Sie tun müssen ist, fügen Sie eine weitere Zeile auf die Probe, nämlich die, AnrufeCopyToClipboard
Methode.vba
Makros. Ich bin neu in VBA und würde ich gerne konvertierenMathML2MathType
OLE-Format.Ist der einzige Rat, den ich anbieten kann ist, dass ich habe immer gefunden, die Design Science support ganz gut. Möchten Sie vielleicht, um Sie zu Fragen, ob Ihre OLE-Schnittstelle bietet MathML-Unterstützung.
Ich habe nicht untersucht, die Word 2007 equation editor noch. Vielleicht kann es den import anderer Formate leichter, wenn es einen anderen automation-Schnittstelle.