[Tex/LaTex] How to generate a list of appendices, separate from the table of contents (ToC)

appendicestable of contents

LaTeX's appendix environment formats sections differently and uses a different enumeration in the table of contents:

\begin{appendix}
 \section{superuser}
 \dots{}
....

Shows up as

      A       superuser            11

in the \tableofcontents.

Unfortunately, I have to use a different style: the appendix is not to show up in the table of contents, but in a separate listing right before the appendix.

I see the following options to solve this:

  • suppress output in tableofcontents and somehow recreate the part on a different page
  • generate a custom listing of specified / the following section
  • manually create a list with the same formatting as the table of contents

I use scrartcl as document class.

Best Answer

A somewhat hackish way to get a list of appendices in scrartcl is to add the following at the start of the appendix:

\appendix
% Set the name for the list of appenices
\newcommand\listoftoaname{Appendices}

% force table of contents to load the list of appendices
\let\oldlistoftoc\listoftoc
\renewcommand\listoftoc[1]{\oldlistoftoc{toa}}
\tableofcontents
\let\listoftoc\oldlistoftoc  

% we will now redefine the sectioning commands so that that put entries
% into the list of appendices. The redefinitions are rather simplistic
% and break the starred versions and the optional argument.
% Thus the redefinitions have to be added after the \tableofcontents call.

\let\oldaddcontentsline\addcontentsline
\newcommand\hackedaddcontentsline[3]{\oldaddcontentsline{toa}{#2}{#3}}

\let\oldsection\section
\renewcommand*\section[1]{%
  \let\addcontentsline\hackedaddcontentsline%
  \oldsection{#1}%
  \let\addcontentsline\oldaddcontentsline%
}
\let\oldsubsection\subsection
\renewcommand*\subsection[1]{%
  \let\addcontentsline\hackedaddcontentsline%
  \oldsubsection{#1}%
  \let\addcontentsline\oldaddcontentsline%
}
\let\oldsubsubsection\subsubsection
\renewcommand*\subsubsection[1]{%
  \let\addcontentsline\hackedaddcontentsline%
  \oldsubsubsection{#1}%
  \let\addcontentsline\oldaddcontentsline%
}

For scrreprt and scrbook, you need to add an analogous redefinition for \chapter. As the redefinition of the sectioning commands are rather simplistic, they break the starred versions and the optional argument. Thus before any starred sections (like the bibliography), you should revert the redefinitions with \let\section\oldsection.

Related Question