PDA

View Full Version : Parameter an Klassendatei übergeben



André25
28-07-2012, 17:46
Hallo Freunde!

Ich habe (mit Hilfe) eine kleine Klassendatei geschrieben (apa6g (https://bitbucket.org/Andre25/apa6g)). In der Klassendatei apa6g.cls wird die Klasse apa6 (http://www.ctan.org/pkg/apa6) geladen.

Die apa6-Klasse sieht 3 verschiedene Modi vor, von denen eine bei den optionalen Argumenten bei Laden der Klassendatei anzugeben ist. Das sind die Modi: man, jou und doc. Da ich eigentlich nur den man-Mode benötige, habe ich ihn so in die apa6g.cls geschrieben.

Leider schränkt das aber die Möglichkeiten der apa6-Klasse ein. Meine Frage wäre nun, was ich in der TeX-Datei, in der ich die apa6g-Klasse lade, eingeben kann/muss, um die verschiedenen Modi nutzen zu können?

Vielleicht ist das zu umständlich ausgedrückt, deshalb hier noch mal die entsprechenden Quelltexte. Aus meinem TeX-Dokument:


\documentclass[ngerman]{apa6g}

Aus der apa6g.cls:


\LoadClass[a4paper,man,biblatex,babel,noextraspace]{apa6}

Statt der Option man gibt es eben noch die beiden weiteren Modi.

Was kann ich nun also tun, um diese von meiner TeX-Datei aus zu laden?


Herzlichen Dank, André :)

sommerfee
28-07-2012, 19:08
Schaue mal in den clsguide ("texdoc clsguide"), insbesondere Abschnitt "3.3 Declaring options".

In Kürze: Du kannst Optionen auch vor dem Laden der Klasse apa6 mit \PassOptionsToClass für das spätere Laden vormerken. So hast du die Möglichkeit, Optionen wie "man", "jou" und "doc" selber zu behandeln und unbekannte Optionen an apa6 weiterzureichen, z.B. so:



% Die Optionen "man", "jou" und "doc" so definieren, daß sie jeweils \apasixg@mode setzen
\DeclareOption{man}{\def\apasixg@mode{man}}
\DeclareOption{jou}{\def\apasixg@mode{jou}}
\DeclareOption{doc}{\def\apasixg@mode{doc}}
% Alle anderen Optionen transparent an apa6 durchreichen
\DeclareOption*{\PassOptionsToClass{\CurrentOption }{apa6}}
% "a4paper,man,biblatex,babel,noextraspace" ausführen, "man" belegt hierbei lediglich \apasixg@mode vor
\ExecuteOptions{a4paper,man,biblatex,babel,noextra space}
% Optionen des Anwenders ausführen (z.B. "doc,ngerman")
\ProcessOptions\relax
% \apasixg@mode ist nun gesetzt, also an apa6 weiterreichen
% (Ist das \@expandtwoargs wirklich notwendig? Keine Ahnung, aber auf jeden Fall schadet es hier nicht.)
\@expandtwoargs\PassOptionsToClass{\apasixg@mode}{ apa6}
% apa6 mit all den vorgemerkten Optionen laden
\LoadClass{apa6}


Nun kann man deine Klasse mit \documentclass[ngerman]{apa6g} laden, dies würde den "man"-Modus verwenden, da dieser voreingestellt ist. \documentclass[jou,ngerman]{apa6g} hingegen würde den "jou"-Modus von apa6 verwenden.

(Viel einfacher wäre es, wenn sich in apa6.cls die Optionen "man", "jou" und "doc" jeweils überschreiben würden, für mich sieht es allerdings so aus, als wäre apa6.cls auf die Angabe von mehr als einer der drei Modi nicht vorbereitet, daher die etwas umständliche Lösung oben.)

P.S.: Danke für den indirekten Hinweis auf den Fehler im endfloat-Paket. Ich werde das in die nächste Version, die ich (hoffentlich) im August (endlich) veröffentlichen werde, einpflegen.

André25
28-07-2012, 23:32
Vielen Dank -- das sieht richtig gut aus. Ich hatte tatsächlich schon mal in den clsguide geschaut, aber irgendwie sind solche Dinge noch zu hoch für mich.

Ein kleines Problem gibt es dennoch. Nachdem ich die Lösung so eingearbeitet habe, werden die Überschriften (Kolumnentilel, Zusammenfassung, usw.) nicht mehr übersetzt.

Ich habe mir die Optionen angeschaut, die jetzt durchgereicht werden. Es sind die gleichen wie zuvor -- woran kann das also liegen?

Besten Dank, André :cool:

sommerfee
29-07-2012, 06:46
Mea culpa, ersetze


\ExecuteOptions{a4paper,man,biblatex,babel,noextra space}

durch


\PassOptionsToClass{a4paper,biblatex,babel,noextra space}{apa6}
\ExecuteOptions{man}

denn \DeclareOption* greift bei \ExecuteOptions nicht, sondern nur bei denjenigen Optionen, die der Anwender beim Laden der Klasse angegeben hat.

(BTW: Das \@expandtwoargs ist nicht notwendig.)

klops
29-07-2012, 10:03
Warum nicht einfach:


\PassOptionsToClass{a4paper,man,biblatex,babel,noe xtraspace}{apa6}
\LoadClassWithOptions{apa6}

Dabei werden schlicht alle Optionen auch an die Basisklasse apa6 weitergeleitet. Probleme bekommt man damit nur, wenn die Wrapperklasse zusätzliche Optionen deklariert, die die Basisklasse nicht kennt. Oder sehe ich das irgendwie falsch?

PS: Bin gerade im Urlaub und nur online, weil es regnet.

sommerfee
29-07-2012, 10:20
Warum nicht einfach:

Dazu zitiere ich mich mal selber:

(Viel einfacher wäre es, wenn sich in apa6.cls die Optionen "man", "jou" und "doc" jeweils überschreiben würden, für mich sieht es allerdings so aus, als wäre apa6.cls auf die Angabe von mehr als einer der drei Modi nicht vorbereitet, daher die etwas umständliche Lösung oben.)

André25
29-07-2012, 18:56
Hallo sommerfee!

Nun läuft es -- vielmals danke!

Grüße vom André :cool: