我有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
主要用于加载前言命令位于前导码末尾,由于执行得太早,因此无法可靠地用于排版命令。