<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">
%%% I need to be able to specify the width for text. I would like to
%%% use the largest size (subject to a user specified maximum and
%%% minimum). If the constraints mean that I cannot fill the width
%%% then the text should be centered at the largest specified size.
%%%
%%% Phil Taylor January 1993

\catcode `\@ = 11

\newcount \r@mainder
\newcount \m@gstepcount
\newcount \m@gsteplimit
\newcount \m@gstepvalue
\newdimen \m@gstepdimen

\def \magsteps {\afterassignment \m@gsteps \m@gsteplimit = }

\def \m@gsteps
    {\let \@r = \or
     \def \or {\noexpand \or}%
     \m@gstepdimen = 0.166667 \maxdimen
     \m@gstepvalue = 1000 
     \m@gstepcount = 0
     \def \magstep {}%
     \loop
     \ifnum     \m@gstepcount &lt; \m@gsteplimit
                \advance \m@gstepcount by 1
                \ifnum \m@gstepvalue &gt; \m@gstepdimen
                        \advance \m@gstepcount by -1
                        \message {Sorry --- integer overflow would occur if
                                        I went any further; stopped at 
                                                \the \m@gstepcount.}
                        \m@gsteplimit = \m@gstepcount 
                \else
                        \multiply \m@gstepvalue by 12
                        \multiply \r@mainder by 12
                        \divide \r@mainder by 10
                        \advance \m@gstepvalue by \r@mainder
                        \r@mainder = \m@gstepvalue
                        \divide \m@gstepvalue by 10
                        \multiply \m@gstepvalue by 10
                        \advance \r@mainder by -\m@gstepvalue
                        \divide \m@gstepvalue by 10
                        \ifnum \r@mainder &lt; 5
                               \edef \magstep {\magstep \or \the \m@gstepvalue}%
                        \else
                               \advance \m@gstepvalue by 1
                               \edef \magstep {\magstep \or \the \m@gstepvalue}%
                               \advance \m@gstepvalue by -1
                        \fi
                \fi
     \repeat
     \edef \magstep ##1%
          {\noexpand \ifcase ##1
                        1000\magstep 
           \noexpand \else 0%
           \noexpand \message 
                {Sorry --- \string \magstep \space ##1
                                is not in range 0 .. \the \m@gsteplimit}%
           \noexpand \fi
           \noexpand \relax
          }%
     \let \or = \@r
    }

\catcode `\@ = 12

\magsteps 63
\newcount \loopcount
\newdimen \thewidth

\def \set #1 \in #2 \to %%% see example at end 
    {\def \thetext {#1}%
     \def \thefont {#2 }%
     \afterassignment \settowidth
     \thewidth =      
    }

\def \settowidth
    {\loopcount = 0
     \loop
       \message {Trying \noexpand \magstep \the \loopcount...}%
       \setbox 0 = \hbox 
		   {\font \tempfont = \thefont scaled \magstep \loopcount
       		    \tempfont \thetext
       		   }%
     \ifdim \wd 0 &lt; \thewidth
       \advance \loopcount by 1
     \repeat
     \advance \loopcount by -1
     \message {The calculated font is \thefont \space 
       		scaled \noexpand \magstep \the \loopcount}%

     \hbox to \thewidth {\font \tempfont = \thefont scaled \magstep \loopcount
       	     \hss \tempfont \thetext \hss}%
    }

\set Now is the time for \in cmr10 \to 50 cm




</pre></body></html>