段組み(multicol / twocolumn)

本文を 2 段以上に分けて組む「段組み」には、大きく二つの道具があります。文書全体を 2 段組みにするクラスオプション twocolumn(と切り替え命令 \twocolumn\onecolumn)と、ページの途中からでも任意の段数で組める multicol パッケージの multicols 環境です。両者は似て非なるもので、段数・段の高さの揃え方・図表(フロート)の扱いがそれぞれ違います。このページでは使い分けの勘どころまで含めて見ていきます。

二つのアプローチ

結論を先に言うと、文書を丸ごと 2 段組みにしたい(学会論文の体裁など)なら、標準クラスの twocolumn オプションが手軽です。一方、特定の箇所だけ段組みにしたい3 段以上にしたい段の高さをそろえたいなら、multicol パッケージの方が向いています。次の表が大まかな対比です。

観点twocolumn(クラス)multicol パッケージ
段数2 段のみ2〜10 段の任意
範囲文書全体(または改ページ単位)環境で囲んだ範囲だけ。ページ途中でも可
最終ページの段の高さそろえない(右段が短くなりがち)自動でそろえる(balanced)
切り替え時の改ページ\twocolumn\onecolumn は改ページを強制不要(同じページ内で切り替わる)
フロート(図表)段抜きの全幅フロート figure* が使える通常のフロートは不可(後述)

文書全体を 2 段にする — twocolumn

もっとも簡単なのは、ドキュメントクラスに twocolumn オプションを渡すことです。これだけで本文全体が 2 段組みになります(既定は onecolumn、つまり 1 段)。多くの学会クラスは内部でこのオプションを前提に作られています。

latex
\documentclass[twocolumn]{article}

文書の途中で段数を変えたいときは、本文中で **\twocolumn\onecolumn** を呼びます。\twocolumn は 2 段組みに、\onecolumn は 1 段組みに切り替えます。ただし重要な制約が二つあります。第一に、どちらの命令も新しいページを始めます(強制的に改ページが入る)。ページの途中では切り替わりません。第二に、\twocolumn が作るのは 常に 2 段だけ で、3 段以上はできません。

\twocolumn には省略可能な引数があり、**\twocolumn[⟨1 段組みの前置きテキスト⟩] と書くと、その内容が 2 段組みが始まる前に 1 段(全幅)で** 組まれます。論文の冒頭で、タイトルと著者・アブストラクトだけをページ幅いっぱいに置き、その下から本文を 2 段にする、という定番の体裁がこれで作れます。

document.tex
\documentclass[twocolumn]{article}
\begin{document}
\twocolumn[%
  \begin{center}
    {\LARGE 論文タイトル}\\[4pt]
    著者名 \quad 所属
  \end{center}
  \vspace{1em}
]
本文はここから 2 段組みで組まれます。……
\end{document}

2 段の間隔は長さ **\columnsep、段と段の間に引く罫線の太さは \columnseprule** で決まります。\columnseprule の既定値は 0pt(罫線なし)。罫線を出したいときは正の値を設定します。なお最終ページについては、twocolumn左右の段の高さをそろえません ので、右段だけ大きく短くなることがあります(そろえたい場合は次の multicol が有効です)。

latex
\setlength{\columnsep}{20pt}      % 段間を広げる
\setlength{\columnseprule}{0.4pt} % 段間に細い罫線を引く

2 段組みでの全幅の図表

twocolumn の大きな利点は、段をまたいでページ幅いっぱいに広がる図表 を置けることです。figuretable のかわりに、アスタリスク付きの **figure*table* 環境を使うと、その図表は両段にまたがる全幅のフロートになります。ただし配置はやや制約があり、全幅フロートは ページの上端** に置かれます(下端には回りません)。

document.tex
\documentclass[twocolumn]{article}
\usepackage{graphicx}
\begin{document}
% 1 段ぶんの幅の図(通常のフロート)
\begin{figure}
  \centering
  \includegraphics[width=\columnwidth]{plot}
  \caption{片段に収まる図}
\end{figure}

% 両段にまたがる全幅の図
\begin{figure*}
  \centering
  \includegraphics[width=\textwidth]{wide-plot}
  \caption{ページ全幅の図}
\end{figure*}
\end{document}

ここで覚えておきたい長さが **\columnwidth\textwidth** の違いです。\columnwidth1 段ぶんの幅\textwidth版面全体(両段+段間)の幅 を指します。1 段に収める図は width=\columnwidth、全幅の図は width=\textwidth を目安にすると、はみ出しを防げます。

任意段数でそろえる — multicol パッケージ

twocolumn の不便さ(2 段固定・全文または改ページ単位・最終段がそろわない)を解消するのが、Frank Mittelbach による **multicol** パッケージです。\usepackage{multicol} を読み込み、段組みにしたい範囲を **multicols** 環境で囲みます。引数に段数を渡すだけです。

latex
\usepackage{multicol}
% ...本文中で
\begin{multicols}{3}
  ここに書いた本文が 3 段に分かれて組まれます。……
\end{multicols}

multicol の長所は四つあります。第一に、段数は 2 段から 10 段まで 自由に選べます。第二に、環境の終わりで各段の高さを 自動的にそろえます(balancing)。第三に、ページの途中から段組みを始められtwocolumn のように改ページを強制しません。第四に、multicols 環境は 入れ子にできます

段組みの前に、全段にまたがる前置きの文章(見出しや導入文)を置きたいときは、段数のあとに省略可能な引数 **[⟨前置きテキスト⟩]** を書きます。この部分だけは段に分かれず、版面の全幅で組まれます。

latex
\begin{multicols}{3}[\section{用語集}]
  この見出しは 3 段の上に全幅で出ます。\par
  以降の本文が 3 段に分かれます。……
\end{multicols}

さらに、その前置きテキストの引数のあとには、もう一つ省略可能な **[⟨長さ⟩] を書けます。これは「段組みを始めるのに最低限必要な、ページ下部の空き」を表し、既定値 \premulticols** を一時的に上書きします。残りの空きがこの値より小さければ、段組みは新しいページから始まります。長い前置きを置いたときに、ページ末で中途半端に段組みが始まるのを防げます。

段の制御 — 段抜け・罫線・unbalanced

段の切れ目を自分で指定したいときは、本文中で **\columnbreak** を呼びます。その位置で現在の段を打ち切り、続きを次の段に送ります(バージョン 1.5u で追加)。新しいバージョンでは \columnbreak[⟨0〜4⟩] のように望ましさを 0(弱い)〜4(強制)で指定でき、また段を途中で打ち切ったまま短くする **\newcolumn** も使えます。

段間の幅と罫線は、twocolumn と同じ **\columnsep(段間)と \columnseprule**(罫線の太さ、既定 0pt)で制御します。罫線の色は **\columnseprulecolor** に色指定を入れて変えられます(既定は本文色)。これらの長さは multicols 環境に入る前に設定しておきます。

latex
\setlength{\columnsep}{1.5em}     % 段間
\setlength{\columnseprule}{0.4pt} % 段間の罫線を表示
\begin{multicols}{2}
  左の段の本文。……
  \columnbreak               % ここで右の段へ送る
  右の段の本文。……
\end{multicols}

通常の multicols は最終ページの段をそろえますが、段をそろえてほしくない こともあります(壊れやすい内容や、複数ページにわたって順に流し込みたい場合)。そのときはアスタリスク付きの **multicols*** を使います(バージョン 1.5q で追加)。multicols* は最終ページの段の高さをそろえず、内容を左から順に詰めていきます。

フロート(図表)の落とし穴

multicol を使うときの最大の注意点は、**multicols 環境の中では通常のフロート(figuretable 環境)も \marginpar も使えない** ことです。multicol のドキュメントによれば、LaTeX のフロート機構はこの環境内で一部無効化されており、figuretable を置くと 図表が消えてしまいFloats and marginpars not allowed inside ‘multicols’ environment! という警告が出ます。使えるのは段抜けの **アスタリスク付きフロート(figure* など) だけで、それもページ全幅として扱われ、各段の中ではなく ページの下部** に配置されます。

ここが二つのアプローチの分かれ目です。段内に図表を回り込ませたい/各段の中にフロートを置きたい なら、フロートを正しく扱える twocolumn(全幅フロートは figure*)が向きます。段数の自由度や段のそろえを優先し、図はせいぜい全幅で足りる なら multicol。multicol の中でどうしても小さな図を入れたい場合は、フロートにせず \includegraphics を直に置くか、wrapfig などの回り込みパッケージで代用します。

なお、段組みは段の幅が狭くなるため、両端揃えの本文ではスペースが不自然に開きやすくなります。気になるときは段内で左寄せ(ラギッド)にするか、ハイフネーションや行分割の調整を併用するときれいに収まります。