MathJaxを使い始める
このサイトは、MathJax (LaTeX)で数式を書くためのコマンドを紹介し、簡単にコピーできるサイトです。もともと、数式をきれいに書いたり、数学の論文を書くための $\TeX$ (テフ)というソフトがありますが、MathJaxは、この $\TeX$ の機能をウェブ上で使うためのツールです。
MathJaxの始め方
MathJax を使い始める方法は、MathJax のバージョンによって少しずつ異なります。この記事を書いている2020年3月の時点では、head
タグ内に、以下のように書くと、MathJax を使えるようになります。
<script type="text/javascript" id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"> </script>
これで MathJax を使えるようになるのですが、便利な設定も同時に行ってしまいましょう。MathJax では、数式の表し方は2通りあります。文中に埋め込んで表示するインライン数式と、改行して表示するディスプレイ数式です。例えば、 $\sin$ はインライン数式で、\[ \sin \]はディスプレイ数式です。初期状態では、インライン数式を使うには、$$ ... $$
というようにドル記号2つでコマンドを囲う必要があります。 $\TeX$ ではドル記号1つで囲めばいいので、MathJax でも同じようにしたいですね。そういう場合は、次のように設定します。
<script> MathJax = { tex: { inlineMath: [['$', '$'], ['\\(', '\\)']] } }; </script> <script type="text/javascript" id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js"> </script>
こうすれば、$...$
や \(...\)
でインライン数式を表し、\[...\]
でディスプレイ数式を表すことができます。例えば、$\sin x$
と書けば $\sin x$ と表示され、\[\sin x\]
と書けば\[\sin x\]と表示されます。ドル記号はアメリカではよく使われるので問題が起こるかもしれませんが、日本では使用頻度は低いので、デメリットよりもメリットの方が大きいでしょう。より詳しい内容は、公式サイトの Getting Started with MathJax Components に載っています。
もし、MathJax の表示がおかしい場合は、バージョンを古いものに戻すとうまくいく場合があります。バージョンを指定して呼び出すには次のようにします。
<script type="text/javascript" id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3.0.0/es5/tex-chtml.js"> </script>
mathjax@
の後に、バージョンを指定しましょう。一番はじめのように 3 だけを書いた場合は、3 から始まる最新のバージョンが呼び出されるようになります。
表示モードを変える
先ほども書きましたが、MathJax には、文中に数式を埋め込んで表示するインライン数式と、改行をして表示するディスプレイ数式があります。一般に、インライン数式は文字が小さめで、ディスプレイ数式は文字が大きくなります。例えば、分数をインライン表示すると $\frac{1}{2}$ となります。ディスプレイ表示の\[ \frac{1}{2} \]と比べると、大きさが違いますね。どちらも \frac{1}{2}
と書いているのですが、表示モードが違うだけでこのような差が生まれます。
文中であっても、ディスプレイ数式のように数式を大きく表示したい場合があります。その場合は、\displaystyle
をつけます。例えば、$\displaystyle \frac{1}{2}$
と書けば $\displaystyle\frac{1}{2}$ と表示されます。
コマンドによっては、d
を付けるだけでディスプレイ表示になるものもあります。例えば、分数の場合は \dfrac{1}{2}
と書けば $\dfrac{1}{2}$ となります。
環境を使う
$\TeX$ では、いくつかの文や数式をまとめて意味を持たせる「環境」というものがあります。MathJax でも、すべてではありませんが、いくつかの環境を使うことができます。
例えば、複数行にわたる数式を書きたい場合は、eqnarray
環境を使います。環境を使うには、数式の前後を \begin{...}
と \end{...}
で囲みます。波かっこの中は環境名です。例えば、次のように書いたとしましょう。
\begin{eqnarray} 2\times (4-1) &=& 2\times 3 \\ &=& 6 \end{eqnarray}
この結果は次のようになります。
\begin{eqnarray}
2\times (4-1)
&=&
2\times 3 \\
&=&
6
\end{eqnarray}
&は位置をそろえるために使います。\
を2つ書くと改行になりますが、位置を揃えないと、2つ目のイコールが左端に現れたり、1行目の式と2行目の式が両方とも中央に来てしまったりします。
MathJax で使える環境は他にもあります。表を書くための array
環境、行列を書くための pmatrix
環境、場合分けを書くための cases
環境などです。このサイトでもいくつか紹介しています。MathJax でサポートされているすべての環境は、公式サイトの Supported TeX/LaTeX commands #Environments に載っています。
拡張を使う
$\TeX$ では、新たな機能を追加するために「パッケージ」というものがあります。MathJax でも、すべてではありませんが、いくつかのパッケージを使うことができます。なお、MathJax では、パッケージのことを拡張と呼んでいます。厳密にはパッケージと拡張は異なるものですが、ほぼ同じと考えてもいいでしょう。
例えば、物理でよく使う数式をまとめた physics
拡張があります。この拡張を使えば、微分、ベクトル、行列などで、コマンドがシンプルになったり、複雑な式を書くことができるようになります。一つ、例を見てみましょう。微分を表す次のような式を書くとします。\[ \frac{ \mathrm{ d } y }{ \mathrm{ d } x } \]この式を書くには、次のようにします。
\frac{ \mathrm{ d } y }{ \mathrm{ d } x }
d の部分をローマン体にしているため、少しめんどくさい書き方です。しかし、physics
拡張の dv
コマンドを使えば、次のように書くと同じ表示になります。
\dv{y}{x}
かなりシンプルになりましたね。dv
は derivative(微分)に由来しています。このように、拡張を使えば、コマンドがシンプルになることがあります。
拡張には、自動で呼び出されるものと、手動で呼び出さないといけないものがあります。拡張を呼び出すには、2つの方法があります。1つは、MathJax の設定を変更する方法、もう1つは require
を使って、拡張を呼び出す方法です。このサイトでは、後者を紹介しています。 physics
拡張は自動では呼び出されないので、先ほどの微分の式であれば、次のようにします。
\require{physics} \dv{y}{x}
このサイトでは、初期状態では呼び出されない拡張を使う場合は、毎回 require
を使っていますが、拡張は一度呼び出せば、そのページの他の部分でもう一度呼び出す必要はありません。\require{physics}
と書けば、以後、そのページでは \dv{y}{x}
と書くと正しく表示されます。
MathJax でサポートされている拡張の一覧は、公式サイトの The TeX/LaTeX Extension List に載っています。
拡張によって既存コマンドが上書きされる問題に対応する
先ほど、拡張について書きましたが、たまに、拡張を呼び出したために既存コマンドが上書きされてしまうことがあります。例えば、割り算(division)の記号を表す \div
コマンドというものがあります。通常であれば、 $\divisionsymbol$ と表示されるのですが、physics
拡張を呼び出した後に使うと、次のようになってしまうことがあります。\[ \boldsymbol{\nabla\cdot} \]これは、物理で発散(divergence)を表すときに使われるものです。division の div が、divergence の div に変わってしまったということ、\div
コマンドの内容が上書きされてしまったということです。
拡張を呼び出したために既存コマンドが上書きされてしまうと、もとのコマンドは呼び出せません。これだと困ることもあります。この問題を解決するには、拡張を呼び出す前に、もとのコマンドをコピーしておく方法があります。
let
コマンドを使うと、コマンドの内容を別のコマンドにコピーすることができます。例えば、次のように書きます。
\let\divisionsymbol\div
これを \require{physics}
の前に書けば、もとの \div
の内容を \divisionsymbol
にコピーできます。コピー後のコマンドは、自分で好きな名前を付けることができますが、他のコマンドと被らないようにしたほうがいいでしょう。旧コマンドをコピーしておけば、\require{physics}
の後でも、\divisionsymbol
と書けば $\divisionsymbol$ と表示されるようになります。拡張は便利な機能ではありますが、副作用が出る可能性もあるので注意が必要です。
新しいコマンドを作る
MathJax には便利なコマンドがいくつもありますが、自分専用の新しいコマンドを作りたくなることもあります。例えば、総和を表す $\sum$ を書くときに、インラインでもディスプレイ表示にしたいとしましょう。1か所なら、\displaystyle
をつければいいのですが、何か所もあると毎回書くのは面倒です。こういう場合に、もっと短い名前をつければ便利になります。
新しいコマンドを作る場合は、def
コマンドを使います。例えば、次のように書きます。 $\def\dsum{\displaystyle \sum}$
\def\dsum{\displaystyle \sum}
こう書いた後は、\dsum
と書いただけで、\displaystyle \sum
を書いたことになります。\dsum_{k=1}^n
と書けば、 $\dsum_{k=1}^n$ となるので、ディスプレイ表示なっていることがわかります。よく使う長いコマンドは、新しいコマンドにしておくと便利です。
また、引数をとるコマンドを作ることもできます。先ほどの総和の例で、「 $k=$ 」の後と、「 $\sum$ 」の上にくる数字を引数でとるようにするには、次のように書きます。 $\def\dsum #1#2{\displaystyle \sum_{k=#1}^{#2}}$
\def\dsum #1#2{\displaystyle \sum_{k=#1}^{#2}}
#1
などが引数を表しています。こう書いた後は、\dsum{1}{n}
と書いただけで、 $\dsum{1}{n}$ と表示されます。#2
の前後を波かっこで囲んでいることに注意しましょう。この波かっこがなければ、\dsum{1}{10}
のように、引数が2文字以上の場合に表示が崩れてしまいます。