Seite 1 von 1
Mehrere Parameter innerhalb eines Parameters übergen
Verfasst: Do 5. Sep 2013, 15:28
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?
Verfasst: Do 5. Sep 2013, 15:47
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.
Verfasst: Do 5. Sep 2013, 16:21
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?
Verfasst: Do 5. Sep 2013, 16:40
von u_fischer
Du musst den key definieren, indem du mindestens einen der Handlers benutzt, also z.B.
\pgfkeys{/ueberschrift/.code=#1}
Verfasst: Fr 6. Sep 2013, 09:05
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}