在定义 \ifthenelse 语句的检查条件时,如何正确引用使用 \pgfmathsetmacro 定义计算的值?
示例问题;随机分散圆圈内的节点......
使用 {1>0.5} 作为我的 \ifthenelse 检查条件,以下 Tikz 图片图按预期工作;
\documentclass{standalone}
\usepackage{ifthen, tikz, pgfplots} \usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\foreach \i in {1,...,10}{
\pgfmathsetmacro{\r}{random()}
\pgfmathsetmacro{\theta}{random()*360}
\pgfmathsetmacro{\weight}{random()}
\pgfmathsetmacro{\x}{\r*sin(\theta)}
\pgfmathsetmacro{\y}{\r*cos(\theta)}
\ifthenelse{1>0.5}{\node[circle, inner sep=1pt, fill=black] (\i) at (\x,\y) {};}{}
}
\end{tikzpicture}
\end{document}
但是,当考虑下面依赖于循环的 \ifthenelse 检查条件 {\weight>0.5} 时,我就没有那么幸运了;
\documentclass{standalone}
\usepackage{tikz, pgfplots} \usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\foreach \i in {1,...,10}{
\pgfmathsetmacro{\r}{random()}
\pgfmathsetmacro{\theta}{random()*360}
\pgfmathsetmacro{\weight}{random()}
\pgfmathsetmacro{\x}{\r*sin(\theta)}
\pgfmathsetmacro{\y}{\r*cos(\theta)}
\ifthenelse{\value{\weight}>0.5}{\node[circle, inner sep=1pt, fill=black] (\i) at (\x,\y) {};}{}
}
\end{tikzpicture}
\end{document}
这是语法错误,还是更复杂的问题?我无论如何也想不出为什么它不能正确编译...
答案1
由于似乎没有进一步的想法,我会将 percusse 的评论(以上)转换为可接受的答案,并关闭这个问题......
你不需要
ifthen
,例如使用,\pgfmathparse{(\weight>0.5)?1:0}\ifdim\pgfmathresult pt>0pt\node[circle, inner sep=1pt, fill=black] (\i) at (\x,\y) {};\fi
[所有荣誉归功于打击乐]