LoginSignup
4
4

More than 5 years have passed since last update.

Wordの数式(MathML)をLaTeXの文字列に変換する

Posted at

はじめに

Wordの数式は、内部的にはMathML形式で保持されています。これをクリップボード経由でLaTeXの形式に変換する方法を述べます。

手順

  1. https://sourceforge.net/projects/xsltml/ からXSLT MathML Libraryをダウンロードします。
  2. 上記を解凍すると*.xslファイルが含まれていますので、これをC#のプログラムから参照可能な任意の場所に設置します。
  3. 以下の様に、クリップボードにコピーされた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());

参考

4
4
9

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4