我想循环一个数组并分别访问每个 x 和 y 坐标,因为我想在节点上使用它们之前修改坐标。
目前,只有在 foreach 循环中直接插入坐标时它才有效,但是我的使用数组的第二个示例不起作用。
\documentclass{minimal}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\def\myarr {
(1.0, 1.1),
(0.5, 1.5),
(1.5, 2)
}
\foreach \x/\y in {1/3, 2/7, 3/8} {
\node () at (\x,\y) {\x and \y};
}
% Not working
%\foreach \x/\y in {\myarr} {
% \node () at (\x,\y) {mynode};
%}
\end{tikzpicture}
\end{document}
我如何使用数组来实现相同的结果?
答案1
您可以循环遍历坐标,即\foreach \X in \myarr { \node () at \X {mynode}; }
在您的示例中有效。如果您想读出x
和y
坐标,您可以这样做
\documentclass{minimal}
\usepackage{tikz}
\def\GetX(#1,#2)#3{\def#3{#1}}
\def\GetY(#1,#2)#3{\def#3{#2}}
\begin{document}
\begin{tikzpicture}
\def\myarr {
(1.0, 1.1),
(0.5, 1.5),
(1.5, 2)
}
\foreach \X in \myarr {
\edef\temp{\noexpand\GetX\X\noexpand\myx
\noexpand\GetY\X\noexpand\myy}
\temp
\node () at \X {\myx\ and \myy};
}
\end{tikzpicture}
\end{document}
答案2
这显示了如何\myarr
解析。实际上,第一个括号被忽略,然后括号内的逗号也被忽略。
\documentclass{minimal}
\usepackage{tikz}
\begin{document}
\def\myarr {{
(1.0, 1.1),
(0.5, 1.5),
(1.5, 2)
}}
\verb|\myarr[0]| = \myarr[0]
\pgfmathparse{\myarr[0]}\pgfmathresult
\pgfmathparse{\myarr[1]}\pgfmathresult
\pgfmathparse{\myarr[2]}\pgfmathresult
\pgfmathparse{\myarr[3]}\pgfmathresult
\end{document}
生产