2017年06月13日

MathJaxによる$\mathrm{\TeX}$からMathMLへの変換 〜ヒューマン・ライクとマシーン・ライクの橋渡し〜

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




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

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



JavaScriptのソースコードの説明

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

// $\mathrm{\TeX}$の数式コマンドを取得して、<textarea>タグ内に表示する
jQuery("#preview").html(jQuery("#TeX").val());
// 数式レンダリングする
MathJax.Hub.Queue(["Typeset", MathJax.Hub, "preview"]);

// MathJaxで数式レンダリングした全ての数式コマンドを取得して、MathJax独自の「jax」に格納する
var jax = MathJax.Hub.getAllJax();
var MML = "";
// jaxの個数だけ、Presentation MathMLに変換して文字列連結する("\r\n\r\n"は2つの改行)
for (i = 0; i < jax.length; i++) MML += jax[i].root.toMathML("") + "\r\n\r\n";
// <textarea>タグ内に出力する
jQuery("#MML").text(MML);


.totoMathML()メソッドの利用方法はこちらです。
Obtaining the MathML for an Expression − MathJax 2.5 documentation






このソースコードの特徴

ユーザが(<textarea>から)$\mathrm{\TeX}$の数式コマンドを自由に変更できるところまでは良いです。

その後の、一旦<div>タグ内で数式レンダリングをしてから、それをelement jax objectとして取得したオブジェクトに対して.toMathML()メソッドを使っています。

$\mathrm{\TeX}$の数式コマンドからMathMLのソースコードへ変換したいだけであれば、
    1. <div>内に$\mathrm{\TeX}$の数式コマンドを出力する
    1. <div>に対して数式レンダリングを実行する
    1. 数式レンダリングの結果をjaxに取得する
の3点ともがムダな処理となります。

特にMathJaxによる数式レンダリングの時間は、数式の規模が大きければ大きいほど膨大な処理時間がかかります。

このソースコードが有用なのは、プレビューをしつつ$\mathrm{\TeX}$からMathMLへ変換するときのみとなります。





posted by Line Segment at 18:00 | Comment(0) | TrackBack(0) | ホームページ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック