前回の記事で数式を載せてみたんですが、 このブログでOctopressの中で使えるようにした方法について。
MathJax
MathJaxはJavaScriptを使って HTMLページ内のLaTeXのような記述方法で書かれた数式部分をCommonHTMLまたはSVG形式で表示してくれるツールです。
使い方は
1 2 |
|
の2つを読み込んでおいて、ページ内で\(
/\)
で囲った部分が文中表示で数式に変換され、
$$
/$$
または\[
/\]
で囲った部分が独立した行として数式に変換されます
1。
LaTeX的な$
で囲った部分を文中数式にするには
1 2 3 4 5 6 7 |
|
と言った設定を書いておくことで有効になります。
ミニマムな例は以下のJS Binで見てみることが出来ます。
JS Bin - Collaborative JavaScript Debugging
Kramdownでの運用
Kramdownで使う際には記号の変換が入るので少し注意が必要です。
にあるようにKramdownはMathJaxをサポートしているとのことですが、
実際にKramdownで行っていることは$
などの記号を良しなに変形することを行っているだけです。
それらを見越してMarkdownを書いて、さらに上のスクリプト2行を加えればきれいな数式のウェブページを作ってくれます。
ですが、これがちょっとよくわからない変換になっていて
$~$
: そのまま。(MathJaxのデフォルトだと何もしない)$$~$$
: 独立行だと\[~\]
に変換。文中にあると\(~\)
に変換。- MathJaxを通すと独立の場合は独立行に、文中だと文中数式に。
\$$~$$
: 独立行だと\(~\)
、文中だと$$~$$
に。- MathJaxを通すと独立行は文中式に、文中だと独立行に。
\$\$~$$
:$$~$$
に。独立行数式に。\$$~\$$
: 独立行だと\(~\\)
、文中だと$$~$$
。\$\$~\$\$
:$$~$$
に。\(~\)
:\
が消える(MathJaxには通らない)。\[~\]
:\
が消える(MathJaxには通らない)。
といった変換になっています。
(Kramdown 2.4.0でgemで入れたものを使って$ kramdown test.md
のように直接変換してテスト。)
上のドキュメントでは\$$~$$
は文中数式になる、とのことなんですが、
確かにそれだけ1行に書いておけば、独立行数式のように中寄せされずに通常分扱いで左端からはじまりますが、
実際に文中に入れ込むと$$~$$
に変換されてしまい予期せぬ改行になってしまいます。
また、\$\$~\$\$
はそのままそれを出力するとのことですが、そうはならず
MathJaxで変換される状態になってしまいます。
という状態なので、基本的に独立行数式でも文中数式でも$$~$$
で書いておけば
KramdownがMathJax用に変換してくれるということがわかります。
1 2 3 4 5 6 7 |
|
とすれば、
test
\[x_1\]test
XXX \(x_2\) XXX
といった感じに表示されます。
逆にそれ以外の記号は変なくせがあるので使わないほうが良さそうです。
また、$~$
を変換するようにMathJaxのオプションを追加する事もできますが、
$
記号が同一文中に2つ出てくることは普通の文でもありえるので避けておいた方が良いです。
Octopress/Jekyllでの運用
簡単には適当にテンプレートのhead部分とかに
1 2 3 4 5 6 |
|
を加えておけばすべてのページで読み込ますことが出来ます。
ただ、ほとんどのページで使わない場合には無駄なので、
例えばpage
というレイアウトを記事のテンプレートとして使う場合、
head
のテンプレート部分で、
1 2 3 4 |
|
としておいて、記事のMarkdownファイルの戦闘に書くYAML部分で、
1 2 3 4 5 |
|
とmath
を有効にしてあげればその記事だけに上のスクリプトが読み込ませることが出来ます。
Jekyll Spaceship
Jekyll SpaceshipはJekyll用のプラグインで 様々な変形をひとまとめに管理して有効に出来るツールです。
この中に
mathjax-processor
というものがあり、
Octopress/Jekyllの設定ファイルである_config.ymlの中で
1 2 3 4 5 6 |
|
のようにプラグインを読み込むと$~$
のような文字列が文章中にあれば
自動で上のスクリプトを読み込むようにHTMLに書き込んでくれます。
mathjax-processor
ではデフォルトで、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
といった設定になっていて、MathJaxのデフォルト値とは違い、$~$
もMathJaxで変換するようになっています。
これを入れるとKramdownの変形とは違い、
$~$
: そのまま。$$~$$
: そのまま。\$$~$$
: そのまま。\$\$~$$
:$$~$$
に。\$$~\$$
:\$$~$$
に。\$\$~\$\$
:$$~$$
に。\(~\)
:\
が消える(MathJaxには通らない)。\[~\]
:\
が消える(MathJaxには通らない)。
で、何故かKramdownだと変化をさせないコードブロック中の$$
を\$\$
に変更してしまうことがあります。
$
1つだとエスケープはつきません。
上の様にKramdownの変更とはちょっと変更になっていて、tex
に指定した記号に関して
処理を施しているようで、それがコードブロックまでちょっと悪さをしている模様。
$$
を下手に変換させないために
1 2 3 4 5 6 |
|
としてみると、コードブロック内の$$
は変換されなくなります。
また、$$~$$
の部分は、もとのKramdownと同じ様に変換され、出力としてMathJaxが読めるようになるので
結果的に数式に変換されます。
また、$$~$$
の記号だけがあってもMathJaxのスクリプトを読み込む設定がHTMLに書き込まれます。
ただ、これは直感に合わないので、おそらく予期してないものだと思います。
このプラグインはKramdown用、というわけではなく、
Kramdownでやっている$
関連の処理はMarkdownの基本的な処理にはないものなので
この部分がconflictしてしまっているのかと。
なので、Kramdownを使っている場合にはそういう物だと思って、
config.tex
に関しては上の様に設定し、
独立行でも文中数式でも
$$~$$
を使っておけば上のmath
オプションを使ったときと同じ様に出来るように見えます。
ちょっと完全に副作用がないかは確認できてないのと、数式を書くことはそれほどないと思うので、
今は一旦math
オプションを使った方法でやっていこうと思ってます。
Jekyll Spaceshipには数式以外にも、テーブルのcolumnをまとめて表示できる機能や、PlantUML/Mermaidといった図の表示などもあって1つのプラグイン入れるだけで使えるのは便利だな、とは思うので、 また必要そうなら試してみようと思います。
-
1つ目はIEなどでの動作を保証するものなのでもう殆ど必要ないかも知れませんが一応。
Chromeとか新しい機能がちゃんと入っているブラウザで上のURLを開いてみると詳細は
min
を消したものを見て、と言われますが、min
を消した https://polyfill.io/v3/polyfill.min.js を見てみるとNo polyfills needed for current settings and browser
というコメントだけが見れます。 ↩