
В tikzpicture я хотел бы применить разные стили к узлам в зависимости от их значений. Например, в списке целых чисел я хотел бы раскрасить узел в красный или синий цвет.
Это всего лишь тест для более крупного проекта, но ответ на этот вопрос в любом случае должен помочь.
Следующий код работает:
\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}
Но мне бы хотелось иметь возможность создавать стиль узла в зависимости от значения узла. Таким образом, я мог бы добавлять больше случаев и использовать строку \node только один раз. Я попробовал самый простой способ добиться этого, но он не работает:
\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}
Короче, я бы хотел иметь серию ifthenelse в tikzstyle. Это тоже не сработало. Кажется, что \ifthenelse не соответствует каждой структуре TikZ...
Заранее спасибо, если вы знаете, как мне с этим помочь.
решение1
Pgf/Tikz имеет свои собственные if-then-else
конструкции, среди прочих математических операторов. Смотрите раздел95.2 Синтаксис математических выражений: операторы руководства.
То, что вы предложили во втором фрагменте, на самом деле можно осуществить с помощью следующего скрипта.
\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}
РЕДАКТИРОВАТЬВот код, в котором случайное число генерируется в интервале целых чисел.
\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}