LaTeX の場合分け:cases・条件の整列・数式番号の付け方

ブログEasyLaTeX公開日

LaTeX で場合分けを書くには、amsmath パッケージの cases 環境を数式モード内で使います。各行に値を書き、& で条件を区切り、\\ で次の分岐に進みます。全体を equation に入れると、定義に数式番号が1つ付きます。

まずはコンパイルできる例から

次の内容を main.tex として保存し、pdfLaTeX でコンパイルしてください。この article 文書に必要なのは amsmath だけです。同名の cases パッケージを追加する必要はありません。

LaTeX
\documentclass[a4paper,11pt]{article}\usepackage{amsmath}​\begin{document}\begin{equation}\label{eq:absolute}  |x| =  \begin{cases}    x,  & \text{if } x \ge 0, \\    -x, & \text{if } x < 0.  \end{cases}\end{equation}See equation~\eqref{eq:absolute}.\end{document}

PDF には左の波括弧、値と条件が並ぶ2行、定義全体の番号が表示されます。参照が解決すると、本文の番号も一致します。x = 0 は第1分岐、負数は第2分岐に属し、実数の範囲に抜けや重複はありません。

場合分けの構造図。左列が値、右列が条件です。境界点 0 は第1行に含めます。

&、\\ と条件の文章

  • & は左揃えの2列を区切ります。ソースのインデント用空白では、PDF の列は揃いません。
  • \\ で次の分岐を始めます。通常は最終行には付けません。ソース上で改行するだけでは数式の行は変わりません。
  • \text{if } は英単語を通常の文字で組みます。数式条件との間隔を空けるため、波括弧内の空白を残します。残りの場合には \text{otherwise} を使います。
  • 左の波括弧は cases が用意するため、\left\{ の追加は不要です。\[...\] や equation などの数式モード内に置いてください。複数行の定義は独立した数式にすると読みやすくなります。

次の階段関数では、実数の定義域における otherwise は、零を含む x <= 0 を表します。

LaTeX
\[s(x)=\begin{cases}  1, & \text{if } x > 0, \\  0, & \text{otherwise}.\end{cases}\]

条件内の数式は数式モードに保ちます。if を数式として入力すると斜体の変数になり、通常の空白も失われます。逆に条件全体を通常の文章として入力すると、数学記号が正しく組まれません。後述の dcases* は右列の規則が異なります。

論文での例:Huber 損失と境界の確認

r を実数の残差、しきい値を δ > 0 とします。Huber 損失は、小さな残差には二次式、大きな残差には絶対残差についての一次式を使います。

LaTeX
\[L_{\delta}(r) =\begin{cases}  \frac{1}{2}r^2, & \text{if } |r| \le \delta, \\  \delta\left(|r|-\frac{1}{2}\delta\right),    & \text{if } |r| > \delta.\end{cases}\]

第1分岐は |r| = δ を含み、第2分岐は |r| > δ にだけ適用されます。境界では両方の式が δ²/2 になりますが、条件上は第1分岐にだけ属します。δ = 1 のとき、r = 0、1、2 に対する損失はそれぞれ 0、0.5、1.5 です。

例を変更する際は、定義域とすべての境界を確認してください。両側を等号なしの不等式にすると境界が抜け、両側に等号を付けると重複することがあります。コンパイルの成功だけでは、数学的な条件は検証できません。

分数が小さいときは dcases

通常の cases は \textstyle で組まれます。外側が独立数式でも、内側の \frac は小さくなります。分数、総和、積分を大きく表示するには、プリアンブルの \usepackage{amsmath} を \usepackage{mathtools} に置き換え、dcases を使います。mathtools は amsmath を自動的に読み込みます。

mathtools を読み込んだ文書の本文に、次の比較例を入れてください。

LaTeX
\[g(x)=\begin{cases}  \frac{1}{1+x^2}, & x \ge 0, \\  0, & x < 0.\end{cases}\qquadg(x)=\begin{dcases}  \frac{1}{1+x^2}, & x \ge 0, \\  0, & x < 0.\end{dcases}\]

組版スタイルの比較図。定義と条件は同じで、dcases では分数が大きくなり、行間も広がります。実際の出力は使用するテンプレートで確認してください。

1つの分数だけを大きくするなら、cases 内の \frac を \dfrac に変更できます。これは個々の分数を変えますが、dcases は分岐の式をディスプレイスタイルにします。特に狭い段組では、行間と幅も確認して選びます。

dcases* の右列は通常の文章

dcases の条件列は数式モードなので、英単語には \text{...} が必要です。dcases* の右列は通常の文章として組まれるため、数学的な条件を $...$ に入れます。

LaTeX
\[g(x)=\begin{dcases*}  \frac{1}{1+x^2}, & if $x \ge 0$, \\  0, & otherwise.\end{dcases*}\]

どちらも mathtools の環境です。環境名を変更するときは右列の書き方も変更してください。

全体または各分岐に番号を付ける

目的書き方パッケージと入れ子の規則
番号なし\[...\] 内の casesamsmath
定義全体に1つの番号equation 内の cases\label と \eqref で参照
分岐ごとに番号numcasescases パッケージを追加。環境自体が独立数式
同一グループの枝番号subnumcasescases パッケージ。(1a)、(1b) など

通常の関数定義では番号は1つで十分です。分岐を個別に参照する場合は、プリアンブルに \usepackage{amsmath} と \usepackage{cases} を指定し、本文に次を入れます。

LaTeX
\begin{numcases}{h(x)=}  x,  & if $x \ge 0$ \label{eq:positive} \\  -x, & if $x < 0$ \label{eq:negative}\end{numcases}See equations~\eqref{eq:positive} and~\eqref{eq:negative}.

{h(x)=} は波括弧の左側です。右列は既定では文章なので、数学的な条件は $...$ に入れます。numcases をさらに equation や \[...\] で囲んではいけません。各行の \label がその行の番号を参照します。枝番号が必要なら subnumcases に変更し、参照を確認してください。

詳しくは数式番号と相互参照を参照してください。

よくある症状と修正箇所

症状確認する点修正方法
数式モードや整列のエラー外側の数式環境と amsmath完全な例の環境とパッケージを確認
Environment dcases undefinedamsmath だけを読み込んでいないかmathtools を読み込む
値と条件がつながる& の不足各行を1つの & で区切る
分岐が1行になる\\ の不足分岐間にバックスラッシュを2つ入れる
Extra alignment tab など& の過剰通常の cases は2列にする
英単語が斜体、空白がない単語を数式として入力していないか通常の cases では \text{...} を使う
左の波括弧が2つある手動の \left\{cases が作る括弧だけを残す
参照が ??ラベル、番号付き環境、コンパイル回数\label を確認して再コンパイルし、ログを見る

同じ症状にも複数の原因があります。ログの最初のエラーと周辺のソースから確認してください。

ローカル環境と EasyLaTeX で確認する

TeX Live / MiKTeX では、main.tex があるディレクトリで次を実行します。

Shell
pdflatex -interaction=nonstopmode -halt-on-error main.texpdflatex -interaction=nonstopmode -halt-on-error main.tex

main.log でエラー、未解決の参照、Overfull \hbox を確認します。新しい main.pdf を開き、括弧、条件列、分数、番号を点検してください。Huber 損失に δ = 1 の3つの残差を代入すれば、係数の転記ミスも確認できます。

EasyLaTeX では例をプロジェクトのメインファイルに入れ、メインファイルの選択を確認します。この英語の article 例には pdfLaTeX を選んでください。コンパイル完了を待ち、問題があれば Bug パネルと Original Log を確認します。Agent に関係するソースとログを渡して原因の調査を依頼する場合も、変更を確認してから再コンパイルします。既存の日本語文書や投稿用テンプレートでは、適切なエンジンと設定を保ってください。

完全な最小文書とほかの5つのコード例は、TeXLive.net の pdfLaTeX でコンパイルし、ログと PDF を確認済みです。製品のコンパイラや特定の学会誌テンプレートでの実測ではありません。原稿に組み込んだ後も、パッケージの互換性と最新 PDF を確認してください。

関連項目:上付き・下付き、分数、括弧、行列、数式の改行、コンパイルエラーの調べ方。

参考資料