我正在编写一个基于的类book.cls
,我希望有一个列表选项,所以我可以这样做
\documentclass[languages={french, english}]{testops}
我已经使用 定义了键。但是,如果将所有选项传递给 ,l3key2e
则类的选项解析器似乎不允许使用。=
book
如果我没有将所有选项传递给book
,则它们将进入文档处理。但我想将未定义的选项传递l3keys2e
给类,这样我就不必重新定义类的常用选项book
(纸张大小、字体大小……)。
有什么办法可以做到这一点,同时将其他选项传递给book
班级?
平均能量损失
\begin{filecontents}{testops.cls}
\ProvidesClass{\jobname}[2018-11-20 v1.0 SE Test package]
\RequirePackage{pgfopts}
\RequirePackage{expl3,l3keys2e,xparse}
\ExplSyntaxOn
\keys_define:nn { testops }
{ languages .default:n = {english},
languages .clist_gset:N = \g_testops_languages_clist,
}
\cs_new_protected_nopar:Nn \__printlanguages:
{
\clist_use:Nnnn \g_testops_languages_clist { ~and~ } { ,~ } { ~and~ }
}
\NewDocumentCommand { \printlanguages} {} {\__printlanguages:}
\ProcessKeysOptions { testops } % Parses the option list
\ExplSyntaxOff
\PassOptionsToClass{\CurrentOption}{book} %%% <-- THIS LINE RISES THE ERROR
\LoadClass{book}
\endinput
\end{filecontents}
% ------------------
\documentclass[languages={french,spanish,englis}]{testops}
\begin{document}
\printlanguages
\end{document}
答案1
只是回答我自己的问题:-)
我了解到我们可以使用.unknown
关键字来处理系统未知的键l3keys
。然后我们可以将这些选项传递给底层book
类。
\begin{filecontents}{testops.cls}
\ProvidesClass{testops}[2018-11-20 v1.0 SE Test package]
\RequirePackage{expl3,l3keys2e,xparse}
\ExplSyntaxOn
\keys_define:nn { testops }
{ languages .default:n = {english},
languages .clist_gset:N = \g_testops_languages_clist,
unknown .code:n =
{ \msg_term:n { \l_keys_key_tl\ uknown~option~used }
\PassOptionsToClass { \CurrentOption } { book }}
}
\cs_new_protected_nopar:Nn \__printlanguages:
{
\clist_use:Nnnn \g_testops_languages_clist { ~and~ } { ,~ } { ~and~ }
}
\NewDocumentCommand { \printlanguages} {}
{\__printlanguages:
}
\ProcessKeysOptions { testops } % Parses the option list
\ExplSyntaxOff
\LoadClass{book}
\RequirePackage{geometry}
\endinput
\end{filecontents}
% ------------------
\documentclass[a5paper,12pt,languages={french,spanish,englis}]{testops}
\begin{document}
\printlanguages
\end{document}