\begin{filecontents}{foo.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{foo}
\RequirePackage{kvoptions}
\SetupKeyvalOptions{family=myoptions,prefix=myoptions@}
\DeclareStringOption[scriptsize]{bibsize}
\ProcessKeyvalOptions{myoptions}\relax
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions\relax
\LoadClass[a4paper, twoside]{article}
\def\bibfont{\csname \myoptions@bibsize\endcsname}
\end{filecontents}
\documentclass[bibsize=footnotesize]{foo}
\begin{document}
Foo bar
\end{document}
工作正常,但出现警告:
LaTeX Warning: Unused global option(s):
[bibsize].
答案1
未使用的选项列表警告实际上不是为 keyval 选项设计的,只是10pt
为标准类使用的等而设计的。这里可能可以改进 kvoptions 处理,但警告并不总是有意义的。如果有,foo=false
选项 foo 是否被使用?
最好不要发出警告,而不是发出虚假警告,所以我会简单地将其静音,然后使用 kv 解析安排类,只需清空未使用的列表:
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{foo}
\RequirePackage{kvoptions}
\SetupKeyvalOptions{family=myoptions,prefix=myoptions@}
\DeclareStringOption[scriptsize]{bibsize}
\ProcessKeyvalOptions{myoptions}\relax
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions\relax
\LoadClass[a4paper, twoside]{article}
\let\@unusedoptionlist\@empty%<<<<<<<<<<<<<<<<<<<<<<<<
\def\bibfont{\csname \myoptions@bibsize\endcsname}
对于任何新代码,请使用 LaTeX 中内置的键/值选项处理,而不是基于旧包的版本。(刚刚在那里提出了一个与未使用选项列表类似的问题)
答案2
以下将您的选项移植到 LaTeX 的内置 key=val 选项处理程序。
\begin{filecontents}{foo.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{foo}
\DeclareKeys[myoptions]
{
bibsize .store = \myoptions@bibsize,
unknown .code = \PassOptionsToClass{\CurrentOption}{article}
}
\SetKeys[myoptions]{bibsize=scriptsize}
\ProcessKeyOptions[myoptions]
\LoadClass[a4paper, twoside]{article}
\def\bibfont{\csname \myoptions@bibsize\endcsname}
\end{filecontents}
\documentclass[bibsize=footnotesize]{foo}
\begin{document}
Foo bar {\bibfont bibfont}
\end{document}
expkv-opt
替代解决方案,仅使用(来显示内容免责声明:我是 的作者expkv-opt
。
\begin{filecontents}{foo.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{foo}
\RequirePackage{expkv-opt, expkv-def}
\ekvdefinekeys{myoptions}
{
store bibsize = \myoptions@bibsize,
initial bibsize = scriptsize,
unknown code = \PassOptionsToClass{\CurrentOption}{article},
unknown noval = \PassOptionsToClass{\CurrentOption}{article}
}
\ekvoUseUnknownHandlers* % for the next ekvoProcess use set's unknown handlers
\ekvoProcessLocalOptions{myoptions} % these are forwarded to article
\ekvoProcessFutureOptions{myoptions} % these aren't, article doesn't support it
\LoadClass[a4paper, twoside]{article}
\def\bibfont{\csname \myoptions@bibsize\endcsname}
\end{filecontents}
\documentclass[bibsize=footnotesize]{foo}
\begin{document}
Foo bar {\bibfont bibfont}.
\end{document}