我如何将数组作为参数传递给 tikz 图片?

我如何将数组作为参数传递给 tikz 图片?

我想将一个数组作为第一个参数传递给 a pic。但是,这种简单的方法不起作用:

\documentclass[border=10pt]{standalone}
\usepackage{tikz}

\tikzset{
    ball/.pic = {
        \draw [fill=red] (0,0) circle [radius=4mm];
    },
    balls/.pic = {
        \foreach \pos in #1 {
            \pic at (\pos,0) {ball};
        }
    }
}

\begin{document}

\begin{tikzpicture}
    \draw (0,0) pic {balls={3,5}};
\end{tikzpicture}

\end{document}

我还尝试了应该用于“更复杂的参数”的语法:

pics/balls/.style = {
        code = {
            \foreach \pos in #1 {
                \pic at (\pos,0) {ball};
            }
        }
    }

但这仍然不起作用。

我知道如何将多个参数传递给picwith /.style n args,但这不是我想要做的。

如何实现这一点?

答案1

解决方案非常简单:只需将#1参数括在花括号中即可。应用此类修正后,代码将按预期运行:

\documentclass[border=10pt]{standalone}
\usepackage{tikz}

\tikzset{
    ball/.pic = {
        \draw [fill=red] (0,0) circle [radius=4mm];
    },
    balls/.pic = {
        \foreach \pos in {#1} {
            \pic at (\pos,0) {ball};
        }
    }
}

\begin{document}

\begin{tikzpicture}
    \draw (0,0) pic {balls={0,3,5,7,9}};
\end{tikzpicture}

\end{document}

生产

在此处输入图片描述

为什么需要这样做,已经在对 percusse 的原始帖子的评论,我在此引用:

对此有一个不平凡的答案,但很快。pgfkeys 的参数在每一层嵌套时都会被剥离一次括号。跟踪这件事相当复杂,所以最好是在需要的地方进行保护。有时你必须反过来做,你必须明确地剥离括号,这样它就不会把它看作单个元素等等。

相关内容