There are two main tools for setting your text in two or more columns. One is the twocolumn class option (with its companion commands \twocolumn / \onecolumn), which makes the *whole document* two-column. The other is the multicols environment from the multicol package, which can start mid-page and take any number of columns. They look alike but behave differently — in the number of columns, in how column heights are balanced, and in how they handle figures and tables (floats). This page also covers when to reach for which.
The two approaches
The short version: if you want the entire document in two columns (a conference-paper look, say), the standard classes’ twocolumn option is the easy route. But if you want to make only part of the document multi-column, want three or more columns, or want the column heights balanced, the multicol package is the better fit. The table below is the rough comparison.
| Aspect | twocolumn (class) | multicol package |
|---|---|---|
段数 | Two columns only | Any number, 2 to 10 |
範囲 | Whole document (or page-by-page) | Only the wrapped region; can start mid-page |
最終ページの段の高さ | Not balanced (last right column often short) | Balanced automatically |
切り替え時の改ページ | \twocolumn / \onecolumn force a page break | None (switches within the same page) |
フロート(図表) | Full-width floats via figure* work | Normal floats not supported (see below) |
Two columns for the whole document — twocolumn
The simplest way is to pass the twocolumn option to your document class. That alone sets the whole body in two columns (the default is onecolumn, i.e. a single column). Many academic classes are built around this option internally.
\documentclass[twocolumn]{article}To change the number of columns partway through, call **\twocolumn and \onecolumn** in the body. \twocolumn switches to two-column mode; \onecolumn switches back to one column. Two important caveats, though. First, both commands start a new page — a page break is forced, so the switch never happens mid-page. Second, \twocolumn only ever produces two columns; it cannot do three or more.
\twocolumn takes an optional argument: **\twocolumn[⟨one-column banner⟩] typesets that material in a single, full-width column** before the two-column text begins. This is the classic paper layout — the title, authors, and abstract span the full page width, and the body starts as two columns underneath.
\documentclass[twocolumn]{article}
\begin{document}
\twocolumn[%
\begin{center}
{\LARGE 論文タイトル}\\[4pt]
著者名 \quad 所属
\end{center}
\vspace{1em}
]
本文はここから 2 段組みで組まれます。……
\end{document}The gap between the two columns is the length **\columnsep, and the thickness of a rule drawn between them is \columnseprule**. \columnseprule defaults to 0pt (no rule); set a positive value to show one. Note that on the final page twocolumn does not balance the two column heights, so the right column can end up much shorter than the left. (When you want them balanced, multicol below is the tool.)
\setlength{\columnsep}{20pt} % 段間を広げる
\setlength{\columnseprule}{0.4pt} % 段間に細い罫線を引くFull-width figures in two-column mode
A real advantage of twocolumn is that you can place figures and tables that span the full page width across both columns. Instead of figure or table, use the starred **figure* / table* environments and the float spans both columns. Placement is a bit restricted, though: full-width floats are put at the top of a page** (they will not go to the bottom).
\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}Here it helps to know the difference between **\columnwidth and \textwidth**. \columnwidth is the width of one column, while \textwidth is the width of the whole text block (both columns plus the gap). Use width=\columnwidth for a figure that fits one column and width=\textwidth for a full-width one, and you avoid overruns.
Any number of balanced columns — the multicol package
The multicol package by Frank Mittelbach removes the awkward parts of twocolumn (locked to two columns, whole-document or page-by-page, last columns not balanced). Load it with \usepackage{multicol} and wrap the region you want in the **multicols** environment, passing the number of columns as its argument.
\usepackage{multicol}
% ...本文中で
\begin{multicols}{3}
ここに書いた本文が 3 段に分かれて組まれます。……
\end{multicols}multicol has four strengths. First, you may choose anywhere from 2 to 10 columns. Second, at the end of the environment it balances the columns to roughly equal height automatically. Third, it can begin mid-page — it does not force a page break the way twocolumn does. Fourth, multicols environments can be nested.
When you want introductory text that spans all the columns (a heading or a lead-in) before the columns start, give the optional argument **[⟨preamble text⟩]** after the column count. That material alone is set full-width, not split into columns.
\begin{multicols}{3}[\section{用語集}]
この見出しは 3 段の上に全幅で出ます。\par
以降の本文が 3 段に分かれます。……
\end{multicols}After that preamble argument you may give one more optional **[⟨length⟩]. It states the minimum amount of free space at the bottom of the page needed to start the columns, temporarily overriding the default \premulticols**. If less space than this remains, the columns begin on a fresh page — useful to stop columns from starting awkwardly at the very bottom of a page after a long preamble.
Controlling columns — breaks, rules, and unbalanced
To choose where a column ends, call **\columnbreak** in the body. It cuts off the current column at that point and sends the rest to the next column (added in version 1.5u). Newer versions accept \columnbreak[⟨0–4⟩], where the number sets how desirable the break is from 0 (weak) to 4 (forced); there is also **\newcolumn**, which forces a break but leaves the column short.
The gap and rule between columns use the same **\columnsep (the gap) and \columnseprule** (rule thickness, default 0pt) as twocolumn. The rule’s color can be changed by setting a color in **\columnseprulecolor** (the default is the normal text color). Set these lengths before entering the multicols environment.
\setlength{\columnsep}{1.5em} % 段間
\setlength{\columnseprule}{0.4pt} % 段間の罫線を表示
\begin{multicols}{2}
左の段の本文。……
\columnbreak % ここで右の段へ送る
右の段の本文。……
\end{multicols}The plain multicols balances the columns on the last page, but sometimes you do not want them balanced — for fragile content, or when you want material to flow across several pages in order. For that, use the starred **multicols*** (added in version 1.5q). It leaves the last page’s columns unbalanced and fills them sequentially from the left.
The float trade-off
The biggest gotcha with multicol is that **normal floats (figure / table environments) and \marginpar cannot be used inside a multicols environment**. Per the multicol manual, LaTeX’s float mechanism is partly disabled there: a figure or table placed inside simply disappears, with the warning Floats and marginpars not allowed inside ‘multicols’ environment!. Only the page-wide **starred floats (figure* and the like) work, and even those are treated as full-width and placed at the bottom of the page**, not within a column.
This is where the two approaches part ways. If you need figures inside a column or want floats to settle within each column, twocolumn — which handles floats properly (full-width ones via figure*) — is the right choice. If you instead prioritize flexible column counts and balanced columns, and a full-width figure is enough, use multicol. When you must place a small image inside multicol, drop a non-floating \includegraphics directly, or use a wrapping package such as wrapfig as a substitute.
One more thing: because columns are narrow, justified text in them tends to open up uneven word spacing. If that bothers you, set the column text ragged-right, or combine it with hyphenation and line-break tuning to make it sit cleanly.