LaTeX/amsmathによる数式環境を見本付きで

2020-02-05 22:392020-02-06 10:29

誰よりも正しく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}

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}

multlineの出力見本

複数の数式を整列させる:align, alignat, flalign

こちらは&(アンド)を指定した場所で複数行の数式を縦に整列させる。

次の連立方程式を解け.
\begin{align}
  5x+5y&=50 & x+y&=10\\
10x-2y &=-8 & 5x-y&=-4
\end{align}

alignの出力見本

次の連立方程式を解け.
\begin{alignat}{2}
  5x+5y&=50 &\qquad x+y&=10\\
10x-2y &=-8 &     5x-y&=-4
\end{alignat}

alignedの出力見本

次の連立方程式を解け.
\begin{flalign}
  5x+5y&=50 & x+y&=10\\
10x-2y &=-8 & 5x-y&=-4
\end{flalign}

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}

gatheredの出力見本

\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}

multlinedの出力見本

前の例と比べて数式番号の位置が上下方向の中心なのに加えて真ん中の行の左右の配置が異なる。ちなみに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}

alignedとcasesの出力見本

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}

splitの出力見本

&は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}

notagとtagの出力見本

数式番号の形式: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の出力見本

見ての通りsubequationsで入れ子にした数式にはアルファベットによるtagが振られます。ちなみに、この例からは\numberwithinの効果はわかりません。意味は「equation」というカウンタを「section」ごとにリセットせよ、です。これが無いと次のセクションに行ったときに最初の数式が(2.4)となりますが、これによって(2.1)とすることが出来ます。\renewcommandによる\theequationの上書きは見た通りで、他のフォーマットにしたければ好きな区切り文字などが使えます。subsectionsubsubsectionも当然両方のコマンドで使えます。対応するのはthesubsectionthesubsubsectionとなります。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}は運動方程式である.

eqrefの使い方

普通の\refと違ってカッコが勝手につくという違いがある。

参照文献