我想处理我的类选项,以便为正在加载的包创建一个(可能很长的)选项列表,例如
% 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
都会最后执行。packageB
packageA
x
因此,更精确的答案取决于“现实世界”的情况。