当 amsart 用作另一个类的基类时,“fleqn”选项将被忽略

当 amsart 用作另一个类的基类时,“fleqn”选项将被忽略

我尝试创建基于的自己的类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}

答案3

在被提示后达莱夫,我瞥了一眼財政署源文档,并注意到fleqnoption 的实际行为是从

\@ifclasswith{\@classname}{fleqn}{%

已经尝试了由赫伯特,我决定大胆一点,简化我myamsart.cls

\ProvidesClass{myamsart}
\LoadClass{amsart}

然后使用它

\documentclass[fleqn]{myamsart}

这产生了与使用 时完全相同的刷新左方程\documentclass[fleqn]{amsart}。(但是,这不是我想要做的,因为我不想将任何选项传递给myamsart。)

相关内容