将 keyval 字符串选项传递给 babel

将 keyval 字符串选项传递给 babel

如何将给我的包的 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@}

相关内容