继承类选项时的奇怪行为

继承类选项时的奇怪行为

我想创建一个新的文档类,它从基类继承了大部分选项article,但将默认字体选项设置为 11pt 而不是 10pt,并定义自己的新选项。我已经完成了大部分工作,但在让新类识别继承的选项方面遇到了麻烦。目前,我的类文件类似于

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{newclass}

\DeclareOption{newoption}{\def\x{x}}
\PassOptionsToClass{11pt}{article}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}

\ExecuteOptions{newoption,11pt}
\ProcessOptions\relax

\LoadClass{article}

这基本上完成了工作 - 默认字体是 11pt,调用\documentclass[12pt]{newclass}会给出 12pt 字体的文档。但是,\documentclass[10pt]{newclass}调用不是给出一个 10pt 字体的文档。相反,它保留默认的 11pt 字体。

测试文件:

\documentclass
 %
[10pt] %11pt... 
%[11pt] %
%[12pt] %
{newclass}
\stop

我也尝试过使用以下形式

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{newclass}

\DeclareOption{newoption}{...}

\ExecuteOptions{newoption,11pt}
\ProcessOptions\relax

\LoadClassWithOptions{article}

...

这样可以正确处理所有选项。但是,在这种情况下,\ExecuteOptions似乎无法识别 中的 11pt 选项,并且加载不带选项的类调用会生成 10pt 字体的文档。

我的问题是:

  1. 为什么使用第一种方法时无法识别10pt选项?

  2. 为什么\ExecuteOptions使用第二种方法时无法识别继承的选项?

答案1

本质上这里出错的是由于10pt没有声明,因此它会被默认选项选中,10pt该选项会传递给列表,并在加载时传递给文章。

但你也无条件地这样做

\ExecuteOptions{newoption,11pt}

因此10pt11pt传递给文章。

article\ProcessOptions不使用\ProcessOptions*,因此它按照声明的顺序处理选项,article这意味着

\documentclass[10pt,11pt]{article}

\documentclass[11pt,10pt]{article}

是等效的,并且都选择11pt。您的类的效果类似,您将两个选项都传递给article并且11pt始终覆盖10pt

第二个例子中,\LoadClassWithOptions不打算在声明其自己的选项的类中使用,它仅采用顶级选项列表并将它们直接传递给article

相关内容