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 memoir
manual (Sección 9.2), estoy usando actualmente etoolbox
para 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 \tableofcontents
comando 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 etoolbox
paquete, 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 .cls
archivo no necesita \makeatletter
, \makeatother
).