% language=us runpath=texruns:manuals/luametafun \environment luametafun-style \startcomponent luametafun-arrow \startchapter[title={Arrow}] Arrows are somewhat complicated because they follow the path, are constructed using a pen, have a fill and draw, and need to scale. One problem is that the size depends on the pen but the pen normally is only known afterwards. \startbuffer[1a] \startMPcode draw lmt_arrow [ path = (fullcircle scaled 3cm), ] withpen pencircle scaled 2mm withcolor "darkred" ; \stopMPcode \stopbuffer \startbuffer[1b] \startMPcode draw lmt_arrow [ path = (fullcircle scaled 3cm), length = 8, ] withpen pencircle scaled 2mm withcolor "darkgreen" ; \stopMPcode \stopbuffer \startbuffer[1c] \startMPcode draw lmt_arrow [ path = (fullcircle scaled 3cm rotated 145), pen = (pencircle xscaled 4mm yscaled 2mm rotated 45), ] withpen pencircle xscaled 1mm yscaled .5mm rotated 45 withcolor "darkblue" ; \stopMPcode \stopbuffer \startbuffer[1d] \startMPcode pickup pencircle xscaled 2mm yscaled 1mm rotated 45 ; draw lmt_arrow [ path = (fullcircle scaled 3cm rotated 45), pen = "auto", ] withcolor "darkyellow" ; \stopMPcode \stopbuffer To some extent \METAFUN\ can help you with this issue. In \in {figure} [arrows:1] we see some variants. The definitions are given below: \typebuffer[1a][option=TEX] \typebuffer[1b][option=TEX] \typebuffer[1c][option=TEX] \typebuffer[1d][option=TEX] \startplacefigure[reference=arrows:1] \startcombination[4*1] {\getbuffer[1a]} {default} {\getbuffer[1b]} {length} {\getbuffer[1c]} {pen} {\getbuffer[1d]} {auto} \stopcombination \stopplacefigure There are some options that influence the shape of the arrowhead and its location on the path. You can for instance ask for two arrowheads: \startbuffer[3] \startMPcode pickup pencircle scaled 1mm ; draw lmt_arrow [ pen = "auto", location = "both" path = fullcircle scaled 3cm rotated 90, ] withcolor "darkgreen" ; \stopMPcode \stopbuffer \typebuffer[3][option=TEX] \startlinecorrection \getbuffer[3] \stoplinecorrection The shape can also be influenced although often this is not that visible: \startbuffer[4] \startMPcode pickup pencircle scaled 1mm ; draw lmt_arrow [ kind = "draw", pen = "auto", penscale = 4, location = "middle", alternative = "curved", path = fullcircle scaled 3cm, ] withcolor "darkblue" ; \stopMPcode \stopbuffer \typebuffer[4][option=TEX] \startlinecorrection \getbuffer[4] \stoplinecorrection The location can also be given as percentage, as this example demonstrates. Watch how we draw only arrow heads: \startbuffer[5] \startMPcode pickup pencircle scaled 1mm ; for i = 0 step 5 until 100 : draw lmt_arrow [ alternative = "dimpled", pen = "auto", location = "percentage", percentage = i, dimple = (1/5 + i/200), headonly = (i = 0), path = fullcircle scaled 3cm, ] withcolor "darkyellow" ; endfor ; \stopMPcode \stopbuffer \typebuffer[5][option=TEX] \startlinecorrection \getbuffer[5] \stoplinecorrection The supported parameters are: \starttabulate[|T|T|T|p|] \FL \BC name \BC type \BC default \BC comment \NC \NR \ML \NC path \NC path \NC \NC \NC \NR \NC pen \NC path \NC \NC \NC \NR \NC \NC string \NC auto \NC \NC \NR \NC kind \NC string \NC fill \NC \type {fill} or \type {draw} \NC \NR \NC dimple \NC numeric \NC 1/5 \NC \NC \NR \NC scale \NC numeric \NC 3/4 \NC \NC \NR \NC penscale \NC numeric \NC 3 \NC \NC \NR \NC length \NC numeric \NC 4 \NC \NC \NR \NC angle \NC numeric \NC 45 \NC \NC \NR \NC location \NC string \NC end \NC \type {end}, \type {middle} or \type {both} \NC \NR % middle both \NC alternative \NC string \NC normal \NC \type {normal}, \type {dimpled} or \type {curved} \NC \NR \NC percentage \NC numeric \NC 50 \NC \NC \NR \NC headonly \NC boolean \NC false \NC \NC \NR \LL \stoptabulate \stopchapter \stopcomponent