Hi ho! This is a part of Holger Schöner's letter style (see http:// wiki.contextgarden.net/Letter_style): \def\lettersenderkeyone{} \def\lettersendervalone{} \def\lettersenderkeytwo{} \def\lettersendervaltwo{} % etc. \def\lettersenderkeynine{} \def\lettersendervalnine{} \def\senderone#1#2{\def\lettersenderkeyone{#1}\def\lettersendervalone {#2}} \def\sendertwo#1#2{\def\lettersenderkeytwo{#1}\def\lettersendervaltwo {#2}} % etc. \def\sendernine#1#2{\def\lettersenderkeynine{#1}\def \lettersendervalnine{#2}} \startsetups sendertablesetup \bTABLE \setupTABLE[frame=off] \setupTABLE[x][1][width=\senderkeywidth, align=left, style= {\keystyle\strut}] \setupTABLE[x][2][width=\sendervalwidth, align=right, style= {\valstyle\strut}] \bTR\bTD\doiftextelse{\lettersenderkeyone} {\lettersenderkeyone:}{}\eTD\bTD\lettersendervalone\eTD\eTR \bTR\bTD\doiftextelse{\lettersenderkeytwo} {\lettersenderkeytwo:}{}\eTD\bTD\lettersendervaltwo\eTD\eTR % etc. \bTR\bTD\doiftextelse{\lettersenderkeynine} {\lettersenderkeynine:}{}\eTD\bTD\lettersendervalnine \eTD\eTR \eTABLE \stopsetups Is there a more programmatical way for such? (Does TeX know something like arrays or dicts?) Sorry, I still can't program in TeX... Grüßlis vom Hraban! --- http://www.fiee.net/texnique/ http://contextgarden.net http://www.cacert.org (I'm an assurer)
Hi ho Hraban, Henning Hraban Ramm wrote:
Hi ho!
This is a part of Holger Schöner's letter style (see http://wiki.contextgarden.net/Letter_style):
\def\lettersenderkeyone{} \def\lettersendervalone{} \def\lettersenderkeytwo{} \def\lettersendervaltwo{} % etc. \def\lettersenderkeynine{} \def\lettersendervalnine{}
\def\senderone#1#2{\def\lettersenderkeyone{#1}\def\lettersendervalone{#2}} \def\sendertwo#1#2{\def\lettersenderkeytwo{#1}\def\lettersendervaltwo{#2}} % etc. \def\sendernine#1#2{\def\lettersenderkeynine{#1}\def\lettersendervalnine{#2}}
\startsetups sendertablesetup \bTABLE \setupTABLE[frame=off] \setupTABLE[x][1][width=\senderkeywidth, align=left, style={\keystyle\strut}] \setupTABLE[x][2][width=\sendervalwidth, align=right, style={\valstyle\strut}] \bTR\bTD\doiftextelse{\lettersenderkeyone} {\lettersenderkeyone:}{}\eTD\bTD\lettersendervalone\eTD\eTR \bTR\bTD\doiftextelse{\lettersenderkeytwo} {\lettersenderkeytwo:}{}\eTD\bTD\lettersendervaltwo\eTD\eTR % etc. \bTR\bTD\doiftextelse{\lettersenderkeynine} {\lettersenderkeynine:}{}\eTD\bTD\lettersendervalnine \eTD\eTR \eTABLE \stopsetups
Is there a more programmatical way for such? (Does TeX know something like arrays or dicts?) Sorry, I still can't program in TeX...
Welcome to the club ;) You can use \newcounter for such stuff or the context recurse functions (with \recurselevel). \starttext \dostepwiserecurse{1}{9}{1}{% count from 1 to 9, step 1 \setvalue{PREFIX\recurselevel}{\recurselevel} } % or all by hand (not useful for simple loops) \newcounter\Row % Row=0 \increment\Row % Row+=1 \doloop{% \setvariables[PREFIX\Row][foo=foo\Row] \increment\Row \ifnum\Row>9 \exitloop\fi } % reset to one by hand \newcounter\Row \increment\Row \dostepwiserecurse{1}{9}{1}{% \getvariable{PREFIX\Row}{foo}= \getvalue{PREFIX\recurselevel}\crlf \increment\Row } \stoptext You can combine x counters to simulate a x-dimensional array (but you better wait for lua). Hope that helps. Greetings, Peter
Grüßlis vom Hraban! --- http://www.fiee.net/texnique/ http://contextgarden.net http://www.cacert.org (I'm an assurer)
_______________________________________________ ntg-context mailing list ntg-context@ntg.nl http://www.ntg.nl/mailman/listinfo/ntg-context
Am 2006-01-02 um 19:20 schrieb Peter Rolf:
You can use \newcounter for such stuff or the context recurse functions (with \recurselevel).
I tried the following: <TEX> \dostepwiserecurse{1}{9}{1}{% count from 1 to 9, step 1 \def\lettersenderkey\recurselevel{} \def\lettersenderval\recurselevel{} \def\Sender\recurselevel#1#2{% \def\lettersenderkey\recurselevel{#1}% \def\lettersenderval\recurselevel{#2}} } \Sender1{Name}{Hraban} </TEX> --> ! Use of Sender doesn't match its definition. Seems like \def\Something\recurselevel isn't valid. (Sure, just confirmed in the TeXbook, numbers aren't considered command-word characters.) After some hacking I learned how \setvalue works: <TEX> \def\Set#1#2#3{\setvalue{Key#1}{#2}\setvalue{Val#1}{#3}} \def\Get#1{\getvalue{Key#1}/\getvalue{Val#1}} \dostepwiserecurse{1}{9}{1}{ \Set{\recurselevel}{K\recurselevel}{V\recurselevel} } \Set{1}{eins}{EINS} \Set{2}{zwei}{ZWEI} manually: \Get{1} -- \Get{2} -- \Get{3} looping: \dostepwiserecurse{1}{5}{1}{ \Get{\recurselevel} -- } </TEX> results in: manually: eins/EINS – zwei/ZWEI – K0/V0 looping: eins/EINS – zwei/ZWEI – K3/V3 – K4/V4 – K5/V5 – Why do I get K0/V0 for \Get{3}? - it works with \recurselevel! Grüßlis vom Hraban! --- http://www.fiee.net/texnique/ http://contextgarden.net http://www.cacert.org (I'm an assurer)
Henning Hraban Ramm wrote: ...
After some hacking I learned how \setvalue works:
<TEX> \def\Set#1#2#3{\setvalue{Key#1}{#2}\setvalue{Val#1}{#3}} \def\Get#1{\getvalue{Key#1}/\getvalue{Val#1}}
\dostepwiserecurse{1}{9}{1}{ \Set{\recurselevel}{K\recurselevel}{V\recurselevel} } \Set{1}{eins}{EINS} \Set{2}{zwei}{ZWEI}
manually: \Get{1} -- \Get{2} -- \Get{3}
looping: \dostepwiserecurse{1}{5}{1}{ \Get{\recurselevel} -- } </TEX>
results in:
manually: eins/EINS – zwei/ZWEI – K0/V0 looping: eins/EINS – zwei/ZWEI – K3/V3 – K4/V4 – K5/V5 –
Why do I get K0/V0 for \Get{3}? - it works with \recurselevel!
Is this the TeX riddle of the week? Where is the camera? ;) Sorry, I have no clue, so you better ask the wizzards... Greetings, Peter
Grüßlis vom Hraban! --- http://www.fiee.net/texnique/ http://contextgarden.net http://www.cacert.org (I'm an assurer)
_______________________________________________ ntg-context mailing list ntg-context@ntg.nl http://www.ntg.nl/mailman/listinfo/ntg-context
Peter Rolf wrote:
Why do I get K0/V0 for \Get{3}? - it works with \recurselevel!
You need to expand the \Set commands in that first loop, otherwise you store the literal token \recursevelel inside the definitions of the Key and Val macros (\setvalue{}{} autoexpands its first argument, but not its second argument). When not inside a recursion, \recurselevel expands to the number 0 (zero) in the "manual bit", and you are actually re-evaluating the macro using the then current \recurselevel definition when inside the "looping" bit. So you need: \dostepwiserecurse{1}{9}{1}{ \expanded{\Set{\recurselevel}{K\recurselevel}{V\recurselevel}} } I hope this is clear enough? Cheers, Taco
Taco Hoekwater wrote:
Peter Rolf wrote:
Why do I get K0/V0 for \Get{3}? - it works with \recurselevel!
You need to expand the \Set commands in that first loop, otherwise you store the literal token \recursevelel inside the definitions of the Key and Val macros (\setvalue{}{} autoexpands its first argument, but not its second argument).
When not inside a recursion, \recurselevel expands to the number 0 (zero) in the "manual bit", and you are actually re-evaluating the macro using the then current \recurselevel definition when inside the "looping" bit.
So you need:
\dostepwiserecurse{1}{9}{1}{ \expanded{\Set{\recurselevel}{K\recurselevel}{V\recurselevel}} }
I hope this is clear enough?
even this works (#1 being the expanded \recurselevel): \dostepwiserecurse{1}{9}{1}{ \setvalue{hi there #1}{#1 indeed} } \getvalue{hi there 4}
participants (4)
-
Hans Hagen
-
Henning Hraban Ramm
-
Peter Rolf
-
Taco Hoekwater