如何将给我的包的 keyval 字符串选项传递给 babel?
我装上我的包裹
\usepackage[languages={ngerman,english}]{mylang}
在 mylang 包中,我想处理这个可选的 languages 参数并将其交给 babel。如果缺少该选项,我想定义一个默认值。
我的尝试:
\usepackage{kvoptions}
\DeclareStringOption{languages}[english,ngerman]
但是接下来该怎么做呢?我认为默认值设置正确,但是现在如何将其交给 babel?我需要运行默认进程选项例程吗?
对于非 keyval 值我会使用
\DeclareOption{languages}{\PassOptionsToPackage{\CurrentOption}{babel}}
\DeclareOption*{\OptionNotUsed}
答案1
这不是一个真正的答案,但我想展示一个与mhp
回答。
DeclareStringOption
(顺序很重要)
\RequirePackage{filecontents}
\begin{filecontents}{mylang.sty}
\ProvidesPackage{mylang}
\RequirePackage{kvoptions}
\SetupKeyvalOptions{%
family=ML,
prefix=ML@,
}
\DeclareStringOption[english,ngerman]{languages}
\ProcessKeyvalOptions*
\PassOptionsToPackage{\ML@languages}{babel}
\RequirePackage{babel}
\end{filecontents}
\documentclass{article}
\usepackage[languages=frenchb]{mylang}
\usepackage{blindtext}
\begin{document}
\blindtext
\end{document}
答案2
用 声明的选项的值\DeclareStringOption
存储在宏中\<package>@<option>
。因此,尝试
\ProvidesPackage{mylang}
...
\usepackage{kvoptions}
\DeclareStringOption{languages}[english,ngerman]
\ProcessKeyvalOptions*
\PassOptionsToPackage{\mylang@languages}{babel}
如果你喜欢更短的前缀,那么mylang@
使用\SetupKeyvalOptions
前声明选项,例如:
\SetupKeyvalOptions{family=ML, prefix=ML@}