5

How can I pass options of my package in a specific order to another loaded package?

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

Above declaration results in babel being loaded with english,ngerman always regardless whether I load L10n with

\usepackage[english,ngerman]{L10n}

or

\usepackage[ngerman,english]{L10n}

How can I manage to have the options ngerman and english in order for babel when loading my package?

4
  • I tried to specify your title a bit, hope you don't mind. The previous wording hinted at a question way simpler than yours actually is.
    – doncherry
    Sep 15, 2011 at 12:25
  • 1
    \ProcessOptions* is what's needed.
    – egreg
    Sep 15, 2011 at 12:26
  • \ProcessOptions* scans through all options. I only want to pass english and ngerman to babel but in the given order. There are other options not being passed to babel but handled by my package. I don't know the way how to handle options differently when using \ProcessOptions*
    – Sebastian
    Sep 15, 2011 at 12:29
  • @egreg or Sebastian: Please post this as an answer. I would do it myself you where first. Sep 15, 2011 at 12:45

1 Answer 1

5

It mostly depends on what the other options should do. The command

\ProcessOptions*

will scan the option code in the order the options are passed to the package, without doing anything for the options not specified at package call. If other options do things that shouldn't depend on the calling order, then you have a problem.

In general it's not a good idea to call babel from a package, as this cuts out languages which are not provided in the package as an explicitly declared option.

A clean way might be to load options with a key-value interface, so

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

could do the job by passing the languages to babel in the prescribed order and maintaining the possibility to choose any supported language. Many packages use this syntax.

2
  • Thanks! Sounds good but sadly I got stuck \DeclareOption{languages}{\PassOptionsToPackage{\CurrentOption}{babel}} Doesn't work now. I need to handle the key-value pair correctly.
    – Sebastian
    Sep 15, 2011 at 14:57
  • @Sebastian: you should look the documentation of package kvoptions
    – egreg
    Sep 15, 2011 at 15:10

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.