117

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

  • 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. – Martin Scharrer Jul 22 '11 at 9:56
114
  • 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}
  • You can move the \maketitle to any line before \begin{multicols} (of course after \begin{document}) to match your preference. – xport Jan 11 '11 at 6:00
  • 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. – O. R. Mapper Apr 9 '14 at 7:39
  • 3
    Due to a change in multicols, you should use \vspace*{\fill} or \vfill\null instead of \vfill. – John Kormylo Nov 14 '16 at 14:01
32

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

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

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}.

  • I think we need \vfill before \columnbreak. – xport Jan 11 '11 at 5:45
  • 19
    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 '11 at 17:48
  • 1
    @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... – Andrei Poehlmann Sep 21 '16 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.