自定义类中未使用的全局选项

自定义类中未使用的全局选项

考虑以下示例类文件

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{myclass}
\RequirePackage{kvoptions}

\DeclareBoolOption{foo}

\ProcessKeyvalOptions*

\ifmyclass@foo
\def\@title{foo}
\else
\def\@title{bar}
\fi

\ProcessOptions\relax

\LoadClass{article}

还有文件

\documentclass[foo]{myclass}

\begin{document}

\maketitle
\end{document}

它正确地生成了标题为“foo”的文档,因此该类实际上正在使用我给出的选项。但是,LaTeX 说:

LaTeX Warning: Unused global option(s):
    [foo].

显然,处理给定的选项是不够的。如何将选项标记为“已使用”以避免出现该警告?

答案1

未使用的选项被添加到宏中,这些选项将使用此代码\@unusedoptionlist打印到控制台/日志中\begin{document}

  \ifx\@unusedoptionlist\@empty\else
    \@latex@warning@no@line{Unused global option(s):^^J%
            \@spaces[\@unusedoptionlist]}%
  \fi

如果列表不是\@empty

使用名为警告的未使用或未定义选项的处理程序\DeclareOption*{}可以抑制警告。

答案2

您的类文件中是否需要\ProcessOptions\relax这些?例如,这是一个最小的类文件 ( testkeyval.cls):

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{testkeyval}[2018/01/19 Test key-value options]
\RequirePackage{kvoptions}
\DeclareStringOption[?]{foo}
\DeclareDefaultOption{\PassOptionsToClass{\CurrentOptionKey}{article}}
\ProcessKeyvalOptions*
\newcommand\thefoo{`\testkeyval@foo'}
\LoadClass{article}

其使用方法如下:

\documentclass[foo=bar]{testkeyval}
%\documentclass[foo=bar,11pt]{testkeyval} % passes 11pt to article
%\documentclass[11pt]{testkeyval} % passes 11pt to article
%\documentclass{testkeyval} % default copyright and default fontsize for article
%\documentclass[foo]{testkeyval} % error

\begin{document}
% Number of 'x's on second line: 10pt 0, 11pt 3.
\noindent 
x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
x x x x x x x x x x x x x x 

foo is \thefoo.
\end{document}

请注意,除了处理键值选项​​之外,它还会将未使用的选项(例如11pt)传递到文章类。

相关内容