包括数组中的符号

包括数组中的符号

我如何将定义为宏的符号包含在数组中,然后使用 访问它们\pgfmathparse?以下代码以

“缺少控制序列:

\inaccessible”错误

\documentclass{article}
\usepackage{tikz}
\usepackage{wasysym}
\begin{document}

\def\planets{{"\mercury","\venus","\mars","\jupiter","\saturn","\uranus","\neptune"}}

\foreach \i in {0,...,6}{
\pgfmathparse{\planets[\i]}\pgfmathresult - 
}
\end{document}

答案1

不要迭代控制序列。而是使用以下方法根据名称构建它们\csname ... \endcsname

\documentclass{article}
\usepackage{tikz}
\usepackage{wasysym}
\newcommand\planets{{"mercury","venus","mars","jupiter","saturn","uranus","neptune"}}
\begin{document}
% without using an array and pgfmathparse
\foreach \i in {mercury, venus,mars,jupiter,saturn,uranus,neptune}{
\csname\i\endcsname}

% using the array
\foreach \i in {0,...,6}{
\pgfmathparse{\planets[\i]}\csname\pgfmathresult\endcsname}

\end{document}

代码输出

答案2

行星符号命令不存在\edef,这是在\planets[\i]评估时执行的。

您可以通过在每个项目前面定义\planets来避免此问题:\noexpand

\documentclass{article}
\usepackage{pgffor}
\usepackage{wasysym}

\newcommand\planets{{%
  "\noexpand\mercury",%
  "\noexpand\venus",%
  "\noexpand\mars",%
  "\noexpand\jupiter",%
  "\noexpand\saturn",%
  "\noexpand\uranus",%
  "\noexpand\neptune"%
}}

\begin{document}

\foreach \i in {0,...,6}{\pgfmathparse{\planets[\i]}\pgfmathresult{} - }

\end{document}

在此处输入图片描述

但是,如果您的目的是能够通过编号来引用行星,我建议采用不同的方法。索引从 1 开始。

\documentclass{article}
\usepackage{xparse}
\usepackage{pgffor}
\usepackage{wasysym}

\ExplSyntaxOn
\NewExpandableDocumentCommand{\planet}{m}
 {
  \tl_item:nn { \mercury\venus\mars\jupiter\saturn\uranus\neptune } { #1 }
 }
\ExplSyntaxOff

\begin{document}

\foreach \i in {1,...,7}{\planet{\i} - }

\planet{3}

\end{document}

相关内容