使用 `TiKZ 3.0` 解析产品 `2\x` 时出现问题

使用 `TiKZ 3.0` 解析产品 `2\x` 时出现问题

我过去常常通过书写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);

然后它将对应于坐标乘以当前xy单位向量(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 将维度计算读取为单个参数并正确扩展。

相关内容