使用 foreach 循环增加所有 x 坐标

使用 foreach 循环增加所有 x 坐标

给定一个具有 x 和 y 坐标的两条线的图形,我想复制该图形并将所有 x 坐标增加相同的整数(在此示例中为 3)。我尝试使用 foreach 循环,但它不起作用。

\documentclass[tikz]{standalone}
\usetikzlibrary{math}

\begin{document}
\begin{tikzpicture}
\draw[gray!40!] (-0.5,-0.5) grid (6.5,4.5);
\tikzmath{
    int \x1; int \x2;
    \x1 = 0; \x2 = 2;
}
\draw[black,thick] (\x1,2)  -- (\x2,2);
\foreach \X in {\x1,\x2}{
    \X=\X+3;
}
\draw[black,thick] (\x1,2)  -- (\x2,2);
\end{tikzpicture}
\end{document}

我猜我使用的语法不对。但是我希望有一个代码,我只需要更改一个数字(这里是 3),然后我的所有 x 坐标都会根据这个数字进行更改。

答案1

您尝试的方法不起作用,因为在该上下文中没有求值。您应该做的是使用第二个\tikzmath,如以下示例所示:

\documentclass[tikz]{standalone}
\usetikzlibrary{math}

\begin{document}
\begin{tikzpicture}
\draw[gray!40!] (-0.5,-0.5) grid (6.5,4.5);
\tikzmath{
    int \x1; int \x2;
    \x1 = 0; \x2 = 2;
}
\draw[black,thick] (\x1,2)  -- (\x2,2);

\tikzmath{
  for \X in {1,2}{
     \x\X=\x\X+3;
  };
}
\draw[black,thick] (\x1,2)  -- (\x2,2);
\end{tikzpicture}
\end{document}

移动一条(或多条)路径的更常见方式是使用shift={(x,y)},作为特定路径的选项,或者作为scope环境的选项,如下所示(这些declare function内容只是制作常量的另一种方式,您也可以使用这些\tikzmath内容):

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[
  declare function={
    x1=0;
    x2=2;
  }
]
\draw[gray!40!] (-0.5,-0.5) grid (6.5,4.5);

\draw[black,thick] (x1,2)  -- (x2,2);

\begin{scope}[shift={(3,0)}]
  \draw[black,thick] (x1,2)  -- (x2,2);
\end{scope}
\end{tikzpicture}
\end{document}

两个示例都给出相同的输出:

enter image description here

相关内容