[metapost] Dynamic TeX labels in functions

John S. Walker jsw9c at uic.edu
Wed Nov 10 20:55:17 CET 2004


I'm trying to write a function where I give a filename and axis name in 
the argumants and have the function draw a graph based
on the data in the file name and add labels to the graph.  The 
behaviour I'm looking for is the ability to read the last value from 
the file and label the final point and also to include a name at the 
extreme right

I'd like to use this with LaTeX so I'm trying to use the btex etex 
construct but I'm having little success. I'm trying Hoenig's idea of 
writing a string to a file and then reading it back, however I get an 
error message about not having filenames in macros. If I try to use 
readfrom along the lines of

next:=readfrom "sparklabels.tmp"; scantokens next;

There is an error message about using btex etex from a file

Here is a file with the macro included.

%%%Begin sparklinef.mp file
input graph;

vardef sparkline(text gname)(expr fname,w,h,upper,lower)=
   draw begingraph(w,h);
    string s,ip ;
    numeric endx, endy, gupper, glower;
    path p,q;
    pair ly, by;
    gdata(fname, s, augment.p(i, scantokens s1); );
    by:=point 0 of p;
    ly:= point infinity of p;

    q:= (0,gupper)--(endx,gupper)--(endx,glower)--(0,glower)--cycle;
    gfill q withcolor 0.8white;

    gdraw p withcolor 0.3white;

    pickup pencircle scaled 2pt;
    gdraw ly withcolor red;
    s:="glabel.rt( btex {\scriptsize \textsf{"&decimal endy&"}} etex , 
ly)  withcolor red; glabel.lft(btex {\scriptsize \textsf{"&gname&"}} 
etex, OUT);";

    write s to "sparklabels.tmp";
    write EOF to "sparklabels.tmp";
    input "sparklabels.tmp";
    Gneedgr_ := false;
    Gneedfr_ := false;
  sparkline("glucose")("newdata.d", 36pt, 12pt, 70, 40)
%%%end sparklinef.mp

More information about the metapost mailing list