はじめに
Wordの数式は、内部的にはMathML形式で保持されています。これをクリップボード経由でLaTeXの形式に変換する方法を述べます。
手順
- https://sourceforge.net/projects/xsltml/ からXSLT MathML Libraryをダウンロードします。
- 上記を解凍すると*.xslファイルが含まれていますので、これをC#のプログラムから参照可能な任意の場所に設置します。
- 以下の様に、クリップボードにコピーされたWordの数式(MathML)をLaTeXに変換します。
using System.IO;
using System.Xml;
using System.Xml.Xsl;
…
var mathMlMemoryStream = Clipboard.GetData("MathML") as MemoryStream;
var mathMlByteArray = mathMlMemoryStream.ToArray();
var mathMlText = Encoding.Unicode.GetString(mathMlByteArray);
mathMlText = mathMlText.Replace("utf-16", "utf-8");
mathMlText = mathMlText.Replace("UTF-16", "utf-8");
File.WriteAllText("mathML.xml", mathMlText);
var inputUri = @"mathML.xml";
var stylesheetUri = @"解凍したファイルに含まれるmmltex.xslのパス";
// XSLTファイル の読み込み
var xslt = new XslCompiledTransform();
xslt.Load(stylesheetUri);
// 出力先を 文字列 として準備
var output = new StringBuilder();
// 出力フォーマット の指定
var settings = new XmlWriterSettings();
settings.Indent = true;
settings.OmitXmlDeclaration = false;
settings.ConformanceLevel = ConformanceLevel.Auto;
// XSLT を利用した 変換処理
using(var writer = XmlWriter.Create(output, settings)) {
xslt.Transform(inputUri, writer);
}
// LaTeXの文字列はoutput.ToString()で得られる
Console.WriteLine(output.ToString());
参考