我在 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 ...
。