未使用的带有 kvoptions 字符串选项的全局选项

未使用的带有 kvoptions 字符串选项的全局选项
\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}

相关内容