Estou escrevendo uma classe baseada em memoir
, que fornece \tableofcontents
(que lista o ToC dentro do ToC) e \tableofcontents*
(que não lista o ToC dentro do ToC).
Eu tenho vistoessa questãoe suas muitas duplicatas, mas quero evitar que o Índice seja listado no Índice, independentemente da escolha do usuário.\tableofcontents*
vs. \tableofcontents
.
Com base no memoir
manual (Seção 9.2), estou usando atualmente etoolbox
para fazer
\pretocmd{\tableofcontents}{\begin{KeepFromToc}}{}{<class warning omitted>}
\apptocmd{\tableofcontents}{\end{KeepFromToc}}{}{<class warning omitted>}
que funciona conforme o esperado (tanto as variantes com estrela quanto as sem estrela não escrevem uma entrada de ToC).
Esta é uma maneira recomendada de fazer isso? Este método tem algum efeito colateral ruim que eu não tenha pensado?
Aqui está um MWE para qualquer teste que você queira fazer:
\documentclass{memoir}
\usepackage{etoolbox}
\pretocmd{\tableofcontents}{\begin{KeepFromToc}}{}{}
\apptocmd{\tableofcontents}{\end{KeepFromToc}}{}{}
\begin{document}
\tableofcontents
\chapter{Test Chapter}
\section{Test Section}
\end{document}
Responder1
O \tableofcontents
comando é definido como
> \tableofcontents=macro:
->\@ifstar {\@nameuse {mem@tableofcontents}{01}}{\@nameuse {mem@tableofcontents}{00}}.
Tive que usar \show\tableofcontents
, porque a definição é indireta, via
\newlistof{tableofcontents}{toc}{\contentsname}
Por isso
\makeatletter
\renewcommand{\tableofcontents}{%
\@ifstar{\mem@tableofcontents{01}}
{\mem@tableofcontents{01}}%
}
\makeatother
vai fazer.
Exemplo 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}
Com \tableofcontents*
isso seria a mesma coisa.
Responder2
Sem o etoolbox
pacote, você pode fazer algo assim:
\documentclass{memoir}
\makeatletter
\let\oldtableofcontents\tableofcontents
\def\tableofcontents{\@ifstar{\oldtableofcontents*}{\oldtableofcontents*}}
\makeatother
\begin{document}
\tableofcontents
\chapter{Test Chapter}
\section{Test Section}
\end{document}
(claro, no seu .cls
arquivo você não precisa de \makeatletter
, \makeatother
).