\begin{...} から \end{...} までで囲んだひとかたまりの領域を 環境(environment) と呼びます。中身にまとめて何らかの振る舞いや書式を効かせる「範囲を区切る仕組み」で、箇条書き・別行立ての数式・図表・引用といった LaTeX のほとんどの構造はこの形をとります。このページでは、環境とは何か、入れ子のルール、よく使う環境、そして自分で環境を定義する方法を見ていきます。
環境とは何か
環境は、\begin{名前} で始まり \end{名前} で終わる、内容に対して何らかの効果を与える 区切られたブロック です。たとえば center 環境なら中身を中央に寄せ、itemize 環境なら中身を箇条書きにします。ここで決定的に大事なのは、始まりと終わりの名前が完全に一致していなければならない ことです。\begin{center} を \end{flushleft} で閉じることはできません。
\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} の形です。
\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 | 行と列からなる表を組む |
quote と quotation はどちらも引用を字下げしますが、quotation は段落の先頭をさらに字下げし、長め(複数段落)の引用に向きます。verbatim 環境は中身を 入力したそのまま 等幅で出力し、\ や { などの特殊文字も命令として解釈しません。プログラムのソースを載せるときに重宝します。
一部の環境は 引数を取ります。tabular は列の指定が必須で、\begin{tabular}{cc} のように \begin{tabular} の直後の引数で各列の揃え(c 中央・l 左・r 右)を与えます。表の中では列を & で区切り、各行を \\ で改行します。
\begin{tabular}{cc}
名前 & 役割 \\
TeX & 組版エンジン \\
LaTeX & 文書フォーマット \\
\end{tabular}さらに多くの環境には、名前の末尾に * を付けた アスタリスク付き(スター付き)の派生形 があります。たとえば align 環境はすべての行に式番号を振りますが、\begin{align*} … \end{align*} は 番号を振らない 版です。equation* も同様に番号なしの別行立て数式になります。
自分で環境を定義する
同じ書式の組み合わせを文書中で繰り返すなら、**\newenvironment** で自分専用の環境を定義できます。一度定義すれば、独自の名前で \begin / \end を使えます。構文は次のとおりです([nargs] と [default] は省略可能)。
\newenvironment{名前}[nargs][default]{開始時のコード}{終了時のコード}- 名前 … 新しい環境の名前(バックスラッシュは付けない。
endで始まる名前は不可)。 - nargs … 取る引数の個数(0〜9)。本文中では
#1,#2, … で参照する。 - default … これを指定すると 1 個目の引数が省略可能になり、その既定値になる。
- 開始時のコード(begin-code) …
\begin{名前}で実行される。引数#1などはここで使う。 - 終了時のコード(end-code) …
\end{名前}で実行される。**ここでは#1などの引数を使えない**。
例として、注意書きを枠囲みで強調する important 環境を作ってみます。見出しの語をオプション引数で渡せるようにし、既定値を「重要」とします。default を指定したので #1 がその引数を受け取ります。
\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 には、引数末尾の空白の扱いが異なる * 付きの派生形もあります。