Amsbook class + two tables of contents
There are a few things to change in \starttoc
to make it compatible with amsbook
:
- we want to avoid that it writes an entry in the table of contents, which
\chapter*
normally does inamsbook
; - we don't want that it takes the initiative to set the headers, because
amsbook
takes care of the business anyway.
\documentclass{amsbook}
\usepackage{shorttoc}
\makeatletter
\renewcommand\shorttoc[2]{%
\begingroup
\c@tocdepth=#2\relax
\@restonecolfalse
\if@tightshtoc
\parsep\z@
\fi
\if@twocolumn\@restonecoltrue\onecolumn\fi
\renewcommand\@tocwriteb[3]{}%
\chapter*{#1}%
\@startshorttoc{toc}\if@restonecol\twocolumn\fi
\endgroup
}
\makeatother
\title{Title}
\begin{document}
\maketitle
\shorttoc{Contents}{1}
\setcounter{tocdepth}{3}
\renewcommand*\contentsname{Contents (detailed)}
\tableofcontents
\chapter{Chapter}
\section{Section}
\subsection{Subsection}
\subsubsection{Subsubsection}
Some subsubsection text
\end{document}
The redefinition of \shorttoc
is essentially the same as in the package, but
\@tocwriteb
is (locally) disabled in order not to produce a TOC entry\chapter*{#1}
does not issue\@mkboth
.
Short contents
Detailed contents
Below I define \firstToC
to print the first Table of Contents and \secondToC
to print the second one. The first one turns off overwriting of the .toc
(setting \@fileswfalse
, locally). The second removes the printing of the ToC within the ToC (again, locally).
\documentclass{amsbook}
\makeatletter
\newcommand{\firstToC}{{%
\@fileswfalse% Don't overwrite the current ToC
\@starttoc{toc}\contentsname
}}
\newcommand{\secondToC}{{%
\renewcommand{\@tocwrite}[2]{}% Don't write ToC to ToC
\renewcommand{\contentsname}{Contents (detailed)}%
\@starttoc{toc}{\contentsname}%
}}
\makeatother
\begin{document}
\setcounter{tocdepth}{1}%
\firstToC
\setcounter{tocdepth}{3}%
\secondToC
\chapter{Chapter}
\section{Section}
\subsection{Subsection}
\subsubsection{Subsubsection}
Lorem ipsum\ldots
\end{document}