pgfkeys: Wie nutze ich eine mit xstring generierte Liste in einem .list handler?
Das hier ist eine Nachfolgefrage zu dieser [hier][1]. 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.
[1]: http://texwelt.de/wissen/fragen/1727/wie-erzeuge-ich-eine-iterierbare-liste-aus-xstring-output