
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 行を 1 回だけ使用できます。これを実現する最も簡単な方法を試しましたが、うまくいきませんでした。
\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
if-then-else
Pgf/Tikzには、他の数学演算子に加えて独自の構造があります。セクションを参照してください。95.2 数式の構文: 演算子 マニュアルの。
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}