Marcar as opções de classe de valor-chave como usadas

Marcar as opções de classe de valor-chave como usadas

Eu escrevi um wrapper para a scrartclclasse da seguinte maneira:

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

\RequirePackage{kvoptions}

\DeclareStringOption{title}
\DeclareStringOption{subtitle}

\ProcessKeyvalOptions*

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

Dessa forma, posso fornecer alguns argumentos padrão para scrartcllike DIV=12e ainda substituí-los passando

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

O problema que tenho é que srcartclmarca as outras opções, por exemplo, title=mytitlecomo não utilizadas

Aviso LaTeX: opções globais não utilizadas

o que certamente é falso. Eu tentei desmarcar as opções com

\DisableKeyvalOptions{mycls}{title}

logo depois \ProcessKeyvalOptions*, mas isso não funcionou. Como posso marcar essas opções como usadas?

Responder1

Dei uma olhada nova e completa em The LaTeX Companion(A.4.8) e resolvi o problema sozinho.

Apesar do que eu assumi anteriormente, \PassOptionsToClasse \LoadClassWithOptionsnão trabalhamos juntos. O objetivo \LoadClassWithOptionsé passar exatamente os mesmos argumentos que a classe atual obteve. Então aqui, mudar para \LoadClassagora terá as opções padrão.

Infelizmente agora o usuário que recebe opções globais não substituirá as opções padrão. Portanto, eles têm que ser passados ​​manualmente para a classe. Aqui kvoptionsfornece \DeclareDefaultOptioncomo equivalente ao clássico \DeclareOption*. Em suma, o resultado é semelhante a:

\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}

Portanto, sempre que \ProcessKeyvalOptions*encontrar uma opção desconhecida, como DIV=10, ele a repassará scrartcl, substituindo qualquer valor padrão no processo. É por isso que \PassOptionsToClassteve que ser movido na frente dele.

informação relacionada