◆英語版原文のURL◆ http://www.math.union.edu/~dpvc/jsMath/authors/tex2math.html

tex2mathプラグイン

通常,jsMathはあなたのページを定義しているHTML内の<SPAN CLASS="math">または<DIV CLASS="math">ブロックを探すことによって,あなたのWebページの数式を識別します.これらは少し面倒で,特に,LaTeX中と同じようにダラー記号,\(...\)及び\[...\] コマンドで数式を入力するのに慣れている人には面倒です.しかし,jsMathは,ページが読み込まれてから,ダラー記号やLaTeXの \(...\) , \[...\]構文を適切なSPANDIVタグに自動的に翻訳することによってこれを助けています.これは,text2mathプラグインによって扱われます.

もし,あなたがeasy/load.jsファイルを使っていたら,tex2mathを起動するのは簡単です.次のオプションのうち少なくとも1つを1に設定すればよい:processSlashParens, processSlashBrackets, processDoubleDollars, processSingleDollars, customDelimiters.これらのうちどれが設定されても,tex2mathは自動的に読み込まれ,指示された区切り文字を探してページを処理します.

もしあなたが,jsMathを手動で読み込んでいて,tex2mathプラグインを使いたいのならば,jsMath.jsファイルを読み込むコマンドの直後に次の行を含めなさい.
    <SCRIPT"> jsMath.Setup.Script("plugins/tex2math.js") </SCRIPT>
次に,HTMLファイルの下端に,jsMath.ProcessBeforeShowing()またはjsMath.ProcessBeforeShowing()が呼び出される前に次の行を含めなさい.
    <SCRIPT> jsMath.ConvertTeX() </SCRIPT>
これにより,jsMathはあなたのファイルのすべてのテキストボロックを通して, $...$, $$...$$, \(...\) 及び \[...\]を探して適当なSPANまたはDIVに置換します.

jsMath.ConvertTeXをページのオンロード・ハンドラーの一部として含めることができます(適当なjsMath.Processコマンドとともに).例えば,
   <BODY onLoad="jsMath.ConvertTeX(); jsMath.Process()">
は,ページが読み込まれたときに,TeX-またはLaTeXスタイルの数式を数式活字組みに変換します.

ダラー記号をテキストの一部とするには

tex2mathプラグインを使用するときは,数式に変換されたくないダラー記号が含まれていないかどうか注意しなければなりません.例えば,あなたのWebページに一部として,"that cost $1.50 in those days, or about $5.00 today"と書かれていれば,jsMath.ConvertTeX()は,これを"that cost <SPAN CLASS="math">1.50 in those days, or about </SPAN>5.00 today"と変換し,jsMathはSPANの内容を数式として活字組みしようとします.

これを避ける幾つかの方法があります.まず,jsMath.ConvertTeX()は対になっているダラー記号を処理するだけで,それらは,間に介在するHTMLがないときに対になっている見なされるだけです.したがって,ダラー記号が数式に変換されるのを防ぐ1つの方法は,それをSPANその他独自のタグで包むことです.例えば,
   "that cost <SPAN>$1.50</SPAN> in those days, or about <SPAN>$5.00</SPAN> today".

(数式の間にHTMLコードがないことという要請には1つの例外があります:tex2mathは,数式のテキスト中にある<BR>タグを必要に応じて削除します.これは,幾つかの掲示板システムが,ユーザが入力するテキストに,これらを自動的に挿入するからで,ユーザの知らないうちに数式テキストの中に現われることがあるからです.)

あるいは,バックスラッシュを用いてダラー記号を逃れることができます.jsMath.ConvertTeX()コマンドは,\$ が数式モードの外側に現われれば $ に変換します.だから,代わりに,"that cost \$1.50 in those days, or about \$5.00 today"と入力することができます.

もう一つの方法は &#36; 番号符号を使用することです:"that cost &#36;1.50 in those days, or about &#36;5.00 today" しかしこれを読むのは困難です(&dollar;文字符号が使えるとよいが,残念ながらこれはすべてのブラウザで働くわけではない).

最後に,インラインの数式では単に\(...\)を示すことにより,別行立て数式では\[...\]を示してから,jsMath.ConvertTeX()ではなくjsMath.ConvertLaTeX()を用いることができます.これはすべてのダラー記号(及びエスケープダラー記号)を単独で残すが,LaTeXスタイル表記をSPAN及びDIVに変換します.もし,あなたが掲示板システムやブログソフトウェアにjsMathを含めているなら,あなたのページに入力する人がダラー記号として残るべきダラー記号を使わないと保証することはできないので,これが最善の解決策です.第三のオプションは,\(...\), \[...\] 及び $$...$$ を処理し, $...$を処理しないjsMath.ConvertTeX2()を使うことです.

数式区切り文字の制御

jsMath.tex2math.Convert()関数 (これは,他の変換関数の基本となっている)を使えば,多くの区切り文字のうちtex2mathが探すべきものを制御することができます.例えば,

    <SCRIPT>
      jsMath.Synchronize(function () {
        jsMath.tex2math.Convert(element,{
          processSingleDollars: 1, processDoubleDollars: 1,
          processSlashParens: 1, processSlashBrackets: 1,
          fixEscapedDollars: 1
        });
      });
    </SCRIPT>

は,jsMath.ConvertTeX(element)に等しくなります.これらの特徴のいずれも,1を0に変えることによって無効にできます.fixEscapedDollarsフラッグは,数式モードの外でテキスト中にある \$ を $ に変換するかどうかを制御します(これは,数式モードにせずに \$ を使えるようにします).

インライン数式と別行立て数式のためのオーダーメイドの識別子の使用

あなたが,\(...\) と \[...\] をインライン数式及び別行立て数式をマークするものとして使いたくない時があるかもしれません(例えば,あなたのWebページでこれらを簡単に表示したいとき).<SPAN>と</SPAN>をそれらの周りに置くことができますが,それは入力に不便です.

その代わりに,jsMath.tex2math.CustomSearch()関数を用いてオーダーメイドの区切り文字を定義することができます.4個の文字列を渡すことができます:インライン数式の最初と最後,別行立て数式の最初と最後のために使用する文字列.例えば,

  <SCRIPT>
    jsMath.CustomSearch('[math]','[/math]','[display]','[/display]');
  </SCRIPT>

は,[math]...[/math]をインライン数式に,[display]...[/display]を別行立て数式を示すために使うことができます.文字列は大文字小文字で区別され,通常のテキストの中で現われるものであってはなりません.さもなければ,tex2mathは区切り文字を正しく照合できません.例えば,'math(' と ')'を使うのは,たぶんよい考えではない・・閉じる括弧は平文でしばしば使われるので,tex2mathは数式が実際よりも遠くに広がっていると考えるからです.

終りの区切り文字を探すときに,tex2mathは開始の区切り文字のコピーの1つを含まない最も長い文字列を探そうとします.これは, '}' のようなものを終りの区切り文字として使えることを意味しますが,他の閉じるブレースで数式モードを終わらせないものがないように気をつけなければなりません.少なくとも2文字で区切り文字を使う方が,意図せずに自然に起こることがはるかに少ないので,より安全です.

< や > のようなHTMLの特殊文字は,tex2mathが走るまでにブラウザが解釈してしまうので,あなたのオーダーメイドの区切り文字として使えないことに注意してください.残念ながらこれは,HTMLタグによく似た区切り文字は使えないことを意味しています.

一旦区切り文字を定義したら,実際にドキュメントを(またはその一部を)変換するかどうかtex2mathに聞く必要があります.あなたのオーダーメイドの区切り文字を使って,ドキュメント全体を変換するには,

<SCRIPT> jsMath.ConvertCustom(document) </SCRIPT>

のコマンドを使います.これらが2つのルーチンに分かれている理由は,オーダーメイドの区切り文字のためにパターンを再処理しなくても,何回でもjsMath.ConvertCustom()を呼び出せるようにするためです.

jsMath.tex2math.CustomSearch()jsMath.ConvertCustom()を呼び出すことにより,異なる値で何度も調べられることに注意してください.これらすべてはあなたがjsMath.Process()jsMath.ProcessBeforeShowing()を呼び出す前に行われるので,テキストの一部が幾つかの異なる種類の区切り文字を用いて変換されても,数式は上から下へ活字組みされます.

一要素のみの処理

わずかな数式を含んだ大きなドキュメントにとっては,数式を変換するためにドキュメント全体を探すことは能率がよくない.この場合には,あなたは個々のHTML要素だけを処理したくなるかもしれない(特定の段落やDIVブロックのような).これを行うには,要素IDをjsMath.ConvertTeXやその他の変換ルーチンに渡すことができる(jsMath.ProcessjsMath.ProcessBeforeShowingにも渡せます).例えば,
    <P ID="has_math">
       If $x = 3$ then $x^2 = 9$.
    </P>

    <SCRIPT>
      jsMath.ConvertTeX('has_math');
      jsMath.ProcessBeforeShowing('has_math');
    </SCRIPT>
は,"has_math"とラベル付けられた段落の中だけで数式の変換を行い,ファイルの残りの部分に影響しません.変換すべき数式をマークするために,どんな種類のタグでも用いることができ,例えばSPANDIVTABLEや他のブロックですら使えます.

もし,あなたが内容をその場で作っているのなら,一要素を処理するのは特に便利です.この場合,要素IDを渡すよりも要素への参照を渡す方がもっと便利かもしれません.例えば,

    <SCRIPT>
      var div = document.createElement('div');
      div.innerHTML = "If $x = 3$ then $x^2 = 9$";
      jsMath.ConvertTeX(div);
      jsMath.ProcessBeforeShowing(div);
    </SCRIPT>
は,DIVブロックを作り,それにテキストを入れ,次にそのテキスト内の数式を変換して数式に活字組みします.しかし,DIVの内容は,例えばdocument.body.appendChild(div)のようなものによって,ページのどこかに挿入されるまで現われません.要素の配置は,数式に影響する縮尺や他の要因を変えるため,jsMathがこの変化を知っている方がよいので,おそらく,jsMath.ProcessBeforeShowing()を呼び出す前にDIVを挿入すべきです.

また,jsMath.ProcessBeforeShowing()が非同期的に動作することを知っているべきです:つまり,ちょうど後の処理要求の列を作らせるかもしれません(例えば,もし,jsMathがその補助ファイルを最初に読み込まれるのを待っているならば).結果として,この時点で活字組みされた数式を実際に含むDIVを数えることはできない.詳細は,synchronizing with jsMath
に関するセクション参照.

tex2math のもっとグローバルな制御

HTMLファイル中の特別なタグを使用して,tex2mathにドキュメントのどのセクションを数式として処理し、どれを処理すべきでないかを示すことができます.追加の詳細はcontrolling tex2math processingのセクション参照.