Each equation was written using the same labels (X,Y,Z), but internally they have separate sets, (1:X and 2:X, etc.). The moral of the story for me: Use more Lua. Gavin % Lua counts the spin formulas \ctxlua{sfnum = 0} % Count starts at zero \def\sfID{\ctxlua{context(sfnum)}} % ConTeXt can call the count from Lua to use as an ID for each equation. % Spin formulas increase the spin formula count and typeset the formula as usual. \define\startspinformula{ \ctxlua{sfnum = sfnum + 1} \startformula } \define\stopspinformula{\stopformula} % My own \mpos uses the spin formula ID as part of the box label, then sets the contents as math. \define[2]\mpos{\hpos{\sfID:#1}{$#2$}} % Two commands for requesting contractions (the connections between spinors), using the spin formula ID. \define[2]\contract{% \startpositionoverlay{graphics}% \setMPpositiongraphic{\sfID:#1}{mypos:contract}{to=\sfID:#2}% \stoppositionoverlay% } \define[2]\contractbelow{% \startpositionoverlay{graphics}% \setMPpositiongraphic{\sfID:#1}{mypos:contractbelow}{to=\sfID:#2}% \stoppositionoverlay% }