cls 文件中的颜色包和 \AtBeginDocument 错误

cls 文件中的颜色包和 \AtBeginDocument 错误

我有myclass.cls以下内容:

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{myclass}
\LoadClass{article}
\AtBeginDocument{
  \tableofcontents
  \clearpage
}
\endinput

我在同一个文件夹中还有mydoc.tex以下内容:

\documentclass{myclass}
\usepackage{color}
\begin{document}
  mydocument
\end{document}

编译时出现错误

未定义的控制序列。\begin{document}。

如果我执行以下任何一项操作就可以了:

  • \AtBeginDocument{...}搬去​mydoc.tex
  • 消除\tableofcontents
  • 消除\clearpage
  • 消除\usepackage{color}

这是一个错误吗?

答案1

从 LaTeX Companion 第二版到\AtBeginDocument

但请注意,钩子中的代码\AtBeginDocument是前言的一部分。因此,限制了可以放在那里的内容;特别是,不能进行排版。

\AfterEndPreamble从包开始提供了一个更好的钩子etoolbox,它在包的最后执行\begin{document},在\AtBeginDocument内容之后。

作为独立文件的简短示例:

\documentclass{article}
\RequirePackage{etoolbox}
\AfterEndPreamble{
  \tableofcontents
  \clearpage
}
\usepackage{color}
\begin{document}
\section{Hello World}
\end{document}

答案2

错误是

! Undefined control sequence.
\set@color ...\@pdfcolorstack push{\current@color 
                                                  }\aftergroup \reset@color 
l.3 \begin{document}

? 

这是\current@color尚未定义为颜色(以及字体和许多其他东西)的设置\begin{document}\AtBeginDocument主要用于加载前言命令位于前导码末尾,由于执行得太早,因此无法可靠地用于排版命令。

相关内容