Schlüssel-Wert-Klassenoptionen als verwendet markieren

Schlüssel-Wert-Klassenoptionen als verwendet markieren

Ich habe einen Wrapper für die scrartclKlasse 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 scrartcllike angeben DIV=12und diese dennoch überschreiben, indem ich

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

Das Problem, das ich habe, ist, dass srcartcldie anderen Optionen, z. B., title=mytitleals 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 Companionund das Problem selbst gelöst.

Entgegen meiner vorherigen Annahme funktionieren \PassOptionsToClassund \LoadClassWithOptionsnicht zusammen. Der Sinn von \LoadClassWithOptionsbesteht darin, genau dieselben Argumente zu übergeben, die die aktuelle Klasse erhalten hat. Wenn Sie hier also auf wechseln, \LoadClasswerden 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 kvoptionsist \DeclareDefaultOptionein Ä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=10wird sie an weitergeleitet scrartclund dabei werden alle Standardwerte überschrieben. Deshalb \PassOptionsToClassmusste davor verschoben werden.

verwandte Informationen