将键值类选项标记为已使用

将键值类选项标记为已使用

我已经scrartcl按照以下方式为该类编写了一个包装器:

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{mycls}[2012/08/23]

\RequirePackage{kvoptions}

\DeclareStringOption{title}
\DeclareStringOption{subtitle}

\ProcessKeyvalOptions*

\PassOptionsToClass{fleqn, openbib, headings=big, DIV=12}{scrartcl}
\LoadClassWithOptions{scrartcl}

这样,我可以为scrartcllike提供一些默认参数DIV=12,并通过传递来覆盖它们

\documentclass{title=mytitle, subtitle=thesubtitle, DIV=10}

我遇到的问题是,将srcartcl其他选项标记title=mytitle为未使用

LaTeX 警告:未使用的全局选项

这当然是错误的。我尝试使用

\DisableKeyvalOptions{mycls}{title}

紧接着\ProcessKeyvalOptions*,但不起作用。我如何将这些选项标记为已使用?

答案1

我重新全面地研究了The LaTeX Companion(A.4.8),并自己解决了这个问题。

尽管我之前假设,\PassOptionsToClass\LoadClassWithOptions不能一起工作。的重点\LoadClassWithOptions是传递与当前类完全相同的参数。因此,此处切换到\LoadClass现在将采用默认选项。

不幸的是,现在用户给出的全局选项不会覆盖默认选项。因此必须手动将它们传递给类。这里kvoptions提供了\DeclareDefaultOption与经典的等价物\DeclareOption*。总而言之,结果如下所示:

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{mycls}[2012/08/23]

\RequirePackage{kvoptions}

\DeclareStringOption{title}
\DeclareStringOption{subtitle}

\PassOptionsToClass{fleqn, openbib, headings=big, DIV=12}{scrartcl}

\DeclareDefaultOption{\PassOptionsToClass{\CurrentOption}{scrartcl}}

\ProcessKeyvalOptions*

\LoadClass{scrartcl}

因此,每当\ProcessKeyvalOptions*看到未知选项(例如)时DIV=10,它都会将其传递给scrartcl,从而覆盖过程中的任何默认值。这就是为什么\PassOptionsToClass必须将移到它前面的原因。

相关内容