
In einem Tikzpicture möchte ich Knoten je nach ihren Werten unterschiedliche Stile zuweisen. In einer Liste mit Ganzzahlen möchte ich beispielsweise den Knoten rot oder blau einfärben.
Dies ist nur ein Test für ein größeres Projekt, aber eine Antwort darauf sollte trotzdem hilfreich sein.
Der folgende Code funktioniert:
\documentclass{article}
\usepackage{tikz}
\usepackage{pgffor}
\usepackage{ifthen}
\begin{document}
\begin{tikzpicture}
\pgfmathdeclarerandomlist{nums}{{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}}
\foreach \x in {1,...,10}
{
\pgfmathrandomitem{\choice}{nums}
\ifthenelse{\choice<5}
{
\node[circle, fill=blue!50] at (\x,0) {\choice};
}
{
\node[circle,fill=red!50] at (\x,0) {\choice};
}
}
\end{tikzpicture}
\end{document}
Was ich aber gerne tun würde, ist, einen Knotenstil zu erstellen, der vom Wert des Knotens abhängt. Auf diese Weise könnte ich weitere Fälle hinzufügen und die Zeile \node nur einmal verwenden. Ich habe versucht, dies auf die einfachste Weise zu erreichen, aber es funktioniert nicht:
\begin{tikzpicture}
\pgfmathdeclarerandomlist{nums}{{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}}
\foreach \x in {1,...,10}
{
\pgfmathrandomitem{\choice}{nums}
\def\clr{\ifthenelse{\choice<5}{blue!50}{red!50}}
\node[circle, fill=\clr] at (\x,0) {\choice};
}
\end{tikzpicture}
Kurz gesagt, ich hätte gern eine Reihe von ifthenelse in einem TikZ-Stil. Das hat auch nicht funktioniert. Scheint, als ob \ifthenelse nicht mit jeder TikZ-Struktur übereinstimmt ...
Vielen Dank im Voraus, wenn Sie wissen, wie Sie mir hierbei helfen können.
Antwort1
Pgf/Tikz hat seine eigenen if-then-else
Konstrukte, neben anderen mathematischen Operatoren. Siehe Abschnitt95.2 Syntax für mathematische Ausdrücke: Operatoren des Handbuchs.
Was Sie in Ihrem zweiten Snippet vorgeschlagen haben, kann tatsächlich mit dem folgenden Skript erreicht werden.
\documentclass{article}
\usepackage{tikz}
\usepackage{pgffor}
\usepackage{ifthen}
\tikzset{
conditionalcolor/.style={circle,fill=#1}
}
\begin{document}
\begin{tikzpicture}
\pgfmathdeclarerandomlist{nums}{{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}}
\foreach \x in {1,...,10}{
\pgfmathrandomitem{\choice}{nums}
\pgfmathsetmacro{\col}{ifthenelse(\choice<5,"blue!50","red!50")}
\node[conditionalcolor=\col] at (\x,0) {\choice};
}
\end{tikzpicture}
\end{document}
BEARBEITENHier ist ein Code, bei dem die Zufallszahl in einem Intervall von ganzen Zahlen generiert wird.
\documentclass{article}
\usepackage{tikz}
\tikzset{
conditionalcolor/.style={circle,fill=#1}
}
\begin{document}
\begin{tikzpicture}
\foreach \x in {1,...,10}{
\pgfmathtruncatemacro{\choice}{random(0,9)}
\pgfmathsetmacro{\col}{ifthenelse(\choice<5,"blue!50","red!50")}
\node[conditionalcolor=\col] at (\x,0) {\choice};
}
\end{tikzpicture}
\end{document}