Is there any option(s) in METAPOST (and/or METAFUN) to label things like TikZ allows it for nodes?

Of course I know about label.{top|bot|lft|rt|...} but is there something more precise?

2 Answers 2


There is the freelabel(label, point, point_origin) macro of Metafun. Not the same kind of labels as in tikz, but it can help.

It sets the label upon the straight line point_origin--point, near point but on the opposite side of point_origin.

A very quick example:

        u := 3cm;
        draw fullcircle scaled (2u);
        for i = 0 upto 14:
            draw origin -- u*dir 24i;
            freelabel("$" & decimal 24i & "$", u*dir 24i, origin);

enter image description here

See the Metafun documentation (p. 453 and following) for more details.


One could extend the thefreelabel from metafun to put the labels in the direction one wants. It is the freelabeloffset that determines how far from the point the label is set.

vardef dirlabel(expr s, l, d) = 
    thefreelabel(s,l, unitvector dir(d+180) shifted l)
enddef ;

path p ; p = (origin -- (1,0) .. (2,2) .. (0,1) .. cycle) scaled 100 ;
numeric N ; N := 20 ;

draw p ;

for i = 0 upto (N - 1) :
    draw point i/N along p withpen pencircle scaled 2  withcolor darkred ;
    draw dirlabel(decimal i, point i/N along p, angle(direction (arctime ((i/N)*arclength p) of p) of p) - 90) ;
endfor ;

a path with labels along it

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.