環境とは

\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 には、引数末尾の空白の扱いが異なる * 付きの派生形もあります。