13
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

行列環境のエトセトラをまとめる

Last updated at Posted at 2020-09-09

行列の書き方はいくつもありすぎて分からんのじゃ.まとめておこう.

行列を書くなら,ベクトルやテンソルも書きたいだろう.以下の拙文も紹介しておきたい.

LaTeX での行列

$\rm\LaTeX$ 標準では,array 環境を用いた以下のような方法がある.

\begin{equation}
A =
    \left(
    \begin{array}{ccc}
    a & b & c \\
    d & e & f \\
    g & h & i 
    \end{array}
    \right)
\end{equation}

$\rm\LaTeX$ で数式を使用する場合の多くにはamsmath を使用する.したがって,上での表記方法はあまり使用しない方が良いだろう.1

以下で紹介する方法はamsmath とmathtools を使用することで,このarray 環境を用いた方法を踏襲する形でより綺麗になるように定義されている.また,これらのパッケージでは少しだけ簡単に行列を表記できる.しかし,基本的には{cc...c} のようなオプションは指定しない.指定したい場合には,行列要素の揃える位置を指定したい を参照してほしい.

○ amsmath とmathtools を使った行列環境

基本的な行列(matrix)環境を紹介する.mathtools ではamsmath では提供されていない行列環境を拡張しているので,ぜひこのパッケージも活用していくといいだろう.

また,これらの行列環境が面倒であれば,physics パッケージ2を利用することをお勧めする.これらの環境を用いずとも幾分か簡略的に行列を表記することが出来る.

■ 提供されている行列環境

ディスプレイスタイル(背の高いスタイル)とテキストスタイル(背の低いスタイル)がある.各パッケージが提供している行列環境を表にしておく.

● amsmath

各デリミタに対して行列環境が提供されている.サンプルは以下#-ディスプレイスタイルで紹介する.

デリミタ ディスプレイスタイル テキストスタイル
なし matrix smallmatrix
丸括弧 (Parenthesis) pmatrix -
角括弧 (Bracket) bmatrix -
波括弧 (Brace) Bmatrix -
垂直棒 (Vertical bar) vmatrix -
2本の垂直棒 Vmatrix -

amsmath で提供する行列環境では,デリミタを自動的に挿入してくれる.

● mathtools

amsmath を拡張する形で以下の17個の行列環境を提供している.

デリミタ ディスプレイスタイル テキストスタイル
なし matrix* smallmatrix*
丸括弧 (Parenthesis) pmatrix* psmallmatrix, psmallmatrix*
角括弧 (Bracket) bmatrix* bsmallmatrix, bsmallmatrix*
波括弧 (Brace) Bmatrix* Bsmallmatrix, Bsmallmatrix*
垂直棒 (Vertical bar) vmatrix* vsmallmatrix, vsmallmatrix*
2本の垂直棒 Vmatrix* Vsmallmatrix, Vsmallmatrix*

* 付きの環境は,行列要素を右揃えや左揃えに変えることが出来る(参照節#-行列要素の揃える位置を指定したい).

もしも,何らかの理由からmathtools を使用できない場合のために,以下のような方法もあることを紹介しておきたい.
以下のようにすることでmathtools が提供している環境と同等の環境を利用することが出来るだろう.

**テキストスタイルを真似たい**(折りたたみ)

amsmath ではテキストスタイルの行列環境としてsmallmatrix を提供している.これを利用してpsmallmatrix を再現するには,\left( ~ \right) で囲えば良いだろう.

$
\left(
    \begin{smallmatrix}
    a & b & c \\
    d & e & f 
    \end{smallmatrix}
\right)
$

同様にして,bsmallmatrix では\left\lbrack ~ \right\rbrack ,vsmallmatrix では\left\lvert ~ \right\rvert で囲えば良いだろう.

**行列要素の揃える位置の指定したい**(折りたたみ)

amsmath では行列要素は中央揃えしか出来ない.mathtools を使用せずに揃える位置を変更する方法は以下の3つの方法が考えられる.

array 環境を用いるのがもっとも簡単な方法であり,以下の2つの方法をするよりもお手軽である.

\phantom を使った方法はなかなかに面倒な方法だ.

\begin{equation*}
    \begin{matrix}
    \phantom{-}A & -B \\
    -C & \phantom{-}D 
    \end{matrix}
\end{equation*}

これは,\phantom で必要な空白を挿入して,見た目上で右揃えになるようにしている.これは逐一空白を挿入する必要があるので非常に面倒くさい.行列要素が増えれば尚のこと面倒である.

mathtools は使えないが他のパッケージなら使える(そんな状況がある???)ならば,nicematrix 3を導入しても良いだろう.あるいは,easymat 4も良いかも知れない.子細なことはあまりよく分からないので,各自パッケージガイド等を参照してほしい.

■ ディスプレイスタイル

以下のようにXmatrix 環境を数式環境内で用いる.

\begin{equation}
    \begin{matrix}
    a & b & c \\
    d & e & f 
    \end{matrix}
\end{equation}
デリミタ 環境
なし matrix matrix
丸括弧 (Parenthesis) pmatrix pmatrix
角括弧 (Bracket) bmatrix bmatrix
波括弧 (Brace) Bmatrix B-matrix
垂直棒 (Vertical bar) vmatrix vmatrix
2本の垂直棒 Vmatrix V-matrix

以上の環境はamsmath から提供されているが,各行列要素は中央揃え5になっている.

■ テキストスタイル

本文内で行列を表記したい人がいるのかは不明だが, 本文中で表記するための背の低い行列環境が定義されている.先ほどの環境にsmall- とすれば良いだけだ.

$
\begin{smallmatrix}
    a & b & c \\
    d & e & f 
\end{smallmatrix}
$
デリミタ 環境
なし smallmatrix smallmatrix
丸括弧 (Parenthesis) psmallmatrix psmallmatrix
角括弧 (Bracket) bsmallmatrix bsmallmatrix
波括弧 (Brace) Bsmallmatrix B-smallmatrix
垂直棒 (Vertical bar) vsmallmatrix vsmallmatrix
2本の垂直棒 Vsmallmatrix V-smallmatrix

あまり行数を増やすのは良くないと思われる.

○ 行列要素の揃える位置を指定したい

* 付きの環境を用いてr, l のオプションを指定することで右揃え,左揃えにすることが出来る.これは,上で示したすべての行列環境で使用することが出来る.デフォルトではc の中央揃えになっている.

各行列要素の見た目サイズが大きくなる場合には非常に気にした方が良いだろう.

\begin{equation*}
M =
    \begin{pmatrix*}[r]
    A & -B \\
    -C & D 
    \end{pmatrix*}
\end{equation*}

ただし,このオプションはすべての行列要素に適用され,array 環境のように各列に対して指定することは出来ないことに注意が必要である.

matrix-right-align.png

○ Xsmallmatrix のグローバルな変更

mathtools でいくつか変更することが出来る.

以下のようなことが出来る.

smallmatrix-settings.png

■ 行列要素の揃える位置を指定したい

smallmatrix-align を設定することで,文章全体で行列要素の位置をそろえることが出来る.
全体を右揃えにする場合は以下のようにする.

\mathtoolsset{smallmatrix-align = r}

このとき,* 付きのXsmallmatrix* 環境である必要がある.(ディスプレイスタイルでのグローバルな設定は無いようだ.なんで無いのか……)

■ デリミタと行列要素の間隔を変えたい

smallmatrix-inner-space を設定することで,デリミタと行列要素の間隔を変更することが出来る.
デフォルトでは\, となっている.

\mathtoolsset{smallmatrix-inner-space = \,}

ディスプレイスタイルでのグローバルな設定はないようだが,どうにかすれば出来そう.6

○ 行列関連の演算子

\det, \dim, \ker(小文字になっていることに注意) は定義されているが,他にも行列関連で使用する演算子はあるだろう.

以下のように定義しておこう.

\DeclareMathOperator{\Ker}{Ker}
\DeclareMathOperator{\tr}{tr}
\DeclareMathOperator{\Tr}{Tr}
\DeclareMathOperator{\rank}{rank}
\DeclareMathOperator{\Im}{Im}
\DeclareMathOperator{\im}{im}
\DeclareMathOperator{\diag}{diag}

このほかにも独自に定義しておいても良いだろう.(行列で使用する演算子を網羅出来ている気がしない……)

参考:amsmath+mathtools と仲良くなろう#-自作で演算子を定義したい - Qiita

○ 転置行列

転置行列は,"transpose" を意味する"t" を左上または"T" を右上に付与する.数学表記の慣例はそれぞれの流派にしたがうべきだが,"t" または"T" に関してはある程度こだわりを持った方が良いと思われる.

■ 左上に"t" の場合

左上の場合,べき乗と誤読するようなことはないので,通常のイタリック体で表記しても良い.しかし,"t" と行列の間隔は狭めておいた方が表記としては見やすい.したがって,以下のようにする.

{}^t\! A    % A に詰まるように`\!` を含めている

上のように扱う場合には,左側の{} のサイズにしたがって"t" が上付きになるので,行列を明らかにしているときには不適切な位置に"t" が付いてしまう.

mathtools には右側の数式のサイズに対して上付き・下付きの文字を与えるコマンドが定義されている.
\prescript を用いて以下のように定義すると良いだろう.(cf. The mathtools Package, §4.2 Left sub/superscripts)

\begin{equation*}
\prescript{t\!}{}{M}
    =
    \prescript{t\!}{}{
    \begin{pmatrix*}[r]
    A & -B \\
    -C & D
    \end{pmatrix*}}
\end{equaiton*}

このようにすることで,以下のようになる.

transpose-left.png

もちろんこれは一例であり,ローマン体の方が良いという場合には\mathrm{t} とする.

■ 右上に"T" の場合

右上の場合には,べき乗と誤読する可能性があるので,イタリック体での表記は避けた方が良い.また,\mathrm を用いてローマン体(セリフ体)にしている場合もあるが,これもまたべき乗と誤読する可能性はある.

したがって,以下のような表記方法がよく用いられているようだ.

コマンド 概略
\mathsr サンセリフ体 mathsr
\intercal amssymb から提供されている intercal
\top top

どれを採用しても支持する人間も反対する人間もいる.個人的には\mathsr を用いた方法が見やすいので好ましく思う.

ざっと意見をまとめておくと以下のようなものが見られた.

  • \mathsr
    • あまり綺麗でない
    • 他2つのいずれかの方が良い
  • \intercal
    • 小さめに表示される
    • 二項演算子に関するコマンドなので使用すべきでない
    • 高さが低い
  • \top
    • 線が薄いので見づらい
    • 記号自体が大きい

どの転置のシンボルが好みだろうか.

transpose-right.png

★ Suggestion

以下のように定義しておけば,上のいずれの場合の転置の表記であっても対応することが出来るだろう.

\newcommand{\transpose}[1]{%
    \prescript{t\!}{}{#1}    % 左上に"t" の場合
%    #1 ^\mathsr{T}    % 右上に"T" の場合
}

転置に関しては微妙な表記方法の違いがあり,どれに対応するかは個人の自由になる.マクロで定義しておいた方が安全に管理することが出来るだろう.7

○ 3点リーダー

$\rm\LaTeX$ で提供されている3点リーダーで行列を省略するような表記方法はよくあるだろう.

コマンド みほん
よこ (crosswise) \cdots cdots
たて (vertical) \vdots vdots
ななめ (diagonal) \ddots ddots

ここで,横の3点リーダーは\ldots を使用しないようにしよう.あまり好ましくはない.8

amsmath では連続する複数の行要素をリーダーで埋めることも出来る.\hdotsfor を使おう.

\hdotsfor[<乗数>]{<行の要素の数>}

以下のように利用することが出来る.

\begin{equation*}
\begin{pmatrix}
    a & b & c & d \\
    e & \hdotsfor{3}
\end{pmatrix}
\end{equation*}

参考

追記

  • 2020/09/14 : amsmath とmathtools が提供する行列環境を明確にしました.
  1. 表記方法は統一しておいた方が良いという程度にしかこの論の補強を考えられなかった.

  2. physics.sty | CTAN から.使い方に関しては,「数式をもっと楽に書ける TeX の physics パッケージまとめ - Qiita」に詳しい.

  3. nicematrix | CTAN から.「天地有情 [LaTeX] nicematrix --- 新しい環境を使用して数学行列の組版を改善する」に詳しい.

  4. easymat | CTAN から.紹介しているサイトを確認することは出来なかった.(不人気なのかな?)

  5. 上での$\rm\LaTeX$ 標準でのarray 環境では,揃える位置をc, r, l を指定することが出来る.しかし,amsmath ではそのような指定が出来ない.mathtools ではそのような指定のできる* 付きの行列環境を提供している.

  6. \arraystretch で変更することも出来るようだが,これはtable 環境にも影響してしまうので良くないのではと思う.

  7. 多くの人が満足する転置を表す記号を新たに定義してほしい気持ちはすごくある.

  8. \cdots は文の中心の3点リーダーとなるが,\ldots は文の下側の3点リーダーとなる.

13
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?