定义新类时防止传递选项

定义新类时防止传递选项

我正在定义一个新类。在这个类中我创建了一个选项total。然而这会破坏文档,因为这个选项显然被传递给了geometry包,即使我没有指定应该发生这种情况。我认为只有在使用\PassOptionsToPackage或明确完成此操作的情况下才会传递选项\RequirePackageWithOptions。我怎样才能防止这种情况发生?我目前的解决方法是更改​​选项的名称,但我不喜欢这样。谁知道将来会发生什么?

下面是一个最小(非)工作示例。

类别定义:

% example.cls
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{example}

\DeclareOption{total}{}

\ProcessOptions\relax

\LoadClass{beamer}

\endinput

以及使用它的文件:

% test.tex
\documentclass[total]{example}

\begin{document}

\begin{frame}
\end{frame}

\end{document}

答案1

您必须total从中删除\@classoptionslist;最简单的方法是使用expl3

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{nvcleemp}

\DeclareOption{total}{}

\ProcessOptions\relax

\RequirePackage{expl3}
\ExplSyntaxOn
\tl_remove_all:Nn \@classoptionslist {total}
\ExplSyntaxOff

\LoadClass{beamer}

\endinput

答案2

根据大卫卡莱尔的评论,我得出了这个答案:

% example.cls
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{example}

\DeclareOption{total}{}

\def\temp@classoptionslist{}

\DeclareOption*{%
   \xdef\temp@classoptionslist{\temp@classoptionslist,\CurrentOption}%
}

\ProcessOptions\relax

\let\@classoptionslist\temp@classoptionslist

\LoadClass{beamer}

\endinput

这对我来说有用,但也许存在一些我没有想到的问题。

相关内容