Ich schreibe eine auf basierende Klasse , die (die das Inhaltsverzeichnis innerhalb des Inhaltsverzeichnisses auflistet) und (die das Inhaltsverzeichnis nicht innerhalb des Inhaltsverzeichnisses auflistet) memoir
bereitstellt .\tableofcontents
\tableofcontents*
Ich habe gesehendiese Frageund seine vielen Duplikate, aber ich möchte verhindern, dass das Inhaltsverzeichnis selbst im Inhaltsverzeichnis aufgeführt wird, unabhängig von der Wahl des Benutzers\tableofcontents*
Vergleiche \tableofcontents
.
Basierend auf dem memoir
Handbuch (Abschnitt 9.2) verwende ich etoolbox
derzeit
\pretocmd{\tableofcontents}{\begin{KeepFromToc}}{}{<class warning omitted>}
\apptocmd{\tableofcontents}{\end{KeepFromToc}}{}{<class warning omitted>}
das funktioniert wie erwartet (sowohl die mit Sternchen markierte als auch die nicht mit Sternchen markierte Variante schreibt keinen Inhaltsverzeichniseintrag).
Ist dies eine empfohlene Vorgehensweise? Hat diese Methode irgendwelche negativen Nebenwirkungen, an die ich nicht gedacht habe?
Hier ist ein MWE für alle Tests, die Sie möglicherweise durchführen möchten:
\documentclass{memoir}
\usepackage{etoolbox}
\pretocmd{\tableofcontents}{\begin{KeepFromToc}}{}{}
\apptocmd{\tableofcontents}{\end{KeepFromToc}}{}{}
\begin{document}
\tableofcontents
\chapter{Test Chapter}
\section{Test Section}
\end{document}
Antwort1
Der \tableofcontents
Befehl ist definiert als
> \tableofcontents=macro:
->\@ifstar {\@nameuse {mem@tableofcontents}{01}}{\@nameuse {mem@tableofcontents}{00}}.
Ich musste verwenden \show\tableofcontents
, da die Definition indirekt ist, über
\newlistof{tableofcontents}{toc}{\contentsname}
Daher
\makeatletter
\renewcommand{\tableofcontents}{%
\@ifstar{\mem@tableofcontents{01}}
{\mem@tableofcontents{01}}%
}
\makeatother
wird tun.
Vollständiges Beispiel:
\documentclass{memoir}
\makeatletter
\renewcommand{\tableofcontents}{%
\@ifstar{\mem@tableofcontents{01}}
{\mem@tableofcontents{01}}%
}
\makeatother
\begin{document}
\tableofcontents
\chapter{Test Chapter}
\section{Test Section}
\end{document}
Mit \tableofcontents*
ihm wäre es das Gleiche.
Antwort2
Ohne das etoolbox
Paket können Sie Folgendes tun:
\documentclass{memoir}
\makeatletter
\let\oldtableofcontents\tableofcontents
\def\tableofcontents{\@ifstar{\oldtableofcontents*}{\oldtableofcontents*}}
\makeatother
\begin{document}
\tableofcontents
\chapter{Test Chapter}
\section{Test Section}
\end{document}
(natürlich .cls
brauchen Sie in Ihrer Datei kein \makeatletter
, \makeatother
).