別行立て・整列・番号付き数式

別行立ての数式は、一行に収めるだけでは足りません。長い式を複数行に折り、等号や不等号の位置をそろえ、行ごとに通し番号を振って後から参照する——こうした多行数式の体裁は、ほぼすべて amsmath パッケージが受け持ちます。このページでは、番号付きの equation から、整列のための aligngathermultlinesplit、場合分けの cases、そして番号の抑制・上書き・グループ化(\notag\tagsubequations)までを順に見ていきます。インライン/別行立ての入口そのものは「数式モードの基本」で扱っているので、ここでは一段深く、多行と番号付けに踏み込みます。

まず amsmath を読み込む

このページで扱う環境は、equation を除いてすべて amsmath パッケージ が提供します。プリアンブルに一行加えるだけです。新しい文書では、数式を少しでも使うなら amsmath を読み込んでおくのが事実上の標準で、別行立ての組版や行揃え、番号制御がまとめて手に入ります。

latex
\usepackage{amsmath}

amsmath は別行立ての構造を、基本の LaTeX より大きく拡張します。素の LaTeX にもある equation 環境のほか、alignalign*gathergather*multlinemultline*alignatalignat*flalignflalign*、そして split が加わります。なお、これらの環境のなかでは 空行を入れてはいけません(空行は段落区切りとみなされ、エラーになります)。式番号を左に出したいときは \usepackage[leqno]{amsmath}、右に出すなら [reqno](横書きの既定)、左寄せで組むなら [fleqn] をパッケージオプションに与えます。

番号付きの一行 — equation

別行立ての出発点は **equation 環境** です。中身を独立した行に組み、右端(横書きの既定)に通し番号を自動で振ります。番号は equation カウンタで管理され、\label{…} を付ければ \ref{…}\eqref{…} で本文から参照できます(参照の詳細は後述)。番号を付けたくないだけなら、星付きの **equation*** を使います。これは基本 LaTeX の displaymath\[\])と同等で、番号のない別行立てになります。

latex
\begin{equation}
  \label{eq:euler}
  e^{i\pi} + 1 = 0
\end{equation}

これは、オイラーの等式が独立した行の中央に組まれ、その行の右端に (1) のような番号が付いた出力になります(番号は文書中の通し番号で、1 とは限りません)。equation一行ぶんの式に一つの番号 を与える環境です。一行に収まらない式や、複数の式をそろえたい場合は、次に見る整列環境を使います。なお、\[\] と番号なしディスプレイの基本は姉妹ページ「数式モードの基本」で扱っています。

複数行をそろえる — align と gather

複数の式を縦に並べるとき、最もよく使うのが **align 環境** です。各行を \\ で区切り、そろえたい位置に **& を一つ置きます。慣例として、等号や不等号などの 関係子の直前** に & を入れ、関係子の縦位置をそろえます。重要なのは、& を関係子の に置くことです(後述する旧 eqnarray は後ろに置くため間隔がくずれます)。align は各行に番号を振り、星付きの **align*** は番号を付けません。

latex
\begin{align}
  (x + y)^2 &= x^2 + 2xy + y^2 \\
  (x - y)^2 &= x^2 - 2xy + y^2
\end{align}

この出力は、二つの式が縦に並び、両方の等号がぴたりと同じ縦位置にそろい、それぞれの行の右端に番号が付いたものになります。& より左(左辺)は右寄せ、右(右辺)は左寄せに組まれるため、等号を境に左右がきれいに整います。最終行のあとに \\ を付けてはいけません(余分な空きが入ります)。

align複数の式を横に並べる こともできます。& を「揃え位置」と「列の区切り」の両方に使い、関係子前の & + 次の式の前の & を交互に置きます。つまり一つの式の組は 右寄せ部 & 関係子付き左寄せ部 で表し、次の式との間にもう一つ & を入れます。

latex
\begin{align}
  x  &= y      & X  &= Y      & a &= b + c \\
  x' &= y'     & X' &= Y'     & a' &= b      \\
  x + x' &= y + y' & X + X' &= Y + Y' & a'b &= c'b
\end{align}

この出力は、三組の式が横三列に並び、各列で等号がそれぞれそろい、行ごとに一つの番号が付いたものになります。列と列の間隔は amsmath が一定の幅で自動的に確保します。

一方、そろえる必要がなく、ただ複数の式を中央に並べたい ときは **gather 環境** を使います。gather では & による整列はなく、各行が それぞれ独立に中央寄せ されます。行は \\ で区切り、各行に番号が付きます(番号なしは gather*)。gather の各行は、必要なら後述の split を入れて一つの式を複数行に折ることもできます。

latex
\begin{gather}
  a^2 + b^2 = c^2 \\
  e^x = \sum_{n=0}^{\infty} \frac{x^n}{n!}
\end{gather}

この出力は、二つの式がそれぞれ行の中央に置かれ(互いの記号位置はそろわない)、各行の右端に番号が付いたものになります。align が「関係子でそろえる」のに対し、gather は「ただ中央に積む」と覚えると区別しやすいでしょう。

一つの長い式を折る — multline と split

一行に収まらない 一つの式 を複数行に折るための環境が二つあります。**multlinesplit** で、どちらも「式は一つ=番号は一つ」という点が aligngather と異なります。

multline は整列を行いません。代わりに、最初の行を左端に、最後の行を右端に** 寄せ、間の行は中央に置きます。行は \\ で区切ります。式全体に対する番号は 最終行 に付きます(leqno オプションなら最初の行)。multline は一つの式に一つの番号なので、**個々の行を \notag で消してはいけません**。中間行を左右どちらかに寄せたいときは \shoveleft{…} \shoveright{…} を使い、行全体(直後の \\ は含めない)を引数に渡します。番号なしは multline* です。

latex
\begin{multline}
  a + b + c + d + e + f \\
  + g + h + i + j + k + l + m + n
\end{multline}

この出力は、長い和が二行に折られ、最初の a + … + f が左端に、続く + g + … + n が右端に寄り、式全体に一つの番号が付いたものになります。中間に行があれば中央に置かれます。multline には整列の & は使いません(折り返し位置を \\ で指定するだけです)。

折り返した各行を そろえたい ときは **split** を使います。splitalign と同じく & で整列しますが、整列できる列は一つだけ& は一行に一つ)で、それ自身は番号を持ちません。番号を供給する equation(や aligngather)の 内側に置いて 使い、構造全体で一つの番号が付きます。splitmultline の内側には置けません。

latex
\begin{equation}
  \label{eq:cosh}
  \begin{split}
    \cosh x &= \frac{e^x + e^{-x}}{2} \\
            &= 1 + \frac{x^2}{2!} + \frac{x^4}{4!} + \cdots
  \end{split}
\end{equation}

この出力は、一つの式が二行に折られ、両行の等号が縦にそろい、equation が供給する 一つの番号 が(既定で中央の高さに)付いたものになります。split は折り返した一本の式を等号でそろえる典型的な道具で、multline(そろえない)と対になります。split の中身は外側の構造の本体全体を占めるべきで、\label のような出力を持たない命令だけが同居できます。

環境式の数 / 番号整列主な用途
equation1 式 / 1 番号なし別行立ての一行
align複数式 / 行ごと& であり関係子をそろえて並べる
gather複数式 / 行ごとなし(各行中央)そろえずに中央に積む
multline1 式 / 1 番号なし(左→右に寄せ)長い式を折る(整列不要)
split1 式 / 番号なし(外側が供給)& 一列のみ折った式を等号でそろえる

場合分け — cases

関数を条件で場合分けして定義するときは **cases 環境** を使います。左側に大きな中括弧 { が自動で付き、各行は **&** で「値」と「条件」を区切り、行は \\ で区切ります。条件部の語句(「のとき」「if …」など)は数式モードのままでは斜体・詰まった字間になってしまうので、\text{…} で囲んで立体・正しい字間で組みます。cases 自体は番号を持たないので、ふつう equation の内側に置いて式全体に一つの番号を付けます。

latex
\begin{equation}
  |x| =
  \begin{cases}
    x  & \text{if } x \ge 0, \\
    -x & \text{if } x < 0.
  \end{cases}
\end{equation}

この出力は、左に大きな中括弧、その右に二行——x(条件「x ≥ 0 のとき」)と −x(条件「x < 0 のとき」)——が並び、equation による番号が一つ付いたものになります。値の列と条件の列はそれぞれ左寄せにそろいます。なお cases の中身は テキストスタイル(控えめな大きさ)で組まれるため、分数などを大きく出したいときは mathtools パッケージの **dcases** 環境を使います(dcases はディスプレイスタイルで組みます)。

番号を制御する — \notag・\tag・subequations

aligngather の番号付き環境では、各行に自動で番号が振られます。これを行単位で調整する手段が用意されています。

  • ある行だけ番号を消す: その行の \\ の前に \notag(または同義の \nonumber)を置きます。\notag は別行立て環境の外では使えません。
  • 番号を自分で付ける/上書きする: \tag{…} を使うと、自動番号の代わりに任意の内容を番号として組みます(自動で括弧が付きます)。\tag*{…} は括弧を付けず、与えた内容をそのまま組みます。
  • 関連する式を 1a, 1b… とまとめる: subequations 環境で囲むと、中の式が (1a)・(1b)・… のように親番号+英字で振られます。
latex
\begin{align}
  y &= (x + 1)^2           \notag \\
    &= x^2 + 2x + 1        \\
  E &= mc^2                \tag{$\star$}
\end{align}

この出力では、一行目は \notag により 番号なし、二行目は通常どおり自動番号、三行目は自動番号の代わりに (⋆) という番号が付きます。\notag\tag を組み合わせると、多行の式変形の途中行を番号なしにし、結論の行にだけ番号を付ける、といった制御が自然にできます。

関連する式を一つの番号グループにまとめたいときは **subequations** で囲みます。前の番号付き式が (4) だったとすると、グループ内の式は (4a)・(4b)・(4c) … と振られます。\begin{subequations} の直後に置いた \label は、子の (4a) ではなく 親の番号 (4) を指します。

latex
\begin{subequations}
  \label{eq:max}
  \begin{align}
    \nabla \cdot \mathbf{E} &= \frac{\rho}{\varepsilon_0} \label{eq:gauss} \\
    \nabla \cdot \mathbf{B} &= 0
  \end{align}
\end{subequations}

この出力は、二本の式が等号でそろって並び、それぞれ (4a)・(4b) のように親番号+英字で振られたものになります(親番号は文書中の通し番号)。\eqref{eq:gauss} は (4a) を、\eqref{eq:max} はグループ全体を表す (4) を返します。

参照する — \label と \eqref

番号付きの式には \label{…} で名札を付け、本文から番号で参照できます。\ref{…} は番号そのもの(例: 3.2)を返し、amsmath の **\eqref{…}括弧を補って** (3.2) を返します。\eqref の括弧は、まわりの書体によらず常に立体で組まれるので、数式の参照には \eqref が便利です。多行環境では、番号を付けたい その行\label を置きます(align なら各行ごと、subequations なら子の式の行ごと)。

latex
式~\eqref{eq:euler} より $e^{i\pi} = -1$ が従う。

By~\eqref{eq:euler}, we have $e^{i\pi} = -1$.

この出力は、たとえば「式 (1) より …」「By (1), …」のように、\label{eq:euler} を付けた式の番号が括弧付きで本文に差し込まれたものになります。参照を確定させるには、相互参照のためにふつう 2 回コンパイル します。\ref\label の一般的な仕組みは「相互参照」のページで詳しく扱います。なお、章・節ごとに番号をリセットしたい((1.1)・(2.1) … のようにしたい)ときは、プリアンブルで \numberwithin{equation}{section} と書きます。

eqnarray は使わない

古い文書では、多行数式に **eqnarray**(および eqnarray*)が使われていることがあります。これは amsmath 登場以前からある環境ですが、現在は 使うべきではありません。最大の問題は 関係子まわりの間隔 で、eqnarray は等号の前後に不自然に広い空きを入れ、しかもその間隔がほかの数式環境と一致しません。さらに、行が長いと 式番号が本文に重なって 印字されることがあり、定理パッケージの \qedhere も使えません。

amsmath の公式マニュアルも、LaTeX のリファレンスも、eqnarray を避けて **align(複数の式をそろえる) または equationsplit(一つの式を折る)** を使うよう勧めています。整列位置を示す & の置き方の違いにも注意が必要です。align 系は関係子の & を置きますが、eqnarray は関係子の 後ろ に置く設計で、これが間隔の乱れの一因です。新しく書くなら、迷わず amsmath の環境を選んでください。