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

オートロード プラグイン

もしあなたが動的に生成されたページでjsMathを使用しているなら,ある特定のページでjsMathが必要になるかならないかを事前に知ることはできません.jsMath.jsは大きなファイルで,これをダウンロードするには長時間かかるので,あなたはjsMath.jsが使用されないときには,読み込みたくないかもしれない.(ほとんどのブラウザはJavaScriptファイルをキャッシュしているので,読者が見る最初のページでのみ遅延があるが,ユーザ゙が数式のないページを見ているのなら,その遅延を起こす必要もない).

オートロードプラグインは,これらの状況においてあなたを助けるために設計されています.それは,jsMathが処理する"math"クラスの<SPAN>または<DIV>タグのインスタンスがあるかどうかWebページを通して見て,必要ならば自動的にjsMath.jsを読込み,不必要な場合に望まれないダウンロードされるのを効果的に防ぎながら,必要がないならばjsMath.jsを読み込みません.

jsMathを読み込むのにeasy/load.jsを使用していれば,オートロードを使うためにautoloadの値を1にしなければなりません.これはデフォルトの設定です. オートロードを手動で使いたいのなら,jsMath.Process()jsMath.ProcessBeforeShowing()が呼び出される前に,ドキュメントのBODYの下端に次の行を追加してください.

    <SCRIPT SRC="path-to-jsMath/plugins/autoload.js"></SCRIPT>

    <NOSCRIPT>
    <DIV STYLE="color:#CC0000; text-align:center">
      <B>Warning: <A HREF="http://www.math.union.edu/locate/jsMath">jsMath</A>
      requires JavaScript to process the mathematics on this page.<BR>
      If your browser supports JavaScript, be sure it is enabled.</B>
    </DIV>
    <HR>
    </NOSCRIPT>

この例では,オートロードプラグインはドキュメントのBODYにおいて読み込まれ,それが読み込まれたときに自動的にページの内容を通読します.ドキュメントのHEADにおいてこれを読み込むこともできますが,この場合,後に走らせるためにオートロードを頼む必要があります.例えば,ドキュメントのHEADにおいて,

    <SCRIPT SRC="path-to-jsMath/plugins/autoload.js"></SCRIPT>
と書き,BODYの下端に次の文を含めることができます.
    <SCRIPT> jsMath.Autoload.Check() </SCRIPT>
    <NOSCRIPT>
    <DIV STYLE="color:#CC0000; text-align:center">
      <B>Warning: <A HREF="http://www.math.union.edu/locate/jsMath">jsMath</A>
      requires JavaScript to process the mathematics on this page.<BR>
      If your browser supports JavaScript, be sure it is enabled.</B>
    </DIV>
    <HR>
    </NOSCRIPT>
これにより,上のドキュメント中の数式をチェックするために,autoloadjsMath.Autoload.Check()を呼びだし,処理すべき数式があるときだけjsMathを読み込みます.

上に示したどの場合においても,数式を実際に活字組みするにはjsMath.Process()jsMath.ProcessBeforeShowing()を呼び出す必要があることに注意してください.オートロードプラグインは,ただjsMathを読み込むだけで走らせるわけではありません.

オートロードを使用する1つの一般的な方法は,ドキュメントのHEASにおいて次のような何かを使うことになっています.

    <SCRIPT SRC="path-to-jsMath/plugins/autoload.js"></SCRIPT>
    <SCRIPT>
      window.onload = function () {
        jsMath.Autoload.Check();
        jsMath.Process(document);
      }
    </SCRIPT>
これは,プラグインを読込み,次に数式をチェックする前にページが完成するのを待ち,あれば,jsMathが読み込まれドキュメントは数式のために処理されます.なければ,jsMath.Process()の呼び出しは何も行いません(したがって,jsMathが読み込まれないときに含まれていても安全です).

tex2math プラグインの自動読込み

あなたがtex2mathプラグインも使っているのなら,数式のSPANやDIVを探すことに加えて(または,代わりに) $...$, $$...$$, \(...\) , \[...\] によって区切られた数式文字列をチェックするために,オートロードを要請することができます.これを行うには,autoload.jsを読み込む前にjjsMath.Autoloadの値を次の例のように設定します:
    <SCRIPT>
      jsMath = {
        Autoload: {
           findTeXstrings: 0,       // 1 to look for any tex-delimited math
           findLaTeXstrings: 0      // 1 to look for \(...\) and \[...\] only
        }
      }
    </SCRIPT>
どのテストが行われるかを制御するために,これらのどの値も(全部の値でも)設定できます.どちらかのTeX文字列検索が行われたとき,tex2mathプラグインは自動的に読み込まれるので,別々に読み込む必要はありません.TeX文字列の検索はLaTeX文字列の検索を含んでいるので(ただし,その逆ではない),findTeXstringsfindLaTeXstringsの両方をセットする必要はないことに注意してください.

jsMath.Autoload.findCustomSettingsの変数を設定することにより,autoloadが探ものについてもっと正確な制御を得ることができます.

    <SCRIPT>
      jsMath = {
        Autoload: {
          findCustomSettings: {
            processDoubleDollars: 1,  // look for $$...$$
            processSingleDollars: 1,  // look for $...$
            processSlashParens:   0,  // look for \(...\)
            processSlashBrackets: 0,  // look for \[...\]
            fixEscapedDollars:    1   // convert \$ to $
          }
        }
      }
    </SCRIPT>
この場合,$...$ や $$...$$ を探すが,LaTeXの区切り文字は探しません.これらのパラメータの詳細についてはtex2math plugin page参照.

tex2mathプラグインで行えるのと同様に,数式を区切るためにオーダーメイドの文字列を指定することもできます.これらを指定するには,

    <SCRIPT>
      jsMath = {
        Autoload: {
          findCustomStrings: [begin-math, end-math,
                          begin-display, end-display]
        }
      }
    </SCRIPT>
を使用してください.ここで,begin-mathend-math はインライン数式を囲む文字列で,begin-displayend-display は別行立て数式を囲む文字列です.例えば,
    <SCRIPT>
      jsMath = {
        Autoload: {
          findCustomStrings: ['%%','%%', '%%%', '%%%']
        }
      }
    </SCRIPT>
は,%%...%% をインライン数式を示し,%%%...%%% を別行立て数式を示すようにします.autoloadが探す前にブラウザによってすでに解釈されるので, < や > のようなHTMLの特別な文字を,この文字列に含めることはできないことに注意してください.したがって残念ながら,これらのためにHTMLタグに似たものは使用できません.

バージョン3.3以前のjsMathにおいては,autoloadが走ってからtex2mathを呼び出すように要求され,jsMath.Autoload.Run()が,これをより簡単にするために提供されていました.これはもう必要なく,jsMath.Autoload.Run()は今や軽視されています.現在,autoloadはそれが呼び出されたときにtex2math変換を自動的に行い,もはやautoloadを使うときにtex2mathを呼び出すことに煩わされる必要はありません.

追加のプラグインとフォントの読込み

もしsMath.jsが読み込まれたら,jsMath.Autoload.needsJsMathの値は1にセットされ,そうでなければ0にセットされるので,この値を追加のプラグイン,フォントなどを条件付で読み込むのに使えます.例えば,
    <SCRIPT SRC="path-to-jsMath/plugins/autoload.js"></SCRIPT>
    <SCRIPT>
      if (jsMath.Autoload.needsJsMath) jsMath.Setup.Script("plugins/mimeTeX.js");
      jsMath.Process(document);
   </SCRIPT>
は,jsMath.jsがオートロードプラグインによって読み込まれた場合だけmimeTeXプラグインを読み込みます.

あるいは,jsMath.jsの後に読み込まれるべきフォントとJavaScriptファイルを指定するためにjsMath.Autoload.loadFontsjsMath.Autoload.loadFilesの値をセットすることができます.これらは,個々のフォントやファイル名でもそれらの配列名でも設定できます.例えば,
    jsMath = {
      Autoload: {
        loadFonts: ["msam10","msbm10"],
        loadFiles: "plugins/mimeTeX.js"
      }
    }
は,jsMath.jsが読み込まれるときはいつでも2つのAMSシンボルフォントとmimeTeXプラグインを読み込みます.ファイル名は絶対パスまたはURLを含んでいない限りjsMathディレクトリに相対的なものであることに注意してください.たとえば,
    jsMath = {
      Autoload: {
        loadFiles: ["/site/common.js","http://mysite.com/jsMath/macros.js"]
      }
    }
は,最初のファイルを現在のページのサーバのルートディレクトリから読込み,第二のファイルを指定されたWebサイトから読み込みますが,これはjsMath.jsが読み込まれたときだけです.

jsMath.jsが読み込まれないとき,autoload.jsjsMath.Process(), jsMath.ProcessBeforeShowing(), jsMath.ConvertTeX()及びjsMath.ConvertLaTeX()を空の関数として定義するので,始めにjsMath.loadedをチェックすることに煩わされずに,これらを読み出すことができます.

ページの一部分だけの検索

(例えば,サイド・バーその他のナビゲーション要素を避けて)ページ全体でなく指定されたHTML要素だけ(指定されたDIVなど)を,autoloadに検索してほしいとき,jsMath.Autoload.elementを検索する要素のIDや要素自身の参照にセットすることができます;要素が指定されなければ,ドキュメント全体が検索されます(これは,jsMath.Process()jsMath.ProcessBeforeShowing()の働き方を反映しています).

autoloadを使用するとき,jsMath.jsが読み込まれる間ページの下端では遅延があるかもしれません.この間ページの残りの部分は見えるので,jsMath.ProcessBeforeShowing()は望ましい効果をもたらさないかもしれません.

もしあなたが動的なコンテンツ(例えばJavaScriptによって)をその場で作成しているのなら,autoload.jsが読み込まれるときにページ内に数式コンテンツがまだなければ見つけることができず, jsMath.jsを読み込むことができません.これらの場合には,autoloadを使うのでなく,jsMath.jsを通常の方法で使用すべきです.

サーバサイドのインクルードによるオートロードの使用

あなたのサーバがサーバサイドのインクルードを許可するように構成されているなら,2度目のファイルアクセスによってサーバにautoload.jsを分けて送るように要求しなくても,Webページに直接含めようようにすることができます.これを行うには,まずautoloadにjsMathファイルの場所を教え(通常行われるようには,SCRIPTタグから場所を探すことができないので),次にautoload.jsファイルをインクルードします.

    <SCRIPT>
      jsMath = {Autoload: {root: "path-to-jsMath"}};
      <!--#include virtual="path-to-jsMath/plugins/autoload.js" -->
    </SCRIPT>
    <NOSCRIPT>
    <DIV STYLE="color:#CC0000; text-align:center">
      <B>Warning: <A HREF="http://www.math.union.edu/locate/jsMath">jsMath</A>
      requires JavaScript to process the mathematics on this page.<BR>
      If your browser supports JavaScript, be sure it is enabled.</B>
    </DIV>
    <HR>
    </NOSCRIPT>

ここで,path-to-jsMathはjsMathディレクトリのURLです.(このアプローチは,Jan-Ake Larrsonの示唆による)