PR

【LaTeX】定理環境amsthmパッケージの使い方を徹底解説

LaTeX
記事内に広告が含まれています。

\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}

とかけば,以下のように出力されます。

\swapnumbersを用いて定理番号と名称を反転させる例

あるいは,定理環境を自作しても良いでしょう。定理環境の自作は後述します。

定理の番号を途中からはじめる

定理の番号を途中から始めたいときは,文章中の該当する定理が出てくる前に \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 を用いて自作した定理環境の出力例

ちゃんと期待したとおりの出力になっているのを,確認してください。

\newtheoremstyle{mystyle}{}{}{}{}{}{}{}{} の最後の {} には,定理の書式を指定します。

\newtheoremstyle{mystyle}%   % スタイル名
    {}%b                     % 上部スペース
    {}%                      % 下部スペース
    {\itshape}%              % 本文フォント
    {}%                      % 1行目のインデント量
    {\bfseries}%             % 見出しフォント
    {.}%                     % 見出し後の句読点
    { }%                     % 見出し後のスペース
    {\thmname{#1}\thmnumber{ #2}\thmnote{ (#3)}}

とすれば,

定理の書式の変更例1

となり,

\newtheoremstyle{mystyle}%   % スタイル名
    {}%b                     % 上部スペース
    {}%                      % 下部スペース
    {\itshape}%              % 本文フォント
    {}%                      % 1行目のインデント量
    {\bfseries}%             % 見出しフォント
    {.}%                     % 見出し後の句読点
    { }%                     % 見出し後のスペース
    {\thmname{#1}\thmnumber{ #2}\thmnote{ #3}}

のように,\thmnote 部分の () を除けば,

定理の書式の変更例2

のように,定理後のコメント部分の括弧がなくなります。ここで,コメント部分も太字になっていますが, \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 パッケージを調べてみてください。それぞれ以下にリンクを載せておきます。

参考

  1. amsthm – Typesetting theorems (AMS style)