Как сделать так, чтобы \tableofcontents мемуаров по умолчанию вели себя как помеченные звездочкой \tableofcontents*?

Как сделать так, чтобы \tableofcontents мемуаров по умолчанию вели себя как помеченные звездочкой \tableofcontents*?

Я пишу класс на основе memoir, который предоставляет \tableofcontents(который перечисляет ToC внутри ToC) и \tableofcontents*(который не перечисляет ToC внутри ToC).

Я виделэтот вопроси его многочисленные дубликаты, но я хочу предотвратить само перечисление Оглавления в Оглавлении независимо от выбора пользователя\tableofcontents* против. \tableofcontents.

На основании memoirруководства (Раздел 9.2) я в настоящее время использую etoolboxдля выполнения

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

что работает так, как и ожидалось (варианты как со звездочкой, так и без нее не создают запись в ToC).

Это рекомендуемый способ? Имеет ли этот метод какие-либо плохие побочные эффекты, о которых я не подумал?

Ниже приведен MWE для любого тестирования, которое вы, возможно, захотите провести:

\documentclass{memoir}
\usepackage{etoolbox}

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

\begin{document}

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

\end{document}

решение1

Команда \tableofcontentsопределяется как

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

Мне пришлось использовать \show\tableofcontents, потому что определение косвенное, через

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

Таким образом

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

Сделаю.

Полный пример:

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

\begin{document}

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

\end{document}

С \tableofcontents*ним было бы то же самое.

решение2

Без etoolboxпакета вы можете сделать что-то вроде этого:

\documentclass{memoir}

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

\begin{document}

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

\end{document}

(конечно, в вашем .clsфайле вам не нужно \makeatletter, \makeatother).

Связанный контент