数学の博士号所持者が使うTeXのマクロを解説します

# はじめに
数学の博士号所持者の私が学生時代から使っているTeXでよく使う関数定義があるマクロファイルを公開、解説していきます。
コンセプトとしては、**手書きでノートを書くようにTeXが書ける**ようなマクロになっています。

専門分野は離散数学なのでこちらで使う表現が多いかもしれませんが、汎用的に使えるものも多いです。そのままの使用はもちろん、参考にいただければ幸いです。

ソースコードは[こちら](https://github.com/nekonistyle/TeX/tree/main/preamble)


# マクロ

ファイルが2つありますが、`mypreamble.sty`が数学に関するもの、もう1つは証明支援系Coqのコードを記述するためのものになっています。
本記事では主に前者の`mypreamble.sty`について解説します。

# 一覧

![mypreamble_test_page-0001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602298/1507854a-67cd-65fd-d762-031826f80e8e.jpeg)

このファイルのソースコードは[こちら](https://github.com/nekonistyle/TeX/blob/main/preamble/example/mypreamble_test.tex)

# 解説

解説と補足をしていきます。


## 定義/定理/補題等

定義や定理はお馴染みの`\begin{definition} ... \end{definition}`や`\begin{theorem} ... \end{theorem}`で記述することができます。

# 数式モード

## 集合

自然数の集合 $\mathbb{N}$ 等は手書きでは*N*に縦棒1本を追加するように書くので、TeXでも`N`にバックスラッシュ`\`を追加した`\N`で表現しました。

わざわざ`\mathbb`と入れるのは面倒ですからね。

```tex
\newcommand\N{\mathbb{N}}
\newcommand\Z{\mathbb{Z}}
\newcommand\Q{\mathbb{Q}}
\newcommand\R{\mathbb{R}}
\newcommand\C{\mathbb{C}}
```

## ベクトル

ベクトル変数もよく小文字に縦棒1本追加して表現しますが、これも上と同様に`\x`,`\y`, `\z`等で書けるようにしてます。

```tex
\renewcommand\a{\bm{a}}
...
\newcommand\z{\bm{z}}
```

ここで、`\a`などいくつかの記号は既に(私はほとんど使わない)アクセント記号などで使われていて定義が衝突するので、これらを事前に適当なマクロで再定義して回避します。[^1]

```tex
\let\escapea\a
```

[^1]: もしかすると危険かもしれないですが、そこは自己責任でお願いします。



## 矢印

矢印記号は$\to$だけ`\to`でも表示できますが、他の向きも使えるように、それぞれ同様に`\ot`や`\To`などで書けるようにしました。

```TeX
\newcommand\To{\Rightarrow}
\newcommand\ot{\leftarrow}
\newcommand\oT{\Leftarrow}
\newcommand\tot{\leftrightarrow}
\newcommand\ToT{\Leftrightarrow}
```

できれば`\->`とか、単に`->`で書きたいですね...


## 定義

場合によって$=$上部にdefの文字を入れた定義等号を使いたくなった場合に`\defeq`などを用意しました。

ただ、個人的には単に$:=$を使うことが多いです。


## 関数

よく使う関数がデフォルトで用意されてなかったりするので定義します。

- **恒等関数**`\id`
- **像**`\Im`
 (`\Im`自体は虚部を返す関数として定義されているので、こちらを`\im`で再定義します) ちなみに核`\Ker`は元から定義されています。
- **商**`\div`
(`\div`は÷で定義されているので、こちらを`\Div`で再定義)
- **余りを求める二項演算子**`\mod`
(違いが分かりにくいですが、元の`\mod`は$(\text{mod}\\,n)$のような単項演算子なので、こちらを`\Mod`で再定義。空白の開き方が違います。)
(単項演算子を使うよりも剰余類上で計算することが多いのでこちらはあまり出番がないです。)
- **べき集合**`\power`
 個人的には集合$X$に対するべき集合は$2^X$で書きたい派ですが一応。
- **符号関数**`\sgn`
- **argmax**、**argmin**`\argmax` `\argmin`


## 数列/ベクトル/行列

数列 $a_1,\\,\ldots,\\,a_n$ などはわざわざ`a_1,\,\ldots,\,a_n`と書くのは面倒なので、`\seq{a}{1}{n}`で出力されるようにしました。
具体的に`\seq`の第一引数が変数名、第二、第三引数がそれぞれ初項と終項の添字です。

同様に行ベクトル、列ベクトル等もそれぞれ`\hseq{a}{n}` `\vseq{a}{n}`などですぐ記述できます。

```math
(a_1,\,\ldots,\,a_n)
```

```math
\begin{pmatrix}
 a_1\\
 \vdots\\
 a_n
\end{pmatrix}
```

n×m行列の場合も同様に`\mat{a}{n}{m}`で成分表示ができます。

```math
\begin{pmatrix}
  a_{1,1} & \cdots & a_{1,m}\\
  \vdots  &        & \vdots\\
  a_{n,1} & \cdots & a_{n,m}
\end{pmatrix}
```

### 発展編

上で紹介したこれらのマクロは各成分を変数で書いた場合のみ使え、例えば

```math
\begin{pmatrix}
  \displaystyle\sum_{k=1}^m a_{1,k}b_{k,1} & \cdots & \displaystyle\sum_{k=1}^m a_{1,k}b_{k,l}\\
  \vdots                                   &        & \vdots\\
  \displaystyle\sum_{k=1}^m a_{n,k}b_{k,1} & \cdots & \displaystyle\sum_{k=1}^m a_{n,k}b_{k,l}
\end{pmatrix}
```

のようなものは、以下のようにそのまま記述する必要があります。

```tex
\begin{pmatrix}
  \displaystyle\sum_{k=1}^m a_{1,k}b_{k,1} & \cdots & \displaystyle\sum_{k=1}^m a_{1,k}b_{k,l}\\
  \vdots                                   &        & \vdots\\
  \displaystyle\sum_{k=1}^m a_{n,k}b_{k,1} & \cdots & \displaystyle\sum_{k=1}^m a_{n,k}b_{k,l}
\end{pmatrix}
```

しかし各(i,j)成分は全て`\displaystyle\sum_{k=1}^m a_{i,k}b_{k,j}`の形になっているので、このままでは冗長な記述になります。
このような場合は上とは別のあるマクロ`\matAF`を使って、単に

```tex
\matAF{\displaystyle\sum_{k=1}^m a_{#1,k}b_{k,#2}}{n}{l}
```

と記述するだけで出力できます。


詳細は以下の記事にまとめましたので、こちらを参考にしてください。
[TeXのマクロで無名関数を引数に取る高階関数を擬似的に記述する方法](https://qiita.com/nekonibox/items/f45571ecdf81a2b6b57e)

ただし、この方法にはTeXの仕様上、使用時に少しある注意が必要なので、今回このライブラリには入れてないです。


## 有限集合

有限集合も同様に$\\{a_1,\\,\ldots,\\,a_n\\}$を`\fset{a}{n}`で表現できます。

また、$\\{1,\\,\ldots,\\,n\\}$は`\ordinal{n}`で表現できます。


これは実際の順序数の定義とは異なりますが、上の数列やベクトルの添字が1から始まっているのに合わせています。
ちなみに添字が0から始まるものは関数名の最後に`z`をつけます。例えば`\ordinalz{n}`は$\\{0,\\,\ldots,\\,n\\}$になります(これも厳密には順序数の定義にはならないですが、最後を$n-1$にしてしまうと具体的な数を入れた時に、例えば`\ordinalz{10}`は$\\{0,\\,\ldots,\\,10-1\\}$と-1が残ってしまうので、利用しやすいようにこちらの定義にしています)


# まとめ

私が使っているTeXのマクロについて解説しました。
使っていただけたり参考にしていただけたら幸いです。