Ich versuche eine Wrapper-Klasse zu schreiben. Ich habe dabei das Problem, dass die Unused-options-Warnung nicht wie gewünscht funktioniert. Ich habe dabei sowohl mit Bei meinem Minimalbeispiel bekomme ich unerwünschte Warnungen für Optionen von Open in Online-Editor
\begin{filecontents}{mwe.cls} \ProvidesClass{mwe}[2015/12/15 non sense class]% \LoadClassWithOptions{scrartcl}% \RequirePackage{mwe} \DefineFamily{mwe}% Key Family with scrbase \DefineFamilyMember{mwe}% add \@currname.\currfile to family \FamilyBoolKey{mwe}{foo}{mwe@foo}% create bool option foo \DeclareOption*{\expandafter\PassOptionsToClass\expandafter{\CurrentOption}{scrartcl}} \FamilyProcessOptions{mwe}\relax %\FamilyProcessOptions[.scrartcl.cls]{KOMA}\relax \ifmwe@foo \setkomafont{disposition}{\rmfamily} \fi \end{filecontents} \documentclass[twoside,foo,bar]{mwe} \begin{document} \blinddocument \end{document} Die Warnung lautet
Kommentiere ich die folgende Zeile ein, Open in Online-Editor
\FamilyProcessOptions[.scrartcl.cls]{KOMA}\relax erhalte ich
Wenn ich hingegen Open in Online-Editor
\DeclareOption*{\expandafter\PassOptionsToClass\expandafter{\CurrentOption}{scrartcl}} einkommentiere bekomme ich gar keine Warnung mehr, obwohl die Option gefragt 15 Dez '15, 09:15 sudo |
Das Verhalten ist korrekt. Ohne die Zeile Open in Online-Editor
\DeclareOption*{\expandafter\PassOptionsToClass\expandafter{\CurrentOption}{scrartcl}} bekommt Mit der Zeile jedoch, verwendet aus LaTeX-Sicht Deine Klasse diese Optionen bereits. Also werden sie aus der Liste der unbenutzten Optionen gestrichen. Gleichzeitig bekommt aber Was ist also die Lösung? Die Lösung besteht darin, die grundlegende Klasse erst zu laden, nachdem man die eigenen Optionen abgearbeitet hat. Damit die grundlegende Klasse dann nur die Optionen bekommt, die von der eigenen Klasse nicht bereits verarbeitet wurden, darf man sie natürlich nicht mit Open in Online-Editor
\RequirePackage{filecontents} \begin{filecontents}{mwe.cls} \ProvidesClass{mwe}[2015/12/15 non sense class]% \RequirePackage{mwe} \RequirePackage{scrbase} \DefineFamily{mwe}% Key Family with scrbase \DefineFamilyMember{mwe}% add \@currname.\currfile to family \FamilyBoolKey{mwe}{foo}{mwe@foo}% create bool option foo \DeclareOption*{\expandafter\PassOptionsToClass\expandafter{\CurrentOption}{scrartcl}} \FamilyProcessOptions{mwe}\relax \LoadClass{scrartcl}% \end{filecontents} \documentclass[twoside,foo,bar]{mwe} \begin{document} \blinddocument \end{document} Das ergibt korrekt die Meldung:
Dass ein nachgeschobenes beantwortet 15 Dez '15, 09:45 saputello |
Jetzt hab ich doch noch eine Lösung gefunden. Es ist natürlich Unsinn die Klasse zu laden und hinterher mit
Es müssen als erstes die Optionen der Wrapper-Klasse definiert und abgearbeitet werden, bevor die Klasse ( Open in Online-Editor
\begin{filecontents}{mwe.cls} \ProvidesClass{mwe}[2015/12/15 non sense class]% \RequirePackage{scrbase} \RequirePackage{mwe} \DefineFamily{mwe}% Key Family with scrbase \DefineFamilyMember{mwe}% add \@currname.\currfile to family \FamilyBoolKey{mwe}{foo}{mwe@foo}% create bool option foo \DeclareOption*{\expandafter\PassOptionsToClass\expandafter{\CurrentOption}{scrartcl}} \FamilyProcessOptions{mwe}\relax \LoadClass{scrartcl}% \ifmwe@foo \setkomafont{disposition}{\rmfamily} \fi \end{filecontents} \documentclass[twoside,foo,bar]{mwe} \begin{document} \blinddocument \end{document} Dieses Beispiel gibt korrekt die Warnung
beantwortet 15 Dez '15, 09:31 sudo 2
Uups. Ich hatte Deine eigene Lösung glatt übersehen. Ich lasse meine Antwort jetzt trotzdem stehen, weil ich darin noch versucht habe, ein paar Hintergründe anzureißen.
(15 Dez '15, 10:35)
saputello
|
Ich hab jetzt zwar eine Lösung gefunden. Wenn aber jemand noch erklären könnte, was in welchem Fall genau passiert, wäre ich dafür dankbar.
Warum das (erneute) abarbeiten der
scrartcl
-Optionen die Optionfoo
wieder in die Liste der unused options schreibt, hab ich nach wie vor nicht verstanden.Sehr schöne Frage! Mit der Verarbeitung von Optionen durch
\LoadClass
und\LoadClassWithOptions
tun sich einige Paketautoren schwer.