我已经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}
这样,我可以为scrartcl
like提供一些默认参数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
必须将移到它前面的原因。