summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/chextras
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/chextras
Initial commit
Diffstat (limited to 'macros/latex/contrib/chextras')
-rw-r--r--macros/latex/contrib/chextras/README24
-rw-r--r--macros/latex/contrib/chextras/chextras.dtx1361
-rw-r--r--macros/latex/contrib/chextras/chextras.ins74
-rw-r--r--macros/latex/contrib/chextras/chextras.pdfbin0 -> 130469 bytes
4 files changed, 1459 insertions, 0 deletions
diff --git a/macros/latex/contrib/chextras/README b/macros/latex/contrib/chextras/README
new file mode 100644
index 0000000000..8391530293
--- /dev/null
+++ b/macros/latex/contrib/chextras/README
@@ -0,0 +1,24 @@
+{chextras}[2012/07/20 v1.01 Swiss companion package]
+
+The chextras package is a companion for the chletter document class and
+other classes. It is targeted at the Swiss typesetter.
+
+It simplifies the preparation of documents and letters by loading and
+setting up font, linguistic and other common packages.
+
+While it is linked to the chletter document class, it is not tied to it
+and may be used as a general purpose toolbox for casual writing.
+
+This package is compatible with LaTeX, LuaTeX and XeTeX, trying to take
+in account their specifics and setting things up accordingly.
+
+A bunch of options are provided to easily alter the behaviour of loaded
+packages. Additional options allow for disabling unwanted features.
+
+Provided files:
+chextras.dtx code and documentation
+chextras.ins install script
+chextras.pdf documentation
+
+Copyright 2010 - 2012 Boris Oriet
+The licence is LPPL 1.3c.
diff --git a/macros/latex/contrib/chextras/chextras.dtx b/macros/latex/contrib/chextras/chextras.dtx
new file mode 100644
index 0000000000..3481d788bc
--- /dev/null
+++ b/macros/latex/contrib/chextras/chextras.dtx
@@ -0,0 +1,1361 @@
+% \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 \ No newline at end of file
diff --git a/macros/latex/contrib/chextras/chextras.ins b/macros/latex/contrib/chextras/chextras.ins
new file mode 100644
index 0000000000..d56cf30e59
--- /dev/null
+++ b/macros/latex/contrib/chextras/chextras.ins
@@ -0,0 +1,74 @@
+%%
+%% 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".
+%%
+\input docstrip
+\keepsilent
+
+\preamble
+
+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".
+
+\endpreamble
+
+\generate{\file{chextras.sty}{\from{chextras.dtx}{chextras.sty}}}
+
+\nopreamble
+\nopostamble
+
+\generate{\file{t1lmros.fd}{\from{chextras.dtx}{t1lmros.fd}}}
+\generate{\file{t1lmssos.fd}{\from{chextras.dtx}{t1lmssos.fd}}}
+\generate{\file{t1lmttos.fd}{\from{chextras.dtx}{t1lmttos.fd}}}
+\generate{\file{t1lmvttos.fd}{\from{chextras.dtx}{t1lmvttos.fd}}}
+\generate{\file{eu1lmros.fd}{\from{chextras.dtx}{eu1lmros.fd}}}
+\generate{\file{eu1lmssos.fd}{\from{chextras.dtx}{eu1lmssos.fd}}}
+\generate{\file{eu1lmttos.fd}{\from{chextras.dtx}{eu1lmttos.fd}}}
+\generate{\file{eu1lmvttos.fd}{\from{chextras.dtx}{eu1lmvttos.fd}}}
+
+\obeyspaces
+\Msg{*************************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the following *}
+\Msg{* files into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* chextras.sty *}
+\Msg{* t1lmtros.fd *}
+\Msg{* t1lmssos.fd *}
+\Msg{* t1lmttos.fd *}
+\Msg{* t1lmvttos.fd *}
+\Msg{* eu1lmros.fd *}
+\Msg{* eu1lmssos.fd *}
+\Msg{* eu1lmttos.fd *}
+\Msg{* eu1lmvttos.fd *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file chextras.dtx *}
+\Msg{* through LaTeX. *}
+\Msg{* *}
+\Msg{* Happy TeXing! *}
+\Msg{* *}
+\Msg{*************************************************************}
+
+\endbatchfile
diff --git a/macros/latex/contrib/chextras/chextras.pdf b/macros/latex/contrib/chextras/chextras.pdf
new file mode 100644
index 0000000000..f90f6e18c3
--- /dev/null
+++ b/macros/latex/contrib/chextras/chextras.pdf
Binary files differ