Das hier ist eine Nachfolgefrage zu dieser hier. Aufbauend auf Qrrbrbirlbels 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.
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.
vom .list-Handler (bzw. der internen \foreach-Schleife) in folgende Elemente aufgeteilt wird:
start: (1,
2),
mid: (3,
4),
end: (5 und
6).
Das geht beim ersten Element noch gut, weil es dem Argumentenformat #1: #2 noch entspricht; 2) passt aber nicht mehr in #1: #2 rein. Dass \StrBetween auch keine gescheiten Ergebnisse mehr auswirft, brauche ich glaube ich nicht mehr zu erwähnen.
Also, beschützen wir das doofe Komma eben und schmeißen nochmal ein Paar { } außenrum:
Wieviele Elemente in der Liste siehst du? Ich sehe nur einen: \coord. Und \foreach sieht auch nur einen: Es wird nur über ein Element iteriert: \coord. \startx wird dann definiert als
Wenn mid: und end: bearbeitet wurde, expandiert \coord zu 5, 6, und da \startx zu \coords expandiert, expandiert es auch zu 5, 6. Es werden also alle Kreise an der gleichen Stelle gezeichnet.
Bezugnehmend auf:
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.
Ja, hinter .list werkelt eine komplexe \foreach-Loop, allerdings kennt das offizielle \foreach eben die zwei Alternativen:
1
\foreach \var/\iab/\len in {Ele/men/t 1, Ele/men/t 2, …, Ele/men/t n}
Benutze doch direkt Keys start, mid und end, um die Koordinaten zu speichern. (Wenn dir der Doppelpunkt als Trenner so wichtig ist, könntest du xstring vorher auch drüber laufen lassen und alle : durch = austauschen, bevor es PGFkeys bearbeitet.
Ich vermeide auch, die etwas altbackenen /.store in-Keys und verwende den besseren .initial-Handler. Siehe dazu bitte auch die Fragen
Ein paar Styles dazu und man kann die Grafik schon beachtlich beeinflussen. (Bitte beachte, dass Kommas in den Koordinaten selbstverständlich immer noch beschützt werden müssen, wie ich das bei der Initialisierung auch gemacht habe.)
Oh je, viel zu lernen ich noch hab... Vielen Dank für die ausführliche Antwort und auch für den Hinweis, wie ich die "altbackenen" .store ins vermeiden kann (das kam mir auch nie so richtig elegant vor, aber es war der einfachste Weg zum Ziel). Leider ist meine Vorstellung davon wie was genau expandiert sehr begrenzt, weil ich gerade erst anfange mir über die etwas "TeXnischeren" Aspekte von LaTeX Gedanken zu machen, deshalb werden wohl noch häufiger Fragen zu meinen stümperhaften Versuchen mit pgfkeys umzugehen von mir kommen.
Könntest Du mir sagen, warum du in deinem letzten Codebeispiel die TikZ Befehle innerhalb des neu definierten \drawBond Befehls mit \begingroup und \endgroup umhüllt hast?
@carlton Das ist deshalb vorhanden, damit die gesetzten Styles und Keys lokal zu der Anwendung von \drawBond ist. Das macht TikZ quasi überall: Alles was zu beim \path angibst, ist ja auch nur während dieses Pfades gültig. So kannst du sehr einfach allgemeingültige Styles oder Ähnliches setzen und musst dann nur noch das, was sich ändert, angeben.