171

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. Commented Jul 22, 2011 at 9:56

4 Answers 4

180
  • 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. Commented 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. Commented Apr 9, 2014 at 7:39
  • 5
    Due to a change in multicols, you should use \vspace*{\fill} or \vfill\null instead of \vfill. Commented Nov 14, 2016 at 14:01
  • 2
    What's the purpose of \null?
    – Paul Wintz
    Commented Jun 22, 2021 at 9:23
56

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

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

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

5
  • 1
    I think we need \vfill before \columnbreak. Commented 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
    Commented 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... Commented Sep 21, 2016 at 7:30
  • Is there a way to force new column for new chapters ?
    – CasperYC
    Commented Feb 29 at 5:35
  • @CasperYC I'm sure there is, but the mystery isn't how you do it, it's how you got it not to do it in the first place, as in most document classes that would already be default behavior. Consider posting a new question with some minimal code that shows the problem.
    – frabjous
    Commented Mar 1 at 15:49
0

You can also try paracol package where you can use \switchcolumn to break pages.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .