Mehrere Parameter innerhalb eines Parameters übergen

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


Heinrich

Mehrere Parameter innerhalb eines Parameters übergen

Beitrag von Heinrich »

Ich möchte einen eigenen Befehl definieren, der sehr viele Parameter hat. Damit ich nicht die Übersicht verliere, möchte ich meinen Befehl auf folgende Art aufrufen können:
\meinbefehl{parameter1=wert1,parameter2=wert2,parameter3=wert3, ... ,parametern=wertn}
Das bedeutet, dass ich alle Parameter in einem Parameter übergebe, ähnlich wie z.B. bei \sisetup aus dem siunitx-Paket. Gibt es dafür bereits eine fertige Möglichkeit oder muss man LaTeX so etwas selbst beibringen?

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4300
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Beitrag von u_fischer »

Dafür gibt diverse keyval-Pakete:

http://tex.stackexchange.com/questions/ ... al-package

https://tug.org/TUGboat/tb30-1/tb94wright-keyval.pdf
https://tug.org/TUGboat/tb31-1/tb97wright-l3keys.pdf


Welches man nimmt ist im Wesentlichen Geschmackssache. Wenn man sowieso expl3 benutzt, ist l3keys sinnvoll. Wenn pgf sowieso geladen wird, ist pgfkeys auch eine gute Wahl - allerdings irritiert mich da immer, dass die Definition und die Nutzung eines keys mit dem gleichen Befehl \pgfkeys gemacht wird, zwei getrennte Befehle finde ich übersichtlicher.

Heinrich

Beitrag von Heinrich »

Da ich ohnehin TikZ benutze, habe ich mich für das pgfkeys-Paket entschieden. Um dieses auszuprobieren, habe ich folgendes Minimalbeispiel konstruiert:
\documentclass{scrartcl}

\usepackage{pgfkeys}

\newcommand{\meinbefehl}[1]{\pgfkeys{#1}\Large{\pgfkeysvalueof{/ueberschrift}}\rule{\linewidth}{\pgfkeysvalueof{/breite}}\pgfkeysvalueof{/text}}

\begin{document}

\meinbefehl{/ueberschrift = {Hallo!}, /text = {Das ist ein Text}, /breite = 0.5mm}

\end{document}
Beim Kompilieren gibt er mir aber immer den Fehler aus: "I do not know the key '/ueberschrift' and I am going to ignore it. Perhaps you mispelled it" Habe ich etwas falsch verstanden?

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4300
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Beitrag von u_fischer »

Du musst den key definieren, indem du mindestens einen der Handlers benutzt, also z.B.

\pgfkeys{/ueberschrift/.code=#1}

Heinrich

Beitrag von Heinrich »

Das erste PDF-Dokument hat mir geholfen. Dieser Code macht jetzt, was er soll (auch wenn es mir ein wenig umständlich vorkommt):
\documentclass{scrartcl}

\usepackage{pgfkeys}

\pgfkeys{/ueberschrift/.initial={}}
\pgfkeys{/breite/.initial={}}
\pgfkeys{/text/.initial={}}

\newcommand{\meinbefehl}[1]{\pgfkeys{#1}
\pgfkeysgetvalue{/ueberschrift}{\macro}
\textbf{\macro}

\pgfkeysgetvalue{/breite}{\macro}
\rule{\linewidth}{\macro}
\pgfkeysgetvalue{/text}{\macro}
\macro}

\begin{document}

\meinbefehl{/ueberschrift = {Hallo!}, /text = {Das ist ein Text}, /breite = {0.5mm}}

\end{document} 

Antworten