誰よりも正しくLaTeX/amsmathの数式環境を使え!
行中数式
行中数式あるいはインライン数式とは文章の中に現れる数式のこと。使う場合には$ ... $
か\( ... \)
を使う。
例1. $\lambda,x$をそれぞれ行列$A$の固有値,固有ベクトルとする.
例2. \(\lambda,x\)をそれぞれ行列\(A\)の固有値,固有ベクトルとする.
1行のディスプレイ数式
ディスプレイ数式はテキストとは別に1行全体使って表示される数式でequation
環境か\[ ... \]
を用いる。\[ ... \]
は数式番号が着かない。
二次方程式の解の公式は
\begin{equation}
x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}
\end{equation}
ディスプレイ数式と直前のテキストの間に空行を入れると行頭1文字空いてしまうため注意する(段落が変わる場合を除く)。行頭が空く以外にもテキストとの間隔がおかしくなってしまう。ソースファイルの見た目上そこに空行を挟みたい場合は%
によるコメントアウトを使う(%
のみの行を挿入する)。
複数行数式を作るために\[ \]
を連続使用しないようにする。数式の行間がおかしくなるので複数行数式にはgather
環境などを使う。
以下は使っていはいけない。
\begin{math}\end{math}
環境\begin{displaymath}\end{displaymath}
環境\begin{eqnarray}\end{eqnarray}
環境$$ ... $$
によるディスプレイ数式 これらはLaTeXの提供する数式環境が残っていて使えるだけであって、amsmathパッケージが意図するコマンドではないので混在させないようにする。数式内や数式間のスペースの広さや数式番号の配置がおかしくなるので使わないに越したことは無い。
複数行のディスプレイ数式
複数行数式にはそれ用のコマンドがあるので\[ \]
などを連続して使用しないようにする。複数行数式で改ページしてもいい場合には\allowdisplaybreaks[1]
をプリアンブルに書く。個別に指定したい場合はそれぞれの数式の行末に\displaybreak[1]
を書く。ここに[1]
は、必ずしも改ページしなくてもいいが必要あればやってもいいということを表す。度合いは[0]
~[4]
で指定できる。
複数の数式を独立に並べる:gather
ただ単に数式を中央揃えにして並べる、equation
環境を連続使用したような配置になる。式番号も1行ずつそれぞれに着く。等号を縦一列にそろえなくても不親切でないような場合に使うとよいだろう。
\begin{gather}
(a+b)^2=a^2+2ab+b^2\\
(a+b+c)^2=a^2+b^2+c^2+2(ab+bc+ca)
\end{gather}
長い数式を複数行に分割:multline
項の数が多くて数式が横に長くなり過ぎる場合の数式の改行を左、真ん中、右という風にいい感じに配置してくれる。どういう風に?見ればわかる。
\begin{multline}
(x+y+z)^3=x^3+xy^2+xz^2+2x^2y+2xyz+2zx^2\\
+yx^2+y^3+yz^2+2xy^2+2y^2z+2xyz\\
+x^2z+y^2z+z^3+2xyz+2yz^2+2z^2x
\end{multline}
複数の数式を整列させる:align, alignat, flalign
こちらは&
(アンド)を指定した場所で複数行の数式を縦に整列させる。
次の連立方程式を解け.
\begin{align}
5x+5y&=50 & x+y&=10\\
10x-2y &=-8 & 5x-y&=-4
\end{align}
次の連立方程式を解け.
\begin{alignat}{2}
5x+5y&=50 &\qquad x+y&=10\\
10x-2y &=-8 & 5x-y&=-4
\end{alignat}
次の連立方程式を解け.
\begin{flalign}
5x+5y&=50 & x+y&=10\\
10x-2y &=-8 & 5x-y&=-4
\end{flalign}
alignは縦にそろえて中央よりに配置。alignatは横の間隔を自分で指定する。この例では\quad
を指定しているがこれを書かないと密着する。alignatの引数は数式の「カタマリ」の数を指定する(この例では2つのカタマリがある)。flalignはfull lengthの意味で、横幅をめいっぱい使う。
等号などの整列を保ったまま短いテキストを挿入するには\intertext{ ... }
を使用する。
入れ子にする:gathered, multlined, aligned, alignedat
領域$D$を次のように定める.
\begin{equation}
D=\left\{
x,y,z\;\left|\;
\begin{gathered}
x^2+y^2\le 1\\
z\ge 0,\;x+y+z\le 1
\end{gathered}
\right.
\right\}
\end{equation}
\begin{equation}
\begin{multlined}
(x+y+z)^3
=x^3+xy^2+xz^2+2x^2y+2xyz+2zx^2\\
+yx^2+y^3+yz^2+2xy^2+2y^2z+2xyz\\
+x^2z+y^2z+z^3+2xyz+2yz^2+2z^2x
\end{multlined}
\end{equation}
前の例と比べて数式番号の位置が上下方向の中心なのに加えて真ん中の行の左右の配置が異なる。ちなみにmultline環境の各行の配置は\shoveleft{ ... }
(...を左へずらす)、\shoveright{ ... }
(...を右へずらす)で制御できる。
multlined
環境と後で現れる rcases
環境の使用には\usepackage{mathtools}
が必要です。エラーが出た場合はtlmgr install mathtools
しましょう。
\begin{equation}
\delta_{ij}=\left\{
\begin{aligned}
&1 & (i&=j)\\
&0 & (i&\neq j)
\end{aligned}
\right.
,\quad
\delta_{ij}=
\begin{cases}
1 & (i=j)\\
0 & (i\neq j)
\end{cases}
\end{equation}
cases
環境はこのような場合分けをaligned
よりも短く描けますが内容は同じです。alignedat
の使い方はきわめて上記に同じです。ここで上げた環境は、その部分の横幅が数式のサイズそのままになるので最初の例のD=の部分のように前後に別な数式を配置できます。split
とはやや挙動がことなります。
cases
環境では数式がインライン数式モードになる(行中数式で用いられるサイズが小型のもの)。ディスプレイ数式モードにしたければ\displaystyle
を明示的に指定するか、もしくはdcases
環境を用いる。中括弧を右側にしたい場合にrcases
環境もある。これらは\usepackage{mathtools}
が必要である。
数式番号の制御
よく知られた基本的なこととしてアスタリスク*
を環境名の末尾に付与した以下の環境では数式番号が割り振られない。文書の種類にもよるが基本的に使わなくてよいだろう。アスタリスクは無い前提でいく。
equation*
align*
multline*
alignat*
flalign*
複数行に対して1つの数式番号:split
次の連立微分方程式を解け.
\begin{equation}
\begin{split}
y_1' &= y_1+2y_2\\
y_2' &= 2y_1+y_2
\end{split}
\end{equation}
&
は1つだけ使える。お気づきの通りこれはaligned
でも実現できるうえに、現状equation
内のsplit
の外に別の数式があると横幅がはみ出すことがある。従って入れ子にするなら-ed
系の環境を使ったほうが良いだろう。
部分的に数式番号を付けない, 変える:notag, tag
\begin{align}
\dot x(t)&=Ax(t)+Bu(t)\tag{A}\\
y(y)&=Cx(t)+Du(t)\notag
\end{align}
数式番号の形式:theequation, numberwithin, subequations
自動的に割り振られる「tag」の形式を制御できる(LaTeXにおけるtagとlabelの使い分けが難しい)。これらは何かしらのテンプレートを使用していればそのテンプレートが指定する形式になっていることもあるのでその場合はいじらないこと。特にsubequationsの形式などを自分で指定したい場合。
\renewcommand{\theequation}{\thesection.\arabic{equation}}
\numberwithin{equation}{section}
\begin{document}
\section{状態空間モデル}
たぶんコレ.
\begin{align}
\dot{\bm{x}}(t)&=A\bm{x}(t)+Bu(t)\\
y(y)&=C\bm{x}(t)+Du(t)
\end{align}
より具体的に書くと,
\begin{subequations}
\begin{align}
\dot x_1(t)&=x_2(t)\\
\dot x_2(t)&=x_3(t)\\
\dot x_3(t)&=-kx_1(t)-Dx_2(t)+b_3u(t)
\end{align}
\end{subequations}
\end{document}
見ての通りsubequations
で入れ子にした数式にはアルファベットによるtagが振られます。ちなみに、この例からは\numberwithin
の効果はわかりません。意味は「equation」というカウンタを「section」ごとにリセットせよ、です。これが無いと次のセクションに行ったときに最初の数式が(2.4)となりますが、これによって(2.1)とすることが出来ます。\renewcommand
による\theequation
の上書きは見た通りで、他のフォーマットにしたければ好きな区切り文字などが使えます。subsection
やsubsubsection
も当然両方のコマンドで使えます。対応するのはthesubsection
、thesubsubsection
となります。subequations
内の数式のフォーマットを変えたければ\renewcommand{\theequation}{\theparentequation\roman{equation}}
をsubequations
内で使うと「親の数式番号+ローマ数字の子カウンタ番号」とできます。
数式番号の参照:label, eqref
\begin{align}
\dot{\bm{x}}(t)&=A\bm{x}(t)+Bu(t)\label{ss1}\\
y(y)&=C\bm{x}(t)+Du(t)\label{ss2}
\end{align}
\eqref{ss1}, \eqref{ss2}を合わせて状態方程式という.
\begin{subequations}\label{ss3}
\begin{align}
\dot x_1(t)&=x_2(t)\\
\dot x_2(t)&=x_3(t)\\
\dot x_3(t)&=-kx_1(t)-Dx_2(t)+b_3u(t)\tag{A}\label{di}
\end{align}
\end{subequations}
\eqref{ss3}の\eqref{di}は運動方程式である.
普通の\ref
と違ってカッコが勝手につくという違いがある。
参照文献
- amsmathパッケージユーザガイド(https://www.latex-project.org/help/documentation/amsldoc_jpn.pdf)
- Short Math Guide for LaTeX (http://tug.ctan.org/info/short-math-guide/short-math-guide.pdf)