循环生成的 pkgkeys 包含空格的问题

循环生成的 pkgkeys 包含空格的问题

\pgfkeys我正在尝试在以下设置中使用:

\documentclass{article}

\usepackage{tikz}
\usepackage{pgfkeys}

\begin{document}
\begin{tikzpicture}[%
    m1 color/.initial=red,
    m2 color/.initial=green,
    m3 color/.initial=blue,
  ]
  \foreach \i in {1, ..., 3} {%
    \pgfkeys{/tikz/m\i color/.get=\c}
    \node at (0, \i) [color=\c] {\i};
  }
\end{tikzpicture}
\end{document}

当我编译它时,出现以下错误:

! Package xcolor Error: Undefined color `\c '.

如果我更改代码以不使用\i选择键,即:

\documentclass{article}

\usepackage{tikz}
\usepackage{pgfkeys}

\begin{document}
\begin{tikzpicture}[%
    m1 color/.initial=red,
    m2 color/.initial=green,
    m3 color/.initial=blue,
  ]
  \foreach \i in {1, ..., 3} {%
    \pgfkeys{/tikz/m1 color/.get=\c}
    \node at (0, \i) [color=\c] {\i};
  }
\end{tikzpicture}
\end{document}

然后它可以编译,但是现在我无法遍历键。

我还注意到确实有效:

\documentclass{article}

\usepackage{tikz}
\usepackage{pgfkeys}

\begin{document}
\begin{tikzpicture}[%
    color1/.initial=red,
    color2/.initial=green,
    color3/.initial=blue,
  ]
  \foreach \i in {1, ..., 3} {%
    \pgfkeys{/tikz/color\i/.get=\c}
    \node at (0, \i) [color=\c] {\i};
  }
\end{tikzpicture}
\end{document}

那么第一个例子有什么问题?

只是出于好奇,我尝试更改m1 colorm1_color,然后现在它起作用了。因此,它似乎与空间有关。但是什么呢?

答案1

宏会删除其后面的任何空格,因此m\i color将扩展为m1color不等m1 color。您需要添加一个明确的空格m\i\space color::

\documentclass{article}

\usepackage{tikz}
\usepackage{pgfkeys}

\begin{document}
\begin{tikzpicture}[%
    m1 color/.initial=red,
    m2 color/.initial=green,
    m3 color/.initial=blue,
  ]
  \foreach \i in {1, ..., 3} {%
    \pgfkeys{/tikz/m\i\space color/.get=\c}
    \node at (0, \i) [color=\c] {\i};
  }
\end{tikzpicture}
\end{document}

另请注意,并不总是支持对键值使用宏。在这种情况下是支持color的,但对于其他键,您可能需要先通过添加/.expand once到键来扩展它,例如color/.expand once=\c

答案2

如果你更改

\pgfkeys{/tikz/m\i color/.get=\c}

\pgfkeys{/tikz/m\i\space color/.get=\c}

但我不能保证它能达到你想要的结果......

相关内容