ベクトル書きたい

# ベクトルを書きたい

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

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

ベクトルにはいくつかの方法があり，それぞれの表記方法をないまぜにするようなことはほとんどの場合ないだろう．新たなコマンドとして定義しておいて，あとで好きなように変更できるようにしておいた方が良い．(`\vec` と`\vector` はすでに定義されているので，この名前を使いたい場合には`\renewcommand` を用いる．)
また，どのような意味で矢印を付けているのか，太字斜体にしているのかはっきりさせることも出来る．

個人的には以下のようなベクトルがおもしろいと思う．[^myvect]

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

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

![my-vector.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/9174c48c-1f9a-a593-ae61-dc254bbc8dbd.png)

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

# ○ 矢印スタイル

$\rm\LaTeX$ 標準では`\vec` と`\overrightarrow` がある．

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

![arrow-vector.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/b30224f8-4c2c-261c-e109-1184fa6f8d5f.png)

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

> [esvect | CTAN](https://www.ctan.org/pkg/esvect)

![esvert-arrowstyle.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/fbcd4e04-8e00-8d38-7ec2-aeeca38b618b.png)

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

「[LaTeX：esvectパッケージによる矢線ベクトル表記 - Qiita](https://qiita.com/ryutaatkagawanct/items/0830df487bcaf95f4f9d)」に詳しい．パッケージガイドも1ページしかないので，直接これを読んでも良いだろう．

# ○ 太字斜体スタイル

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

- LaTeX 標準
- amsmath パッケージを用いた方法
- bm パッケージを用いた方法



![bold-vector.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/d5ab68b0-3828-6a15-71a6-d218e506a2a5.png)

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

## ■ LaTeX

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

```latex
\mbox{\boldmath$A$}
```

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

## ■ amsmath

> [amsmath | CTAN](https://www.ctan.org/pkg/amsmath)

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

```latex
\boldsymbol{A}
```

## ■ bm

> [bm | CTAN](https://www.ctan.org/pkg/bm)

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

```latex
\bm{A}
```

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

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

![math-pmb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/6cea9448-390e-bb25-93c6-e310e17167c0.png)

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

# ● 黒板太字を使いたい

黒板太字を利用したい場合には`\mathbb` を使う．ただし，LaTeX 標準(Computer Modern) ではアルファベット大文字にしか使えないので注意が必要である．
しかし，黒板太字はベクトルに使用するよりも，集合で使用することを想定しているようだ．使用にはいくつか注意が必要だろう．

以下で黒板太字に関する記事を作成したので興味があれば確認してほしい．アルファベットやアラビア数字，ギリシャ文字の黒板文字を紹介している．

> [黒板文字を使いたい](https://gist.github.com/Yarakashi-Kikohshi/cf19ee163ff426196d7494b81339c3cf) \- Gist

# ○ ベクトルの添え字

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

> **ダメな例**

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

![vector-bad.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/87103545-af2c-1d02-26bc-2c902f491b02.png)


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

> **訂正例**

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

![vector-good.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/32eb27ea-72f2-ab0f-f2a5-339f6e81c60f.png)


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

いっそ，xparse パッケージを利用してオプション引数を付与したベクトルコマンドを作成しても良いだろう．

<details><summary>作成例 (折りたたみ)</summary><div><br>


```latex
\usepackage{xparse}
\usepackage{amsmath}
\NewDocumentCommand{\vect}{ m o }
{
    \IfNoValueTF{#2}
    {\boldsymbol{#1}}
    {\boldsymbol{#1}_{\mathrm{#2}}}
}
```

使用例は以下のようになる．`\boldsymbol{A}_{\mathrm{max}}` を簡単にできる．

```latex
\vect{A}[max]
```

また，オプション引数なしに`\vect{A}` でも利用できる．


</div></details><br>



## ■ esvect を使った場合

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

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

![vector-subscript.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/7a47e18d-6152-1155-a076-d220dd314256.png)


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

## ■ 上付き文字

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

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

![vector-superscript.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/e7453a65-09fd-1048-f134-c99efd0cbc93.png)


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

# ○ その他の記号

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

## ■ 平行・垂直

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

```latex
\perp    % 垂直
\parallel    % 平行
```

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

```latex
\newcommand{\parallelsum}{\mathbin{/\mkern-5mu/}}    % \parallelsum と定義
```


```latex
\perp    % 垂直
\parallel    % 平行
\parallelsum    % 斜め平行
```


![perp-parallel.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/19c3d4ba-fca2-a6fa-07e2-a493b78b8eca.png)


垂直記号に比べて平行記号は少し大きく見える．高さを上手く調整したいが，ムズカシイね．`\shortparallel` もあるが，小さすぎる．

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

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

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

## ■ 積

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

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

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

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

![cdot-and-times.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/579daa38-a518-1916-5b6c-bf8985bb9f48.png)

ちょっと細い気がする．

```latex
\newcommand{\dotp}{\boldsymbol{\cdot}}    % "dot product"
\newcommand{\crossp}{\boldsymbol{\times}}    % "cross product"
```

```latex
\boldsymbol{A} \dotp \boldsymbol{B} \crossp \boldsymbol{C}
```

![bold-cdot-and-times.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/a1d9f23a-e4bb-56eb-180a-35e1fefa70fc.png)


## ■ 絶対値・ノルム

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

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

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

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

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

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

![abs.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/ec39a885-c805-ca5e-c318-24e36ca8a34f.png)

## ■ 勾配・発散・回転

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

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

発散に関して`\div` としたい場合には，`\renewcommand` としておけば良い．

```latex
\renewcommand{\div}{\divergence}    % これ以降では "÷" は使えない
```

"÷" も使いたい場合は以下のようにしておけば良い．

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


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

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

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


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

![lapracian-dalambercian.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590705/d9b2e559-6e81-cd67-a209-4acd8ef7586f.png)

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

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

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

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

# 余談

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


# 参考

- [TeXの記憶(101)— 斜体の\parallel | 寝坊した](https://oversleptabit.com/archives/818)
- [Correct symbol for the Laplace operator ($\Delta$) - TeX - LaTeX Stack Exchange](https://tex.stackexchange.com/questions/76553/correct-symbol-for-the-laplace-operator-delta)
- [symbols - How to draw the "parallel circuits" sign "//"? - TeX - LaTeX Stack Exchange](https://tex.stackexchange.com/questions/37912/how-to-draw-the-parallel-circuits-sign)

# 追記

- 2020/10/05 : ベクトルの添え字についてにおける「[esvect を使った場合](#-esvect-を使った場合)」，「[上付き文字](#-上付き文字)」を追加しました．
- 2020/04/16: 黒板太字について修正．その他軽微修正．