LaTeX Two-Column Layout
Three ways: [twocolumn] class option, \twocolumn mid-document switch, or the multicol package for flexible column blocks.
The three approaches
1. Whole document two-column
\documentclass[twocolumn]{article} % entire document is two-column
% IEEE conference template uses this
\documentclass[conference]{IEEEtran} % twocolumn is set automatically2. Mid-document switching
\documentclass{article}
\begin{document}
This is one column.
\twocolumn
This is two columns.
\onecolumn
Back to one column.
\end{document}Both \twocolumn and \onecolumn force a page break.
3. multicol package (no page break)
\usepackage{multicol}
\begin{document}
Single column intro paragraph.
\begin{multicols}{2}
This text wraps across two columns mid-page,
without a page break. Useful for short
two-column blocks like a bullet list of items
or a quote section.
\end{multicols}
Back to single column.
\end{document}Spanning both columns (figures and tables)
% In a twocolumn document
\begin{figure*}[t] % * makes it span both columns
\centering
\includegraphics[width=\textwidth]{wide-figure.png}
\caption{A wide figure spanning both columns.}
\end{figure*}
\begin{table*} % wide table
\caption{...}
\begin{tabular}{...}
...
\end{tabular}
\end{table*}
\begin{equation*} % wide equation (rare)
...
\end{equation*}Single-column header in two-column body
% Common pattern: title block spans both columns
\twocolumn[
\begin{@twocolumnfalse}
\maketitle
\begin{abstract}
Single-column abstract...
\end{abstract}
\end{@twocolumnfalse}
]
% Body text follows in two columnsCustomize column gap and rule
\setlength{\columnsep}{1cm} % horizontal gap between columns
\setlength{\columnseprule}{0.4pt} % vertical rule between columns
\renewcommand{\columnseprulecolor}{\color{black}} % rule colorCommon mistakes
- Forgetting the
*for wide floats.\begin{figure}in two-column mode stays in one column. Use\begin{figure*}to span both. - Putting
\onecolumnright before bibliography. Causes a page break. If you want bibliography in two columns, leave it as-is. - multicol and floats. Floats (
figure,table) don't work insidemulticols— use plain images and captions, or pull the float out. - Imbalanced last page. Default is balanced; if you want unbalanced, use
\flushcolumnsor pass option to multicol.
#set page(columns: 2) // whole document
#set page(columns: 2, gutter: 1cm) // with custom gap
// Span both columns:
#place(top, scope: "parent", float: true, [Wide figure here])Try TypeTeX free Frequently Asked Questions
Pass twocolumn as a document class option: \documentclass[twocolumn]{article}. The entire document renders in two columns. Most IEEE and conference templates set this automatically.
Use \twocolumn or \onecolumn to switch. Both force a page break and start the new layout from the next page. Use this for things like a single-column abstract followed by two-column body. Or switch back to single-column for a bibliography.
Use the multicol package: \usepackage{multicol} \begin{multicols}{2} ... \end{multicols}. The {2} is the number of columns. Doesn't force a page break. Allows 2, 3, 4+ columns for the wrapped content. Mid-paragraph columns balance automatically.
Use \twocolumn[\maketitle] for a single-column header (like the title block in IEEE). For mid-document: \onecolumn ... \twocolumn. Or wrap content in a figure* / table* float environment — the * means 'span both columns'.
Use figure* (with the asterisk): \begin{figure*}[t] \centering \includegraphics{wide.png} \caption{...} \end{figure*}. Same for table* and equation*. The * variant spans the page width instead of one column.
By default multicol balances columns automatically (so they end at roughly the same height). To disable: pass [unbalanced] to the environment. To force a column break: \columnbreak inside the multicols environment.
twocolumn is at the document/page level — entire pages are two-column. multicol works inline — wrap a paragraph in multicols and only that paragraph is multi-column. multicol is more flexible; twocolumn is required by IEEE/conference templates.
With multicol: \setlength{\columnseprule}{0.4pt} adds a vertical line. \setlength{\columnsep}{1cm} controls horizontal space between columns. Same commands work in twocolumn mode.
Equations don't break across columns by default. Use the multline or split environment for a long equation that needs to span multiple lines, OR use figure*/equation* to span both columns. Or shrink the equation with \resizebox or smaller display size.