Eu escrevi um wrapper para a scrartcl
classe 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 scrartcl
like DIV=12
e ainda substituí-los passando
\documentclass{title=mytitle, subtitle=thesubtitle, DIV=10}
O problema que tenho é que srcartcl
marca as outras opções, por exemplo, title=mytitle
como 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, \PassOptionsToClass
e \LoadClassWithOptions
não trabalhamos juntos. O objetivo \LoadClassWithOptions
é passar exatamente os mesmos argumentos que a classe atual obteve. Então aqui, mudar para \LoadClass
agora 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 kvoptions
fornece \DeclareDefaultOption
como 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 \PassOptionsToClass
teve que ser movido na frente dele.