我过去常常通过书写2\x
来获取产品2*x
,但是今天我发现这不再正确了TiKZ
。
下一个代码
\documentclass[tikz,border=2mm]{standalone}
\begin{document}
\begin{tikzpicture}[x=2cm,y=0.5cm]
\foreach \i in {0,...,3}
\foreach \j in {0,...,3} {
\draw[black] (\i,\j) circle[radius=2pt];
\draw[blue] (2\i,2\j) circle[radius=2pt];
\draw[red] (2*\i,2*\j) circle[radius=1pt];
}
\end{tikzpicture}
\end{document}
给我
如您所见,所有通过计算坐标的蓝色圆圈位置(2\i, 2\j)
都错误,而通过计算坐标的红色圆圈(2*\i,2*\j)
位置正确。
我不记得读过任何有关*
产品添加的内容,TiKZ
但当然,我可能是错的。那么,这是一种已知行为吗?它在哪里有记录?
答案1
不使用它的一个简单原因是 TikZ 会尽可能扩展其参数(在某些情况下它可能不会扩展宏):
\foreach \i in {0,1} {
\draw (2\i,0) circle (2pt);
}
将产生这些命令
\draw (20,0) circle (2pt);
\draw (21,0) circle (2pt);
然后它将对应于坐标乘以当前x
和y
单位向量(1cm 是两者的默认值),这显然不是意图。
提供星号(*
)将使 TikZ 切换到 pgfmath 解析,然后计算结果
\foreach \i in {0,1} {
(2*\i,0)
}
并将产生:
\draw (0,0) circle (2pt);
\draw (2,0) circle (2pt);
或者,如果变量是一个维度,那么左隐含乘法是一个有效的 TeX 操作,例如.5\textwidth,2\pageheight
等。然后 Tikz 将维度计算读取为单个参数并正确扩展。