当列表不以逗号结尾时,TikZ foreach 循环失败(第二部分)

当列表不以逗号结尾时,TikZ foreach 循环失败(第二部分)

以下问题与这个,然而给出的解决方案这个问题的答案不适用于下面显示的 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后面现在跟着一个空格而不是两个空格。

  1. %为什么尽管字符串后面有符号square,正如上面引用的答案所建议的那样,但第三次运行仍然执行失败?

  2. 这是 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}

在此处输入图片描述

相关内容