我想\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}