レッスン 10

数式

このレッスンではLaTeXの数式モードを紹介します。インライン数式とディスプレイ数式の作り方、amsmathパッケージの提供する拡張、そして数式内のフォントを変更する方法について学びます。

複雑な数式を組版できるということは、LaTeXの最も大きな強みの1つです。いわゆる「数式モード」の中では、数式を論理的にマークアップすることができます。

数式モード

数式モードの中では、スペースは無視されて各文字間のスペーシングは(多くの場合)自動で適切に調整されます。数式モードには、大きく2つの種類があります:

\documentclass[dvipdfmx]{jlreq}
\begin{document}
インライン数式を含む文:$y = mx + c$。
インライン数式を含む2つ目の文:$5^{2}=3^{2}+4^{2}$。

ディスプレイ数式を含む第2段落。
\[
  y = mx + c
\]
ディスプレイ数式の後に続く段落はどのように組まれるか。
\end{document}

もしかすると「LaTeX風の」数式記法を他の場所(例えばウェブページのMathJaxシステムなど)で見かけたことがあるかもしれません。こうしたシステムはしばしばLaTeX記法によく似た変種を受け付けるようにできていますが、その多くは「背後のシステムとして」本物のLaTeXを使用しているわけではありません。

このチュートリアルでこれから見ていくコード例はすべて「正しい」LaTeXの数式の例です。もし他のシステムへの入力として用いている記法がここで出てくるコード例とは違うものであったという場合は、そのシステムは本物のLaTeXを使用していない可能性があります。

インライン数式モードと数式の記法

すでにコード例の中に出てきたように、インライン数式モードはドル記号($ ... $)で挟むことによって表現されます。また\( ... \)という記法を使うことも可能です。単純な式であれば特別なコマンドを使用することなく入力することができ、出力を見ると自動的に適切なスペーシングがなされ、また文字がイタリック体で表示されているのがわかりますね。

インライン数式モードでは、段落内において行間の調整になるべく影響を与えることがないように、垂直方向のサイズ(高さ)が制限されています。

なお数式はすべて必ず数式モードを使用して記述されるべきであることを覚えておいてください。このルールは、たとえ数式がたった1文字である場合にも適用されます(したがって... 2 ...ではなく... $2$ ...のように記述します)。そうでないと、マイナス記号を表示するために数式モードが必要になった際に... $-2$ ...のように記述した箇所だけ数字のフォントがテキストにおける数字と異なってしまう可能性があります(実際に異なるフォントが使用されるかどうかは文書クラスに依存します)。また数式モードを構成する記号が他所からコピーしてきたプレーンテキストに含まれている場合がある(例えばお金の単位を表すドル記号$やファイル名に現れる_。これらはLaTeXではそれぞれ\$\_を使って記述しなければなりません)ことにも注意してください。

上付きや下付きの添字はそれぞれ^_を用いることで簡単に記述することができます。

\documentclass[dvipdfmx]{jlreq}
\begin{document}
上付きの添字$a^{b}$と下付きの添字$a_{b}$。
\end{document}

(もしかすると上付きや下付きの添字の記述でブレースを省略している例を見たことがあるかもしれませんが、それは正式な記法ではなく場合によっては問題を引き起こします。常にブレースを書くようにしましょう。)

数式モードで使用できる特別なコマンドはたくさんあります。こうしたコマンドの中にはとても簡単なものもあります。例えば正弦関数を表す\sinや対数関数の\log、それからギリシャ文字のシータ\thetaは単純ですね。

\documentclass[dvipdfmx]{jlreq}
\begin{document}
いくつかの数式:$y = 2 \sin \theta^{2}$.
\end{document}

ここでLaTeXで標準的に用意されている数式モードコマンドをすべて網羅することはできませんが、インターネット上にはこれらを一覧にしたものがいくつもあります。数式モードで使用できる記号とそのコマンドはDetexifyで検索することができます。

ディスプレイ数式

ディスプレイ数式の中でも、インライン数式とまったく同じコマンドを使用することができます。ディスプレイ数式は通常は中央揃えで表示され「段落内で」より大きな数式を記述するためのものです。なおディスプレイ数式モードは、数式の内部で段落を終了することを許容しないので、ディスプレイ数式の中に空行を作ることがないようにしてください。

ディスプレイ数式は段落の先頭に置かれるべきではありません。つまり、ディスプレイ数式の直前が空行であるということはあってはなりません。また複数行のディスプレイ数式を書きたい場合も、ディスプレイ数式モードを連続して使用してはいけません(これをやると、スペーシングがおかしくなってしまいます)。そのような場合は、amsmathパッケージのalign環境(後述)など、複数行用のディスプレイ数式環境を使用してください。

ディスプレイ数式は、実用的には例えば積分を記述するのに有用です。

\documentclass[dvipdfmx]{jlreq}
\begin{document}
より大きな数式を含む段落
\[
\int_{-\infty}^{+\infty} e^{-x^2} \, dx
\]
\end{document}

ここで、積分の区間を表すのに下付き・上付き添字の記法が用いられていることに注意してください。

また、上のコード例では手動でスペース調整を行っている箇所があります。それは\,のところです。このコマンドによりdxの前に小さなスペースを追加し、その部分が乗算を表すように見えないようにしています。

数式はしばしば番号付きで記載されますが、式番号を与えたい場合はequation環境を使用します。この環境を用いて、上記と同じ例を試してみましょう。

\documentclass[dvipdfmx]{jlreq}
\begin{document}
より大きな数式を含む段落
\begin{equation}
\int_{-\infty}^{+\infty} e^{-x^2} \, dx
\end{equation}
\end{document}

式番号は自動的に計算されます。上の例では単一の数字になっているはずですが、場合によってはセクション番号が前置され「(2.5)」のように与えられる場合もあります(これはセクション2の5つ目の番号付き数式であることを意味します)。数式番号のフォーマットは各文書クラスによって定義されているので、ここではこれ以上は説明しません。

amsmathパッケージ

数式で用いられる表記法はとても複雑で、LaTeX本体の機能だけではそのすべてに対応することはできません。amsmathパッケージはLaTeXの数式関連の機能を大幅に拡張するものです。amsmathのユーザガイドには、このレッスンよりも遥かに多くのコード例が掲載されています。

\documentclass[dvipdfmx]{jlreq}
\usepackage{amsmath}

\begin{document}
$n, k\geq 0$について以下の再帰式を解きなさい。
\begin{align*}
  Q_{n,0} &= 1   \quad Q_{0,k} = [k=0];  \\
  Q_{n,k} &= Q_{n-1,k}+Q_{n-1,k-1}+\binom{n}{k}, \quad\text{for $n$, $k>0$}
\end{align*}
\end{document}

align*環境は、表組みのように、複数行の数式をアンパサンド&の位置で揃えます。上のコード例では少しスペースを入れるのに \quad が用いられ、また数式モードの中で普通のテキストを挿入するために\textが使われています。さらに二項係数を表すのに\binomコマンドも使いました。

またalign*環境を使用したので、数式に番号が付いていないことに注意してください。ほとんどの数式環境はデフォルトで式番号を付与し、スター付きの変種(名前の末尾に*が付くもの)では番号が付されないようになっています。

amsmathパッケージは他にも便利な環境を提供しています。その一例として、行列を書くmatrix環境が挙げられます。

\RequirePackage{plautopatch}
\documentclass[dvipdfmx]{jlreq}
\usepackage{amsmath}
\begin{document}
AMSパッケージによる行列。
\[
\begin{matrix}
a & b & c \\
d & e & f
\end{matrix}
\quad
\begin{pmatrix}
a & b & c \\
d & e & f
\end{pmatrix}
\quad
\begin{bmatrix}
a & b & c \\
d & e & f
\end{bmatrix}
\]
\end{document}

数式モードのフォント

通常のテキストと異なり、数式モード内でのフォント変更は具体的な(数学的な)意味の重要な違いを生むことになります。そのため、数式モード内ではフォント変更はしばしば明示的に行われます。関連するコマンドを以下に列挙します。

これらはそれぞれラテン文字(の文字列)を引数に取ります。例えば、行列は次のように書くことができます。

\documentclass[dvipdfmx]{jlreq}
\begin{document}
行列$\mathbf{M}$。
\end{document}

数式モードでデフォルトのイタリックは連続して記述すると積を表すように意図してスペーシングされることに注意してください(つまりaba\times bの意味になります)。普通の単語をイタリックにしたい場合には\mathitを使用してください。

\math..の形のフォント変更コマンドは数式用に指定されたフォントを使用します。数式内でテキスト用のフォントを使用したい場合は(訳注:数式内で日本語を使用したい場合は必ず)amsmathパッケージの提供する\textコマンドまたは\textrmなど明示的なテキスト用のフォント変更を利用してください。

\RequirePackage{plautopatch}
\documentclass[dvipdfmx]{jlreq}
\usepackage{amsmath}
\begin{document}

$\text{よくない} size  \neq \mathit{size} \neq \mathrm{size} $

\textgt{$\text{よくない} size \neq \mathit{size} \neq \mathrm{size} $}

\end{document}

ラテン文字以外の記号をボールドにしたい場合については、追加レッスンを参照してください。

練習問題

単純な数式モードを試してみましょう。適当な数式を選んで、インライン数式モードとディスプレイ数式モードを切り替えてみましょう。どのように変化しましたか?

ギリシャ文字の大文字と小文字を出力してみましょう。(ギリシャ文字に馴染みのある方なら)コマンド名を推測できるはずです。

フォント変更コマンドを使ってみましょう。こうしたコマンドを入れ子にするとどうなりますか?

ディスプレイ数式はデフォルトでは中央寄せになるはずです。クラスオプションに[fleqn](flush left equation;左寄せ数式)を指定して、どのような出力になるか確認してみてください。同様に数式番号は通常は右側に表示されます。クラスオプションに[leqno](left equation number;左数式番号)を追加してみましょう。