Ich habe einen Wrapper für die scrartcl
Klasse folgendermaßen geschrieben:
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{mycls}[2012/08/23]
\RequirePackage{kvoptions}
\DeclareStringOption{title}
\DeclareStringOption{subtitle}
\ProcessKeyvalOptions*
\PassOptionsToClass{fleqn, openbib, headings=big, DIV=12}{scrartcl}
\LoadClassWithOptions{scrartcl}
Auf diese Weise kann ich einige Standardargumente für scrartcl
like angeben DIV=12
und diese dennoch überschreiben, indem ich
\documentclass{title=mytitle, subtitle=thesubtitle, DIV=10}
Das Problem, das ich habe, ist, dass srcartcl
die anderen Optionen, z. B., title=mytitle
als unbenutzt markiert werden
LaTeX-Warnung: Unbenutzte globale Option(en)
was sicherlich falsch ist. Ich habe versucht, die Optionen mit
\DisableKeyvalOptions{mycls}{title}
direkt danach \ProcessKeyvalOptions*
, aber das hat nicht funktioniert. Wie kann ich diese Optionen als verwendet markieren?
Antwort1
Ich habe mir (A.4.8) noch einmal gründlich angesehen The LaTeX Companion
und das Problem selbst gelöst.
Entgegen meiner vorherigen Annahme funktionieren \PassOptionsToClass
und \LoadClassWithOptions
nicht zusammen. Der Sinn von \LoadClassWithOptions
besteht darin, genau dieselben Argumente zu übergeben, die die aktuelle Klasse erhalten hat. Wenn Sie hier also auf wechseln, \LoadClass
werden jetzt die Standardoptionen übernommen.
Leider überschreiben die vom Benutzer angegebenen globalen Optionen die Standardeinstellungen nicht. Daher müssen sie manuell an die Klasse übergeben werden. Hier kvoptions
ist \DeclareDefaultOption
ein Äquivalent zum klassischen \DeclareOption*
. Insgesamt sieht das Ergebnis so aus:
\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}
Wenn also \ProcessKeyvalOptions*
eine unbekannte Option wie gesehen wird, DIV=10
wird sie an weitergeleitet scrartcl
und dabei werden alle Standardwerte überschrieben. Deshalb \PassOptionsToClass
musste davor verschoben werden.