如何在具有宏输入的 tikzpicture 环境中使用 foreach?

如何在具有宏输入的 tikzpicture 环境中使用 foreach?

我在 tikzpicture 环境中使用 foreach 循环在我的文档中绘制图片,如这个简化的示例:

\documentclass{standalone}
\usepackage{tikz}

\newcommand{\drawBoxes}[1]{
  \begin{tikzpicture}
    \foreach \y\x\char in {#1}
    {
      \node at (\x*20pt, -\y*20pt) {\char};
    }
  \end{tikzpicture}
}

\begin{document}
\drawBoxes{1/1/a, 1/2/b, 2/1.5/c}
\end{document}

其结果如下:

输出

在我的实际文档中,foreach 循环中使用的文本来自使用 pgfkeys 解析的可选命令参数,因此我以宏的形式获取其值。\drawBoxes但是,当我将宏传递给命令时,它不起作用。

\documentclass{standalone}
\usepackage{tikz}

\newcommand{\drawBoxes}[1]{
  \begin{tikzpicture}
    \foreach \y\x\char in {#1}
    {
      \node at (\x*20pt, -\y*20pt) {\char};
    }
  \end{tikzpicture}
}

\begin{document}
\def \theseBoxes {1/1/a, 1/2/b, 2/1.5/c}
\drawBoxes{\theseBoxes}
\end{document}

产生此错误消息:

! 软件包 PGF 数学错误:未知函数“a”(在‘1/1/a’中)。

请参阅 PGF Math 包文档以了解解释。输入 H 可立即获得帮助。...

l.15 \drawBoxes{\theseBoxes}

我该如何解决这个问题?

我发现以前有人问过类似的问题;然而到目前为止,我还很难理解所提出的解决方案并使其适应我的具体情况。

答案1

删除括号,\foreach \y\x\char in #1。请参阅 pgfmanual 中的第一对示例,第 88 节“重复的事情:Foreach 语句“(非官方 html 版本)。

此外,令我惊讶的是,它\foreach \y\x\char in ...有效,而不是\foreach \y/\x/\char in ...

相关内容