この記事では、入門レベル1~レベル2でも触れた複数の式の整列について、より詳しく紹介します。
なお、WordPressのプラグインとしてのMathJaxではデフォルトで式番号が表示されないため、align環境とalign*環境との違いなどがよく判らなくなってしまっています。WordPressで自動的に式番号を付与するように設定する方法は別記事を参照して下さい。
式の整列(環境別)
まず、式の整列のための環境をひととおり紹介します。
array環境
まず、LaTeXで使用できるarray環境です。数式の整列や行列の要素表示など、『並べて表示』ならなんでも対応可能な万能選手ですが、その代わりパラメータが多く使い方が難しく感じられるかも知れません。
書式
\begin{array}[pos]{cols}
1行目の要素1 & 1行目の要素2 & 1行目の要素3 … \\
2行目の要素1 & 2行目の要素2 & 2行目の要素3 … \\
:
n行目の要素1 & n行目の要素2 & n行目の要素3 …
\end{array}
pos は行列と行列外の要素との縦方向の位置合わせを指定します。省略可能です。
指定可能な内容は
- up(上揃え)
- middle(中央揃え)
- bottom(下揃え)
です。省略すると middle になります。
pos を記述する場合、波括弧 { } ではなく角括弧 [ ] なので注意して下さい。
cols は各要素を列ごとの位置合わせを指定します。位置合わせで指定可能な内容は
- l(左揃え)
- c(中央揃え)
- r(右揃え)
です。1行の要素数と同じ数だけlまたはcまたはr並べて記述します。位置合わせ文字の数よりも要素数の多い行があるとエラーになります。
要素の記述は、
- 各行の要素を & で区切って記述する
- 行の区切りに \\ を記述する(最下行には記述しない)
です。
記述例
\[
\begin{array}{r@{}l}
a &= b+c \\
d+e+f &= g
\end{array}
\]
align環境(align*環境、aligned環境)
ams-latexでもっともよく使われるのはalign環境だと思われます。
書式
align環境の書式は下の通りです。
\begin{align}
1行目の要素1 & 1行目の要素2 & 1行目の要素3 … \\
2行目の要素1 & 2行目の要素2 & 2行目の要素3 … \\
:
n行目の要素1 & n行目の要素2 & n行目の要素3 …
\end{align}
各行にいくつかの要素を & を区切りとして並べます。
行の区切りは \\ です(『区切り』であって『行末』ではないので最後の行には書きません)。
&の表示ルールは、
- 各行の奇数番目の&の位置が縦に揃うように表示される
- 各行の偶数番目の&の位置には空白が挿入される
です。偶数番目と奇数番目で作用が異なることに注意して下さい。
また、
- 各行の奇数番目の要素は右寄せで表示される
- 各行の偶数番目の要素は左寄せで表示される
という、少々クセのある表示になります。
記述例
言葉だけでは判りにくいので、サンプルを見てみましょう。
例1
alignのもっとも基本的な使い方の例です。各行に1箇所だけ、等号の直前に&を使用して &= とすることで、等号の位置が縦に揃うように表示されます。
また、左辺(&の左側)は右寄せ、右辺(&の右側)は左寄せで、両辺とも等号(正確にはソースで&の書かれた位置合わせの基準)に寄るように表示されます。
\begin{align}
a &= b+c \\
d+e+f &= g
\end{align}
\begin{align}
a &= b+c \\
d+e+f &= g
\end{align}
例2
1行に1つずつ式を書く場合だけではなく、縦横に式を並べたい場合もalign環境で実現可能です。
この例では、1行に式を3つずつ記述しています。&は各式の等号の直前と、式と式の間です。このようにすると、alignの配置ルールが上手く作用して、きれいに式を並べて表示することが出来ます。
以下のように考えると判りやすいでしょう。
\begin{align}
式11の左辺 & =式11の右辺 & 式12の左辺 & =式12の右辺 & … \\
式21の左辺 & =式21の右辺 & 式22の左辺 & =式22の右辺 & … \\
:
式m1の左辺 & =式m1の右辺 & 式m2の左辺 & =式m2の右辺 & …
\end{align}
なお、以下のサンプルソースでは理解しやすいように空白を補ってソースでも&が縦に揃うように記述していますが、これらの空白は表示結果に影響を与えていません。LaTeXは数式中の空白を無視します。
\begin{align}
a & =100 & b+c & =2 & d &=10000 \\
e+f & =1 & g & =200 & h+i+j & =5
\end{align}
\begin{align}
a & =100 & b+c & =2 & d &=10000 \\
e+f & =1 & g & =200 & h+i+j & =5
\end{align}
類似の環境
類似の環境としてalign*環境、aligned環境があります。これらは書式と表示ルールは同じですが、『数式番号が自動付与されるか』と『単独で数式モードになるか』が異なります。
数式番号 | 数式モード | |
---|---|---|
align環境 | 自動付与 | 単独で数式モードになる |
align*環境 | 付与されない | 単独で数式モードになる |
aligned環境 | 自動付与 | 別の数式環境の中で使う |
alignat環境(alignat*環境、alignedat環境)
alignat環境はalign環境より多少複雑ですが、その分レイアウトの自由度が高いです。
書式
書式はalign環境とほぼ同じですが、\begin に引数として『1行あたりの式の数(=奇数番目の&の数)』を記述することが必要です。原則として各行の&の数は奇数個(1行の式の数がn個とすると&は2n-1個)となります。
そしてalignとの表示結果の大きな違いは、式と式の間(偶数番目の&の位置)に空白が挿入されないことです。
\begin{alignat}{1行あたりの式の数}
式11の左辺 & =式11の右辺 & 式12の左辺 & =式12の右辺 & … \\
式21の左辺 & =式21の右辺 & 式22の左辺 & =式22の右辺 & … \\
:
式m1の左辺 & =式m1の右辺 & 式m2の左辺 & =式m2の右辺 & …
\end{alignat}
記述例
例1
alignの項と同じ内容をalignat環境で記述した例です。
各行に3つずつ式が並んでいるので \begin{alignat}{3}
としています。
\begin{alignat}{3}
a & =100 & b+c & =2 & d &=10000 \\
e+f & =1 & g & =200 & h+i+j & =5
\end{alignat}
\begin{alignat}{3}
a & =100 & b+c & =2 & d &=10000 \\
e+f & =1 & g & =200 & h+i+j & =5
\end{alignat}
表示結果を見ると、等号の位置(正確にはソースの奇数番目の&の位置)が縦に揃っていますが、align環境と異なり横に並んだ式と式の間(偶数番目の&の位置)に空白が挿入されていません。
このため、式と式の間の空白は自分で調節する必要があります。
例2
例1と同じ内容ですが、式と式の間(偶数番目の&の後)に \quad を補って間隔を空けています。
\begin{alignat}{3}
a & =100 & \quad b+c & =2 & \quad d &=10000 \\
e+f & =1 & \quad g & =200 & \quad h+i+j & =5
\end{alignat}
\begin{alignat}{3}
a & =100 & \quad b+c & =2 & \quad d &=10000 \\
e+f & =1 & \quad g & =200 & \quad h+i+j & =5
\end{alignat}
類似の環境
類似の環境としてalignat*環境、alignedat環境があります。これらは書式と表示ルールは同じですが、『数式番号が自動付与されるか』と『単独で数式モードになるか』が異なります。
数式番号 | 数式モード | |
---|---|---|
aligned環境 | 自動付与 | 単独で数式モードになる |
aligned*環境 | 付与されない | 単独で数式モードになる |
alignedat環境 | 自動付与 | 別の数式環境の中で使う |
gather環境
gather環境は、複数の式を中央揃えで並べます。allgin環境のように&で式中の特定の位置を合わせる機能はありません。
書式
\begin{gather}
式1 \\
式2 \\
:
式n
\end{gather}
です。\\ を行の区切りとすること以外、特別なことはありません。
記述例
例
\begin{gather}
a=b+c \\
d+e+f=g
\end{gather}
\begin{gather}
a=b+c \\
d+e+f=g
\end{gather}
類似の環境
類似の環境としてgather*環境があります。gather*環境は、書式・表示ルールはgather環境と同じですが、式番号の自動付与がされません。
split環境
名前からして分かち書きの環境向けのようです。各行の&の位置が縦に揃います。各行1つ目の要素だけが右寄せ、2つ目以降の要素は左寄せになります。要素間には空白が空きません。
split環境はalign環境等とは異なり、単独では数式モードになりません。\[~\]
など、他の数式環境の中で使う必要があります。
また、splitでは、式番号が自動付与されません。
書式
書式は以下の通りです。
\[
\begin{split}
1行目の要素1 & 1行目の要素2 & 1行目の要素3 … \\
2行目の要素1 & 2行目の要素2 & 2行目の要素3 … \\
:
n行目の要素1 & n行目の要素2 & n行目の要素3 …
\end{split}
\]
記述例
例
\begin{split}
a & =b+c & d\\
& =d+e+f & g+h+i\\
& =g+h+i+j
\end{split}
\[
\begin{split}
a & =b+c & +d\\
b+c& =d+e+f & +g+h+i\\
& =g+h+i+j & {}+i+j+k
\end{split}
\]
multline環境
これは『1つの式をどんどん変形していく』のではなく『非常に長い式を途中で改行する』場合に使うもののようです。\\ で改行して複数行の式を記述できますが、 & による位置合わせ機能がありません。
表示は、
先頭の行は左寄せ、途中の行は中央寄せ、最後の行は右寄せ
となります。alignやsplitとはかなり異なった印象の表示です。例を参考にして下さい。
なお、綴りは multiline ではないので注意して下さい。
式番号は最終行にのみ付与されます。
書式
\begin{multline}
式1 \\
式2 \\
:
式n
\end{multline}
記述例
\begin{multline}
a =b+c \\
+d+e+f \\
+g+h+i+j \\
+k+l+m+n+o
\end{multline}
\begin{multline}
a =b+c \\
+d+e+f \\
+g+h+i+j \\
+k+l+m+n+o
\end{multline}
cases環境
case環境は、名前からして判るとおり場合分けの記述向けの環境です。
書式
cases環境の書式は、
\begin{cases}
式1 & 条件1 \\
式2 & 条件2 \\
:
式n & 条件n
\end{cases}
です。
使用例
例
\begin{equation}
|x|=\begin{cases}
x & (x\geq 0) \\
-x & (x<0)
\end{cases}
\end{equation}
\begin{equation}
|x|=\begin{cases}
x & (x\geq 0) \\
-x & (x<0)
\end{cases}
\end{equation}
このように、各行の式と条件の間に空白が挿入され、左側には波括弧が表示されます。
同系の環境
ams-latexにはcases*環境があるのですが、MathJaxでは対応していないようです。
式の整列(用途別)
等号の位置を縦に揃える
まず『複数の式(等式・不等式)を並べるとき、等号・不等号の位置を縦に揃えたい』場合のやり方です。これはalign環境を使えば簡単にできます。
\begin{align}
a &= b+c \\
d+e+f &= g
\end{align}
\begin{align}
a &= b+c \\
d+e+f &= g
\end{align}
項の位置を縦に揃える
等号・不等号だけではなく、同類項や同次項が縦に並ぶように整列させるには、alignat環境を使うとうまくいきます。
\begin{alignat}{2}
ax+ &by & &= 1\\
& cy+ & dz &= 20000 \\
ex+ & & fz &= 300
\end{alignat}
\begin{alignat}{2}
ax+ &by & &= 1\\
& cy+ & dz &= 20000 \\
ex+ & & fz &= 300
\end{alignat}
複数の式を中央揃えで並べる
等号など式の特定部分を揃える必要がない場合はgather環境などを使用します。
\begin{gather}
a=b+c \\
d+e+f=g
\end{gather}
\begin{gather}
a=b+c \\
d+e+f=g
\end{gather}
1つの式を複数行に分けて書く
ひとつの式を何行かにわたって変形していくような場合には、次のような記述法があります。
等号などの位置を揃える
位置合わせをすべき場所が各行に1箇所ずつ(普通は等号でしょう)あるならalign環境を使用するといいでしょう。ただしalign環境は、式番号が自動付与される環境では行ごとに式番号がつくことにも注意して下さい。
\begin{align}
a & =b+c \\
& =d+e+f \\
& =g+h+i+j
\end{align}
\begin{align}
a & =b+c \\
& =d+e+f \\
& =g+h+i+j
\end{align}
位置合わせを指定しない
場合分け
たとえば1行目を見ると、
項目1の『a』は右寄せ、項目2の『=1』は左寄せになっているので、つながって表示される
項目2の『=1』と項目3の『b』の間には大きな空白がある
項目3の『b』は右寄せ、項目4の『2』は左寄せになっているので、つながって表示される
となっています。
例2
align環境は複数行にわたって式を変形していくような場合にも使えます。
この例の場合、1行ごとに&を1つずつしか使わないため、alignのクセの悪影響がありません。
\begin{align}
x^4+4 &=(x^2+2)^2-4x^2 \\
&=\{(x^2+2)+2x\}\{(x^2+2)-2x\} \\
&=(x^2+2x+2)(x^2-2x+2)
\end{align}
\begin{align}
x^4+4 &=(x^2+2)^2-4x^2 \\
&=\{(x^2+2)+2x\}\{(x^2+2)-2x\} \\
&=(x^2+2x+2)(x^2-2x+2)
\end{align}
例3
align環境にはむかない例も見てみましょう。例として三元一時連立方程式を書いてみます。
\begin{align}
ax & +by & &= c \\
& dy & +ez &= f \\
gx & & +hz &= i
\end{align}
\begin{align}
ax & +by & &= c \\
& dy & +ez &= f \\
gx & & +hz &= i
\end{align}
何をしたいのかおわかりいただけるでしょうか。同類項が縦に揃うようにしたいのですが、いまいちうまく行きません。偶数番目の項目が左寄せになるため、yの項が縦に揃っていません。1行目のbyと3行目のgyが、前に+があるかないかの違いでずれてしまって見えます。
\begin{align}
ax+ & by & &= c \\
& dy+ & ez &= f \\
gx+ & & hz &= i
\end{align}
\begin{align}
ax+ & by & &= c \\
& dy+ & ez &= f \\
gx+ & & hz &= i
\end{align}
&を+の後に変更すると、yの項は縦に揃いましたが、今度はxの項とyの項の間に較べて、yの項とzの高の間の空白が大きくなってしまいました。
\begin{align}
ax & + & by & &=& c \\
& & dy & + & ez &=& f \\
gx & & & + & hz &=& i
\end{align}
\begin{align}
ax & + & by & & &=& c \\
& & dy & + & ez &=& f \\
gx & & & + & hz &=& i
\end{align}
同類項同士は縦に並びましたが、あちこちに大きな空白があいてしまい不自然です。
やはりalign環境の『奇数番目の項目は右寄せ・偶数番目の項目は左寄せ』『偶数番目の&の後に空白が入る』という動作が使い勝手を悪くしているようです。
例4
今度は行列を書こうとしています。
\begin{align}
a & b & c & d \\
e & f & g & h
\end{align}
\begin{align}
a & b & c & d \\
e & f & g & h
\end{align}
なんというか(苦笑)
alignat環境
\begin{alignat}{0}
a & =1 & b & =2 & c & =3 \\
a+b & =100 & c+d & =200 & e+f & =300
\end{alignat}
align
\begin{align}
ax & +& by & & &=& c \\
& & dy & + & ez &=& f \\
gx & & & + & hz &=& i
\end{align}
alignat
\begin{alignat}{0}
ax & +by & &= c \\
& dy & + ez &= f \\
gx & & + hz &= i
\end{alignat}
alignat
\begin{alignat}{3}
ax & +& by & & &= &c \\
& &dy & + & ez &= &f \\
gx & & & + & hz &= &i
\end{alignat}
split
\begin{split}
ax & +& by & & &= &c \\
& & dy & + & ez &= &f \\
gx & & & + & hz &= &i
\end{split}
gather
\begin{gather}
ax & +& by & & &= &c \\
& & dy & + & ez &= &f \\
gx & & & + & hz &= &i
\end{gather}
\begin{alignedat}{4} x &+2y & &+3z & &= 1 & & \text{(A)} \\ -3x &+ y & &- z & &= 2 & & \text{(B)} \\ 2x & & &- z & &= -1 & \qquad & \text{(C)} \end{alignedat}
cases環境
名前からして場合分け用の環境です。書式は以下の通りです。
\begin{cases}
式1 & 条件1 \\
式2 & 条件2 \\
:
式n & 条件n
\end{cases}
&で項目を、\\で行を区切るというのはalign環境と同じです。
実際に表示してみましょう。
\begin{cases}
100 & (0\leq x)\\
10 & (-1\leq x<0) \\
0 & (x<-1)
\end{cases}
\begin{cases}
100 & (0\leq x)\\
10 & (-1\leq x<0) \\
0 & (x<-1)
\end{cases}
align環境とは、
式も条件も左寄せ
式と条件の間には空白が挿入される
左側に波括弧が表示される
という点が異なります。
\[
|x^2-a|=
\begin{cases}
x^2-a & (x\leq-\sqrt{a}, \sqrt{a}\leq x) & c100 & d\\
a-x^2 & (-\sqrt{a}<x<\sqrt{a}) & a & b100
\end{cases}
\]
例1
\[
\sum_{k=1}^\infty ar^k=
\begin{cases}
\displaystyle\frac{a}{1-r} & (|r|<1) \\
\infty & (a>0, r\geq 1) \\
-\infty & (a<0, r\geq 1) \\
\text{振動} & (r\leq-1)
\end{cases}
\]
\[
\sum_{k=1}^\infty ar^k=
\begin{cases}
\displaystyle\frac{a}{1-r} & (|r|<1) \\
\infty & (a>0, r\geq 1) \\
-\infty & (a<0, r\geq 1) \\
\text{振動} & (r\leq-1)
\end{cases}
\]
cases環境では式がインライン形式になってしまうので\displaystyleコマンドを使用しています。
一番下の\textコマンドは、数式モード中に数式では許可されていない文字(全角文字など)を挿入するためのものです。
式は左寄せではなく中央寄せの方が見やすいような気がしますが、そういう調節がしにくいのが難点ですね。
array環境
式を整列して表示させるのに、もっとも汎用性が高いのはarray環境です。
array環境の書式は以下の通りです。
\begin{array}[pos][cols]
1行目の要素1 & 1行目の要素2 & 1行目の要素3 … \\
2行目の要素1 & 2行目の要素2 & 2行目の要素3 … \\
:
n行目の要素1 & n行目の要素2 & n行目の要素3 …
\end{array}
align環境やcases環境と違い、posとcolsの2つのパラメータを記述します。
posは行列と行列外の要素との縦方向の位置合わせを指定します。省略可能です。
指定可能な内容は、
up(上揃え)
middle(中央揃え)
bottom(下揃え)
です。省略するとmiddleになります。
colsは各要素を列ごとの位置合わせを指定します。こちらは省略できません。
指定可能な内容は、
l(左揃え)
c(中央揃え)
r(右揃え)
|(要素の位置合わせではなく、その位置に縦実線が挿入される)
:(要素の位置合わせではなく、その位置に縦破線が挿入される)
です。1行の要素と同じ数だけlまたはcまたはr並べて記述します。
colsのlcrの文字数よりも要素数の多い行があるとエラーになります。
逆に、colsのlcrの文字数よりも要素が少ない行があってもエラーにはなりません。
行の各要素は&で区切って記述します。行と行の区切りは\\です。一番最後の行には\\を記述しません。
pos,colsの指定例
まず、colsの指定について実験してみましょう。
\[
\begin{array}{lcr}
1 & 100 & 10000 \\
100 & 10000 & 1 \\
10000 & 1 & 100
\end{array}
\]
\[
\begin{array}{lcr}
1 & 100 & 10000 \\
100 & 10000 & 1 \\
10000 & 1 & 100
\end{array}
\]
colsにlcrを指定しています。これは、各行の第1項目が左寄せ、第2項目が中央寄せ、第3項目が右寄せとなることを表しています。
posの指定例
次に、posの指定の実験をしてみましょう。
pos=top
\[
A=\left(\begin{array}[top]{cc}
a & b\\
c & d
\end{array}\right)
\]
pos=middle
\[
A=\left(\begin{array}[middle]{cc}
a & b\\
c & d
\end{array}\right)
\]
pos=bottom
\[
A=\left(\begin{array}[bottom]{cc}
a & b\\
c & d
\end{array}\right)
\]
位置決めの違いは判りましたが、括弧の付き方が予想外でした。
どうやら上や下に揃えても、上下対称に領域を確保してしまうようです。
\[
\begin{array}{cccccc}
ax &+& by & & &=& c \\
& & dy &+& ez &=& f \\
gx & & &+& hz &=& i
\end{array}
\]
コメント