\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{funny-class}
%%
% Pass any options to the underlying class.
\DeclareOption*{%
\PassOptionsToClass{\CurrentOption}{article} % (could be another class)
}
% Options for this class.
\DeclareOption{fun}{%
\def\contentsname{Blarg, blarg, blarg}%
}
% Defaults.
\ExecuteOptions{fun}
% Now execute any options passed in
\ProcessOptions\relax
% Load underlying class.
\LoadClass{article}
article
当类尝试定义时,LaTeX 会发出抱怨\contentsname
:
\newcommand\contentsname{Contents}
当我尝试在进行选项处理之前加载该类时,LaTeX 当然会抱怨。
解决这个问题的最佳方法是什么?理想情况下,我希望尽可能坚持我原来的想法,因为我确信有更好的方法来完成我想做的事情(比如弄清楚如何利用 Babel 等)。
答案1
您不应该定义该类article
稍后也会定义的宏。这些宏要么无论如何都会被再次覆盖,要么会抛出“宏已定义”错误。您需要将这些修改延迟到加载基类之后。通常,这可以通过仅修改选项代码中的 if-switch 来完成,然后仅当此 switch 为真时才执行某些代码:
\newif\ifmyclass@myoption% false at first
\DeclareOption{someoption}{\myclass@myoptiontrue}
..
\ProcessOptions\relax
\LoadClass{article}
..
\ifmyclass@myoption
code active only for this option
\fi
在您的具体情况下我只需使用\AtEndOfClass
:
\DeclareOption{fun}{%
\AtEndOfClass{\def\contentsname{Blarg, blarg, blarg}}%
}