1

I use the following to split the table of contents into two colums, so that it will fit on one page:

\begin{multicols*}{2}
  \tableofcontents
\end{multicols*}

However, the result is the following. The second column starts at the top of the page, to the right of the "Contents" heading. I would prefer it if the second column would start at exactly the same height as the first column instead.

If while doing this the opportunity arises, it would be even better if the chapter groups were not split across the columns. In the image, that would result in chapter 6 being moved to the second column entirely rather than having the beginning on the first column and the continuation on the second.

Table of contents page

1
  • Welcome to TeX.SX! Please help us help you by providing a minimal working example (MWE) to demonstrate your problem.
    – TeXnician
    Sep 1, 2017 at 4:59

1 Answer 1

3

What you are trying to achieve can be done in at least two ways.

The appearances will vary slightly depending on the inter-element spaces. But basically they remain the same.


Method 1: Without Using multicols

\documentclass{book}

\makeatletter
\renewcommand\tableofcontents{%
  \twocolumn[%
  \begin{@twocolumnfalse}
    \chapter*{\contentsname
      \@mkboth{%
        \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}
  \end{@twocolumnfalse}]%
  \@starttoc{toc}
  \onecolumn}
\makeatother

\usepackage{lipsum}

\begin{document}

\tableofcontents

\chapter{Introduction}

\lipsum[1-50]

\section{Research domain}

\section{Another section}

\subsection{And a subsection}

\chapter{Literature Study}

\section{Section Alpha}
\section{Section Beta}
\section{Section Gamma}
\section{Section Delta}
\section{Section Epsilon}
\section{Section Zeta}

\chapter{More Chapter Alpha}
\section{Section Alpha}
\section{Section Beta}
\section{Section Gamma}
\section{Section Delta}
\section{Section Epsilon}
\section{Section Zeta}

\chapter{More Chapter Beta}
\section{Section Alpha}
\section{Section Beta}
\section{Section Gamma}
\section{Section Delta}
\section{Section Epsilon}
\section{Section Zeta}


\chapter{More Chapter Gamma}
\section{Section Alpha}
\section{Section Beta}
\section{Section Gamma}
\section{Section Delta}
\section{Section Epsilon}
\section{Section Zeta}

\chapter{More Chapter Delta}
\section{Section Alpha}
\section{Section Beta}
\section{Section Gamma}
\section{Section Delta}
\section{Section Epsilon}
\section{Section Zeta}


\chapter{More Chapter Epsilon}
\section{Section Alpha}
\section{Section Beta}
\section{Section Gamma}
\section{Section Delta}
\section{Section Epsilon}
\section{Section Zeta}

\chapter{Conclusion}

\chapter{References}

\appendix

\chapter{Code Listings}

\end{document}

Method 2: Using multicols

\documentclass{book}

\usepackage{multicol}

\begin{document}

\makeatletter
\chapter*{\contentsname
  \@mkboth{%
    \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}
\begin{multicols*}{2}
  \@starttoc{toc}
\end{multicols*}
\makeatother


\chapter{Introduction}
 
.........................


\appendix

\chapter{Code Listings}

\end{document}

enter image description here


How are These Done?

The basic principle over here is to put the \contentsname in one column and actual contents in two column. Then switch back to single column for main text. To actually achieve the effects, we hack into the internals of the \tableofcontents command.

The \twocolumn command before the text will split it into two columns. The problem is, \twocolumn starts a new page. Fortunately, it has an optional argument which lets you specify one column content before two column content. See TeX FAQ for details.

In the second method, we put the \contentsname as usual and then put the actual contents in two column using {multicols*}{2}.

You must log in to answer this question.

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