2017年06月14日

MathJaxによる$\mathrm{\TeX}$からMathMLへの直接的な変換 〜ヒューマン・ライクからマシーン・ライクへ平坦に近いアーチがかかる〜

応援クリックを1日1回宜しくお願いいたします。




昨日に引き続き、 MathJaxを利用して$\mathrm{\TeX}$からPresentation MathMLへ変換するアプリケーションを作成しました。
↓↓↓
MathJaxによるTeXからMathMLへの変換


本日は、$\mathrm{\TeX}$を入力した後で、プレビューを行わずにMathMLへ変換します。


・「TeX」は$\mathrm{\TeX}$の数式コマンドが書かれている<textarea>タグのid属性の値です。
・「MML」は変換後のPresentation MathMLのソースコードを出力する<textarea>タグのid属性の値です。



JavaScriptのソースコードの説明

当ブログではドルマーク($)は文章中の数式としてレンダリングの対象となるため、下記のソースコードでは全角のドルマークまたはjQueryと表記しています。

// ページ内の数式を全て取得してelement jax objectに格納する
//(例としてページ内の最上部の数式を$\mathrm{\TeX}$としている)
var jax = MathJax.Hub.getAllJax();

// $\mathrm{\TeX}$の数式コマンドを取得して、jaxに設定する
jax[0].Text(jQuery("#TeX").val());
// Presentation MathMLに変換して、<textarea>タグ内に出力する
jQuery("#MML").html(jax[0].root.toMathML(""));

// jaxを元に戻す
jQuery("#jax").html("$\\mathrm{\\TeX}$");
// 数式レンダリングも施しておく
MathJax.Hub.Queue(["Typeset", MathJax.Hub, "jax"]);






このソースコードの特徴

本日分の方法では、$\mathrm{\TeX}$の数式コマンドの文字列をjaxに設定した後、MathMLに変換しています。

昨日分にあった下記の特徴を省略できています。
    1. <div>内に$\mathrm{\TeX}$の数式コマンドを出力する
    1. <div>に対して数式レンダリングを実行する
    1. 数式レンダリングの結果をjaxに取得する

本日の分では、何らかの数式レンダリングが予め必要で、それをjaxに取得して$\mathrm{\TeX}$の数式コマンドを格納する分、ムダなように思えます。

しかし、肝心の.toMathML()メソッドがjaxに対して呼び出すため、jaxの存在をかませるステップは必要で、それに対する文字列の格納も必要となります。

可能性として、$\mathrm{\TeX}$の数式コマンドの文字列を.toMathml()メソッドの実行時の引数に使えるのであれば、jaxの存在・値の設定が不要となります。

ただ、非常に小さな数式の取得、数式コマンドの文字列の格納だけの差なので、数式の規模が大きくなってもさほど処理時間の差は無さそうです。




ちなみに、.toMathML()メソッドの戻り値(実行結果として得られるもの)は文字列ですので、これに対してMathMLの醍醐味のXMLとしてのデータ構造の操作は行えない状態となっています。



posted by Line Segment at 18:00 | Comment(0) | TrackBack(0) | ホームページ | このブログの読者になる | 更新情報をチェックする