summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/relsize
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/relsize
Initial commit
Diffstat (limited to 'macros/latex/contrib/relsize')
-rw-r--r--macros/latex/contrib/relsize/README35
-rw-r--r--macros/latex/contrib/relsize/relsize-doc.pdfbin0 -> 303698 bytes
-rw-r--r--macros/latex/contrib/relsize/relsize-doc.tex209
-rw-r--r--macros/latex/contrib/relsize/relsize.sty397
4 files changed, 641 insertions, 0 deletions
diff --git a/macros/latex/contrib/relsize/README b/macros/latex/contrib/relsize/README
new file mode 100644
index 0000000000..5cc16f9ec4
--- /dev/null
+++ b/macros/latex/contrib/relsize/README
@@ -0,0 +1,35 @@
+relsize.sty 4.1 Mar 29, 2013
+
+Setting the font size relative to the current size
+
+Authored by Donald Arseneau <asnd@triumf.ca> and Matt Swift <swift@bu.edu>.
+(Inspired by smaller.sty author Bernie Cosell)
+
+This software is contributed to the public domain by its authors, who disclaim
+all copyrights. For people and jurisdictions that do not recognize contribution
+to the public domain, this software is licensed by the terms of the unlicense,
+<http://unlicense.org/>
+
+commands are:
+\relsize{n} where n gives the number of steps ("mag-step" = factor of 1.2)
+ to change the size by; n = 3 changes from \normalsize to
+ \LARGE size. Negative n selects smaller fonts. n is an
+ integer (or half-integer).
+
+\smaller = \relsize{-1}, \smaller[n] = \relsize{-n}
+\larger = \relsize{1}, \larger[n] = \relsize{n}
+
+\textsmaller{text}, \textlarger{text} - versions that take an argument
+
+\relscale{f} like \relsize, but instead of scale-steps,
+ the parameter is a scale factor, such as .75
+\textscale{f}{text}
+
+The font-size command nearest the requested size will be used, and if
+the size error is more than \RSpercentTolerance, then the size will
+be adjusted more precisely using \fontsize. (The default empty
+\RSpercentTolerance signals automatic handling, choosing the tolerance
+based on the font declarations.)
+
+\mathsmaller{A}, \mathlarger{B} - math versions
+ (The math versions are entirely different from the text versions.)
diff --git a/macros/latex/contrib/relsize/relsize-doc.pdf b/macros/latex/contrib/relsize/relsize-doc.pdf
new file mode 100644
index 0000000000..31940bc74d
--- /dev/null
+++ b/macros/latex/contrib/relsize/relsize-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/relsize/relsize-doc.tex b/macros/latex/contrib/relsize/relsize-doc.tex
new file mode 100644
index 0000000000..6c63e7eaa7
--- /dev/null
+++ b/macros/latex/contrib/relsize/relsize-doc.tex
@@ -0,0 +1,209 @@
+\documentclass[12pt,pagesize=auto]{scrartcl}
+
+%\usepackage{fixltx2e} my copy of fixltx2e breaks \thanks numbering!
+\usepackage{etex}
+\usepackage{lmodern}
+\usepackage[T1]{fontenc}
+\usepackage{textcomp}
+\usepackage{amstext}
+\usepackage{booktabs}
+\usepackage{microtype}
+% This documentation scrupulously avoide \usepackage{relsize}
+% It also avoids hyperref mailto:
+%\usepackage{hyperref}
+
+\newcommand*{\mail}[1]{\texttt{#1}}
+\newcommand*{\pkg}[1]{\textsf{#1}}
+\newcommand*{\cs}[1]{\texttt{\textbackslash#1}}
+\makeatletter
+\newcommand*{\cmd}[1]{\cs{\expandafter\@gobble\string#1}}
+\makeatother
+\newcommand*{\meta}[1]{\textlangle\textsl{#1}\textrangle}
+\newcommand*{\marg}[1]{\texttt{\{}\meta{#1}\texttt{\}}}
+
+\hyphenpenalty=500
+
+\addtokomafont{title}{\rmfamily}
+
+\title{The \pkg{relsize} package\thanks
+ {This manual corresponds to \pkg{relsize.sty}~v4.1, dated~March 29, 2013.}}
+\author{%
+ by Donald Arseneau\thanks{\mail{asnd@triumf.ca}, Vancouver, Canada}%
+ \and originally based on \pkg{smaller.sty} by Bernie Cosell
+ \and and combined with code by Matt Swift
+}
+\date{March 29, 2013}
+
+
+\begin{document}
+
+\maketitle
+
+\sloppy
+\linespread{1.05}\selectfont
+
+\noindent
+It is frequently the case that something should be typeset somewhat larger
+or smaller than the surrounding text, whatever that size happens to be.
+Specifying such sizing commands explicitly makes it difficult to modify the
+font sizes of a document at a later time, and makes it hard to write macros
+that work at arbitrary sizes. To fill this need, \pkg{relsize.sty} defines
+several commands for \LaTeX\ to set font sizes relative to the current size.
+
+\begin{center}
+ \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}lll@{}}
+ \toprule
+ Command & Function \\
+ \cmidrule(r){1-1} \cmidrule(lr){2-2}
+ \verb|\relsize{|$i$\verb|}| & Change font size by $i$ steps.\\
+ \verb|\larger[|$i$\verb|]| & Increase size by (optional) $i$ steps (default 1).\\
+ \verb|\smaller[|$i$\verb|]| & Reduce font size by $i$ steps (default~1).\\
+ \verb|\relscale{|$f$\verb|}| & Change font size by scale factor $f$.\\
+ \verb|\textlarger[|$i$\verb|]|\marg{text} & Text size enlarged by (optional) $i$ steps.\\
+ \verb|\textsmaller[|$i$\verb|]|\marg{text} & Text size reduced by (optional) $i$ steps.\\
+ \verb|\textscale{|$f$\verb|}|\marg{text} & Text size scaled by factor $f$.\\
+ \bottomrule
+ \end{tabular*}
+\end{center}
+
+To refresh your memory, the font sizing commands in \LaTeX\ are, in order:
+\cmd{\tiny}, \cmd{\scriptsize}, \cmd{\footnotesize}, \cmd{\small},
+\cmd{\normalsize}, \cmd{\large}, \cmd{\Large}, \cmd{\LARGE}, \cmd{\huge},
+\cmd{\Huge} (package \pkg{moresize} adds \cmd{\ssmall} and \cmd{\HUGE}).
+The main new command provided by \pkg{relsize.sty} is \cmd{\relsize},
+which takes one (positive or negative) number as its argument; the number
+specifies how many ``steps'' by which to change the font size, where each
+step is a scaling factor of~1.2, corresponding to the usual difference
+between the size commands. For example, if \verb|{\relsize{-2} smaller}|
+appears in normal sized text, the word ``smaller'' is printed in script
+size type. If the same command appears in a \cmd{\Large} section title,
+then ``smaller'' is printed in normal size.
+
+There are also the commands \cmd{\larger} and \cmd{\smaller}, which normally
+change the font size by one step in the obvious direction; \cmd{\larger} is
+an abbreviation for \verb|\relsize{+1}|, and \cmd{\smaller} is an
+abbreviation for \verb|\relsize{-1}|. For example,
+\verb+{\large... \larger{WOW!}}+ prints {\large ``WOW!''} in \cmd{\Large}
+type. You can also specify bigger steps as an optional argument for
+\cmd{\larger} and \cmd{\smaller}: \verb+\larger[3]+ is equivalent to
+\verb+\relsize{3}+ and \verb+\smaller[2]+ is \verb+\relsize{-2}+. (Both
+\cmd{\larger} and \cmd{\smaller} accept negative arguments, but please
+don't make things so obscure!) If you want to change size by several steps
+it is much better to give an increment than to string several \cmd{\larger}
+commands together; i.e., \verb+\relsize{3}+ or \verb+\larger[3]+, but
+not \verb+\larger\larger\larger+. Half-steps are possible, as in
+\verb+\relsize{-0.5}+ to change from 10\,pt \cmd{\normalsize} to 9\,pt
+\cmd{\small}, but other numbers are rounded to the nearest half-integer.
+
+All of the \cmd{\relsize}, \cmd{\larger}, and \cmd{\smaller} commands
+are ``switches'' just like the regular sizing commands. That is, they
+change the size for all following text until the scope is ended by a
+closing brace (or tabular cell, or environment\,\dots). There are
+alternate versions called \cmd{\textlarger} and \cmd{\textsmaller}
+that take some text as an argument and apply the size change to only
+that text: \verb+\textlarger{big}+.
+
+Using the number of ``magnification steps'' to indicate font size can
+be confusing to some people, and limiting in certain uses. There are
+commands with syntax \cmd{\text\-scale}\marg{factor}\marg{text} and
+\cmd{\relscale}\marg{factor} to select the size based on a scale factor,
+like \verb+\relscale{0.75}+.
+
+If the size requested is too small or too large, a warning is given, and
+the size will only change as far as appropriate, typically \cmd{\tiny} or
+\cmd{\Huge}. These limits are controlled by the commands \cmd{\RSsmallest}
+and \cmd{\RSlargest}, which get set automatically when \pkg{relsize.sty}
+is loaded, but you can redefine them to other length values:
+\verb+\renewcommand\RSlargest{50pt}+ (do not use \cmd{\setlength}).
+
+\begin{small}
+
+Fine point: The combination
+\verb|\relsize{|$n$\verb|}\relsize{|$-n$\verb|}|
+is not guaranteed to
+restore the current font size! That is because the increment $n$ may be
+enough to overflow the range of sizes, depending on \cmd{\RSsmallest},
+\cmd{\RSlargest}, and \cmd{\RSpercentTolerance} (below). You should use
+grouping to undo relative size changes because it is unsafe to counteract
+one change with an ``equal'' change in the opposite direction. Or just use
+the commands that take the text as arguments, like \verb+\textsmaller{this}+.
+
+\end{small}
+
+Typically, the font-size commands do not select fonts at precise regular
+size ratios (and some commands give half-intervals). \cmd{\relsize}
+and the others will select, and execute, the command for the size
+closest to the desired size. Then, if the relative difference
+from the target size is more than \cmd{\RSpercentTolerance} a further
+font-size selection is made. By~default, \cmd{\RSpercentTolerance}
+is an empty macro, which causes automatic selection: ``30'' (30\,\%)
+when the current ``fontshape'' definition is composed of only discrete
+sizes, and ``5'' when the fontshape definition covers ranges of sizes.
+The higher setting for discrete fonts ensures only the pre-defined sizes
+get used. (By~default \LaTeX\ uses Computer Modern fonts at discrete sizes;
+you get full coverage of sizes by using \verb+\usepackage{type1cm}+ or
+various other font package.) For special uses, or when the font shape
+definitions are not parsed properly, you can redefine the percent tolerance:
+\verb+\renewcommand\RSpercentTolerance{10}+. Define it as ``0'' (zero)
+to ensure the scaling is exactly as specified, regardless of the
+document's standard font sizes.
+
+\smallskip
+
+\noindent\centerline{$ - {~} \times {} \mathbin{\vcenter{\hbox{\Large $\times$}}} {} \times {~} - $}
+
+\smallskip
+
+\noindent
+All of the commands described above are text commands; they cannot be used
+in math mode. There are special \cmd{\mathsmaller} and \cmd{\mathlarger} commands
+provided, but these do not use the same sizes that the text versions use.
+Instead, they step between the usual math ``styles'' which you can explicitly
+set using the commands \cmd{\displaystyle}, \cmd{\textstyle}, \cmd{\scriptstyle}, and
+\cmd{\scriptscriptstyle}%
+%[see Lamport, \LaTeX/Manual (1st~ed, p.\,54); GMS The \LaTeX\ Companion, p.\,255]
+\@. However, the \cmd{\mathlarger} command will also increase the
+size beyond regular \cmd{\displaystyle} by selecting a larger regular font size
+(using \cmd{\larger})\@. (Yes, this is a kludge, and doesn't work very well, but
+it can still be useful.) If you want to use this to create big integral
+signs, then you must also load the package \pkg{exscale} so that math symbols
+can change size. The sizes selected are:
+
+\medskip
+\begin{center}
+ \small
+ \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}lll@{}}
+ \toprule
+ Current style & \cmd{\mathsmaller} gives & \cmd{\mathlarger} gives \\
+ \cmidrule(r){1-1} \cmidrule(lr){2-2} \cmidrule(l){3-3}
+ \cmd{\displaystyle} & \cmd{\textstyle} (similar)& \cmd{\displaystyle} in \cmd{\larger} font \\
+ \cmd{\textstyle} & \cmd{\scriptstyle} & \cmd{\displaystyle} (similar) \\
+ \cmd{\scriptstyle} & \cmd{\scriptscriptstyle} & \cmd{\textstyle} \\
+ \cmd{\scriptscriptstyle} & \cmd{\scriptscriptstyle} & \cmd{\scriptstyle} \\
+ \bottomrule
+ \end{tabular*}
+\end{center}
+
+\noindent For example, try \verb+$\frac{\mathlarger{E}}{E}$+~= $\frac{\textstyle E}{E}$.
+Note that, for most symbols,
+\cmd{\display\-style} and \cmd{\text\-style} give the same size, so
+\verb+$N,\mathlarger{N}$+~= $N\displaystyle N$, showing two identical $N$'s,
+but \cmd{\sum} and \cmd{\int} do get bigger in display style,
+and fractions are treated differently too: \\
+\verb+$\int\frac{1}{2}dN - \mathlarger{\int\frac{1}{2}dN}$+~~=~
+$\int\frac{1}{2}dN - \displaystyle{\int\frac{1}{2}dN}$.\\[3pt]
+As you might have guessed, \cmd{\mathlarger} and \cmd{\mathsmaller}
+should only be used in math mode.
+
+These commands will attempt to attach any superscripts and subscripts
+directly to the symbol within the braces, rather than how they would attach
+to a math sub-formula. On the other hand, math accents and the math
+spacing do behave as if the symbol is enclosed in braces (which it is).
+Operators should be explicitly declared to use the right operator
+type (\cmd{\mathrel}, \cmd{\mathbin}, \cmd{\mathop}) to get the correct
+spacing, e.g., \verb+\mathrel{\mathsmaller{=}}+.
+
+Due to their oddities, the math larger/smaller commands should not be
+trusted very far, and they will not be useful in every instance.
+
+\end{document}
diff --git a/macros/latex/contrib/relsize/relsize.sty b/macros/latex/contrib/relsize/relsize.sty
new file mode 100644
index 0000000000..a12bbb49e6
--- /dev/null
+++ b/macros/latex/contrib/relsize/relsize.sty
@@ -0,0 +1,397 @@
+% relsize.sty 4.1 Mar 29, 2013
+%
+% Setting the font size relative to the current size
+%
+% Authored by Donald Arseneau <asnd@triumf.ca> and Matt Swift <swift@bu.edu>.
+% (Inspired by smaller.sty author Bernie Cosell)
+%
+% This software is contributed to the public domain by its authors, who disclaim
+% all copyrights. For people and jurisdictions that do not recognize contribution
+% to the public domain, this software is licensed by the terms of the unlicense,
+% <http://unlicense.org/>
+%
+% commands are:
+% \relsize{n} where n gives the number of steps ("mag-step" = factor of 1.2)
+% to change the size by; n = 3 changes from \normalsize to
+% \LARGE size. Negative n selects smaller fonts. n is an
+% integer (or half-integer).
+%
+% \smaller = \relsize{-1}, \smaller[n] = \relsize{-n}
+% \larger = \relsize{1}, \larger[n] = \relsize{n}
+%
+% \textsmaller{text}, \textlarger{text} - versions that take an argument
+%
+% \relscale{f} like \relsize, but instead of scale-steps,
+% the parameter is a scale factor, such as .75
+% \textscale{f}{text}
+%
+% The font-size command nearest the requested size will be used, and if
+% the size error is more than \RSpercentTolerance, then the size will
+% be adjusted more precisely using \fontsize. (The default empty
+% \RSpercentTolerance signals automatic handling, choosing the tolerance
+% based on the font declarations.)
+%
+% \mathsmaller{A}, \mathlarger{B} - math versions
+% (The math versions are entirely different from the text versions.)
+%
+% More comments at the end of this file, and full documentation in
+% relsize-doc.pdf
+
+\ProvidesPackage{relsize}[2013/03/29 ver 4.1]
+
+\DeclareRobustCommand\relsize[1]{%
+\ifmmode \@nomath\relsize\else
+ \begingroup
+ % number of demi-magsteps -> \@tempcnta
+ \@tempdima#1\p@ \@tempdima2.0002\@tempdima \divide\@tempdima\p@
+ \@tempcnta\@tempdima
+ % \message{^^JChange \the\@tempcnta\space half-magsteps from \f@size. }%
+ % calculate desired target size -> \@tempdimb
+ \@tempdimb\f@size\p@
+ \ifnum\@tempcnta<\z@
+ \def\@tempa{.912871}\@tempcnta=-\@tempcnta
+ \else
+ \def\@tempa{1.09545}%
+ \fi
+ \@whilenum {\@tempcnta>\z@}\do {%
+ \advance\@tempcnta\m@ne
+ \@tempdimb\@tempa\@tempdimb}%
+ % \message{ target size \the\@tempdimb. }%
+ \rs@scaleToB
+\fi}
+
+\DeclareRobustCommand\relscale[1]{%
+\ifmmode \@nomath\relscale\else
+ \begingroup
+ \@tempdimb\f@size\p@ \@tempdimb#1\@tempdimb
+ \rs@scaleToB
+\fi}
+
+\DeclareRobustCommand\textscale[2]{\leavevmode
+ \begingroup\relscale{#1}#2\endgroup}
+
+% Change font size to \@tempdimb. Follows from \relsize or \relscale
+\def\rs@scaleToB{%
+ %\message{Change font size from \f@size\space to \the\@tempdimb. }%
+ % perform automatic tolerance adjustment, if requested
+ \ifx\RSpercentTolerance\@empty \rs@autoTol \fi
+ % apply limits
+ \ifdim\@tempdimb<\RSsmallest
+ \rs@size@warning{\the\@tempdimb}{small}{\RSsmallest}%
+ \@tempdimb=\RSsmallest
+ \fi
+ \ifdim\@tempdimb>\RSlargest
+ \rs@size@warning{\the\@tempdimb}{large}{\RSlargest}%
+ \@tempdimb=\RSlargest
+ \fi
+ % Look up that size in list of pre-defined sizes. Put error of
+ % closest match in \@tempdima
+ \def\@tempa{\relax}\@tempdima-\@m\p@
+ \let\rs@size\rs@lookup \rs@fontsizes
+ %\message{Look up best as \expandafter\string\@tempa, off by \the\@tempdima}%
+ % See how close match was (abs difference -> \@tempdima)
+ \ifdim\@tempdima<\z@ \@tempdima-\@tempdima\fi
+ % ... percentage error in \@tempdima (as a count)
+ % (messiness to prevent numeric overflows)
+ \ifdim\@tempdima<160\p@ \@tempdima 100\@tempdima
+ \ifdim\@tempdimb>\p@ \divide\@tempdima\@tempdimb \fi
+ %\message{or \number\@tempdima \@percentchar. }%
+ \fi
+ % if error is beyond tolerance, append \fontsize adjustment.
+ \ifnum\@tempdima>\RSpercentTolerance
+ %\message{Adjust size to \strip@pt\@tempdimb. }%
+ \@tempdima1.2\@tempdimb % baselineskip (could be improved)
+ \edef\@tempa{\expandafter\noexpand\@tempa \noexpand\fontsize
+ {\strip@pt\@tempdimb}{\strip@pt\@tempdima}\noexpand\selectfont}\fi
+ % Now execute size-change command \@tempa
+ \expandafter\endgroup\@tempa
+ %\message{Font size is now \f@size. }%
+}
+
+% For each defined font size, compare its actual size to the desired
+% size (\@tempdimb) and the error of the best previous match (\@tempdima).
+% Record this command (\@tempa) if it is closer.
+\def\rs@lookup#1#2{% #1=command #2=size
+ \begingroup
+ \advance\@tempdimb-#2\relax
+ \ifdim\@absVal\@tempdimb<\@absVal\@tempdima % improvement
+ \endgroup
+ \def\@tempa{#1}%
+ \@tempdima#2\relax \advance\@tempdima-\@tempdimb
+ \else
+ \endgroup
+ \fi}
+\def\@absVal#1{\ifnum#1<\z@-\fi#1}
+
+% Tolerance for size mis-match (%). The empty definition triggers
+% automatic selection: 5 for scalable fonts, 30 otherwise.
+
+\def\rs@autoTol{%
+ \expandafter\expandafter\expandafter\rs@autoTOL
+ \expandafter\meaning
+ \csname\f@encoding/\f@family/\f@series/\f@shape\endcsname-\delimiter
+}
+\def\rs@autoTOL#1>#2-#3\delimiter{%
+ \ifx\delimiter#3\delimiter % no -
+ \def\RSpercentTolerance{30}%
+ \else % font size def has -, assume it covers continuum
+ \def\RSpercentTolerance{5}%
+ \fi
+ % \message{ Automatic tolerance is \RSpercentTolerance. }%
+}
+
+% Warning messages
+
+\newcommand\rs@size@warning[3]{\PackageWarning{relsize}{%
+ Font size #1 is too #2.\MessageBreak Using #3 instead}}
+
+% derived commands
+
+\DeclareRobustCommand\larger[1][\@ne]{\relsize{+#1}}
+\DeclareRobustCommand\smaller[1][\@ne]{\relsize{-#1}}
+\DeclareRobustCommand\textlarger[2][\@ne]{\leavevmode{\relsize{+#1}#2}}
+\DeclareRobustCommand\textsmaller[2][\@ne]{\leavevmode{\relsize{-#1}#2}}
+
+
+% Some initializations.
+
+% Default empty definition triggers auto-tolerance.
+% Beware that \providecommand makes \long macro that fails to trigger.
+
+\def\RSpercentTolerance{}
+
+% The next two aren't the real initializations! The real ones are done
+% in \@tempb below. The user can change them afterwards.
+
+\def\RSsmallest{999pt}
+\def\RSlargest{1pt}
+
+% Right now we assemble a list of the font sizes
+
+\def\rs@size{\noexpand\rs@size\noexpand}
+\def\rs@fontsizes{}
+\def\@tempa#1{\ifx\@undefined#1\else
+ \expandafter\@tempb#1\@empty\relax\relax\delimiter{#1}\fi}
+% parse definition of font-size command (like \large)
+% #1 = \@setfontsize #2 = the command (\large) #3 = size #4 = rest
+\def\@tempb#1#2#3#4\delimiter#5{%
+ \def\@tempc{\protect !\@empty}\def\@tempd{#1!#3}%
+ \ifx\@tempc\@tempd % self-protected: recurse.
+ \expandafter\@tempb#2\@empty\relax\relax\delimiter{#5}%
+ \else
+ \@tempdimb\z@
+ \def\@tempc{\@setfontsize !#5}\def\@tempd{#1!#2}%
+ \ifx\@tempc\@tempd % Normal LaTeX2e
+ \afterassignment\strip@prefix \@tempdimb #3pt>%
+ \else
+ \def\@tempc{\@xsetfontsize !#5}\def\@tempd{#1!#2}%
+ \ifx\@tempc\@tempd % AMS (defines \@xp=\expandafter. Note: they have their own \larger/\smaller)
+ \chardef\@currsizeindex#3\relax
+ \edef\@tempc{\@xp\ifcase\@xp\@currsizeindex\@typesizes\fi}%
+ \afterassignment\strip@prefix \@tempdimb \@xp\@firstoftwo\@tempc pt>%
+ \else
+ \def\@tempc{\@setsize !#5}\def\@tempd{#1!#2}%
+ \ifx\@tempc\@tempd % 2.09 style
+ \afterassignment\strip@prefix \@tempdimb #3pt>%
+ \else
+ \def\@tempc{\slide@setsize !#5}\def\@tempd{#1!#2}%
+ \ifx\@tempc\@tempd % seminar
+ \afterassignment\strip@prefix \@tempdimb #3pt>%
+ \else
+ \def\@tempc{\fontsize}\def\@tempd{#1}%
+ \ifx\@tempc\@tempd % simple
+ \afterassignment\strip@prefix \@tempdimb #2pt>%
+ \else
+ %\message{Could not parse meaning of \string#5. }%
+ \fi\fi\fi\fi\fi
+ % Checked 5 possible definitions
+ \ifdim\@tempdimb=\z@ % Failed to parse size from definition
+ \else % Take note of this size.
+ \edef\rs@fontsizes{\rs@fontsizes\rs@size#5{\the\@tempdimb}}%
+ \ifdim\@tempdimb<\RSsmallest \edef\RSsmallest{\the\@tempdimb}\fi
+ \ifdim\@tempdimb>\RSlargest \edef\RSlargest{\the\@tempdimb}\fi
+ %\message{\string#5 has size \the\@tempdimb. ^^J}%
+ \fi
+ \fi
+}
+
+% examine each (expected) pre-defined font size
+\@tempa\normalsize
+\@tempa\small
+\@tempa\footnotesize
+\@tempa\large
+\@tempa\Large
+\@tempa\LARGE
+\@tempa\scriptsize
+\@tempa\tiny
+\@tempa\huge
+\@tempa\Huge
+% moresize.sty
+\@tempa\HUGE
+\@tempa\ssmall
+% beamer
+\@tempa\Tiny
+\@tempa\TINY
+% AMS classes
+\@tempa\SMALL
+\@tempa\Small
+
+%\show\rs@fontsizes
+
+% Check that we recorded sizes for at least two font-size commands.
+% Value of \RSpercentTolerance is both a setting and a flag
+\ifx\rs@fontsizes\@empty
+ \def\RSpercentTolerance{0}%
+\else\ifdim\RSsmallest<\RSlargest\else
+ \def\RSpercentTolerance{3}%
+\fi\fi
+
+\ifx\RSpercentTolerance\@empty \else
+
+ \PackageWarningNoLine{relsize}
+ {Failed to get list of defined font sizes.\MessageBreak
+ Size scaling will attempt arbitrary sizes.}
+
+ \def\RSsmallest{\p@}%
+ \def\RSlargest{100pt}%
+
+\fi
+
+%
+% Math commands (completely different)
+
+\DeclareRobustCommand\mathsmaller[1]{\bgroup
+ \let\rs@makechoice\rs@makesmallerchoice
+ \def\rs@mathatom{#1}%
+ \futurelet\@tempa\rs@collect@decor
+}
+\DeclareRobustCommand\mathlarger[1]{\bgroup
+ \let\rs@makechoice\rs@makelargerchoice
+ \def\rs@mathatom{#1}%
+ \futurelet\@tempa\rs@collect@decor
+}
+
+% Collect the tokens that 'decorate' the atom, to apply them directly on the
+% symbol, not after the closing brace.
+% Math so far is in \rs@mathatom; next tok is \@tempa; continuation is \@tempb
+% Don't nest \ifs because token may be \if or \fi or \or...
+\def\rs@collect@decor{%
+ \let\@tempb\rs@makechoice
+ \ifx\@tempa\limits \let\@tempb\rs@collect@one@decor \fi
+ \ifx\@tempa\displaylimits \let\@tempb\rs@collect@one@decor \fi
+ \ifx\@tempa\nolimits \let\@tempb\rs@collect@one@decor \fi
+ \if\noexpand\@tempa^\let\@tempb\rs@collect@two@decor \fi
+ \if\noexpand\@tempa_\let\@tempb\rs@collect@two@decor \fi
+ \ifx\@tempa\sp \let\@tempb\rs@collect@two@decor \fi
+ \ifx\@tempa\sb \let\@tempb\rs@collect@two@decor \fi
+ \@tempb}
+\def\rs@collect@one@decor#1{%
+ \expandafter\def\expandafter\rs@mathatom\expandafter{\rs@mathatom#1}%
+ \futurelet\@tempa\rs@collect@decor}
+\def\rs@collect@two@decor#1#2{\expandafter
+ \def\expandafter\rs@mathatom\expandafter{\rs@mathatom#1{\rs@sstyle{#2}}}%
+ \futurelet\@tempa\rs@collect@decor}
+\let\rs@sstyle\@firstofone
+
+\def\rs@makesmallerchoice{\mathchoice
+ {\textstyle \let\rs@sstyle\scriptstyle \rs@mathatom}%
+ {\scriptstyle \let\rs@sstyle\scriptstyle \rs@mathatom}%
+ {\scriptscriptstyle \let\rs@sstyle\scriptscriptstyle \rs@mathatom}%
+ {\scriptscriptstyle \let\rs@sstyle\scriptscriptstyle \rs@mathatom}%
+ \egroup}
+\def\rs@makelargerchoice{\mathchoice
+ {\protected@edef\rs@sstyle##1{%
+ \protect\set@fontsize {1}{\f@size}{\f@baselineskip}\protect\selectfont
+ \hbox{$\scriptstyle ##1\m@th$}}%
+ \mbox{\larger$\displaystyle\rs@mathatom\m@th$}}%
+ {\displaystyle \let\rs@sstyle\scriptstyle \rs@mathatom}%
+ {\textstyle \let\rs@sstyle\scriptscriptstyle \rs@mathatom}%
+ {\scriptstyle \let\rs@sstyle\scriptscriptstyle \rs@mathatom}%
+ \egroup}
+
+\endinput
+==========================================================
+
+R E L S I Z E . S T Y ver 4.1 Mar 29, 2013
+
+by Donald Arseneau, asnd@triumf.ca, Vancouver, Canada
+originally based on smaller.sty by Bernie Cosell,
+and combined with the version by Matt Swift, swift@bu.edu.
+
+
+It is frequently the case that something should be typeset somewhat larger
+or smaller than the surrounding text, whatever that size happens to be.
+Specifying such sizing commands explicitly makes it difficult to modify the
+font sizes of a document at a later time, and makes it hard to write macros
+that work at arbitrary sizes. Relsize.sty defines several commands for LaTeX
+to set font sizes relative to the current size.
+
+For i being an integer (or half-integer) magstep increment (like 2),
+and optional arg [i] defaulting to i=1,
+And f being a scale factor (like 0.75)
+And text being the text argument
+
+\relsize{i} ungrouped size change by i steps
+\larger[i] ungrouped size change by (optional) i steps
+\smaller[i] ungrouped size change by (optional) -i steps
+\relscale{f} ungrouped size change by scale factor f
+\textlarger[i]{text} "text" size enlarged by i steps
+\textsmaller[i]{text} "text" size reduced by i steps
+\textscale{f}{text} "text" sized scaled by factor f
+
+
+If the size requested is too small or too large, a warning is given, and
+the size will only change as far as appropriate, typically \tiny or \Huge.
+These limits are controlled by the commands \RSsmallest and \RSlargest, which
+get set automatically when relsize.sty is loaded, but you can redefine them
+to other length values: \renewcommand\RSlargest{50pt}.
+
+Fine point: The combination \relsize{n}\relsize{-n} is not guaranteed to
+restore the current font size!
+
+Typically, the font-size commands do not select fonts at regular size
+intervals. \relsize (and the others) will select, and execute, the command
+for the size closest to the desired size. Then, if the relative difference
+from the target size is more than \RSpercentTolerance a further font-size
+selection is made. By default, \RSpercentTolerance is an empty macro, which
+causes automatic selection: "30" (30%) when the current "fontshape" definition
+is composed of only discrete sizes, and "5" when the fontshape definition
+covers ranges of sizes. The higher setting for discrete fonts ensures
+only the pre-defined sizes get used. (By default LaTeX uses Computer
+Modern fonts at discrete sizes; you get full coverage of sizes by using
+\usepackage{type1cm} or various other font packages.) For special uses,
+or when the font shape definitions are not parsed properly, you can redefine
+the percent tolerance:
+\renewcommand\RSpercentTolerance{10}.
+
+All of the commands described above are text commands; they cannot be used
+in math mode. There are special \mathsmaller and \mathlarger commands
+provided, but these do not use the same sizes that the text versions use.
+Instead, they step between the usual math "styles" which you can explicitly
+set using the commands \displaystyle, \textstyle, \scriptstyle, and
+\scriptscriptstyle [see Lamport, LaTeX/Manual (1st ed, p.54); GMS The LaTeX
+Companion, p.255]. However, the \mathlarger command will also increase the
+size beyond regular \displaystyle by selecting a larger regular font size
+(using \larger). (Yes, this is a kludge, and doesn't work very well, but
+it can still be useful.) If you want to use this to create big integral
+signs, then you must also load the package "exscale" so that math symbols
+can change size. The sizes selected are:
+
+Current style \mathsmaller gives \mathlarger gives
+--------------- ---------------------- ------------------------
+\displaystyle \textstyle (almost same) \displaystyle in a \larger font
+\textstyle \scriptstyle \displaystyle (almost same)
+\scriptstyle \scriptscriptstyle \textstyle
+\scriptscriptstyle \scriptscriptstyle (same) \scriptstyle
+
+These commands will attempt to attach superscripts and subscripts to the
+symbol as if the symbol were used alone, but math accents and the math
+spacing behave as if the symbol is enclosed in braces (which it is).
+Operators should be explicitly declared to use the right operator
+type (\mathrel, \mathbin, \mathop) to get the correct spacing.
+
+Due to their oddities, the math larger/smaller commands should not be
+trusted blindly, and they will not be useful in every instance.
+
+
+Donald Arseneau asnd@triumf.ca