Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

Here's basically what I try to do:

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

However if I do that, I get

ERROR: Missing number, treated as zero.

I tried to prefix the number with \the:

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

and got:

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

After searching around on TeX.SE, I thought the following solution should work:

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

However that got me an error that \x is not defined.

So, how do I get the desired result?

share|improve this question
1  
\Alph takes a counter as an argument, not just a number. Your last methods works fine for me, what version of pgf are you using? –  Roelof Spijker Jan 30 '12 at 13:28
    
@wh1t3: Assuming the installed manual corresponds to the installed version, it's version 2.00 –  celtschk Jan 30 '12 at 13:51
    
Then I'd recommend upgrading to the latest version 2.10, since the last solution should work fine then. If your example is an accurate description of what you want to do then the last solution seems preferrable anyway, in case you want to leave certain letters out and keep consistent spacing. –  Roelof Spijker Jan 30 '12 at 14:34
add comment

1 Answer

up vote 7 down vote accepted

\Alph expects as its argument a counter name; in your case LaTeX looks for the inexistent counters named 1, 2 and so on.

A way out is to use the internal command that transforms numbers to letters, that is \@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}

Alternatively, the more esoteric

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

will do the same, but is quite different from the other one in that the former leaves the letters in the input stream. while the latter leaves the instructions to print the letters.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.