行列やベクトル、表のように格子状に並んだ数式は、amsmath パッケージの 行列環境(pmatrix など)か、より汎用的な **array 環境** で組みます。どちらも要素を & で横に、\\ で縦に並べるという同じ書き味ですが、括弧の付き方や桁揃えの自由度が異なります。このページでは、用途で使い分ける行列環境の一式、列の揃えや罫線を自分で指定する array、拡大係数行列(拡大行列)の作り方、そして行列の中で「以下同様」を示す点々(\cdots・\vdots・\ddots)を順に見ていきます。
amsmath の行列環境
行列を組む最も手軽な方法は、amsmath パッケージ が用意する一連の行列環境です。プリアンブルに \usepackage{amsmath} を書いておけば使えます。いずれも数式モードのなかで使い、要素を **&(アンパサンド)で横方向に区切り、\\(バックスラッシュ二つ)で行を改めます。環境ごとに違うのは、行列を囲む 括弧(区切り記号)** だけで、中身の書き方は共通です。
名前の付け方には規則があります。先頭の文字が括弧の種類を表し、p は parentheses(丸括弧)、b は brackets(角括弧)、v は vertical bar(縦線)の頭文字です。大文字始まりの Bmatrix・Vmatrix は、それぞれ波括弧・二重縦線という「より強い」括弧に対応します。素の matrix は括弧を付けません。
| 環境 | 付く括弧 | 主な用途 |
|---|---|---|
matrix | なし | 括弧を自分で付けたいときの土台 |
pmatrix | 丸括弧 ( ) | 最も一般的な行列・列ベクトル |
bmatrix | 角括弧 [ ] | 行列(角括弧を好む流儀) |
Bmatrix | 波括弧 { } | 集合的なまとまりを示すとき |
vmatrix | 縦線 | | | 行列式(determinant) |
Vmatrix | 二重縦線 ‖ ‖ | ノルム(norm) |
smallmatrix | なし(小型) | 本文中に埋め込む小さな行列 |
次の例は、同じ 2×2 の中身を pmatrix・bmatrix・vmatrix で組んだものです。\\ の前後の空白や改行は出力に影響しないので、ソースは読みやすく整形してかまいません。
\[
\begin{pmatrix}
a & b \\
c & d
\end{pmatrix}
\quad
\begin{bmatrix}
a & b \\
c & d
\end{bmatrix}
\quad
\begin{vmatrix}
a & b \\
c & d
\end{vmatrix}
\]これは、独立した行の中央に三つの 2×2 行列が \quad の間隔をあけて並ぶ出力になります。一つ目は丸括弧で囲まれ、二つ目は角括弧、三つ目は左右に縦線が引かれた行列式の形です。要素は中央揃えで、a・b・c・d は変数として斜体に組まれます。
なお行列環境の要素は 常に中央揃え で、桁を揃える(右寄せ・左寄せにする)といった指定はできません。揃え方を自分で決めたいときは、後述の array 環境を使います。
列数の上限(MaxMatrixCols)
amsmath の行列環境は、既定では 最大 10 列 までしか組めません。これは MaxMatrixCols というカウンタの初期値が 10 に設定されているためです。11 列以上の行列を組もうとすると、列が足りない旨のエラーになります。
より多くの列が必要なときは、\setcounter{MaxMatrixCols}{n} でこの上限を引き上げます。たとえば 20 列まで許すなら次のように書きます。値を大きくすると LaTeX の処理は重くなりますが、現在の TeX 環境では 20 程度なら実用上ほとんど影響はありません。元に戻したいときは値を 10 に設定し直します。
\setcounter{MaxMatrixCols}{20}
\[
\begin{pmatrix}
a_{1} & a_{2} & \cdots & a_{12}
\end{pmatrix}
\]この上限は amsmath の行列環境にだけ関わるもので、次に述べる array 環境には適用されません。array は列指定で必要なだけ列を書けます。
array 環境
array 環境は、桁揃えや罫線を 自分で指定できる 汎用の格子組みです。本文の表を組む tabular 環境の数式版で、数式モードのなかでしか使えません(\[ \] や equation 環境のなかに置きます)。要素は tabular と同じく & と \\ で区切りますが、各要素は数式として(テキストスタイルで)組まれます。
array には 列指定(column specification) という必須の引数があります。{ccc} のように、列の数だけ揃え方を表す文字を並べます。l は左寄せ、c は中央揃え、r は右寄せ。文字の間に | を入れると、その位置に 縦罫線 が引かれます。たとえば {l|c|r} なら「左寄せ・縦線・中央・縦線・右寄せ」の 3 列です。
array 自体は括弧を付けません。行列として括弧で囲みたいときは、**\left( … \right)**(あるいは \left[ … \right] など)で手動で挟みます。\left・\right は中身の高さに合わせて括弧を自動で伸縮させるので、行数の多い行列でも括弧がきれいに行全体を囲みます。これは amsmath の行列環境が内部で行っているのと同じことを、自分の手で行う書き方にあたります。
\[
\left(\begin{array}{rrr}
1 & -2 & 3 \\
0 & 5 & -1 \\
4 & 0 & 2
\end{array}\right)
\]この例では、丸括弧で囲まれた 3×3 行列が出力されます。列指定が {rrr} なので各列は 右寄せ になり、-2 や -1 のような負号付きの数も桁が右にそろって読みやすく並びます。pmatrix が常に中央揃えなのに対し、array では揃え方を選べる点が要点です。
拡大係数行列(縦線入り)
連立一次方程式を表す 拡大係数行列(拡大行列) のように、行列の途中に縦線を入れたいことがあります。amsmath の bmatrix 等は列指定を取らないため縦線を入れられませんが、array の列指定 | を使えば実現できます。係数部分と定数項のあいだに | を置いた列指定(たとえば {cc|c})を与え、全体を \left[ … \right] で囲みます。
\[
\left[\begin{array}{cc|c}
1 & 2 & 5 \\
3 & 4 & 6
\end{array}\right]
\]これは、角括弧で囲まれた 2 行の行列で、2 列目と 3 列目のあいだに縦罫線が一本引かれた拡大係数行列を出力します。左側の 1 2 / 3 4 が係数行列、縦線の右側の 5 / 6 が定数項にあたります。\left[・\right] が中身の高さに合わせて角括弧を伸ばすので、行数が増えても破綻しません。
同じことを丸括弧で行うなら \left( … \right) に、波括弧なら \left\{ … \right\} に変えるだけです(mathtools パッケージを使うと、こうした拡大行列をより簡潔に書く方法も用意されています)。
行列のなかの点々(…・⋮・⋱)
一般の n×n 行列を表すとき、「以下同様」を示す 点々(省略記号) が欠かせません。LaTeX には向きの違う 4 種類が用意されており、行列のどこで使うかで選び分けます。いずれも数式モードの命令です。
\cdots— 中央の高さ に並ぶ横の三点(⋯)。行内で要素を省略するときに使う。+や=と同じ高さに来るので、横一列の省略に向く。\vdots— 縦 に並ぶ三点(⋮)。列方向の省略に使う。\ddots— 斜め(右下がり) に並ぶ三点(⋱)。対角線方向の省略に使う。\ldots(および文脈依存の\dots)— ベースライン(下寄り) に並ぶ横の三点(…)。数や添字の並びの省略に使う。行列のなかでは\cdotsの方が見栄えがよいことが多い。
典型的な使い方は、横の省略に \cdots、縦の省略に \vdots、対角の省略に \ddots を、行列の要素として置くことです。次は一般の n×n 行列を pmatrix で書いた標準的な例です。
\[
A =
\begin{pmatrix}
a_{11} & a_{12} & \cdots & a_{1n} \\
a_{21} & a_{22} & \cdots & a_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
a_{m1} & a_{m2} & \cdots & a_{mn}
\end{pmatrix}
\]これは丸括弧で囲まれた m×n 行列を出力します。1 行目と 2 行目・最終行では、第 3 列の \cdots が a_{12} と a_{1n} のあいだを中央の高さの横三点で埋め、3 行目では各列の \vdots が縦三点、対角位置の \ddots が右下がりの斜め三点となって、「行も列も同様に続く」ことを示します。添字 a_{11} などは _ で下付きに組まれます。
一行まるごとを点線で埋めたいときは、amsmath の \hdotsfor{n} を使うと、指定した n 列ぶんを横の点線でまたいで埋められます。
本文中の小さな行列(smallmatrix)
pmatrix などをインライン数式(本文中の $ … $)に入れると、行の高さを大きく押し広げてしまい、前後の行間が乱れます。本文の流れのなかに小さな行列を埋め込みたいときは、amsmath の **smallmatrix 環境** を使います。要素が小さく詰めて組まれ、行の高さをほとんど崩しません。
smallmatrix 自体は括弧を付けないので、必要なら \bigl( … \bigr) のような括弧で手動で挟みます(\left( \right) でも囲めますが、インラインでは固定サイズの \bigl・\bigr の方が行間を乱しにくいことがあります)。
回転行列 $\bigl(\begin{smallmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{smallmatrix}\bigr)$ を考える。これは本文の一行のなかに、丸括弧で囲まれた小さな 2×2 の回転行列が、行の高さをほとんど崩さずに収まる出力になります。\cos・\sin は立体の関数名として組まれます。