\LaTeX の定理環境によく用いられる,amsthm
パッケージについて,その使い方を徹底的に解説します。
定理環境amsthmの基本的な使い方
amsthm
パッケージを用いるには,プリアンブルに \usepackage{amsthm}
とかきましょう。\usepackage{amsmath}
の後にかいてください (amsmathも同時に使用する場合。本記事はこれを読み込んでいるものとします)。
プリアンブルに使いたい定理の名前と,そのコマンドを指定します。以下の例を見てください。
\theoremstyle{plain}
\newtheorem{thm}{Theorem}
\newtheorem*{thm*}{Theorem}
\theoremstyle{definition}
\newtheorem{dfn}{Definition}
まずは \theoremstyle{}
コマンドで,定理のスタイルを指定します。選べるスタイルは,以下の3つです。
定理スタイル | スタイルの詳細 | 例 |
---|---|---|
plain | 見出し太字,本文斜体,上下にスペースが入る | \text{{\bf Theorem 1.} \, {\it The function} } f \cdots |
definition | 見出し太字,本文普通,上下にスペースが入る | \text{{\bf Definition 1.} \, { The function} } f \cdots |
remark | 見出し斜体,本文普通 | \text{{\it Remark 1.} \, { The function} } f \cdots |
デフォルトスタイルは plain
です。日本語は斜体にならないため,日本語で用いる場合は,常に definition
スタイルを用いるのが良いでしょう。スタイルのカスタマイズ方法は後述します。
その後に続くのが,\newtheorem{コマンド名}{出力する定理名}
や, \newtheorem*{コマンド名}{出力する定理名}
です。ここで,定理環境を定義しています。*
の有無は,定理に番号をつけるかどうかです。「出力する定理名」は日本語でも構いません。
たとえば,上の例のようにプリアンブルで \newtheorem{thm}{Theorem}
や \newtheorem{thm*}{Theorem}
とした場合,本文中に \begin{thm}[コメント] ~~~ \end{thm}
や \begin{thm*}[コメント] ~~~ \end{thm*}
として,定理環境を使用できます。コメントはなくてもよいです。
以下に例を挙げましょう。以下は本文中のコードです。
\begin{thm}
hogehoge
\end{thm}
\begin{thm*}
fugafuga
\end{thm*}
\begin{thm}[big]
hogehoge 2
\end{thm}
\begin{dfn}[new object]
def
\end{dfn}
定理番号の変え方
ここからは,定理番号について掘り下げます。
特に記述のない限り,プリアンブルは最初,以下のようになっているとします。
\theoremstyle{plain}
\newtheorem{thm}{Theorem}
\newtheorem*{thm*}{Theorem}
\theoremstyle{definition}
\newtheorem{dfn}{Definition}
Theorem 3.4. のようにセクション番号を付与する
上の場合,定理番号は Theorem 1, Theorem 2 のように出力されていました。これを,セクション番号を付与して,Theorem 1.1, Theorem 1.2 のようにするには,プリアンブルの定義を
\newtheorem{thm}{Theorem}[section]
のようにします。こうすることで,例えば以下のように出力可能です。
\section{new section}
\begin{thm}
hogehoge
\end{thm}
\begin{thm}[big]
hogehoge 2
\end{thm}
同様にして,サブセクションまで出力したい場合は \newtheorem{thm}{Theorem}[subsection]
とし,本の場合は \newtheorem{thm}{Theorem}[chapter]
などとすればよいです。
別の定理環境でも番号を連番にする
現在のところは,例えば
のように,各定理環境ごとに,バラバラに番号が振られます。これを,Theorem 1, Theorem 2, Definition 3 のように連番にするには,プリアンブルは以下のようにします。
\theoremstyle{plain}
\newtheorem{thm}{Theorem}
\newtheorem*{thm*}{Theorem}
\theoremstyle{definition}
\newtheorem{dfn}[thm]{Definition}
\newtheorem{dfn}{Definition}
だった部分が \newtheorem{dfn}[thm]{Definition}
に変わっていますね。このように,前に定義した定理環境をかくことによって,共通の番号を振ることが可能です。このとき,以下のような出力になります。
これは,さっきのセクション番号と併用可能です。プリアンブルに
\theoremstyle{plain}
\newtheorem{thm}{Theorem}[section]
\newtheorem*{thm*}{Theorem}
\theoremstyle{definition}
\newtheorem{dfn}[thm]{Definition}
とかけば,以下のように出力できます。
定理番号を先に出力する
「1 Theorem.」のように,先に番号をつけてから,定理の名称を書きたい場合,プリアンブルで定理環境を定義する最初に \swapnumbers
コマンドを用います。すると,それ以降の定理環境の定義において,番号と定理名が逆転します。たとえば,
\theoremstyle{plain}
\newtheorem{thm}{Theorem}[section]
\newtheorem{prop}[thm]{Proposition}
\swapnumbers
\newtheorem{thmsw}[thm]{Theorem}
\newtheorem{propsw}[thm]{Proposition}
として,
\begin{thm}
hogehoge
\end{thm}
\begin{thmsw}
fugafuga
\end{thmsw}
とかけば,以下のように出力されます。
あるいは,定理環境を自作しても良いでしょう。定理環境の自作は後述します。
定理の番号を途中からはじめる
定理の番号を途中から始めたいときは,文章中の該当する定理が出てくる前に \setcounter{thm}{4}
などとかきましょう。こうすると,この次の定理の番号は 5 になります。
定理番号をリセットしたいときは \setcounter{thm}{0}
です。thm
のところは自分の定理環境に合わせて変えてください。
定理の番号様式の変更
Theorem A, B のようにアルファベットにするには,プリアンブルに
\renewcommand{\thethm}{\Alph{thm}}
とかき,Theorem I, II のようにローマ数字にするには,
\renewcommand{\thethm}{\Roman{thm}}
のようにします。thm, thethm
の部分は,自分の定理環境に合わせて変えてください。
定理のスタイルを自作する
\newtheoremstyle
コマンドを用いた,定理スタイルを自作する方法を紹介します。以下を見てください。
\newtheoremstyle{mystyle}% % スタイル名
{3pt}% % 上部スペース
{3pt}% % 下部スペース
{\itshape}% % 本文フォント
{12pt}% % 1行目のインデント量
{}% % 見出しフォント
{:}% % 見出し後の句読点
{ }% % 見出し後のスペース
{}% % 見出しの書式(後述)
「本文フォント・見出しフォント」は \itshape
(斜体),\bfseries
(太字),あるいは空欄か \normalfont
にすると普通の文字になります。
「1行目のインデント量」は,デフォルトは無しです。\parindent
とすれば,普通の段落と同じだけのインデントを入れることができます。
「見出し後のスペース」は,{ }
のように半角スペースを入れると,デフォルトになります。\newline
とすると,改行されてから定理が始まります。
上のスタイルを,実際に使ってみましょう。\theoremstyle{mystyle}
とし,これを用いて E=mc^2 という定理を述べましょう。
\theoremstyle{mystyle}
\newtheorem{mythm}{Theorem}[section]
\begin{document}
\section{new section}
\begin{mythm}[Einstein]
It holds that
\begin{equation*}
E=mc^2,
\end{equation*}
where \(c\) means the speed of light.
\end{mythm}
\end{document}
ちゃんと期待したとおりの出力になっているのを,確認してください。
\newtheoremstyle{mystyle}{}{}{}{}{}{}{}{}
の最後の {}
には,定理の書式を指定します。
\newtheoremstyle{mystyle}% % スタイル名
{}%b % 上部スペース
{}% % 下部スペース
{\itshape}% % 本文フォント
{}% % 1行目のインデント量
{\bfseries}% % 見出しフォント
{.}% % 見出し後の句読点
{ }% % 見出し後のスペース
{\thmname{#1}\thmnumber{ #2}\thmnote{ (#3)}}
とすれば,
となり,
\newtheoremstyle{mystyle}% % スタイル名
{}%b % 上部スペース
{}% % 下部スペース
{\itshape}% % 本文フォント
{}% % 1行目のインデント量
{\bfseries}% % 見出しフォント
{.}% % 見出し後の句読点
{ }% % 見出し後のスペース
{\thmname{#1}\thmnumber{ #2}\thmnote{ #3}}
のように,\thmnote
部分の ()
を除けば,
のように,定理後のコメント部分の括弧がなくなります。ここで,コメント部分も太字になっていますが, \thmname{#1}\thmnumber{ #2}\thmnote{\normalfont #3}
などとすれば,コメント部分は太字じゃなくなります。
また,\thmnumber{#2} \thmname{ #1}\thmnote{ (#3)}
などとすれば,定理番号とTheoremの文字を入れ替えることができるはずです。
その他
斜体のうち一部だけを元に戻したい
定理環境においては,(1)
なども (1) のように斜体になってしまいます。ただ,括弧が斜めだとみっともないと思うかもしれません。このときは,\textup{}
コマンドで斜体を解除できます。
たとえば,\textup{(1)}
とすれば,(1) となり,\textup(1\textup)
とすれば,(1) と,括弧のみの斜めを解除します。
ただし,定理環境全体の斜体を解除したいのであれば,そもそも別の定理スタイルを指定するのが良いでしょう。
citeと一緒に使うときは{}で囲むこと
\text{{\bf Theorem 1} ([1]){\bf .} } のようにするには,単に
\begin{thm}[\cite{~}] ~~~ \end{thm}
などとすればよいです。一方で, \text{{\bf Theorem 1} ([1, Theorem 3]){\bf .} } のようにするには,
\begin{thm}[{\cite[Theorem 3]{~}}] ~~~ \end{thm}
のように,\cite
の部分全体を {}
で囲まないとエラーが出ます。注意してください。
amsthmにおけるプリアンブルのかき方の例
amsthm
パッケージにおける,プリアンブルのかき方の例を記しておきましょう。定理番号は全て連番であるとし,スタイルはデフォルトに用意されたものを用いるとします。
まずは,英語の場合のかき方の例です。def
という環境は既に使われていて使えないため,定義環境のコマンドは dfn
としています。
\usepackage{amsmath}
\usepackage{amsthm}
\theoremstyle{plain}
\newtheorem{thm}{Theorem}[section]
\newtheorem{lem}[thm]{Lemma}
\newtheorem{prop}[thm]{Proposition}
\newtheorem{cor}[thm]{Corollary}
\newtheorem{conj}[thm]{Conjecture}
\theoremstyle{definition}
\newtheorem{ass}[thm]{Assumption}
\newtheorem{dfn}[thm]{Definition}
\theoremstyle{remark}
\newtheorem{rem}[thm]{Remark}
\theoremstyle{plain}
\newtheorem*{thm*}{Theorem}
\newtheorem*{lem*}{Lemma}
\newtheorem*{prop*}{Proposition}
\newtheorem*{cor*}{Corollary}
\newtheorem*{conj*}{Conjecture}
\theoremstyle{definition}
\newtheorem*{ass*}{Assumption}
\newtheorem*{dfn*}{Definition}
\theoremstyle{remark}
\newtheorem*{rem*}{Remark}
日本語の例も述べておきましょう。
\usepackage{amsmath}
\usepackage{amsthm}
\theoremstyle{definition}
\newtheorem{thm}{定理}[section]
\newtheorem{lem}[thm]{補題}
\newtheorem{prop}[thm]{命題}
\newtheorem{cor}[thm]{系}
\newtheorem{ass}[thm]{仮定}
\newtheorem{conj}[thm]{予想}
\newtheorem{dfn}[thm]{定義}
\newtheorem{rem}[thm]{注}
\newtheorem*{thm*}{定理}
\newtheorem*{lem*}[thm]{補題}
\newtheorem*{prop*}[thm]{命題}
\newtheorem*{cor*}[thm]{系}
\newtheorem*{ass*}[thm]{仮定}
\newtheorem*{conj*}[thm]{予想}
\newtheorem*{dfn*}[thm]{定義}
\newtheorem*{rem*}[thm]{注}
証明環境
証明環境については,以下で解説しましょう。
さらに細かく設定したい場合は
さらに細かく定理環境をいじりたい場合は,thmtools
パッケージを調べてみるとよいでしょう。これは,amsthm
パッケージでもおすすめされているパッケージです。
また,定理を枠で囲うといった装飾をしたい場合は,mdframed
パッケージを調べてみてください。それぞれ以下にリンクを載せておきます。
- thmtools – Extensions to theorem environments
- mdframed – Framed environments that can split at page boundaries