您好,请考虑以下例子:
\RequirePackage{ expl3 , xparse , l3keys2e , xfrac }
\ProvidesExplPackage
{somewhat}
{2012/04/29}
{1}
{descrr}
\cs_new_nopar:Npn\font_color{green}
\keys_define:nn {tgquixoptions} {
font-color .tl_set:N = \tg_font_color,
font-color .default:n =\tl_set:Nn\tg_font_color{white},
background-color .code:n=#1,
background-color .default:n = blue,
}
\ProcessKeysOptions{tgquixoptions}
\message{------------message-----\tl_to_str:N\tg_font_color}
这很有效。但我怎样才能把它变成一个类呢?我试过这个:
\LoadClass{beamer}
\RequirePackage{ expl3 , xparse , l3keys2e , xfrac }
\ProvidesExplPackage
{somewhat}
{2012/04/29}
{1}
{descrr}
\cs_new_nopar:Npn\font_color{green}
\keys_define:nn {tgquixoptions} {
font-color .tl_set:N = \tg_font_color,
font-color .default:n =\tl_set:Nn\tg_font_color{white},
background-color .code:n=#1,
background-color .default:n = blue,
}
\ProcessKeysOptions{tgquixoptions}
\message{------------message-----\tl_to_str:N\tg_font_color}
似乎 l3 不处理类选项。当像这样调用时:
\documentclass[font-color=somevalue]{somewhat}
%\usepackage[font-color=somevalue]{somewhat}
\begin{document}
\frame{
}
\end{document}
那么我怎样才能让 l3 监听包选项?
答案1
每次加载类时都会处理类选项。因此,如果您想要处理一些包选项,但又要加载另一个类,则需要先处理选项
\ProcessKeysOptions{tgquixoptions}
\LoadClass{beamer}
您可能希望使用该.unknown
属性将任何其他选项传递给beamer
。
您的工作代码如下:
\begin{filecontents}{somewhat.cls}
\RequirePackage{ expl3 , xparse , l3keys2e , xfrac }
\ProvidesExplClass
{somewhat}
{2012/04/29}
{1}
{descrr}
\cs_new_nopar:Npn\font_color{green}
\keys_define:nn {tgquixoptions} {
font-color .tl_set:N = \tg_font_color_tl,
font-color .default:n =white,
background-color .code:n=#1,
background-color .default:n = blue,
}
\ProcessKeysOptions{tgquixoptions}
\LoadClass{beamer}
\message{------------message-----\tl_to_str:N\tg_font_color_tl}
\end{filecontents}
\documentclass[font-color=somevalue]{somewhat}
%\usepackage[font-color=somevalue]{somewhat}
\begin{document}
\frame{
}
\end{document}