Dear list, I have a problem connecting path with the operator « & » (page 16 Metafun manual). The problem is illustrated by the code (and the joined PDF) which follows. I draw random cycled forms (left part of the figure) and when they interact, they are modified to « fit together » (right part of the figure) . When building these new forms, I connect paths (usually two or three depending on position 0 of the path); the last point a path is the same as the first point of the next path ; for exemple, to modify the blue circle, named « circleA », I take the circle A from P1 to P2, then a segment from P2 to P1 and cycle to have a closed path. So I should be able to do : newcircleA := circleA cutbefore P1 cutafter P2 & (P2 -- P1) & cycle ; The « & » operator is supposed to work (if I understand correctly) in this case, but I have this error message : "! Paths don't touch; `&' will be changed to `..’." Which I do not understand since the paths « touch ». There was a similar question last year, without a clear answer (« METAPOST subpath rounding issue »https://www.mail-archive.com/ntg-context@ntg.nl/msg94294.html). A solution is to ignore the repeating points : newcircleA := circleA cutbefore P1 cutafter P2 -- (P2 -- P1) -- cycle ; but this new shape has 9 points instead of 7. The problem is that I do these operations a number of times, and the length of a path (in the number of points) is increasing and cause trouble when I look for intersections with others shapes. Here is the MWE: \startMPpage path circleA , circleB ; pair P[]; circleA := fullcircle scaled 1in randomized 3 ; circleB := fullcircle scaled 1in randomized 3 shifted(0.3in,0.3in) ; draw circleA withcolor blue ; draw circleB withcolor red ; P[1] := circleA intersectionpoint circleB ; dotlabel.lft("$P_1$",P[1]) ; dotlabel.rt("$\blue\tfx P_0^A$",point 0 of circleA) ; P[2] := reverse(circleA) intersectionpoint circleB ; dotlabel.rt("$P_2$",P[2]) ; dotlabel.rt("$\red\tfx P_0^B$",point 0 of circleB) ; path newcircleA , newcircleB ; % newcircleA := circleA cutbefore P1 cutafter P2 & (P2 -- P1) & cycle ; % previous line gives an error : % "! Paths don't touch; `&' will be changed to `..'." newcircleA := circleA cutbefore P1 cutafter P2 -- (P2 -- P1) -- cycle ; newcircleA := newcircleA xshifted 2in ; draw newcircleA withcolor darkgreen ; newcircleB := (circleB cutafter P1) -- (P1 -- P2) -- (circleB cutbefore P2 ) & cycle ; newcircleB := newcircleB xshifted 2in ; draw newcircleB withcolor black ; drawpoints newcircleA ; drawpointlabels newcircleA ; \stopMPpage