Transparente Klassenoptionen bei Wrapper-Klassen

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Transparente Klassenoptionen bei Wrapper-Klassen

von Besserwisser » Do 4. Apr 2013, 10:45

Diskussion wird auf komascript.de geführt. Dort gibt es auch erste Lösungen.

Transparente Klassenoptionen bei Wrapper-Klassen

von mrpiggi » Mi 3. Apr 2013, 18:21

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

Nach oben