Web技術の進歩とその貢献者に感謝を込めて。
MathJaxの使い方
公開日:2014年9月7日
更新日:2017年5月8日
執筆時点のバージョン:MathJax v2.7.1
■目次
- MathJaxとは何ぞや?
- 早速使ってみよう!
- MathJaxの読み込み
- インライン数式とディスプレイ数式
- 簡単な式の例
- カスタマイズする
- ディスプレイ数式を左寄せする
- タグ(式番号)を左側につける
- 自動ナンバリング
- タグを[〜]で表示する
- 数式用フォントあれこれ
- 数式を書く
- 不等号についての注意
- マクロ機能
- タグ(式番号)
- 関連リンク集
MathJaxとは何ぞや?
MathJaxは高品質な数式の整形・表示を実現する、オープンソースのJavaScriptライブラリです。すべてのモダンブラウザ(モバイル版含む)で動作します。クライアント側の事前準備(プラグインのインストール、ブラウザの設定、etc.)は一切不要です。
MathJaxは数式用のWebフォントを使って数式をタイプセットします。画像化する方式と違いテキストベースなので、拡大したり高解像度で印刷しても鮮明さが損なわれません。また、検索性の高さなどのメリットがあります。
- MathJax
- mathjax/MathJax (GitHub)
- LICENSE
MathJaxの配布ライセンスはApache License, Version 2.0です。ここではライセンスについての説明は割愛……。
早速使ってみよう!
手っ取り早いのは、MathJax CDNサービス(cdn.mathjax.org)から最新版を読み込む方法です。2017年4月をもって廃止に。
[2017年5月8日追記]廃止案内で推奨されているcdnjs(cdnjs.cloudflare.com)に書き換えました。5月8日現在、cdn.mathjax.orgはcdnjsにリダイレクトされて一見問題なく見えますが、これは一時的な措置(temporary stopgap)ということなので、速やかに移行をおすすめします!
この場合、設置作業の手間がかからないのに加えて、バグ修正や実行速度の改善などを迅速に反映させられます。(自前のスペースに設置する方法もあります。)
MathJaxの読み込み
まず、HTML文書の<head>...</head>内に次のコードを追加します。
<script type="text/javascript" async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_CHTML"> </script>
configパラメータの「TeX-AMS_CHTML」は、TeX形式で入力(認識)して、HTML形式で出力(表示)することを表します。
TeX以外にもMathMLとAsciiMathの入力形式があります。すべて認識させる場合は「TeX-MML-AM_CHTML」、その他の設定は設定ファイル一覧をご覧ください。
MathJax v2.6から、従来のHTML-CSS出力より4割ほど高速らしいCommonHTML出力が推奨となりました。見栄えの一貫性でも改善があるので、古い「TeX-AMS_HTML」から「TeX-AMS_CHTML」に変えるといいかもしれません。(Webフォントを変更できないのが唯一のデメリット?)
なお、読み込みはHTTP接続も可能ですが、近頃はHTTPSの方が速いという話もあるのでHTTPS接続をおすすめします。
インライン数式とディスプレイ数式
次に、文書内の数式部分を\(...\)または\[...\]で囲って指定します。UTF-8など「半角\」と「半角¥」を区別する文字コードのときは「半角\」が正解。
\(...\)で囲った部分はインライン数式、\[...\]で囲った部分は別行立てのディスプレイ数式として認識されます。
初期設定では$...$方式のインライン数式は使えません。英文中にドル記号がよく表れるのに配慮したとのことですが、「不便でストレスがたまる!」という場合は、次のように設定コードを追加して有効化できます。(ドル記号は\$のようにエスケープする。)
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {
inlineMath: [ ['$','$'], ['\\(','\\)'] ],
processEscapes: true
}
});
</script>
<script type="text/javascript" async
src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_CHTML">
</script>
簡単な式の例
例)オイラーの公式
\[
e^{i\theta} = \cos\theta + i\sin\theta
\]
例)式にタグをつける
\[
a + b = c + d \tag{A}
\]
カスタマイズする
MathJaxをカスタマイズするコードの例は次の通り。
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {
inlineMath: [ ['$','$'], ['\\(','\\)'] ],
processEscapes: true
},
TeX: {
equationNumbers: {
autoNumber: "AMS"
}
}
});
</script>
この「text/x-mathjax-config」ブロックは、MathJaxの読み込みより前に置く約束です。そうしなければMathJax起動時に内容が適用される保証はありません。
以下、いくつか設定オプションを挙げていきます。
ディスプレイ数式を左寄せする
MathJax.Hub.Config({
displayAlign: "left"
});
タグ(式番号)を左側につける
MathJax.Hub.Config({
TeX: {
TagSide: "left",
}
});
自動ナンバリング
MathJax.Hub.Config({
TeX: {
equationNumbers: {
autoNumber: "AMS"
}
}
});
タグを[〜]で表示する
MathJax.Hub.Config({
TeX: {
equationNumbers: {
formatTag: function (n) {return '['+n+']'}
}
}
});
数式用フォントあれこれ
執筆時点のバージョン(v2.6)では、CommonHTML出力は数式用フォントの変更に対応していません。そのうち対応すると思いますが、それまでは従来のHTML-CSS出力かSVG出力を選択することになります。
(HTML-CSS出力は、読み込みでconfigパラメータに「TeX-AMS_HTML」を指定するとできます。)
例)ローカルのSTIXフォントを優先、WebフォントもSTIX
MathJax.Hub.Config({
"HTML-CSS": {
availableFonts: ["STIX"],
preferredFont: "STIX",
webFont: "STIX-Web"
}
});
例)「数学ガール」でお馴染みのEulerフォント
MathJax.Hub.Config({
"HTML-CSS": {
availableFonts: [],
preferredFont: null,
webFont: "Neo-Euler"
}
});
数式を書く
不等号についての注意
数式内の不等号がHTMLタグの開始・終了に誤解釈(否、正しく解釈)されないようにしましょう。
例)これはNG
$a<b$
HTMLの文字参照(<、>)で書いてもOKですが、定義済みのマクロ(\lt、\gt)を使って書くとすっきりします。
$a \lt b$
マクロ機能
マクロを定義するには次の通り。
MathJax.Hub.Config({
TeX: {
Macros: {
RR: '{\\bf R}',
sinc: '\\mathop{\\rm sinc}',
abs: ['\\lvert #1 \\rvert', 1]
}
}
});
引き数つきのマクロ(上のコードでは\abs)を定義するときは、[value, n]のようにリストの形で引き数の個数をあわせて記述します。
(JavaScriptの文法上、文字列リテラルに含まれる\はエスケープが必要。)
例)マクロを使用する
\[
\sinc x = \frac{\sin x}{x}
\]
\[
\abs{a + b} \leq \abs{a} + \abs{b}
\]
タグ(式番号)
式の自動ナンバリングは初期設定で有効になっていないので、必要に応じて適宜有効化しましょう。
式番号がつくのはequation環境やalign環境などで、\[...\]は対象外です。
MathJax.Hub.Config({
TeX: {
equationNumbers: {
autoNumber: "AMS"
}
}
});
これでalign環境での数式に(1), (2)...と式番号が振られます。
例)align環境の場合
\begin{align}
\overline{x} &= \frac{x_1 + x_2 + \cdots + x_n}{n} \\
&= \frac{1}{n} \sum_{k = 1}^n x_k
\end{align}
例)\notagで式番号を消去、\tagで上書き
\begin{align}
\overline{x} &= \frac{x_1 + x_2 + \cdots + x_n}{n} \notag \\
&= \frac{1}{n} \sum_{k = 1}^n x_k \tag{$*$}
\end{align}
関連リンク集
- MathJax Documentation
- MathJaxの使い方(黒木玄氏による解説、ところどころ古い部分あり)
- TeX Commands available in MathJax(対応コマンド一覧)
- Short Math Guide for LaTeX(PDF注意)