以下问题与这个,然而给出的解决方案这个问题的答案不适用于下面显示的 LaTeX 文档,因此我不得不创建另一篇文章。
以下 LaTeX 文档保存在路径为 的文件中~/test.tex
。
\documentclass[tikz,border=1cm]{standalone}
\newcommand{\placepics}[1]{ \foreach \i in { #1 } { \pic {\i}; } }
\tikzset{ square/.pic={\draw (0,0) rectangle (1,1);} }
\begin{document}
\begin{tikzpicture}
\placepics{
square,
}
\end{tikzpicture}
\end{document}
当在终端执行以下命令时:
cd ~
pdflatex 测试
在路径 处生成一个 PDF 文件~/test.pdf
。在 PDF 查看器中打开时,文件显示如下:
square
如果现在在文档中的单词第二次出现后删除逗号~/test.tex
,那么\foreach
结构看起来如下:
\foreach \i in {
square
}{\pic {\i};}
并重新运行该命令pdflatex test
,执行失败,并且文件~/test.log
包含以下代码片段:
! Package pgfkeys Error: I do not know the key '/tikz/pics/square ' and I am g
oing to ignore it. Perhaps you misspelled it.
See the pgfkeys package documentation for explanation.
Type H <return> for immediate help.
...
l.13 }
?
! Emergency stop.
...
l.13 }
End of file on the terminal!
如果我现在实施上述答案%
,并在被删除的逗号所在的位置放置一个符号,使得\foreach
结构如下所示:
\foreach \i in {
square%
}{\pic {\i};}
并重新运行该命令pdflatex test
,执行失败,并且文件~/test.log
包含与上面所示几乎相同的代码片段,只是有问题的键被给出为'/tikz/pics/square '
,即字符串square
后面现在跟着一个空格而不是两个空格。
%
为什么尽管字符串后面有符号square
,正如上面引用的答案所建议的那样,但第三次运行仍然执行失败?这是 PGF/TikZ 中的错误吗?我应该将其作为错误报告给 TikZ 项目吗?
答案1
在您的定义中,\placepics
在您传递给的选项之后添加一个(另一个)空格,即\pic
在#1
和以下结束花括号之间:
\newcommand{\placepics}[1]{ \foreach \i in { #1 } { \pic {\i}; } }
% ^
你已经发现了您的问题的第一部分在传递给宏的选项列表中,空格(前导空格除外)不会被忽略\foreach
。这里的问题是一样的。因此,您确实需要注意此类列表中的空格。
删除这个空间将解决问题:
\documentclass[tikz,border=1cm]{standalone}
\newcommand{\placepics}[1]{ \foreach \i in {#1} { \pic {\i}; } }
\tikzset{ square/.pic={\draw (0,0) rectangle (1,1);} }
\begin{document}
\begin{tikzpicture}
\placepics{
square%
}
\end{tikzpicture}
\end{document}