環境とは

\begin{...} から \end{...} までで囲んだひとかたまりの領域を 環境(environment) と呼びます。中身にまとめて何らかの振る舞いや書式を効かせる「範囲を区切る仕組み」で、箇条書き・別行立ての数式・図表・引用といった LaTeX のほとんどの構造はこの形をとります。このページでは、環境とは何か、入れ子のルール、よく使う環境、そして自分で環境を定義する方法を見ていきます。

環境とは何か

環境は、\begin{名前} で始まり \end{名前} で終わる、内容に対して何らかの効果を与える 区切られたブロック です。たとえば center 環境なら中身を中央に寄せ、itemize 環境なら中身を箇条書きにします。ここで決定的に大事なのは、始まりと終わりの名前が完全に一致していなければならない ことです。\begin{center}\end{flushleft} で閉じることはできません。

latex
\begin{center}
この段落は中央に寄ります。
\end{center}

もうひとつ重要なのは、環境は暗黙のグループ(局所的な範囲)を作る ことです。環境の中で行った書体やスペーシングの変更は、\end{...} を抜けると元に戻り、外へは漏れ出しません。たとえば quote 環境の中で字下げや余白が変わっても、環境を抜ければ通常の本文に戻ります。中括弧 { ... } でグループを作るのと同じ働きが、環境にも備わっていると考えてください。

文書全体も、実は \begin{document}\end{document} というひとつの環境です。本文はすべて document 環境の内側に書く、という最小ルールはここから来ています。

入れ子(ネスト)のルール

環境は 入れ子にできます。ただし、開いた順序と逆の順序で閉じなければなりません。\begin{a} の内側で \begin{b} を開いたら、先に \end{b} で内側を閉じ、それから \end{a} で外側を閉じます。つまり \begin{a}\begin{b}...\end{b}\end{a} の形です。

latex
\begin{quote}
  引用の中に箇条書きを置く例:
  \begin{itemize}
    \item 一つ目
    \item 二つ目
  \end{itemize}
\end{quote}

逆に、\begin{a}\begin{b}...\end{a}\end{b} のように範囲が 交差(オーバーラップ) する書き方はできません。これは LaTeX で最もよくあるエラーの一つで、\begin{...} ended by \end{...}(開いた環境と閉じた環境が食い違っている)というメッセージが出ます。長い文書では、各環境を字下げして対応関係を見やすくしておくと、閉じ忘れや取り違えを防げます。

よく使う環境

標準の LaTeX には用途別に多くの環境が用意されています。代表的なものを役割ごとにまとめます。それぞれの詳しい使い方は専用のページで扱いますが、すべて \begin / \end で囲む同じ形である点は共通です。

分類環境役割
text本文center, flushleft, flushright, quote, quotation, verbatim中央/左/右寄せ、引用、入力をそのまま出力
listsリストitemize, enumerate, description記号付き・番号付き・定義型の箇条書き
math数式equation, align別行立ての数式、複数行の整列した数式
floatsフロートfigure, table図・表を配置位置を委ねて浮かせる
tabular表組みtabular行と列からなる表を組む

quotequotation はどちらも引用を字下げしますが、quotation は段落の先頭をさらに字下げし、長め(複数段落)の引用に向きます。verbatim 環境は中身を 入力したそのまま 等幅で出力し、\{ などの特殊文字も命令として解釈しません。プログラムのソースを載せるときに重宝します。

一部の環境は 引数を取りますtabular は列の指定が必須で、\begin{tabular}{cc} のように \begin{tabular} の直後の引数で各列の揃え(c 中央・l 左・r 右)を与えます。表の中では列を & で区切り、各行を \\ で改行します。

latex
\begin{tabular}{cc}
  名前 & 役割 \\
  TeX & 組版エンジン \\
  LaTeX & 文書フォーマット \\
\end{tabular}

さらに多くの環境には、名前の末尾に * を付けた アスタリスク付き(スター付き)の派生形 があります。たとえば align 環境はすべての行に式番号を振りますが、\begin{align*}\end{align*}番号を振らない 版です。equation* も同様に番号なしの別行立て数式になります。

自分で環境を定義する

同じ書式の組み合わせを文書中で繰り返すなら、\newenvironment で自分専用の環境を定義できます。一度定義すれば、独自の名前で \begin / \end を使えます。構文は次のとおりです([nargs][default] は省略可能)。

latex
\newenvironment{名前}[nargs][default]{開始時のコード}{終了時のコード}
  • 名前 … 新しい環境の名前(バックスラッシュは付けない。end で始まる名前は不可)。
  • nargs … 取る引数の個数(0〜9)。本文中では #1, #2, … で参照する。
  • default … これを指定すると 1 個目の引数が省略可能になり、その既定値になる。
  • 開始時のコード(begin-code)\begin{名前} で実行される。引数 #1 などはここで使う。
  • 終了時のコード(end-code)\end{名前} で実行される。ここでは #1 などの引数を使えない

例として、注意書きを枠囲みで強調する important 環境を作ってみます。見出しの語をオプション引数で渡せるようにし、既定値を「重要」とします。default を指定したので #1 がその引数を受け取ります。

latex
\newenvironment{important}[1][重要]{%
  \begin{quote}\noindent\textbf{#1:}\itshape
}{%
  \end{quote}%
}

% 使い方
\begin{important}
  締め切りは厳守してください。
\end{important}

\begin{important}[注意]
  バックアップを忘れずに。
\end{important}

一つ目の使用例は既定値の「重要:」を見出しに、二つ目は [注意] を渡して「注意:」を見出しに、いずれも続く本文を斜体で組みます。begin-code の中で \begin{quote} を開き、end-code の中で \end{quote} を閉じている点に注目してください。環境はそれ自体がグループなので、\itshape(斜体)の効果は \end{important} で自動的に元へ戻り、外の本文には影響しません。

既存の環境を作り変えたいときは \renewenvironment を使います。構文は \newenvironment と同じですが、こちらは すでに定義済みの名前 に対して使います(未定義の名前にはエラー)。逆に \newenvironment は、既存の名前に対して使うとエラーになります。\newenvironment\renewenvironment には、引数末尾の空白の扱いが異なる * 付きの派生形もあります。

閉じ忘れを起こさない書き方

長い文書では、環境のエラーは「いま書いた場所」ではなく、数ページ後の \end{document} 付近で初めて表面化することがあります。そこで、環境を開いたらすぐ閉じる行も書き、その間に中身を入れる習慣をつけます。入れ子は 2 字か 4 字で字下げし、figure の中に tabularquote の中に itemize のように、何が何の内側にあるかをソース上で見える形にします。

latex
\begin{figure}
  \centering
  \begin{tabular}{ll}
    入力 & 出力 \\
    source & PDF \\
  \end{tabular}
  \caption{処理の対応}
\end{figure}

エラーが出たら、ログの \begin{...} ended by \end{...} だけで判断せず、直前に追加した環境を最小例に切り出します。表・図・数式・箇条書きはそれぞれ独立にコンパイルできる小片にしてから戻すと、閉じ忘れとパッケージ由来のエラーを分離できます。

環境を意味の部品として選ぶ

環境は見た目の箱ではなく、原稿の部品名です。引用なら quote、箇条書きなら itemize、表なら tabular、ページ上を浮かせる図表なら figuretable を選ぶと、あとでキャプション、番号、相互参照、目次類へ自然につながります。見た目だけを中央寄せにしたいから center、余白が欲しいから quote といった選び方を続けると、長い文書で役割が分からなくなります。

  • 本文の意味が引用quote / quotation を使い、引用元を本文や脚注で示す。
  • 論理的な項目列itemize / enumerate / description を使い、\\ で箇条書きを偽装しない。
  • 番号と参照が必要な図表figure / table の中に \caption\label を置く。
  • 何度も出る独自ブロック — 局所的な書式命令のコピーではなく、\newenvironment で名前を付ける。