I know I can declare and execute an option for my package using
\DeclareOption{myoption}{\typeout{I did it!}}
\ProcessOptions
but now I'd like to give the option a value:
\DeclareOption{type}{\typeout{You typed: \CurrentOptionValue}}
which would be used as follows:
\usepackage[type="hello, world!"]{mypackage}
Requirements on the value string is that it can contain at least some nonalphanumeric characters, like spaces, commas and dots (and maybe some others…).
Best Answer
For handling key-value input as package options, there are a few choices:
xkeyval
kvoptions
pgfopts
Of these,
kvoptions
is probably the most robust approach. The way that options are declared is to use\define@key
(or\pgfkeys
in the case ofpgfopts
) before processing the package options. Withkvoptions
you get some nicer wrappers, such as\DeclareBoolOption
.However, the LaTeX2e kernel does various bits of processing before the input gets anywhere near the key-value processor. As a result, I'd strongly advice considering using a post-loading macro to set keys rather than a load-time set of options. This is easy enough to implement:
which will then only need a basic key-value package: probably I would choose
kvsetkeys
, which provides\kvsetkeys
as a more robust version of\setkeys
.