summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-11 23:59:06 +0000
committerKarl Berry <karl@freefriends.org>2006-01-11 23:59:06 +0000
commit59aa2576ef260def2b412abb242644e53aa0d071 (patch)
tree2c87a474c32b716b0fa629ba0c2ad783161feee2 /Master/texmf-dist/source/latex
parentb8abc3579bf636e5d9a30f990d9201c57f4e5019 (diff)
trunk/Master/texmf-dist/source/latex/xfrac
git-svn-id: svn://tug.org/texlive/trunk@593 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex')
-rw-r--r--Master/texmf-dist/source/latex/xfrac/xfrac.dtx955
-rw-r--r--Master/texmf-dist/source/latex/xfrac/xfrac.ins55
2 files changed, 1010 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/xfrac/xfrac.dtx b/Master/texmf-dist/source/latex/xfrac/xfrac.dtx
new file mode 100644
index 00000000000..72c2105d2ec
--- /dev/null
+++ b/Master/texmf-dist/source/latex/xfrac/xfrac.dtx
@@ -0,0 +1,955 @@
+%\iffalse meta-comment
+% File `xfrac.dtx'.
+% Copyright 2004 Morten H\o gholm.
+% moho01ab@student.cbs.dk
+%
+% It may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% The Current Maintainer of this work is Morten H\o gholm.
+%
+% This work consists of the files xfrac.dtx, xfrac.ins and the
+% derived file xfrac.sty.
+%
+%<package>\NeedsTeXFormat{LaTeX2e}[2003/12/01]
+%<package>\ProvidesPackage{xfrac}
+%<package> [2004/10/10 v0.11b Slashed Fractions (MH)]
+%
+%<*driver>
+\RequirePackage{fix-cm}
+\documentclass{ltxdoc}
+\usepackage{xfrac}
+\usepackage{nicefrac}
+\usepackage[latin1]{inputenc}
+\usepackage[T1]{fontenc}
+\makeatletter
+\newenvironment{TemplateInterfaceDescription}[1]
+ {\subsection{The Template Type `#1'}%
+ \begingroup
+ \@beginparpenalty\@M
+ \description
+ \def\TemplateArgument##1##2{\item[Arg: ##1]##2\par}%
+ \def\TemplateSemantics{\enddescription\endgroup
+ \subsubsection*{Semantics:}}%
+ }
+ {\par\bigskip}
+
+\newenvironment{TemplateDescription}[2]
+ {\subsection{The Template `#2' (type #1)}%
+ \subsubsection*{Attributes:}%
+ \begingroup
+ \@beginparpenalty\@M
+ \description
+ \def\TemplateKey##1##2##3##4{\item[##1 (##2)]##3%
+ \ifx\TemplateKey##4\TemplateKey\else
+% \hskip0ptplus3em\penalty-500\hskip 0pt plus 1filll Default:~##4%
+ \hfill\penalty500\relax\qquad \hbox{}\hfill Default:~##4%
+ \nobreak\hskip-\parfillskip\hskip0pt\relax
+ \fi
+ \par}%
+ \def\TemplateSemantics{\enddescription\endgroup
+ \subsubsection*{Semantics \& Comments:}}%
+ }
+ {\par\bigskip}
+
+\renewcommand*\MakePrivateLetters{\makeatletter\catcode`\_=11\relax}
+\makeatother
+
+\providecommand*\eTeX{\ensuremath{\varepsilon}-\kern-.125em\TeX}
+\providecommand*\LaTeXplus{\LaTeXe$*$}
+\providecommand*\key[1]{\textbf{#1}}
+\providecommand*\package[1]{\textsf{#1}}
+\newcommand*\switch[2]{{\fontfamily{#1}\selectfont #2}}
+
+
+\begin{document}
+ \DocInput{xfrac.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \GetFileInfo{xfrac.sty}
+% \CheckSum{320}
+%
+% \changes{v0.11}{2004/05/08}{Consistent naming}
+%
+% \changes{v0.10a}{2004/04/06}{Added a dependency of the latest
+% \LaTeX{} release}
+% \changes{v0.10a}{2004/04/06}{First version on \textsc{ctan}}
+%
+% \changes{v0.10}{2004/04/05}{First publicly available prototype
+% implementation}
+%
+% \title{The \package{xfrac} package\thanks{This file has version number
+% \fileversion, last revised \filedate.}}
+%
+% \author{Morten H\o gholm}
+% \date{\filedate}
+%
+% \maketitle
+%
+% \begin{abstract}
+% This package uses a template interface to produce nicely looking
+% \emph{split level} fractions like \nicefrac{7}{9}\ldots{}
+% ehrm\ldots{} I mean \sfrac{7}{9}.
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \section{A Bit of History}
+%
+% \subsection{The Past}
+%
+% One of the first exercises in \emph{The \TeX Book} is to design a
+% macro for split level fractions. The solution shows a level of
+% simplicity only rivaled by its fundamental design flaws: It can
+% only be used when the text font and the math font are the same and
+% worse still it uses a \emph{virgule} (a slash) for separating the
+% two components. The proper symbol for that is a \emph{solidus}
+% which sadly is absent from Computer Modern. It is however
+% available in the European Computer Modern fonts, but I'll get back
+% to that.
+%
+% \subsection{The Present}
+%
+% So how does people produce split level fractions nowadays? The
+% answer is that they use the \package{nicefrac} package. For text
+% it gives you \nicefrac{1}{2}, while the built-in
+% \package{textcomp} symbol is \textonehalf. Hmmm, bad example due
+% to the strange design of the EC fonts. Lets try Palatino instead.
+% Then |\nicefrac{1}{2}| produces \switch{ppl}{\nicefrac{1}{2}}
+% while the built-in symbol is \switch{ppl}{\textonehalf}, and it's
+% plain to see the problems; a)~it uses the virgule instead of the
+% solidus and b)~the font size of the numerator and the denominator
+% is bigger than in the built-in symbol. We'll have to take care of
+% this somehow.
+%
+% Another problem arises when the font has old style figures as the
+% \package{eco} package provides for Computer Modern. Here we get
+% results like \switch{cmor}{\nicefrac{1}{2}} and
+% \switch{cmor}{\nicefrac{8}{9}}. We'll have to do better than that.
+%
+% That was text mode. I wonder what happens in math mode?
+% \begin{verbatim}
+% \[
+% \mathbf{ 2 \times \nicefrac{1}{2} }
+% \times \mathit{2\times \nicefrac{1}{2}}
+% \]
+% \end{verbatim}
+% \[
+% \mathbf{ 2 \times \nicefrac{1}{2} }
+% \times \mathit{2\times \nicefrac{1}{2}}
+% \]
+% Whoops! Didn't see that coming, did you? I certainly didn't.
+%
+%
+% This section sounds very much like me tearing the
+% \package{nicefrac} package apart and well, yes, that's precisely
+% what I'm doing. It \emph{is} simple and it \emph{does} produce
+% somewhat acceptable results for Computer Modern, but if we want a
+% single package for producing such fractions we need a radical new
+% approach.
+%
+%
+%
+%
+% \subsection{The Future}
+%
+% Fonts are wildly different; one macro that works fine for Computer
+% Modern obviously doesn't work well at all in Palatino. For one we
+% have to make the separator symbol configurable, and we need to
+% take care of several details as well: font scaling of the
+% numerator/denominator pair (ND), font selection of ND etc. If we
+% are to have a single package for this in the future\footnote{As
+% this is intended to be about the future, the \package{xfrac} package
+% requires the \eTeX{} extensions.} we have to define a totally
+% generic interface for the fraction commands and then adjust
+% parameters depending on the current font. What you see in this
+% prototype implementation of \package{xfrac} is just that.
+%
+%
+% \section{The User Interface}
+%
+% The \package{xfrac} package defines a document command \cs{sfrac}
+% with the following syntax:
+% \begin{quote}
+% \cs{sfrac}\oarg{instance}\marg{num}\oarg{sep}\marg{denom}
+% \end{quote}
+% Lets show a few examples:
+% \begin{verbatim}
+% \sfrac{1}{2}, $\sfrac{1}{2}$,
+% $\mathbf{3\times\sfrac{1}{2}}$
+% \quad \fontfamily{ppl}\selectfont Palatino: \sfrac{1}{2}
+% \quad \fontfamily{ptm}\selectfont Times: \sfrac{1}{2}
+% \end{verbatim}
+% \begin{quote}
+% \sfrac{1}{2}, $\sfrac{1}{2}$, $\mathbf{3\times\sfrac{1}{2}}$
+% \quad \fontfamily{ppl}\selectfont Palatino: \sfrac{1}{2}
+% \quad \fontfamily{ptm}\selectfont Times: \sfrac{1}{2}
+% \end{quote}
+% You'll notice something interesting: Not only does the \cs{sfrac}
+% command work as it should in math mode, it also gets the job done
+% for other fonts as well.
+%
+% \subsection{Text mode}
+%
+% The usual problem in text mode has a name: Computer Modern. The
+% solidi of all the Computer Modern fonts leave a lot to be desired,
+% although things are potentially looking better as the Latin Modern
+% fonts are becoming more stable and widespread. As long as the
+% default fonts are Computer Modern variants we must however work
+% around this. One idea that comes to mind is to see what happens
+% when you use a solidus from another font instead. Lets try with
+% Times:
+% \begin{quote}
+% \DeclareInstance{xfrac}{cmr2}{text}{
+% slash-symbol-font = ptm,
+% }
+% ``You take \sfrac[cmr2]{1}{2} cup of sugar, \ldots''
+% \end{quote}
+% That looks quite good actually, so it was probably very difficult
+% to obtain that result. Nope, it was extremely easy---if you happen
+% to know about \emph{instances}:
+% \begin{verbatim}
+% \DeclareInstance{xfrac}{cmr}{text}{
+% slash-symbol-font = ptm,
+% }
+% \end{verbatim}
+% So we define an instance with the name `cmr' from the template
+% `text' which in turn is of template type `xfrac'. You'll notice
+% the `cmr' is also the name of the font family for Computer Modern
+% Roman and the reasoning behind is that every font family should
+% have it's own settings, and if a document command is to work well
+% in that scheme, letting it use the name of the current font family
+% seems like a good idea. Thus the \cs{sfrac} command checks to see
+% whether an instance with same name as the current font family
+% exists and uses it if the test is true; otherwise the default
+% setting is used. Here we defined the instance to be used for the
+% font family `cmr' and just told it to use the Times font for
+% typesetting the slash symbol which turns out to be a solidus by
+% default.
+%
+% The option \texttt{cm-recommended} which is loaded by default uses
+% the Times solidus for Computer Modern Roman and Computer Modern
+% Sans Serif and the Palatino solidus for Computer Modern Typewriter
+% Type. This looks quite good. Should you however not want this you
+% can use the option \texttt{cm-standard} which produces somewhat
+% acceptable results using Computer Modern exclusively.
+%
+% So what about old style figures? If you use the \package{eco}
+% package you might define an instance similar to this (`cmor' is
+% the name of the roman font activated by \package{eco}):
+% \DeclareInstance{xfrac}{cmor}{text}{
+% slash-symbol-font = ptm,
+% numerator-font = cmr,
+% denominator-font = cmr,
+% }
+% \begin{verbatim}
+% \DeclareInstance{xfrac}{cmor}{text}{
+% slash-symbol-font = ptm,
+% numerator-font = cmr,
+% denominator-font = cmr,
+% }
+% \end{verbatim}
+% We also use regular Computer Modern Roman for typesetting ND, so
+% we end up with \switch{cmor}{\sfrac{1}{2}} and
+% \switch{cmor}{\sfrac{8}{9}} instead of
+% \switch{cmor}{\nicefrac{1}{2}} and \switch{cmor}{\nicefrac{8}{9}}.
+% Much better.
+%
+% There are also situations where other tricks are useful. If you
+% don't have the inferior and superior figures available in a font,
+% or the font doesn't have a wider design for small font sizes, you
+% can cheat by manually scaling the ND-pair. I got nice results for
+% Adobe's Stempel Garamond (with small caps and old style figures)
+% with the following setup:
+% \begin{verbatim}
+% \DeclareInstance{xfrac}{pegj}{text}{
+% numerator-font = pegx,
+% denominator-font = pegx,
+% scale-factor = .9,
+% h-scale = 1.1,
+% }
+% \end{verbatim}
+% We use the font family `pegx' (Stempel Garamond with real small
+% caps) for typesetting the ND-pair. Additionally the key
+% \key{scale-factor} specifies that the font size used for the
+% ND-pair should be $0.9$ of the height of the solidus, and the key
+% \key{h-scale} specifies that the ND-pair should be scaled an extra
+% 10\% horizontally.
+%
+% Should you be so fortunate the have a font with inferior and
+% superior figures like in the Monotype Janson example from Philipp
+% Lehman's excellent \emph{The Font Installation Guide}. In that
+% example Philipp defines the font families `mjn0' for the inferior
+% figures and `mjn1' for the superior. Thus to get the \cs{sfrac}
+% command to use them on the fly for the font family `mjnj' (Janson,
+% old style figures) we would say
+% \begin{verbatim}
+% \DeclareInstance{xfrac}{mjnj}{text}{
+% numerator-font = mjn1,
+% denominator-font = mjn0,
+% scaling = false,
+% numerator-bot-sep = 0pt,
+% denominator-bot-sep = 0pt,
+% }
+% \end{verbatim}
+% I think this example is a very clean way to do it. An alternative
+% approach could be to use the keys \key{numerator-format} and
+% \key{denominator-format} to process the arguments and let them
+% determine what to do.
+%
+% As a side note Harald Harders was so kind to test it, and it
+% \emph{does} actually work---I hadn't tested it myself.
+%
+% \subsection{Math Mode}
+%
+% In math mode the choices are a lot fewer because first of all
+% \TeX{} comes with a built-in limitation of 16 math families.
+% Additionally we will not need a solidus for typesetting split
+% fractions in math, as tradition is to use a virgule instead. We
+% define the basic `mathdefault' instance to simply use the math
+% family in use when the instance is run. So if we're in normal math
+% like |$\sfrac{7}{9}$| we simply get family~$-1$. If we're inside a
+% \cs{mathbf} we're in family~$4$ (in the standard setup at least),
+% and so the fraction is typeset with the same math family. Simple,
+% isn't?
+%
+% You can also declare instances for the math families, but I really
+% don't see why you would. If you do then name them according to the
+% scheme `mathfam\meta{N}', where \meta{N} is the family number, and
+% only do it if you \emph{really} know how to set up math fonts.
+% That is, if \cs{DeclareMathAlphabet} is unbeknownst to you, then
+% just don't go there.
+%
+%
+% Another example: If we want \cs{sfrac} to produce split fractions
+% without doing anything at all, we can choose the collection
+% `plainmath', which is defined as
+% \begin{verbatim}
+% \DeclareCollectionInstance{plainmath}{xfrac}{mathdefault}{math}{
+% denominator-bot-sep = 0pt,
+% numerator-bot-sep = 0pt,
+% numerator-top-sep = \maxdimen,
+% scaling = false,
+% slash-right-mkern = 0mu,
+% slash-left-mkern = 0mu,
+% }
+% \end{verbatim}
+% This creates an alternative version of the instance `mathdefault'
+% with settings as specified by the keys. In the default math setup
+% \key{numerator-top-sep} is set to 0~pt, and here we set
+% \key{numerator-bot-sep} to 0~pt as well, so in order to avoid
+% over-specification (and an error message) we must set
+% \key{numerator-top-sep} to \cs{maxdimen}. We activate (obeying
+% normal scoping rules) it with:
+% \begin{verbatim}
+% \UseCollection{xfrac}{plainmath}
+% \end{verbatim}
+% Then |$\sfrac{8}{13}$| produces\begingroup
+% \UseCollection{xfrac}{plainmath}
+% $\sfrac{8}{13}$ and just typing |$8/13$| gives the same result:
+% $8/13$.
+% \endgroup
+%
+%
+% \section{The Template Interface}
+%
+% \begin{TemplateInterfaceDescription}{xfrac}
+%
+% \TemplateArgument{1}
+% {The numerator}
+%
+% \TemplateArgument{2}
+% {The separator}
+%
+% \TemplateArgument{3}
+% {The denominator}
+%
+% \TemplateSemantics
+%
+% Typesets arguments 1 and 3 separated by argument 2, which in text
+% mode by default is a \emph{solidus}. This is taken from
+% \package{textcomp} where it is denoted \cs{textfractionsolidus}.
+% This is the character used for the ready made split level
+% fractions such as \textonehalf---except in the (European) Computer
+% Modern fonts. In math mode a \emph{virgule} is used instead as
+% this is more appropriate and it is always available in the math
+% fonts. The solidus is a text symbol only.
+%
+% \end{TemplateInterfaceDescription}
+%
+% \begin{TemplateDescription}{xfrac}{text}
+%
+% \TemplateKey{numerator-font}{n}
+% {Font family specification to use for the numerator.}
+% {\cs{f@family}}
+%
+% \TemplateKey{numerator-format}{f1}
+% {Action to be taken on the numerator.}
+% {Process argument unchanged}
+%
+% \TemplateKey{slash-symbol}{n}
+% {The separator symbol. If not specified the default value will be
+% used instead.}
+% {Solidus (\cs{textfractionsolidus})}
+%
+% \TemplateKey{slash-symbol-font}{n}
+% {Font family specification to use for the separator symbol.}
+% {\cs{f@family}}
+%
+% \TemplateKey{slash-symbol-format}{f1}
+% {Action to be taken on the separator symbol.}
+% {Process argument unchanged}
+%
+% \TemplateKey{denominator-font}{n}
+% {Font family specification to use for the denominator.}
+% {\cs{f@family}}
+%
+% \TemplateKey{denominator-format}{f1}
+% {Action to be taken on the denominator.}
+% {Process argument unchanged}
+%
+% \TemplateKey{h-scale}{n}
+% {Factor by which the numerator and denominator should be
+% horizontally scaled. It should only be used if the real superior
+% and inferior fonts are not available. For instance Stempel
+% Garamond looks excellent if scaled 10\% extra horizontally, i.e.,
+% by a factor of 1.1.}
+% {1}
+%
+% \TemplateKey{v-scale}{n}
+% {Same as \key{h-scale} only vertically. Probably not of much use
+% but added for completetion.}
+% {1}
+%
+% \TemplateKey{scale-factor}{n}
+% {Fraction of the size of \key{slash-symbol}. Used for setting the
+% font size of numerator and denominator. Usually a value of app.\
+% \sfrac{5}{6} produces fine results. It should only be used if the
+% real superior and inferior fonts are not available. As an example
+% Stempel Garamond looks better if the factor is 0.9.}
+% {0.83333}
+%
+% \TemplateKey{scale-relative}{s}
+% {If set to `true' the font size of the numerator and denominator
+% is scaled with respect to the height of the \key{slash-symbol}. If
+% set to `false' the font is scaled with respect to the total height
+% of the \key{slash-symbol}.}
+% {true}
+%
+% \TemplateKey{scaling}{s}
+% {If set to `true' the fonts are allowed to scale. If set to
+% `false' they are not. See the `Janson' example for an application.}
+% {true}
+%
+% \TemplateKey{numerator-top-sep}{L}
+% {Dimension specifying the space between the top of the
+% \key{slash-symbol} and the top of the numerator. If not specified,
+% the depth of the solidus will be used, because this value will
+% make the fraction look even.}
+% {Unspecified}
+%
+% \TemplateKey{numerator-bot-sep}{L}
+% {Dimension specifying the lift of the numerator from the
+% baseline.}
+% {Unspecified}
+%
+% \TemplateKey{denominator-bot-sep}{L}
+% {Dimension specifying the lift of the denominator from the
+% baseline.}
+% {Unspecified}
+%
+% \TemplateKey{slash-right-kern}{L}
+% {Dimension specifying the kerning between the \key{slash-symbol}
+% and the numerator. If specified in terms of font specific
+% dimensions such as \texttt{em} it is better to use
+% \cs{DelayEvaluation}.}
+% {\texttt{0pt}}
+%
+% \TemplateKey{slash-left-kern}{L}
+% {Dimension specifying the kerning between the \key{slash-symbol}
+% and the denominator. If specified in terms of font specific
+% dimensions such as \texttt{em} it is better to use
+% \cs{DelayEvaluation}.}
+% {\texttt{0pt}}
+%
+% \TemplateKey{math-mode}{s}
+% {Are we in math mode or not?}
+% {false}
+%
+% \TemplateKey{phantom}{n}
+% {A character that suits the common cases. As we would mostly want
+% to use numbers in text mode we choose a `tall' number, while in
+% math it is somewhat different.}
+% {8}
+%
+% \TemplateSemantics
+%
+% This template is also the foundation for the `math' template. The
+% keys \key{slash-right-mkern} and \key{slash-left-mkern} can only
+% be used in math mode and are not shown here.
+%
+% \end{TemplateDescription}
+%
+%
+% \begin{TemplateDescription}{xfrac}{math}
+%
+% \TemplateKey{numerator-font}{n}
+% {Font family specification to use for the numerator.}
+% {\cs{number}\cs{fam}}
+%
+% \TemplateKey{slash-symbol}{n}
+% {The separator symbol. If not specified the default value will be
+% used instead.}
+% {Virgule ($/$)}
+%
+% \TemplateKey{slash-symbol-font}{n}
+% {Font family specification to use for the separator symbol.}
+% {\cs{number}\cs{fam}}
+%
+% \TemplateKey{denominator-font}{n}
+% {Font family specification to use for the denominator.}
+% {\cs{number}\cs{fam}}
+%
+% \TemplateKey{scale-factor}{n}
+% {Fraction of the size of \key{slash-symbol}. In math mode we
+% cannot rely on the fonts to be able to scale, but giving a default
+% scale of 0.7 fits into the regular size changing scheme---the
+% default scheme has values $(D,T,S,SS)=(1,1,0.7,0.5)$ whereas we
+% with a default \key{scale-factor} of 0.7 get $(1,1,0.7,0.49)$.
+% That's close enough.}
+% {0.7}
+%
+% \TemplateKey{scale-relative}{s}
+% {If set to `true' the font size of the numerator and denominator
+% is scaled with respect to the height of the \key{slash-symbol}. If
+% set to `false' the font is scaled with respect to the total height
+% of the \key{slash-symbol}.}
+% {false}
+%
+% \TemplateKey{scaling}{s}
+% {If set to `true' the fonts are allowed to scale. If set to
+% `false' they are not. See the `plainmath' example for an application.}
+% {true}
+%
+% \TemplateKey{numerator-top-sep}{L}
+% {Dimension specifying the space between the top of the
+% \key{slash-symbol} and the top of the numerator. If not specified,
+% the depth of the virgule will be used, because this value will
+% make the fraction look even.}
+% {\texttt{0pt}}
+%
+% \TemplateKey{denominator-bot-sep}{L}
+% {Dimension specifying the lift of the denominator from the
+% baseline.}
+% {\texttt{0pt}}
+%
+% \TemplateKey{slash-right-mkern}{n}
+% {Same as \key{slash-right-kern} but for math mode only and should
+% be specified in \texttt{mu} units. This is because \package{calc}
+% can't use mu-expressions.}
+% {\texttt{-2mu}}
+%
+% \TemplateKey{slash-left-mkern}{n}
+% {Same as \key{slash-left-kern} but for math mode only and should
+% be specified in \texttt{mu} units. This is because \package{calc}
+% can't use mu-expressions.}
+% {\texttt{-1mu}}
+%
+% \TemplateKey{math-mode}{s}
+% {Are we in math mode or not?}
+% {true}
+%
+% \TemplateKey{phantom}{n}
+% {A character that suits the common cases. In math we have a high
+% risk of using a parenthesis, so we choose that. Text mode is
+% another story.}
+% {(}
+%
+% \TemplateSemantics
+%
+% This template is a restricted version of the `text' template. Only
+% the keys that are different from the `text' template are shown
+% here. Also bear in mind that the attributes \key{slash-left-kern}
+% and \key{slash-right-kern} have no meaning in this template.
+%
+% \end{TemplateDescription}
+%
+%
+%
+% \StopEventually{}
+%
+% \section{Implementation}
+%
+% We set up the programming interface. We need the
+% \package{template} and \package{xparse} packages from the
+% experimental code, more precisely from the `xbase' bundle. The
+% other packages are well-known.
+% \begin{macrocode}
+\RequirePackage{textcomp,graphicx,amstext}
+\RequirePackage{template}[2001/07/25]
+\RequirePackage{xparse}[2000/01/29]
+% \end{macrocode}
+% \changes{v0.10b}{2004/04/07}{Now uses \cs{InternalSyntaxOn}} With
+% v0.10b I introduced the new internal syntax using |_| and |:|.
+% White space is ignored as well, so any |@|-signs in the code are
+% remnants of old \LaTeX{} coding conventions.
+% \begin{macrocode}
+\InternalSyntaxOn
+% \end{macrocode}
+% Some programming tools which will probably be included in the
+% \LaTeX3 API.
+% \begin{macrocode}
+\@ifundefined{else:}{\let\else:=\else}{}
+\@ifundefined{fi:}{\let\fi:=\fi}{}
+\@ifundefined{if_dim:w}{\let\if_dim:w =\ifdim}{}
+\@ifundefined{if_mathmode:}{\let\if_mathmode: =\ifmmode}{}
+\def\xfrac_namelet:cN #1#2{%
+ \expandafter\let\csname#1\endcsname#2}
+% \end{macrocode}
+% Boolean data type. No error checking!
+% \begin{macrocode}
+\def\xfrac_new_boolean:c #1{
+ \expandafter\@ifdefinable\csname if_boolean_#1:\endcsname{
+ \@namedef{boolean_#1_true:}
+ {\xfrac_namelet:cN{if_boolean_#1:}\iftrue}%
+ \@namedef{boolean_#1_false:}
+ {\xfrac_namelet:cN{if_boolean_#1:}\iffalse}%
+ \@nameuse{boolean_#1_false:}%
+ }
+}
+\def\xfrac_set_boolean:cc #1#2{ \@nameuse{boolean_#1_#2:}}
+\def\if_boolean:cTF #1{
+ \@nameuse{if_boolean_#1:}
+ \expandafter\@firstoftwo
+ \else:
+ \expandafter\@secondoftwo
+ \fi:
+}
+\def\if_boolean:cT #1#2{ \if_boolean:cTF {#1}{#2}{} }
+\def\if_boolean:cF #1#2{ \if_boolean:cTF {#1}{}{#2} }
+% \end{macrocode}
+%
+% An option:
+% \begin{macrocode}
+\xfrac_new_boolean:c {cm_recommended}
+\DeclareOption{cm-recommended}
+ { \xfrac_set_boolean:cc {cm_recommended}{true} }
+\DeclareOption{cm-standard}
+ { \xfrac_set_boolean:cc {cm_recommended}{false} }
+\ExecuteOptions{cm-recommended}
+\ProcessOptions\relax
+% \end{macrocode}
+%
+% \begin{macro}{\l_xfrac_temp_box}
+% \begin{macro}{\l_xfrac_slash_box}
+% We use two box registers. We could probably get away with using
+% scratch boxes, but this feels safer. Anyway we're all using
+% \eTeX{} now so why not?
+% \begin{macrocode}
+\newsavebox\l_xfrac_temp_box
+\newsavebox\l_xfrac_slash_box
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{The Templates}
+% Then we declare the template.
+% \begin{macrocode}
+\DeclareTemplateType{xfrac}{3}
+% \end{macrocode}
+% The template type `text'.
+% \begin{macrocode}
+\DeclareTemplate{xfrac}{text}{3}{
+ numerator-font = n [\f@family] \xfrac_numeratorfont:,
+ numerator-format = f1 [#1] \xfrac_numeratorformat:n,
+ slash-symbol = n [\textfractionsolidus]
+ \xfrac_slashsymbol:,
+ slash-symbol-font = n [\f@family] \xfrac_slashsymbolfont:,
+ slash-symbol-format = f1 [#1] \xfrac_slashsymbolformat:n,
+ denominator-font = n [\f@family] \xfrac_denominatorfont:,
+ denominator-format = f1 [#1] \xfrac_denominatorformat:n,
+ h-scale = n [1] \xfrac_hscale:,
+ v-scale = n [1] \xfrac_vscale:,
+ scale-factor = n [.83333] \xfrac_scalefactor:,
+ scale-relative = s [true]
+ { \def \xfrac_relscale: {\ht\l_xfrac_slash_box}}
+ { \def \xfrac_relscale: {
+ \dimexpr \ht\l_xfrac_temp_box + \dp\l_xfrac_temp_box\relax} },
+ scaling = s [true]
+ {\def\xfrac_fontscale: {
+ \fontsize{\xfrac_scalefactor: \xfrac_relscale:}{\z@}\selectfont}}
+ { \let\xfrac_fontscale: \relax },
+% \end{macrocode}
+% Here comes some fake lengths. I've decided to call them with the
+% suffix |_fdim|, so that I will remember to use them right.
+% \begin{macrocode}
+ numerator-top-sep = L [\maxdimen] \l_xfrac_numeratortopsep_fdim,
+ numerator-bot-sep = L [\maxdimen] \l_xfrac_numeratorbotsep_fdim,
+ denominator-bot-sep = L [\maxdimen] \l_xfrac_denominatorbotsep_fdim,
+ slash-right-kern = L [0pt] \l_xfrac_slashrightsep_fdim,
+ slash-left-kern = L [0pt] \l_xfrac_slashleftsep_fdim,
+% \end{macrocode}
+% As calc can't handle |\muskip|s, I've made them of type `n' and
+% added the suffix |_fmu| to indicate `fake mu skip'.
+% \begin{macrocode}
+ slash-right-mkern = n [-2mu] \l_xfrac_slashrightmsep_fmu,
+ slash-left-mkern = n [-1mu] \l_xfrac_slashleftmsep_fmu,
+ math-mode = s [false] { \let\xfrac_math: \ensuremath }
+ { \let\xfrac_math: \@firstofone },
+ phantom = n [8] \xfrac_phantom:,
+}{
+ \DoParameterAssignments
+ \if_mathmode:
+ \let\xfrac_textormath: \text
+ \edef\xfrac_slashfontchange: {\fam\xfrac_slashsymbolfont: }
+ \edef\xfrac_numeratorfontchange: {\fam\xfrac_numeratorfont: }
+ \edef\xfrac_denominatorfontchange: {\fam\xfrac_denominatorfont: }
+ \else:
+ \let\xfrac_textormath: \mbox
+ \def\xfrac_slashfontchange: {
+ \fontfamily{\xfrac_slashsymbolfont: }\selectfont}
+ \def\xfrac_numeratorfontchange: {
+ \fontfamily{\xfrac_numeratorfont: }\selectfont}
+ \def\xfrac_denominatorfontchange: {
+ \fontfamily{\xfrac_denominatorfont: }\selectfont}
+ \fi:
+ \xfrac_textormath: {
+% \end{macrocode}
+% \changes{v0.11a}{2004/08/24}{Added \cs{m@th}}
+% \begin{macrocode}
+ \m@th
+ \sbox\l_xfrac_temp_box {\xfrac_math: {\vphantom{(}}}
+ \sbox\l_xfrac_slash_box {
+ \xfrac_math: {
+ \xfrac_slashsymbolformat:n {
+ \xfrac_math: {
+ \xfrac_slashfontchange:
+ \IfValueTF{#2}{#2}{\xfrac_slashsymbol: }
+ }
+ }
+ }
+ }
+ \if_dim:w \l_xfrac_numeratortopsep_fdim = \maxdimen
+ \if_dim:w \l_xfrac_numeratorbotsep_fdim = \maxdimen
+% \end{macrocode}
+% Both unspecified.
+% \begin{macrocode}
+ \def\xfrac_next: {\raisebox{\ht\l_xfrac_slash_box
+ -\dp\l_xfrac_slash_box-\height}}
+ \else:
+% \end{macrocode}
+% Use only bottom specification.
+% \begin{macrocode}
+ \def\xfrac_next: {\raisebox{\l_xfrac_numeratorbotsep_fdim }}
+ \fi:
+ \else:
+% \end{macrocode}
+% Use only top specification.
+% \begin{macrocode}
+ \if_dim:w \l_xfrac_numeratorbotsep_fdim = \maxdimen
+ \def\xfrac_next: {
+ \raisebox{
+ \ht\l_xfrac_slash_box - \l_xfrac_numeratortopsep_fdim
+ - \height
+ }
+ }
+ \else:
+% \end{macrocode}
+% Over-specification.
+% \begin{macrocode}
+ \PackageError{xfrac}
+ {You~ have~ specified~ both~ numerator-top-sep~ and~
+ numerator-bot-sep}
+ {I~ will~ pretend~ you~ didn't~ specify~ any~ of ~them}
+ \def\xfrac_next: {\raisebox{\ht\l_xfrac_slash_box
+ -\dp\l_xfrac_slash_box-\height}}
+ \fi:
+ \fi:
+% \end{macrocode}
+% Typeset the numerator
+% \begin{macrocode}
+ \xfrac_next: {
+ \xfrac_fontscale:
+ \xfrac_numeratorformat:n {
+ \scalebox{\xfrac_hscale: }[\xfrac_vscale: ]
+ { \xfrac_math:{ \xfrac_numeratorfontchange:
+ {\vphantom{\xfrac_phantom: }#1} } }
+ }
+ }
+ \xfrac_math: {
+ \if_mathmode:
+ \mskip \l_xfrac_slashrightmsep_fmu
+ \else:
+ \hskip \l_xfrac_slashrightsep_fdim
+ \fi: }
+% \end{macrocode}
+% Typeset the separator
+% \begin{macrocode}
+ \usebox\l_xfrac_slash_box
+ \xfrac_math: {
+ \if_mathmode:
+ \mskip \l_xfrac_slashleftmsep_fmu
+ \else:
+ \hskip \l_xfrac_slashleftsep_fdim
+ \fi: }
+% \end{macrocode}
+% Typeset the denominator
+% \begin{macrocode}
+ \if_dim:w \l_xfrac_denominatorbotsep_fdim=\maxdimen\relax
+ \def\xfrac_next: {\raisebox{-\dp\l_xfrac_slash_box}}
+ \else:
+ \def\xfrac_next: {\raisebox{\l_xfrac_denominatorbotsep_fdim}}
+ \fi:
+ \xfrac_next: {
+ \xfrac_fontscale:
+ \xfrac_denominatorformat:n {
+ \scalebox{\xfrac_hscale:}[\xfrac_vscale:]
+ { \xfrac_math: { \xfrac_denominatorfontchange:
+ {\vphantom{\xfrac_phantom: }#3} } }
+ }
+ }
+ }
+}
+% \end{macrocode}
+%
+% Since math and text mode are wildly different entities we define a
+% separate template for each. You already saw the `text' template,
+% and here is the `math' template.
+% \begin{macrocode}
+\DeclareRestrictedTemplate{xfrac}{math}{text}{
+ numerator-font = \number\fam,
+ slash-symbol = /,
+ slash-symbol-font = \number\fam,
+ denominator-font = \number\fam,
+ scale-factor = 0.7,
+ scale-relative = false,
+ scaling = true,
+ numerator-top-sep = 0pt,
+ denominator-bot-sep = 0pt,
+ math-mode = true,
+ phantom = (,
+}
+% \end{macrocode}
+%
+% \subsection{The Default Instances}
+%
+% For the default instances we just use the relevant templates with
+% the default settings.
+%
+% The default `text' instance.
+% \begin{macrocode}
+\DeclareInstance{xfrac}{default}{text}{ }
+% \end{macrocode}
+% The default `math' instance.
+% \begin{macrocode}
+\DeclareInstance{xfrac}{mathdefault}{math}{ }
+% \end{macrocode}
+% \begin{macrocode}
+\DeclareCollectionInstance{plainmath}{xfrac}{mathdefault}{math}{
+ denominator-bot-sep=0pt,
+ numerator-bot-sep=0pt,
+ numerator-top-sep=\maxdimen,
+ scale-factor = 1,
+ scale-relative = false,
+ scaling = true,
+ slash-right-mkern=0mu,
+ slash-left-mkern=0mu,
+}
+% \end{macrocode}
+% Default Computer Modern setup. Far from optimal, but better than
+% nothing.
+% \begin{macrocode}
+\DeclareInstance{xfrac}{cmr}{text}{
+ denominator-bot-sep=0pt,
+ numerator-top-sep=\DelayEvaluation{.2ex},
+ slash-left-kern=\DelayEvaluation{-.1em},
+ slash-right-kern=\DelayEvaluation{-.1em},
+}
+\DeclareInstance{xfrac}{cmss}{text}{
+ denominator-bot-sep=0pt,
+ numerator-top-sep=\DelayEvaluation{.2ex},
+ slash-left-kern=\DelayEvaluation{-.1em},
+ slash-right-kern=\DelayEvaluation{-.1em},
+}
+\DeclareInstance{xfrac}{cmtt}{text}{
+ denominator-bot-sep=0pt,
+ numerator-top-sep=\DelayEvaluation{.2ex},
+ slash-left-kern=\DelayEvaluation{-.1em},
+ slash-right-kern=\DelayEvaluation{-.1em},
+}
+% \end{macrocode}
+% We can do better for the Computer Modern fonts. For the roman
+% family we choose Times.
+% \begin{macrocode}
+\DeclareCollectionInstance{cm-recommended}{xfrac}{cmr}{text}{
+ slash-symbol-font = ptm,
+}
+% \end{macrocode}
+% Times also blends well with `cmss'.
+% \begin{macrocode}
+\DeclareCollectionInstance{cm-recommended}{xfrac}{cmss}{text}{
+ slash-symbol-font = ptm,
+}
+% \end{macrocode}
+% For `cmtt' we choose the Palatino solidus as it is slightly
+% thicker than Times.
+% \begin{macrocode}
+\DeclareCollectionInstance{cm-recommended}{xfrac}{cmtt}{text}{
+ slash-symbol-font = ppl,
+}
+% \end{macrocode}
+% If we used the \texttt{cm-recommended} setup we activate it.
+% \begin{macrocode}
+\if_boolean:cT {cm_recommended}
+ {\UseCollection{xfrac}{cm-recommended}}
+% \end{macrocode}
+%
+% \subsection{The User Command}
+%
+% Currently there is just a single user command. \cs{sfrac} takes
+% two mandatory arguments: numerator and denominator. It can take an
+% optional argument between the mandatory specifying the separator
+% like this:
+% \begin{verbatim}
+% \sfrac{7}[/]{12}
+% \end{verbatim}
+% It also has an optional argument that comes before the first
+% mandatory argument. If used it will use that instance instead of
+% the auto-detected one, so a user who has defined the instance
+% `cmr2' may use
+% \begin{verbatim}
+% \sfrac[cmr2]{7}{12}
+% \end{verbatim}
+% and get the settings from `cmr2' instead of the settings of the
+% current font family.
+% \begin{macrocode}
+\DeclareDocumentCommand \sfrac {o mom}{
+ \if_mathmode:
+ \edef\xfrac_next: {mathfam\number\fam}
+ \IfExistsInstanceTF{xfrac}{\xfrac_next: }
+ {\UseInstance{xfrac}{\xfrac_next: }}
+ {\UseInstance{xfrac}{mathdefault}}
+ {#2}{#3}{#4}
+ \else:
+ \IfExistsInstanceTF{xfrac}{#1}
+ {\UseInstance{xfrac}{#1}{#2}{#3}{#4}}
+ {\IfExistsInstanceTF{xfrac}{\f@family}
+ {\UseInstance{xfrac}{\f@family}}
+ {\UseInstance{xfrac}{default}}
+ {#2}{#3}{#4}
+ }
+ \fi:
+}
+% \end{macrocode}
+%
+% \Finale
+\endinput
diff --git a/Master/texmf-dist/source/latex/xfrac/xfrac.ins b/Master/texmf-dist/source/latex/xfrac/xfrac.ins
new file mode 100644
index 00000000000..6743f5afe37
--- /dev/null
+++ b/Master/texmf-dist/source/latex/xfrac/xfrac.ins
@@ -0,0 +1,55 @@
+%%
+%% This file will generate fast loadable files and documentation
+%% driver files from the doc files in this package when run through
+%% LaTeX or TeX.
+%%
+%% File `xfrac.ins'.
+%% Copyright 2004 Morten H\o gholm.
+%% moho01ab@student.cbs.dk
+%%
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2003/12/01 or later.
+%%
+%% This work has the LPPL maintenance status "maintained".
+%%
+%% The Current Maintainer of this work is Morten H\o gholm.
+%%
+%% This work consists of the files xfrac.dtx, xfrac.ins and the
+%% derived file xfrac.sty.
+%%
+%% --------------- start of docstrip commands ------------------
+%%
+\input docstrip
+
+\keepsilent
+
+\preamble
+
+It may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of LaTeX
+version 2003/12/01 or later.
+
+This work has the LPPL maintenance status "maintained".
+
+The Current Maintainer of this work is Morten H\string\o gholm.
+
+This work consists of the files xfrac.dtx, xfrac.ins and the
+derived file xfrac.sty.
+
+\endpreamble
+
+%%%%%%%%%%%%%%%
+\generate{%
+ \file{xfrac.sty}{\from{xfrac.dtx}{package}}%
+}
+
+\endbatchfile