我尝试创建基于的自己的类amsart
,如下所示:
% file: myamsart.cls
\ProvidesClass{myamsart}
\LoadClass[fleqn]{amsart}
但是该选项fleqn
无效:
% file: test.tex
%\documentclass[fleqn]{amsart}
\documentclass{myamsart}
\begin{document}
\[ x = x \]
\begin{equation}
y = y
\end{equation}
\end{document}
为什么会这样呢?
\documentclass
更一般地讲,使用 传递选项和使用 传递选项之间有什么区别\LoadClass
? 是否有一种通用方法可以从文件加载基类cls
,并且与使用 时的效果相同\docementclass
?
答案1
选项fleqn
实际上amsart
什么都不做\ProcessOptions
,因为
\DeclareOption{fleqn}{}%
该类使用非标准方式设置和使用选项。您可以通过自己添加选项来破解它。
\ProvidesClass{myamsart}
\expandafter\g@addto@macro\csname [email protected]\endcsname{,fleqn}
\g@addto@macro\@classoptionslist{,fleqn}
\LoadClass{amsart}
第一个\g@addto@macro
强制添加fleqn
到要加载的选项列表中myamsart.cls
,以便使测试\@ifclasswith{\@classname}
遵循“true”分支。第二个\g@addto@macro
强制添加fleqn
到全局选项中,因此amsmath
(和所有其他包)也会看到并遵守它。
答案2
尝试:
\ProvidesClass{myamsart}
\PassOptionsToPackage{fleqn}{amsmath}
\LoadClass{amsart}