[NTG-context] Changing font and font size inside textex

Max Chernoff mseven at telus.net
Tue May 31 09:42:02 CEST 2022


> 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



More information about the ntg-context mailing list