さまざまな環境

17.7. さまざまな環境

この節では、環境と呼ばれるものについて説明します。環境とは、

\begin{env} ... \end{env}

と対になった命令のことです。\begin と \end で囲まれた部分は、外側とはいろいろな設定が異なったりしています。既に皆さんは \begin{document} … \end{document} という document 環境に出会っていることになります。

環境の内部で行われた変更、例えば文字サイズや書体の変更( 17.7. さまざまな環境 )は、その環境の外には影響は及びません。

引用 #

引用には、quote 環境・quotation 環境を用います:

引用には、quote環境やquotation環境を使います。次がquote環境の例です:
\begin{quote}
quote環境は、1段落分の短い引用を組む場合に使います。
改段落しても字下げが行われません。
\end{quote}
一方、下がquotation環境の例です:
\begin{quotation}
quotation環境は、複数段落の長い引用を組む時に使います。各段落の最初は字下げされます。
\end{quotation}
jarticle, jbook,~$\ldots$のquotation環境による字下げは、
上の通り字下げ幅が全角の整数幅になっていません。
jsarticle, jsbookではきちんと整数幅になります。

箇条書き #

LaTeX では、箇条書き用に3種類の環境を用意しています。どの環境でも、項目ごとに \item を前におく必要があります。まずは、番号なしの箇条書きを与える itemize 環境です:

\begin{itemize}
\item itemize環境は、番号なしの箇条書きです。
\item \verb+\item+を各項目ごとに前置します。
\item 4レベルまでネストすることができます。
  \begin{itemize}
  \item ネストごとに記号のつけ方が変わります。
    \begin{itemize}
    \item 第3レベルはこのようになります。
    \end{itemize}
  \end{itemize}
\end{itemize}

次に、番号付きの箇条書きは enumerate 環境で出力します:

\begin{enumerate}
\item enumerate環境は、番号付き箇条書きです。
\item これも4レベルまでネストすることができます。
\begin{enumerate}
  \item ネストごとに番号のつけ方が変わります。
  \item[qx.] \verb+\item+の次に[qx.]などと書くことで、
    箇条書きの見出しをそこだけ変えることができます。% これは itemize 環境でも同じです。
  \item 上の「自分で指定した見出し」によって番号は増えません。
\end{enumerate}
\end{enumerate}

最後に、description 環境は、項目ごとに見出しがつく箇条書きです:

\begin{description}
\item[見出し] description 環境は、見出しをつけた箇条書きです。
\item[hoge] \verb+\item+の次に[ ]で囲って各項目の見出しを指定します。
  見出しは左に太字で出力されます。
\item[js系での注意] jsarticle, jsbookでは、見出しの書体は
\textsf{this font (sans-serif)}になります。
\end{description}

但し、description 環境内で見出しに ] を含む項目を組むときには注意が必要で、\item[{a[b]c}] と { } でグルーピングする必要があります。これは [ ] は TeX の文法的には普通の文字で( 17.4. 文書の書き方 にも書きました)あるので、\item[ … ] で見出しと認識されるのは一番最初の ] までであるからです。また、各項目の本文を [ で始めたい場合も、オプション指定と勘違いされないためにグルーピングする必要があります。

\begin{description}
\item[a[b]c]    「a[b]c」を見出しにしたかったが……。% a[b までと認識されます。
\item[{a[b]c}]  こうやってグルーピングすればOK。
\end{description}
\begin{itemize}
\item [A]←これだと[A]は見出し扱いになってしまいます。
\item {[A]}のように、グルーピングで解決します。
\end{itemize}

入力をそのまま出力 #

ソフトウェアの出力ログや、プログラムのソースコードなど、入力した文章を「そのまま」出力したい場合があります。そのような場合は、verbatim 環境を利用します:

\begin{verbatim}
#include <stdio.h>
int main() {
  int k;
  printf("%2d. `quote?'\n", 42);
  if ( (2>0) && (2<0) ) k=1;
}
\end{verbatim}
\begin{verbatim*}
  int k;
\end{verbatim*}

出力例でもわかるように、verbatim 環境の中では \texttt{…} と同じタイプライタ体になり、入力中の空白や改行がそのまま出力にも反映されます。また、verbatim* 環境にすると、半角空白が明示されるようになります。

短い文字列を同様に「打ち込んだままに出力」するには、

\verb|(^\_^)|, \verb +(^\_^)+, \verb+m(\_ \_)m+

のように \verb|…| を用います。\verb の直後の文字は区切り記号として用いられます。例えば最初の例だと、\verb 直後の | と次の | に挟まれた (^_^) が出力されます。\verb*| … | とすると、空白が明示的に見えるようになるのも同じです。

しかし、この verbatim 環境・\verb は、LaTeX の内部処理をいじっている関係上、使用には制約があります。

  • 原則として、\section{ … \verb| … | … } などと\verb を他のコマンドの引数の中に入れることはできません。次のようなエラーが出ます。
! LaTeX Error: \verb illegal in command argument.
  • verbatim の終了 \end{verbatim} で、\end と {verbatim} の間に空白を入れてはいけません。それは、
\end{verbatim}

という文字列が verbatim 環境の終わりを表しているからです。

  • \verb とその引数は、同じ行の中で完結しないといけません。

行揃え #

標準で LaTeX は、各行の行頭と(各段落の最終行を除く)行末がそれぞれ本文領域の左端と右端にあうように自動調整を行います。これとは異なる、左寄せ・中央揃え・右寄せで文章を組みたい場合は、それぞれ flushleft, center, flushright 環境を用います。

標準では本文領域の左端と右端にあうように字間が適切に設定されます。
この出力例では罫線で端を表しています。\\
上のように、改段落の代わりに強制改行を使うこともできますが、q
標準の地の文ではあまり使わないことをお勧めします。
\begin{flushleft}
  これは左寄せの例です。\\
  この環境の中では各行の右端は不揃いになります。
\end{flushleft}
\begin{center}
  これは中央揃えの例です。
\end{center}
\begin{flushright}
  これは右寄せの例です。
\end{flushright}

これらの各環境内では \ を使うことで改行を行うことができます。

上の例で示しているように、\ を使うと地の文の中でも強制的に改行を行うことができますが、あまり使わない方が良いでしょう。\ を乱発すると、次のようなエラーがでます。

 ! LaTeX Error: There's no line here to end.

また、\[20pt] のように長さをオプションで書くと、通常の行間よりその分(ここでは 20 pt)だけ増加します。負の長さを指定しても良いです。

表組み #

表を作るには、tabular 環境や array 環境を使います。tabular 環境は地の文で使用するのに対し、array 環境は数式中で使用します(各セルも数式モードになっています)。使い方はほぼ同じなので、ここでは tabular 環境のみ説明します。

以下が tabular 環境の例(兼説明)です。

\begin{tabular}{|lc|r}
左揃えのセル&中央揃え&右揃えのセル\\
列指定中の \verb+|+ は&縦罫線を&意味します。\\
セルとセルは&\verb|&|で&区切ります。\\
行と行の間は&\verb|\\|で&区切ります。\\
最後の行の後に&\verb|\\|は&一般には不要。
\end{tabular}

上の例のように、\begin{tabular} の直後には列の指定を書きます。1文字は原則1列を意味します。よく使われるのは次の指定です。

  • l(小文字のエル):左寄せの列
  • c:中央揃えの列
  • r:右揃えの列
  • |(縦棒):縦罫線

セルと次の列のセルとの間は & で区切ります。この & は、セルとセルを区切るという役割を持っています( 17.4. 文書の書き方 で「そのままでは入力できない」と書いたのは、このためです)。また、行と行の間は \ で区切ります。最下行の後には、普通は \ は要りません。

罫線と列の連結 #

横罫線を引くには、\hline コマンドを使います。\begin{tabular}{列指定} の直後に書くか、各行の終わりの \ の後で指定します。最下行の下に罫線を書く場合は、\ が必要になります。一部分にのみ横罫線を書くこともできますが、それはここでは扱わないことにします。

また、横方向に複数のセルを連結することも、\multicolumn コマンドを使えば可能です。

\multicolumn{列数}{列指定}{内容}

最初の引数「列数」には、何列分を1つのセルにしたいかの数を入力します。「列指定」では、tabular 環境の最初に指定した l, c, r のどれかを書きますが、場合によっては縦罫線を表す | も前後に書く必要があるかもしれません。

ここまでの内容を使った例を以下に載せます。

\texttt{tabular}環境は内部では1文字のように
\begin{tabular}{lr}
表の&テスト\\
だ&よ\\\hline
\end{tabular}
扱われるので。普通は下のように\texttt{center}環境などで
囲むことになるでしょう。\begin{center}
\begin{tabular}{|l|c||r}
\hline
左揃えのセル&中央揃えのセル&右揃えのセル\\
\hline
\verb+\hline+は&横罫線を&引きます。\\
\hline\hline
二重に横罫線を引くと&縦罫線が&つながりません。\\
\verb+\multicolumn+で&\multicolumn{2}{|c}{複数のセルを連結できます}\\
\multicolumn{2}{|c||}{複数のセルを連結}&テストテスト\\
\multicolumn{1}{|r|}{このセル右寄せ}&テスト&テスト\\
\hline
\end{tabular}
\end{center}

booktabs パッケージ #

罫線の引き方について上で説明しましたが、格子状に罫線を引くのは過剰な場合が多いです。また、今までのものだと横罫線と上下の行の間隔が狭く、読み難く感じるでしょう。より見やすく、すっきりとした表を作るには、縦罫線を用いずに、booktabs パッケージを利用します。

booktabs パッケージでは、横罫線として主に \toprule, \midrule, \bottomrule を使用します。これらはそれぞれ、「一番上の横罫線」「表中の横罫線」「一番下の横罫線」で、\toprule, \bottomrule は若干太くなっています、

以下に booktabs パッケージの使用例を載せます。ゆったりして随分読み易くなっていることが実感できると思います。

\begin{tabular}{llr} % 縦罫線は使わない
\toprule % 一番上の罫線
&\multicolumn{2}{c}{\textgt{情報}}\\
\cmidrule(lr){2-3}
\textgt{節番号}
  &\textgt{タイトル}&\textbf{ID}\\
\midrule
24.2&まず使ってみる&288\\
24.3&文章の書き方&295\\
24.4&クラスとパッケージ&357\\
24.5&文字修飾&1512\\
\bottomrule
\end{tabular}

文字修飾とフォント さまざまな環境 数式の書き方 (1)