Eigene Klasse +keyval als Klassenoption

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


DG1BGS
Forum-Anfänger
Forum-Anfänger
Beiträge: 15
Registriert: Do 6. Mai 2010, 19:36
Wohnort: Ulm

Eigene Klasse +keyval als Klassenoption

Beitrag von DG1BGS »

Hallo zusammen,
ich programmiere gerade meine eigene Latex-Klasse die auf scrbook basiert. Ich möchte nun Klassenoptionen definieren, die neben dem eigentlichen Key, KEY=WERT erhalten und diesen Wert entsprechend abfragen können.

Beispiel: eigene Klasse laden mit:

Code: Alles auswählen

\documentclass[XY=50mm]{MeineKlasse}

Meine eigene Klasse wird also jetzt mit der Option XY geladen und dieser gleichzeitig ein Wert mit übergeben. Aber wie definiere ich jetzt die Option in der "MeineKlasse.cls"

Code: Alles auswählen

\DeclareOption{XY}{WasZuTunIst=#1}
Das funktioniert so natürlich nicht, da mir auch noch völlig unklar ist, wie ich ihm überhaupt mittelen kann, dass es sich bei "XY" um ein keyval handelt.

Habt ihr irgendwelche Voschläge?
LG Stephan

phi
Moderator
Moderator
Beiträge: 420
Registriert: Fr 6. Feb 2009, 21:28

Beitrag von phi »

Hallo,
für Schlüssel-Wert-Optionen musst du eines der Dutzenden Pakete benutzen, die es dafür gibt, z.B. kvoptions, kvsetkeys, l3keys2e, scrbase, xkeyval...

DG1BGS
Forum-Anfänger
Forum-Anfänger
Beiträge: 15
Registriert: Do 6. Mai 2010, 19:36
Wohnort: Ulm

Beitrag von DG1BGS »

phi hat geschrieben:Hallo,
für Schlüssel-Wert-Optionen musst du eines der Dutzenden Pakete benutzen, die es dafür gibt, z.B. kvoptions, kvsetkeys, l3keys2e, scrbase, xkeyval...
Danke für den guten Hinweis. Ich hatte bisher über pgfkeys gelesen, war mir aber unsicher ob das auch für Optionen einer eigenen Klasse geeignet ist. Nun habe ich mich in "kvoptions" eingearbeitet und ein Minalmalbeispiel konstruiert.

Die Klassendatei:

Code: Alles auswählen

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{keyvaltest}

\RequirePackage{ifthen}
\RequirePackage[patch]{kvoptions}


\SetupKeyvalOptions
{
  family = mrm,
  prefix = mrm@
}

\DeclareStringOption[0mm]{bincor}

\ProcessKeyvalOptions* %diese Zeile erzeugt die "falsche" Warnung
\ProcessOptions\relax

\LoadClass[12pt,a4paper]{scrbook}

\evensidemargin=-\mrm@bincor
\oddsidemargin=\mrm@bincor
Die tex-Datei:

Code: Alles auswählen

\documentclass[bincor=5mm]{keyvaltest}
\usepackage{blindtext}

\begin{document}
	\Blindtext
\end{document}
Der dem Key übergebene Wert wird richtig verarbeitet. Da meine spätere Klasse aber auch standard-Optionen verarbeiten möchte, bekomme ich bei der Verwendung der beiden Befehle

Code: Alles auswählen

\ProcessKeyvalOptions*
\ProcessOptions\relax
miteinander die Warnung:

Code: Alles auswählen

LaTeX Warning: Unused global option(s):
    [bincor=5mm].
Hat jemand eine Idee wie ich diese Warnung unterdrücken kann? Der Benutzer soll später nicht das Gefühl haben, dass etwa seine Option falsch wäre, denn sie ist es ja nicht!

Lg Stephan
Dateianhänge
keyvaltest.cls.txt
".txt" entfernen!
(405 Bytes) 682-mal heruntergeladen
keyvaltest.tex
(111 Bytes) 659-mal heruntergeladen

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2641
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

Du hast die Wahl. Entweder Du definierst die Standardoptionen über das kvoptions-Interface beispielsweise als \DeclareVoidOption oder Du verwendest statt kvoptions ein Paket, das ein Nebeneinander von klassischen Optionen und key-value-Optionen beherrscht (beispielsweise scrbase).

DG1BGS
Forum-Anfänger
Forum-Anfänger
Beiträge: 15
Registriert: Do 6. Mai 2010, 19:36
Wohnort: Ulm

Beitrag von DG1BGS »

KOMA hat geschrieben:Du hast die Wahl. Entweder Du definierst die Standardoptionen über das kvoptions-Interface beispielsweise als \DeclareVoidOption oder Du verwendest statt kvoptions ein Paket, das ein Nebeneinander von klassischen Optionen und key-value-Optionen beherrscht (beispielsweise scrbase).
Ich hatte es fast befürchtet :roll: Nun habe ich alle bisherigen Optionen mit "kvoptions" realisiert und die Warnung ist verschwunden. Alles wieder prima!

Antworten