He escrito un contenedor para la scrartcl
clase de la siguiente manera:
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{mycls}[2012/08/23]
\RequirePackage{kvoptions}
\DeclareStringOption{title}
\DeclareStringOption{subtitle}
\ProcessKeyvalOptions*
\PassOptionsToClass{fleqn, openbib, headings=big, DIV=12}{scrartcl}
\LoadClassWithOptions{scrartcl}
De esta manera puedo proporcionar algunos argumentos predeterminados para scrartcl
me gusta DIV=12
y aun así anularlos pasando
\documentclass{title=mytitle, subtitle=thesubtitle, DIV=10}
El problema que tengo, es que srcartcl
marca las otras opciones, por ejemplo, title=mytitle
como no utilizadas .
Advertencia de LaTeX: opciones globales no utilizadas
lo cual es ciertamente falso. Intenté desarmar las opciones con
\DisableKeyvalOptions{mycls}{title}
justo después \ProcessKeyvalOptions*
, pero eso no funcionó. ¿Cómo puedo marcar esas opciones como utilizadas?
Respuesta1
Eché un vistazo nuevo y exhaustivo a The LaTeX Companion
(A.4.8) y resolví el problema yo mismo.
A pesar de lo que supuse anteriormente, \PassOptionsToClass
ya \LoadClassWithOptions
no trabajan juntos. El objetivo \LoadClassWithOptions
es pasar exactamente los mismos argumentos que obtuvo la clase actual. Así que aquí, cambiar a \LoadClass
ahora tomará las opciones predeterminadas.
Desafortunadamente, ahora el usuario con opciones globales no sobrescribirá las predeterminadas. Por lo tanto, deben pasarse manualmente a la clase. Aquí kvoptions
se ofrece \DeclareDefaultOption
como equivalente al clásico \DeclareOption*
. Con todo, el resultado es el siguiente:
\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}
Entonces, cada vez que \ProcessKeyvalOptions*
ve una opción desconocida, como DIV=10
, se la pasa a scrartcl
, sobrescribiendo cualquier valor predeterminado en el proceso. Por eso \PassOptionsToClass
hubo que colocarlo delante.