我正在尝试创建一个自定义类来替换该类book
,并且需要包含 ToC 功能。放置命令\tableofcontents
会导致错误“未定义的控制序列”。使用类似minitoc
或的包tocloft
没有帮助。
我应该向我的自定义类写入什么才能让 ToC 正常工作?
答案1
您应该从 book.cls 中提取最少的代码,虽然不保证,而且我不太确定您在课堂上定义了什么,但至少包括以下内容:
\setcounter{tocdepth}{2}
\newcommand\tableofcontents{%
\if@twocolumn
\@restonecoltrue\onecolumn
\else
\@restonecolfalse
\fi
\chapter*{\contentsname
\@mkboth{%
\MakeUppercase\contentsname}{\MakeUppercase\contentsname}}%
\@starttoc{toc}%
\if@restonecol\twocolumn\fi
}
\newenvironment{theindex}
{\if@twocolumn
\@restonecolfalse
\else
\@restonecoltrue
\fi
\twocolumn[\@makeschapterhead{\indexname}]%
\@mkboth{\MakeUppercase\indexname}%
{\MakeUppercase\indexname}%
\thispagestyle{plain}\parindent\z@
\parskip\z@ \@plus .3\p@\relax
\columnseprule \z@
\columnsep 35\p@
\let\item\@idxitem}
{\if@restonecol\onecolumn\else\clearpage\fi}
\newcommand\@idxitem{\par\hangindent 40\p@} (*@\label{idxitem}@*)
\newcommand\subitem{\@idxitem \hspace*{20\p@}}
\newcommand\subsubitem{\@idxitem \hspace*{30\p@}}
\newcommand\indexspace{\par \vskip 10\p@ \@plus5\p@ \@minus3\p@\relax}
通常,在您自己的类定义中加载一个标准类是一个更好的主意,这样您的类至少可以继承所有基本功能。很多时候您只需要一个包而不是一个类。