4

How to make a table of contents like this? I tried minitoc but the output is completely different, also, I can't find commands to make my table of contents like this. For example, removing the section number, removing the dots between the page number and the section name. enter image description here

\documentclass[a4paper,10pt]{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[margin=1in]{geometry}
\usepackage{palatino}
\usepackage{multicol}
\usepackage{minitoc}

\begin{document}
\dominitoc
\nomtcrule
\tableofcontents
\chapter{Introduction}
\begin{multicols}{2}
\minitoc
test
\vfill
\columnbreak
test2
\end{multicols}
\section{blubb}

\section{foo}
\end{document}
2
  • Take a look at etoc. It gives you complete control.
    – cfr
    Sep 25, 2016 at 22:32
  • This is sufficiently different from any normal table of contents that you might consider writing a custom macro. OTOH, creating a table of contents is a three step process. First each chapter, section and subsection writes an entry into the aux file. The next time \tableofcontents runs it creates the toc file. Finally the toc file is used to create the actual table of contents. Sep 25, 2016 at 22:33

1 Answer 1

4

Here's an example using etoc. It is designed to keep the \localtableofcontents local to where it is issued via \begingroup and \endgroup. I also put the option twocolumn in the \documentclass call for the convenience of this example, not because I think you necessarily should construct your document that way.

The key command in all of this is \etocsetstyle, which takes five mandatory arguments. (See §.4.1 in the manual.)

\documentclass[twocolumn, a4paper,10pt, openany]{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[margin=1in]{geometry}
\usepackage{palatino}
\usepackage{etoc, soul, lipsum}

\newcommand\mylocaltableofcontents{%
\begingroup
\etocsettocstyle{\par\noindent \large \contentsname \par\nobreak\bigskip}{}
\renewcommand*{\contentsname}{\ul{Contents}}
\setcounter{secnumdepth}{2}
\etocsettocdepth{2}

\etocsetstyle{section}
{\par\noindent}
{\normalsize\rmfamily}
{\etocname{} \quad \etocpage}
{\par\noindent}

\etocsetstyle{subsection}
{\par\noindent}
{\normalfont\hspace*{2em}}
{\parbox{\dimexpr\linewidth - 2em\relax}{\etocname{} \quad~\etocpage}}
{\par\noindent}

\localtableofcontents
\endgroup
}

\begin{document}
\tableofcontents

\chapter{Introduction}
\section{Baz}
\subsection{Bar}
\subsubsection{Foo}
\section{Baz}
\subsection{How to make a table of contents like this? I tried minitoc
  but the output is completely different, also, I can't find commands
  to make my table of contents like this.}
\subsubsection{Foo}
\section{Baz}
\subsection{Bar}
\subsubsection{Foo}
\section{Baz}
\subsection{Bar}
\subsubsection{Foo}

\lipsum

\chapter{Introduction}

\mylocaltableofcontents

\section{Baz}
\subsection{Bar}
\subsubsection{Foo}
\section{Baz}
\subsection{How to make a table of contents like this? I tried minitoc
  but the output is completely different, also, I can't find commands
  to make my table of contents like this.}
\subsubsection{Foo}
\section{Baz}
\subsection{Bar}
\subsubsection{Foo}
\section{Baz}
\subsection{Bar}
\subsubsection{Foo}

\lipsum

\chapter{Introduction}

\localtableofcontents

\section{Baz}
\subsection{Bar}
\subsubsection{Foo}
\section{Baz}
\subsection{How to make a table of contents like this? I tried minitoc
  but the output is completely different, also, I can't find commands
  to make my table of contents like this.}
\subsubsection{Foo}
\section{Baz}
\subsection{Bar}
\subsubsection{Foo}
\section{Baz}
\subsection{Bar}
\subsubsection{Foo}

\lipsum

\end{document}

The result looks like this (nothing else is customized):

etoc image

6
  • 1
    you can use \etocsetnexttocdepth{2} because \etocsettocdepth{2} is like \setcounter{tocdepth}{2} hence has permanent effect (even within \begingroup...\endgroup). And hyperref looks at value of tocdepth counter for the pdf bookmarks. Hence with \etocsetnexttocdepth{2} or \etocsetnexttocdepth{subsection} you are sure not to impact hyperref.
    – user4686
    Sep 26, 2016 at 6:56
  • 1
    the problem with using a \parbox is that you will have uneven line spacing depending on presence of descenders in last line inside the parbox (or first line should always have big letter anyhow). You can do things like storing the \prevdepth after a final \par inside the \parbox, and reassigning it after the \parbox... but if that looks scary you can also simply use \leftskip technique (like actually LaTeX's own code does for its tables of contents). Or simply perhaps add a bit more vertical space before and after the \parbox (it is "centered" as you did not use [t] or [b]).
    – user4686
    Sep 26, 2016 at 7:02
  • I get "Package multicol Warning: May not work with the twocolumn option on input line 150." if I put the option twocolumn in the \documentclass call, How to solve this problem?
    – fairytale
    Sep 26, 2016 at 8:05
  • Forget to say, I removed everything about multicol package but I still get this "Package multicol Warning".
    – fairytale
    Sep 26, 2016 at 8:43
  • @jfbu -- Will edit. First real time using package ... always mean to try it out, but never seem to get around to it. This question was the spur since it seemed like a fairly simple request. etoc provides a lot of commands..!
    – jon
    Sep 26, 2016 at 17:45

You must log in to answer this question.

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