On Wed, 24 Oct 2007, Aditya Mahajan wrote:

> Restarting an old thread ...
>
> On Wed, 6 Jun 2007, Aditya Mahajan wrote:
>
>> What is the correct way of using * key with TaBlE? The following does not 
>> work
>>
>> \starttext
>>
>> \starttable[|*{2}l|]
>
> This should be [*{2}{l|}] but even then it does not work.
>
>>   \HL
>>   \NC A \NC B \NC \NR
>>   \HL
>> \stoptable
>> \starttable[|l|l|]
>>   \HL
>>   \NC A \NC B \NC \NR
>>   \HL
>> \stoptable
>>
>> \stoptext
>
> I finally found out why this is not working. \getTABLEnofcolumns does
> not expand *. For example
>
> This works fine.
> \getTABLEnofcolumns{|l|l|}
> \the\maxTABLEcolumn % gives 2.
>
> This does not.
> \getTABLEnofcolumns{|*{2}{l|}}
> \the\maxTABLEcolumn %gives 1
>
> \getTABLEnoofcolumns is simply counting the number of | in the format.
> It should first expand the *#1#2, and then do the counting. A really
> ugly workaround
>
> \starttable[|*{2}{l|}]
>   % Manually set the number of columns :-(
>   \noalign{\global\maxTABLEcolumn=2}
>   \NC AA  \NC 5 \NC \AR
>   \NC AAA \NC 6 \NC \AR
> \stoptable
>
> I do not understand TeX well enough to correct the
> \get\TABLEnofcolumns macro.

Here is another solution. We first need a fully expandable \dorecurse 
macro. I copied David Kastrup's replicate from TeX pearls
http://www-stary.gust.org.pl/pearls/2005/david-kastrup/bachotex2005-david-kastrup-pearl3.pdf

This works as expected.

\def\replicate#1#2{\ifnum#1>0 #2%
   \expandafter\replicate\expandafter{\number\numexpr#1-1}{#2}\fi}

\starttable[|\replicate{2}{l|}]
   \NC AA  \NC 5 \NC \AR
   \NC AAA \NC 6 \NC \AR
\stoptable

Questions:

1. Is there something equivalent to replicate in ConTeXt. 
(\dorecuse is not expandable)? If not, should it be added?

2. Are there any plans to ensure that the * form works? I am happy 
with the above solution, but I am curious from the purpose of 
documentation. I am writing about some the advanced features of 
\starttable. If the * version will not be supported, I can just say 
that the replicate trick is the correct way to do things.

3. BTW, there are other things that do not work with \starttable. All 
the keys of TaBlE that start with \ do not work (\LeftGlue, 
\RightGlue, \{, \|), as they are tried to be expanded, and result in 
a undefined control sequence error. One solution is to pad 
each of them with \noexpand. Are there plans to work on this, or 
should I just say (in the tugboat article) that the \noexpand is the 
correct way to do things.

Aditya
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the 
Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : https://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

Reply via email to