Seite 1 von 1

Transparente Klassenoptionen bei Wrapper-Klassen

Verfasst: Mi 3. Apr 2013, 18:21
von mrpiggi
Hallo zusammen,
ich baue gerade an einer Wrapper-Klasse und habe folgendes -- zugegebener Maßen eher kleine -- Problem. Ich möchte mit neuen Klassenoptionen Befehle der Basis-Klasse (KOMA) anpassen. Der standardmäßige Weg, wie er im clsguide vorgegeben ist, funktioniert deshalb nicht und erzeugt logischerweise einen Fehler:
\RequirePackage{filecontents}
\begin{filecontents}{\jobname.cls}
\newcommand*\myclsname{scrreprt}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{\myclsname}}
\DeclareOption{newopt}{%
  \renewcommand{\chapterheadendvskip}{\vspace*{5\baselineskip}}%
}
\ProcessOptions*\relax
\LoadClass{\myclsname}
\end{filecontents}
\documentclass[chapterprefix,newopt]{\jobname}
\usepackage{blindtext}
\begin{document}
\blinddocument
\end{document}
Natürlich muss die Klasse für diesen Fall vor der Definition der Option geladen werden. Damit diese dennoch die Klassenoptionen sieht, wird diese nicht mit
\LoadClass
sondern durch
\LoadClassWithOptions
aufgerufen.
\RequirePackage{filecontents}
\begin{filecontents}{\jobname.cls}
\newcommand*\myclsname{scrreprt}
\LoadClassWithOptions{\myclsname}
\DeclareOption{newopt}{%
  \renewcommand{\chapterheadendvskip}{\vspace*{5\baselineskip}}%
}
\ProcessOptions*\relax
\end{filecontents}
\documentclass[chapterprefix,newopt]{\jobname}
\usepackage{blindtext}
\begin{document}
\blinddocument
\end{document}
Dieses Vorgehen erzeugt jedoch eine Warnung, dass die hier beispielhaft verwendete Option chapterprefix nicht verwendet wurde, obwohl dies -- wie in der Ausgabe zu sehen -- der Fall ist. In meiner Lösung nutze ich deshalb folgende Konstruktion:
\RequirePackage{filecontents}
\begin{filecontents}{\jobname.cls}
\newcommand*\myclsname{scrreprt}
\LoadClassWithOptions{\myclsname}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{\myclsname}}
\DeclareOption{newopt}{%
  \renewcommand{\chapterheadendvskip}{\vspace*{5\baselineskip}}%
}
\ProcessOptions*\relax
\end{filecontents}
\documentclass[chapterprefix,newopt]{\jobname}
\usepackage{blindtext}
\begin{document}
\blinddocument
\end{document}
Das Einfügen der Zeile
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{\myclsname}}
lässt besagte Warnung verschwinden. Meine Frage ist nun, ob dieses Vorgehen so in Ordnung geht oder vielleicht doch in irgendeiner Form zu Problemen o.ä. führen könnte. Falls ja, wie würde denn eine bessere Lösung aussehen?

Grüße
Falk

Verfasst: Do 4. Apr 2013, 10:45
von Besserwisser
Diskussion wird auf komascript.de geführt. Dort gibt es auch erste Lösungen.