% \iffalse meta-comment % File `textfit.dtx'. % % Copyright (C) 1994 by Sebastian Rahtz and Phil Taylor % All rights reserved. % % @LaTeX-style-file{ % author = "Sebastian Rahtz and Phil Taylor", % version = "3", % date = "10th January 1994", % filename = "textfit.sty", % email = "spqr@ftp.tex.ac.uk (Internet)", % keywords = "LaTeX, scaling", % supported = "yes", % docstring = " % % textfit.sty % % LaTeX style option for scaling up text to a desired size. Requires LaTeX2e % "} % You are not allowed to change this file. You may however copy % this file to a file with a different name and then change the copy. % % \fi \def\fileversion{3} \def\filedate{1994/01/10} \def\docdate{1994/01/10} % \CheckSum{310} % % \iffalse This is a META comment % % Copying of this file is authorized only if either % (1) you make absolutely no changes to your copy, including name, or % (2) if you do make changes, you name it something other than % textfit.dtx. % Please send bug reports to: % % S Rahtz % 12 Cygnet Street % York Y02 1AG % UK % email: spqr@ftp.tex.ac.uk % \fi % % % \title{The \texttt{textfit.dtx} file\thanks % {This file has version number \fileversion, dated \filedate. % The documentation was last revised on \docdate}\\ % } % \author{Sebastian Rahtz and Phil Taylor} % % \MakeShortVerb{\|} % \def\dst{{\csname mediumseries\endcsname\sc docstrip}} % \setcounter{StandardModuleDepth}{1} % % \maketitle % % \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} % %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} %<*textfit> \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 \ifNoisyFitting \ifScalebyMagsteps \message {The calculated font is \curr@fontname scaled \noexpand \magstep \the \mags@f@r}% \font \temp@font = \curr@fontname scaled \magstep \mags@f@r \else \message {The calculated font is \curr@fontname ->\the\@tempdimb}% \font\temp@font=\curr@fontname at \the\@tempdimb \fi \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]} % % \Finale % \end{macrocode} % \section{A driver for this document} % % The next bit of code contains the documentation driver file for % \TeX{}, i.e., the file that will produce the documentation you are % currently reading. It will be extracted from this file by the % \dst{} program. % \begin{macrocode} %<*driver> \documentclass{article} \usepackage{doc} \usepackage[noisy]{textfit} % dimensions from ltugboat.sty: \setlength\textwidth{31pc} \setlength\textheight{54pc} \setlength{\parindent}{0pt} \setlength{\parskip}{2pt plus 1pt minus 1pt} \setlength{\oddsidemargin}{8pc} \setlength{\marginparwidth}{8pc} \setlength{\topmargin}{-2.5pc} \setlength{\headsep}{20pt} \setlength{\columnsep}{1.5pc} \setlength{\columnwidth}{18.75pc} \DisableCrossrefs \CodelineIndex % Index code by line number %\OnlyDescription % comment out for implementation details \begin{document} \DocInput{textfit.dtx} \end{document} % % \end{macrocode} % % % The next line goes into all files and in addition prevents \dst{} % from adding any further code from the main source file (such as a % character table. % \begin{macrocode} \endinput % \end{macrocode} % % \DeleteShortVerb{\|} % % \Finale % %% \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 \~}