我正在继续研究“可变”图形。我有一个值数组,并且已经成功地从中创建了变量。下一步是我想忽略零值。这就是我遇到的问题:
\pgfmathifthenelse{\myq==0}{}{\fill (B) circle (4pt)};
B
我认为此代码应该在变量\myq
具有非零值的情况下在节点中绘制一个圆圈。但我甚至无法编译代码,编译冻结。你能找出可能的问题或给出建议吗?
整个代码如下:
\begin{tikzpicture}
\def\zamkl{{3,4,4.5,5}}
\def\zamkh{{4,3.5,5,4.5}}
\def\zamkq{{20,0,30,0}}
\pgfmathparse{\zamkl[0]}
\edef\myl{\pgfmathresult}
\pgfmathparse{\zamkh[0]}
\edef\myh{\pgfmathresult}
\pgfmathparse{\zamkq[0]}
\edef\myq{\pgfmathresult}
\draw[help lines] (0,0) grid (2*\myl,2*\myh);
\coordinate (A) at (0,0);
\coordinate (B) at (\myl,0); \node at (B) [below] {$T$};
\coordinate (C) at (2*\myl,0);
\coordinate (D) at (2*\myl,\myh); \node at (D) [left] {$S$};
\coordinate (E) at (2*\myl,2*\myh);
\coordinate (F) at (\myl,2*\myh); \node at (F) [below] {$R$};
\coordinate (G) at (0,2*\myh);
\coordinate (H) at (0,\myh); \node at (H) [right] {$W$};
\draw [very thick] (A) -- (C) -- (E) --(G) -- (A);
\pgfmathifthenelse{\myq==0}{}{\fill (B) circle (4pt)};
\end{tikzpicture}
答案1
使用 pgfmath 的正确语法是
\pgfmathifthenelse{\myq==0}{}{"\noexpand\fill (B) circle (4pt);"}\pgfmathresult
或者
\pgfmathparse{\myq==0?:"\noexpand\fill (B) circle (4pt);"}\pgfmathresult
每个表达式\edef
在解析之前都会用 进行扩展。使用\noexpand
可防止\fill
这种扩展。并且一如既往地\pgfmathifthenelse
在宏中返回结果\pgfmathresult
。