Wie kann man dafür sorgen, dass sich das Inhaltsverzeichnis von Memoiren standardmäßig wie mit Sternchen versehene Inhaltsverzeichnisse* verhält?

Wie kann man dafür sorgen, dass sich das Inhaltsverzeichnis von Memoiren standardmäßig wie mit Sternchen versehene Inhaltsverzeichnisse* verhält?

Ich schreibe eine auf basierende Klasse , die (die das Inhaltsverzeichnis innerhalb des Inhaltsverzeichnisses auflistet) und (die das Inhaltsverzeichnis nicht innerhalb des Inhaltsverzeichnisses auflistet) memoirbereitstellt .\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 memoirHandbuch (Abschnitt 9.2) verwende ich etoolboxderzeit

\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 \tableofcontentsBefehl 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 etoolboxPaket 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 .clsbrauchen Sie in Ihrer Datei kein \makeatletter, \makeatother).

verwandte Informationen