math vector - yarakos95/LaTeX-for-math GitHub Wiki

ベクトルを書きたい

ベクトルを書きたい.表記や方法がいくつかある.まとめておこう. これを一通り読んだら,ベクトルに関するLaTeX のノートが書けることを想定している.

○ ベクトルコマンドを定義しておく

ベクトルにはいくつかの方法があり,それぞれの表記方法をないまぜにするようなことはほとんどの場合ないだろう.新たなコマンドとして定義しておいて,あとで好きなように変更できるようにしておいた方が良い.[^newcommand] また,どのような意味で矢印を付けているのか,太字斜体にしているのかはっきりさせることも出来る.

[^newcommand]: \vec\vector はすでに定義されているので,この名前を使いたい場合には\renewcommand を用いる.

個人的には以下のようにしておくベクトルがおもしろいと思う.[^attention]

[^attention]: オフィシャルな文面で矢印と太字斜体の両方を使用したベクトルは使うべきではない(見たことがない).しかし,自分で読んでいて太字になっているのか分からないときがある.そこでこのような表記をしている.最後には\boldsymbol のみにしている.

\newcommand{\vect}[1]{% この中身は自分の好きなベクトルの表記に置き換える
    \overset{\scriptscriptstyle \boldsymbol{\to}}{\boldsymbol {#1}}    % amsmath が必要
}

my-vector.png

ちなみに,以下で紹介するesvect パッケージが提供する\vv では\boldsymbol やbm パッケージを用いても全体をボールド体にすることは出来なかった.

○ 矢印スタイル

$\rm\LaTeX$ 標準では\vec\overrightarrow がある.

コマンド 矢印の長さ
\vec \vec{a} $\vec{a}$ 一文字分
\overrightarrow \overrightarrow{AB} $\overrightarrow{AB}$ 好きなだけ

arrow-vector.png

矢印の形状を変更したい場合は,esvect パッケージ[^esvect]を用いると良いだろう.と言うよりも変えた方が良いだろう.\overrightarrow は矢印と文字が干渉することがあるが,esvect パッケージが提供する矢印では干渉することはない. また,以下のようにah のオプションから矢印のスタイルを変更することが出来る.

[^esvect]: esvect.sty | CTAN から.「LaTeX:esvectパッケージによる矢線ベクトル表記 - Qiita」に詳しい.パッケージガイドも1ページしかないので,直接これを読んでも良いだろう.

esvert-arrowstyle.png

h\vec, a\overrightarrow に近い矢印になっているようだ.

○ 太字斜体スタイル

いくつかの方法がある.いずれの方法であっても同様の結果を得る.

  • $\rm\LaTeX$ 標準
  • amsmath パッケージ[^amsmath]を用いた方法
  • bm パッケージ[^bm]を用いた方法

[^amsmath]: amsmath.sty | CTAN から.

[^bm]: bm.sty | CTAN から.

bold-vector.png

このほかにもphysics パッケージを用いる等の方法があるが,以下の方法を把握していれば他はほとんど必要ないだろう.

■ LaTeX

以下のようにすれば,数学パッケージを読み込まずにベクトルを表記することが出来る.

\mbox{\boldmath$A$}

このほかにも\mathbf を用いることでボールド体にすることは出来るが,斜体とはならないので注意が必要.

■ amsmath

amsmath はほとんどの場合で使われるはずなので,以下の方法がオーソドックスな方法だろう.

\boldsymbol{A}

■ bm

bm パッケージは\boldsymbol を拡張している.

\bm{A}

★ 太字斜体に出来ない文字

どのような文字がボールドに出来ないのか把握していないが,poor man's bold \pmb を用いることで,太字にすることが出来る.

math-pmb.png

これは,2回文字を重ねることで太字にしている.あまり綺麗ではないので,太字斜体に出来ない場合のみ使用すると良いだろう.よく見るとダブっている.

● 白抜き文字を使いたい

白抜き文字でベクトルを示したい場合には,\mathbb を使おう.ただし,アルファベット大文字にしか使えないので注意が必要である. ベクトルに使用するよりも,集合で使用することを想定しているようだ.

また,bbm パッケージ[^bbm]では\mathbbm を少しだけ拡張しているようだ.

[^bbm]: bbm.sty | CTAN から.「天地有情 [LaTeX] bbm-macros ---「黒板スタイル」cmフォントのLaTeXサポート」に詳しい.

○ ベクトルの添え字

ベクトルに添え字が付与される場合があるだろう. このとき,添え字がベクトルそのものとは無関係の場合には,ベクトルの表記が混じることのないようにすべきである.

ダメな例 :

    % 多くの場合,添え字はベクトルに含むべきではない
\vec{A_0}    % 矢印の位置がずれる
\overrightarrow{A_1}    % 矢印の中に添え字が含まれてしまっている
\boldsymbol{A_2}    % 添え字もボールド体になっている

vector-bad.png

\overrightarrow では,添え字をベクトルの矢印内に含んでいてもおかしくない場合もある. esvect パッケージを利用する場合であっても,添え字を避けるようにすることのできるコマンドもあるようだ.

訂正例 :

\vec{A}_0
\overrightarrow{A}_1
\boldsymbol{A}_2

vector-good.png

ベクトルに_\mathrm{<vector name>} とする場合には,特に注意が必要になるだろう.

■ esvect を使った場合

下付き文字を付与するためのコマンドが提供されている. このコマンドを用いると,\overrightarrow よりも少しだけ見た目が良くなる.

\begin{align*}
\vec{a}_0, \quad \overrightarrow{A}_1, \quad \overrightarrow{AB}_2 \\
\vv{a}_{0}, \quad \vv{A}_{1}, \quad \vv{AB}_{2} \\    % "\vec" や"\overrightarrow" と同じように使うことが出来る
\vv*{a}{0}, \quad \vv*{A}{1}, \quad \vv*{AB}{2}     % 下付き文字を含むコマンド
\end{align*}

vector-subscript.png

\vec\overrightarrow, \vv に比べて\vv* の方が添え字がベクトルに近づいている.

■ 上付き文字

転置行列等で上付き文字を付与する場合,少し違いが生じる.

\vec{A}^\mathsf{T}
\overrightarrow{B}^\mathsf{T}
\vv{C}^\mathsf{T}

vector-superscript.png

\vec では矢印と上付き文字が完全に干渉してしまっている.\, などで間隔を空けることでごまかすことは出来るが面倒くさい. この意味でもesvect パッケージを利用した方が有用だろう.

○ その他の記号

ベクトルを記述する記号はさまざまある.これらについてもまとめておこう.

■ 平行・垂直

平行記号と垂直記号はamsmath から関係演算子として提供されている.

\perp    % 垂直
\parallel    % 平行

この平行記号は\| と似た記号となっている.斜めの平行記号は提供されていないので,自作するしかない.

\newcommand{\parallelsum}{\mathbin{/\mkern-5mu/}}    % \parallelsum と定義
\perp    % 垂直
\parallel    % 平行
\parallelsum    % 斜め平行

perp-parallel.png

垂直記号に比べて平行記号は少し大きく見える.高さを上手く調整したいが,ムズカシイね.[^shortparallel]

[^shortparallel]: \shortparallel もあるが,小さすぎる.

また,斜めの平行記号は以下のような定義方法もある.

\newcommand{\varParallel}{    % \varParallel と定義
    \def\@varParallel{/\kern-.2em /}\mathchoice    %
    {\@varParallel}    % 
    {\textstyle\@varParallel}    % 
    {\scriptscriptstyle\@varParallel}    % 
    {\scriptscriptstyle\@varParallel}    % 
}

ただし,この方法では,添え字にした場合に\scriptscriptstyle が反映されてしまうため他の文字もこれに従ってしまう.

■ 積

内積(スカラー積)と外積(ベクトル積)は以下を利用する.

\cdot    % ドット
\times    % クロス

実際に利用すると次のようになる.

\boldsymbol{A} \cdot \boldsymbol{B} \times \boldsymbol{C}

cdot-and-times.png

ちょっと細い気がする.

\newcommand{\dotp}{\boldsymbol{\cdot}}    % "dot product"
\newcommand{\crossp}{\boldsymbol{\times}}    % "cross product"
\boldsymbol{A} \dotp \boldsymbol{B} \crossp \boldsymbol{C}

bold-cdot-and-times.png

■ 絶対値・ノルム

絶対値とノルムを定義しておこう.この定義コマンド内で\left ~ \right で対応関係を採っても良いだろう.

\providecommand{\abs}[1]{\lvert #1 \rvert}
\providecommand{\norm}[1]{\lVert #1 \rVert}

mathtools を利用している場合であれば,プリアンブルで以下のように定義しておこう.

\DeclarePairedDelimiter{\abs}{\lvert}{\rvert}
\DeclarePairedDelimiter{\norm}{\lVert}{\rVert}

このように定義しておくと,以下のように使うことが出来る.

\abs{\frac{a}{b}}, \quad    % そのまま
\abs*{\frac{c}{d}}, \quad    % * 付きは自動調整
\abs[\Bigg]{\frac{e}{f}}.    % \Bigg オプション付き

abs.png

■ 勾配・発散・回転

勾配,発散,回転に関しても定義しておくと便利だろう.

\DeclareMathOperator{\grad}{grad}
\DeclareMathOperator{\divergence}{div}    % \div は "÷" と競合するので注意
\DeclareMathOperator{\rot}{rot}
\DeclareMathOperator{\curl}{curl}

発散に関して\div としたい場合には,\renewcommand としておけば良い.

\renewcommand{\div}{\divergence}    % これ以降では "÷" は使えない
"÷" も使いたい (折りたたみ)

以下のようにしておけば良いような気がした.

\newcommand{\divisionsymbol}{\div}    % これ以降では "÷" は "\divisionsymbol" とする
\renewcommand{\div}{\divergence}    % これ以降では "\div" で "div" とする

上手くいかなかったので,解決方法があれば教えてほしい.

■ ラプラシアン・ダランベルシアン

ラプラシアンやダランベルシアンについても定義しておくと良いだろう.[^unicode]

[^unicode]: Unicode で特定の文字が与えられているようなので,これを用いた方が確実だと思われる.ラプラシアンはU+2206 ,ダランベルシアンはU+29E0 らしい.ただし,この場合にはUnicode で指定することのできるパッケージを新たに読み込む必要がある.しかし,これらはあくまでも意味的な文字であり,形状はいずれを採ってもおおよそ同じようなものになる.少なくとも,\Delta (漢字のくち)で代用しているわけではない限りには問題ないだろう.

\newcommand*{\Laplace}{\!\mathop{}\mathbin{\bigtriangleup}}    % ただの三角形
\newcommand*{\DAlambert}{\!\mathop{}\mathbin{\Box}}    % ただの四角形

lapracian-dalambercian.png

\tilde\hat 等のアクセントを付与する際でもきれいな位置にレンダリングされるので,これで良いかと思われる.[^experience]

[^experience]: \DeclareMathOperator で定義しても良さそうに思っていたが,アクセントを付けるとズレる.適していないようだ.また,関数との間隔が空きすぎるように見える.

これが面倒な場合には,ナブラの2乗でも良いように思う.

\newcommand*{\Laplace}{\mathbin{\nabla^2}

余談

矢印スタイルではesvect パッケージを利用,太字斜体スタイルでは\bodlsymbol またはbm パッケージを利用すると良いだろう.

参考

追記

⚠️ **GitHub.com Fallback** ⚠️