How do you make two columns page and document in LaTeX?

Many times we need to divide the entire document or page or part of page into more than one column. Most popular of these is two columns page layout.

There are some practical reasons for this, such as placing float elements side by side, in which case you will need a two columns section. Also, Maximum Professional uses two column page layout while writing CV. And it is needed when writing a book.

Why only two? You can split into more than two layouts. But, in this tutorial I will discuss in depth how to split the two columns.

Two column layout is created in five ways

In LaTeX, there are several ways to create a two-column layout depending on your requirements.

1. Use twocolumn option

But, most common method here is to use twocolumn optional argument with document class.

\documentclass[twocolumn]{article}

If you see the example given below, your concept will be more clear.

\documentclass[a4paper,11pt,twocolumn]{article}
\usepackage{lipsum} % for generating dummy text
\usepackage[margin=1.5cm,top=.5cm]{geometry} % for setting margins
\title{Physics is a very beautiful subject}
\author{Md Jidan Mondal\\[2pt] \textbf{physicsread.com}}
\date{}
\begin{document}
\maketitle
\lipsum[2-3] 

\section*{Newton's 1st Law}
\lipsum[4-5] 

\section*{Momentum}
\lipsum[6-7] 

\section*{Relation b/w force and momentum}
\lipsum[8-9] 

\end{document}

Output :

In this case, changing layout will be applicable to the entire document. It is also possible if you revert back to single page layout as discussed later.

2. Use multicol package

multicol package provides a multicols environment, which offers more flexibility. You can specify the number of columns. That is, need to pass column number with environment. In this case two are required, so 2 will pass.

And it balances column lengths more gracefully than twocolumn option.

\documentclass[a4paper,11pt]{article}
\usepackage{multicol,lipsum}
\usepackage[margin=1.5cm,top=1cm]{geometry}
\title{Twocols Layout by multicol Pkg}
\author{Physiscraed}
\date{\today}
\begin{document}
\maketitle
\begin{multicols}{2}
\lipsum[1-8]
\end{multicols}
\end{document}

Output :

3. Minipage Environment

If you want to create two columns in a portion of your page (and not necessarily have the columns span entire page), you can use the minipage environment.

\documentclass[a4paper,11pt]{article}
\usepackage[margin=1.5cm]{geometry}
\usepackage{lipsum}
\title{Twocols Layout by minipage evn}
\author{physiscraed.com}
\date{\today}
\begin{document}
\maketitle

\noindent\begin{minipage}{0.5\textwidth}
 \lipsum[3]
\end{minipage}
\begin{minipage}{0.5\textwidth}
 \lipsum[3]
\end{minipage}
\vspace{1cm}

\lipsum[2]
\end{document}

Output :

4. Parcolumns Package

This package provides a way to typeset columns in parallel, which is useful especially when you want to have synchronized content side by side (like translations).

\documentclass[a4paper,11pt]{article}
\usepackage{parcolumns,lipsum}
\usepackage[margin=1.5cm]{geometry}
\begin{document}
\lipsum[1]
\vspace{1cm}
\begin{parcolumns}{2}
 \colchunk{\lipsum[1]}
 \colchunk{\lipsum[1]}
\end{parcolumns}
\vspace{1cm}
\lipsum[1]
\end{document}

Output :

5. Tables for Columns

While not a conventional method for creating columns of text, it’s possible to use tables (specifically the tabular environment) to organize content in a two-column style.

\documentclass[11pt]{article}
\usepackage{lipsum}
\usepackage[margin=1.5cm]{geometry}
\begin{document}
\lipsum[1][1-6]

\vspace{1cm}

\noindent\begin{tabular}{ p{0.49\textwidth} p{0.49\textwidth} }
\lipsum[1] & \lipsum[2] 
\end{tabular}

\vspace{1cm}

\lipsum[2][1-6]
\end{document}

Output :

Column Breaks

With twocolumn option, you can use \newpage or \pagebreak command to break and move to next column.

\documentclass[11pt,twocolumn]{article}
\usepackage[margin=1.5cm]{geometry}
\usepackage{lipsum}
\begin{document}
\lipsum[1-3]
\newpage
\section*{Start new column}
\lipsum[4-6]
\end{document}

Output :

However, note that using \newpage or \pagebreak with this option will jump to next column if you’re in first column, or to the top of next page if you’re in second column.

With multicol package, you can use \columnbreak command to forcefully move to next column within multicols environment.

\documentclass[a4paper,11pt]{article}
\usepackage{multicol,lipsum}
\usepackage[margin=1.5cm,top=1cm]{geometry}
\begin{document}
\begin{multicols}{2}
\lipsum[1-2]

\columnbreak

\lipsum[2-3]
\end{multicols}
\end{document}

Output :

Column separation by space

To add column separation (i.e., space between columns) in document, you typically adjust \columnsep length. And you can modify \columnsep value with \setlength command.

\documentclass[11pt,twocolumn]{article}
\usepackage[margin=1.5cm]{geometry}
\setlength{\columnsep}{30pt}  % Adjust the value as required
\usepackage{lipsum}  % for dummy text
\begin{document}
\lipsum[1-6]
\end{document}

Output :

Same method for multicol package. You can decrease or increase space using same command and length. Also, it can be used separately with environment.

documentclass[11pt]{article}
\usepackage{multicol,lipsum}
\usepackage[margin=1cm]{geometry}
\begin{document}
\lipsum[1][1-5]

\begin{multicols}{2}[\columnsep=1cm]
 \lipsum[1-2]
\end{multicols}

\textbf{\lipsum[2][1-5]}

 \begin{multicols}{2}[\columnsep=2cm]
 \lipsum[1-2]
\end{multicols}

\end{document}

Output :

For minipage, column separation isn’t a native concept, since you’re essentially putting boxes (minipages) side by side. And separation between these boxes is simply space or commands you place between minipage environments.

If you want to control separation, you can adjust width of minipages or add horizontal spacing using \hspace.

\documentclass[11pt]{article}
\usepackage{lipsum}  % for dummy text
\usepackage[margin=1.5cm]{geometry}
\begin{document}

\noindent\begin{minipage}{0.49\textwidth}
\lipsum[1]
\end{minipage}
\hspace{0.02\textwidth}  
\begin{minipage}{0.49\textwidth}
\lipsum[1]
\end{minipage}

\vspace{1cm}

\textbf{\lipsum[1][1-4]}

\vspace{1cm}
\noindent\begin{minipage}{0.48\textwidth}
\lipsum[1]
\end{minipage}
\hspace{0.04\textwidth}  
\begin{minipage}{0.48\textwidth}
\lipsum[1]
\end{minipage}

\end{document}

Output :

Column separation by vertical line

Adding a vertical line between columns can be useful for visually separating content. you can utilize \setlength{\columnseprule}{} command, which defines a rule of width between columns.

\documentclass[11pt,twocolumn]{article}
\usepackage{lipsum}
\usepackage[margin=1.5cm]{geometry}
\setlength{\columnsep}{20px}
\setlength{\columnseprule}{0.4pt}  % Thickness of the vertical line
\begin{document}
\lipsum[1]

\vspace{1cm}

\lipsum[2-8]
\end{document}

Output :

Column Balance

Balancing means ensuring that the content in each column is of approximately equal length, especially on last page of a multi-column section. Let’s explore how you can balance:

For twocolumn option

By default, twocolumn option does not balance columns on the last page, one column might end up being significantly shorter than the other. If you wish to balance columns, you will typically need an external package like cuted or balance. balance package is more popular for this purpose.

\documentclass[11pt,twocolumn]{article}
\usepackage{balance,lipsum}
\usepackage[margin=1.5cm]{geometry}
\begin{document}
\balance
\lipsum[1-6]
\end{document}

Output :

On the other hand, automatically balances columns on last page of multicols environment. This is one of its major advantages. However, if for some reason you don’t want columns to be balanced, you can use * variant of environment like multicols*.

Md Jidan Mondal

LaTeX expert with over 10 years of experience in document preparation and typesetting. Specializes in creating professional documents, reports, and presentations using LaTeX.

Leave a Comment

Your email address will not be published. Required fields are marked *