![\RequirePackage{tocloft} 在 \documentclass 之前不起作用](https://linux22.com/image/402753/%5CRequirePackage%7Btocloft%7D%20%E5%9C%A8%20%5Cdocumentclass%20%E4%B9%8B%E5%89%8D%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
\RequirePackage
应该可以正常工作\documentclass
,事实上,以下 MCE 可以很好地工作:
\RequirePackage{url}
\documentclass{article}
\begin{document}
\url{foo}
\end{document}
但是,对于该tocloft
软件包来说,这不起作用。事实上,以下 MCE 无法编译,并显示以下错误消息:
! LaTeX Error: Command \cftdot undefined.
\RequirePackage{tocloft}
\documentclass{article}
\renewcommand{\cftdot}{\ensuremath{\ast}}
\begin{document}
Foo.
\end{document}
这是怎么回事?
答案1
toclosft.sty
在(第 36-45 行)的开头,你会发现
\@ifundefined{chapter}{%
\@cfthaschapterfalse
\@ifundefined{section}{%
\PackageWarning{tocloft}%
{I don't recognize any sectional divisions so I'll do nothing}
\renewcommand{\@cftquit}{\endinput}
}{\PackageInfo{tocloft}{The document has section divisions}}
}{\@cfthaschaptertrue
\PackageInfo{tocloft}{The document has chapter divisions}}
\@cftquit
当然,之前加载的包\documentclass
意味着没有\section
s & Co. 事实上你首先会收到警告
Package tocloft Warning: I don't recognize any sectional divisions so I'll do
nothing on input line 44.
然后\@cftquit
执行,它被定义为\endinput
。包中的其他代码都不会运行,而且你永远不会到达(位于第 162 行)tocloft
的定义。\cftdot