% $Id: tpslifonts.sty,v 1.6 2002/11/14 20:45:59 hansfn Exp $
%  
% TeXPower bundle - dynamic online presentations with LaTeX
% Copyright (C) 1999-2003 Stephan Lehmke
% 
% This program is free software; you can redistribute it and/or
% modify it under the terms of the GNU General Public License
% as published by the Free Software Foundation; either version 2
% of the License, or (at your option) any later version.
% 
% This program 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.  See the
% GNU General Public License for more details.
%
%===============================================================================
% File: tpslifonts.sty
%
% Presentations to be displayed `online' with a video beamer have special needs
% concerning font configuration owing to low `screen' resolution and bad
% contrast caused by possibly bad light conditions combined with color
% highlighting.
% This package tries to cater to these needs by offering a holistic
% configuration of all document fonts, including text, typewriter, and math
% fonts. Special features are `smooth scaling' of Type1 fonts and careful design
% size selection for optimal readability.
% The default is to use ``lcmss'', also called ``slifonts'' for text and the
% usual cmtt and cmm for typewriter and math. There's a large variety of
% options and parameters for choosing different text and math fonts, all from
% the large ``cm'' family of fonts, which has the advantage that readability can
% be enhanced by scaling small design sizes.
% A couple of additional math fonts like ams and doublestroke fonts are
% supported.
% For some of the options to yield satisfying results, it is neccessary to
% install additional (free) Type1 fonts on your system.
% There's no intention to support other font families like the typical
% ``psnfss'' PostScript fonts, as they usually don't come in different design
% sizes, making the effort of tuning them for viewing futile. If you wish to use
% such a font, load it with the usual packages.
%
% This package is part of the TeXPower bundle, to be found at
% 
% http://texpower.sourceforge.net/
%
%================================================================================
% Author: Stephan Lehmke <Stephan.Lehmke@cs.uni-dortmund.de>
%
% v0.1  Aug 10, 2001 First version for the pre-alpha release of texpower.
%
% v0.2  Nov 17, 2001 Added support for stmaryrd fonts.
%
% v0.3  Oct 18, 2002 Rewritten to go without .fd files.
%                    Euler package dependence changed to eulervm.
%                    Added support for ams, lasy, wasysym, rsfs, dstroke fonts.
%
% v0.4  Mar 25, 2003 Added support for cmbright math.
%
% v0.5  Mar 26, 2003 Added support for T1 encoding.
%
% v0.6  May 29, 2003 Change of attitude: I found out how desolate the situation
%                    of most presentation packages is wrt fonts. Hence, instead
%                    of trying to be as minimally invasive as possible,
%                    tpslifonts will try to hijack every single font which might
%                    possibly be used in a presentation and replace it by
%                    something sensible.
%                    No `private' ``lcmr'' to replace ``cmr'' any more - cmr is
%                    redefined no matter what.
%                    Now configures (almost) all fonts type1cm and type1ec do,
%                    plus concrete, cmbright, and euler fonts.
%                    Added options ``scale5pt'', ``scale6pt'', ``scale7pt'' to
%                    bound the design sizes of fonts used.
%                    Added options ``cmr'', ``cmss'', ``cmbright'' and
%                    ``concrete'' to choose text fonts different from lcmss. 
%                    Improved handling of Option incompatibilities.

\NeedsTeXFormat{LaTeX2e}

\ProvidesPackage%
{tpslifonts}%
[2003/05/29 v0.6 Configure presentation fonts.]


%==============================================================================

\RequirePackage{ifthen}


%==============================================================================
% Options and general setup.

%------------------------------------------------------------------------------
% Text fonts. The default is to use ``slifonts'' (lcmss).

\newcommand{\TPSFTextfont}{lcmss}

% The option cmr sets ``computer modern roman'' text fonts.

\DeclareOption{cmr}{\renewcommand{\TPSFTextfont}{cmr}}

% The option cmss sets ``computer modern roman sans serif'' text fonts.

\DeclareOption{cmss}{\renewcommand{\TPSFTextfont}{cmss}}

% The option cmbright sets ``computer modern bright'' text fonts.

\DeclareOption{cmbright}{\renewcommand{\TPSFTextfont}{cmbr}}

% The option concrete sets ``concrete'' text fonts.

\DeclareOption{concrete}
{%
  \renewcommand{\TPSFTextfont}{ccr}%
  \renewcommand{\TPSFMathfont}{ccm}%
  \renewcommand{\TPSFOperatorfont}{ccr}%
}

%------------------------------------------------------------------------------
% Design size selection. Usually design sizes are `bounded' by 8pt, that is, if
% an 8pt (or lower) design size of a font exists, it will be scaled to larger
% sizes even if larger design sizes exist, to enhance readability at low
% resolutions. For sizes below 8pt, smaller design sizes are used if available. 

\providecommand{\TPSFMaxDesignSize}{8}

% The option scale5pt causes scaled 5pt design sizes to be used wherever
% possible. 

\DeclareOption{scale5pt}{\renewcommand{\TPSFMaxDesignSize}{5}}

% The option scale6pt causes scaled 6pt design sizes to be used wherever
% possible (for font sizes above 6pt). 

\DeclareOption{scale6pt}{\renewcommand{\TPSFMaxDesignSize}{6}}

% The option scale7pt causes scaled 7pt design sizes to be used wherever
% possible (for font sizes above 7pt). 

\DeclareOption{scale7pt}{\renewcommand{\TPSFMaxDesignSize}{7}}


%-------------------------------------------------------------------------------
% lcmss text fonts have very high `small letters', making normal-size fonts look
% small and difficult to read.  
% The option scaleupmath (scaleuptt) will scale up math (typewriter) fonts
% slightly so they harmonize a little more with text fonts.
% These options do not make much sense with other text fonts, hence a warning
% (but no error message) is generated to remind the user they might have
% overlooked something.

\newboolean{TPSFscaleup}
\DeclareOption{scaleupmath}
{%
  \providecommand\TPSFmathscale{1.15}%
  \providecommand\TPSFeulerscale{1.1}%
  \providecommand\TPSFcmbrscale{1.1}%
  \setboolean{TPSFscaleup}{true}%
}

\DeclareOption{scaleuptt}
{\providecommand\TPSFttscale{1.2}\setboolean{TPSFscaleup}{true}}

%------------------------------------------------------------------------------
% Math fonts.
% Because the availability of different fonts in different encodings is not
% really homogenous, we differentiate between the font used for Operators (plus
% upper case greek, digits and some symbols) and the font used for other
% symbols. In some cases (math extension font), the choices are quite limited
% anyway. 

% The default is to use cmr for operators and such and the standard cmm and
% relatives for symbols.

\newcommand{\TPSFMathfont}{cmm}

\newcommand{\TPSFOpF@cmm}{cmrm}

\newcommand{\TPSFOpF@ccm}{ccr}

\newcommand{\TPSFOperatorfont}{cmr}

% The option textops makes the operator font follow the text font. 

\newboolean{TPSFtextops}
\DeclareOption{textops}{\setboolean{TPSFtextops}{true}}

% The option eulermath sets euler math fonts (slightly adapted from the eulervm 
% package to match lcmss better).  
% When using this option, the operator font automatically follows the text
% font. 

\DeclareOption{eulermath}
{\renewcommand{\TPSFMathfont}{euler}\setboolean{TPSFtextops}{true}}

% The option eulerdigits works only in conjunction with eulermath and sets the
% euler-digits option of the eulervm package.   

\newboolean{TPSFeulerdigits}
\DeclareOption{eulerdigits}
{%
  \setboolean{TPSFeulerdigits}{true}%
  \PassOptionsToPackage{euler-digits}{eulervm}%
}

% The option cmbrightmath sets cmbright math fonts (slightly adapted from the
% cmbright package to match lcmss better).   

\DeclareOption{cmbrightmath}{\renewcommand{\TPSFMathfont}{cmbrm}}

\newcommand{\TPSFOpF@cmbrm}{cmbrmt}

%------------------------------------------------------------------------------
% Process options.

\ProcessOptions

%------------------------------------------------------------------------------
% Option postprocessing.

% Parameters \TPSFmathscale and such can be (re)defined from outside the
% tpslifonts package to adjust scaling. If any of these scaling parameters is
% defined before the tpslifonts package is loaded, there is no need to give the
% respective option.
% Here, we test whether the parameters have been provided (either by defining
% them independently or by giving one of the ``scaleup...'' options), and define
% the `real' scaling parameter for font definition accordingly.

\@ifundefined{TPSFmathscale}
{\let\TPSFmathscale\@undefined\let\mathscale@TPSF\empty}
{\def\mathscale@TPSF{[\TPSFmathscale]}}

\@ifundefined{TPSFeulerscale}
{\let\TPSFeulerscale\@undefined\let\eulerscale@TPSF\empty}
{\def\eulerscale@TPSF{[\TPSFeulerscale]}}

\@ifundefined{TPSFcmbrscale}
{\let\TPSFcmbrscale\@undefined\let\cmbrscale@TPSF\empty}
{\def\cmbrscale@TPSF{[\TPSFcmbrscale]}}

\@ifundefined{TPSFttscale}
{\let\TPSFttscale\@undefined\let\ttscale@TPSF\empty}
{\def\ttscale@TPSF{[\TPSFttscale]}}

% As mentioned above, the ``scaleup...'' options make sense really only if lcmss
% text fonts are used. Otherwise, we give a warning.

\ifthenelse{\boolean{TPSFscaleup}\and\not\equal{\TPSFTextfont}{lcmss}}
{%
  \PackageWarning{tpslifonts}
  {Using the ``scaleup'' Options makes sense only\MessageBreak 
    when lcmss text fonts are used.\MessageBreak 
    Watch closely whether the results of scaling math\MessageBreak 
    and/or typewriter fonts together with ``\TPSFTextfont''\MessageBreak 
    text fonts is what you intended to achieve.%
  }%
}
{}

% We need to set the math operator font corresponing to the settings of the
% TPSFtextops switch, the text and math fonts.

\ifthenelse{\boolean{TPSFtextops}}
{\let\TPSFOperatorfont\TPSFTextfont}
{%
  \expandafter\let\expandafter\TPSFOperatorfont
  \csname TPSFOpF@\TPSFMathfont\endcsname
}

% The cmbright package also sets text fonts, so if cmbright math is requested,
% we load the cmbright package first and later overwrite the text font settings
% (if no cmbright text fonts were requested).

\ifthenelse{\equal{\TPSFMathfont}{cmbrm}}
{%
  \RequirePackage[standard-baselineskips]{cmbright}%
}

%==============================================================================
% Font shape configuration.

% We need a couple of macros to help in configuring fonts.
% To increase readability in presentations, design size selection is
% restricted. Without any options, the largest design size used is 8pt. The
% options scale5pt ... scale7pt impose further constraints.
% Another restriction is caused by the availability of design sizes. Not all
% fonts exist in all design sizes. If no design size exists at all in the
% requested range (i.e. the font exists only in size 10), then the smallest
% available size has to be chosen no matter what.

% \FilterSizes@TPSF<name>{<list>} filters out all sizes (represented as
% nonnegative integer numbers) from the comma-separated <list> which are above
% the threshold in \TPSFMaxDesignSize and stores the result in the macro
% <name>. To avoid inconsistencies if all sizes exceed \TPSFMaxDesignSize, the
% first size is always passed.

\newcommand{\FilterSizes@TPSF}[2]{\expandafter\@FilterSizes@TPSF#2,\@nil#1}

\def\@FilterSizes@TPSF#1,#2\@nil#3%
{%
  \def#3{#1}%
  \ifx\empty#2\empty\else\@@FilterSizes@TPSF#2\@nil#3\fi
}

\def\@@FilterSizes@TPSF#1,#2\@nil#3%
{%
  \ifnum#1>\TPSFMaxDesignSize\relax
   \else
    \expandafter\def\expandafter#3\expandafter{#3,#1}%
    \ifx\empty#2\empty\else\@@FilterSizes@TPSF#2\@nil#3\fi
  \fi
}

% \DeclareFontShape@TPSF[<scale>]{<enc>}{<fam>}{<ser>}{<shp>}{<name>}{<sizes>}
% declares a font with presentation-friendly design size selection (which
% means all design sizes above \TPSFMaxDesignSize are filtered out. The actually
% existing design sizes have to be provided in <sizes> as a comma-separated list
% of numbers. If <s> is one of the sizes, it is expected that the corresponding
% font name can be constructed as <name><s>.
% If the optional argument <scale> is given, it has to be of the form
% [<factor>], where <factor> specifies the scaling of the font (see the
% options ``scaleupmath'' and ``scaleuptt'' above).
  
\newcommand{\DeclareFontShape@TPSF}[7][]
{%
  \FilterSizes@TPSF\sizes@TPSF{#7}%
  \let\sizedecl@TPSF\empty
  \def\fontname@TPSF{#6}%
  \def\scale@TPSF{#1}%
  \expandafter\parsesizes@TPSF\sizes@TPSF,,\@nil
  \DeclareFontShape{#2}{#3}{#4}{#5}{\sizedecl@TPSF}{}%
}

\def\parsesizes@TPSF#1,#2\@nil
{%
  \let\prevsize@TPSF\empty
  \def\currsize@TPSF{#1}%
  \@parsesizes@TPSF#2\@nil
}

\def\@parsesizes@TPSF#1,#2\@nil
{%
  \edef\sizedecl@TPSF{\sizedecl@TPSF\space<\prevsize@TPSF-#1>s*\scale@TPSF \fontname@TPSF\currsize@TPSF}%
  \def\currsize@TPSF{#1}%
  \let\prevsize@TPSF\currsize@TPSF
  \ifx\currsize@TPSF\empty\else\@parsesizes@TPSF#2\@nil\fi
}


%==============================================================================
% Declaration of font shapes.

% The following is copied more or less verbatim from type1cm.sty,
% type1ec.sty, and other sources of font definitions for e.g. cmbright fonts. 
% For fonts following the usual naming conventions, we use
% \DeclareFontShape@TPSF instead of \DeclareFontShape to implement design size
% bounding.   
% For T1 ec fonts, the same is achieved by appropriate redefinition of
% \EC@family. 

\begingroup
\nfss@catcodes

%------------------------------------------------------------------------------
% Text fonts for OT1 encoding.

% computer modern roman.

\DeclareFontFamily{OT1}{cmr}{\hyphenchar\font=45}

\DeclareFontShape@TPSF{OT1}{cmr}{m}{n}{cmr}{5,6,7,8,9,10,12,17}

\DeclareFontShape@TPSF{OT1}{cmr}{m}{sl}{cmsl}{8,9,10,12}

\DeclareFontShape@TPSF{OT1}{cmr}{m}{it}{cmti}{7,8,9,10,12}

\DeclareFontShape@TPSF{OT1}{cmr}{m}{sc}{cmcsc}{9,10}

\DeclareFontShape@TPSF{OT1}{cmr}{m}{ui}{cmu}{10}

\DeclareFontShape@TPSF{OT1}{cmr}{b}{n}{cmb}{10}

\DeclareFontShape@TPSF{OT1}{cmr}{bx}{n}{cmbx}{5,6,7,8,9,10,12}

\DeclareFontShape@TPSF{OT1}{cmr}{bx}{sl}{cmbxsl}{10}

\DeclareFontShape@TPSF{OT1}{cmr}{bx}{it}{cmbxti}{10}

\DeclareFontShape{OT1}{cmr}{bx}{ui}
      {<->ssub * cmr/m/ui}{}

\DeclareFontFamily{OT1}{cmfr}{\hyphenchar\font=45}

\DeclareFontShape{OT1}{cmfr}{m}{n}{%
        <->     cmff10
    }{}
\DeclareFontShape{OT1}{cmfr}{m}{it}{
        <->     cmfi10
    }{}

\DeclareFontFamily{OT1}{cmdh}{\hyphenchar\font=45}

\DeclareFontShape{OT1}{cmdh}{m}{n}{
        <->     cmdunh10
    }{}

\DeclareFontFamily{OT1}{cmfib}{\hyphenchar\font=45}

\DeclareFontShape{OT1}{cmfib}{m}{n}{
        <->     cmfib8
    }{}

% computer modern sans serif.

\DeclareFontFamily{OT1}{cmss}{\hyphenchar\font=45}

\DeclareFontShape@TPSF{OT1}{cmss}{m}{n}{cmss}{8,9,10,12,17}

\DeclareFontShape{OT1}{cmss}{m}{it}
      {<->sub*cmss/m/sl}{}

\DeclareFontShape@TPSF{OT1}{cmss}{m}{sl}{cmssi}{8,9,10,12,17}

\DeclareFontShape{OT1}{cmss}{m}{sc}
       {<->sub*cmr/m/sc}{}

\DeclareFontShape{OT1}{cmss}{m}{ui}
       {<->sub*cmr/m/ui}{}

\DeclareFontShape@TPSF{OT1}{cmss}{sbc}{n}{cmssdc}{10}

\DeclareFontShape@TPSF{OT1}{cmss}{bx}{n}{cmssbx}{10}

\DeclareFontShape{OT1}{cmss}{bx}{ui}
       {<->sub*cmr/bx/ui}{}

% slide computer modern sans serif.

\DeclareFontFamily{OT1}{lcmss}{\hyphenchar\font45 }

\DeclareFontShape@TPSF{OT1}{lcmss}{m}{n}{lcmss}{8}

\DeclareFontShape@TPSF{OT1}{lcmss}{m}{In}{ilcmss}{8}

\DeclareFontShape@TPSF{OT1}{lcmss}{m}{sl}{lcmssi}{8}

\DeclareFontShape@TPSF{OT1}{lcmss}{m}{Isl}{ilcmssi}{8}

\DeclareFontShape{OT1}{lcmss}{m}{it}{%
  <->sub*lcmss/m/sl}{}

\DeclareFontShape{OT1}{lcmss}{m}{Iit}{%
  <->sub*lcmss/m/Isl}{}

\DeclareFontShape@TPSF{OT1}{lcmss}{b}{n}{lcmssb}{8}

\DeclareFontShape@TPSF{OT1}{lcmss}{b}{In}{ilcmssb}{8}

\DeclareFontShape{OT1}{lcmss}{bx}{n}{%
  <->sub*lcmss/b/n}{}

\DeclareFontShape{OT1}{lcmss}{bx}{In}{%
  <->sub*lcmss/b/In}{}

\DeclareFontShape{OT1}{lcmss}{m}{ui}{%
  <->sub*cmr/m/ui}{}

\DeclareFontShape{OT1}{lcmss}{bx}{ui}{%
  <->sub*cmr/m/ui}{}

% computer modern bright

\DeclareFontFamily{OT1}{cmbr}{\hyphenchar\font45}

\DeclareFontShape@TPSF{OT1}{cmbr}{m}{n}{cmbr}{8,9,10,17}

\DeclareFontShape@TPSF{OT1}{cmbr}{m}{sl}{cmbrsl}{8,9,10,17}

\DeclareFontShape{OT1}{cmbr}{m}{it}{%
<->ssub*cmbr/m/sl%
}{}

\DeclareFontShape{OT1}{cmbr}{b}{n}{%
<->ssub*cmbr/bx/n%
}{}

\DeclareFontShape@TPSF{OT1}{cmbr}{bx}{n}{cmbrbx}{10}

% concrete roman

\DeclareFontFamily{OT1}{ccr}{\hyphenchar\font45 }

\DeclareFontShape@TPSF{OT1}{ccr}{m}{n}{ccr}{5,6,7,8,9,10}

\DeclareFontShape@TPSF{OT1}{ccr}{m}{sl}{ccsl}{9,10}

\DeclareFontShape@TPSF{OT1}{ccr}{m}{it}{ccti}{10}

\DeclareFontShape@TPSF{OT1}{ccr}{m}{sc}{cccsc}{10}

\DeclareFontShape{OT1}{ccr}{bx}{n} {<-> ssub * cmss/bx/n}{}
\DeclareFontShape{OT1}{ccr}{bx}{sl}{<-> ssub * cmss/bx/sl}{}
\DeclareFontShape{OT1}{ccr}{bx}{it}{<-> ssub * cmss/bx/it}{}
% \DeclareFontShape{OT1}{ccr}{bx}{n} {<-> ssub * cmr/bx/n}{}
% \DeclareFontShape{OT1}{ccr}{bx}{sl}{<-> ssub * cmr/bx/sl}{}
% \DeclareFontShape{OT1}{ccr}{bx}{it}{<-> ssub * cmr/bx/it}{}
\DeclareFontShape{OT1}{ccr}{sbc}{n} {<-> ssub * cmss/sbc/n}{}
\DeclareFontShape{OT1}{ccr}{sbc}{sl}{<-> ssub * cmss/sbc/n}{}
\DeclareFontShape{OT1}{ccr}{sbc}{it}{<-> ssub * cmss/sbc/n}{}

\DeclareFontShape@TPSF{OT1}{ccr}{c}{sl}{ccslc}{9}

%------------------------------------------------------------------------------
% Text fonts for T1 encoding.

\let\ecscale@TPSF\empty

\ifcase\TPSFMaxDesignSize
 \or\or\or\or\or
  \providecommand{\EC@family}[5]{%
    \DeclareFontShape{#1}{#2}{#3}{#4}{%
      <->\ecscale@TPSF#50500%
    }{}}
 \or
  \providecommand{\EC@family}[5]{%
    \DeclareFontShape{#1}{#2}{#3}{#4}{%
      <-6>\ecscale@TPSF#50500%
      <6->\ecscale@TPSF#50600%
    }{}}
 \or
  \providecommand{\EC@family}[5]{%
    \DeclareFontShape{#1}{#2}{#3}{#4}{%
      <-6>\ecscale@TPSF#50500%
      <6-7>\ecscale@TPSF#50600%
      <7->\ecscale@TPSF#50700%
    }{}}
 \or
  \providecommand{\EC@family}[5]{%
    \DeclareFontShape{#1}{#2}{#3}{#4}{%
      <-6>\ecscale@TPSF#50500%
      <6-7>\ecscale@TPSF#50600%
      <7-8>\ecscale@TPSF#50700%
      <8->\ecscale@TPSF#50800%
    }{}}
 \or
  \providecommand{\EC@family}[5]{%
    \DeclareFontShape{#1}{#2}{#3}{#4}{%
      <-6>\ecscale@TPSF#50500%
      <6-7>\ecscale@TPSF#50600%
      <7-8>\ecscale@TPSF#50700%
      <8-9>\ecscale@TPSF#50800%
      <9->\ecscale@TPSF#50900%
    }{}}
 \or
  \providecommand{\EC@family}[5]{%
    \DeclareFontShape{#1}{#2}{#3}{#4}{%
      <-6>\ecscale@TPSF#50500%
      <6-7>\ecscale@TPSF#50600%
      <7-8>\ecscale@TPSF#50700%
      <8-9>\ecscale@TPSF#50800%
      <9-10>\ecscale@TPSF#50900%
      <10->\ecscale@TPSF#51000%
    }{}}
 \or
  \providecommand{\EC@family}[5]{%
    \DeclareFontShape{#1}{#2}{#3}{#4}{%
      <-6>\ecscale@TPSF#50500%
      <6-7>\ecscale@TPSF#50600%
      <7-8>\ecscale@TPSF#50700%
      <8-9>\ecscale@TPSF#50800%
      <9-10>\ecscale@TPSF#50900%
      <10-10.95>\ecscale@TPSF#51000%
      <10.95->\ecscale@TPSF#51095%
    }{}}
 \or
  \providecommand{\EC@family}[5]{%
    \DeclareFontShape{#1}{#2}{#3}{#4}{%
      <-6>\ecscale@TPSF#50500%
      <6-7>\ecscale@TPSF#50600%
      <7-8>\ecscale@TPSF#50700%
      <8-9>\ecscale@TPSF#50800%
      <9-10>\ecscale@TPSF#50900%
      <10-10.95>\ecscale@TPSF#51000%
      <10.95-12>\ecscale@TPSF#51095%
      <12->\ecscale@TPSF#51200%
    }{}}
\fi

% european computer modern roman.

\input{t1cmr.fd}

\input{t1cmfr.fd}

\input{t1cmdh.fd}

\input{t1cmfib.fd}

% european computer modern roman sans serif.

\input{t1cmss.fd}

\DeclareFontShape@TPSF{T1}{cmss}{sbc}{n}{ecssdc}{10}

% european slide computer modern sans serif.

\DeclareFontFamily{T1}{lcmss}{}
\DeclareFontShape@TPSF{T1}{lcmss}{m}{n}{eclq}{8}

\DeclareFontShape@TPSF{T1}{lcmss}{m}{In}{ieclq}{8}

\DeclareFontShape@TPSF{T1}{lcmss}{m}{sl}{ecli}{8}

\DeclareFontShape@TPSF{T1}{lcmss}{m}{Isl}{iecli}{8} 

\DeclareFontShape{T1}{lcmss}{m}{it}{%
  <->sub*lcmss/m/sl}{}

\DeclareFontShape{T1}{lcmss}{m}{Iit}{%
  <->sub*lcmss/m/Isl}{}

\DeclareFontShape@TPSF{T1}{lcmss}{bx}{n}{eclb}{8}

\DeclareFontShape@TPSF{T1}{lcmss}{bx}{In}{ieclb}{8}

\DeclareFontShape@TPSF{T1}{lcmss}{bx}{sl}{eclo}{8}

\DeclareFontShape@TPSF{T1}{lcmss}{bx}{Isl}{ieclo}{8}

\DeclareFontShape{T1}{lcmss}{bx}{it}{%
      <->sub*lcmss/bx/sl}{}

\DeclareFontShape{T1}{lcmss}{bx}{Iit}{%
      <->sub*lcmss/bx/Isl}{}

\DeclareFontShape{T1}{lcmss}{b}{n}{%
  <->sub*lcmss/bx/n}{}

\DeclareFontShape{T1}{lcmss}{m}{ui}{%
  <->sub*cmr/m/ui}{}

\DeclareFontShape{T1}{lcmss}{bx}{ui}{%
  <->sub*cmr/m/ui}{}

% european computer modern bright

\DeclareFontFamily{T1}{cmbr}{}

\DeclareFontShape@TPSF{T1}{cmbr}{m}{n}{ebmr}{8,9,10,17}

\DeclareFontShape@TPSF{T1}{cmbr}{m}{sl}{ebmo}{8,9,10,17}

\DeclareFontShape{T1}{cmbr}{m}{it}{%
<->ssub*cmbr/m/sl%
}{}

\DeclareFontShape@TPSF{T1}{cmbr}{sb}{n}{ebsr}{8,9,10,17}

\DeclareFontShape@TPSF{T1}{cmbr}{sb}{sl}{ebso}{8,9,10,17}

\DeclareFontShape{T1}{cmbr}{sb}{it}{%
<->ssub*cmbr/sb/sl%
}{}

\DeclareFontShape{T1}{cmbr}{b}{n}{%
<->ssub*cmbr/bx/n%
}{}

\DeclareFontShape{T1}{cmbr}{bx}{n}{%
<->sub*cmbr/sb/n%
}{}

% european concrete roman

\DeclareFontFamily{T1}{ccr}{}

\DeclareFontShape@TPSF{T1}{ccr}{m}{n}{eorm}{5,6,7,8,9,10}

\DeclareFontShape@TPSF{T1}{ccr}{m}{sl}{eosl}{5,6,7,8,9,10}

\DeclareFontShape@TPSF{T1}{ccr}{m}{it}{eoti}{10}

\DeclareFontShape@TPSF{T1}{ccr}{m}{sc}{eocc}{10}

\DeclareFontShape{T1}{ccr}{bx}{n}{%
<->ssub*cmss/bx/n}{}

\DeclareFontShape{T1}{ccr}{bx}{sl}{%
<->ssub*cmss/bx/sl}{}

\DeclareFontShape{T1}{ccr}{bx}{it}{%
<->ssub*cmss/bx/it}{}

% \DeclareFontShape{T1}{ccr}{bx}{n}{%
% <->ssub*cmr/bx/n}{}

% \DeclareFontShape{T1}{ccr}{bx}{sl}{%
% <->ssub*cmr/bx/sl}{}

% \DeclareFontShape{T1}{ccr}{bx}{it}{%
% <->ssub*cmr/bx/it}{}

\DeclareFontShape{T1}{ccr}{sbc}{n}{%
 <->ssubf*ecssdc10}{}

%------------------------------------------------------------------------------
% Typewriter fonts for OT1 encoding.

% computer modern typewriter.

\DeclareFontFamily{OT1}{cmtt}{\hyphenchar\font\m@ne}

\DeclareFontShape@TPSF[\ttscale@TPSF]{OT1}{cmtt}{m}{n}{cmtt}{8,9,10,12}

\DeclareFontShape@TPSF[\ttscale@TPSF]{OT1}{cmtt}{m}{it}{cmitt}{10}

\DeclareFontShape@TPSF[\ttscale@TPSF]{OT1}{cmtt}{m}{sl}{cmsltt}{10}

\DeclareFontShape@TPSF[\ttscale@TPSF]{OT1}{cmtt}{m}{sc}{cmtcsc}{10}

\DeclareFontShape{OT1}{cmtt}{m}{ui}
  {<->sub * cmtt/m/it}{}

\DeclareFontShape{OT1}{cmtt}{bx}{n}
  {<->sub * cmtt/m/n}{}

\DeclareFontShape{OT1}{cmtt}{bx}{it}
  {<->sub * cmtt/m/it}{}

\DeclareFontShape{OT1}{cmtt}{bx}{ui}
  {<->sub * cmtt/m/it}{}

% `Slides' computer modern typewriter exists only for compatibility with T1
% encoding. 

\DeclareFontFamily{OT1}{lcmtt}{\hyphenchar\font\m@ne}

\DeclareFontShape@TPSF[\ttscale@TPSF]{OT1}{lcmtt}{m}{n}{cmtt}{8,9,10,12}

\DeclareFontShape@TPSF[\ttscale@TPSF]{OT1}{lcmtt}{m}{it}{cmitt}{10}

\DeclareFontShape@TPSF[\ttscale@TPSF]{OT1}{lcmtt}{m}{sl}{cmsltt}{10}

\DeclareFontShape@TPSF[\ttscale@TPSF]{OT1}{lcmtt}{m}{sc}{cmtcsc}{10}

\DeclareFontShape{OT1}{lcmtt}{m}{ui}
  {<->sub * lcmtt/m/it}{}

\DeclareFontShape{OT1}{lcmtt}{bx}{n}
  {<->sub * lcmtt/m/n}{}

\DeclareFontShape{OT1}{lcmtt}{bx}{it}
  {<->sub * lcmtt/m/it}{}

\DeclareFontShape{OT1}{lcmtt}{bx}{ui}
  {<->sub * lcmtt/m/it}{}

% computer modern typewriter light.

\DeclareFontFamily{OT1}{cmtl}{\hyphenchar\font\m@ne}

\DeclareFontShape{OT1}{cmtl}{m}{n}{%
<->s*\ttscale@TPSF cmtl10%
}{}

\DeclareFontShape{OT1}{cmtl}{m}{sl}{%
<->s*\ttscale@TPSF cmsltl10%
}{}

\DeclareFontShape{OT1}{cmtl}{m}{it}{<->ssub*cmtl/m/sl}{}

%------------------------------------------------------------------------------
% Typewriter fonts for T1 encoding.

\ifcase\TPSFMaxDesignSize
 \or\or\or\or\or
  \providecommand{\EC@ttfamily}[5]{%
    \DeclareFontShape{#1}{#2}{#3}{#4}{%
      <->s*\ttscale@TPSF#50800%
    }{}}
 \or
  \providecommand{\EC@ttfamily}[5]{%
    \DeclareFontShape{#1}{#2}{#3}{#4}{%
      <->s*\ttscale@TPSF#50800%
    }{}}
 \or
  \providecommand{\EC@ttfamily}[5]{%
    \DeclareFontShape{#1}{#2}{#3}{#4}{%
      <->s*\ttscale@TPSF#50800%
    }{}}
 \or
  \providecommand{\EC@ttfamily}[5]{%
    \DeclareFontShape{#1}{#2}{#3}{#4}{%
      <->s*\ttscale@TPSF#50800%
    }{}}
 \or
  \providecommand{\EC@ttfamily}[5]{%
    \DeclareFontShape{#1}{#2}{#3}{#4}{%
      <-9>s*\ttscale@TPSF#50800%
      <9->s*\ttscale@TPSF#50900%
    }{}}
 \or
  \providecommand{\EC@ttfamily}[5]{%
    \DeclareFontShape{#1}{#2}{#3}{#4}{%
      <-9>s*\ttscale@TPSF#50800%
      <9-10>s*\ttscale@TPSF#50900%
      <10->s*\ttscale@TPSF#51000%
    }{}}
 \or
  \providecommand{\EC@ttfamily}[5]{%
    \DeclareFontShape{#1}{#2}{#3}{#4}{%
      <-9>s*\ttscale@TPSF#50800%
      <9-10>s*\ttscale@TPSF#50900%
      <10-10.95>s*\ttscale@TPSF#51000%
      <10.95->s*\ttscale@TPSF#51095%
    }{}}
 \or
  \providecommand{\EC@ttfamily}[5]{%
    \DeclareFontShape{#1}{#2}{#3}{#4}{%
      <-9>s*\ttscale@TPSF#50800%
      <9-10>s*\ttscale@TPSF#50900%
      <10-10.95>s*\ttscale@TPSF#51000%
      <10.95-12>s*\ttscale@TPSF#51095%
      <12->s*\ttscale@TPSF#51200%
    }{}}
\fi

% european computer modern typewriter.

\input{t1cmtt.fd}

% european `Slides' computer modern typewriter. There exists _one_ dedicated
% font ``ecltt8'' for this setup.

\DeclareFontFamily{T1}{lcmtt}{\hyphenchar\font\m@ne}

\DeclareFontShape{T1}{lcmtt}{m}{n}{%
  <->s*\ttscale@TPSF ecltt8%
}{}

\DeclareFontShape{T1}{lcmtt}{m}{In}{%
  <->s*\ttscale@TPSF iecltt8%
}{}

\DeclareFontShape{T1}{lcmtt}{m}{it}{%
  <->s*\ttscale@TPSF ecit0800%
}{}

\DeclareFontShape{T1}{lcmtt}{m}{sl}{
  <->s*\ttscale@TPSF     ecst0800
}{}

\DeclareFontShape{T1}{lcmtt}{m}{sc}{
  <->s*\ttscale@TPSF     ectc0800
}{}

\DeclareFontShape{T1}{lcmtt}{m}{ui}
{<->sub * lcmtt/m/it}{}

\DeclareFontShape{T1}{lcmtt}{bx}{n}
{<->sub * lcmtt/m/n}{}

\DeclareFontShape{T1}{lcmtt}{bx}{it}
{<->sub * lcmtt/m/it}{}

\DeclareFontShape{T1}{lcmtt}{bx}{ui}
{<->sub * lcmtt/m/it}{}

% european computer modern typewriter light.

\DeclareFontFamily{T1}{cmtl}{\hyphenchar\font\m@ne}

\DeclareFontShape{T1}{cmtl}{m}{n}{%
<->s*\ttscale@TPSF ebtl10%
}{}

\DeclareFontShape{T1}{cmtl}{m}{sl}{%
<->s*\ttscale@TPSF ebto10%
}{}

\DeclareFontShape{T1}{cmtl}{m}{it}{<->ssub*cmtl/m/sl}{}

%------------------------------------------------------------------------------
% Typewriter fonts for mTT encoding, used by cmtt.sty.

\@ifundefined{T@mTT}{}
{%
  \DeclareFontFamily{mTT}{cmtt}{\hyphenchar\font\m@ne}
  \DeclareFontShape@TPSF[\ttscale@TPSF]{mTT}{cmtt}{m}{n}{cmtt}{8,9,10,12}
  
  \DeclareFontShape@TPSF[\ttscale@TPSF]{mTT}{cmtt}{m}{it}{cmitt}{10}
  
  \DeclareFontShape@TPSF[\ttscale@TPSF]{mTT}{cmtt}{m}{sl}{cmsltt}{10}
  
  \DeclareFontShape@TPSF[\ttscale@TPSF]{mTT}{cmtt}{m}{sc}{cmtcsc}{10}

  \DeclareFontShape{mTT}{cmtt}{m}{ui}
  {<->sub * cmtt/m/it}{}
  
  \DeclareFontShape{mTT}{cmtt}{bx}{n}
  {<->sub * cmtt/m/n}{}
  
  \DeclareFontShape{mTT}{cmtt}{bx}{it}
  {<->sub * cmtt/m/it}{}
  
  \DeclareFontShape{mTT}{cmtt}{bx}{ui}
  {<->sub * cmtt/m/it}{}
  
  \DeclareFontFamily{mTT}{lcmtt}{\hyphenchar\font\m@ne}

  \DeclareFontShape@TPSF[\ttscale@TPSF]{mTT}{lcmtt}{m}{n}{cmtt}{8,9,10,12}
  
  \DeclareFontShape@TPSF[\ttscale@TPSF]{mTT}{lcmtt}{m}{it}{cmitt}{10}
  
  \DeclareFontShape@TPSF[\ttscale@TPSF]{mTT}{lcmtt}{m}{sl}{cmsltt}{10}
  
  \DeclareFontShape@TPSF[\ttscale@TPSF]{mTT}{lcmtt}{m}{sc}{cmtcsc}{10}
  
  \DeclareFontShape{mTT}{lcmtt}{m}{ui}
  {<->sub * lcmtt/m/it}{}
  
  \DeclareFontShape{mTT}{lcmtt}{bx}{n}
  {<->sub * lcmtt/m/n}{}
  
  \DeclareFontShape{mTT}{lcmtt}{bx}{it}
  {<->sub * lcmtt/m/it}{}
  
  \DeclareFontShape{mTT}{lcmtt}{bx}{ui}
  {<->sub * lcmtt/m/it}{}

  \DeclareFontFamily{mTT}{cmtl}{\hyphenchar\font\m@ne}
  
  \DeclareFontShape{mTT}{cmtl}{m}{n}{%
    <->s*\ttscale@TPSF cmtl10%
  }{}
  
  \DeclareFontShape{mTT}{cmtl}{m}{sl}{%
    <->s*\ttscale@TPSF cmsltl10%
  }{}
  
  \DeclareFontShape{mTT}{cmtl}{m}{it}{<->ssub*cmtl/m/sl}{}
}

%------------------------------------------------------------------------------
% Math fonts.

% computer modern math italic.

\DeclareFontFamily{OML}{cmm}{\skewchar\font127}

\DeclareFontShape@TPSF[\mathscale@TPSF]{OML}{cmm}{m}{it}{cmmi}{5,6,7,8,9,10,12}

\DeclareFontShape@TPSF[\mathscale@TPSF]{OML}{cmm}{m}{Iit}{icmmi}{8}

\DeclareFontShape@TPSF[\mathscale@TPSF]{OML}{cmm}{b}{it}{cmmib}{5,7,10}

\DeclareFontShape{OML}{cmm}{bx}{it}%
   {<->ssub*cmm/b/it}{}

\DeclareFontFamily{OML}{cmr}{\skewchar\font127 }
\DeclareFontShape{OML}{cmr}{m}{n}
   {<-> ssub * cmm/m/it}{}
\DeclareFontShape{OML}{cmr}{m}{it}
   {<-> ssub * cmm/m/it}{}
\DeclareFontShape{OML}{cmr}{m}{sl}
   {<-> ssub * cmm/m/it}{}
\DeclareFontShape{OML}{cmr}{m}{sc}
   {<-> ssub * cmm/m/it}{}
\DeclareFontShape{OML}{cmr}{bx}{n}
   {<-> ssub * cmm/b/it}{}
\DeclareFontShape{OML}{cmr}{bx}{it}
   {<-> ssub * cmm/b/it}{}
\DeclareFontShape{OML}{cmr}{bx}{sl}
   {<-> ssub * cmm/b/it}{}
\DeclareFontShape{OML}{cmr}{bx}{sc}
   {<-> ssub * cmm/b/it}{}

\DeclareFontFamily{OT1}{cmrm}{\hyphenchar\font=45}

\DeclareFontShape@TPSF[\mathscale@TPSF]{OT1}{cmrm}{m}{n}{cmr}{5,6,7,8,9,10,12,17}

\DeclareFontShape@TPSF[\mathscale@TPSF]{OT1}{cmrm}{m}{it}{cmti}{7,8,9,10,12}

\DeclareFontShape@TPSF[\mathscale@TPSF]{OT1}{cmrm}{bx}{n}{cmbx}{5,6,7,8,9,10,12}

\DeclareFontShape@TPSF[\mathscale@TPSF]{OT1}{cmrm}{bx}{it}{cmbxti}{10}

{%
\let\ecscale@TPSF\mathscale@TPSF

\DeclareFontFamily{T1}{cmrm}{}

\EC@family{T1}{cmrm}{m}{n}{ecrm}

\EC@family{T1}{cmrm}{m}{it}{ecti}

\EC@family{T1}{cmrm}{bx}{n}{ecbx}

\EC@family{T1}{cmrm}{bx}{it}{ecbi}
}

\DeclareFontFamily{OMS}{cmsy}{\skewchar\font48}

\DeclareFontShape@TPSF[\mathscale@TPSF]{OMS}{cmsy}{m}{n}{cmsy}{5,6,7,8,9,10}

\DeclareFontShape@TPSF[\mathscale@TPSF]{OMS}{cmsy}{b}{n}{cmbsy}{5,7,10}

\DeclareFontShape@TPSF[\mathscale@TPSF]{OMS}{cmsy}{m}{In}{icmsy}{8}

\DeclareFontFamily{OMS}{cmr}{\skewchar\font48 }
\DeclareFontShape{OMS}{cmr}{m}{n}
   {<-> ssub * cmsy/m/n}{}
\DeclareFontShape{OMS}{cmr}{m}{it}
   {<-> ssub * cmsy/m/n}{}
\DeclareFontShape{OMS}{cmr}{m}{sl}
   {<-> ssub * cmsy/m/n}{}
\DeclareFontShape{OMS}{cmr}{m}{sc}
   {<-> ssub * cmsy/m/n}{}
\DeclareFontShape{OMS}{cmr}{bx}{n}
   {<-> ssub * cmsy/b/n}{}
\DeclareFontShape{OMS}{cmr}{bx}{it}
   {<-> ssub * cmsy/b/n}{}
\DeclareFontShape{OMS}{cmr}{bx}{sl}
   {<-> ssub * cmsy/b/n}{}
\DeclareFontShape{OMS}{cmr}{bx}{sc}
   {<-> ssub * cmsy/b/n}{}

\DeclareFontFamily{OMX}{cmex}{}

\DeclareFontShape{OMX}{cmex}{m}{n}{%
  <->\mathscale@TPSF     cmex10%
}{}

% Euler fonts (eulervm style).

\DeclareFontFamily{U}{zeur}{\skewchar \font =127}

\DeclareFontShape@TPSF[\eulerscale@TPSF]{U}{zeur}{m}{n}{zeurm}{5,7,10}

\DeclareFontShape@TPSF[\eulerscale@TPSF]{U}{zeur}{b}{n}{zeurb}{5,7,10}

\DeclareFontShape{U}{zeur}{bx}{n}{<->ssub * zeur/b/n}{}

\DeclareFontFamily{U}{zeus}{\skewchar \font =176}

\DeclareFontShape@TPSF[\eulerscale@TPSF]{U}{zeus}{m}{n}{zeusm}{5,7,10}

\DeclareFontShape@TPSF[\eulerscale@TPSF]{U}{zeus}{b}{n}{zeusb}{5,7,10}

\DeclareFontShape{U}{zeus}{bx}{n}{<->ssub * zeus/b/n}{}

\DeclareFontFamily{U}{zeuex}{}

\DeclareFontShape{U}{zeuex}{m}{n}{
  <-> \eulerscale@TPSF zeuex10
}{}

% computer modern bright math slanted.

\DeclareFontFamily{OML}{cmbrm}{\skewchar\font 127}

\DeclareFontShape@TPSF[\cmbrscale@TPSF]{OML}{cmbrm}{m}{it}{cmbrmi}{8,9,10}

\DeclareFontShape@TPSF[\cmbrscale@TPSF]{OML}{cmbrm}{b}{it}{cmbrmb}{10}

\DeclareFontFamily{OML}{cmbr}{\skewchar\font 127}

\DeclareFontShape{OML}{cmbr}{m}{it}{<->ssub*cmbrm/m/it}{}

\DeclareFontShape{OML}{cmbr}{sb}{it}{<->ssub*cmbrm/b/it}{}

\DeclareFontShape{OML}{cmbr}{bx}{it}{<->ssub*cmbrm/b/it}{}

\DeclareFontFamily{OT1}{cmbrmt}{\hyphenchar\font45}

\DeclareFontShape@TPSF[\cmbrscale@TPSF]{OT1}{cmbrmt}{m}{n}{cmbr}{8,9,10,17}

\DeclareFontShape@TPSF[\cmbrscale@TPSF]{OT1}{cmbrmt}{m}{sl}{cmbrsl}{8,9,10,17}

\DeclareFontShape{OT1}{cmbrmt}{m}{it}{%
<->ssub*cmbrmt/m/sl%
}{}

\DeclareFontShape@TPSF[\cmbrscale@TPSF]{OT1}{cmbrmt}{bx}{n}{cmbrbx}{10}

\DeclareFontFamily{T1}{cmbrmt}{}

\DeclareFontShape@TPSF[\cmbrscale@TPSF]{T1}{cmbrmt}{m}{n}{ebmr}{8,9,10,17}

\DeclareFontShape@TPSF[\cmbrscale@TPSF]{T1}{cmbrmt}{m}{sl}{ebmo}{8,9,10,17}

\DeclareFontShape{T1}{cmbrmt}{m}{it}{%
<->ssub*cmbrmt/m/sl%
}{}

\DeclareFontShape@TPSF[\cmbrscale@TPSF]{T1}{cmbrmt}{sb}{n}{ebsr}{8,9,10,17}

\DeclareFontShape@TPSF[\cmbrscale@TPSF]{T1}{cmbrmt}{sb}{sl}{ebso}{8,9,10,17}

\DeclareFontShape{T1}{cmbrmt}{sb}{it}{%
<->ssub*cmbrmt/sb/sl%
}{}

\DeclareFontShape{T1}{cmbrmt}{bx}{n}{%
<->sub*cmbrmt/sb/n%
}{}

\DeclareFontShape{T1}{cmbrmt}{bx}{it}{%
<->sub*cmbrmt/sb/it%
}{}

\DeclareFontFamily{OMS}{cmbrs}{\skewchar\font 48}

\DeclareFontShape@TPSF[\cmbrscale@TPSF]{OMS}{cmbrs}{m}{n}{cmbrsy}{8,9,10}

\DeclareFontShape{OMS}{cmbrs}{m}{b}{<->ssub*cmbrs/m/n}{}

\DeclareFontFamily{OMS}{cmbr}{\skewchar\font 48}

\DeclareFontShape{OMS}{cmbr}{m}{n}{<->ssub*cmbrs/m/n}{}

\DeclareFontShape{OMS}{cmbr}{m}{b}{<->ssub*cmbrs/m/n}{}

% Concrete Math Italic

\DeclareFontFamily{OML}{ccm}{\skewchar\font127 }

\DeclareFontShape@TPSF[\mathscale@TPSF]{OML}{ccm}{m}{it}{xccmi}{5,6,7,8,9,10}

\DeclareFontShape{OML}{ccm}{b}{it}{<-> ssub * cmm/b/it}{}

\DeclareFontShape{OML}{ccm}{c}{it}{<9>\mathscale@TPSF ccmic9}{}

\DeclareFontFamily{OML}{ccr}{\skewchar\font127 }

\DeclareFontShape{OML}{ccr}{m}{it}  {<->ssub * ccm/m/it}{}

\DeclareFontShape{OML}{ccr}{bx}{it} {<->ssub * ccm/b/it}{}

\DeclareFontShape{OML}{ccr}{sbc}{it}{<->ssub * ccm/m/it}{}

\DeclareFontFamily{OMS}{ccsy}{\skewchar\font48 }

\DeclareFontShape@TPSF[\mathscale@TPSF]{OMS}{ccsy}{m}{n}{xccsy}{5,6,7,8,9,10}

\DeclareFontShape{OMS}{ccsy}{b}{n}{<-> ssub * cmsy/b/n}{}

\DeclareFontFamily{OMS}{ccr}{\skewchar\font48 }

\DeclareFontShape{OMS}{ccr}{m}{n}  {<->ssub * ccsy/m/n}{}

\DeclareFontShape{OMS}{ccr}{bx}{n} {<->ssub * ccsy/b/n}{}

\DeclareFontShape{OMS}{ccr}{sbc}{n}{<->ssub * ccsy/m/n}{}

\DeclareFontFamily{OMX}{ccex}{}

\DeclareFontShape{OMX}{ccex}{m}{n}{<->\mathscale@TPSF  xccex10}{}

% LaTeX symbols

\DeclareFontFamily{U}{lasy}{}

\DeclareFontShape@TPSF[\mathscale@TPSF]{U}{lasy}{m}{n}{lasy}{5,6,7,8,9,10}

\DeclareFontShape{U}{lasy}{b}{n}{
        <-> \mathscale@TPSF    lasyb10
        }{}

% AMS fonts

\DeclareFontFamily{U}{msa}{}

\DeclareFontFamily{U}{msb}{}

\ifthenelse{\equal{\TPSFMathfont}{cmbrm}}
{%
  \AtBeginDocument
  {%
    \DeclareFontShape@TPSF[\cmbrscale@TPSF]{U}{msa}{m}{n}{cmbras}{8,9,10}%
    \DeclareFontShape@TPSF[\cmbrscale@TPSF]{U}{msb}{m}{n}{cmbrbs}{8,9,10}%
  }%
}
{%
  \DeclareFontShape@TPSF[\mathscale@TPSF]{U}{msa}{m}{n}{msam}{5,7,10}

  \DeclareFontShape@TPSF[\mathscale@TPSF]{U}{msb}{m}{n}{msbm}{5,7,10}
}

\DeclareFontFamily{U}{euex}{}

\DeclareFontShape{U}{euex}{m}{n}{
        <-> \eulerscale@TPSF    euex10 
        }{}

\DeclareFontFamily{U}{euf}{}

\DeclareFontShape@TPSF[\eulerscale@TPSF]{U}{euf}{m}{n}{eufm}{5,7,10}

\DeclareFontShape@TPSF[\eulerscale@TPSF]{U}{euf}{b}{n}{eufb}{5,7,10}

\DeclareFontFamily{U}{eur}{\skewchar\font'177}

\DeclareFontShape@TPSF[\eulerscale@TPSF]{U}{eur}{m}{n}{eurm}{5,7,10}

\DeclareFontShape@TPSF[\eulerscale@TPSF]{U}{eur}{b}{n}{eurb}{5,7,10}

\DeclareFontFamily{U}{eus}{\skewchar\font'60}

\DeclareFontShape@TPSF[\eulerscale@TPSF]{U}{eus}{m}{n}{eusm}{5,7,10}

\DeclareFontShape@TPSF[\eulerscale@TPSF]{U}{eus}{b}{n}{eusb}{5,7,10}

% St Mary's Road symbol font.

\DeclareFontFamily{U}{stmry}{}

\DeclareFontShape@TPSF[\mathscale@TPSF]{U}{stmry}{m}{n}{stmary}{5,6,7,8,9,10}

% Wasy symbol font.

\DeclareFontFamily{U}{wasy}{}

\DeclareFontShape@TPSF[\mathscale@TPSF]{U}{wasy}{m}{n}{wasy}{5,6,7,8,9,10}
      
\DeclareFontShape{U}{wasy}{b}{n}
{ <->\mathscale@TPSF wasyb10 
}{}

% formal script math symbols

\DeclareFontFamily{U}{rsfs}{\skewchar\font127 }

\DeclareFontShape@TPSF[\mathscale@TPSF]{U}{rsfs}{m}{n}{rsfs}{5,7,10}

% double stroke computer modern

\DeclareFontFamily{U}{dsrom}{}

\DeclareFontShape@TPSF[\mathscale@TPSF]{U}{dsrom}{m}{n}{dsrom}{8,10,12}

\DeclareFontFamily{U}{dsss}{}

\DeclareFontShape@TPSF[\mathscale@TPSF]{U}{dsss}{m}{n}{dsss}{8,10,12}

\endgroup

% Just to make sure in case these have been defined before...
\expandafter\let\csname OT1/cmr/m/n/10\endcsname\relax
\expandafter\let\csname OT1/cmr/m/n/10.95\endcsname\relax
\expandafter\let\csname OT1/cmr/m/n/12\endcsname\relax
\expandafter\let\csname T1/cmr/m/n/10\endcsname\relax
\expandafter\let\csname T1/cmr/m/n/10.95\endcsname\relax
\expandafter\let\csname T1/cmr/m/n/12\endcsname\relax

%==============================================================================
% Font shape selection.

%------------------------------------------------------------------------------
% Set text fonts.

\newcommand{\setlcmssTextFonts@TPSF}
{%
  \renewcommand{\familydefault}{\sfdefault}% Main text font is sans serif.
  \renewcommand{\sfdefault}{lcmss}%          Choose lcmss as sans serif font.
  \renewcommand{\ttdefault}{lcmtt}%          Typewriter font lcmtt.
}

\newcommand{\setcmrTextFonts@TPSF}
{%
  \renewcommand{\familydefault}{\rmdefault}% Main text font is roman.
  \renewcommand{\rmdefault}{cmr}%            Choose cmr as roman font.
  \renewcommand{\ttdefault}{cmtt}%           Typewriter font.
}

\newcommand{\setcmssTextFonts@TPSF}
{%
  \renewcommand{\familydefault}{\sfdefault}% Main text font is sans serif.
  \renewcommand{\sfdefault}{cmss}%           Choose cmss as sans serif font.
  \renewcommand{\ttdefault}{cmtt}%           Typewriter font.
}

\newcommand{\setcmbrTextFonts@TPSF}
{%
  \renewcommand{\familydefault}{\sfdefault}% Main text font is sans serif.
  \renewcommand{\sfdefault}{cmbr}%           Choose cmss as sans serif font.
  \renewcommand{\ttdefault}{cmtl}%           Light Typewriter font.
}

\newcommand{\setccrTextFonts@TPSF}
{%
  \renewcommand{\familydefault}{\rmdefault}% Main text font is roman.
  \renewcommand{\rmdefault}{ccr}%            Choose ccr as roman font.
  \renewcommand{\ttdefault}{cmtt}%           Typewriter font.
}

\csname set\TPSFTextfont TextFonts@TPSF\endcsname


%------------------------------------------------------------------------------
% Configure Math fonts.

\newcommand{\setcmmMathFonts@TPSF}
{%
  \SetSymbolFont{letters}     {normal}{OML}{cmm} {m}{it}
  \SetSymbolFont{symbols}     {normal}{OMS}{cmsy}{m}{n}
  \SetSymbolFont{largesymbols}{normal}{OMX}{cmex}{m}{n}
  \SetSymbolFont{letters}     {bold}  {OML}{cmm} {b}{it}
  \SetSymbolFont{symbols}     {bold}  {OMS}{cmsy}{b}{n}
}

\newcommand{\setccmMathFonts@TPSF}
{%
  \SetSymbolFont{letters}     {normal}{OML}{ccm} {m}{it}
  \SetSymbolFont{symbols}     {normal}{OMS}{ccsy}{m}{n}
  \SetSymbolFont{largesymbols}{normal}{OMX}{ccex}{m}{n}
  \SetSymbolFont{letters}     {bold}  {OML}{ccm} {b}{it}
  \SetSymbolFont{symbols}     {bold}  {OMS}{ccsy}{b}{n}
}

\newcommand{\seteulerMathFonts@TPSF}
{%
  \RequirePackage{eulervm}
  \def\tpc@ncel##1##2{\m@th\ooalign{$\hfil##1/\hfil$\crcr$##1##2$}}
  \def\neq{\mathrel{\m@th\mathpalette\tpc@ncel=}}
  \DeclareSymbolFont{auxletters}{OML}{cmm}{m}{it}
  \SetSymbolFont{auxletters}{bold}{OML}{cmm}{b}{it}
  \DeclareMathSymbol{<}{\mathrel}{auxletters}{"3C}
  \DeclareMathSymbol{>}{\mathrel}{auxletters}{"3E}
}

\newcommand{\setcmbrmMathFonts@TPSF}
{%
  \SetSymbolFont{letters}     {normal}{OML}{cmbrm} {m}{it}
  \SetSymbolFont{symbols}     {normal}{OMS}{cmbrs}{m}{n}
  \SetSymbolFont{largesymbols}{normal}{OMX}{cmex}{m}{n}
  \SetSymbolFont{letters}     {bold}  {OML}{cmbrm} {b}{it}
  \SetSymbolFont{symbols}     {bold}{OMS}{cmbrs}{b}{n}
}

\csname set\TPSFMathfont MathFonts@TPSF\endcsname


%------------------------------------------------------------------------------
% Configure Operator fonts.

\ifthenelse{\equal{\TPSFMathfont}{euler}}
{%
  \SetSymbolFont{operators}{normal}{\encodingdefault}{\TPSFOperatorfont}{m}{n}%
  \SetSymbolFont{operators}{bold}{\encodingdefault}{\TPSFOperatorfont}{bx}{n}%
}
{%
  \SetSymbolFont{operators}{normal}{OT1}{\TPSFOperatorfont}{m}{n}%
  \SetSymbolFont{operators}{bold}{OT1}{\TPSFOperatorfont}{bx}{n}%
}


%------------------------------------------------------------------------------
% Alphabets for ``text inside math''.

\DeclareMathAlphabet      {\mathbf}{\encodingdefault}{\TPSFOperatorfont}{bx}{n}
\DeclareMathAlphabet      {\mathsf}{\encodingdefault}{\sfdefault}{m}{n}
\DeclareMathAlphabet      {\mathit}{\encodingdefault}{\TPSFOperatorfont}{m}{it}
\DeclareMathAlphabet      {\mathtt}{\encodingdefault}{\ttdefault}{m}{n}
\SetMathAlphabet\mathsf{bold}{\encodingdefault}{\sfdefault}{bx}{n}
\SetMathAlphabet\mathit{bold}{\encodingdefault}{\TPSFOperatorfont}{bx}{it}
\SetMathAlphabet{\mathtt}{bold}{\encodingdefault}{\ttdefault}{bx}{n}

%------------------------------------------------------------------------------
% \oldstylenums follow in style the math font setting.

\def\oldstylenums#1{%
   \begingroup
    \spaceskip\fontdimen\tw@\font
    \usefont{OML}{\TPSFMathfont}{\f@series}{it}%
    \mathgroup\symletters #1%
   \endgroup
}

%------------------------------------------------------------------------------
% Configure doublestroke fonts

\@ifpackageloaded{dsfont}
{%
  \ifthenelse{\equal{\TPSFOperatorfont}{cmr}}
  {%
    \DeclareMathAlphabet{\mathds}{U}{dsrom}{m}{n}
  }
  {%
    \DeclareMathAlphabet{\mathds}{U}{dsss}{m}{n}
  }
}{}%


% Local Variables: 
% fill-column: 80
% TeX-master: "dummy"
% End: 

%%
%% End of file `tpslifonts.sty'.
