Das hier ist eine Nachfolgefrage zu dieser hier. Aufbauend auf Qrrbrbirlbel
s Antwort, hab ich etwas rumprobiert und wollte versuchen ein "dictionary" der Form {key1: (x1, y1), key2: (x2, y2),...
mit Hilfe von pgfkeys
so zu verarbeiten, dass ich die einzelnen x und y Koordinaten in eigene macros extrahiere um sie später nutzen zu können.
\documentclass{standalone}
\usepackage[svgnames]{xcolor}
\usepackage{tikz}
\usepackage{xstring}
\newcounter{coordcounter}
\setcounter{coordcounter}{23}
\pgfkeys{
util/coord extractor/.style={
util/@coord extractor/.list={#1}
},
util/@coord extractor/.code args={#1: #2}{
\def\tempcoordkey{#1}
\StrBetween{#2}{(}{)}[\coord]
\pgfkeys{
util/@@coord extractor/.list={\coord},
bonds/counter/set={coordcounter}{23}
}
},
util/@@coord extractor/.code={
\pgfkeys{
/bonds/counter/step={coordcounter},
\savedpath/\tempcoordkey/\alph{coordcounter}={#1}
}
},
bonds/counter/set/.code 2 args={\setcounter{#1}{#2}},
bonds/counter/step/.code={\stepcounter{#1}},
bonds/bond points/start/x/.store in={\startx},
bonds/bond points/start/y/.store in={\starty},
bonds/bond points/mid/x/.store in={\midx},
bonds/bond points/mid/y/.store in={\midy},
bonds/bond points/end/x/.store in={\endx},
bonds/bond points/end/y/.store in={\endy},
bonds/bond points/.code={
\def\savedpath{/bonds/bond points}
\pgfkeys{
util/coord extractor={#1}
}
}
}
\begin{document}
\begin{tikzpicture}
\pgfkeys{/bonds/bond points={start: (1, 2), mid: (3, 4), end: (5, 6)}}
\draw (\startx, \starty) circle [radius=1cm];
\draw (\midx, \midy) circle [radius=2cm];
\end{tikzpicture}
\end{document}
Während ich ein ähnliches Beispiel, bei dem die Koordinaten von {
statt (
umhüllt sind und bei dem ich entsprechend auch keinen \StrBetween
Befehl benötigt habe um die Koordinaten in eine Listenform zu bringen, zum Laufen bekommen habe, kann ich hier jedoch nicht verstehen, wo das Problem liegt. Ich habe stundenlang rumprobiert, ohne Erfolg. Auch aus der Fehlermeldung werde ich nicht schlauer. Wo ist das Problem bei der Benutzung von \StrBetween{#2}{(}{)}[\coord]
um mir eine Liste für den .list
handler zu erzeugen - ein Test des so erzeugten Makros \coord
in einem \foreach
Loop hat nämlich funktioniert und ich dachte beim .list
handler werkelt eben ein solcher \foreach
Loop im Hintergrund.