我如何按照特定顺序将我的包的选项传递给另一个已加载的包?
\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 的选项ngerman
和english
顺序?
答案1
这主要取决于其他选项应该做什么。命令
\ProcessOptions*
将按照选项传递给包的顺序扫描选项代码,而不会对包调用时未指定的选项执行任何操作。如果其他选项执行的操作不应依赖于调用顺序,则会出现问题。
一般来说,打电话不是一个好主意巴别塔从一个包中,因为这会删除包中没有提供的语言作为明确声明的选项。
一种干净的方法可能是使用键值接口加载选项,因此
\usepackage[languages={ngerman,english}]{L10n}
可以通过按规定的顺序将语言传递给 babel 来完成这项工作,并保留选择任何受支持的语言的可能性。许多包都使用这种语法。