私は に基づいてクラスを作成しています。memoir
このクラスは、\tableofcontents
(ToC 内に ToC をリストします) と\tableofcontents*
(ToC 内に ToC をリストしません) を提供します。
私は見たこの質問重複している部分が多いのですが、ユーザーの選択に関係なく目次自体が目次にリストされるのを防ぎたいのです。\tableofcontents*
対 \tableofcontents
。
マニュアル(セクション9.2)に基づいてmemoir
、私は現在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
。