정리, 보조정리, 정의, 증명에는 본문과 다른 고정된 모양이 있습니다. Theorem 3.1 같은 굵은 제목으로 시작하고, 본문은 이탤릭으로 조판되며, 번호가 자동으로 붙고, 증명 끝에는 작은 빈 사각형(□)이 붙습니다. 이 모든 것을 손으로 맞추기는 번거롭기 때문에 amsmath 의 자매 패키지 amsthm 은 정리류 환경을 한 번 *선언*해 두는 방식과 전용 proof 환경을 제공합니다. 이 페이지에서는 \newtheorem 으로 환경을 선언하는 법, 카운터 공유와 절 안 번호 매기기, 번호 없는 변형, \theoremstyle 로 모양 바꾸기, proof 환경과 증명 종료 기호, 그리고 현대적인 상위 인터페이스 thmtools 까지 살펴봅니다.
정리 환경 선언하기
정리와 같은 구조는 먼저 프리앰블에서 환경으로 선언한 뒤 본문에서 그 환경을 사용해 씁니다. 선언에는 \newtheorem 을 사용합니다. 첫 번째 인수는 환경 이름(본문에서 \begin{…} 에 쓰는 이름)이고, 두 번째 인수는 출력 제목에 굵게 찍힐 단어입니다. 예를 들어 다음처럼 쓰면 theorem 환경을 사용할 수 있습니다.
\usepackage{amsthm}
\newtheorem{theorem}{Theorem} % プリアンブルで宣言 / declare in the preamble이렇게 해 두면 본문에서 theorem 환경을 사용할 때마다 Theorem 1, Theorem 2 처럼 굵은 제목과 연속 번호가 자동으로 붙고, 안에 쓴 문장은 기본 스타일에서 이탤릭으로 조판됩니다. 번호는 LaTeX 카운터가 관리하므로 중간에 정리를 하나 삽입해도 뒤의 번호가 자동으로 조정됩니다.
\begin{theorem}
素数は無限に存在する。
\end{theorem}
\begin{theorem}
There are infinitely many primes.
\end{theorem}\newtheorem 은 base LaTeX(표준 LaTeX2e)에도 포함되어 있습니다. 기본 \newtheorem 만으로도 번호 붙은 정리 환경은 만들 수 있지만, 아래에서 다루는 스타일 전환(\theoremstyle), 번호 없는 별표 형식(\newtheorem*), proof 환경, 증명 종료 기호 는 모두 amsthm 을 불러와야 사용할 수 있는 확장입니다. 수학 글을 쓸 때는 amsthm 과 amsmath 를 함께 불러오는 것이 표준적인 선택입니다.
번호 매기기 제어
정리, 보조정리, 따름정리를 각각 독립 카운터로 번호 매기면 “Theorem 1, Lemma 1, Theorem 2, Lemma 2…” 처럼 같은 번호가 흩어져 독자가 헷갈립니다. 대부분의 수학 글에서는 이들에 공통 번호 를 주어 “Theorem 1, Lemma 2, Theorem 3…” 처럼 이어 갑니다. \newtheorem 의 선택 인수(대괄호) 로 이 동작을 세밀하게 제어할 수 있습니다. 핵심은 대괄호가 놓이는 위치에 따라 뜻이 달라진다는 점입니다.
카운터를 공유하려면 새 환경 이름 바로 뒤 에 기존 환경 이름을 대괄호로 줍니다. 아래 예에서는 lemma 가 theorem 과 같은 카운터를 사용하므로 정리와 보조정리가 하나의 번호열을 공유합니다.
\newtheorem{theorem}{Theorem}
\newtheorem{lemma}[theorem]{Lemma} % theorem と番号を共有 / share theorem’s counter반대로 각 장이나 절마다 번호를 다시 시작하고 절 번호를 앞에 붙여 “Theorem 2.1, Theorem 2.2” 처럼 만들려면 두 번째 인수 뒤 에 부모 카운터(section 등)를 대괄호로 줍니다. 그러면 새 절에 들어갈 때마다 정리 번호가 1로 돌아가고 절 번호와 함께 표시됩니다.
\newtheorem{theorem}{Theorem}[section] % 節ごとにリセットし「2.1」形式 / reset per section, “2.1” style두 대괄호 형식을 동시에 쓸 수는 없지만, 한 카운터를 다른 환경에 종속시킬 수도 있습니다. 예를 들어 \newtheorem{corollary}{Corollary}[theorem] 이라 쓰면 따름정리 번호는 정리가 나올 때마다 재설정되어 “Corollary 3.1(Theorem 3 에 딸린 첫 따름정리)”처럼 부모 정리 번호를 이어받습니다. 다음 표는 대괄호의 위치와 효과를 정리합니다.
| 선언 | 효과 | |
|---|---|---|
\newtheorem{theorem}{Theorem} | 독립적인 연속 번호 | 자체 카운터에서 1, 2, 3, … 으로 번호 매김 |
\newtheorem{lemma}[theorem]{Lemma} | theorem 카운터를 공유(하나의 번호열) | 보조정리와 정리가 하나의 번호열을 공유 |
\newtheorem{theorem}{Theorem}[section] | 절마다 재설정; “2.1” 형식으로 표시 | 각 \section 마다 다시 시작하고 절 번호를 접두어로 붙임 |
\newtheorem{corollary}{Corollary}[theorem] | theorem 마다 재설정; “3.1” 로 표시 | theorem 카운터에 종속 |
번호 없이 쓰기와 이름 붙이기
번호를 붙이고 싶지 않은 정리류 환경, 예를 들어 한 번만 등장하는 “Remark” 나 “Main Theorem” 에는 amsthm 이 제공하는 별표 형식 \newtheorem* 을 사용합니다. 이 형식은 번호를 전혀 붙이지 않고 제목 단어만 출력합니다. 문법은 별표 없는 \newtheorem 과 같지만, 카운터 관련 인수를 받지 않는다는 점만 다릅니다.
\newtheorem*{remark}{Remark} % 番号なし(amsthm が必要) / unnumbered (needs amsthm)개별 정리에 고유한 이름이나 출처 를 붙일 수도 있습니다. 본문에서 환경을 열 때 \begin{theorem} 바로 뒤에 대괄호로 이름을 넘기면 번호 뒤에 괄호로 표시됩니다. 예를 들어 아래 코드는 “Theorem 1 (Pythagorean theorem)” 같은 제목을 만듭니다.
\begin{theorem}[Pythagorean theorem]
直角三角形において $a^2 + b^2 = c^2$ が成り立つ。
\end{theorem}이 대괄호는 환경에 번호가 있는지와 독립적 입니다. 번호 있는 환경에서는 “번호 + (이름)”을 얻고, \newtheorem* 로 만든 번호 없는 환경에서는 “제목 단어 + (이름)”을 얻습니다. 어느 경우든 이름은 괄호로 덧붙습니다.
모양 선택: \theoremstyle
amsthm 은 정리류 환경의 모양을 바꾸는 \theoremstyle 을 제공합니다. 내장 스타일은 세 가지이며, 제목(head)과 본문(body)의 글꼴 조합이 다릅니다. 중요한 점은 \theoremstyle{…} 이 그 뒤에 선언되는 모든 \newtheorem 에 적용된다는 것입니다. 따라서 \newtheorem 선언 전에 스타일을 지정하고, 스타일별로 선언을 묶어 둡니다. 아무것도 지정하지 않으면 기본값은 plain 입니다.
plain: 제목은 굵게, 본문은 이탤릭. 정리, 보조정리, 명제, 따름정리처럼 강조해서 말하는 주장에 사용합니다. 아무것도 지정하지 않았을 때의 기본 스타일입니다.definition: 제목은 굵게, 본문은 직립체(로만체). 정의, 예, 문제, 조건처럼 일반 문장으로 읽히게 할 내용에 사용합니다.remark: 제목은 이탤릭, 본문은 직립체. 비고, 주석, claim 같은 덧붙이는 문장에 사용합니다.
다음 프리앰블은 세 가지 스타일을 나누어 쓰면서 theorem, lemma, corollary 가 하나의 카운터를 공유하는 전형적인 구성입니다. \theoremstyle{plain} 아래에서 theorem, lemma, corollary 를 선언하고, \theoremstyle{definition} 아래에서 definition, example 을, \theoremstyle{remark} 아래에서 remark 를 선언합니다.
\usepackage{amsmath, amsthm}
\theoremstyle{plain} % 本文イタリック / italic body
\newtheorem{theorem}{Theorem}[section]
\newtheorem{lemma}[theorem]{Lemma}
\newtheorem{corollary}[theorem]{Corollary}
\theoremstyle{definition} % 本文立体 / upright body
\newtheorem{definition}[theorem]{Definition}
\newtheorem{example}[theorem]{Example}
\theoremstyle{remark} % 見出しイタリック / italic head
\newtheorem*{remark}{Remark}이 설정에서는 theorem, lemma, corollary, definition, example 이 모두 절마다 재설정되는 공통 번호(“Theorem 2.1, Definition 2.2, Lemma 2.3…” 등)를 공유합니다. 정리, 보조정리, 따름정리의 본문은 이탤릭이고, 정의와 예의 본문은 직립체입니다. remark 만 번호가 없고 “Remark” 제목이 이탤릭입니다. 위치에 주의해야 합니다. \theoremstyle 을 어떤 \newtheorem 뒤에 두면 그 선언에는 반영되지 않고 이전 스타일, 처음이라면 plain 을 유지합니다.
proof 환경과 QED 기호
amsthm 은 증명 전용 proof 환경 도 제공합니다. 이것 역시 base LaTeX 에는 없고 amsthm 의 기능입니다. proof 환경은 시작 부분에 이탤릭 “Proof.” 제목 을 자동으로 놓고, 끝에는 기본적으로 작은 빈 사각형(□, tombstone 또는 QED 기호) 인 증명 종료 기호 를 자동으로 붙입니다.
\begin{proof}
$\sqrt{2}$ が有理数だと仮定して矛盾を導く。……よって $\sqrt{2}$ は無理数である。
\end{proof}제목 단어는 바꿀 수 있습니다. proof 환경도 각 인스턴스마다 대괄호 인수를 받을 수 있으므로 \begin{proof}[Proof of Theorem 1] 이라고 쓰면 제목이 “Proof of Theorem 1.” 로 바뀝니다. 예를 들어 \begin{proof}[Proof of the lemma] 처럼 쓸 수도 있습니다.
증명 종료 기호의 위치에는 주의가 필요합니다. amsthm 은 기호를 본문 마지막 줄의 줄 끝 에 두려고 하지만, 증명이 별행 수식이나 목록 환경으로 끝나면 기호가 다음 줄에 혼자 떨어질 수 있습니다. 이럴 때는 기호를 놓고 싶은 곳에 명시적으로 \qedhere 를 둡니다. 예를 들어 별행 수식 끝에 쓰면 □ 가 그 수식 줄의 오른쪽 끝에 들어갑니다.
\begin{proof}
両辺を整理すると、次を得る。
\[
a^2 + b^2 = c^2. \qedhere
\]
\end{proof}기호 자체도 바꿀 수 있습니다. \qedsymbol 을 재정의하면 채운 사각형(■), 문자열, 또는 원하는 종료 표시로 바꿀 수 있고, 완전히 없애려면 빈 값으로 재정의합니다. 다음 중 하나를 프리앰블에 씁니다.
\renewcommand{\qedsymbol}{$\blacksquare$} % 黒い四角に / filled square
% \renewcommand{\qedsymbol}{} % 記号を消す / remove the symbolthmtools: 현대적인 상위 인터페이스
선언이 많아지면 \newtheorem 의 대괄호 위치로 번호 방식을 지정하는 문법은 읽기 어려워집니다. thmtools 는 amsthm 또는 ntheorem 위에 놓이는 상위 인터페이스 로, 모든 것을 key=value 옵션으로 지정하는 \declaretheorem 을 제공합니다. thmtools 자체가 번호 매기기 장치를 갖는 것은 아니고, 뒤에서는 amsthm 의 \newtheorem 을 호출하므로 amsthm 과 함께 불러옵니다.
가장 단순하게는 환경 이름만 넘기고, 번호 제어는 키로 씁니다. 절에 종속시키는 것은 numberwithin= 이며 동의어 parent=, within= 도 사용할 수 있습니다. 카운터 공유는 sibling= 이고 동의어 numberlike=, sharecounter= 도 됩니다. 번호 없음은 numbered=no, 제목 단어 지정은 name=(동의어 title=, heading=), 스타일은 style= 입니다. 아래 예는 앞 절의 amsthm 버전과 거의 같은 설정을 thmtools 로 쓴 것입니다.
\usepackage{amsthm, thmtools}
\declaretheorem[numberwithin=section]{theorem}
\declaretheorem[sibling=theorem]{lemma}
\declaretheorem[style=definition, sibling=theorem]{definition}
\declaretheorem[numbered=no, name=Remark]{remark}thmtools 의 장점은 amsthm 만으로는 번거로운 고급 기능을 빠르게 쓸 수 있게 해 준다는 점입니다. 대표적인 예가 재게시(restatable) 입니다. thmtools 에 포함된 thm-restate 패키지를 불러오고 restatable 환경으로 정리를 쓰면, 그 내용이 매크로로 저장되어 나중 장에서 같은 정리를 원래 번호 그대로 다시 게시할 수 있습니다. restatable 의 첫 번째 인수(생략 가능)는 이름, 두 번째 인수는 사용할 정리 환경, 세 번째 인수는 내용을 기억할 매크로 이름입니다.
\usepackage{amsthm, thmtools, thm-restate}
\declaretheorem{theorem}
% 本編:内容を \firsteuclid に保存 / store the content in \firsteuclid
\begin{restatable}[Euclid]{theorem}{firsteuclid}
\label{thm:euclid}
There are infinitely many primes.
\end{restatable}
% 付録などで同じ定理・同じ番号を再掲 / restate later with the same number
\firsteuclid*저장한 매크로 \firsteuclid 를 나중에 펼치면 그 정리가 원래 번호 그대로 다시 조판됩니다. 번호는 본문 쪽 원래 위치에 고정되고, 내부의 별행 수식 번호 등도 원래 번호를 사용합니다. \firsteuclid* 처럼 별을 붙이면, 상호 참조(\label/\ref)가 재게시된 사본이 아니라 원래 선언 위치 를 가리키도록 유지한 채 다시 게시할 수 있습니다. 주장은 본문에 번호와 함께 두고 증명은 부록에 두고 싶을 때 유용합니다.
또 하나의 편리한 기능은 정리 목록(list of theorems) 입니다. \listoftheorems 라고 쓰면 목차처럼 정리, 보조정리 등의 목록이 자동 생성됩니다. ignoreall 로 먼저 모두 제외한 뒤 show={…} 로 표시할 환경 이름만 나열해 좁힐 수 있습니다. onlynamed 또는 onlynamed={…} 를 사용하면 \begin{…}[name] 처럼 이름을 붙인 정리만 목록에 실을 수 있습니다. hyperref 를 함께 불러오면 목록의 각 항목은 해당 정리 본문으로 가는 클릭 가능한 링크 가 됩니다.
\listoftheorems % すべて / everything
\listoftheorems[ignoreall, show={theorem, lemma}] % theorem と lemma だけ / only these모양을 직접 만들고 싶다면 thmtools 의 \declaretheoremstyle 로 새 스타일을 정의하고 \declaretheorem[style=…]{…} 에서 호출할 수 있습니다. 제목 글꼴(headfont), 본문 글꼴(bodyfont), 위아래 여백(spaceabove, spacebelow), 주석을 감싸는 괄호(notebraces), 제목 뒤 간격(postheadspace), 종료 기호(qed) 등을 키로 세밀하게 지정할 수 있습니다. 기본 amsthm 만으로 충분하다면 굳이 쓸 필요는 없지만, 복잡한 정리 환경을 다듬는 데에는 강력한 선택지입니다.