
Ich lerne gerade TikZ und experimentiere mit einigen Kontrollstrukturen. Kann mir vielleicht jemand mit meinem Code unten helfen?
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{center}
\begin{tikzpicture}
\draw[fill=black] (0,0)circle(0.05) node[above=1.5]{You};
\foreach \(\x,\y) in {(-2,green),(-1,red),(0,black),(1,blue),(2,yellow)}
{
\filldraw[draw=\y] (0,0)--(\x,-1);
\draw[fill=black] (-\x,-1)circle(0.05);
}
\end{tikzpicture}
\end{center}
\end{document}
Ich weiß, dass das Problem von dort kommt, wo ich versuche zu verwenden
\foreach \(\x,\y) in {(-2,green),(-1,red),(0,black),(1,blue),(2,yellow)}
Gibt es eine Möglichkeit, wie TikZ so etwas bewältigen könnte?
Antwort1
Ja, es gibt eine Möglichkeit, das zu tun.
Aus Abschnitt 83/Seite 911 desPGF/TikZ-Handbuch (v3.0.0):
Mehrere Variablen.Sie möchten häufig über zwei Variablen gleichzeitig iterieren. Da Sie Schleifen verschachteln können
\foreach
, ist dies normalerweise unkompliziert. Manchmal möchten Sie jedoch, dass Variablen „gleichzeitig“ iterieren. Beispielsweise erhalten wir möglicherweise eine Liste von Kanten, die zwei Koordinaten verbinden, und möchten möglicherweise über diese Kanten iterieren. Dabei möchten wir, dass die Quelle und das Ziel der Kanten auf zwei verschiedene Variablen festgelegt werden.Um dies zu erreichen, können Sie die folgende Syntax verwenden: Die⟨Variablen⟩darf nicht nur eine einzelne TEX-Variable sein. Stattdessen kann es auch eine Liste von Variablen sein, die durch Schrägstriche (
/
) getrennt sind. In diesem Fall können die Listenelemente auch durch Schrägstriche getrennte Wertelisten sein.Unter der Annahme, dass die⟨Variablen⟩und die Listenelemente sind Listen mit Werten. Jedes Mal, wenn die⟨Befehle⟩ausgeführt werden, jede der Variablen in⟨Variablen⟩wird auf einen Teil der Liste gesetzt, der das aktuelle Listenelement bildet.
Die PGF/TikZ-Dokumentation ist ~sehr detailliert und der gesamte Abschnitt führt Sie \foreach
sehr gut durch die Verwendung von Schleifen. Ich würde nicht empfehlen, alles von Anfang bis Ende durchzulesen, wenn Sie gerade erst anfangen (das gesamte Dokument ist >1000 Seiten lang), aber es ist sehr gut, wenn Sie etwas Neues sehr detailliert lernen möchten.
Ersetzen Sie daher die Zeile
\foreach \(\x,\y) in {(-2,green),(-1,red),(0,black),(1,blue),(2,yellow)}
mit
\foreach \x/\col in {-2/green, -1/red, 0/black, 1/blue, 2/yellow}
Ich würde vorschlagen, die zweite Variable in \col
oder \color
/ umzubenennen \colour
, da dies aussagekräftiger ist. Möglicherweise durchlaufen Sie recht häufig Schleifen über (x,y)-Koordinatenpaare, sodass Sie nicht durcheinander kommen möchten.
So sieht Ihr Beispiel dann aus:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw [fill=black] (0,0) circle (0.05) node [above=1.5] {You};
\foreach \x/\col in {-2/green, -1/red, 0/black, 1/blue, 2/yellow}
{
\filldraw [draw=\col] (0, 0) -- (\x, -1);
\draw [fill=black] (-\x, -1) circle (0.05);
}
\end{tikzpicture}
\end{document}
und so wird es kompiliert:
Antwort2
Selbst wenn es Python-ähnliche Schleifen unterstützen würde, \(
würde es dennoch Probleme verursachen, da es sich beispielsweise um die Öffnung einer Inline-Mathematikumgebung \(\alpha\)
handelt $\alpha$
.
Aber das ist nicht der Fall.
Daher müssen Sie verwenden
\foreach \x/\y in {-2/green,-1/red,0/black,1/blue,2/yellow}