我想将一个数组作为第一个参数传递给 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};
}
}
}
但这仍然不起作用。
我知道如何将多个参数传递给pic
with /.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 的参数在每一层嵌套时都会被剥离一次括号。跟踪这件事相当复杂,所以最好是在需要的地方进行保护。有时你必须反过来做,你必须明确地剥离括号,这样它就不会把它看作单个元素等等。