这看起来应该很简单,但我无法让它工作。我只想画一个圆,中心的 x 坐标由给定数组中的条目指定。例如,假设我想画一个以 为中心的圆(1,1)
,(1,2)
\def\testarray{1,2}
\def\circleHeights{1,2}
\foreach \y in circleHeights {
\filldraw [black] (\testarray[1],\y) circle (1pt);
不起作用。但用 替换\testarray[1]
确实有效1
。如何正确访问数组?我做了一些搜索,并尝试使用\pgfmathparse
和\pgfmathsetmacro
:例如
\foreach \y in circleHeights {
\pgfmathsetmacro{\x}{\testarray[1]}
\filldraw [black] (\x,\y) circle (1pt);
我也尝试过像这样定义的数组,\def\testarray{{1,2}}
因为我也看到过一些类似的例子。我意识到我可以轻松完成上述任务而无需访问数组,但在我实际的情况下,我需要做这样的事情。所以我想找到一种方法来让这种方法奏效
答案1
如果您定义一个宏来存储数组(用于pgfmath
),则必须使用括号:
\def\testarray{{1,2}}
请注意,索引从零开始。
\documentclass[tikz,margin=10pt]{standalone}
\begin{document}
\def\testarray{{1,2}}
\def\circleHeights{{0.5,2}}
\begin{tikzpicture}
\draw[help lines,step=.5](0,0)grid(3,3);
\foreach \i in {0,1}
\filldraw[black] (\testarray[\i],\circleHeights[\i]) circle[radius=1pt];
\end{tikzpicture}
\end{document}
答案2
为了扩展@esdd 的答案,您可以改用二维数组:
\documentclass[tikz,margin=10pt]{standalone}
\begin{document}
\def\testarray{{{1,0.5},{2,2}}}
\begin{tikzpicture}
\draw[help lines,step=.5](0,0)grid(3,3);
\foreach \i in {0,1}
\filldraw[black] (\testarray[\i][0],\testarray[\i][1]) circle[radius=1pt];
\end{tikzpicture}
\end{document}
如您所见,只有一个数组包含成对的坐标。