通过类选项设置包选项的最佳实践?

通过类选项设置包选项的最佳实践?

我想处理我的类选项,以便为正在加载的包创建一个(可能很长的)选项列表,例如

% set default package options here somehow
\DeclareOption{myvariant}{
    % set a bunch of alternative options overriding the default
}

\RequirePackage[some kind of magic should go here]{mypackage}

具体来说,我认为也许我应该使用 PassOptionsToClass,但是 - 我如何阻止默认操作?

现在我正在做其他的事情,有点丑陋,它依赖于我感兴趣的特定包(geometry)允许使用命令而不是包选项来执行所有操作:

\newcommand{\iitcs@geometry{\geometry{key=val,key2=val2}}
\DeclareOption{myopt}{
 \renewcommand{\iitcs@geometry{\geometry{key=val3,key3=val4}}
}
%...
\RequirePackage{geometry}
\iitcs@geometry

(编辑)我要强调的是,我希望找到一个解决方案,因为我别无选择,只能提供正确的包选项,而没有像“几何”那样的灵活性。

答案1

您可以\geometry多次使用和选项。因此,对于此应用程序,我建议使用类似

\DeclareOption{myopt}{%
  \AtEndOfPackage{\geometry{paperwidth=3cm,paperheight=9cm}}}

\ProcessOptions\relax
\RequirePackage{geometry}
\geometry{paperwidth=12cm,paperheight=12cm} % default

在更一般的情况下,这可能会更加困难,因为当调用时,选项是按照它们在包中列出的顺序执行的\ProcessOptions

因此,如果按此顺序packageB.sty声明x和(稍后使用,而不是),那么你在nox\ProcessOptions\ProcessOptions*packageA.sty

\DeclareOption{x}{\PassOptionsToPackage{x}{packageB}}
\DeclareOption{nox}{\PassOptionsToPackage{nox}{packageB}}

\ExecuteOptions{nox}
\ProcessOptions\relax
\RequirePackage{packageB}

无论您是否使用该选项调用, thennox都会最后执行。packageBpackageAx

因此,更精确的答案取决于“现实世界”的情况。

相关内容