在 \foreach 循环参数上使用 \Alph

在 \foreach 循环参数上使用 \Alph

这基本上就是我尝试做的事情:

\begin{tikzpicture}
  \foreach \x in {1,2,3,4,5}
  {
    \draw (\x,1) node{\Alph{\x}};
  }
\end{tikzpicture}

但如果我这样做,我会得到

ERROR: Missing number, treated as zero.

我尝试在数字前加上前缀\the

\begin{tikzpicture}
  \foreach \x in {1,2,3,4,5}
  {
    \draw (\x,1) node{\Alph{\the\x}};
  }
\end{tikzpicture}

并得到:

ERROR: You can't use `the character 1' after \the.

在 TeX.SE 上搜索后,我认为以下解决方案应该可行:

\begin{tikzpicture}
  \foreach \c [count=\x] in {{A},{B},{C},{D},{E}}
  {
    \draw (\x,1) node{\c};
  }
\end{tikzpicture}

\x然而,这导致我出现未定义的错误。

那么,我怎样才能获得期望的结果?

答案1

\Alph期望其参数为计数器名称;在您的情况下,LaTeX 会查找名为的不存在的计数器12等等。

一种解决方法是使用将数字转换为字母的内部命令,即\@Alph

\makeatletter
\newcommand{\myAlph}[1]{\expandafter\@Alph#1}
\makeatother

\begin{document}
\begin{tikzpicture}
  \foreach \x in {1,2,3,4,5}
  {
    \draw (\x,1) node{\myAlph{\x}};
  }
\end{tikzpicture}
\end{document}

或者,更深奥的

\newcommand{\myAlph}[1]{\char\numexpr`A-1+#1\relax}

将执行相同的操作,但与另一个完全不同,因为前者将字母留在输入流中。而后者留下打印字母的指令。

相关内容