[pdftex] Parametrized btex/etex-blocks?

Hans Hagen pragma at wxs.nl
Sat Nov 30 17:14:32 CET 2002


At 06:10 PM 11/25/2002 +0100, Magnus Lie Hetland wrote:
>I've noticed that when I write MetaPost code where I need several
>labels typeset with LaTeX, my code seems to become a bit repetitive...
>What I need is a way to parametrize my btex/etex blocks -- or so I
>think...
>
>For example, let's say I write something like
>
>   def foo(expr p, n)=
>       label(btex $2^n$ etex, p);
>   enddef;
>
>Of course, here n will be typeset as the letter 'n'. What I'd like is
>a way to substitute the value of the parameter n into the tex text.
>Since btex/etex blocks are processed with a preprocessor this sounds a
>bit impossible -- but since I'm not 100% sure, I thought I'd ask.
>
>An alternative is, I guess, to do something like:
>
>   verbatimtex \newcommand{\foo}[1]{$2^{#1}$} etex
>   def foo(expr p, l)=
>       label(l, p);
>   enddef;
>
>And then call it with
>
>   foo((100, 100), btex \foo{3} etex);
>
>or something...? This seems to work fine, but it would be nice to be
>able to abstract away the btex/etex stuff inside the macros... Also,
>it would be nice to be able to calculate things that to into the
>btex/etex blocks.
>
>Is something like this possible? (An alternative would, of course, be
>to use a preprocessor, possibly in a different language...) I assume
>that the possibilities are severely limitid if the preprocessing has
>to take place before any interpretation has taken place...

the btex ... etex is filtered from the file before an mp run; during a run, 
it's also filtered from included files, which provides a way to trick mp 
into processing them runtime. But, this is quite slow, esp when you have 
hundreds of labels.

in metafun (www.pragma-ade.tex -> showcase -> manuals -> metafun) there is 
a mechanism that provides the feature you want:

(embedded in tex code:)

\starttext

\startMPpage
for i=1 upto 10 :
   draw textext("$x^{" & decimal i & "}$") shifted (i*cm,i*cm) ;
endfor ;
\stopMPpage

\stoptext

so, textext does the job, and the variable i needs to be converted to a string

(btw, this problem is unrelated to pdftex [backend] or a macropackage; 
two-way interfacing between tex and mp has a few tricky aspects )

Hans
-------------------------------------------------------------------------
                                   Hans Hagen | PRAGMA ADE | pragma at wxs.nl
                       Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
  tel: +31 (0)38 477 53 69 | fax: +31 (0)38 477 53 74 | www.pragma-ade.com
-------------------------------------------------------------------------
                        information: http://www.pragma-ade.com/roadmap.pdf
                     documentation: http://www.pragma-ade.com/showcase.pdf
-------------------------------------------------------------------------




More information about the pdftex mailing list