Thanks Max that works perfectly! But It would still be useful if I could change families inside a MPpage.
Sure, but you'll need to store the x-heights first: \starttexdefinition storexheight [#1] % Placing the first use of \switchtobodyfont inside a group messes % with the definitions, so we need to reset the font family manually. \edef\oldfontclass{\fontclass} \switchtobodyfont[#1] \expandafter\newcount\csname #1_xheight\endcsname \global\csname #1_xheight\endcsname=\numexpr 100 * \number\dimexpr1em\relax / \number\dimexpr1ex\relax \relax \switchtobodyfont[\oldfontclass] \stoptexdefinition \starttexdefinition setxheight [#1][#2] % Combining these two lines into one sometimes fails. No idea why. \switchtobodyfont[#1] \switchtobodyfont[\the\dimexpr#2 * \csname #1_xheight\endcsname / 100 \relax] \stoptexdefinition \storexheight[adventor] \storexheight[pagella] \storexheight[heros] \starttext \startMPpage draw textext.origin("\setxheight[adventor][1cm]Hello!"); draw (0, 1cm) -- (6cm, 1cm); \stopMPpage \startMPpage draw textext.origin("\setxheight[pagella][1cm]Hello!"); draw (0, 1cm) -- (6cm, 1cm); \stopMPpage \startMPpage draw textext.origin("\setxheight[heros][6pt]Hello!"); draw textext.origin("\setxheight[heros][24pt]Hello!"); draw (0, 6pt) -- (6cm, 6pt); draw (0, 24pt) -- (6cm, 24pt); \stopMPpage \stoptext It's pretty ugly code, but it seems to work alright. -- Max