¿Cómo hacer que el \tableofcontents de las memorias se comporte como \tableofcontents* destacado de forma predeterminada?

¿Cómo hacer que el \tableofcontents de las memorias se comporte como \tableofcontents* destacado de forma predeterminada?

Estoy escribiendo una clase basada en memoir, que proporciona \tableofcontents(que enumera el ToC dentro del ToC) y \tableofcontents*(que no enumera el ToC dentro del ToC).

He vistoesta preguntay sus muchos duplicados, pero quiero evitar que la Tabla de Contenidos aparezca en la Tabla de Contenidos independientemente de la elección del usuario\tableofcontents* vs. \tableofcontents.

Basado en el memoirmanual (Sección 9.2), estoy usando actualmente etoolboxpara hacer

\pretocmd{\tableofcontents}{\begin{KeepFromToc}}{}{<class warning omitted>}
\apptocmd{\tableofcontents}{\end{KeepFromToc}}{}{<class warning omitted>}

que funciona como se esperaba (tanto las variantes destacadas como las no destacadas no escriben una entrada de ToC).

¿Es esta una forma recomendada de hacer esto? ¿Este método tiene algún efecto secundario negativo en el que no haya pensado?

Aquí hay un MWE para cualquier prueba que desee realizar:

\documentclass{memoir}
\usepackage{etoolbox}

\pretocmd{\tableofcontents}{\begin{KeepFromToc}}{}{}
\apptocmd{\tableofcontents}{\end{KeepFromToc}}{}{}

\begin{document}

\tableofcontents   
\chapter{Test Chapter}
\section{Test Section}

\end{document}

Respuesta1

El \tableofcontentscomando se define como

> \tableofcontents=macro:
->\@ifstar {\@nameuse {mem@tableofcontents}{01}}{\@nameuse {mem@tableofcontents}{00}}.

Tuve que usar \show\tableofcontents, porque la definición es indirecta, vía

\newlistof{tableofcontents}{toc}{\contentsname}

De este modo

\makeatletter
\renewcommand{\tableofcontents}{%
  \@ifstar{\mem@tableofcontents{01}}
          {\mem@tableofcontents{01}}%
}
\makeatother

servirá.

Ejemplo completo:

\documentclass{memoir}
\makeatletter
\renewcommand{\tableofcontents}{%
  \@ifstar{\mem@tableofcontents{01}}
          {\mem@tableofcontents{01}}%
}
\makeatother

\begin{document}

\tableofcontents
\chapter{Test Chapter}
\section{Test Section}

\end{document}

Con \tableofcontents*él sería lo mismo.

Respuesta2

Sin el etoolboxpaquete, puedes hacer algo como esto:

\documentclass{memoir}

\makeatletter
\let\oldtableofcontents\tableofcontents
\def\tableofcontents{\@ifstar{\oldtableofcontents*}{\oldtableofcontents*}}
\makeatother

\begin{document}

\tableofcontents  
\chapter{Test Chapter}
\section{Test Section}

\end{document}

(por supuesto, en su .clsarchivo no necesita \makeatletter, \makeatother).

información relacionada