% \iffalse meta-comment
%
% Copyright 2010 - 2012 by Boris Oriet <http://boris.oriet.net>
% 
% This file may be distributed and/or modified under the conditions of 
% the LaTeX Project Public License, either version 1.3c 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.3c or later is part of all distributions of LaTeX 
% version 2008/05/04 or later.
%
% This file has the LPPL maintenance status "author-maintained".
%
% \fi
%
% \iffalse
%<*driver>
\ProvidesFile{chextras.dtx}
\documentclass[a4paper]{ltxdoc}
\usepackage{hypdoc}
\usepackage{metalogo}
\pdfstringdefDisableCommands{\def\url{}}
\makeatletter
\let\PrintMacroName\HDorg@PrintMacroName
\let\PrintDescribeMacro\HDorg@PrintDescribeMacro
\makeatother
\setlength\parindent{0pt}
\CodelineIndex
\RecordChanges
\begin{document}
  \DocInput{chextras.dtx}
\end{document}
%</driver>
% \fi
%
% \CheckSum{844}
%
% \CharacterTable
%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%   Digits        \0\1\2\3\4\5\6\7\8\9
%   Exclamation   \!     Double quote  \"     Hash (number) \#
%   Dollar        \$     Percent       \%     Ampersand     \&
%   Acute accent  \'     Left paren    \(     Right paren   \)
%   Asterisk      \*     Plus          \+     Comma         \,
%   Minus         \-     Point         \.     Solidus       \/
%   Colon         \:     Semicolon     \;     Less than     \<
%   Equals        \=     Greater than  \>     Question mark \?
%   Commercial at \@     Left bracket  \[     Backslash     \\
%   Right bracket \]     Circumflex    \^     Underscore    \_
%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%   Right brace   \}     Tilde         \~}
%
% \changes{v1.0}{2010/10/10}{Initial version}
% \changes{v1.01}{2012/07/20}{LuaTeX compatiblity}
%
% \title{The \textsf{chextras} Package
% \thanks{This document corresponds to \textsf{chextras} v1.01, dated 2012/07/20.}}
% \author{Boris \textsc{Oriet}\\\url{http://boris.oriet.net}}
% \maketitle
% \bigskip\bigskip
% \tableofcontents
% \pagebreak
%
% \section{Introduction}
%
% The \textsf{chextras} package is a companion for the \textsf{chletter} document class and
% other classes. It is targeted at the Swiss typesetter.\bigskip
%
% It simplifies the preparation of documents and letters by loading and
% setting up font, linguistic and other common packages.\bigskip
%
% While it is linked to the \textsf{chletter} document class, it is not tied to it
% and may be used as a general purpose toolbox for casual writing.\bigskip
%
% This package is compatible with with \LaTeX, Lua\TeX\ and \XeTeX, trying to take in
% account their specifics and setting things up accordingly.\bigskip
%
% A bunch of options are provided to easily alter the behaviour of loaded
% packages. Additional options allow for disabling unnecessary features.
%
% \section{Usage}
%
% Ideally, the \textsf{chextras} package is loaded just after the document class.\medskip
%
% Please be aware that \textbf{sources have to be |utf8| (or |ascii7|) encoded}!
%
% \begin{verbatim}
% \documentclass{chletter}
% \usepackage[english]{chextras}
% \begin{document}
%  Hello World!
% \end{document}
% \end{verbatim}
%
% \subsection{Options}
%
% \subsubsection{Font options}
%
% Fonts and encodings are always loaded. The following options are cumulative.\medskip
%
% \DescribeMacro{nomath}
% This option disables the \textsf{Latin Modern} |T1| math fonts.\smallskip
%
% \DescribeMacro{lighttt}
% This option is to select the light version of \textsf{Latin Modern Mono} at document
% level.\smallskip
% 
% \DescribeMacro{variablett}
% This option sets the proportional variant of \textsf{Latin Modern Mono} at document
% level.\smallskip
%
% \DescribeMacro{oldstyle}
% This option activates the oldstyle figures at document level.
%
% \subsubsection{Linguistic options}
%
% \DescribeMacro{german}
% \DescribeMacro{french}
% \DescribeMacro{italian}
% \DescribeMacro{english}
% Selecting one of these options will trigger the execution of a linguistic package, either
% \textsf{babel} under \LaTeX\ and Lua\TeX, or \textsf{polyglossia} under \XeTeX. To have more
% than one language in the document, the appropriate commands supplied by the linguistic
% packages should be used.
%
% \subsubsection{Hyperlinks options}
%
% \DescribeMacro{black}
% \DescribeMacro{gray}
% \DescribeMacro{color}
% Choosing one of these options will prompt the loading of the \textsf{hyperref} package.
% The color will define how the links appear: black, gray or in the default
% \textsf{hyperref} colors. Please note that no box is drawn around the links, they are
% directly colored.
%
% \subsubsection{Disable options}
%
% The default settings provided by the \textsf{chextras} package should be universal enough
% for everyday use. However, special cases could require to disable some settings.\medskip 
%
% \DescribeMacro{stdshape}
% \LaTeX\ doesn't handle mixed shapes (|\emph{textsc{Hello World!}}|). \textsf{chextras}
% provides a shape merging mecanism which can be cancelled by this option.\medskip
%
% \DescribeMacro{stdspace}
% If loaded with the |french| option, the \textsf{chextras} package will alter the punctuation
% spacing set by the linguistic packages. This option resets the default spacing.\medskip
%
% \DescribeMacro{stdfield}
% When the \textsf{hyperref} package is loaded, the pdf author, title and subject fields are
% filled according to document values. This option prevents this (for privacy).\medskip
% 
% \DescribeMacro{stdparis}
% The \textsf{chextras} package sets |\parindent| and |\parskip| to respectively |18pt| and
% |9pt|. This option is to use the values defined at class level.\medskip
%
% \DescribeMacro{stddimen}
% Used with any class, \textsf{chextras} sets the dimensions of text to the values given by
% \textsf{chletter}. To prevent these changes, the |stddimen| option may be applied.\medskip
%
% \DescribeMacro{stdmgpar}
% The margin paragraph layout is set to the \textsf{chletter} class values, which are absolute
% rather than linked to the font size. This option allows to retain the defaults.\medskip
%
% \DescribeMacro{stdlabel}
% List labels are set by the standard classes as a function of the point size. Unless this
% option is set, labels are set to fixed values, related to |\parindent|.\medskip
%
% \DescribeMacro{stdlists}
% Lists are adjusted to a more compact layout. The vertical flow is better thanks to rubber
% lengths. This option reverts the lists to their class presets.\medskip
%
% \DescribeMacro{stditems}
% Labels are lightened by using endashes at every level. If a combinaison of dashes, bullets,
% asterisks and periods is prefered, this option reverts to these defaults.\medskip
%
% \DescribeMacro{stdskips}
% The package makes |\parskip| `stretchable', thus enabling page and column bottom
% balancing. This option cancels the alteration of |\parskip|.\medskip
%
% \DescribeMacro{stdnotes}
% The layout of the footnotes is deeply modified in an attempt to get something
% visually more pleasing. The standard footnotes are reset by this option.\medskip
%
% \DescribeMacro{stdrules}
% This package sets thinner rules than the \LaTeX\ kernel or the standard classes (|.25pt|
% instead of |.4pt|). This option returns the rules to the standard value.
%
% \subsection{Font selection}
% 
% The \textsf{chextras} package loads the \textsf{Latin Modern} fonts instead of the older
% \textsf{Computer Modern} fonts. Moreover, it always uses |utf8| as input encoding, hence
% requiring |utf8| (or |ascii7| which is a subset of |utf8|) encoded sources. At lower level,
% font mecanisms deeply depend on the engine (\LaTeX, Lua\TeX\ or \XeTeX) and we have to
% manage this situation with addtional font definition files. Finally, a little trick converts
% the \textsc{alt\,+\,space} character to a |\nobreakspace|, thus enabling correct formatting
% of text produced by common word processors.
%
% \subsubsection{Oldstyle numbers}
% 
% \DescribeMacro{\rmosfamily}
% \DescribeMacro{\sfosfamily}
% \DescribeMacro{\ttosfamily}
% \DescribeMacro{\textrmos}
% \DescribeMacro{\textsfos}
% \DescribeMacro{\textttos}
% These macros take advantage of features included in OpenType \textsf{Latin Modern} fonts.
% They don't require the presence of any external package, but rely on specific |.fd| files
% packed with \textsf{chextras}. With \LaTeX\ and Lua\TeX, |clm| virtual fonts are used;
% with \XeTeX, system fonts are called. |\rmosfamily|, |\sfosfamily| and |ttosfamily| are the
% respective oldstyle numbers counterparts of |\rmfamily|, |sffamily| and |ttfamily|. The
% commands |\textrmos|, |\textsfos| and |\textttos| are also defined.
% 
% \subsubsection{Slanted capitals}
%
% \DescribeMacro{\sishape}
% \DescribeMacro{\textsi}
% Slanted small capitals are available as a |\sishape| with the associated |\textsi| command.
% Example: |\textsi{Hello World!}|.
%
% \subsection{Additions}
%
% \subsubsection{Compatibility layer for \textsf{chletter}}
%
% \DescribeMacro{\conc}
% The code overhaul between |v1.0| and |v2.0| of the \textsf{chletter} class has led to some
% incompatibilities which are remedied here (for example the frequently used |\conc|
% macro is not implemented in the new version of \textsf{chletter}.
%
% \subsubsection{Markup commands}
%
% \DescribeMacro{\ccname}
% \DescribeMacro{\enclname}
% These values are localized according to Swiss habits. They are used by the generic letter
% classes (standard \textsf{letter} and \textsf{chletter} of course).\medskip
%
% \DescribeMacro{\authorname}
% \DescribeMacro{\titlename}
% \DescribeMacro{\datename}
% These are shortcuts for \LaTeX\ internals |\@author|, |\@title| and |\@date| (respectively
% set by |\author|, |\title| and |\date|). They are here to avoid an extraneous |\makeatletter|.
% Please note that |\jobname| is set by the kernel.
%
% \subsubsection{Formatting commands}
%
% \DescribeMacro{\up}
% \DescribeMacro{\bsc}
% \DescribeMacro{\no}
% \DescribeMacro{\ier}
% These convenient macros are sometimes defined by linguistic or other packages.
% |\up| is a shortcut for |\textsuperscript|. |\bsc| means `boxed small caps' and is a
% non breaking version of |\textsc|. |\no| is the formal abreviation of french ``num\'ero''. 
% |\ier| is the formal abbreviation of french ``premier''.\pagebreak
%
% \section{Compatibility}
%
% The \textsf{chextras} package acts as a wrapper for some \LaTeX\ characteristics and packages
% that are in constant evolution. It is therefore difficult to offer any warranty on the
% behaviour of the different package features within different \TeX\ environments.
%
% \subsection{With distributions}
%
% The \textsf{chextras} package is intended to be used with the full version of \TeX Live 2012.
% It may encounter trouble with earlier versions of \TeX Live or other distributions.
%
% \subsection{With engines}
%
% The \textsf{chextras} package is able to take advantage of \LaTeX\ (\textsf{pdftex v1.40}),
% Lua\TeX\ (\textsf{luatex v0.70}) and \XeTeX\ (\textsf{xetex v0.9997}).
%
% \subsection{With regular classes}
%
% There should be no problem using \textsf{chextras} with any reasonably generic class.
% It is intended to be used with \textsf{chletter}, but perfectly
% adapts to other standard classes.
%
% \subsection{With other packages}
%
% The \textsf{chextras} package at least requires \textsf{fixltx2e~v1.1}, \textsf{lmodern~v1.6}
% and \textsf{fontenc~v1.99}; respectively \textsf{inputenc v1.1} (\LaTeX), \textsf{luainputenc~v0.973}
% (Lua\TeX) or \textsf{xunicode~v0.95} (\XeTeX). For some additional features, \textsf{chextras}
% uses \textsf{babel~v3.8} or \textsf{polyglossia~v1.2.0} and \textsf{hyperref~v6.81}.
% These packages would load another bunch of related packages when called (please look at their
% respective documentation). Older or newer versions of these packages could break
% \textsf{chextras} at some point.\medskip
%
% \textsf{chextras} aims at avoiding packages overload. The minimum set of
% packages and font definitions is invoked by:
% |\usepackage[nomath]{chextras}|\medskip
%
% Please note that under \XeTeX, the \textsf{fontspec} package is not required nor loaded by
% the \textsf{chextras} package. This is a design decision which doesn't prevent the user from
% adding a |\usepackage{fontspec}| (or more generally a |\usepackage{xltxtra}|), preferably
% before the \textsf{chextras} call (in order to keep the |oldstyle| option relevant).\medskip
%
% There is no known `unintentional' macro clash. Please remember that some macros provided by
% the \textsf{chletter} class and the \textsf{babel} |frenchb| language are redefined and that
% some values (for example the document margins) are deliberately modified. A bunch of package
% options are present to cancel some unwanted alterations.
%
% \subsection{With text and font encodings}
%
% The \textsf{chextras} requires |utf8| or |ascii7| sources. There is no provision for any other
% encoding scheme. \textsf{Latin Modern v2.004} fonts with the appropriate |T1| (for \LaTeX\ and
% Lua\TeX) or |EU1| (for \XeTeX) encodings must be available. For oldstyle figures, the provided
% font definitions |t1lmros.fd|, |t1lmssos.fd|, |t1lmttos.fd|, |t1lmvttos.fd|; and |eu1lmros.fd|,
% |eu1lmssos.fd|, |eu1lmttos.fd|, |eu1lmvttos.fd|, are needed. Please note that the 
% \textsf{cfr-lm v1.3} package, while not called by \textsf{chextras}, is required under \LaTeX\
% and Lua\TeX\ because of the associated font definitions (|clm| virtual fonts, built upon |lm|
% fonts, are used in this case).
%
% \StopEventually
%
% \pagebreak
%
% \section{Implementation}
%
% The \textsf{chextras} code is mostly pure \LaTeX, with few \TeX\ primitives. It is
% however fairly compact. Its main parts are the selection and configuration of the input and
% font encodings (\textsf{inputenc} for \LaTeX, \textsf{luainputenc} for Lua\TeX\ or
% \textsf{xunicode} for \XeTeX, plus \textsf{fontenc} in any case), the linguistic packages (either
% \textsf{babel} or \textsf{polyglossia}), and finally the \textsf{hyperref} package. Another
% part of the code handles the document layout settings, taking in account some `disable'
% package options. The last part provides a few convenient commands.
%
% \subsection{Initial code}
%
%    \begin{macrocode}
%<*chextras.sty>
%    \end{macrocode}
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}[1996/06/01]
\ProvidesPackage{chextras}[2012/07/20 v1.01 Swiss companion package]
%    \end{macrocode}
%
% \subsubsection{Declaring options}
%
% The following four options are font related and cumulative.
%
% \begin{macro}{nomath}
% The \textsf{lmodern} package takes care of this flag.
%
%    \begin{macrocode}
\DeclareOption{nomath}{\PassOptionsToPackage{nomath}{lmodern}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{lighttt}
% Both the \textsf{lmodern} package and \textsf{chextras} font definitions take care of
% this flag.
%
%    \begin{macrocode}
\DeclareOption{lighttt}{\PassOptionsToPackage{lighttt}{lmodern}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{variablett}
% Both the \textsf{lmodern} package and \textsf{chextras} font definitions take care of
% this flag.
%
%    \begin{macrocode}
\DeclareOption{variablett}{\PassOptionsToPackage{variablett}{lmodern}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{oldstyle}
% This option involves additional font definitions and is treated at \textsf{chextras} level.
%
%    \begin{macrocode}
\DeclareOption{oldstyle}{\old@styletrue}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{german}
% \begin{macro}{french}
% \begin{macro}{italian}
% \begin{macro}{english}
% The language options are mutually exclusive. If none of theses options is given, then the
% linguistic packages won't be loaded. To use more than one language in the document, one
% should use the \textsf{babel} or \textsf{polyglossia} dedicated systems (either pass
% languages as global options or |\setotherlanguages|).
%
%    \begin{macrocode}
\DeclareOption{german}{\def\load@lang{german}}
\DeclareOption{french}{\def\load@lang{french}}
\DeclareOption{italian}{\def\load@lang{italian}}
\DeclareOption{english}{\def\load@lang{english}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{black}
% \begin{macro}{gray}
% \begin{macro}{color}
% The color options are mutually exclusive. If none of theses options is given, then the
% \textsf{hyperref} package won't be loaded (the `argument carrier' is also a flag). Please
% note that the \textsf{graphicx} and \textsf{color} packages will be loaded as a side effect.
%
%    \begin{macrocode}
\DeclareOption{black}
{\def\load@href%
 {linkcolor=black,filecolor=black,urlcolor=black}}
\DeclareOption{gray}
{\def\load@href%
 {linkcolor=[gray]{0.5},filecolor=[gray]{0.5},urlcolor=[gray]{0.5}}}
\DeclareOption{color}
{\def\load@href%
 {}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% These options simply alter the value of an associated boolean for later retrieval.
%    \begin{macrocode}
\DeclareOption{stdshape}{\std@shapetrue}
\DeclareOption{stdspace}{\std@spacetrue}
\DeclareOption{stdfield}{\std@fieldtrue}
\DeclareOption{stdparis}{\std@paristrue}
\DeclareOption{stddimen}{\std@dimentrue}
\DeclareOption{stdskips}{\std@skipstrue}
\DeclareOption{stdmgpar}{\std@mgpartrue}
\DeclareOption{stdlists}{\std@liststrue}
\DeclareOption{stdlabel}{\std@labeltrue}
\DeclareOption{stditems}{\std@itemstrue}
\DeclareOption{stdnotes}{\std@notestrue}
\DeclareOption{stdrules}{\std@rulestrue}
%    \end{macrocode}
%    \begin{macrocode}
\newif\ifold@style
%    \end{macrocode}
%    \begin{macrocode}
\newif\ifstd@shape
\newif\ifstd@space
\newif\ifstd@field
\newif\ifstd@paris
\newif\ifstd@dimen
\newif\ifstd@skips
\newif\ifstd@mgpar
\newif\ifstd@lists
\newif\ifstd@label
\newif\ifstd@items
\newif\ifstd@notes
\newif\ifstd@rules
%    \end{macrocode}
%
% \subsubsection{Executing options}
%
%    \begin{macrocode}
\ProcessOptions\relax
%    \end{macrocode}
%
% \subsection{Package loading}
%
% \subsubsection{Input and font encoding packages}
%
% Here we test for the engine. In \LaTeX\ and Lua\TeX\ cases, |T1| encoding is set for later
% call of \textsf{fontenc}, then the relevant \textsf{inputenc} (with |utf8|) is loaded. The
% last line trick converts the |0x00a0| character (\textsc{alt\,+\,space}) to something like
% |\nobreakspace|.
%
%    \begin{macrocode}
\expandafter\ifx\csname XeTeXrevision\endcsname\relax
 \def\UTFencname{T1}
 \expandafter\ifx\csname directlua\endcsname\relax
  \RequirePackage[utf8]{inputenc}
 \else
  \RequirePackage[utf8]{luainputenc}
 \fi
 \DeclareUnicodeCharacter{00A0}{\nobreak\space}
%    \end{macrocode}
%
% In the \XeTeX\ case, |EU1| encoding is set for later call of \textsf{fontenc}.
% \textsf{fontspec} is bypassed by design decision. The last line is the non \textsf{inputenc}
% version of the |0x00a0| trick.
%
%    \begin{macrocode}
\else
 \def\UTFencname{EU1}
 \RequirePackage{xunicode}
 \catcode`^^a0=\active\def^^a0{\nobreak\space}
\fi
%    \end{macrocode}
%
% Finally the required packages are loaded.
%
%    \begin{macrocode}
\RequirePackage{fixltx2e}
\RequirePackage[\UTFencname]{fontenc}
\RequirePackage{lmodern}
%    \end{macrocode}
%
% \begin{macro}{\rmosfamily}
% \begin{macro}{\sfosfamily}
% \begin{macro}{\ttosfamily}
% \begin{macro}{\textrmos}
% \begin{macro}{\textsfos}
% \begin{macro}{\textttos}
% We previously have set the \textsf{Latin Modern} fonts as the document's default by loading
% the \textsf{lmodern} package. The font selection scheme for oldstyle figures is initialized
% according to the font definitions provided with this package. Under \XeTeX\ things are
% straightforward: we just apply |otf| features; under \LaTeX\ or Lua\TeX\ we relie on the
% |clm| virtual fonts from \textsf{cfr-lm} package (see the |.fd| files below for a deeper
% sight into those things). The |variablett| option is cryptically treated here!
%
%    \begin{macrocode}
\DeclareRobustCommand\rmosfamily{\fontfamily\rmosdefault\selectfont}
\DeclareRobustCommand\sfosfamily{\fontfamily\sfosdefault\selectfont}
\DeclareRobustCommand\ttosfamily{\fontfamily\ttosdefault\selectfont}
\DeclareTextFontCommand{\textrmos}{\rmosfamily}
\DeclareTextFontCommand{\textsfos}{\sfosfamily}
\DeclareTextFontCommand{\textttos}{\ttosfamily}
\edef\rmosdefault{\rmdefault os}
\edef\sfosdefault{\sfdefault os}
\edef\ttosdefault{\ttdefault os}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{oldstyle}
% Remember that |\rmdefault|, |\sfdefault| and |\ttdefault| are the NFSS defaults.
%
%    \begin{macrocode}
\ifold@style
 \renewcommand\rmdefault{\rmosdefault}
 \renewcommand\sfdefault{\sfosdefault}
 \renewcommand\ttdefault{\ttosdefault}
\fi
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{stdshape}
% \begin{macro}{\sishape}
% \begin{macro}{\textsi}
% This code is borrowed from \textsf{fontspec v1.18}. Its purpose is to merge
% some font shapes in order to support constructs like |\textsc{\emph{Hello World!}}|.
% The macros |\sishape| and |\textsi| are defined for direct output of slanted small caps.
%
%    \begin{macrocode}
\ifstd@shape\else
 \def\sidefault{\scdefault\sldefault}
 \DeclareRobustCommand{\sishape}
 {\not@math@alphabet\sishape\relax\fontshape\sidefault\selectfont}
 \DeclareTextFontCommand{\textsi}{\sishape}
 \newcommand*{\ch@mrg}[3]{\edef\@tempa{#1}\edef\@tempb{#2}%
  \ifx\f@shape\@tempb
   \ifcsname\f@encoding/\f@family/\f@series/#3\endcsname
    \edef\@tempa{#3}\fi\fi\fontshape{\@tempa}\selectfont}
 \DeclareRobustCommand{\itshape}
 {\not@math@alphabet\itshape\mathit
  \ch@mrg\itdefault\scdefault\sidefault}
 \DeclareRobustCommand{\slshape}
 {\not@math@alphabet\slshape\relax
  \ch@mrg\sldefault\scdefault\sidefault}
 \DeclareRobustCommand{\scshape}
 {\not@math@alphabet\scshape\relax
  \ch@mrg\scdefault\itdefault\sidefault}
 \DeclareRobustCommand{\upshape}
 {\not@math@alphabet\upshape\relax
  \ch@mrg\updefault\sidefault\scdefault}
\fi
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \subsubsection{Linguistic packages}
%
% If no linguistic option was given, we do nothing.
%
%    \begin{macrocode}
\expandafter\ifx\csname load@lang\endcsname\relax
%    \end{macrocode}
%
% \begin{macro}{stdspace}
% Otherwise we test for \XeTeX\ and load \textsf{babel} if false, with the selected language
% as package option. Please note that to load other languages, the user will have to relie
% on global options. Finally, we test for the |frenchb.ldf| language and set up some of its
% options according to the boolean |std@space|.
%
%    \begin{macrocode}
\else
 \expandafter\ifx\csname XeTeXrevision\endcsname\relax
  \RequirePackage[\load@lang]{babel}
  \expandafter\ifx\csname frenchbsetup\endcsname\relax
  \else
   \frenchbsetup{og=«,fg=»,StandardLayout=true,FrenchSuperscripts=false}
   \ifstd@space\else\frenchbsetup{ThinColonSpace=true}\fi
  \fi
%    \end{macrocode}
%
% In the \XeTeX\ case, we load \textsf{polyglossia} with a dirty trick to prevent it from
% calling \textsf{fontspec}. The default language is set with the dedicated command (the user
% can load alternate languages with |\setotherlanguages|). Finally, we dispense a heavy patch
% to the \textsf{polyglossia} |gloss-french.ldf|, taking in account |std@space|.
%
% \changes{v1.01}{2012/07/20}{ExplSyntaxOff trick}
%
%    \begin{macrocode}
 \else
  \RequirePackage{etoolbox}
  \RequirePackage{xkeyval}
  \RequirePackage{makecmds}
  \let\old@Require\RequirePackage
  \let\old@ExplsyntaxOn\ExplSyntaxOn\let\old@ExplsyntaxOff\ExplSyntaxOff
  \def\new@Require#1[#2]{}\def\new@ExplSyntax{}
  \let\RequirePackage\new@Require
  \let\ExplSyntaxOn\new@ExplSyntax\let\ExplSyntaxOff\new@ExplSyntax
  \old@Require[nolocalmarks]{polyglossia}[2010/07/27]
  \let\RequirePackage\old@Require
  \let\ExplSyntaxOn\old@ExplSyntaxOn\let\ExplSyntaxOff\old@ExplSyntaxOff
  \setdefaultlanguage{\load@lang}
  \def\ch@thn{\nobreak\hskip.166667em plus.083333em minus\z@\relax}
  \def\ch@gll{\nobreak\hskip.25em plus\z@ minus.083333em\relax}
  \ifstd@space\def\ch@thk{\nobreak\space\relax}
  \else\let\ch@thk\ch@thn\fi
  \addto\french@punctuation
  {\XeTeXinterchartoks\z@\french@punctthin={\ch@thn}
   \XeTeXinterchartoks\z@\french@punctthick={\ch@thk}
   \XeTeXinterchartoks255\french@punctthin={\xpg@unskip\ch@thn}
   \XeTeXinterchartoks255\french@punctthick={\xpg@unskip\ch@thk}
   \XeTeXinterchartoks\french@punctguillstart\z@={\ch@gll}
   \XeTeXinterchartoks\z@\french@punctguillend={\ch@gll}
   \XeTeXinterchartoks\french@punctguillstart255={\ch@gll\xpg@nospace}
   \XeTeXinterchartoks255\french@punctguillend={\xpg@unskip\ch@gll}
   \XeTeXinterchartoks\french@punctguillend\french@punctthin={\ch@thn}
   \XeTeXinterchartoks\french@punctguillend\french@punctthick={\ch@thk}
   \XeTeXinterchartoks\french@punctthin\french@punctguillend={\ch@gll}
   \XeTeXinterchartoks\french@punctthick\french@punctguillend={\ch@gll}}
\fi
%    \end{macrocode} 
% \end{macro}
%
% \begin{macro}{\ccname}
% \begin{macro}{\enclname}
% The following lines are common to the two linguistic systems: |\addto| is implemented in
% \textsf{polyglossia} as a shortcut for the \textsf{etoolbox} |\gappto| macro.
%
%    \begin{macrocode} 
 \addto\captionsgerman
 {\def\ccname{\emph{Vert.}}\def\enclname{\emph{Anl.}}}
 \addto\captionsfrench
 {\def\ccname{\emph{Cop.}}\def\enclname{\emph{Ann.}}}
 \addto\captionsitalian
 {\def\ccname{\emph{e\,p.c.}}\def\enclname{\emph{All.}}}
 \addto\captionsenglish
 {\def\ccname{\emph{c.c.}}\def\enclname{\emph{encl.}}}
\fi
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \subsubsection{The \textsf{hyperref} package}
%
% The package is only loaded if a color option is given.
%
%    \begin{macrocode}
\expandafter\ifx\csname load@href\endcsname\relax
%    \end{macrocode}
%
% \begin{macro}{stdfield}
% Unless the |\std@field| boolean is set, the main pdf strings are filled with |\@title|,
% |\@author| and |\jobname|. Unwanted garbage in these strings is avoided.
%
%    \begin{macrocode}
\else
 \ifstd@field\def\opts@href{colorlinks,unicode}\else
  \def\opts@href{colorlinks,unicode,pdfusetitle,pdfsubject=\jobname}
 \fi
 \RequirePackage[\opts@href,\load@href]{hyperref}[2010/09/17]
 \pdfstringdefDisableCommands{\def\up{}}
 \pdfstringdefDisableCommands{\def\no{}}
 \pdfstringdefDisableCommands{\def\bsc{}}
 \pdfstringdefDisableCommands{\def\ier{}}
 \pdfstringdefDisableCommands{\def\kern{}}
\fi
%    \end{macrocode}
% \end{macro}
%
% \subsection{\LaTeX\ configuration}
%
% \subsubsection{Glue code for \textsf{chletter}}
%
% \begin{macro}{\conc}
% The following code is intended for users of the document class \textsf{chletter v2.0} who
% wish to  compile older letters. See \textsf{chletter} documentation for more information.
%    \begin{macrocode}
\@ifclassloaded{chletter}
{\@ifclasslater{chletter}{2010/01/01}
 {\newcommand\conc[2][l]%
  {\noindent\if#1l\hskip-\oddsidemargin\fi{\bfseries\object{#2}}}
  \let\letterindent\parindent\let\letterskip\parskip
  \let\fromheight\titletopheight
  \let\toheight\titlemidheight
  \let\stockheight\titlebotheight}{}}
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{Paragraphing}
%
% \begin{macro}{stdparis}
% Unless the |std@paris| flag is true, these values are adjusted to `continental'
% preferences. The same values are used in \textsf{chletter}.
%
%    \begin{macrocode}
{\ifstd@paris\else
  \parindent18\p@\parskip9\p@
 \fi
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{Dimensions of text}
%
% \begin{macro}{stddimen}
% The dimensions and margins of the \textsf{chletter} class are not modified.
% For other classes they are set here, unless the |std@dimen| flag is true.
%
%    \begin{macrocode}
 \ifstd@dimen\else
  \topmargin\z@\headsep24\p@ 
  \footskip36\p@\footnotesep12\p@\skip\footins12\p@
  \textwidth\paperwidth\advance\textwidth-11895300sp
  \textheight\paperheight\advance\textheight-14093310sp
  \oddsidemargin36\p@\evensidemargin\z@
 \fi
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{Margin paragraphs}
%
% \begin{macro}{stdmgpar}
% The above defined note mark relies on |\marginparsep|, which is adjusted here
% along with other margin paragraph settings.
%
%    \begin{macrocode}
 \ifstd@mgpar\else
  \marginparwidth48\p@\marginparsep6\p@\marginparpush6\p@
 \fi
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{Lists}
%
% \begin{macro}{stdlabel}
% List label width, margin and separation are set by the standard classes as functions of
% the point size. We make these values absolute here (if |std@label| is false).
%
%    \begin{macrocode}
 \ifstd@label\else
  \labelsep6\p@\labelwidth12\p@\leftmargin18\p@
 \fi}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{stdlists}
% Default \LaTeX\ lists are well known to be space eating. A more compact
% layout is provided here, until the |std@lists| flag is set.
%
%    \begin{macrocode}
\ifstd@lists\else
 \topsep\z@ plus1\p@\partopsep\smallskipamount
 \itemsep\z@ plus1\p@\parsep\smallskipamount
\fi
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{stditems}
% Default list items (as set with |std@items| true) are respectively a bullet, an endash,
% an asterisk and a period. We propose a lighter layout with endashes everywhere.
%
%    \begin{macrocode}
\ifstd@items\else
 \def\@listI{}\let\@listi\@listI\let\@listii\@listi
 \let\@listiii\@listi\let\@listiv\@listi
 \def\labelitemi{\textbf{\textendash}}\let\labelitemii\labelitemi
 \let\labelitemiii\labelitemi\let\labelitemiv\labelitemi
\fi
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{Vertical flow}
%
% \begin{macro}{stdskips}
% Adding some stretch to |\parskip| enables easier vertical balancing of text
% accross pages and columns. The absolute values are conserved.
%
%    \begin{macrocode}
\ifstd@skips\else
 \advance\parskip by\z@ plus3\p@\ifdim\parskip>3\p@ minus3\p@\fi
 \advance\skip\footins by\z@ plus6\p@
\fi
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{Notes}
%
% \begin{macro}{stdnotes}
% Footnotes are redefined unless the |std@notes| flag is set. The marker is
% put in the margin at a |\marginparsep| distance of the actual note.
%
%    \begin{macrocode}
\ifstd@notes\else
 \let\std@footnotemark\@footnotemark
 \def\alt@footnotemark{\unskip\thinspace\std@footnotemark}
 \let\@footnotemark\alt@footnotemark
 \long\def\@makefntext#1{\settowidth\@tempdima{.\kern\marginparsep}
 \parindent\z@
 \advance\parindent-\@tempdima
 \rule\z@\footnotesep
 \llap{\@thefnmark}.\kern\marginparsep#1}
\fi
%    \end{macrocode}
% \end{macro}
%
% \subsubsection{Rules}
%
% \begin{macro}{stdrules}
% All \LaTeX\ rules are redefined to be thinner than default (|.25pt| instead of |.4pt|).
% The |\foldmark| command is also tuned (see \textsf{chletter} class for more information).
%
%    \begin{macrocode}
\ifstd@rules\else
 \arrayrulewidth.25\p@
 \fboxrule.25\p@
 \def\underbar#1{\vtop{\hbox{#1}\hrule\@height.25\p@\kern-.25\p@}}
 \def\footnoterule%
 {\kern-3\p@\hrule\@width.4\columnwidth\@height.25\p@\kern2.75\p@}
\fi
%    \end{macrocode}
% \end{macro}
%
% \subsection{New commands}
%
% \subsubsection{Markup}
%
% \begin{macro}{\titlename}
% \begin{macro}{\authorname}
% \begin{macro}{\datename}
% These shortcuts are here to avoid unnecessary |\makeatletter| when retrieving the values set
% by |\author|, |\title| and |\date|. Please note that an additionnal value |\jobname| is
% available at kernel level.
%    \begin{macrocode}
\def\titlename{\@title}
\def\authorname{\@author}
\def\datename{\@date}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \subsubsection{Formatting}
%
% \begin{macro}{\up}
% \begin{macro}{\no}
% \begin{macro}{\bsc}
% \begin{macro}{\ier}
% These commands are present in the \textsf{babel} package \textsf{frenchb}. The
% \textsf{polyglossia} package doesn't provide comparable commands, so they are defined here.
% The \textsf{babel frenchb} definitions are overridden for the sake of straightforwardness
% and consistency within documents typeset in multiple languages.
%
%    \begin{macrocode}
\let\up\textsuperscript
\def\no{n\up{o}\,}
\def\bsc#1{\hyphenpenalty\@M\textsc{#1}}
\def\ier{\up{er}}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
%    \begin{macrocode}
%</chextras.sty>
%    \end{macrocode}
%
% \pagebreak
%
% \section{Font definitions}
%
% Appart from the \textsf{chextras} package itself, eight files are provided to enable oldstyle
% numbers in |T1| encoded \textsf{Latin Modern} fonts (for \LaTeX\ and Lua\TeX).
%
% \setcounter{CodelineNo}{0}
%
%    \begin{macrocode}
%<*t1lmros.fd>
%    \end{macrocode}
%    \begin{macrocode}
\ProvidesFile{t1lmros.fd}[2012/07/20 v1.01 Font defs for Latin Modern]
\DeclareFontFamily{T1}{lmros}{}
\DeclareFontShape{T1}{lmros}{m}{n}
{<-5.5>    clmrj8t5
 <5.5-6.5> clmrj8t6
 <6.5-7.5> clmrj8t7
 <7.5-8.5> clmrj8t8
 <8.5-9.5> clmrj8t9
 <9.5-11 > clmrj8t10
 <11-15>   clmrj8t12
 <15->     clmrj8t17}{}
\DeclareFontShape{T1}{lmros}{m}{sl}
{<-8.5>    clmrjo8t8
 <8.5-9.5> clmrjo8t9
 <9.5-11>  clmrjo8t10
 <11-15>   clmrjo8t12
 <15->     clmrjo8t17}{}
\DeclareFontShape{T1}{lmros}{m}{it}
{<-7.5>    clmrji8t7
 <7.5-8.5> clmrji8t8
 <8.5-9.5> clmrji8t9
 <9.5-11>  clmrji8t10
 <11->     clmrji8t12}{}
\DeclareFontShape{T1}{lmros}{m}{sc}
{<->       clmcscj8t10}{}
\DeclareFontShape{T1}{lmros}{m}{ui}
{<->       clmuj8t10}{}
\DeclareFontShape{T1}{lmros}{m}{scsl}
{<->       clmcscjo8t10}{}
\DeclareFontShape{T1}{lmros}{b}{n}
{<->       clmbj8t10}{}
\DeclareFontShape{T1}{lmros}{b}{sl}
{<->       clmbjo8t10}{}
\DeclareFontShape{T1}{lmros}{bx}{n}
{<-5.5>    clmbxj8t5
 <5.5-6.5> clmbxj8t6
 <6.5-7.5> clmbxj8t7
 <7.5-8.5> clmbxj8t8
 <8.5-9.5> clmbxj8t9
 <9.5-11>  clmbxj8t10
 <11->     clmbxj8t12}{}
\DeclareFontShape{T1}{lmros}{bx}{it}
{<->       clmbxji8t10}{}
\DeclareFontShape{T1}{lmros}{bx}{sl}
{<->       clmbxjo8t10}{}
\DeclareFontShape{T1}{lmros}{b}{it}
{<-> sub  * lmros/b/sl}{}
%    \end{macrocode}
%    \begin{macrocode}
%</t1lmros.fd>
%    \end{macrocode}
%
% \pagebreak\setcounter{CodelineNo}{0}
%
%    \begin{macrocode}
%<*t1lmssos.fd>
%    \end{macrocode}
%    \begin{macrocode}
\ProvidesFile{t1lmssos.fd}[2012/07/20 v1.01 Font defs for Latin Modern]
\DeclareFontFamily{T1}{lmssos}{}
\DeclareFontShape{T1}{lmssos}{m}{n}
{<-8.5>    clmssj8t8
 <8.5-9.5> clmssj8t9
 <9.5-11>  clmssj8t10
 <11-15.5> clmssj8t12
 <15.5->   clmssj8t17}{}
\DeclareFontShape{T1}{lmssos}{m}{it}
{<-> ssub * lmssos/m/sl}{}
\DeclareFontShape{T1}{lmssos}{m}{sl}
{<-8.5>    clmssjo8t8
 <8.5-9.5> clmssjo8t9
 <9.5-11>  clmssjo8t10
 <11-15.5> clmssjo8t12
 <15.5->   clmssjo8t17}{}
\DeclareFontShape{T1}{lmssos}{m}{sc}
{<-> sub  * lmros/m/sc}{}
\DeclareFontShape{T1}{lmssos}{b}{n}
{<-> ssub * lmssos/bx/n}{}
\DeclareFontShape{T1}{lmssos}{b}{sl}
{<-> ssub * lmssos/bx/sl}{}
\DeclareFontShape{T1}{lmssos}{b}{it}
{<-> ssub * lmssos/bx/it}{}
\DeclareFontShape{T1}{lmssos}{sbc}{n}
{<->       clmssdcj8t10}{}
\DeclareFontShape{T1}{lmssos}{sbc}{sl}
{<->       clmssdcjo8t10}{}
\DeclareFontShape{T1}{lmssos}{sbc}{it}
{<-> ssub * lmssos/sbc/sl}{}
\DeclareFontShape{T1}{lmssos}{bx}{n}
{<->       clmssbxj8t10}{}
\DeclareFontShape{T1}{lmssos}{bx}{sl}
{<->       clmssbjo8t10}{}
\DeclareFontShape{T1}{lmssos}{bx}{it}
{<-> ssub * lmssos/bx/sl}{}
%    \end{macrocode}
%    \begin{macrocode}
%</t1lmssos.fd>
%    \end{macrocode}
%
% \bigskip\setcounter{CodelineNo}{0}
%
%    \begin{macrocode}
%<*t1lmttos.fd>
%    \end{macrocode}
%    \begin{macrocode}
\ProvidesFile{t1lmttos.fd}[2012/07/20 v1.01 Font defs for Latin Modern]
\DeclareFontFamily{T1}{lmttos}{\hyphenchar\font\m@ne}
\ifx\lmtt@use@light@as@normal\@empty
\DeclareFontShape{T1}{lmttos}{sb}{n}
{<-8.5>     clmttj8t8
 <8.5-9.5>  clmttj8t9
 <9.5-11>   clmttj8t10
 <11->      clmttj8t12}{}
\DeclareFontShape{T1}{lmttos}{sb}{it}
{<->       clmttij8t10}{}
\DeclareFontShape{T1}{lmttos}{sb}{sl}
{<->       clmttjo8t10}{}
\DeclareFontShape{T1}{lmttos}{sb}{sc}
{<->       clmtcscj8t10}{}
\DeclareFontShape{T1}{lmttos}{sb}{scsl}
{<->       clmtcsjo8t10}{}
\DeclareFontShape{T1}{lmttos}{m}{n}
{<->       clmtlj8t10}{}
\DeclareFontShape{T1}{lmttos}{m}{it}
{<-> sub  * lmttos/l/sl}{}
\DeclareFontShape{T1}{lmttos}{m}{sl}
{<->       clmtljo8t10}{}
\DeclareFontShape{T1}{lmttos}{c}{n}
{<->       clmtlcj8t10}{}
\DeclareFontShape{T1}{lmttos}{c}{it}
{<-> sub  * lmttos/lc/sl}{}
\DeclareFontShape{T1}{lmttos}{c}{sl}
{<->       clmtlcjo8t10}{}\else
\DeclareFontShape{T1}{lmttos}{m}{n}
{<-8.5>     clmttj8t8
 <8.5-9.5>  clmttj8t9
 <9.5-11>   clmttj8t10
 <11->      clmttj8t12}{}
\DeclareFontShape{T1}{lmttos}{m}{it}
{<->       clmttij8t10}{}
\DeclareFontShape{T1}{lmttos}{m}{sl}
{<->       clmttjo8t10}{}
\DeclareFontShape{T1}{lmttos}{m}{sc}
{<->       clmtcscj8t10}{}
\DeclareFontShape{T1}{lmttos}{m}{scsl}
{<->       clmtcsjo8t10}{}
\DeclareFontShape{T1}{lmttos}{l}{n}
{<->       clmtlj8t10}{}
\DeclareFontShape{T1}{lmttos}{l}{it}
{<-> sub  * lmttos/l/sl}{}
\DeclareFontShape{T1}{lmttos}{l}{sl}
{<->       clmtljo8t10}{}
\DeclareFontShape{T1}{lmttos}{lc}{n}
{<->       clmtlcj8t10}{}
\DeclareFontShape{T1}{lmttos}{lc}{it}
{<-> sub  * lmttos/lc/sl}{}
\DeclareFontShape{T1}{lmttos}{lc}{sl}
{<->       clmtlcjo8t10}{}\fi
\DeclareFontShape{T1}{lmttos}{b}{n}
{<->       clmtkj8t10}{}
\DeclareFontShape{T1}{lmttos}{b}{it}
{<-> sub  * lmttos/b/sl}{}
\DeclareFontShape{T1}{lmttos}{b}{sl}
{<->       clmtkjo8t10}{}
\DeclareFontShape{T1}{lmttos}{bx}{it}
{<-> sub  * lmttos/b/sl}{}
\DeclareFontShape{T1}{lmttos}{bx}{n}
{<-> ssub * lmttos/b/n}{}
\DeclareFontShape{T1}{lmttos}{bx}{sl}
{<-> ssub * lmttos/b/sl}{}
%    \end{macrocode}
%    \begin{macrocode}
%</t1lmttos.fd>
%    \end{macrocode}
%
% \pagebreak\setcounter{CodelineNo}{0}
%
%    \begin{macrocode}
%<*t1lmvttos.fd>
%    \end{macrocode}
%    \begin{macrocode}
\ProvidesFile{t1lmvttos.fd}[2012/07/20 v1.01 Font defs for Latin Modern]
\DeclareFontFamily{T1}{lmvttos}{}
\ifx\lmtt@use@light@as@normal\@empty
\DeclareFontShape{T1}{lmvttos}{sb}{n}
{<->        clmvttj8t10}{}
\DeclareFontShape{T1}{lmvttos}{sb}{it}
{<->        clmvttjo8t10}{}
\DeclareFontShape{T1}{lmvttos}{sb}{sl}
{<-> sub  * lmvttos/sb/it}{}
\DeclareFontShape{T1}{lmvttos}{m}{n}
{<->        clmvtlj8t10}{}
\DeclareFontShape{T1}{lmvttos}{m}{it}
{<->        clmvtljo8t10}{}
\DeclareFontShape{T1}{lmvttos}{m}{sl}
{<-> sub  * lmvttos/m/it}{}\else
\DeclareFontShape{T1}{lmvttos}{m}{n}
{<->        clmvttj8t10}{}
\DeclareFontShape{T1}{lmvttos}{m}{it}
{<->        clmvttjo8t10}{}
\DeclareFontShape{T1}{lmvttos}{m}{sl}
{<-> sub  * lmvttos/m/it}{}
\DeclareFontShape{T1}{lmvttos}{l}{n}
{<->        clmvtlj8t10}{}
\DeclareFontShape{T1}{lmvttos}{l}{it}
{<->        clmvtljo8t10}{}
\DeclareFontShape{T1}{lmvttos}{l}{sl}
{<-> sub  * lmvttos/l/it}{}\fi
\DeclareFontShape{T1}{lmvttos}{bx}{n}
{<->        clmvtkj8t10}{}
\DeclareFontShape{T1}{lmvttos}{bx}{it}
{<->        clmvtkjo8t10}{}
\DeclareFontShape{T1}{lmvttos}{bx}{sl}
{<-> sub  * lmvttos/b/it}{}
\DeclareFontShape{T1}{lmvttos}{b}{n}
{<-> sub  * lmvttos/bx/n}{}
\DeclareFontShape{T1}{lmvttos}{b}{sl}
{<-> ssub * lmvttos/bx/it}{}
\DeclareFontShape{T1}{lmvttos}{b}{it}
{<-> ssub * lmvttos/bx/it}{}
%    \end{macrocode}
%    \begin{macrocode}
%</t1lmvttos.fd>
%    \end{macrocode}
%
% \pagebreak\setcounter{CodelineNo}{0}
%
%    \begin{macrocode}
%<*eu1lmros.fd>
%    \end{macrocode}
%    \begin{macrocode}
\ProvidesFile{eu1lmros.fd}[2012/07/20 v1.01 Font defs for Latin Modern]
\DeclareFontFamily{EU1}{lmros}{}
\DeclareFontShape{EU1}{lmros}{m}{n}
{<-5.5>    "[lmroman5-regular]:+onum,+tnum,mapping=tex-text"
 <5.5-6.5> "[lmroman6-regular]:+onum,+tnum,mapping=tex-text"
 <6.5-7.5> "[lmroman7-regular]:+onum,+tnum,mapping=tex-text"
 <7.5-8.5> "[lmroman8-regular]:+onum,+tnum,mapping=tex-text"
 <8.5-9.5> "[lmroman9-regular]:+onum,+tnum,mapping=tex-text"
 <9.5-11 > "[lmroman10-regular]:+onum,+tnum,mapping=tex-text"
 <11-15>   "[lmroman12-regular]:+onum,+tnum,mapping=tex-text"
 <15->     "[lmroman17-regular]:+onum,+tnum,mapping=tex-text"}{}
\DeclareFontShape{EU1}{lmros}{m}{sl}
{<-8.5>    "[lmromanslant8-regular]:+onum,+tnum,mapping=tex-text"
 <8.5-9.5> "[lmromanslant9-regular]:+onum,+tnum,mapping=tex-text"
 <9.5-11>  "[lmromanslant10-regular]:+onum,+tnum,mapping=tex-text"
 <11-15>   "[lmromanslant12-regular]:+onum,+tnum,mapping=tex-text"
 <15->     "[lmromanslant17-regular]:+onum,+tnum,mapping=tex-text"}{}
\DeclareFontShape{EU1}{lmros}{m}{it}
{<-7.5>    "[lmroman7-italic]:+onum,+tnum,mapping=tex-text"
 <7.5-8.5> "[lmroman8-italic]:+onum,+tnum,mapping=tex-text"
 <8.5-9.5> "[lmroman9-italic]:+onum,+tnum,mapping=tex-text"
 <9.5-11>  "[lmroman10-italic]:+onum,+tnum,mapping=tex-text"
 <11->     "[lmroman12-italic]:+onum,+tnum,mapping=tex-text"}{}
\DeclareFontShape{EU1}{lmros}{m}{sc}
{<->       "[lmromancaps10-regular]:+onum,+tnum,mapping=tex-text"}{}
\DeclareFontShape{EU1}{lmros}{m}{ui}
{<->       "[lmromanunsl10-regular]:+onum,+tnum,mapping=tex-text"}{}
\DeclareFontShape{EU1}{lmros}{m}{scsl}
{<->       "[lmromancaps10-oblique]:+onum,+tnum,mapping=tex-text"}{}
\DeclareFontShape{EU1}{lmros}{b}{n}
{<->       "[lmromandemi10-regular]:+onum,+tnum,mapping=tex-text"}{}
\DeclareFontShape{EU1}{lmros}{b}{sl}
{<->       "[lmromandemi10-oblique]:+onum,+tnum,mapping=tex-text"}{}
\DeclareFontShape{EU1}{lmros}{bx}{n}
{<-5.5>    "[lmroman5-bold]:+onum,+tnum,mapping=tex-text"
 <5.5-6.5> "[lmroman6-bold]:+onum,+tnum,mapping=tex-text"
 <6.5-7.5> "[lmroman7-bold]:+onum,+tnum,mapping=tex-text"
 <7.5-8.5> "[lmroman8-bold]:+onum,+tnum,mapping=tex-text"
 <8.5-9.5> "[lmroman9-bold]:+onum,+tnum,mapping=tex-text"
 <9.5-11>  "[lmroman10-bold]:+onum,+tnum,mapping=tex-text"
 <11->     "[lmroman12-bold]:+onum,+tnum,mapping=tex-text"}{}
\DeclareFontShape{EU1}{lmros}{bx}{it}
{<->       "[lmroman10-bolditalic]:+onum,+tnum,mapping=tex-text"}{}
\DeclareFontShape{EU1}{lmros}{bx}{sl}
{<->       "[lmromanslant10-bold]:+onum,+tnum,mapping=tex-text"}{}
\DeclareFontShape{EU1}{lmros}{b}{it}
{<-> sub  * lmros/b/sl}{}
%    \end{macrocode}
%    \begin{macrocode}
%</eu1lmros.fd>
%    \end{macrocode}
%
% \pagebreak\setcounter{CodelineNo}{0}
%
%    \begin{macrocode}
%<*eu1lmssos.fd>
%    \end{macrocode}
%    \begin{macrocode}
\ProvidesFile{eu1lmssos.fd}[2012/07/20 v1.01 Font defs for Latin Modern]
\DeclareFontFamily{EU1}{lmssos}{}
\DeclareFontShape{EU1}{lmssos}{m}{n}
{<-8.5>    "[lmsans8-regular]:+onum,+tnum,mapping=tex-text"
 <8.5-9.5> "[lmsans9-regular]:+onum,+tnum,mapping=tex-text"
 <9.5-11>  "[lmsans10-regular]:+onum,+tnum,mapping=tex-text"
 <11-15.5> "[lmsans12-regular]:+onum,+tnum,mapping=tex-text"
 <15.5->   "[lmsans17-regular]:+onum,+tnum,mapping=tex-text"}{}
\DeclareFontShape{EU1}{lmssos}{m}{it}
{<-> ssub * lmssos/m/sl}{}
\DeclareFontShape{EU1}{lmssos}{m}{sl}
{<-8.5>    "[lmsans8-oblique]:+onum,+tnum,mapping=tex-text"
 <8.5-9.5> "[lmsans9-oblique]:+onum,+tnum,mapping=tex-text"
 <9.5-11>  "[lmsans10-oblique]:+onum,+tnum,mapping=tex-text"
 <11-15.5> "[lmsans12-oblique]:+onum,+tnum,mapping=tex-text"
 <15.5->   "[lmsans17-oblique]:+onum,+tnum,mapping=tex-text"}{}
\DeclareFontShape{EU1}{lmssos}{m}{sc}
{<-> sub  * lmros/m/sc}{}
\DeclareFontShape{EU1}{lmssos}{b}{n}
{<-> ssub * lmssos/bx/n}{}
\DeclareFontShape{EU1}{lmssos}{b}{sl}
{<-> ssub * lmssos/bx/sl}{}
\DeclareFontShape{EU1}{lmssos}{b}{it}
{<-> ssub * lmssos/bx/it}{}
\DeclareFontShape{EU1}{lmssos}{sbc}{n}
{<->       "[lmsansdemicond10-regular]:+onum,+tnum,mapping=tex-text"}{}
\DeclareFontShape{EU1}{lmssos}{sbc}{sl}
{<->       "[lmsansdemicond10-oblique]:+onum,+tnum,mapping=tex-text"}{}
\DeclareFontShape{EU1}{lmssos}{sbc}{it}
{<-> ssub * lmssos/sbc/sl}{}
\DeclareFontShape{EU1}{lmssos}{bx}{n}
{<->       "[lmsans10-bold]:+onum,+tnum,mapping=tex-text"}{}
\DeclareFontShape{EU1}{lmssos}{bx}{sl}
{<->       "[lmsans10-boldoblique]:+onum,+tnum,mapping=tex-text"}{}
\DeclareFontShape{EU1}{lmssos}{bx}{it}
{<-> ssub * lmssos/bx/sl}{}
%    \end{macrocode}
%    \begin{macrocode}
%</eu1lmssos.fd>
%    \end{macrocode}
%
% \bigskip\setcounter{CodelineNo}{0}
%
%    \begin{macrocode}
%<*eu1lmttos.fd>
%    \end{macrocode}
%    \begin{macrocode}
\ProvidesFile{eu1lmttos.fd}[2012/07/20 v1.01 Font defs for Latin Modern]
\DeclareFontFamily{EU1}{lmttos}{\hyphenchar\font\m@ne}
\ifx\lmtt@use@light@as@normal\@empty
\DeclareFontShape{EU1}{lmttos}{sb}{n}
{<-8.5>    "[lmmono8-regular]:+onum,+tnum"
 <8.5-9.5> "[lmmono9-regular]:+onum,+tnum"
 <9.5-11>  "[lmmono10-regular]:+onum,+tnum"
 <11->     "[lmmono12-regular]:+onum,+tnum"}{}
\DeclareFontShape{EU1}{lmttos}{sb}{it}
{<->       "[lmmono10-italic]:+onum,+tnum"}{}
\DeclareFontShape{EU1}{lmttos}{sb}{sl}
{<->       "[lmmonoslant10-regular]:+onum,+tnum"}{}
\DeclareFontShape{EU1}{lmttos}{sb}{sc}
{<->       "[lmmonocaps10-regular]:+onum,+tnum"}{}
\DeclareFontShape{EU1}{lmttos}{sb}{scsl}
{<->       "[lmmonocaps10-oblique]:+onum,+tnum"}{}
\DeclareFontShape{EU1}{lmttos}{m}{n}
{<->       "[lmmonolt10-regular]:+onum,+tnum"}{}
\DeclareFontShape{EU1}{lmttos}{m}{it}
{<-> sub  * lmttos/l/sl}{}
\DeclareFontShape{EU1}{lmttos}{m}{sl}
{<->       "[lmmonolt10-oblique]:+onum,+tnum"}{}
\DeclareFontShape{EU1}{lmttos}{c}{n}
{<->       "[lmmonoltcond10-regular]:+onum,+tnum"}{}
\DeclareFontShape{EU1}{lmttos}{c}{it}
{<-> sub  * lmttos/lc/sl}{}
\DeclareFontShape{EU1}{lmttos}{c}{sl}
{<->       "[lmmonoltcond10-oblique]:+onum,+tnum"}{}\else
\DeclareFontShape{EU1}{lmttos}{m}{n}
{<-8.5>    "[lmmono8-regular]:+onum,+tnum"
 <8.5-9.5> "[lmmono9-regular]:+onum,+tnum"
 <9.5-11>  "[lmmono10-regular]:+onum,+tnum"
 <11->     "[lmmono12-regular]:+onum,+tnum"}{}
\DeclareFontShape{EU1}{lmttos}{m}{it}
{<->       "[lmmono10-italic]:+onum,+tnum"}{}
\DeclareFontShape{EU1}{lmttos}{m}{sl}
{<->       "[lmmonoslant10-regular]:+onum,+tnum"}{}
\DeclareFontShape{EU1}{lmttos}{m}{sc}
{<->       "[lmmonocaps10-regular]:+onum,+tnum"}{}
\DeclareFontShape{EU1}{lmttos}{m}{scsl}
{<->       "[lmmonocaps10-oblique]:+onum,+tnum"}{}
\DeclareFontShape{EU1}{lmttos}{l}{n}
{<->       "[lmmonolt10-regular]:+onum,+tnum"}{}
\DeclareFontShape{EU1}{lmttos}{l}{it}
{<-> sub  * lmttos/l/sl}{}
\DeclareFontShape{EU1}{lmttos}{l}{sl}
{<->       "[lmmonolt10-oblique]:+onum,+tnum"}{}
\DeclareFontShape{EU1}{lmttos}{lc}{n}
{<->       "[lmmonoltcond10-regular]:+onum,+tnum"}{}
\DeclareFontShape{EU1}{lmttos}{lc}{it}
{<-> sub  * lmttos/lc/sl}{}
\DeclareFontShape{EU1}{lmttos}{lc}{sl}
{<->       "[lmmonoltcond10-oblique]:+onum,+tnum"}{}\fi
\DeclareFontShape{EU1}{lmttos}{b}{n}
{<->       "[lmmonolt10-bold]:+onum,+tnum"}{}
\DeclareFontShape{EU1}{lmttos}{b}{it}
{<-> sub  * lmttos/b/sl}{}
\DeclareFontShape{EU1}{lmttos}{b}{sl}
{<->       "[lmmonolt10-boldoblique]:+onum,+tnum"}{}
\DeclareFontShape{EU1}{lmttos}{bx}{it}
{<-> sub  * lmttos/b/sl}{}
\DeclareFontShape{EU1}{lmttos}{bx}{n}
{<-> ssub * lmttos/b/n}{}
\DeclareFontShape{EU1}{lmttos}{bx}{sl}
{<-> ssub * lmttos/b/sl}{}
%    \end{macrocode}
%    \begin{macrocode}
%</eu1lmttos.fd>
%    \end{macrocode}
%
% \pagebreak\setcounter{CodelineNo}{0}
%
%    \begin{macrocode}
%<*eu1lmvttos.fd>
%    \end{macrocode}
%    \begin{macrocode}
\ProvidesFile{eu1lmvttos.fd}[2012/07/20 v1.01 Font defs for Latin Modern]
\DeclareFontFamily{EU1}{lmvttos}{}
\ifx\lmtt@use@light@as@normal\@empty
\DeclareFontShape{EU1}{lmvttos}{sb}{n}
{<->      "[lmmonoprop10-regular]:+onum,+tnum,mapping=tex-text"}{}
\DeclareFontShape{EU1}{lmvttos}{sb}{sl}
{<->      "[lmmonoprop10-oblique]:+onum,+tnum,mapping=tex-text"}{}
\DeclareFontShape{EU1}{lmvttos}{sb}{it}
{<-> sub  * lmvttos/sb/sl}{}
\DeclareFontShape{EU1}{lmvttos}{m}{n}
{<->      "[lmmonoproplt10-regular]:+onum,+tnum,mapping=tex-text"}{}
\DeclareFontShape{EU1}{lmvttos}{m}{sl}
{<->      "[lmmonoproplt10-oblique]:+onum,+tnum,mapping=tex-text"}{}
\DeclareFontShape{EU1}{lmvttos}{m}{it}
{<-> sub  * lmvttos/m/sl}{}\else
\DeclareFontShape{EU1}{lmvttos}{m}{n}
{<->      "[lmmonoprop10-regular]:+onum,+tnum,mapping=tex-text"}{}
\DeclareFontShape{EU1}{lmvttos}{m}{sl}
{<->      "[lmmonoprop10-oblique]:+onum,+tnum,mapping=tex-text"}{}
\DeclareFontShape{EU1}{lmvttos}{m}{it}
{<-> sub  * lmvttos/m/sl}{}
\DeclareFontShape{EU1}{lmvttos}{l}{n}
{<->      "[lmmonoproplt10-regular]:+onum,+tnum,mapping=tex-text"}{}
\DeclareFontShape{EU1}{lmvttos}{l}{sl}
{<->      "[lmmonoproplt10-oblique]:+onum,+tnum,mapping=tex-text"}{}
\DeclareFontShape{EU1}{lmvttos}{l}{it}
{<-> sub  * lmvttos/l/sl}{}\fi
\DeclareFontShape{EU1}{lmvttos}{b}{n}
{<->      "[lmmonoproplt10-bold]:+onum,+tnum,mapping=tex-text"}{}
\DeclareFontShape{EU1}{lmvttos}{b}{sl}
{<->      "[lmmonoproplt10-boldoblique]:+onum,+tnum,mapping=tex-text"}{}
\DeclareFontShape{EU1}{lmvttos}{b}{it}
{<-> sub  * lmvttos/b/sl}{}
\DeclareFontShape{EU1}{lmvttos}{bx}{n}
{<-> sub  * lmvttos/b/n}{}
\DeclareFontShape{EU1}{lmvttos}{bx}{sl}
{<-> ssub * lmvttos/b/sl}{}
\DeclareFontShape{EU1}{lmvttos}{bx}{it}
{<-> ssub * lmvttos/b/sl}{}
%    \end{macrocode}
%    \begin{macrocode}
%</eu1lmvttos.fd>
%    \end{macrocode}
%
% \pagebreak
%
% \Finale
% \PrintChanges
% \PrintIndex
\endinput