David Arnold wrote:
All,
Can someone tell me what I am doing wrong here?
\useMPgraphic is meant to include whole figures inside text, not for including portions of other metapost code inside metapost. What you can do is to define new functions inside \startMPinclusions ... \stopMPinclusions or in an external file. I don't doubt that implementing support for your way of thinking in metafun is doable, but I don't know if it is worth the effort or not. Here's an approximate transliteration into working code (I don't claim that it's most elegant and I didn't know how to pass a function as an argument, but I hope you can get an idea how to proceed. With slightly more arguments/parameters to the defined functions, you can get rid of hardcoding "fives" in your code for example.) \setupcolors[state=start] \definecolor[gridlines][s=0.7] \startMPinclusions color gridlines; gridlines=\MPcolor{gridlines}; % draw the grid 2n x 2n with unit length u def draw_axis(expr n, u) = % draw the grid for i=-5 upto 5: draw ((i,-5)--(i,5)) scaled u; draw ((-5,i)--(5,i)) scaled u; endfor; %draw axes drawdblarrow (-5.2u,0)--(5.2u,0); drawdblarrow (0,-5.2u)--(0,5.2u); %label axes label.rt(btex $x$ etex, (5.2u,0)); label.top(btex $y$ etex, (0,5.2u)); label.bot(btex $5$ etex, (5u,0)); label.lft(btex $5$ etex, (0,5u)); enddef; def scale_and_draw_f(expr p, u) = %scale function path %p:=p scaled u; %draw function path drawdblarrow (p scaled u) withcolor blue; enddef; % I don't know how to give the function as an argument, % so I cheated and copied it here once more vardef create_function_path_f = %define clipping path path cpath; cpath:=(-5,-5)--(5,-5)--(5,5)--(-5,5)--cycle; %define function vardef f(expr x)= x*x enddef; %create function path path p; p:=(-5,f(-5)); for x=-5 step .1 until 5: p:=p--(x,f(x)); endfor; p:=p--(5,f(5)); %clip function path to clipping path p:=p cutbefore cpath; p:=reverse p; p:=p cutbefore cpath; p enddef; \stopMPinclusions \starttext \startMPpage %define function vardef f(expr x)= x*x enddef; path p; p := create_function_path_f; %initialize scale numeric u; 10u=2in; draw_axis(n, u); scale_and_draw_f(p, u); %draw plotted points for x=-2 step 1 until 2: drawdot ((x,f(x)) scaled u) withpen pencircle scaled 4pt withcolor blue; endfor; \stopMPpage \stoptext
%Ouput=pdf
\setupcolors[state=start]
\definecolor[gridlines][s=0.7]
\startMPinclusions color gridlines; gridlines=\MPcolor{gridlines} \stopMPinclusions
\startMPgraphic{create function path f 5-by-5}
%define clipping path path cpath; cpath:=(-5,-5)--(5,-5)--(5,5)--(-5,5)--cycle;
%create function path path p; p:=(-5,f(-5)); for x=-5 step .1 until 5: p:=p--(x,f(x)); endfor; p:=p--(5,f(5));
%clip function path to clipping path p:=p cutbefore cpath; p:=reverse p; p:=p cutbefore cpath;
\stopMPgraphic
\startMPgraphic{scale and draw f 5-by-5}
%scale function path p:=p scaled u;
%draw function path drawdblarrow p withcolor blue;
\stopMPgraphic
\startMPgraphic{draw axis 5-by-5}
%draw the grid for k=-5u step 1u until 5u: draw (k,-5u)--(k,5u) withcolor gridlines; draw (-5u,k)--(5u,k) withcolor gridlines; endfor;
%draw axes drawdblarrow (-5.2u,0)--(5.2u,0); drawdblarrow (0,-5.2u)--(0,5.2u);
%label axes label.rt(btex $x$ etex, (5.2u,0)); label.top(btex $y$ etex, (0,5.2u)); label.bot(btex $5$ etex, (5u,0)); label.lft(btex $5$ etex, (0,5u));
\stopMPgraphic
\starttext
\startMPpage
%define function vardef f(expr x)= x*x enddef;
\useMPgraphic{create function path f 5-by-5}
%initialize scale numeric u; 10u=2in;
\useMPgraphic{draw axis 5-by-5}
\useMPgraphic{scale and draw f 5-by-5}
%draw plotted points for x=-2 step 1 until 2: drawdot ((x,f(x)) scaled u) withpen pencircle scaled 4pt withcolor blue; endfor;
\stopMPpage
\stoptext