我如何将定义为宏的符号包含在数组中,然后使用 访问它们\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}