2014年8月29日金曜日

TiddlyWikiのMathJaxプラグイン

Plugin MathJax

TiddlyWiki classicMathJaxを使うためのプラグインです。

( 追記:Dec 22, 2014
  現在は最新版の TiddlyWiki5 と区別するため、 TiddlyWiki Classic と呼ばれています。
  http://classic.tiddlywiki.com/ )

このプラグインは、オリジナルの作者Guy RutenbergさんのMathJaxPluginを参考にして、使いたい機能を追加しました。


特長

  • inline equation $---$が使えます。
  • 数式番号の表示ができるように設定しました。数式番号はtiddler更新毎に「初期値1」から順番にナンバリングされます。
  • オンライン使用ならば、このプラグインのインストールだけですぐに使えます。もちろんオフライン使用も可能です。

NOTE:MathJaxは前回のナンバリング値を記憶するようで、tiddlerの更新毎に番号が再ナンバリングされ増加してしまいました。そのため、tiddlerの更新毎に数式番号を「初期値1」にリセットするようにしています。



インストール

http://babooshka.tiddlyspot.com/からインポートできない場合は手動でプラグインtiddlerを作成してください。

プラグインtiddlerの作成手順

新規tiddlerを以下の内容で作成します。

tiddlerタイトル

PluginMathJax

tiddler本文

tiddler本文に、文末のcode:PluginMathJaxの内容をコピーして貼り付けます。

tiddlerタグ

systemConfig

tiddlerを保存して、ブラウザのページを再読み込みすればインストール完了です。


オフライン使用の場合

TiddlyWikiはオフラインで使えるWikiです。もちろんこのプラグインもオフラインで使用できます。

オフラインで使用するにはMathJaxをインストールする必要があります。


setp1

以下のリンクから MathJax をダウンロードして展開します。展開には7-ZipLhaplusなどが使えます。

MathJaxのダウンロード

現在(Aug 28, 2014)の最新版はMathJax-2.4 です。

ダウンロードしたファイル"MathJax-2.x-latest.zip"("x"にはMathJaxの最新バージョンの番号が入ります)を展開します。

展開したフォルダ名を "MathJax-2.x-latest" から "MathJax" にリネーム。

"MathJax"フォルダを、使用するTiddlyWikiファイル(memo.html 等)と同じフォルダにコピーします。

こんなかんじです
TiddlyWiki/
    memo.html           <== 使用する TiddlyWiki ファイル
    MathJax/            <== ここに MathJax フォルダをコピー
        config/
        docs/
        extensions/
        fonts/
        images/
        jax/
        localization/
        test/
        unpacked/
        MathJax.js
        *** etc. *** 

step2

PluginMathJaxのコードを修正してローカルファイルのフォルダを指定します。

  • Code内の「## Online use ##」項目の行頭に//を」追加してコメントアウトします。
  • つづいて「## Offine use ##」項目の、次の行頭のコメントを取り除きます。

このように変更します

// ## Offine use ##
mathJaxScript: "MathJax/MathJax.js?config=TeX-AMS_HTML",

// ## Online use ##
//mathJaxScript: "http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML",
// ## uncomment the following line if you want to access MathJax using SSL ##
//mathJaxScript: "https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML",

step3

TiddlyWikiを保存後に、ページを再読み込みすれば完了です。



使い方

簡単な使い方を、 PluginMathJax内のUsage項目に書いていますので参照してください。babooshka.tiddlyspot.comのPluginsへ

動作確認はWindows7 Firefox 31.0.0 で行いましたが、その他の環境では未確認です。

code:PluginMathJax

/***
|''Name:''|PluginMathJax|
|''Description:''|Enable LaTeX formulas for TiddlyWiki|
|''Author:''|babooshka|
|''Version:''|1.1.4|
|''Date:''|Aug 27, 2014|
|''Requires''|[[MathJax|http://www.mathjax.org/]]|
|''License:''|[[BSD open source license]]|
|''~CoreVersion:''|2.8.1|
|''Type''|plugin|

!! 変更履歴
!!! 1.1.4 Aug 27, 2014
* MathJax Secure Access CDN を最新のアドレス {{{https://cdn.mathjax.org}}} に修正。
!!! 1.1.3 Nov 22, 2013
* MathJaxメニュー、エラーメッセージの日本語表示化の設定。
* {{{\$}}}をエスケープして{{{$}}}を表示可能に。
!!! 1.1.2 Nov 09, 2013
* handlerのmatchTextに「&#36;」を追加。
!!! 1.1.1 Nov 06, 2013
* ロードイベントを修正(IE8対応)。
!!! 1.1.0 Oct 22, 2013
* オフライン使用できるように修正。
* autoNumberを有効にした。Tiddlerの更新時に式番号が再加算される問題が発生する、"resetEquationNumbers"で式番号とラベルをリセットするように修正。[[参考|https://groups.google.com/forum/#!searchin/mathjax-users/equationNumbers/mathjax-users/kzOOFw1qtxw/5ywOF87P-KEJ]]

ここに、参考にしたオリジナルのクレジットを記載します。
<<<
credit of original author
|''Name:''|MathJaxPlugin|
|''Description:''|Enable LaTeX formulas for TiddlyWiki|
|''Version:''|1.0.1|
|''Date:''|Feb 11, 2012|
|''Source:''|http://www.guyrutenberg.com/2011/06/25/latex-for-tiddlywiki-a-mathjax-plugin|
|''Author:''|Guy Rutenberg|
|''License:''|[[BSD open source license]]|
|''~CoreVersion:''|2.5.0|
<<<





----
!Description

* allows to use MathJax in TiddlyWiki Classic.
* added inline equation {{{$---$}}}.
* allows to use offline.
* an equation numbers are reset by loading of a tiddler when using autoNumber.





!Usage
!! inline equation {{{$---$}}}
{{{
This is an inline equation $P(E) = {n \choose k} p^k (1-p)^{ n-k}$ 
}}}
This is an inline equation $P(E) = {n \choose k} p^k (1-p)^{ n-k}$ 

!! inline equation {{{\(---\)}}}
{{{
This is an inline equation \(P(E) = {n \choose k} p^k (1-p)^{ n-k}\)
}}}
This is an inline equation \(P(E) = {n \choose k} p^k (1-p)^{ n-k}\)
 
!! displayed equation {{{$$---$$}}}
{{{
this is a displayed equation: 
$$
P(E) = {n \choose k} p^k (1-p)^{ n-k}
$$
}}}
this is a displayed equation: 
$$
P(E) = {n \choose k} p^k (1-p)^{ n-k}
$$

!! displayed equation {{{\[---\]}}}
{{{
this is a displayed equation: 
\[
\Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.
\]
}}}
this is a displayed equation: 
\[
\Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.
\]

!!equation numbers
{{{
\[
\begin{equation}
   E = mc^2
\end{equation}
\]
}}}
will be numbered, while
\[
\begin{equation}
   E = mc^2
\end{equation}
\]
\[
\begin{equation}
   E = mc^2
\end{equation}
\]
\[
\begin{equation}
   E = mc^2
\end{equation}
\]
{{{
\[
\begin{equation*}
   e^{\pi i} + 1 = 0
\end{equation*}
\]
}}}
won’t be numbered.
\[
\begin{equation*}
   e^{\pi i} + 1 = 0
\end{equation*}
\]

labeled equation and a reference.
{{{
In equation $\eqref{eq:sample}$, we find the value of an
interesting integral:
\[
\begin{equation}
  \int_0^\infty \frac{x^3}{e^x-1}\,dx = \frac{\pi^4}{15}
  \label{eq:sample}
\end{equation}
\]
}}}
In equation $\eqref{eq:sample}$, we find the value of an
interesting integral:
\[
\begin{equation}
  \int_0^\infty \frac{x^3}{e^x-1}\,dx = \frac{\pi^4}{15}
  \label{eq:sample}
\end{equation}
\]

!!!If you writing the dollar sign into a tiddler. To use escape the "$" sign for "\$" notation.
{{{
13‑inch starts at \$1299, 15‑inch starts at \$1999
}}}
13‑inch starts at \$1299, 15‑inch starts at \$1999





----
!When using local installation.
If you want to use offline. You need to install the "MathJax" to your PC.

!!How to local installation

setp1.
Download MathJax zip file. Extract zip file using any extract tool. For example, [[7-Zip|http://www.7-zip.org/]], [[Lhaplus|http://www.forest.impress.co.jp/library/software/lhaplus/]], etc.

Download MathJax from here.
* [[MathJax|http://docs.mathjax.org/en/latest/installation.html]]

Extract "MathJax-2.x-latest.zip" files. ("x" is any number of MathJax Current Version.) 
Rename the directory name to "MathJax" from "MathJax-2.x-latest".  
Copy the "MathJax" directory to your TiddlyWiki directory.

These files should be installed under the directory of TiddlyWiki.
like this
{{{
TiddlyWiki/
    memo.html           <== your TiddlyWiki file
    MathJax/            <== MathJax directory is here
        config/
        docs/
        extensions/
        fonts/
        images/
        jax/
        localization/
        test/
        unpacked/
        MathJax.js
        *** etc. *** 
}}}


step2.
Edit the code to specify the local file directory.
* Add comment mark {{{"//"}}} within an "online use" section.
* Remove comment mark {{{"//"}}} within an "offline use" section.
Fix this part of the code.
like this
{{{
    // ## Offine use ##
    mathJaxScript: "MathJax/MathJax.js?config=TeX-AMS_HTML",

    // ## Online use ##
    //mathJaxScript: "http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML",
    // ## uncomment the following line if you want to access MathJax using SSL ##
    //mathJaxScript: "https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML",
}}}


step3.
Save the TiddlyWiki. Reload the TiddlyWiki browser window.





----

!! Code
***/
//{{{
config.extensions.MathJax = {

    // ## Offine use ##
    //mathJaxScript: "MathJax/MathJax.js?config=TeX-AMS_HTML",

    // ## Online use ##
    //mathJaxScript: "http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML",
    // ## uncomment the following line if you want to access MathJax using SSL ##
    mathJaxScript: "https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML",

    // ## MathJax Configuration Options. MathJax.Hub.Config() ##
    HubConfig: {
        menuSettings: { locale: "en" },  // if setting Menu language "japanese" is { locale: "ja" };
        extensions: [ "tex2jax.js", "MathMenu.js", "MathZoom.js" ],
        TeX: {
            extensions: [ "AMSmath.js", "AMSsymbols.js", "noErrors.js", "noUndefined.js" ],
            noErrors: { disabled: true },
            noUndefined: { disabled: true },
            equationNumbers: { autoNumber: "AMS" } 
        },
        jax: [ "input/TeX", "output/HTML-CSS" ],
        tex2jax: {
            inlineMath: [ ['$','$'], ["\\(","\\)"] ],
            displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
            processEscapes: true,
            processEnvironments: true
        },
        "HTML-CSS": {
            scale: 100,
            undefinedFamily: "Consolas, 'メイリオ', verdana, STIXGeneral"
        },
        styles: { ".MathJax": { color:"blue"} },
        noErrors: {
            inlineDelimiters: [['$','$'], ["\\(","\\)"]],
            multiLine: true,    // false for TeX on all one line
            style: {
                "font-size":   "80%",
                "text-align":  "left",
                "color":       "green",
                "padding":     "1px 3px",
                "border":      "1px solid"
                // add any additional CSS styles that you want
                // ( be sure there is no extra comma at the end of the last item )
            }
        },
        noUndefined: {
            attributes: {
                mathcolor: "red",
                mathbackground: "#FFEEEE",
                mathsize: "90%"
            }
        }
    },

    displayTiddler: function( TiddlerName ) {
        config.extensions.MathJax.displayTiddler_old.apply( this, arguments );
        MathJax.Hub.Queue(
            [ "resetEquationNumbers", MathJax.InputJax.TeX ],
            [ "Typeset", MathJax.Hub ]
        );
    },

    loadScript: function(src, callback) {
        var elem = document.createElement('script');
        elem.type = 'text/javascript';
        elem.src = src

        if ( elem.addEventListener ) { 
            elem.addEventListener('load', callback, false);
        } else {
            elem.onreadystatechange = function() { // ## IE8 ##
                if ( elem.readyState in {complete: 1, loaded: 1 }) {
                    elem.onreadystatechange = null;
                    callback();
                }
            };
        }
        document.getElementsByTagName('head')[0].appendChild(elem);
    },

    install: function() {
        var _mathjax = config.extensions.MathJax;

        _mathjax.loadScript( _mathjax.mathJaxScript, function () {
            MathJax.Localization.setLocale("ja");  // ## setting locale "Japan" ##
            MathJax.Hub.Config( _mathjax.HubConfig );
            MathJax.Hub.Startup.onload();
            _mathjax.displayTiddler_old = story.displayTiddler;
            story.displayTiddler = _mathjax.displayTiddler;
        });
    }
};

config.formatters.push({
    name: "escapeSingleDollar",
    match: "\\\\\\$",
    handler: function(w) {
        createTiddlyElement( w.output, "span" ).innerHTML = "&#36;";
        w.nextMatch = w.matchStart+2;
    }
});

config.formatters.push({
    name: "mathJaxFormula",
    match: "\\\\\\[|\\$\\$|\\\\\\(|\\$",
    handler: function(w) {
        switch( w.matchText ) {
            case "\\[": // displayed equations
                this.lookaheadRegExp = /\\\[((?:.|\n)*?)(\\\])/mg;
                break;
            case "$$": // displayed equations
                this.lookaheadRegExp = /\$\$((?:.|\n)*?)(\$\$)/mg;
                break;
            case "\\(": // inline equations
                this.lookaheadRegExp = /\\\(((?:.)*?)(\\\))/mg;
                break;
            case "$": // inline equations
                this.lookaheadRegExp = /\$((?:.)*?)(\$)/mg;
                break;

            default:
                break;
        }
        this.lookaheadRegExp.lastIndex = w.matchStart;
        var lookaheadMatch = this.lookaheadRegExp.exec( w.source );

        if( lookaheadMatch && lookaheadMatch.index == w.matchStart ) {
            createTiddlyElement( w.output, "span", null, "TW-math", lookaheadMatch[0] );
            w.nextMatch = this.lookaheadRegExp.lastIndex;
        }
    }
});

config.extensions.MathJax.install();
//}}}

0 件のコメント :