LaTeX で物理学徒が最低限知っておくべきこと・私が気を付けていること

<!--LaTeX-->
# はじめに
ごきげんよう．いぇとです．
この記事は東京大学理学部物理学科 B3 有志による [Physics Lab. 2022 Advent Calendar 2021](https://adventar.org/calendars/7044) 19日目の記事です．

Physics Lab. とは物理学科有志による五月祭企画です．私は生物物理班に所属しています．生物物理班については，たがやし班長が書いてくれた記事[『生物物理班だよ』](https://delicate-attack-fad.notion.site/Physics-Lab-2022-Advent-Calendar-4-d96d520610cb473eb236a53d76b4b5e5)を見てください．絶対．



当初の予定では，19日目は統計力学のくりこみ群の話を書こうと思っていたのですが，多忙につき色々と試行錯誤をする暇がなく辞めることにしました．書いてもいいんですけどね．

代わりに LaTeX のお役立ち（？）情報を書こうと思います．この記事では LaTeX の基本事項を前提とします．今回は私が普段使っているパッケージの紹介や気をつけていることなどについてまとめます．（「普段気を付けていること」とかいうの，普段気を付けているせいで常に意識しているわけではなくてパッとは思いつかないです．この記事は私の過去のレポートや発表資料を見返しながら作成しています．）

（この記事では脚注をできるだけ付けずにカッコなどを使います．）

<!-------------------------------------------------------------------------->
# パッケージ
## `TikZ` パッケージ
描画パッケージです．12日目の記事は TikZ について書きました．まだ読んでいない人はどうぞ：[『TikZ でこけし・・Barnsley fern・トポロジカル欠陥』](https://qiita.com/yetput_ikura/items/4afc44e1b35508694d88)

## `physics` パッケージ
とりあえずの `physics` パッケージです．いろんなコマンドが簡潔に書けます．プリアンブルでパッケージを読み込みます．

```LaTeX
\usepackage{physics}
```
普段使っているコマンドをピックアップします．まずはカッコ関連．

- `\qty()`, `\qty{}`, `\qty[]`：カッコのサイズを勝手に調節してくれます．（`\qty` の綴りは quantity からきています．英語では $(x+1)(x+2)$ を the quantity x plus one times the quantity x plus two と読むらしいです．）

```LaTeX
\[
%\quad：スペースを空ける
\qty(\frac{3}{4})^n,\quad
\qty{\qty(\frac{3}{4})^n+\qty(\frac{4}{5})^n},\quad
\qty[\qty{\qty(\frac{3}{4})^n+\qty(\frac{4}{5})^n}+2^n]
\]
```

出力：

<img width='500' alt='1_qty' src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1545738/9a3eaf77-fb59-6bd5-d978-92c6c8d1eaed.png'>

<!------------------------------------>
次に微分・偏微分・変分．

- `\dd{}`, `\dd[]{}`：微小量の $\mathrm{d}$．`\dd{x}` で $\mathrm{d}x$ を出力して，前後に適切なスペースを入れてくれます．`\dd[3]{x}` のようにすると $\mathrm{d}^3x$ としてくれます．
- `\dv{}`：微分演算のコマンドです．`\dv{x}` で $\mathrm{d}/\mathrm{d}x$ を出力します．
- `\dv{}{}`：`\dv{f}{x}` のように入力を2つ入れると $\mathrm{d}f/\mathrm{d}x$ を出力してくれます．
- `\dv[]{}{}`：`\dv[n]{f}{x}` のようにもう一つ引数を指定すると $\mathrm{d}^nf/\mathrm{d}x^n$ としてくれます．
- `\dv*{}{}`：`*` をつけると微分をインライン表示してくれます．
- `\pdv{}`, `\pdv{}{}`, `\pdv[]{}{}`, `\pdv*{}{}` など：偏微分のコマンドです．挙動は `\dv` と同じ．`\dv` にはない挙動で，`\pdv*{f}{x}{y}` とすると $\partial^2f/\partial x\partial y$ を表示します．
- `\var{}`, `\fdv{}` など：変分のコマンドです．挙動は `\dd` や `\dv` と同じ．

```LaTeX
\[
\int f(x)\dd{x},\quad
\dv{f}{x},\quad
\pdv{f}{x},\quad
\fdv{f}{x}
\]
```

出力：

<img width='400' alt='2_dd' src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1545738/d9c14195-9f22-1706-405c-1e6e710de6f6.png'>

<!------------------------------------>
行列関連．

- `\mqty()`, `\mqty[]` など：行列が書けます．列は `&` で，行は `\\` で区切ります．
- `\dmat{}`, `\dmat[]{}`：対角行列を出してくれます．`\dmat[0]{}` のように `0` を渡せば，ゼロで埋めてくれます．

```LaTeX
\[
\mqty[0&1\\2&0],\quad
\mqty[\dmat{1,-1}],\quad
\mqty[\dmat[0]{1,-1}]
\]
```

出力：

<img width='400' alt='3_mat' src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1545738/fb75a498-e87a-099d-8268-d669ae97965d.png'>

<!------------------------------------>
ブラケット記法．

- `\bra{}`, `\ket{}`：ブラケットが書けます．
- `\braket{}{}`, `\braket{}`：内積が書けます．
- `\ketbra{}{}`, `\ketbra{}`：外積が書けます．
- `\ev{}`, `\ev{}{}`：期待値が書けます．
- `\mel{}{}{}`：行列要素が書けます．

```LaTeX
\[
\bra{a},\quad
\ket{a},\quad
\braket{a}{b},\quad
\ketbra{a}{b},\quad
\ev*{\hat{A}}=\ev{\hat{A}}{n},\quad %resizeしたくないので*をつける
\mel{n}{\hat{A}}{m}
\]
```

出力：

<img width='600' alt='4_braket' src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1545738/4e066a47-8bb7-b7ad-b153-84a99dd4c24c.png'>

<!------------------------------------>
その他よく使うもの．

- `\eval`：評価（代入）．
- `\order`：オーダー．
- `\cross`：外積．
- `\Re`, `\Im`：実部と虚部．（もともと `\Re` で表示されていたものは `\real` に，`\Im` で表示されていたものは `\imaginary` に書き換えられています．）
- `\qcc`, `\qif` など：前後に `\quad` が入ります．ごく稀に使う．

```LaTeX
\[
%プリアンブルで \renewcommand{\inf}{\infty}
\int_1^\inf\frac{1}{x^2}\dd{x}
=\eval{-\frac{1}{x}}_1^\inf
=1.
\]

\[
e^x
=1+x+\order{x^2}.
\]

\[
%プリアンブルで \usepackage{bm}
\bm{A}\cross\bm{B},\quad
z=\Re z+i\Im z
\]
```

出力：

<img width='300' alt='5_other' src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1545738/fa06cd33-8643-d5fc-5814-d7ed2dc674cd.png'>


## `siunitx` パッケージ
`siunitx` は SI 単位を出力するパッケージです．意外と知られていないみたいなのですが，物理学科生は知っておくべきパッケージの一つだと思います．パッケージの読み込みをプリアンブルでしておきます．

```LaTeX
\usepackage{siunitx}
```

前提として，単位は必ず立体で書きましょう．たとえば $m/s$ などと書かず $\mathrm{m}/\mathrm{s}$ と書くべきだということです．`siunitx` パッケージはもちろんその点をカバーしてくれます．

`siunitx` には主に2種類のコマンド `\si{}`, `\SI{}{}` があります．（version 3 では `\si`, `\SI` ではなく `\unit`, `\qty` が推奨されているらしいです．[^1]）

- `\si{}`：単位のみを表示する．`\si{kg.m.s^{-2}}` のようにすると $\mathrm{kg}\,\mathrm{m}\,\mathrm{s}^{-2}$ を表示してくれます．
- `\SI{}{}`：数字も合わせて表示したい場合に使います．`\SI{1.23e-3}{m}` のようにすると $1.23\times10^{-3}\,\mathrm{m}$ を表示してくれます．

いま例示したように，数字部分の表示もいろいろと対応してくれています．また，他にもいくつか便利なコマンドがあります．普段使っているものを紹介しておきます．多くは `\si{}` 内のみで有効なコマンドであることに注意してください．

- `\degree`, `\ang{}`：角度表示．`\degree` で $^\circ$ 単体を表示します．`\ang{15}` で $15^\circ$ を表示してくれます．
- `\degreeCelsius`：摂氏温度の単位 $^\circ\mathrm{C}$ を表示します．
- `\ohm`：$\Omega$ を表示します．
- `\micro`：μ [^2]を表示してくれます．$\mu$ としないようにしましょう．

他にもできることはたくさんあるので，気になる人はパッケージのマニュアルを読んでください．

## `cancel` パッケージ
`cancel` パッケージは数式で消えた項を明記する際に使います．いつも通りパッケージを読み込みます．そのままだと線が細くて不満が残るので，オプション `thicklines` をつけて線を太くしています．


```LaTeX
\usepackage[thicklines]{cancel}
```

また，線を赤くしておきたいので，`color` パッケージを読み込んでおいて `cancel` パッケージの線の色を指定している `\CancelColor` を再定義しておきます．

```LaTeX
\usepackage[thicklines]{cancel}
\usepackage{color}
\renewcommand{\CancelColor}{\color[rgb]{0.7,0,0}}
%少し暗めの赤
```
`cancel` パッケージで主に使うコマンドは `\cancel`, `\bcancel`, `\xcancel` の3つです．`\cancelto` というのもありますが，私はあまり使いません．

```LaTeX
\begin{align*}
e^x-e^{-x}
&=\qty(\cancel{1}+x
		+\bcancel{\frac{x^2}{2}}+\frac{x^3}{3!}
		+\xcancel{\frac{x^4}{4!}}+\cdots)
	-\qty(\cancel{1}-x
		+\bcancel{\frac{x^2}{2}}-\frac{x^3}{3!}
		+\xcancel{\frac{x^4}{4!}}+\cdots)\\
&=2\qty(x+\frac{x^3}{3!}+\cdots)\\
&=2i\sin x.
\end{align*}
```
出力：

<img width='600' alt='6_cancel' src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1545738/df970d57-c938-94be-cb85-9547390940c5.png'>


## `comment` パッケージ
`comment` パッケージは文字通りコメントアウトのパッケージです．`comment` 環境で囲めば良いだけです．

```LaTeX
数学や物理の
\begin{comment}
天才でなくても学科で学べば貢献できます．
もちろん
\end{comment}
天才は存分に活躍できます．
```

出力：

<img width='500' alt='7_comment' src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1545738/cb9c1188-5a38-4edd-eda7-c54411f5f420.png'>


## `mhchem` パッケージ
`mhchem` パッケージは化学式を書くためのパッケージです．`\ce{}` というコマンドを使います．たとえば `\ce{H2O}, \ce{H+}` などと使います．化学反応式も書けます．

```LaTeX
\[
\ce{Ba(OH)2 + H2SO4 -> BaSO4 v + 2H2O}
\]
```

出力：

<img width='500' alt='13_mhchem' src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1545738/9b3537e3-30b6-de43-cef6-0cfa306c5536.png'>


疲れたのでパッケージ紹介はこの辺にします． 

# 数式環境
`amsmath`パッケージ（や `mathtools` パッケージ）には多くの数式環境が備わっています．その中でも特に普段使いしているものを紹介します．

## インライン数式とディスプレイ数式
ご存知の通りインラインの数式は `$…$` で表示します．ディスプレイ数式は `\[…\]` を使います．
（`$$…$$` は推奨されていません．）

## `equation` 環境・`align` 環境
単一行の数式で式番号を振る場合には `equation` 環境を用います．複数行の数式には `align` を多く使います．

```LaTeX
\begin{equation}
…
\end{equation}
```

```LaTeX
\begin{align}
…
\end{align}
```

## 式番号の参照
式番号の参照には `\label{}` と `\ref{}` または `\eqref{}` を用いるようにしましょう．式(1)のように手打ちをするとあとから修正を入れる際にかなり面倒です．図や表の番号の参照についても同様に `\label{}`, `\ref{}` を用いましょう．

```laTeX
Campbell-Baker-Hausdorff の公式は，演算子 $\hat{A},\hat{B}$ を用いて次のように書ける：
\begin{equation}
e^{\hat{A}}\hat{B}e^{-\hat{A}}
=\hat{B}+[\hat{A},\hat{B}]+\frac{1}{2}[\hat{A},[\hat{A},\hat{B}]]+\cdots.
\label{eq1}
\end{equation}

式\eqref{eq1}を用いて，演算子 $\hat{V}$ の相互作用表示は次のように書くことができる．
```

出力

<img width='800' alt='8_eqref' src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1545738/ce627b70-7774-3fdf-3069-5741fdae9e48.png'>


式番号をつけるか否かについて少しコメントしておくと，私はほとんどの式に式番号を振るようにしています．ゼミや演習の発表などで使う際に式番号が振られていると話がしやすいからです．ただし，その式単体がメモ書き程度のあまり重要でないものであれば式番号を振らないこともあります．

また，参照した式番号だけに式番号をつけるという人もいるようです．そのようにしたい場合は `mathtools` パッケージを読み込んだ上で `\mathtoolsset{showonlyrefs=true}` とします．

## `gather` 環境
`gather` 環境は，複数行の数式をすべて中央揃えで表示する環境です．
`align` 環境などと同様に，`gather*` とすれば式番号を非表示にできます．

```LaTeX
\begin{gather}
\nabla\cdot\bm{D}
=\rho\\
\nabla\cdot\bm{B}
=0\\
\nabla\cross\bm{E}
=-\pdv{\bm{B}}{t}\\
\nabla\cross\bm{H}
=\bm{j}+\pdv{\bm{D}}{t}
\end{gather}
```
出力：

<img width='700' alt='11_gather' src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1545738/2e9b4d58-ab59-624d-c584-6b709e0586b6.png'>



## `aligned` 環境
`aligned` 環境は，他の数式環境（たとえば `equation`）の内部で用いる環境です．`equation` の内部で `align` 環境のようにできます．

```LaTeX
\[
\begin{aligned}
\nabla\cdot\bm{D}
&=\rho\\
\nabla\cdot\bm{B}
&=0\\
\nabla\cross\bm{E}
&=-\pdv{\bm{B}}{t}\\
\nabla\cross\bm{H}
&=\bm{j}+\pdv{\bm{D}}{t}
\end{aligned}
\]
```

出力：

<img width='500' alt='9_aligned' src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1545738/efe9a7a5-1d23-b7b6-5c02-ddbfff2b33c7.png'>


## `cases` 環境
`cases` 環境は場合分けのような書き方ができます．挙動は `aligned` 環境と似ています．

```LaTeX
\[
V(x)=
\begin{cases}
0		&(-a\le x\le a),\\
\infty	&(x<-a, x>a).
\end{cases}
\]
```

出力：

<img width='500' alt='10_cases' src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1545738/eb845961-183d-0634-de60-31e47eb18e9a.png'>


## `multlined` 環境
`multlined` 環境は，長すぎる式を複数行に折り返す際に用います．オプションで `b,t` を指定すると，どの位置を基準にするかを指定できます．`mathtoos` パッケージによる環境なので読み込んでおきます．（`multlined` の綴りに罠があるので気を付けましょう．）

```LaTeX
%\usepackage{mathtools}
\[
\nabla^2f=
\begin{multlined}[t] %[t]で上の行を基準にする
\frac{1}{r^2}\pdv{r}(r^2\pdv{f}{r})
+\frac{1}{r^2\sin\theta}\pdv{\theta}(\sin\theta\pdv{f}{\theta})\\
+\frac{1}{r^2\sin^2\theta}\pdv[2]{f}{\phi}
\end{multlined}
\]
```

<img width='500' alt='12_multlined' src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1545738/1c6a2667-697c-0af3-7637-5e6d09bd859c.png'>


`amsmath` パッケージには他にも便利な数式環境があります．[『amsmathの数式環境まとめ』](https://qiita.com/t_kemmochi/items/a4c390b4967b13f3afb7)がよくまとめられていると思うので，参照してください．

# 普段気を付けていること
これから述べることは私が普段気を付けていることであって，必ずしも気を付けなければならないことではありません．「確かにそうした方が良いかもしれない」と共感したことを参考にしていただければ良いと思います．

また，ここでは `amsmath`, `mathtools`, `bm`, `physics` などのパッケージを前提として書いています．

```LaTeX
\usepackage{amsmath, mathtools, bm, physics}
```

## 文字列を立体で書く
何かの略であったり文字列そのものであったりという場合には，**添字を立体にすべき**だと思っています．たとえば $E_{in}$ ではなく $E_\text{in}$ とすべきだということです．

`\text{}` や `\mathrm{}` を用いると立体にできます．文字列という意味で私は `\text{}` を用いています．

相転移温度や Boltzmann 定数を書く場合にも，私は $T_\text{c}, k_\text{B}$ と書くようにしています．こちらは1文字なので斜体のままでも良いとは思います．

添字ではないですが，$\text{const}.$ や $\text{odd}, \text{even}$ なども立体で書くようにしています．

## `\dd{}`
微小量を表す $\mathrm{d}$ は立体で書くようにしています．$\mathrm{d}x$ のように，$\mathrm{d}$ は単体で意味をなさず複合体として何かの微小量を表すからです．これは私の好みの問題であって，必ずしも立体にすべきというわけではないと思います．（むしろ斜体にすべきだという人もいます．）

先ほど紹介したように `physics` パッケージに `\dd{}` というコマンドがあるのでそれを用いましょう．前後に適切なスペースを入れてくれます．

## `\varDelta`
$\varDelta x$ のように，$x$ の微小量という意味を持つ場合には `\varDelta` を用いています．一方で，`\Delta` すなわち $\Delta$ は，それ単体で微小量を表す場合に用います．$x+\Delta$ のような使い方をするということです．

## インラインの分数など
インラインで分数を書く場合があると思います．その際に $\frac{x}{y}$ でも $\dfrac{x}{y}$ でもなく $x/y$ を用いるようにしています．$\frac{x}{y}$ は文字が小さすぎる，$\dfrac{x}{y}$ は行間が崩れるといった理由です．$\dfrac{x}{y}$ の方が可読性が高いのでこちらを使う人も多いと思います．行列の成分や指数，分母や分子に分数を書く際などで同じように $x/y$ と書くようにしています．

微分なども同様に，`\dv*{f}{x}` や `\pdv*{f}{x}{y}` などのようにして，インライン表示するようにしています．

## 新しい演算の定義
「気を付けていること」ではないと思いますが，新しい演算を定義する際には `\DeclareMathOperator` を使いましょう．スペースの調節などを自動で行ってくれます．たとえば $\mathrm{Log}$ を定義したいときには次のようにしておけば良いです．

```LaTeX
\DeclareMathOperator{\Log}{Log}
```

まれに，$\sin x$ を $sinx$ と書く人がいます．`\sin` を使いましょう．

## 指数
$x_0$ の2乗を `x_0^2` で $x_0^2$ と書かずに `{x_0}^2` で ${x_0}^2$ と書くようにしています．あくまで上付き添字ではなく $(x_0)^2$ ということを強調するためです．一方で上付き添字は $x^{(2)}$ のようにカッコ付きで書く習慣があります．伝われば何でもいいです．伝わりやすいように心がけているということです．

また，$\varDelta x^2$ と書かずに $(\varDelta x)^2$と書くようにしています．$\varDelta(x^2)$ との混同を避けるためです．

## 文字の定義
何か新しい文字を定義する際には `\coloneqq` すなわち $:=$ を用います．$\equiv$ を書く人も多いと思いますが，左辺と右辺どちらが定義なのかを強調するために `\coloneqq`, `\eqqcolon` を用いるようにしています．`:=` のように書くと中央が揃わず不適切なのでこれらを用いるようにしましょう．

## `\cdots` と `\ldots` の使い分け
`\cdots` と `\ldots` を使い分けましょう．$1+2+3+\cdots$ のようなときには `\cdots` を，$1,2,3,\ldots$ のようなときには `\ldots` を使います．

# `\newcommand`
もう一つ強調しておくとすれば，軽率に `\newcommand` もしくは `\renewcommand` 等をして楽をしましょう．「電場で $\boldsymbol{E}$ を使うな〜」と思ったらすぐに `\newcommand{\E}{\bm{E}}` もしくは `\renewcommand{\E}{\bm{E}}` をするようにしています．

「そんなん当たり前やん」と思う人もいると思いますが，意外とこれをせずに苦労している人を散見しているので，強調しておこうと思います．

# まとめ
今回紹介したのは私の呼吸のほんの一部で，かなり基本的なことだと思います．呼吸であることに気づかないことが多いので，私の資料を見て「これどうやってるの」とかがあれば遠慮なく聞いてください．

場面に合わせて環境などを使い分けると可読性の高いものが仕上がります．（一方で，あまりにこだわりすぎると多分時間が溶けます．）これらに気を配っている学科同期を複数人知っています．幸せな学科ですね．

一番望んでいるのは教員の資料の可読性が上がることです．たまに私の資料やレポートを見て「これどうやってるの」と聞いてくださる先生がいらして，嬉しい限りです．「教員と学生の距離が近い」というのは物理学科の良いところだと思っています．

この記事が多くの PDF の可読性を高めることを期待しています．Happy $\LaTeX$ing!

# 更新履歴
- 2021/12/19：誤植を修正しました．
- 2021/12/19：`siunitx` パッケージについて，`\unit`, `\qty` が推奨されている旨を追記しました．
- 2021/12/19：`\newcommand` について追記しました．
- 2021/12/21：`multlined` が `mathtools` パッケージによって提供されている旨を追記しました．

[^1]: [https://ctan.org/pkg/siunitx](https://ctan.org/pkg/siunitx) からパッケージのマニュアルを参照してください．Upgrading from version 2 に詳細が書かれています．[Malovany](https://twitter.com/Malovany_ut) 氏に教えていただきました．
[^2]: この環境で `\textmu` 等が使えないので仕方なく μ としています．立体の μ のつもりです．