我正在定义一个新类。在这个类中我创建了一个选项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
这对我来说有用,但也许存在一些我没有想到的问题。