152

I want to display my article's abstract and table of contents side-by-side, to save space. I'm using the multicol package, but it tries to keep each column the same height, and I can't figure out how to force it to move content into the second column.

Here's a mockup; I'm just padding out the abstract to show what it should look like. The layout is perfect, I just want a way to do this properly:

\usepackage{multicol}
\begin{document}
\maketitle

\begin{multicols}{2}
\section*{Abstract}

\lipsum[1-2]

a % padding to make the first column run to
  % end of page
a

a

a

a

a

a

a

a

a

a

a

a

\tableofcontents
\end{multicols}

And here's what it looks like, rendered (perfect except for the padding lines):

Result

1
  • 1
    I fixed the image in your post. Please only use the official interface to upload images (e.g. CTRL+G), otherwise they might break after a while. Jul 22, 2011 at 9:56

3 Answers 3

155
  • Put \vfill\null after the last line to break.
  • And then put \columnbreak after \vfill\null.

alt text

\documentclass{article}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage{lipsum,multicol}
\usepackage[colorlinks]{hyperref}
\title{Introduction to \LaTeX}
\author{xport}
\begin{document}

\begin{multicols}{2}
\maketitle
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section*{Abstract}
\lipsum[1-2]
\vfill\null
\columnbreak
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\tableofcontents
%\vfill\null
%\columnbreak
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Counter}
\lipsum[1]
\section{Box}
\lipsum[1]
\subsection{Parbox}
\lipsum[1]
\subsection{Rule}
\lipsum[1]
\end{multicols}
\end{document}
4
  • 1
    You can move the \maketitle to any line before \begin{multicols} (of course after \begin{document}) to match your preference.
    – xport
    Jan 11, 2011 at 6:00
  • 1
    I am getting a compilation error for using \columnbreak, but placing only \vfill after the last line before the column break seems to work just fine. Apr 9, 2014 at 7:39
  • 5
    Due to a change in multicols, you should use \vspace*{\fill} or \vfill\null instead of \vfill. Nov 14, 2016 at 14:01
  • What's the purpose of \null?
    – Paul Wintz
    Jun 22, 2021 at 9:23
46

If you are not using the multicols package you can insert a column break by adding the following:

\vfill\eject
2
  • 11
    ...or issue a \vfill\break.
    – Werner
    Nov 12, 2011 at 7:30
  • 1
    In my specific case, just doing \vfillresulted in desired layout
    – Ben Usman
    Nov 21, 2016 at 8:42
30

The command, appropriately enough, is \columnbreak.

If you want to turn off columns being forced to equal height, use the starred version \begin{multicols*}{2}.

3
  • 1
    I think we need \vfill before \columnbreak.
    – xport
    Jan 11, 2011 at 5:45
  • 21
    You changed your code after I posted, and it was hard to tell what needed to be done with the old code. You only need \vfill if you want to avoid rubber spacing filling in the extra space. You can turn that off globally with \raggedcolumns -- I'd prefer that to \vfill.
    – frabjous
    Jan 11, 2011 at 17:48
  • 3
    @frabjous from all the responses here \raggedcolumns was the one finally solving this problem I've been having for months. Too bad I'm usually too impatient to read through all the comments on all the replies... Sep 21, 2016 at 7:30

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.