$\let\divisionsymbol\div \let\oldRe\Re \let\oldIm\Im$

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>
Copy

これで 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>
Copy

こうすれば、$...$\(...\) でインライン数式を表し、\[...\] でディスプレイ数式を表すことができます。例えば、$\sin x$ と書けば $\sin x$ と表示され、\[\sin x\] と書けば\[\sin x\]と表示されます。ドル記号はアメリがではよく使われるので問題が起こるかもしれませんが、日本では使用頻度は低いので、デメリットよりもメリットの方が大きいでしょう。より詳しい内容は、公式サイトの Getting Started with MathJax Components に載っています。

表示モードを変える

先ほども書きましたが、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}
Copy

この結果は次のようになります。 \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 }
Copy

d の部分をローマン体にしているため、少しめんどくさい書き方です。しかし、physics 拡張の dv コマンドを使えば、次のように書くと同じ表示になります。

\dv{y}{x}
Copy

かなりシンプルになりましたね。dv は derivative(微分)に由来しています。このように、拡張を使えば、コマンドがシンプルになることがあります。

拡張には、自動で呼び出されるものと、手動で呼び出さないといけないものがあります。拡張を呼び出すには、2つの方法があります。1つは、MathJax の設定を変更する方法、もう1つは require を使って、拡張を呼び出す方法です。このサイトでは、後者を紹介しています。 physics 拡張は自動では呼び出されないので、先ほどの微分の式であれば、次のようにします。

\require{physics} \dv{y}{x}
Copy

このサイトでは、初期状態では呼び出されない拡張を使う場合は、毎回 require を使っていますが、拡張は一度呼び出せば、そのページの他の部分でもう一度呼び出す必要はありません。\require{physics} と書けば、以後、そのページでは \dv{y}{x} と書くと正しく表示されます。

MathJax でサポートされている拡張の一覧は、公式サイトの The TeX/LaTeX Extension List に載っています。

拡張によって既存コマンドが上書きされる問題に対応する

先ほど、拡張について書きましたが、たまに、拡張を呼び出したために既存コマンドが上書きされてしまうことがあります。例えば、割り算(division)の記号を表す \div コマンドというものがあります。通常であれば、 $\divisionsymbol$ と表示されるのですが、physics 拡張を呼び出した後に使うと、次のようになってしまいます。\[ \require{physics} \div \]これは、物理で発散(divergence)を表すときに使われるものです。division の div が、divergence の div に変わってしまったということ、\div コマンドの内容が上書きされてしまったということです。

拡張を呼び出したために既存コマンドが上書きされてしまうと、もとのコマンドは呼び出せません。これだと困ることもあります。この問題を解決するには、拡張を呼び出す前に、もとのコマンドをコピーしておく方法があります。

let コマンドを使うと、コマンドの内容を別のコマンドにコピーすることができます。例えば、次のように書きます。

\let\divisionsymbol\div
Copy

これを \require{physics} の前に書けば、もとの \div の内容を \divisionsymbol にコピーできます。コピー後のコマンドは、自分で好きな名前を付けることができますが、他のコマンドと被らないようにしたほうがいいでしょう。旧コマンドをコピーしておけば、\require{physics} の後でも、\divisionsymbol と書けば $\divisionsymbol$ と表示されるようになります。拡張は便利な機能ではありますが、副作用が出る可能性もあるので注意が必要です。

新しいコマンドを作る

MathJax には便利なコマンドがいくつもありますが、自分専用の新しいコマンドを作りたくなることもあります。例えば、総和を表す $\sum$ を書くときに、インラインでもディスプレイ表示にしたいとしましょう。1か所なら、\displaystyle をつければいいのですが、何か所もあると毎回書くのは面倒です。こういう場合に、もっと短い名前をつければ便利になります。

新しいコマンドを作る場合は、def コマンドを使います。例えば、次のように書きます。 $\def\dsum{\displaystyle \sum}$

\def\dsum{\displaystyle \sum}
Copy

こう書いた後は、\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}}
Copy

#1 などが引数を表しています。こう書いた後は、\dsum{1}{n} と書いただけで、 $\dsum{1}{n}$ と表示されます。#2 の前後を波かっこで囲んでいることに注意しましょう。この波かっこがなければ、\dsum{1}{10} のように、引数が2文字以上の場合に表示が崩れてしまいます。