[metapost] pdftex \pdflastxpos for metapost?

Daniel H. Luecking luecking at uark.edu
Tue May 10 20:03:59 CEST 2005

On Mon, 9 May 2005, Hartmut Henkel wrote:

> Thanks, Taco and Dan!
> On Mon, 9 May 2005, Dan Luecking wrote:
> > You could assign the value to a temporary dimension register (in
> > pdftex) and write that out. Example:
> >
> > \dimen0=\number\pdflastxpos sp %\dimen0=1\pdflastxpos should also work.
> > \write\myfile{\the\dimen0}
> yes, but problem is that the \pdfsavepos happens very late, only at
> shipout (else it won't know the absolute position), so you get a
> \pdflastxpos value only after a \pdfsavepos...\vfill\eject, or when
> using \write. Taco's version works if there is only one \pdfsavepos per
> page. If there are several, it seems one needs the \write. So what i'm
> looking for is conceptually something like:
> \def\foo#1\relax{% here goes the trick of scaling #1
> }

If etex is available, Hans' suggestion should work. Otherwise you can
perhaps postprocess the written file (even in the same tex run):

> a\pdfsavepos
> \write\mywrite{\expandafter\foo\the\pdflastxpos\relax}



Then the \mywrite file (call it temp1.tex) will contain entries like
At the end of the document, define \foo to perform the dimension
assignment and write the result to another file:
  \def\foo#1{\dimen0=#1sp \immediate\write\otherfile{\the\dimen0}}
  \input temp
and get all the dimensions written to temp2.dat.

> where \foo would make the division/scaling (no clue, how).

You could also write them as strings. MP can easily insert a decimal
point character say 7 places from the right of the string. Then scantokens
can be used to read the string as a number:
 string X;
 X := "123456";
 X := "0000000" & X; % ensure at least 7 places
 numeric n, w;
 n:=length X;
 X := (substr (0,n-7) of X) & "." & (substr (n-7,n) of X);
 scantokens ("w:=" & X & ";");

Or use sarith.mp (afraid I know very little about it).


Dan Luecking
Dept. of Mathematical Sciences
University of Arkansas
Fayetteville, AR 72101

More information about the metapost mailing list