LaTeX の数式環境って種類が多い
LaTeX で数式環境を使う理系大学生等は,amsmath パッケージを使っていながらもequation 環境かalign 環境しか使っていないのではないだろうか.最悪,align 環境だけで作成している学生もいるかもしれない.
しかし,amsmath パッケージやその他の数式環境をサポートするパッケージが提供する数式環境は様々ある.これらを一覧に比較しながらまとめておきたい.
本記事では,数式環境ごとの違いを比較しながら紹介したい.また,比較に重きを置いているので,具体的な使用方法は紹介しない.具体的な使用方法は参考記事に譲る.
具体例をあまり提示していないので,初心者には分かりづらい可能性がある.
○ こんなにもある数式環境
mathtools パッケージはamsmath パッケージの拡張パッケージとなっており,mathtools を読み込めばamsmath を自動的に読み込むようになっている.
しかしながら,パッケージは明示的に読み込んでおこう. 1
\usepackage{amsmath}
\usepackage{mathtools}
これらがサポートする数式環境は以下のとおりであり30種類近く存在する.
注意しておきたいのは,本記事では行列環境についてはここで紹介していない.
また,これら2つのパッケージ以外のパッケージで提供される数式環境もある.これらのみには留まらないことにも注意しておこう.
また,amsmath パッケージにはいくつかのオプションも存在する.以下の記事で詳しく紹介している.
Use Math mode with AMS-LaTeX(折りたたみ)
■ amsmath が提供する数式環境
全17種
- equation
- align
- alignat
- gather
- flalign
- multline (スペル注意)
- split
- cases
これらに付随して,split, cases 環境を除くすべてに*
付きの環境が提供されている.また,align, alignat, gather 環境には-ed
環境が提供されている.
■ mathtools が提供する数式環境
全11種
- lgathered, rgathered
- multlined (スペル注意)
- cases*
- dcases, dcases*
- rcases, rcases*
- drcases, drcases*
※ eqnarray 環境トカトカ
amsmath パッケージを取り入れて数式を使うことはスタンダードとされており,amsmath パッケージを利用しながらamsmath パッケージがサポートしていない数式環境を使うことはタブーである.
したがって,以下のような3つの環境は非推奨であり,代替環境に置き換えるべきである.
非推奨環境 | 代替環境 |
---|---|
equnarray 環境 | equation 環境 + split 環境 align 環境 + split 環境 |
displaymath 環境 | equaiton* 環境 \[ ~\]
|
$$ で囲う |
equaiton* 環境 \[ ~\]
|
cf. Avoid eqnarray! | Lars Madsen [PDF]
equation 環境や\[
~\]
はLaTeX 標準で提供されている数式環境だが,amsmath パッケージはこれらを新たに置き換えているので問題なく利用することが出来る.
Use Math mode without AMS-LaTeX(折りたたみ)
○ 数式環境の比較
多くの環境があるので,ここでは以下のような観点で比較しておきたい.
■ 式番号の有無
amsmath パッケージでサポートされている*
付きの環境では式番号を付与しない環境となっている.これ以外の環境では式番号が自動的に付与される.
ただし,場合分け環境であるcases*, dcases*, rcases*, drcases* では式番号を付与しない環境ではないため注意が必要である.
- equation*,
\[
~\]
(equaiton* 環境の省略形) - align*
- alignat*
- gather*
- flalign*
- multline*
以下の例では,2つの式ともに式番号が付与されない.
% Example: Environment with *
\begin{align*}
f(x)
& = ax^2 + bx + c \\
g(x)
& = ax^3 + bx^2 + cx^2 +d
\end{align*}
個別に式番号の有無を指定したい場合は# この節を参照.
■ 独立 / 非独立
独立した数式環境と数式環境内で使用する非独立な環境の2種類がある.
分かりやすい例では,equation 環境では独立した数式環境として使われるが,split 環境は独立した数式環境内でしか使うことが出来ない.
以下のような環境は非独立な数式環境である.
-
-ed
付きの環境 - split 環境
- 場合分け環境
表にすると以下のようになる.
独立した数式環境 | 非独立な数式環境 |
---|---|
equation | - |
align | aligned |
alignat | alignedat |
gather | gathered, lgathered, rgathered |
flalign | - |
multline | multlined |
- | split |
- | cases, cases*, dcases, dcases*, rcases, rcases*, drcases, drcases* |
※ split 環境はmultline 環境内では使用できない
これらの非独立な数式環境の特徴には以下のようなものがある.
- 独立した数式環境と似た仕様になっている
- ※ lgathered, rgathered 環境はgather 環境と少し異なる (cf. # 拡張されたgathered 環境)
- 複数行の数式であっても1つのコンテンツとして認識される
- 式番号は各行に付与されず1つだけ付与される
- したがって,式番号を付与したくない場合には非独立な数式環境の後に
\notag
すれば良い
- したがって,式番号を付与したくない場合には非独立な数式環境の後に
- 数式の途中で改ページを許すような設定にしていても改ページされない
- 式番号は各行に付与されず1つだけ付与される
- 前後の数式との垂直位置を調整するオプションがある (cf. # 非独立な数式環境のオプション)
- ※ split 環境と場合分け環境にオプションはない
- アンパサンドによる整列は非独立な数式環境内で閉じている
- ※ split 環境に限っては,split 環境外のアンパサンドと連携して整列することが出来る
■ アンパサンドの役割
複数の数式を表示させるための数式環境はいくつかある.これらのアンパサンド&
の取り扱いがどのようになっているのか確認しておきたい.
環境 | アンパサンドの取り扱い | 奇数番目のアンパサンド | 偶数番目のアンパサンド |
---|---|---|---|
equation | 不可 | - | - |
align, aligned | 可 | 整列 | タブ(自動的にスペースが入る) |
alignat, alignedat | 整列のためのアンパサンドの個数明示の必要有 | 整列 | タブ(スペース指定の必要がある) |
gather, gathered | 不可 | - | - |
flalign | 可 | 整列 | タブ(均等に割り付けるように自動的にスペースが入る) |
multline, multlined | 不可 | - | - |
split | 各行1回のみ | 整列 | - |
場合分け環境 | 各行1回のみ | 整列 | - |
※ align(ed)at 環境に必要な引数について,amsmath パッケージガイドでは「各行の&
の数に1足して2で割った数」と書かれていますが,これは「整列のための&
の数」と考えても問題ないと思います
※ 非独立な数式環境でsplit 環境以外の環境は外の&
と連携しない
独立した数式環境内で使用された&
による整列もその環境内で閉じているので,外部の数式環境には影響しない.
しかし,&
による整列を保持したまま数式環境内でテキストを挿入したい場合には\intertext
や\shortintertext
を利用することで解決する可能性がある.
○ いくつかの具体例
それぞれの数式環境の比較ができたので,これ以降ではより詳細な使い方について見ていきたい.
- # 個別に式番号の有無を指定
- # アンパサンドと関係演算子の順序
- # 非独立な数式環境のオプション
- # 拡張されたgathered 環境
- # 長い数式の折り返し
- # 場合分け環境
- # 式番号にサブ番号を付与
◇ 個別に式番号の有無を指定
個別に式番号を付与させないようにするには\notag
を使用すると良いだろう.\notag
はamsmath パッケージから提供されている.使い方は,式番号を付与させたくない式に\notag
を置くだけである.
例では1つ目の式には式番号ナシ,2つ目の式には式番号アリになっている.
% Example: Use `\notag`
% `\notag` before `\\`
\begin{align}
f(x)
& = ax^2 + bx + c \notag \\
& = a\left( x + \frac{b}{2a} \right)^2 - \frac{b^2}{4a} +c
\end{align}
ちなみに,\nonumber
でも同様に式番号を付与させないように出来る.
LaTeX が標準で提供しているコマンドである\nonumber
は,amsmath パッケージを導入している限り\notag
と\nonumber
は同一のコマンドとなっている.
また,これらの\notag
や\nonumber
は非独立な数式環境では利用することが出来ないので注意が必要である.
■ 相互参照する数式のみに式番号を付与する場合
mathtools パッケージではshowonlyrefs
オプションを用いることで相互参照している数式のみに式番号を付与し,それ以外には式番号を与えないようにすることが出来る.
プリアンブルで以下のようにする.
\mathtoolsset{showonlyrefs = true}
% `true` or `fault`
したがって,showonlyrefs
オプションを使用することを前提とすれば,*
付きの環境や\notag
は使わずに済むということになる.
このとき,相互参照はamsmath パッケージから提供されている\eqref
を利用する必要があることに注意したい.
このコマンドでは自動的に丸括弧を与えているのも特徴になる.これを嫌う場合には\refeq
を利用する.
また,この他にhyperef パッケージの\autoref
やcleveref パッケージの利用などもある.これらは数式の相互参照にこだわらない.
cleveref パッケージはかなり賢い相互参照を実現できる.デフォルトの設定は英文対応なので,日本語に対応させるにはいくつか設定が必要になるが,かなり良いパッケージになっている.
Qiita 内で調べてみてもといくつかの記事が見つかるので,参照すると良いだろう.
◇ アンパサンドと関係演算子の順序
整列に&
を利用する環境は以下の通りである.
(ただし,場合分け環境に関しては# この節を参照してほしい.)
- align, aligned
- alignat, alignedat
- flalign
- split
整列のための&
は=
などの関係演算子の前に付け,関係演算子の左側で整列させる.関係演算子の右側で整列させたい場合には注意が必要になる.
(以降では関係演算子の代表として=
を用いる)
関係演算子の整列位置 | 順序 |
---|---|
左側 (標準) | & = |
右側 | = {} & |
基本的には関係演算子の左側で整列させれば良い.
これは+
などの二項演算子でも同様の順序で行うと良い.
◇ 非独立な数式環境のオプション
split 環境と場合分け環境を除く以下の非独立な数式環境には垂直位置を指定する3つのオプションが与えられている.
このオプションによって,これらの環境外部の数式や式番号の位置が変わる.
- aligned
- alignedat
- gathered, rgathered, lgathered
- multlined
オプションは\begin{<env-ed>}
の後につづけて\beign{<env-ed>}[<option>]
とする.(alignedat 環境では\begin{alignedat}[<option>]{n}
とする)
<option> |
説明 |
---|---|
[c] (デフォルト) |
中央 (center) |
[t] |
上部 (top) |
[b] |
下部 (bottom) |
右辺をこれらの環境で複数行の数式を書き,それぞれのオプションを有効にすると次のようなイメージとなる.
図を見ればわかるように式番号も連動して移動してしまう.これをうまく移動させる方法はないようだ.
このようになることから,折り返しの必要な長い数式に対してはsplit 環境を利用することを強くお勧めしたい.
◇ 拡張されたgathered 環境
gather 環境は中央揃えで数式を列挙するようになっている.
これの非独立な数式環境としてgathered 環境が用意されているが,これの左揃えと右揃えに列挙する環境も提供されている.
環境 | 数式の揃え位置 |
---|---|
gathered | 中央揃え |
lgathered | 左揃え |
rgathered | 右揃え |
集合論などではaligned 環境が&
なしで右揃えになることを利用して記述されることがあるようだが,rgathered 環境を利用すれば明示的に右揃えにすることが出来る.
それぞれの環境を利用してある領域のx, y, z の条件式を書いた場合,次のようなイメージとなる.
◇ 長い数式の折り返し
紙面幅よりも長い数式を折り返す場合には以下のような環境を利用すれば良い.
- multline
- multlined
- split
これらについての詳細は以下の記事を参照してほしい.
また,折り返し前後で自動調整される括弧を利用する場合には以下の記事を参照してほしい.
自動的に折り返したい場合には以下の記事を参照してほしい.
cf. [自動改行]長い数式を折り返して表示させる3つの方法 - Qiita
上記事で紹介しているが,split 環境の自動化したようなautobreak パッケージを利用することがもっとも平易と思われる.
また,breqn パッケージも紹介しているが上記事ではすべてを網羅していない.パッケージガイドを注意深く参照してから利用することをお薦めする.
場合分け環境内で折り返しや改行を含みたい場合には以下の記事を参照してほしい.
◇ 場合分け環境
場合分けの環境は数式環境内で使用する環境であり,{
で複数の数式をまとめることが出来る.
これらの場合分けの環境には8種類ある.(cases, dcases, rcases, drcases, それぞれの*
付き環境)
これらには3つのパターンがある.
- 条件の書き方
- 数式のスタイル
- 括弧の向き
詳しく見てみよう.
▶ 条件の書き方
条件の書き方は*
の有無によって異なる.
場合分け環境 | アンパサンド& 以降 |
立体文字の挿入方法 |
---|---|---|
* 無し
|
数式環境のまま | \text |
* 付き
|
本文中の通常立体文字 | そのまま挿入可能 |
いずれの場合で立体文字を挿入していても,$
を用いて数式をインラインモードで挿入することが出来る.
条件として加える部分に数式と文章のどちらが多いかによって使い分けると良いだろう.
cases 環境の例
これは,dcases, rcases, drcases 環境であっても同様の構文となる.
\begin{equation}
f(x)=
\begin{cases}
2x+3 & \text{$x>1$のとき}\\
x^2+4 & \text{$0<x<1$のとき}
\end{cases}
\end{equation}
cases* 環境の例
これは,dcases*, rcases*, drcases* 環境であっても同様の構文となる.
\begin{equation}
f(x)=
\begin{cases*}
2x+3 & $x>1$のとき \\ % "&"以降は数式環境ではない
x^2+4 & $0<x<1$のとき
\end{cases*}
\end{equation}
▶ 数式のスタイル
amsmath パッケージから提供されるcases 環境などはテキストスタイルとなっており,d-
から始まる環境はディスプレイスタイルとなっている.
表にすると以下のようになる.
環境 | 数式のスタイル |
---|---|
cases, cases* rcases, rcases* |
\textstyle |
dcases, dcases* drcases, drcases* |
\displaystyle |
したがって,cases 環境では\frac
などの背の高い数式を用いたときに,文中で数式を表示させるのと同様に背の低い数式が出力される.
明示的に\displaystyle
を挿入することで変更することも出来るが,d-
場合分け環境を利用してしまった方が容易だろう.
▶ 括弧の向き
通常の場合分けでは左側に右向きの波括弧}
が使われるが,r
の付く場合分け環境は右側に左向きの波括弧}
が使われる.
環境 | 括弧の位置 | 括弧の向き |
---|---|---|
cases, cases* dcases, dcases* |
ひだり | { |
rcases, rcases* drcases, drcases* |
みぎ | } |
■ 場合分け環境の式番号
場合分け環境はそれを1つの式として認識されるため,各条件には式番号が付与されない.
以下の記事ではempheq パッケージを利用することで各条件に式番号が付与されるようにしている.
◇ 式番号にサブ番号を付与
(1a)
, (1b)
... のように文書全体の通し番号でないサブ番号を付与することも出来る.
これにはsubequations 環境を利用すれば良い.
詳細は次の記事を参照してほしい.
参考
- 数式サンプルのある記事
- 関連記事
- パッケージガイド
余談
LaTeX で使用できる数式環境が意外とある.
簡単にできる環境があるのにムリヤリ実現したい見た目にしようと思えば出来たりする.しかし,簡単に実現可能な環境があるのなら活用していく方が良い.
やっぱりパッケージガイドは読んでおいた方が良い.amsmath パッケージのユーザガイドは日本語版があるので,ぜひチラチラと見ておいても損はないだろう.tips でほしいところだけつまみ食いしているだけでも十分に扱うことが出来るけれど.
具体的な数式を羅列しながら紹介する記事は多数あるけれど,実際に数式を打っているときにそれを思い出すかというと怪しい.また,比較している記事も見つけることが出来なかった.
多くあるものはなるべくまとめてカテゴライズしておいた方が覚えやすい上に理解しやすい.
そのような意味では意義のある記事が書けていると思っている.
2021/10/20 の追記でかなり記事内容を拡充させた.特に,非独立な数式環境でのアンパサンドの取り扱いやオプションについて気にしておいた.
追記
- 2020/08/13 : 場合分けの環境に関して不備があったので訂正しました.その他,軽微修正.
- 2020/08/15 : 「eqnarray 環境トカトカ」にAMS-LaTeX を用いずに数式モードを使用するとどのようになるかのサンプル画像を折りたたみにて追加しました.
- 2020/08/21 : [ 訂正 ] cases* 環境についてamsmath にサポートされていると掲載していましたが,正しくはmathtools にサポートされている環境でした.また,amsmath のみを用いて数式環境を用いたサンプル画像を折りたたみにて追加しました.
- 2021/10/20 : 大幅改定しました.
-
あまり発生しないと思いますが,amsmath かmathtools の一方のみを更新してmathtools からamsmath を呼び出すようにしていると,amsmath がバージョン違いで呼び出されないこともあるようです.cf.) https://tex.stackexchange.com/questions/432878/why-is-gathered-undefined ↩