按照给定的顺序处理类选项

按照给定的顺序处理类选项

我如何按照特定顺序将我的包的选项传递给另一个已加载的包?

\ProvidesPackage{L10n}
\DeclareOption{english}{\PassOptionsToPackage{\CurrentOption}{babel}}
\DeclareOption{ngerman}{\PassOptionsToPackage{\CurrentOption}{babel}}
\DeclareOption{others}{% other options are also declared}
\DeclareOption*{\OptionNotUsed}
\ProcessOptions
\usepackage{babel}

上面的声明导致 babelenglish,ngerman总是被加载,无论我是否L10n加载

\usepackage[english,ngerman]{L10n}

或者

\usepackage[ngerman,english]{L10n}

在加载我的包时,如何才能获得 babel 的选项ngermanenglish顺序?

答案1

这主要取决于其他选项应该做什么。命令

\ProcessOptions*

将按照选项传递给包的顺序扫描选项代码,而不会对包调用时未指定的选项执行任何操作。如果其他选项执行的操作不应依赖于调用顺序,则会出现问题。

一般来说,打电话不是一个好主意巴别塔从一个包中,因为这会删除包中没有提供的语言作为明确声明的选项。

一种干净的方法可能是使用键值接口加载选项,因此

\usepackage[languages={ngerman,english}]{L10n}

可以通过按规定的顺序将语言传递给 babel 来完成这项工作,并保留选择任何受支持的语言的可能性。许多包都使用这种语法。

相关内容