\RequirePackage{tocloft} 在 \documentclass 之前不起作用

\RequirePackage{tocloft} 在 \documentclass 之前不起作用

\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意味着没有\sections & 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

相关内容