使用多个值的选项扩展书籍类

使用多个值的选项扩展书籍类

我正在编写一个基于的类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}

相关内容