\def\fileversion{5} \def\filedate{1994/04/15} \def\docdate{1994/04/15} % \iffalse %% File: textfit.dtx Copyright (C) 1994 Sebastian Rahtz and Phil Taylor % % This package is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. % %<*driver> \documentclass{ltxdoc} \usepackage{textfit} \begin{document} \title{The \textsf{textfit} package for scaling up text to a desired size\thanks{This file has version number \fileversion, last revised \filedate.}} \author{Sebastian Rahtz \and Phil Taylor} \date{\filedate} \maketitle \tableofcontents \DocInput{textfit.dtx} \end{document} % % \fi % \CheckSum{281} % % \section{Introduction} % % The user needs to be able to specify the width or height for text, and % use the largest size necessary to fill that width or height. You % can choose whether to have the size increased by simple points, or % by using magsteps. % Usage: % \verb|\scaletowidth{3in}{This is the way of the world}| % \verb|\scaletoheight{7mm}{This is the way of the world}| % Details are controlled by two options: `magstep' will % make the system use magsteps, not points, and `noisy' % will produce useful messages. % \changes{1}{5/2/93}{Worked out point size by trial and error, increasing % it in increments of 1pt until result reached desired size} % \changes{2}{9/2/93}{Final point size calculated by comparison of size at % 10pt. faster, and takes less TeX memory for intermediate fonts} % \changes{3}{10/1/94}{Revised to make it a \LaTeXe\ package} % \changes{4}{6/2/94}{It only worked if `noisy' option was given ...} % \changes{5}{15/4/94}{Checked again for \LaTeXe} % %Examples; note that the base font is taken from the current state when %you enter the macros. so if you start off with a large font (eg %cmr17), it will give a different result from that obtained by scaling %up cmr5. % %\scaletowidth{1in}{This is the way of the world} % %{\Huge \scaletowidth{1in}{This is the way of the world}} % %{\Huge \scaletowidth{5in}{This is the way of the world}} % %\scaletowidth{5in}{This is the way of the world} % %{\Huge \scaletoheight{1.3in}{Cowabunga!} } % % \scaletowidth{5in}{Gloucestershire Warwickshire Railway} % %\ScalebyMagstepstrue % %\scaletowidth{1in}{This is the way of the world} % %{\Huge \scaletowidth{1in}{This is the way of the world}} % %{\Huge \scaletowidth{5in}{This is the way of the world}} % %\scaletowidth{5in}{This is the way of the world} % %{\Huge \scaletoheight{1.3in}{Cowabunga!} } % \StopEventually{} % \begin{macrocode} %<*package> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{textfit}[\filedate] \newif\ifScalebyMagsteps \newif\ifNoisyFitting \NoisyFittingfalse \ScalebyMagstepsfalse \DeclareOption{noisy}{\NoisyFittingtrue} \DeclareOption{magstep}{\ScalebyMagstepstrue} \ProcessOptions \newcount \mags@f@r \newdimen \desired@size \newcount \r@mainder \newcount \m@gstepcount \newcount \m@gsteplimit \newcount \m@gstepvalue \newdimen \m@gstepdimen % \end{macrocode} % Code for working out the right magstep (this is Phil's bit). % \begin{macrocode} \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 < \m@gsteplimit \advance \m@gstepcount by 1 \ifnum \m@gstepvalue > \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 < 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 } \magsteps 63 \def \Fontname #1{\expandafter \strip@size \fontname #1 } \def \strip@size #1 #2#{#1\void@@@} \def \void@@@ #1{} \gdef\n@d#1.#2:{#1} \def \@scaletofit[#1]#2#3{% \def\Hb@x{h}\def\H@rV{#1}% \ifx\H@rV\Hb@x\def\C@mpare{\wd}\else\def\C@mpare{\ht}\fi \desired@size #2 \def\curr@fontname{\Fontname \font {} }% \ifScalebyMagsteps \mags@f@r \z@ \setbox 0 = \hbox{#3}% \def\@increment{1}% \def\@test{<}% \ifdim \C@mpare 0 > \desired@size \message{When scaling by Magsteps, you cannot go downwards!}% \fi \loop \font \temp@font = \curr@fontname scaled \magstep \mags@f@r \setbox 0 = \hbox{{\temp@font #3}}% \ifNoisyFitting \message {Trying \noexpand \magstep \the \mags@f@r...}% \fi \ifdim \C@mpare 0 \@test \desired@size \advance \mags@f@r by \@increment \repeat \ifnum \mags@f@r=\z@ \mags@f@r1 \fi \advance \mags@f@r by -\@increment \else \font\temp@font=\curr@fontname at1pt \setbox 0 = \hbox{{\temp@font #3}}% \@tempdima\C@mpare0 \multiply\@tempdima by 500 %\@m \def\foo@@{\expandafter\n@d\the\@tempdima:}% \@tempdimb\desired@size \divide\@tempdimb by \foo@@ \multiply\@tempdimb by 500 %\@m \fi \ifScalebyMagsteps \ifNoisyFitting \message {The calculated font is \curr@fontname scaled \noexpand \magstep \the \mags@f@r}% \fi \font \temp@font = \curr@fontname scaled \magstep \mags@f@r \else \ifNoisyFitting \message {The calculated font is \curr@fontname ->\the\@tempdimb}% \fi \font\temp@font=\curr@fontname at \the\@tempdimb \fi \ifx\H@rV\Hb@x \hbox to \desired@size {\hss{\temp@font #3}\hss}% \else \hbox {{\temp@font #3}}% \fi } % user interface \def\scaletowidth{\@scaletofit[h]} \def\scaletoheight{\@scaletofit[v]} % % \end{macrocode} % \Finale \endinput % %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z %% Digits \0\1\2\3\4\5\6\7\8\9 %% Exclamation \! Double quote \" Hash (number) \# %% Dollar \$ Percent \% Ampersand \& %% Acute accent \' Left paren \( Right paren \) %% Asterisk \* Plus \+ Comma \, %% Minus \- Point \. Solidus \/ %% Colon \: Semicolon \; Less than \< %% Equals \= Greater than \> Question mark \? %% Commercial at \@ Left bracket \[ Backslash \\ %% Right bracket \] Circumflex \^ Underscore \_ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~}