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.

I am curious to know why the following failed. A similar thread is on comp.text.tex unanswered. Of course, other manipulations of \whileexpr work, but why does this fail?

\documentclass{article}
\makeatletter
\def\whileexpr#1\do#2{%
  #1#2\expandafter\@iden\else\expandafter\@gobble\fi
  {\whileexpr#1\do{#2}}%
}
\newcount\colnum
\newcommand\generaterow[2]{%
  \colnum\z@
  \whileexpr\ifnum\colnum<#2\relax\do{%
    #1\advance\colnum\@ne\the\colnum\relax
  }%
}
\makeatother

\begin{document}
% Test (worked):
\generaterow{x}{3}% -> x1x2x3

% Failed:
\begin{tabular}{|*{4}{c|}}
  \hline
  x\generaterow{&}{3}\\\hline
\end{tabular}

\end{document}
share|improve this question
8  
Please take a look over the questions you've asked and see if you can 'accept' some of the answers. When there is an answer that 'works for you' it's a good idea to accept it. –  Joseph Wright Dec 8 '11 at 22:10
    
@Joseph: Which questions? This is my first question here in 12 months. Or are you referring to comp.text.tex? I can't find any answer there. –  Ahmed Musa Dec 8 '11 at 22:17
2  
@AhmedMusa: See the questions you've asked on TeX.SX. They're found in your profile. –  Werner Dec 8 '11 at 22:19
    
We'd like to keep answers separate from questions, so you should write a separate answer instead of editing your answer into the question. Self-answers are perfectly admissible, and a well-written answer may earn you additional reputation. –  Werner Dec 9 '11 at 1:09
    
@AhmedMusa: My apologies if the following is obvious. Each answer to a question has a score. For questions that you have asked, you will see a grey tick (or check mark) "✓" below these answer scores. For each question that you've asked in the past, find the question that helped you the most and click on that grey tick. It will go green, indicating that you have accepted it as the answer to your question. –  qubyte Dec 9 '11 at 2:15

1 Answer 1

up vote 3 down vote accepted

I have seen the problem: conditionals can't be split across & in \halign. Each cell is executed in an alignment group. The following worked. It allows the conditional to complete execution before the material (including the alignment character &) is placed/executed.

\def\whileexpr#1\do#2{%
  #1\expandafter\@iden\else\expandafter\@gobble\fi
  {#2\whileexpr#1\do{#2}}%
}
share|improve this answer

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.