LaTeXの定理・証明環境をつくる

数学の論文・レポートを書くときには、「定義」「定理」「証明」を並べて書くスタイルを使います。これをLaTeXで書くときの環境構築についてまとめました。

#サンプルコード
困ったらプリアンブルをまるっとコピーしてくれればokです。

**プリアンブル**

```tex:sample.tex
    \usepackage{amsthm}

    \theoremstyle{definition}
    \newtheorem{dfn}{Definition}[section]
    \newtheorem{prop}[dfn]{Proposition}
    \newtheorem{lem}[dfn]{Lemma}
    \newtheorem{thm}[dfn]{Theorem}
    \newtheorem{cor}[dfn]{Corollary}
    \newtheorem{rem}[dfn]{Remark}
    \newtheorem*{rem*}[dfn]{Remark}
    \newtheorem{fact}[dfn]{Fact}
    \renewcommand{\qedsymbol}{$\blacksquare$}
```


**入力例**[^1]

```tex
\section{二等辺三角形}
\begin{dfn}
二等辺三角形とは、2つの辺の長さが等しい三角形のことである。
\end{dfn}
\begin{prop}
二等辺三角形の2つの底角の大きさは等しい。
\end{prop}

\section{正三角形}
\begin{dfn}
正三角形とは、すべての辺の長さが等しい三角形のことである。
\end{dfn}
\begin{prop}[正三角形と二等辺三角形]
正三角形は二等辺三角形である。
\end{prop}
\begin{rem*}
逆は成り立たない。すなわち、二等辺三角形がすべて正三角形とは限らない。
\end{rem*}
\begin{thm}
\label{angle_eq}
正三角形において、すべての角の大きさは等しい。
\end{thm}
\begin{proof}
正三角形$ABC$は、$AB=AC$の二等辺三角形だから、2つの底角は等しい。すなわち$\angle ABC = \angle ACB$である。
同様にして、$\angle BCA = \angle BAC, \angle CAB = \angle CBA$が成り立つ。
したがって、$\angle ABC = \angle BCA = \angle CAB$が成り立つ。
\end{proof}
\begin{cor}
正三角形の一つの内角の大きさは\ang{60}である。
\end{cor}
\begin{proof}
Theorem \ref{angle_eq}と、三角形の内角の和が\ang{180}であることから従う。
\end{proof}
```

**出力例**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539033/1e0737ed-4f39-5b66-8db1-1bcbb206dd9f.png)

#定理環境の構築

まず、amsthmパッケージを入れます。

```tex
    \usepackage{amsthm}
```


プリアンブルに`\newtheorem`命令を打ち込むと、新しく環境が定義できます。

```tex
    \newtheorem{env_name}{Caption}
```


ここで`env_name`は環境名、`Caption`は表題として表示される名前です[^2]。環境名を同じにしても、Captionを定義、定理、……とするか、Def. Thm. ……とするかで、表示する名前を変えられます。

#環境を使う
実際に使う場合には、

```tex
    \begin{env_name}
    本文
    \end{env_name}
```

とします。
 
コメントを別に付けたい場合は、

```tex
    \begin{env_name}[コメント]
    本文
    \end{env_name}
```

とすれば、`Caption 番号 (コメント)` のように出力されます。

定理を参照したい場合には、まず参照したい定理に`\label`コマンドでラベルを付けます。

```tex
    \begin{env_name}
    \label{hogehoge}
    本文
    \end{env_name}
```

その後、参照したい部分で`\ref{hogehoge}`とすれば、定理番号が自動で挿入されます。

#証明環境
proof環境は、`\newtheorem`で定義することなく使えます。

```tex
    \begin{proof}
    証明
    \end{proof}
```

デフォルトでは、表題として斜体の"*Proof.*"が出力されます。これを日本語に変えたい場合には、

```tex
    \renewcommand{\proofname}{\textbf{証明}}
```

とすればよいです。立体[^3]・太字の"**証明.**"が出力されます。

#通し番号をつける
通常の場合、通し番号は環境ごとに別々につけられます。

```tex
    \newtheorem{dfn}{Definition}
    \newtheorem{prop}{Proposition}
    \newtheorem{thm}{Theorem}
    \newtheorem{cor}{Corollary}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539033/41093843-b13e-7c6d-8755-24ff29d44cf9.png)

これを通し番号にするには、各`\newtheorem`コマンドの`env_name`と`Caption`の間に、連動させたい環境名を`[]`でくくって入力します。

```tex
    \newtheorem{dfn}{Definition}
    \newtheorem{prop}{Proposition}
    \newtheorem{thm}[dfn]{Theorem}
    \newtheorem{cor}[dfn]{Corollary}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539033/30a59bbe-38e4-7093-bbc6-db818bdd6d04.png)
上の例では、DefinitionとTheorem, Corollaryがひとまとめに通し番号を振られており、Propositionは独立に通し番号がつけられています。

章ごと、ないしは節ごとに通し番号を振りたい場合は、`\newtheorem`コマンドの後ろに`[section]`ないし`[subsection]`をつけます。

```tex
    \newtheorem{dfn}{Definition}[section]
    \newtheorem{prop}{Proposition}
    \newtheorem{thm}[dfn]{Theorem}
    \newtheorem{cor}[dfn]{Corollary}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539033/9b30cd51-e0a0-0956-0906-e7c2eb853bdb.png)
上の例では、Definitionおよびそれと連動するTheorem, Corollaryには、章番号に連動して通し番号がつけられます。Propositionには章とは独立に通し番号がつきます。


通し番号をつけたくない場合のコマンドは、`newtheorem*`で別に定義します。

```tex
    \newtheorem{env_name}{Caption}
    \newtheorem*{env_name*}{Caption}
```

と入力すれば、`env_name`環境では通し番号あり、`env_name*`では通し番号なしの環境を使えます。

#その他のカスタマイズ
amsthmパッケージの定理・証明環境は、多少のカスタマイズが利きます。主要なものを紹介。

##定理環境のスタイル
プリアンブルの`\newtheorem`コマンドの前に`theoremstyle`コマンドを打つことで、定理環境のスタイルを変えられます。

`\theoremstyle{plain}`: 見出しが太字、本文は斜体
`\theoremstyle{definition}`: 見出しが太字、本文は立体
`\theoremstyle{remark}`: 見出しが斜体、本文は立体

日本語と英語を使う場合には、英語のみ斜体になるのは目立つので`definition`を使うのがいいでしょう。

##証明終了の記号

proof環境では、証明の最後に白抜きの四角がつくようになっています。これを黒の四角に変えるには、プリアンブルに

```tex
    \renewcommand{\qedsymbol}{$\blacksquare$}
```

を入力します[^4]。
　四角の代わりに"Q.E.D."ないしは"終"など、別のものを使いたい場合には、プリアンブルに

```tex
    \renewcommand{\qedsymbol}{Q.E.D.}
```

とか

```tex
    \renewcommand{\qedsymbol}{終}
```

とかを入力すれば、正しく出力されます。

#参考文献

* https://lecture.ecc.u-tokyo.ac.jp/~cnakamur/LaTeX/Sect-8-9-command-cite.pdf
* 黒木玄『日本語LaTeXを使うときに注意するべきこと』, http://www.math.tohoku.ac.jp/~kuroki/LaTeX/howtolatex.html#amsthm2
* かすみん日記『【LaTeX】定理・証明環境 (amsthm)』, https://geniusium.hatenablog.com/entry/2019/01/29/222203
* htlnse 『日本語LaTeXでamsthmのproof環境をなんとかする』, https://htlsne.hatenablog.com/entry/2016/02/04/153034

[^1]: コマンド`\angle, \ang`を使うには`siunitx`パッケージが必要です。
[^2]: ただし、「定義」環境を作りたいときに`env_name = def`とはできません。これは、すでにあるLaTeXコマンド`\def`と衝突するためです。「定義」環境には`definition`ないしは`dfn`をおすすめします。
[^3]: 斜めになっていない通常の文字を、「斜体」に対して「立体」と呼びます。
[^4]: おれは黒四角のほうがかっこよくて好きだ。