在“foreach”中定义坐标

在“foreach”中定义坐标

我想\foreach根据先前定义的坐标循环定义一组坐标:

\documentclass[tikz]{standalone}
\begin{document}
    \begin{tikzpicture}
        \coordinate (A0) at (0,0);
        
        \foreach \i in {1,...,10}{
            \def\j{\i-1}
            \coordinate (A\i) at A(\j)+(5*\i,\i*\i);
        }
    \end{tikzpicture}
\end{document}

但是,这似乎不起作用,因为(据我所知),TikZ 不会评估\j-1。 有办法解决这个问题吗? 我想避免一遍又一遍地复制粘贴相同的代码。

答案1

你必须使用evaluate

我想A(\j)你的意图是(A\j)

\documentclass[tikz]{standalone}
\begin{document}
    \begin{tikzpicture}
        \coordinate (A0) at (0,0);
        \foreach[evaluate=\i as \j using int(\i-1)] \i in {1,...,10}{
            \coordinate (A\i) at (A\j)+(5*\i,\i*\i);
        }
    \end{tikzpicture}
\end{document}

答案2

这是一个依靠先前的计算来通过使用和\i-1正确定义的解决方案。(A\j)\pgfmathparse\pgfmathresult

翻译通过(5*\i,\i*\i)相应的选项进行转移。

\documentclass[tikz]{standalone}
\begin{document}
    \begin{tikzpicture}
        \coordinate (A0) at (0,0);
        
        \foreach \i in {1,...,10}{
            \pgfmathparse{\i-1}
            \def\j{\pgfmathresult}
            \coordinate (A\i) at ([xshift={5*\i}, yshift={\i*\i}]A\j);
%Test
%           \node (A\i) at ([xshift={5*\i}, yshift={\i*\i}]A\j);
        }
    \end{tikzpicture}
\end{document}

相关内容