考虑以下示例类文件
\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
)传递到文章类。