summaryrefslogtreecommitdiff
path: root/Master
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2011-04-02 22:57:01 +0000
committerKarl Berry <karl@freefriends.org>2011-04-02 22:57:01 +0000
commit6d525e6a76164a5d6ee4da71dd28ba3396db6c06 (patch)
tree1a3b5ac37f1cda4d0759a1eb672b087b69896d77 /Master
parent49ae11bd88c175563a9870a9e575a4da7e88f352 (diff)
new microtype-de translation (29mar11)
git-svn-id: svn://tug.org/texlive/trunk@21917 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r--Master/texmf-dist/doc/latex/microtype-de/microtype-DE.dtx15129
-rw-r--r--Master/texmf-dist/doc/latex/microtype-de/microtype-DE.pdfbin0 -> 1423817 bytes
-rwxr-xr-xMaster/tlpkg/bin/tlpkg-ctan-check2
-rwxr-xr-xMaster/tlpkg/libexec/ctan2tds39
-rw-r--r--Master/tlpkg/tlpsrc/collection-langgerman.tlpsrc1
-rw-r--r--Master/tlpkg/tlpsrc/microtype-de.tlpsrc0
6 files changed, 15151 insertions, 20 deletions
diff --git a/Master/texmf-dist/doc/latex/microtype-de/microtype-DE.dtx b/Master/texmf-dist/doc/latex/microtype-de/microtype-DE.dtx
new file mode 100644
index 00000000000..5eea8636390
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/microtype-de/microtype-DE.dtx
@@ -0,0 +1,15129 @@
+%\iffalse meta-comment
+% ^^A messages to WinEdt:
+% !Mode:: "TeX:DTX:UK"
+% !smartQuote:: "English"
+% !DTXversion:: "2.4"
+% ------------------------------------------------------------------------
+% $Id: microtype.dtx,v 1.60 2010-01-10 02:00:23+01 schlicht Exp schlicht $
+% ------------------------------------------------------------------------
+% The `microtype' package
+% An interface to the micro-typographic extensions of pdfTeX
+% Copyright (c) 2004--2010 R Schlicht <w.m.l@gmx.net>
+%
+% This work 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 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `author-maintained'.
+%
+% This work consists of the files microtype.dtx and microtype.ins and the
+% derived files microtype.sty, microtype.lua and letterspace.sty.
+%
+% Modified versions of the configuration files (*.cfg) may be distributed
+% provided that: (1) the original copyright statement is not removed, and
+% (2) the identification string is changed.
+% ------------------------------------------------------------------------
+%
+%<package|letterspace>\NeedsTeXFormat{LaTeX2e}
+%<*driver>
+\ProvidesFile{\jobname.dtx}
+%</driver>
+%<package|letterspace>\ProvidesPackage
+%<config>\ProvidesFile
+%<package> {microtype}
+%<letterspace> {letterspace}
+%<m-t> {microtype.cfg}
+%<*package|letterspace|m-t>
+ [2010/01/10 v2.4
+%<package> Micro-typography with pdfTeX
+%<letterspace> Robust letterspacing
+%<m-t> microtype main configuration file
+ (RS)]
+%</package|letterspace|m-t>
+%<*config>
+%<bch> {mt-bch.cfg}[2007/03/03 v1.5 microtype config. file: Bitstream Charter (RS)]
+%<blg> {mt-blg.cfg}[2007/07/14 v1.0 microtype config. file: Bitstream Letter Gothic (RS)]
+%<cmr> {mt-cmr.cfg}[2009/11/09 v2.0 microtype config. file: Computer Modern Roman (RS)]
+%<pad> {mt-pad.cfg}[2005/11/07 v1.5 microtype config. file: Adobe Garamond (RS)]
+%<pmn> {mt-pmn.cfg}[2009/11/14 v1.3 microtype config. file: Adobe Minion (HH/KK)]
+%<ppl> {mt-ppl.cfg}[2005/11/16 v1.6 microtype config. file: Palatino (RS)]
+%<ptm> {mt-ptm.cfg}[2006/04/20 v1.7 microtype config. file: Times (RS)]
+%<ugm> {mt-ugm.cfg}[2006/01/26 v1.0 microtype config. file: URW Garamond (RS)]
+%<msa> {mt-msa.cfg}[2006/02/04 v1.1 microtype config. file: AMS symbols (a) (RS)]
+%<msb> {mt-msb.cfg}[2005/06/01 v1.0 microtype config. file: AMS symbols (b) (RS)]
+%<euf> {mt-euf.cfg}[2006/07/03 v1.1 microtype config. file: AMS Euler Fraktur (RS)]
+%<eur> {mt-eur.cfg}[2006/07/31 v1.1 microtype config. file: AMS Euler Roman (RS)]
+%<eus> {mt-eus.cfg}[2006/07/28 v1.2 microtype config. file: AMS Euler Script (RS)]
+%<zpeu> {mt-zpeu.cfg}[2006/05/04 v1.0 microtype config. file: Adobe Euro (RS)]
+%<euroitc> {mt-euroitc.cfg}[2006/05/04 v1.0 microtype config. file: ITC Euro (RS)]
+%<mvs> {mt-mvs.cfg}[2006/07/05 v1.1 microtype config. file: Marvosym Euro (RS)]
+%</config>
+%
+%<*driver|docsty>
+%<*driver>
+\documentclass[10pt,a4paper]{ltxdoc}
+\makeatletter
+%</driver>
+% Let's abolish CM! We use Charter and Letter Gothic
+% (for the pre-built documentation on CTAN):
+% \usepackage[charter]{mathdesign}
+% \def\rmdefault{bch} % not scaled
+% \def\ttdefault{blg}
+\usepackage{ifpdf,ifluatex}
+\usepackage[latin1]{\ifluatex luainputenc,\fi inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[ngerman]{babel}
+\usepackage{textcomp}
+\GetFileInfo{\jobname.dtx}
+\usepackage[expansion=false,kerning=true]{microtype}[\filedate]
+ \DeclareMicrotypeSet*[protrusion]
+ { doc }
+ { encoding = {*, TS1, OMS},
+ family = {rm*, tt*},
+ size = {footnotesize, small, normalsize} }
+ \SetProtrusion
+ { encoding = OMS,
+ family = mdbch }
+ { "68 = {400, }, % \langle
+ "69 = { ,400} } % \rangle
+ \DeclareMicrotypeSet*[kerning]
+ { doc }
+ { encoding = T1,
+ family = blg, % typewriter font and ...
+ font = * } % French sample in section \ref{sub:kerning}
+ \SetExtraKerning
+ { encoding = T1,
+ family = blg }
+ { _ = {100,100} } % underscores shouldn't touch
+ % disable ?` and !` ligatures (sample in section \ref{sec:disable-ligatures})
+ \DisableLigatures[?,!]{encoding = *, family = rm* }
+ % Fraktur sample in section \ref{sec:lettersp}
+ \IfFileExists{t1mwr.fd}
+ {\newcommand\textfrak[1]{{\fontfamily{mwr}\selectfont ##1}}
+ \ifpdf
+ \SetTracking[no ligatures={f}]{encoding=T1,family=mwr}{100}
+ \fi}
+ {\IfFileExists{yfonts.sty}
+ {\usepackage{yfonts}
+ \ifpdf
+ \SetTracking[no ligatures={f}]{encoding=LY,family=yfrak}{100}
+ \fi}
+ {\let\textfrak\@gobble}}
+\tolerance=700
+\ifpdf
+ \ifnum\pdftexversion<140 \else % pdftex 1.40, including textmatrix patch,
+ \microtypesetup{expansion=alltext,step=1} % hence we can activate expansion ...
+ \tolerance=300 % ... and make TeX almost as intolerant as it normally is
+ \g@addto@macro\macrocode{\microtypesetup{expansion=false}}
+ \pdfminorversion=5 % for the OCGs
+ \fi
+ % bonus material
+ \InputIfFileExists{microtype-logo.dtx}\relax\relax
+ \InputIfFileExists{microtype-lssample.dtx}\relax\relax
+\else
+ \let\lsstyle\relax
+\fi
+\ifluatex % microtype.dtx finally compiles with 0.35!
+ \microtypesetup{kerning=false}
+ \let\lsstyle\relax
+\fi
+\usepackage{booktabs}
+\usepackage{array}
+ \newcolumntype{L}[1]{p{#1}<{\raggedright}}
+\usepackage{color}
+ \definecolor{theblue} {rgb}{0.02,0.04,0.48}
+ \definecolor{thered} {rgb}{0.65,0.04,0.07}
+ \definecolor{thegreen}{rgb}{0.06,0.44,0.08}
+ \definecolor{thegrey} {gray}{0.5}
+ \definecolor{theshade}{gray}{0.94}
+ \definecolor{theframe}{gray}{0.75}
+\usepackage{graphicx}
+% general layout
+\frenchspacing
+\DeclareRobustCommand\textoractual[2]{\ifpdf
+ \pdfliteral direct{/Span<</ActualText(#2)>>BDC}#1\pdfliteral direct{EMC}%
+ \else #1\fi}
+\expandafter\newif\csname ifcmr\endcsname
+\long\def\@tempa{cmr}
+\ifx\rmdefault\@tempa
+ \cmrtrue
+ \def\PackageFont{\sffamily}
+ \def\match{\textbullet}
+ \usepackage{amssymb} % \varnothing
+ \let\OrigTeX\TeX
+ \def\TeX{\textoractual{\OrigTeX}{TeX}}
+ \setlength\textheight{47\baselineskip}
+\else
+ \def\bfdefault{b}
+ \def\Module#1{{\color{theblue}\textoractual{$\langle$}{<}\textit{#1}\textoractual{$\rangle$}{>}}}
+ \def\TeX{\textoractual{T\kern-.1667em\lower.4ex\hbox{E}\kern-.125emX\@}{TeX}}
+ \DeclareRobustCommand\LaTeX{\textoractual{L\kern-.26em{\sbox\z@ T\vbox to\ht\z@{%
+ \hbox{\check@mathfonts\fontsize\sf@size\z@\math@fontsfalse\selectfont A}%
+ \vss}}}{La}\kern-.1em\TeX}
+ \def\PackageFont{\ttfamily}
+ \def\match{{\large\raisebox{-.15em}{\textbullet}}}
+ {\catcode`\`=\active % indiscernible from ' in Bitstream Letter Gothic
+ \g@addto@macro\macro@code{\let`\textasciigrave}}
+ \linespread{1.07}\normalfont
+ \setlength\textheight{46\baselineskip}
+\fi
+\addtolength\textheight{\topskip}
+\setlength\topmargin{12pt}
+% sections
+\def\@seccntformat#1{\llap{\csname the#1\endcsname\hskip\marginparsep}}
+\def\paragraph{\@startsection{paragraph}{4}%
+ {0pt}{8pt plus 2pt minus 1pt}{-1em}%
+ {\normalfont\normalsize\itshape}}
+% title
+\def\@maketitle{%
+ \newpage\null\vskip 2em
+ \begin{center}\let\footnote\thanks
+ {\LARGE \@title\par}\vskip 1.5em
+ {\large \parbox{.33\textwidth}{\centering\@author}%
+ \parbox{.33\textwidth}{\centering\@date}}%
+ \vskip1.5em\rule{.66\textwidth}{.4pt}%
+ \end{center}\par\vskip1.5em}
+% headers
+\headheight=15pt
+\def\ps@MTheadings{%
+ \def\@oddhead{%
+ \hbox to\textwidth{\vbox{\hbox to\textwidth{%
+ \footnotesize{\leftmark\rightmark\strut}\hfill\thepage\strut}%
+ \hrule height 0.4pt width\textwidth \vskip-0.4pt
+ }}\hss}
+ \let\@oddfoot\@empty
+ \let\@mkboth\markboth
+ \def\sectionmark##1{\markboth{\textls*[60]{\MakeUppercase{##1}}}{}}
+ \def\subsectionmark##1{\markright{: ##1}}}
+\pagestyle{MTheadings}
+% toc
+\let\l@section@\l@section
+\def\l@section{\vskip -.75ex\l@section@}
+\def\l@subsection{\vskip.35ex \penalty\@secpenalty \@dottedtocline{2}{1.5em}{2.7em}}
+\def\l@subsubsection#1#2{%
+ \leftskip 4.2em
+ \rightskip 2em plus 2em
+ \parindent 0pt
+ {\let\numberline\@gobble{\small #1~[#2]}}}
+\def\l@table{\@dottedtocline{1}{0pt}{1.5em}}
+\def\@pnumwidth{1.7em}
+\ifpdf
+ \let\ORIGpdfoutline\pdfoutline
+ \def\special@outlines{attr{/F 01}}
+ \def\normaloutline {\protected@write\@outlinefile{}{\let\pdfoutline \ORIGpdfoutline}}
+ \def\specialoutline{\protected@write\@outlinefile{}{\def\pdfoutline{\ORIGpdfoutline\special@outlines}}}
+ \g@addto@macro\appendix{\specialoutline}
+\fi
+\def\defspecial@toc#1#2#3{\long\def#1{%
+ \ifpdf\phantomsection\specialoutline\pdfbookmark[1]{#2}{#3}\normaloutline\fi
+ \section*{#2}\@mkboth{\textls*[60]{\MakeUppercase{#2}}}{}%
+ \@starttoc{#3}}}
+\defspecial@toc\tableofcontents\contentsname{toc}
+\defspecial@toc\listoftables\listtablename{lot}
+% bibliography
+\def\@cite#1#2{#1\if@tempswa, #2\fi}
+\def\thebibliography#1{%
+ \section{\refname}%
+ \list{}{\leftmargin 0pt}%
+ \sloppy
+ \clubpenalty 4000
+ \@clubpenalty \clubpenalty
+ \widowpenalty 4000}
+\def\@biblabel#1{}
+% footnotes
+\long\def\@makefntext#1{%
+ \leftskip 0pt
+ \parindent 0pt
+ \everypar{\parindent 0pt}%
+ \leavevmode\llap{\@thefnmark\hskip\marginparsep}#1}
+\renewcommand\footnoterule{%
+ \kern-3\p@
+ \hrule\@width \columnwidth
+ \kern2.6\p@}
+\skip\@mpfootins=4pt
+% lists
+\setlength\leftmargini{15pt}
+\setlength\leftmarginii{12.5pt}
+\setlength\leftmarginiii{10pt}
+\def\@listi{\leftmargin \leftmargini
+ \parsep 4.5pt plus 1pt minus 1pt
+ \topsep 4.5pt plus 1pt minus 1pt
+ \itemsep 0pt}
+\let\@listI\@listi
+\def\descriptionlabel#1{\hspace\labelsep\normalfont#1:}
+\renewenvironment{itemize}
+ {\ifnum \@itemdepth >\thr@@\@toodeep\else
+ \advance\@itemdepth\@ne
+ \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
+ \expandafter\list
+ \csname\@itemitem\endcsname
+ {\ifnum\@itemdepth=\@ne\leftmargin 0pt\fi
+ \def\makelabel##1{\hss\llap{##1}}}%
+ \fi}
+ {\endlist}
+\newenvironment{enum}[1][0]
+ {\list\labelenumi
+ {\usecounter{enumi}\setcounter{enumi}{#1}\addtocounter{enumi}{-1}%
+ \renewcommand\labelenumi{\texttt{\theenumi}:}%
+ \leftmargin 30pt
+ \itemindent-15pt
+ \labelwidth 15pt
+ \labelsep 0pt
+ \def\makelabel##1{##1\hss}}}
+ {\endlist}
+\newenvironment{options}
+ {\list{}
+ {\leftmargin 0pt
+ \labelwidth 0pt
+ \labelsep 1em
+ \itemindent \labelsep
+ \lstset{belowskip=0pt}}}
+ {\endlist}
+% boxes (for some reason, mathdesign changes these values)
+\setlength\fboxrule{0.4pt}
+\setlength\fboxsep{3pt}
+\setlength\arrayrulewidth{0.4pt}
+% tables
+\setlength\tabcolsep{2pt}
+\long\def\@makecaption#1#2{%
+ \sbox\@tempboxa{\footnotesize\itshape#1: #2}%
+ \ifdim \wd\@tempboxa >\hsize
+ \footnotesize\itshape#1: #2\par
+ \else
+ \hb@xt@\hsize{\box\@tempboxa\hfil}%
+ \fi
+ \vskip 4pt}
+% index and change log
+\IndexPrologue{\section{Index}%
+ Links (in blue) refer to the page where the corresponding entry is described
+ (bold face) resp. occurs. Plain numbers (in black) refer to the code line
+ where the corresponding entry is defined (underlined) resp. used.}
+\GlossaryPrologue{\section{Change history}\label{sec:changes}\vspace*{-\multicolsep}}
+ %\setcounter{finalcolumnbadness}{100}
+ %\raggedcolumns
+\setcounter{IndexColumns}{2}
+\def\IndexMin{12\baselineskip}
+\g@addto@macro\IndexParms{\footnotesize}
+\def\GlossaryParms{\IndexParms
+ \def\@idxitem ##1##2\efill{%
+ \end{multicols}
+ \begin{multicols}{2}
+ [\subsubsection*{\if##1v\relax Version ##2
+ (\csname MTversiondate##2\endcsname)\else ##2\fi}][5\baselineskip]
+ \ifpdf \phantomsection \pdfbookmark[2]{\if##1v\relax ##2
+ (\csname MTversiondate##2\endcsname)\else ##2\fi}{subsection##2}\fi
+ \GlossaryParms \rightskip 15pt plus 5pt
+ \let\item\@idxitem
+ \ignorespaces \makeatletter \scan@allowedfalse}%
+ \def\subitem{\par\hangindent 15pt}%
+ \def\subsubitem{\subitem\hspace*{7.5pt}}}
+% macro code
+\MacroTopsep=0pt
+\MacrocodeTopsep=3pt
+\setlength\MacroIndent{0pt}
+\def\theCodelineNo{\reset@font\color{thegrey}\scriptsize
+ \textoractual{\arabic{CodelineNo}\,}{}}% don't copy line numbers
+\def\MacroFont{\ttfamily\small}
+\def\AltMacroFont{\ttfamily\footnotesize}
+\def\PrintMacroName#1{\strut\MacroFont\string #1\hskip15pt}
+\def\ImplementationSettings{%
+ \linespread{1}%
+ \hfuzz=10pt
+ \def\MacroFont{\ttfamily\footnotesize}%
+ \let\macro@font\MacroFont}
+% additional bells ...
+\def\Describe#1#2#3{\noindent\csname Describe#1\endcsname{#2}%
+ \DescribeValues{#1}{#3}}
+\def\DescribeOption{\leavevmode\@bsphack
+ \begingroup\MakePrivateLetters\Describe@Option}
+\def\Describe@Option#1{\endgroup
+ \marginpar{\raggedleft\PrintDescribeOption{#1}}%
+ \SpecialOptionIndex{#1}\@esphack\ignorespaces}
+\def\DescribePackage{\leavevmode\@bsphack
+ \begingroup\MakePrivateLetters\Describe@Package}
+\def\Describe@Package#1{\endgroup
+ \marginpar{\raggedleft\PrintDescribeOption{#1.sty}}%
+ \CatIndex{#1}{package}\@esphack\ignorespaces}
+\def\DescribeValues#1#2{%
+ \let\@tempa\@empty \let\Option@default\@empty
+ \@for\@tempb:=#2\do{%
+ \csname Special#1Value\expandafter\endcsname\@tempb\@nil
+ \expandafter\g@addto@macro\expandafter\@tempa
+ \expandafter{\csname #1Sep\endcsname}%
+ \expandafter\g@addto@macro\expandafter\@tempa
+ \expandafter{\@tempb}}%
+ \@ifnextchar[\PrintValues{\PrintValues[\Option@default]}}
+\def\SpecialOptionValue#1#2\@nil{%
+ \if#1:\def\@tempb{\Variable{#2}}\else % : = variable
+ \if#1!\def\@tempb{#2}\def\Option@default{#2}\else % ! = default
+ \if#1*\def\@tempb{#2}\def\Option@default{\MaybeDefault{#2}}% * = default (maybe)
+ \fi\fi\fi}
+\def\SpecialMacroValue#1#2\@nil{%
+ \if#1?\def\@tempb{\normalsize[\Variable{#2}]}% % ? = optional
+ \else\def\@tempb{\normalsize\{\Variable{#1#2}\}}\fi}
+\let\SpecialEnvValue\SpecialMacroValue
+\def\Variable#1{$\langle${\rmfamily\itshape\small#1}$\rangle$}
+\def\MaybeDefault#1{\textrm{*}\,#1}
+\def\OptionSep{{\rmfamily, }} \def\MacroSep{\,} \def\EnvironmentSep{\,}
+\def\PrintValues[#1]{{\MacroFont\expandafter\@gobble\@tempa\hfill #1}\\*[.25\baselineskip]}
+\def\CatIndex#1#2{\index{#1\actualchar{\protect\ttfamily #1} (#2)\encapchar hyperpage}}
+\def\SpecialOptionIndex#1{\@bsphack\CatIndex{#1}{option}%
+ \index{\quotechar!Options % the `!' will be sorted first
+ \actualchar{\protect\bfseries Options:}%
+ \levelchar{\protect\ttfamily#1}\encapchar usage}\@esphack}
+\def\SpecialUsageIndex#1{\@bsphack{\index{\quotechar!User Commands
+ \actualchar{\protect\indexspace\protect\bfseries User Commands:}%
+ \levelchar\expandafter\@gobble\string#1\actualchar\string\verb
+ \quotechar*\verbatimchar\string#1\verbatimchar\encapchar usage}%
+ \let\special@index\index\SpecialIndex@{#1}{\encapchar usage}}\@esphack}
+\def\SpecialEnvIndex#1{\CatIndex{#1}{environment}}
+\def\PrintDescribeMacro#1{\strut\MacroFont\color{thegreen}\string #1}
+\def\PrintDescribeEnv#1{\strut\MacroFont\bslash begin\{{\color{thegreen}#1}\}%
+ \\*[.25\baselineskip]\strut\bslash end\{{\color{thegreen}#1}\}}
+\def\PrintDescribeOption#1{\strut\MacroFont\color{thered}#1}
+\def\Indexing{\let\special@index\codeline@wrindex}
+\def\NoIndexing{\let\special@index\@gobble}
+\def\GeneralChanges#1{\edef\generalname{\if*#1 General\else#1\fi}}% mind the space!
+\DeclareRobustCommand\key[1]{\textcolor{thered}{\ttfamily#1}}
+\DeclareRobustCommand\pkg[1]{{\PackageFont#1}\@bsphack\CatIndex{#1}{package}\@esphack}
+\DeclareRobustCommand\opt[1]{{\ttfamily#1}\@bsphack\CatIndex{#1}{option}\@esphack}
+\DeclareRobustCommand\file[1]{{\ttfamily#1}}
+% ... and whistles
+{\catcode`\"\active
+ \gdef\verbatim#1
+ {\catcode`\"\active \def"##1"{\colorbox{theshade}{%
+ \textrm{Text lost! Please install the \pkg{listings} package.}}}%
+ \@beginparpenalty\predisplaypenalty\@verbatim\MacroFont
+ \frenchspacing\@vobeyspaces\expandafter\@xverbatim\@gobble}}
+\IfFileExists{listings.sty}{
+ \usepackage{listings}
+ \lstset{
+ gobble=1,columns=flexible,keepspaces,upquote,escapechar=",
+ basicstyle=\MacroFont,
+ keywords=[0]{\microtypesetup,\DeclareMicrotypeSet,\UseMicrotypeSet,
+ \DeclareMicrotypeSetDefault,\SetProtrusion,\SetExpansion,\SetTracking,
+ \SetExtraKerning,\SetExtraSpacing,\DisableLigatures,\DeclareCharacterInheritance,
+ \DeclareMicrotypeVariants,\DeclareMicrotypeAlias,\DeclareMicrotypeBabelHook,
+ \LoadMicrotypeFile,\microtypecontext,\textmicrotypecontext,
+ \textls,\lsstyle,\lslig,\Microtype@Hook},
+ keywordstyle=[0]\color{thegreen},
+ keywords=[1]{protrusion,expansion,activate,DVIoutput,draft,final,verbose,
+ config,factor,auto,stretch,shrink,step,selected,unit,tracking,kerning,
+ spacing,letterspace,babel,context,%defersetup,copyfonts, % undocumented
+ no ligatures,outer spacing,outer kerning}, % there are three \nobreakspace in this line
+ keywordstyle=[1]\color{thered},
+ comment=[l]\%,
+ commentstyle=\color{thegrey}\itshape,
+ alsoother={0123456789_},
+ frame=single,backgroundcolor=\color{theshade},rulecolor=\color{theframe},
+ framerule=\fboxrule,xleftmargin=3.4pt,xrightmargin=3.4pt,belowskip=\smallskipamount
+ }
+ \let\verbatim\relax
+ \lstnewenvironment{verbatim}[1][]{\lstset{##1}}{}
+ \ifpdf \IfFileExists{dummy-space.pfb}{%
+ \pdfmapline{+dummy-space <dummy-space.pfb}
+ \font\dummyspace=dummy-space
+ \def\lst@outputspace{% copy spaces (from a font that really has a space at x20)
+ \setbox0\hbox{ }\@tempdima\wd0
+ \setbox0\hbox{\dummyspace\char"20}\advance\@tempdima-\wd0
+ \unhbox0 \kern\@tempdima}
+ }\relax \fi
+}{
+ \let\lstset\@gobble
+}
+%\def\todo{\changes{zTo Do}{0000/00/00}}
+\let\todo\@gobble
+\newcommand\microtypesample[1]{\begin{quote}#1\end{quote}}
+\let\emptypdfpageresources\relax
+% fancy PDF document
+\ifpdf
+ \ifx\eTeXversion\@undefined \else % errors when not using etex (conflict with multicol)
+ \ifx\pdfcolorstack\@undefined % no longer required with pdftex 1.40
+ \usepackage{pdfcolmk}
+ \fi\fi
+ \usepackage[bookmarks,bookmarksopen,pdfdisplaydoctitle,colorlinks,
+ linkcolor=theblue,citecolor=theblue,urlcolor=thered,
+ hyperindex=false,hyperfootnotes=false,
+ pdftitle={The microtype package},
+ pdfauthor={R Schlicht <w.m.l@gmx.net>},
+ pdfsubject={An interface to the micro-typographic extensions of pdfTeX},
+ pdfkeywords={TeX, LaTeX, pdfTeX, luaTeX, typography, micro-typography,
+ character protrusion, margin kerning, optical alignment, font expansion,
+ font scaling, hz, kerning, spacing, glue, letterspacing, tracking, ligatures}
+ ]{hyperref}
+ \pdfcatalog{/Lang(en-GB)}
+ \ifnum\pdftexversion < 130 \else
+ \IfFileExists{hypdestopt.sty}{\usepackage{hypdestopt}}\relax\fi
+ \IfFileExists{hyperxmp.sty}{
+ \usepackage{hyperxmp}
+ \hypersetup{%
+ pdfcopyright={\textcopyright\ 2004--2010 R Schlicht\012%
+ This work 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.\&\#xA;%
+ This work has the LPPL maintenance status `author-maintained'.},
+ pdflicenseurl={http://www.latex-project.org/lppl/}}
+ }\relax
+ \def\usage#1{\textbf{\hyperpage{#1}}}% for indexing of \DescribeMacro ...
+ \def\changes@#1#2#3{% ... the changes ...
+ \protected@edef\@tempa{\noexpand\glossary{#1\levelchar
+ \ifx\saved@macroname\@empty \space\actualchar\generalname
+ \else\expandafter\@gobble\saved@macroname\actualchar
+ \string\verb\quotechar*\verbatimchar\saved@macroname\verbatimchar\fi
+ :\levelchar #3\encapchar hyperpage}}%
+ \@tempa\endgroup\@esphack}
+ %\def\theCodelineNo{% % ... and everything else (would double the pdf file size)
+ % \reset@font\color{thegrey}\scriptsize
+ % \@tempcnta\arabic{CodelineNo}\advance\@tempcnta by\@ne
+ % \hypertarget{L:\number\@tempcnta}{\arabic{CodelineNo}}}
+ %\def\main#1{\underline{\hyperlink{L:#1}{#1}}}
+ %\def\codeline#1{\link@sanitize#1-\@nil{#1}}
+ %\def\link@sanitize#1-#2\@nil{\link@@sanitize#1,\@nil}
+ %\def\link@@sanitize#1,#2\@nil{\hyperlink{L:#1}}
+ %\def\SpecialIndex#1{\@bsphack\special@index{\expandafter\@gobble
+ % \string#1\actualchar
+ % \string\verb\quotechar*\verbatimchar\string#1\verbatimchar
+ % \encapchar codeline}%
+ % \@esphack}
+ \def\ctanurl#1{Available from \acronym{CTAN} at
+ \href{http://www.ctan.org/tex-archive/#1}{\nolinkurl{/#1}}}
+ \DeclareRobustCommand\mailto[1]{\href{mailto:#1}{\nolinkurl{#1}}}
+ \def\mailtoRS{\href % some PDF viewers don't like spaces:
+ {mailto:<w.m.l@gmx.net>\%20Robert\%20Schlicht?subject=[microtype\%20\fileversion]}
+ {\texttt{w.m.l@gmx.net}}}
+ % the samples in the introduction, utilising nested optional content groups (aka. layers):
+ \ifnum\pdftexversion<140 \else
+ \def\mt@layer#1#2{\pdfliteral direct{/OC/#1 BDC}#2\pdfliteral direct{EMC}}
+ \ifx\mt@objects\@undefined\let\mt@objects\@empty\fi
+ \ifx\mt@order \@undefined\let\mt@order \@empty\fi
+ \let\mt@resources\@empty
+ \def\mt@register#1#2{%
+ \immediate\pdfobj{<< /Type/OCG /Name(#1:#2) >>}
+ \expandafter\xdef\csname mt@#1@#2\endcsname{\the\pdflastobj\space 0 R }
+ \xdef\mt@objects {\mt@objects \csname mt@#1@#2\endcsname}
+ \xdef\mt@order {\mt@order \csname mt@#1@#2\endcsname}
+ \xdef\mt@resources{\mt@resources/#1#2 \csname mt@#1@#2\endcsname}}
+ \xdef\mt@order{\mt@order[(Sample)}
+ \mt@register{Protrusion}{true} \mt@register{Protrusion}{false}
+ \mt@register{Expansion} {true} \mt@register{Expansion} {false}
+ \mt@register{_compatibility}{}
+ \xdef\mt@order{\mt@order]}
+ \pdfcatalog{/OCProperties <<
+ /OCGs [\mt@objects]
+ /D << /Order [\mt@order]
+ /BaseState/OFF
+ /ON [\mt@Protrusion@false \mt@Expansion@false
+ \ifx\mtl@objects\@undefined\else\mtl@objects\fi] >> >> }
+ \newbox\mt@box
+ \newdimen\mt@unvdimen
+ \def\mt@place#1{%
+ \vskip-\mt@unvdimen
+ \setbox\mt@box\vbox{#1}%
+ \mt@unvdimen\dimexpr\ht\mt@box+\dp\mt@box\relax
+ \unvbox\mt@box}
+ \def\mt@pseudo@marg#1{%
+ \mt@place{\llap{\vbox{%
+ \hsize\marginparwidth
+ \rightskip \marginparsep plus 1em
+ \leavevmode\itshape\footnotesize #1}}}}
+ \def\mt@show@sample#1#2{%
+ \mt@layer{Protrusion#1}{%
+ \mt@layer{Expansion#2}{%
+ \mt@place{\microtypesetup{protrusion=#1,expansion=#2}%
+ \mt@sample@text}}}}
+ \def\mt@toggle@sample#1{%
+ \pdfstartlink user{/Subtype/Link
+ /BS << /Type/Border/W 1 /S/D /D[4 1] >>
+ /H/O /C[0.65 0.04 0.07] /Contents(Click to Toggle #1!)
+ %/OC << /Type/OCMD /VE[/Not \csname mt@_compatibility@\endcsname] >> % not honoured by older viewers anyway
+ /A << /S/SetOCGState /State[/Toggle \csname mt@#1@true\endcsname
+ \csname mt@#1@false\endcsname] >>}
+ #1 \hfill\pdfendlink & \mt@layer{#1true}{\rlap{on}}\mt@layer{#1false}{off}}
+ \renewcommand\microtypesample[1]{%
+ \begingroup
+ \leftskip 15pt \rightskip 15pt
+ \parskip 4pt \parindent 0pt
+ \vskip 8pt % = \topsep without vertical stretchability
+ \long\def\mt@sample@text{#1}
+ \mt@pseudo@marg{\color{theblue}%
+ Nachdem Sie den Text rechterhand gelesen haben, können Sie den Effekt
+ dieser Features betrachten, indem Sie auf die Links klicken:\strut\\
+ \colorbox{theshade}{%
+ \begin{tabular}{@{}>{\upshape}l@{\quad}l}
+ \mt@toggle@sample{Protrusion}\\\addlinespace
+ \mt@toggle@sample{Expansion}
+ \end{tabular}}\\[0.3\baselineskip]
+ Beide Features sind im ganzen Dokument eingeschaltet.}
+ \mt@show@sample{false}{false}
+ \mt@show@sample{false}{true}
+ \mt@show@sample{true} {false}
+ \mt@layer{_compatibility}{%
+ % for compatibility with older PDF viewers that don't support OCGs, we
+ % add a layer that contains a white box, which will hide the underlying
+ % layers for older viewers, and will be ignored by PDF 1.5 capable viewers.
+ \mt@place{\rlap{\hskip-\marginparwidth \color{white}%
+ \vrule width\dimexpr\hsize+\marginparwidth\relax height\mt@unvdimen}}
+ \mt@pseudo@marg{\color{thered}%
+ If you had a \acronym{PDF} viewer that understands
+ \acronym{PDF}\,{\smaller1.5}, you could view the effect of the
+ micro-typographic features by clicking on the links.\strut
+ \\\vphantom{\colorbox{white}{\tabular l\\\addlinespace\\\endtabular}}%
+ \\[0.3\baselineskip] Both features are enabled throughout this document.}}
+ \mt@show@sample{true}{true}
+ \vskip 4pt
+ \endgroup
+ \edef\x{\pdfpageresources{/Properties <<\mt@resources>>}}\x}
+ \def\emptypdfpageresources{\pdfpageresources{}}
+ \fi
+\else
+ \usepackage{url}
+ \newcommand\hyperref[2][]{#2}
+ \let\hyperpage\@firstofone
+ \let\texorpdfstring\@firstoftwo
+ \def\ctanurl{Available from \acronym{CTAN} at \url}
+ \let\nolinkurl\url
+ \let\mailto\texttt
+ \def\mailtoRS{\mailto{w.m.l@gmx.net}}
+\fi
+\ifx\l@ukenglish\@undefined
+ \hyphenation{let-ter-spac-ing let-ter-spaced let-ter-space}
+\else
+ \language=\l@ukenglish
+\fi
+\hyphenation{An-dre-as Ber-nard Ha-rald Mi-cha-el Pe-ter Ste-phan Wolf-ram
+ Har-ders Hop-pe Jac-kow-ski Ku-char-czyk Mei-er Mu-the-si-us Zed-ler
+ Sveinung % ?
+ with-out}
+\def\fallbacktext#1{{\centering\itshape[#1]\par}}
+% abbreviations
+\DeclareRobustCommand\thanh{H\`an Th\^e%
+ \ifx\eTeXversion\undefined \llap{\raisebox{0.5ex}{\'{}}}
+ \else \llap{\raisebox{0.45ex}{\'{}\kern\dimexpr.05em-2\fontdimen1\font\relax}}
+ \fi Th\`anh}
+\def\pdftex{\texorpdfstring{pdf\kern.05em\TeX}{pdfTeX}}
+\def\luatex{\texorpdfstring{lua\kern-.05em\TeX}{luaTeX}}
+\def\etex{\mbox{e-\TeX}}
+\def\nonetex{\mbox{\rlap{\kern.05em/}e-\TeX}} % aka. \TeX
+\def\@reflect#1{\ifdim\fontdimen1\font=0pt \reflectbox{#1}%
+ \else \rotatebox[origin=c]{180}{#1}\fi}
+\DeclareRobustCommand\xetex{% also reflect the initial `X'?
+ \textoractual{\@reflect{X}\lower.4ex\hbox{\kern-.12em\@reflect{E}}}{Xe}%
+ \kern-.16em\TeX}
+\def\texlive{\TeX~Live}
+\def\microtype{{\PackageFont microtype}}
+\def\letterspace{\pkg{letterspace}}
+\def\fontdim{\cmd\fontdimen\,}
+\def\eg{e.\,g.}
+\def\ie{i.\,e.}
+\DeclareRobustCommand\smaller{\setbox\z@\hbox{\@tempcnta=\f@size
+ \edef\x{\@tempcnta=\the\@tempcnta}\expandafter}\x
+ \advance\@tempcnta-7 \ifcase\@tempcnta\tiny\or\scriptsize\or
+ \footnotesize\or\small\or\or\normalsize\or\or\large\or\or\or\Large\fi}
+\DeclareRobustCommand\acronym[1]{\texorpdfstring{{\smaller\textls[60]{#1}}}{#1}}
+\let\less=<
+{\catcode`\<=\active
+ \AtBeginDocument{\catcode`\<=\active
+ \def<#1>{\acronym{#1}}
+ \def\contributor#1 <#2\at#3>{\@contributor{#1}{#2@#3}}
+ \DeclareRobustCommand\@contributor[2]{\textit{#1}}
+ %\DeclareRobustCommand\@contributor[2]{\href{mailto:#2}{\textit{#1}}}
+ }}
+%<*driver>
+\CodelineIndex
+\EnableCrossrefs
+\RecordChanges
+%\OnlyDescription
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+%</driver|docsty>
+% \fi
+%
+% ^^A -------------------------------------------------------------------------
+%\GeneralChanges*
+%\changes{v1.0}{2004/09/11}{Initial version}
+%\changes{v2.0}{2006/12/29}{new package \letterspace: a stripped-down version,
+% containing the letterspacing commands only}
+%\GeneralChanges{Documentation}
+%\changes{v1.9b}{2006/01/13}{activate expansion in the distributed <PDF>}
+%\changes{v2.2}{2007/04/01}{logo transparency and amusement}
+% ^^A Adobe Reader 8.0 had serious bugs with transparency. Fixed in 8.1.
+%
+% \GetFileInfo{microtype.dtx}
+% \title{\ifx\printlogo\undefined\else\printlogo\fi
+% \textls{Das \microtype\ Paket}\\[.3\baselineskip]\large
+% Eine Schnittstelle für die mikrotypographischen Erweiterungen von \pdftex}
+% \author{R Schlicht\\\mailtoRS}
+% \date{\fileversion\\\filedate}
+%
+% \maketitle \thispagestyle{empty}
+%
+%\begin{abstract}
+%\noindent
+% Das \microtype\ Paket stellt eine \LaTeX\ Schnittstelle für die mikrotypographischen
+% Erweiterungen von \pdftex bereit: besonders markant Zeichenvorsprünge und Fontexpansion,
+% weiterhin die Justierung von Zeichenabständen innerhalb Wörter und zusätzliches Kerning sowie
+% durch Bindestrich trennbaren Sperrsatz (Tracking) und die Möglichkeit, alle oder ausgewählte
+% Ligaturen abzuschalten.
+% Es erlaubt, diese Features auf anpassbare Fonts anzuwenden und alle mikrotypographischen Aspekte
+% dieser Fonts in einer einfachen und flexiblen Art und Weise zu konfigurieren. Einstellungen
+% für verschiedene Schriftarten werden bereitgestellt.\footnote{
+% Zur Zeit stellt dieses Paket Protrusionseinstellungen für Computer Modern
+% Roman, Palatino, Times, <URW> Garamond, Adobe Garamond und Minion,
+% Bitstream Charter und Letter Gothic, die <AMS> Symbole und Euler Fonts,
+% verschiedene Eurosymbol Schriftarten, sowie einige allgemeine Einstellungen für unbekannte Schriftarten
+% (siehe~Tabelle~\ref{tab:fonts} auf Seite~\pageref{tab:fonts}) bereit.
+% Beisteuerungen sind gern gesehen.}
+%
+% Zu beachten ist, dass Fontexpansion und Zeichenvorsprünge nur mit
+% \pdftex ($\geq$ Version 0.14f) arbeiten. Automatische Fontexpansion erfordert mindestens
+% Version 1.20 oder neuer. Ligaturen zu deaktivieren erfordert \pdftex\ 1.30, Sperrsatz und
+% die Justierung von Zeichenabständen innerhalb Wörter sowie Kerning erfordern Version 1.40. Das
+% Paket aktiviert standardmäßig Protrusion und Expansion, falls sicher angenommen werden kann, dass diese
+% funktionieren. Diese beiden Features sind ebenso verfügbar mit \luatex. Das
+% \microtype\ Paket arbeitet nicht mit \xetex.
+%
+% Das alternative Paket \letterspace, welches ebenso mit einfachem \TeX arbeitet,
+% stellt nur die Befehle für Sperrsatz (Letter-spacing) bereit, und lässt Support für alle
+% anderen Erweiterungen aus (siehe Abschnitt~\ref{sec:lettersp}).
+%
+%\bigskip\noindent
+% Dieses Paket ist urheberrechtlich geschützt \textcopyright\ 2004\kern.09em--2010 R Schlicht.
+% Es darf vertrieben und/oder modifiziert werden unter den Bedingungen der
+% \IfFileExists{lppl.tex}{\hyperref[LPPL:LPPL]}{\href{http://www.latex-project.org/lppl/}}
+% {\LaTeX\ Project Public License},
+% entweder Version~1.3c dieser Lizenz oder alternativ jeder späteren Version.
+% Das Projekt hat den <LPPL> Wartungsstatus `author-maintained'.
+%\end{abstract}
+%
+%
+%\newpage
+%\emptypdfpageresources ^^A layers of the logo
+%\tableofcontents
+%\listoftables
+%
+%
+%\newpage
+%\section{Mikrotypographie mit \pdftex}\label{sec:micro-type}
+%
+% \pdftex, die \TeX\ Erweiterung geschrieben von \thanh, führt eine Reihe
+% mikrotypographischer Features ein. welche es nicht nur zum Werkzeug der Wahl
+% für die Erstellung elektronischer Dokumente, sondern auch Werke überragender, altehrwürdiger
+% Typographie machen: am bedeutendsten \textit{Zeichenvorsprünge (Character Protrusion, auch bekannt als margin kerning)}
+% und\textit{Fontexpansion}. \thanh s Thesis zitierend:
+%
+%\changes{v1.9b}{2006/01/13}{add samples of micro-typographic features}
+%\microtypesample{\small
+% `Margin kerning bezeichnet die Justierung der Zeichen an den Rändern (margin) eines
+% gesetzten Textes. Eine vereinfachte Anwendung von Margin kerning ist hängende
+% Zeichensetzung. Margin kerning ist notwendig für optische Ausrichtung der Ränder
+% eines gesetzten Textes, weil mechanisches Angleichen der Ränder diese eher stümperhaft
+% aussehen lässt. Einige Zeichen können eine Zeile für das menschliche Auge kürzer
+% erscheinen lassen als andere. Solche Zeichen um einen passenden Betrag zu den Rändern zu
+% verschieben würde das Aussehen des Textes massiv verbessern.
+%
+% Mit Fontexpansion zu verfassen ist die Methode, eine weitere oder engere
+% Variante des Fonts zu erschaffen, welche die Wortzwischenräume mehr ausgleichen.
+% Eine Schriftart in einer losen Zeile kann durch eine weitere Variante ausgetauscht werden, sodass die Wortzwischenräume
+% weniger stark gestreckt werden. Gleichermaßen kann ein Font in einer dicht bepackten Zeile
+% durch eine schmalern Variante ersetzt werden, um die Abstände zu verringern.
+% Es besteht mit Sicherheit die potentielle Gefahr der Fontdeformierung wenn
+% solche Manipulationen vorgenommen werden, weshalb sie mit extremer Vorsicht vorgenommen
+% werden müssen. Das Potential, eine Zeilebreite mittels Fontexpansion zu justieren,
+% sollte bedacht werden, wenn ein Paragraph in Zeilen zerbrochen wird,
+% um bessere Stopppunkte zu wählen.' [\cite[p.~323]{ThanhThesis}]} ~\\
+%
+% Diesen beiden Features fehlte seit einiger Zeit eine einfache \LaTeX\ Benutzerschnittstelle.
+% Dann wurde das \cite{pdfcprot} Paket veröffentlicht, welches
+% \LaTeX\ Benutzern ermöglichte, Zeichenvorsprünge zu benutzen, ohne sich zu sehr
+% mit den Interna beschäftigen zu müssen.
+%
+% Fontexpansion allerdings war weiterhin schwierig zu utilisieren, da es erforderte,
+% dass die Fontmetriken für alle Ebenen der Erweiterung verfügbar waren.
+% Deswegen musste jeder, der von diesem Feature Gebrauch machen wollte, im Vorfeld
+% multiple Ausführungen der Schriftarten anfertigen. Shellskripte, um den Benutzer wenigstens
+% teilweise von dieser Last zu befreien, waren verfügbar~-- dennoch blieb es eine lästige Arbeit.
+% Darüber hinaus mussten alle Fonts weiterhin physisch erstellt werden, wodurch Kompilierungszeit
+% und Speicherplatz auf der Festplatte verschwendet wurden.
+%
+% Im Sommer 2004 implementierte \thanh\ eine Besonderheit, welche sich als eine
+% bedeutende Erleichterung für \TeX\ und \LaTeX\ Benutzer entpuppte: Fontexpansion kann nun
+% automatisch stattfinden. Das heißt, \pdftex\ braucht nicht länger die Fontmetriken der expandierten
+% Schriftart, sondern berechnet diese zur Laufzeit und komplett im Speicher.
+%
+%\bigskip\noindent
+% Nach diesem großen Sprung in der Anwendbarkeit stoppte die Entwicklung nicht.
+% Im Gegenteil, \pdftex\ wurde mit immer mehr besonderen Merkmalen ausgestattet: Version
+% 1.30 führte die Möglichkeit ein, \emph{alle Ligaturen auszuschalten}, Version 1.40
+% brachte ein robustes \emph{Letter-spacing} Kommando, die Möglichkeit
+% \emph{zusätzliches Zeichen Kerning} zu spezifizieren und die \emph{Justierung von Zeichenabständen innerhalb Wörter}.
+%
+% Robustes und per Bindestrich trennbares \emph{Letter-spacing (Tracking)} war immer
+% extrem schwierig in \TeX zu realisieren. Obwohl das \cite{soul} Paket
+% große Mühen unternahm um es möglich zu machen, konnte es trotzdem weiterhin in
+% bestimmten Situationen scheitern; allein das Tracking einer Schriftart für das ganze
+% Dokument blieb unmöglich. Wendet man die neue Erweiterung von \pdftex an, stellt dies
+% nicht länger ein Problem dar. Das \microtype\ Paket stellt die Möglichkeit bereit,
+% das Tracking anpassbarer Fontsets zu ändern, z.B., alle kleinen Kapitälchen.
+% Es führt außerdem die zwei neuen Kommandos \cs{textls} und \cs{lsstyle}
+% für ad-hoc Letter-spacing ein, welche wie normale Textkommandos benutzt werden können.
+% Beachten Sie, dass Letter-spacing nur im <PDF> Modus funktioniert.
+%
+% \emph{Zusätzliches kerning} für Zeichen einer Schriftart einzustellen ist besonders
+% nützliche für Sprachen, deren typographische Tradition es erfordert, bestimmte Zeichen
+% durch ein Leerzeichen abzutrennen. Es ist zum Beispiel üblich, in französischer
+% Typographie ein wenig Platz vor einem Fragezeichen, Ausrufezeichen und Semikolon zu lassen,
+% und ein wenig mehr Platz vorm Doppelpunkt und den Guillemets. Bis jetzt konnte das nur
+% erreicht werden, indem man diese Zeichen aktivierte (z.B.
+% mit dem \pkg{babel} Paket), was nicht immer eine praxistaugliche Lösung sein kann.
+% Im Kontrast zum Standard Kerning, welches in die Schriftarten eingebaut ist
+% (und welches natürlich wie üblich greift), basiert dieses Kerning auf einzelnen Zeichen
+% nicht auf Zeichenpaaren.
+%
+% \emph{Wortzwischenräume zu justieren} basiert auf der Idee, dass - um eine
+% uniforme Grauheit in einem Text zu erreichen - die Wortzwischenräume auch von den
+% Zeichen in der direkten Umgebung abhängen sollten. Wenn zum Beispiel ein Wort mit
+% einem `r' endet, sollte der folgende Abstand ein kleines bisschen kleiner sein als z.B. nach
+% einem `m'. Man kann von diesem Konzept wie von einer Erweiterung von \TeX s `space
+% factors' denken. Allerdings, während space factors alle drei Parameter dieser
+% Wortzwischenräume (oder Haftung) um den selben Betrag beeinflusst~-- das Kerning, den maximalen
+% Betrag, um den der Zwischenraum gestreckt oder geschrumpft werden kann
+% ~-- stellt \pdftex\ die Möglichkeit bereit, diese Parameter unabhängig voneinander
+% zu modifizieren. Darüber hinaus können die Werte für jeden Font anders eingestellt werden.
+% Außerdem -- und vielleicht am wichtigsten -- können diese Parameter nicht nur erhöht sondern
+% auch erniedrigt werden. Dieses Merkmal wird das Aussehen von Paragraphen vielleicht noch
+% mehr aufwerten.
+% Die Betonung liegt im letzten Satz auf dem Wort `vielleicht': diese Erweiterung ist immer
+% noch sehr experimentell -- speziell haben nur die letzten Zeichen im Moment Einfluss auf die Wortzwischenräume.
+% Außerdem sind die mit \microtype\ gelieferten Einstellungen nicht mehr als eine erste Annäherung,
+% weshalb ich es begrüßen würde, wenn Sie Korrekturen und Verbesserungen vornehmen.
+% Ich würde vorschlagen, die Begründung für die Einstellungen in Abschnitt~\ref{sub:conf-spacing} durchzulesen.
+%
+% Abschließend mag die Möglichkeit, für einen Font \emph{alle Ligaturen auszuschalten},
+% nützlich für Schreibmaschinenschriftarten sein.
+%
+%\emptypdfpageresources ^^A layers of the sample
+%\bigskip\noindent
+% Das \microtype\ Paket stellt für all diese mikrotypographischen
+% Erweiterungen eine Schnittstelle bereit. Alle mikrotypographischen Aspekte können individuell und einfach angepasst werden.
+% Die nächsten Kapitel werden einen Abriss aller Optionen und Anpassungsmöglichkeiten präsentieren.
+%
+%
+%\section{Loslegen}
+%
+% Es gibt keine Überraschungen beim Laden des Paketes:
+%\begin{verbatim}[morekeywords={[1]{microtype}}]
+%\usepackage{microtype}
+%\end{verbatim}
+% In den meisten Fällen ist das ausreichend, und falls Sie nicht an der Feinabstimmung
+% des mikrotypographischen Aussehens ihres Dokumentes (was unwahrscheinlich erscheint
+% da Sie dieses Paket benutzen, was ihr Interesse an typographischen Problemen bestätigt)
+% interessiert sind, können Sie den Rest dieses Dokumentes auslassen.
+%^^A
+% Falls Sie dies andererseits nicht befriedigt -- sei es aus theoretischen oder praktischen Gründen
+% -- wird Sie dieses Handbuch auf den Weg zu den erwünschten Ergebnissen und folgenden
+% Meilensteinen bringen:
+%
+%\changes{v2.2}{2007/06/06}{add overview}
+%\begin{itemize}
+% \item Das entsprechende mikrotypograpische Feature einschalten, entweder
+% mittels der respektiven package Option oder mittels des \cs{microtypesetup} Kommandos
+% (Abschnitt~\ref{sec:options}).
+% \item Wählen Sie die Schriftarten aus, auf welche dieses Feature angwendet werden soll, indem
+% Sie `Font Sets' deklarieren und aktivieren. Einige Sets sind vorerstellt und können direkt
+% in den Paketoptionen aktiviert werden
+% (Abschnitt~\ref{sec:font-sets}).
+% \item Feinabstimmen der mikrotypographischen Einstellungen an den Schriftarten oder Sets von Schriftarten
+% (Abschnitt~\ref{sec:fine-tuning}).
+% \item Falls sie der Typ sind, der immer weiter marschiert, werden
+% Sie sicher an der Möglichkeit zu Context-abhängigen Einstellungen interessiert sein
+% (Abschnitt~\ref{sec:context}).
+% \item Wir ermutigen Sie sogar, den Pfad typographischer Tugend zu verlassen
+% und ein paar Schafe zu stehlen (section~\ref{sec:lettersp}) oder auf andere Weise einzudringen
+% (section~\ref{sec:disable-ligatures}).
+% \item Sollten sich Ihnen ein Hindernis auftun, folgen Sie den Tipps und Warnungen
+% (Abschnitt~\ref{sec:caveats}).
+%\end{itemize}
+%
+%
+%\section{Optionen}\label{sec:options}
+%
+% Wie viele andere \LaTeX\ Pakete auch akzeptiert das \microtype\ Paket Optionen
+% über die bekannte |Schlüssel=Wert| Syntax. Im Folgenden finden sie eine Beschreibung aller
+% \key{Schlüssel} und ihrer möglichen |Werte|
+% (`|true|' kann ausgelassen werden; multiple Werte (falls erlaubt) müssen eingeklammert
+% werden; der Standardwert wirds rechts gezeigt, angeführt von einem Sternchen
+% falls es abhängig von der \pdftex\ Version und/oder dem Output Modus ist).
+%
+%
+%\subsection{Die mikro-typographischen Features anschalten}\label{sub:options-microtype}
+%
+%\Describe{Option}{protrusion}
+% {*true,false,compatibility,nocompatibility,:Name des Font Sets}
+%\DescribeOption{expansion}
+% Dies sind die hauptsächlichen Optionen um die Ebene mikro-typographischer Verfeinerung,
+% welche die Schriftarten in ihrem Dokument erhalten sollten, zu kontrollieren.
+% Standardmäßig ist das Paket recht gierig; Character Protrusion ist aktiviert, Fontexpansion
+% wird nur in Situationen abgeschaltet, in denen \pdftex\ die Fonts nicht automatisch expandieren
+% kann, also falls es entweder zu alt ist (Versionen vor 1.20)
+% oder falls der Output Modus <DVI> ist (siehe Abschnitt~\ref{sub:options-misc}).
+% Anders gesagt wird \microtype\ versuchen, soviel Mikrotypographie anzuschalten wie
+% es sicher als funktionierend unter den gegebenen Bedingungen erwarten kann
+% (und normalerweise ist es nicht nötig, das Paket mit anderen Optionen für die <PDF>
+% bzw. <DVI> Modi zu laden).
+%
+% Protrusion und Expansion können getrennt (de)aktiviert werden, indem man den betreffenden
+% Schlüssel auf |true| bzw. |false| setzt. Die
+% \opt{activate} Option
+%\DescribeOption{activate}
+% kürzt das Setzen beider Optionen zur gleichen Zeit ab. Deswegen haben die folgenden Zeilen
+% alle denselben Effekt (wenn man <PDF> Dateien mit einer aktuellen Version
+% von \pdftex erstellt):
+%\begin{verbatim}
+%\usepackage[protrusion=true,expansion]{microtype}
+%\end{verbatim}
+%\begin{verbatim}
+%\usepackage[activate={true,nocompatibility}]{microtype}
+%\end{verbatim}
+%\begin{verbatim}
+%\usepackage{microtype}
+%\end{verbatim}
+%\smallskip
+% Wenn \pdftex\ Fontexpansion und Character Protrusion verwendet, können Zeilenumbrüche
+% (und konsequenterweise auch Seitenumbrüche) unterschiedlich ausfallen. Wenn das nicht gewünscht ist
+% -- weil sie z.B. ein Buch neu setzen, dessen Seitenumbrüche sich nicht ändern dürfen --
+% können Sie den Wert |compatibility| an die \opt{protrusion}
+% und/oder \opt{expansion} Optionen hängen. Aus typographischer Sicht jedoch werden die Ergebnisse
+% suboptimal sein, weshalb der Wert standardmäßig |nocompatibility| ist.
+%
+% Abschließend können Sie auch den Namen eines Font Sets angeben, auf welches
+% Character Protrusion und/oder Fontexpansion beschränkt werden sollten, siehe auch
+% Abschnitt~\ref{sec:font-sets} für eine detaillierte Beschreibung. Spezifizieren eines Font Sets
+% für ein Features aktiviert dieses Features implizit mit.
+%
+%\medskip
+%\Describe{Option}{tracking}{true,!false,:font set name}
+%\DescribeOption{kerning}
+%\DescribeOption{spacing}
+% Es existiert keine Kompatibilitätsebene für die neuen Erweiterungen Tracking,
+% zusätzliches Kerning und Wortzwischenräume (interword spacing). Deshalb können sie nur an-
+% oder ausgeschaltet werden, oder sie können aktiviert werden indem man einen Setnamen an die
+% Option leitet. Standardmäßig ist keines der Features angeschaltet.
+%
+%\begin{table}\small
+%\changes{v2.3a}{2008/02/25}{add table of available and enabled features}
+%\caption{Verfügbarkeit mikro-typographischer Features}\label{tab:available-features}
+%\catcode`\!=13 \def!{\textcolor{thegreen}{\hskip.9em $\bigstar$}}
+%\catcode`\?=13 \def?{\textcolor{theblue} {\hskip 1em $\boxtimes$}}
+%\catcode`\_=13 \def_{\textcolor{thered} {\hskip 1em $\varnothing$}}
+%\setlength\fboxsep{4pt}
+%\leavevmode\kern-\dimexpr\fboxsep+\fboxrule\relax
+%\fcolorbox{theframe}{white}{^^A
+%\begin{minipage}{\textwidth}
+%\def\arraystretch{1.2}
+%\begin{tabular}{*3{@{}L{40pt}}*2{@{}L{43pt}}*4{@{}L{37pt}}@{}}
+% \multicolumn{3}{@{}l}{\footnotesize \TeX\ engine}
+% & \multicolumn{6}{@{}l}{\footnotesize Mikrotypographische Features}\\
+%\cmidrule(r){1-3}\cmidrule{4-9}
+% \footnotesize Engine
+% & \footnotesize Version
+% & \footnotesize Output
+% & \footnotesize Protrusion
+% & \footnotesize Expansion
+% & \footnotesize (= auto)
+% & \footnotesize Kerning
+% & \footnotesize Spacing
+% & \footnotesize Tracking\\
+%\cmidrule(r){1-1}\cmidrule(r){2-2}\cmidrule(r){3-3}\cmidrule(r){4-4}
+%\cmidrule(r){5-5}\cmidrule(r){6-6}\cmidrule(r){7-7}\cmidrule(r){8-8}\cmidrule{9-9}
+% \pdftex
+% & $\less$ 0.14f & <DVI>/<PDF> & _ & _ & _ & _ & _ & _\\
+% & $\geq$ 0.14f & <DVI>/<PDF> & ! & ? & _ & _ & _ & _\\
+% & $\geq$ 1.20 & <DVI> & ! & ? & _ & _ & _ & _\\
+% & & <PDF> & ! & ! & ! & _ & _ & _\\
+% & $\geq$ 1.40 & <DVI> & ! & ? & _ & ? & ? & _\\
+% & & <PDF> & ! & ! & ! & ? & ? & ?\,\textsuperscript{\itshape a}\\
+% \luatex ^^A we will have to re-model kerning, spacing and tracking with \luatex:
+% & $\geq$ 0.25 & <DVI> & ! & ? & _ & _ & _ & _\\
+% & & <PDF> & ! & ! & ! & _ & _ & _\\
+%\bottomrule
+%\end{tabular}^^A
+%\vskip4pt\footnotesize
+%\hskip-.8em
+% ! = aktiviert\quad
+% ? = nicht aktiviert\quad
+% _ = nicht verfügbar
+%\hfill
+% \textit{a}\quad $\geq$ 1.40.4 empfohlen
+%\vskip3pt
+%\end{minipage}^^A
+%}\kern-\dimexpr\fboxsep+\fboxrule\relax ^^A end \fcolorbox
+%\end{table}
+%
+%\medskip\noindent
+% In Tabelle~\ref{tab:available-features} erhalten Sie einen Überblick über die verfügbaren
+% und standardmäßig aktivierten mikro-typographischen Features für die
+% relevanten \pdftex\ Versionen und Output Modi.
+%
+%\medskip\noindent
+% Ob Ligaturen deaktiviert werden sollten kann nicht mittels einer Option kontrolliert werden,
+% sondern per \cs{DisableLigatures} Kommando, welches in
+% Abschnitt~\ref{sec:disable-ligatures} erklärt wird.
+%
+%
+%\subsection{Zeichenvorsprünge}\label{sub:options-protrusion}
+%
+%\Describe{Option}{factor}{:integer}[1000]
+% Benutzen Sie diese Option, um global einzustellen, um welchen Betrag die Zeichen
+% hervorragen sollen. Während ein Wert von 1000 bedeutet, dass der volle Vorsprung
+% wie in der Konfiguration (siehe Abschnitt~\ref{sub:protrusion}) spezifiziert benutzt wird,
+% bedeutet ein Wert von 500 entsprechend die Halbierung der Protrusion.
+% Dies kann nützlich sein, falls Sie grundsätzlich zufrieden mit den Einstellungen sind,
+% aber bevorzugen, wenn die Zeichenhervorragungen weniger oder mehr zu sehen sind.
+% (z.B. wenn sie so stolz darauf sind, dieses Feature nutzen zu können, dass sie es jedem
+% zeigen wollen, oder -- um eine Motivation zu nennen, die in Einverständnis mit typographischer
+% Korrektheit steht -- falls sie eine große Schriftart nutzen, die gemäßigtere Vorsprünge verlangt).
+%
+%\medskip
+%\Describe{Option}{unit}{!character,:dimension}
+% Diese Option wird in Abschnitt~\ref{sub:protrusion} erklärt, ebenso das Kommando
+% \cs{SetProtrusion}. Seien sie vorsichtig bei Benutzung dieser Optionen!
+%
+%
+%\subsection{Fontexpansion}\label{sub:options-expansion}
+%
+%\Describe{Option}{auto}{*true,false}
+% Wie bereits im Kapitel~\ref{sec:micro-type} angemerkt, können die expandierten Versionen
+% der Fonts automatisch erstellt werden. Diese Option ist standardmäßig an, wenn
+% \pdftex Version 1.20 oder höher beträgt und der Output Modus <PDF> ist;
+% ansonsten ist die Option deaktiviert.
+% Falls \opt{auto} auf false gesetzt ist, müssen die einzelnen Fonts aller Expansionsstufen
+% bereits existieren (mit nach dem Schema \meta{font~name}\texttt{\textpm}\meta{expansion value} benannten Dateien,
+% z.B. \file{cmr12+10}, wie beschrieben in \cite{pdftexman}).
+%\iffalse ^^A no longer true (1.40?)
+% Falls expandierte Instanzen der Fonts verfügbar sind, werden sie verwendet,
+% egal ob \opt{auto} auf true oder false gesetzt ist.
+%\fi
+%
+%\changes{v1.9}{2005/08/27}{add remark about Type\,1 fonts required for
+% automatic font expansion}
+% Automatische Fontexpansion funktioniert nicht mit Bitmap Fonts, weswegen Sie, falls Sie
+% die Computer Modern Roman Fonts in <T1> Kodierung\footnote{
+% Beiläufig bemerkt, Type\,1 Format und <T1> Encoding hängen in keiner
+% Weise miteinander zusammen, abgesehen davon, dass beide mit einem `T' anfangen und mit einer `1' enden.},
+% nutzen, entweder \pkg{cm-super} Fonts installieren oder die Latin Modern
+% Fonts (package \pkg{lmodern}) benutzen sollten.
+%
+%\medskip
+%\Describe{Option}{stretch}{:integer}[20]
+%\DescribeOption{shrink}
+% Sie können bestimmen, wie sehr ein Font maximal gestreckt bzw. geschrumpft werden kann.
+% Die Zahl wird durch 1000 dividiert, sodass ein Stretch Limit von 10 bedeutet,
+% dass ein Font um bis zu ~1\% expandiert werden kann.
+% Das standardmäßige Stretch Limit ist 20; das Shrink Limit ist standardmäßig gleich
+% dem Stretch Limit.
+%
+%\medskip
+%\Describe{Option}{step}{:integer}[\MaybeDefault{1}]
+% Fonts werden nicht um beliebige Mengen expandiert, sondern nur um gewisse bestimmte
+% Schritte innerhalb der Expansionslimits.Mit aktuellen Version von \pdftex\ (1.40 oder
+% neuer) ist diese Option standardmäßig auf 1 gesetzt, damit \pdftex\ die
+% maximale Anzahl an Instanzen der jeweiligen Fonts ausprobieren kann und somit den bestmöglichen
+% Output garantiert.\footnote{
+% Die Kehrseite an dieser Standardeinstellung ist, dass \pdftex\ vielleicht bei großen Dokumenten
+% nicht genügend Speicher zur Verfügung hat; in diesem Falle sollten Sie über die Fehlermeldungen in der `Hints
+% and caveats' Abschnitt~(\ref{sec:caveats}) nachlesen oder es mit einem größeren \opt{step} probieren.}
+% Ältere \pdftex\ Versionen jedoch mussten jede einzelne Fontinstanz in der
+% <PDF> Datei einfügen, wodurch die Dateigröße teils dramatisch erhöht wurde. Deswegen --
+% sollten Sie eine pre-1.40 \pdftex\ Version nutzen -- ist \opt{step} standardmäßig
+% auf ein Fünftel des kleineren Wertes von \opt{stretch} und \opt{shrink} gesetzt.
+%
+%\medskip
+%\Describe{Option}{selected}{true,!false}
+% Wenn Fontexpansion angewendet wird ist es möglich, die Expansion einiger sensibler Zeichen,
+% welche schnell deformiert erscheinen können (z.B. das `O' im Kontrast zum `I'), zu begrenzen.
+% Das nennt sich \emph{selected expansion} und seine Benutzung erlaubt, die Stretch und Shrink
+% Limits zu erhöhen (auf z.B. 30 anstelle von 20); allerdings ist der Zuwachs limitiert, da
+% gleichzeitig die durchschnittliche Stretch Varianz verringert wird
+% Deswegen ist diese Option standardmäßig auf
+% |false| gesetzt, sodass alle Zeichen um denselben Betrag expandiert werden.
+% Siehe Abschnitt~\ref{sub:expansion} für eine detailliertere Beschreibung.
+%
+%
+%\subsection{Tracking/Letterspacing}\label{sub:option-tracking}
+%
+%\Describe{Option}{letterspace}{:integer}[100]
+% Diese Option verändert den Standardbetrag fürs Tracking (siehe Abschnitt~\ref{sub:tracking})
+% sowie Letterspacing (siehe Abschnitt~\ref{sec:lettersp}). Der Betrag wird in Tausendsteln
+% von 1\,em angegeben; zulässige Werte sind im Bereich von \textminus1000
+% bis +1000.
+%
+%
+%\subsection{Verschiedene Optionen}\label{sub:options-misc}
+%
+%\Describe{Option}{DVIoutput}{true,*false}
+% \pdftex\ ist nicht bloß in der Lage, <PDF> Dateien zu erstellen, sondern kann auch <DVI>
+% Dateien erzeugen.\footnote{
+% Neuere \TeX\ Systeme benutzen \pdftex\ als Standard Engine auch für
+% <DVI> Ausgaben.}
+% Letztere können mit der Option \opt{DVIoutput} erzwungen werden, was
+% \cmd\pdfoutput\ auf Null setzt.
+%
+%\changes{v1.5}{2004/12/15}{add note about \opt{DVIoutput} option}
+% Beachten Sie, dass dies Pakete verwirren wird, die auf den Wert von
+% \cmd\pdfoutput\ angewiesen sind, falls diese früher geladen wurden; so erwarten sie,
+% dass sie aufgerufen wurden um eine <PDF> Ausgabe zu erzeugen, obwohl das nicht der Fall ist.
+% Diese Pakete sind u.a.: \pkg{graphics}, \pkg{color},
+% \pkg{hyperref}, \pkg{pstricks} und natürlich \pkg{ifpdf}. Entweder laden sie diese Pakete nach
+% \microtype\ oder benutzen die Anweisung |\pdfoutput=0| früher
+% -- in letzterem Fall ist die \opt{DVIoutput} Option redundant.
+%
+% Wenn man <DVI> Dateien erstellt, muss Fontexpansion explizit aktiviert werden.
+% Weder Letterspacing noch \emph{automatische} Fontexpansion werden funktionieren, da
+% die postprocessing Treiber (|dvips|, |dvipdfm| etc.) sowie die <DVI> Betrachter
+% nicht in der Lage sind, die Fonts on the fly zu generieren.
+%
+%\changes{v2.0}{2006/11/28}{add remark about `\opt{draft}' option disabling \microtype\
+% (noted by \contributor Michalis Miatidis <miatidis\at informatik.rwth-aachen.de>)}
+% ^^A private mail, 2006/11/26
+%\medskip
+%\Describe{Option}{draft}{true,!false}
+%\DescribeOption{final}
+% Falls die \opt{draft} Option an das Paket geleitet wird, werden \emph{alle
+% mikro-typographischen Erweiterungen ausgeschaltet}, was zu unterschiedlichen Zeilen-
+% und somit Seitenumbrüchen führen kann. Die \opt{draft} und \opt{final} Optionen können
+% außerdem von den Optionen der Klasse geerbt werden; natürlich kann man diese mit den
+% Optionen der Pakete überschreiben. Falls man z.B. die Klassenoption |draft| verwendet, um
+% jegliche übervollen Boxen anzuzeigen, sollte man \microtype\ mit der |final|
+% Option laden.
+%
+%\medskip
+%\Describe{Option}{verbose}{true,!false,errors,silent}
+% Informationen bzgl. der Einstellungen an jeglichen Fonts werden in die Log Datei
+% geschrieben, sofern man die \opt{verbose} Option aktiviert. Wenn \microtype\ auf ein nicht-fatales Problem trifft
+% (z.B. ein unbekanntes Zeichen in den Einstellungen oder nicht-existente Einstellungen),
+% gibt es standardmäßig nur eine Warnung aus und versucht weiterzumachen.
+% Lädt man das Paket mit |verbose=errors| werden alle Warnungen in Fehler verwandelt, sodass
+% man sicher sein kann, dass kein Problem unerkannt bleibt. Falls man
+% andererseits allen Warnungen nachgegangen ist und sich entscheidet, diese zu ignorieren,
+% kann man \microtype\ mittels |verbose=silent| zum Schweigen bringen.
+%
+%\medskip
+%\Describe{Option}{babel}{true,!false}
+% Das Paket mit der \opt{babel} Option zu laden wird die Zeichensetzung
+% der jeweiligen ausgewählten Sprache anpassen. Mehr Information hierzu in Abschnitt~\ref{sec:context}.
+%
+%\medskip
+%\Describe{Option}{config}{:file name}[microtype]
+% Verschiedene Einstellungen für dieses Paket werden aus einer Hauptkonfigurationsdatei geladen,
+% standardmäßig ist dies \file{microtype.cfg} (siehe Abschnitt~\ref{sub:config-file}).
+% Sie können eine andere Konfigurationsdatei wählen, indem sie deren Name
+% mittels \emph{ohne die Dateiendung} angeben, z.B. |config=mycrotype|.
+%
+%\iffalse ^^A ... waiting for bug reports before documenting yet another option ...
+%\medskip
+%\Describe{Option}{defersetup}{!true,false}
+% Anders als in früheren Versionen verzögert \microtype\ seit Version 1.9a sein
+% Setup bis zum Ende der Präambel. Dies hat mindestens 2 Vorteile: Das unten
+% beschriebene Kommando \cs{microtypesetup} kann genutzt werden um Paketoptionen später
+% zu ändern und es ist nicht länger notwendig, die Standardfonts und Enkodierungen
+% noch vor \microtype zu laden. Es gibt nur ein mögliches Problem: Falls eine Box
+% innerhalb der Präambel konstruiert wird \emph{und} diese Box eine Schriftart enthält,
+% die nicht geladen wird bevor die Box im Dokument verwendet wird, so wird diese Schriftart
+% nicht eingerichtet. Sollte dieser extrem unwahrscheinliche Fall auftreten, sollten Sie
+% |defersetup=false| setzen. Dann greifen jedoch die angesprochenen Restriktionen.
+%
+%\medskip
+%\Describe{Option}{copyfonts}{true,!false} ^^A and another one ...
+% There are some restrictions as to what \pdftex\ can do with a font: Firstly,
+% it cannot expand a single font with different parameters, secondly, it cannot
+% apply different protrusion settings to one font within the same paragraph.
+% Both restrictions, which only matter with a context-sensitive setup
+% (cf.~section~\ref{sec:context}), can be circumvented with the \opt{copyfonts}
+% option: when it is set to |true|, \microtype\ will use font copies to work
+% on. This option will automatically be set to |true|, whenever protrusion or
+% expansion settings with a |context| keyword are encountered. If these
+% settings are loaded after the preamble, however, it is too late, and you
+% should set the \opt{copyfonts} option manually.
+% This only works with \pdftex\ 1.40.4 or later.
+%\fi
+%
+%
+%\ifcmr\else\pagebreak\markright{}\fi ^^A layout
+%\subsection{Changing options later}\label{sub:options-cmd}
+%
+%\Describe{Macro}{\microtypesetup}{key\,|=|\,value list}
+% Innerhalb der Präambel akzeptiert dieses Kommando alle oben genannten Paketoptionen
+% (außer |config|).
+% Im Dokumentkörper kann dieser Aufruf verwendet werden, um grundlegende Einstellungen
+% der mikro-typographischen Erweiterungen zu verändern. Es akzeptiert dann alle Optionen aus
+% Abschnitt~\ref{sub:options-microtype}: \key{expansion}, \key{protrusion} und
+% \key{activate}, welche wiederum die Werte |true|, |false|,
+% |compatibility| oder |nocompatibility| erhalten können, \key{tracking}, \key{kerning} und
+% \key{spacing} mit den zulässigen Werten |true| oder |false|.
+% Den Namen eines Fonts an die Option zu leiten ist nicht erlaubt.
+% Benutzt man dieses Kommando, so könnte man z.B. temporär Fontexpansion ausschalten
+% indem man wie folgt verfährt:
+%\begin{verbatim}
+%\microtypesetup{expansion=false}
+%\end{verbatim}
+%
+%
+%\section{Fonts für Mikrotypographie auswählen}\label{sec:font-sets}
+%
+% Standardmäßig wird Character Protrusion auf alle Textschriftarten angewandt, die
+% im Dokument genutzt werden, und eine grundlegende Auswahl an Fonts wird Fontexpansion
+% unterzogen. Sie wollen vielleicht anpassen, welche Schriftarten den Vorzug bekommen sollten,
+% mikro-typographisch behandelt zu werden. Dies kann geschehen, indem man
+% `Font Sets' deklariert und auswählt; diese Font Sets werden mittels Font Attributen spezifiziert,
+% die zutreffen müssen.
+%
+%\medskip
+%\Describe{Macro}{\DeclareMicrotypeSet}{?features,set name,set of fonts}
+%\DescribeMacro{\DeclareMicrotypeSet*}
+% Dieses Kommando deklariert ein neues Font Set, auf welches die the mikro-typographischen
+% Erweiterungen angewendet werden. Das optionale Argument kann eine mit Komma separierte
+% Liste von Features enthalten, auf die das jeweilige Set beschränkt werden soll.
+% Die mit Stern versehene Variante deklariert \emph{und} aktiviert das Font Set
+% gleichzeitig.
+%
+% \paragraph{Das Font Set} wird durch den <NFSS> Font Attributen zugewiesene Werte definiert:
+% Kodierung, Familie, Serie, Form und Größe (siehe auch~\cite{fntguide}).
+% Wir fangen mit einem Beispiel an. Dieses Paket definiert einen Font namens
+% `|basictext|' in der Hauptkonfigurationsdatei wie folgt:
+%\begin{verbatim}
+%\DeclareMicrotypeSet{basictext}
+% { encoding = {OT1,T1,T2A,LY1,OT4,QX,T5},
+% family = {rm*,sf*},
+% series = {md*},
+% size = {normalsize,footnotesize,small,large}
+% }
+%\end{verbatim}
+% Wenn Sie nun
+%\begin{verbatim}[deletekeywords={[1]{protrusion}}]
+%\UseMicrotypeSet[protrusion]{basictext}
+%\end{verbatim}
+% in der Präambel des Dokuments aufrufen, werden nur Fonts mit den Kodierungen <OT1>, <T1>,
+% <T2A>, <LY1>, <OT4>, <QX> oder <T5> aus Roman oder Sans Serif Familien, normalen (oder
+% `medium') Serien und in per \cmd\normalsize, \cmd\footnotesize, \cmd\small\ oder \cmd\large
+% aufgerufenen Größen hervorragen. Mathematische Schriftarten andererseits
+% werden das nicht, da sie anderen Kodierungen angehören; gleiches gilt für
+% fettgedruckte oder große Schriftarten etc.
+%
+% Falls eine Attributsliste leer ist oder fehlt -- wie das `shape' Attribut
+% im obigen Beispiel -- führt dies zu keiner Einschränkung, sprich, es ist äquivalent dazu
+% \emph{alle} möglichen Werte für dieses Attribut einzusetzen.
+% Deswegen ist das vordefinierte Set `|alltext|', welches wie folgt deklariert ist:
+%\begin{verbatim}
+%\DeclareMicrotypeSet{alltext}
+% { encoding = {OT1,T1,T2A,LY1,OT4,QX,T5,TS1} }
+%\end{verbatim}
+% viel weniger restriktiv. Die einzige Bedingung lautet, dass die Kodierung stimmen muss.
+%
+% Folgt einem Wert ein Asterisk (wie `|rm*|' und `|sf*|' im ersten Beispiel),
+% kennzeichnet dieser keinen <NFSS> Code, sondern wird in das
+% |\|\meta{value}|default| des Dokuments übersetzt, z.B. \cmd\rmdefault.\footnote{
+% Diese Übersetzungen geschehen zum \cmd\AtBeginDocument, was bedeutet, dass
+% Änderungen an den Standardwerten innerhalb der Präambel auch berücksichtigt werden.
+% Nur falls Font Standards \cmd\AtBeginDocument\ vom Benutzer selbst geändert werden,
+% müssen Sie \microtype\ nach diesen Änderungen laden.}
+% Ein einzelner Asterisk bedeutet |\|\meta{attribute}|default|, z.B.
+% \cmd\encodingdefault, gleichermaßen \cmd\normalsize\ für die Größenachse.
+% Größen können entweder als Dimension angegeben werden (`|10|' oder `|10pt|') oder
+% als Größenwahlkommando \emph{ohne} den Backslash. Sie können sogar Bereiche
+% (z.B. `|small-Large|') wählen; während die untere Grenze im Bereich enthalten ist, gilt
+% dies nicht für die obere Grenze. Deshalb würde `|12-16|' beispielsweise 12\,pt,
+% 13.5\,pt und 15.999\,pt enthalten, aber nicht 16\,pt. Es ist nicht erlaubt, die untere
+% oder obere Grenze auszulassen (`|-10|', `|large-|').
+%
+% Zusätzlich zu diesem Deklarationsschema können sie einzelne Schriften zu einem
+% Set hinzufügen, indem Sie den `|font|' Schlüssel nutzen, welcher die Aneinanderreihung aller
+% Fontattribute, getrennt durch Slashes, erwartet, das heißt,
+%`|font|\,|=|\,\meta{encoding}|/|\meta{family}|/|\meta{series}|/|\meta{shape}|/|\meta{size}'.
+% Das erlaubt uns, Font Sets zu Sets hinzuzufügen, von denen sie sonst disjunkt sind.
+% Falls Sie zum Beispiel wollen, dass die Roman Familie in allen Größen hervorragt,
+% aber nur die normal große, möglicherweise kursive typewriter Font (im Kontrast zum
+% z.B. kleinen Font), so könnten sie das Set so deklarieren:
+%\begin{verbatim}[deletekeywords={[1]{protrusion}}]
+%\DeclareMicrotypeSet[protrusion]
+% { myset }
+% { encoding = T1,
+% family = rm*,
+% font = {T1/tt*/m/n/*,
+% T1/tt*/m/it/*} }
+%\end{verbatim}
+% Wie Sie dem Beispiel entnehmen können, ist die Asterisk Notation auch für
+% den |font| Schlüssel zulässig. Ein einzelner Asterisk ist äquivalent zu `|*/*/*/*/*|', also dem
+% normalen Font. Befehle zur Größenwahl sind auch möglich, allerdings sind keine Bereiche erlaubt.
+%
+%\medskip\noindent
+% Tabelle~\ref{tab:predefined-font-sets} listet die 9 vordefinierten Font Sets auf.
+% Diese können ebenfalls aktiviert werden, indem ihr Name an die Optionen
+% \opt{protrusion}, \opt{expansion}, \opt{tracking}, \opt{kerning} und
+% \opt{spacing} der Features geleitet wird, wenn das Paket geladen wird, z.B.:
+%\begin{verbatim}
+%\usepackage[protrusion=allmath,tracking=smallcaps]{microtype}
+%\end{verbatim}
+%
+%\begin{table}\microtypesetup{protrusion=false}\small
+%\caption{Vordefinierte Font Sets}\label{tab:predefined-font-sets}
+%\catcode`\!=13 \def!{\textcolor{thered}{$\varnothing$}}
+%\catcode`\/=13 \def/#1/{\textcolor{thegreen}{#1}}
+%\def<#1>{\textcolor{theblue}{\acronym{#1}}}
+%\setlength\fboxsep{4pt}
+%\leavevmode\kern-\dimexpr\fboxsep+\fboxrule\relax
+%\fcolorbox{theframe}{white}{^^A
+%\begin{minipage}{\textwidth}
+%\begin{tabular}{@{}L{65pt}L{80pt}*3{L{41pt}}L{67pt}@{}}
+% \footnotesize Set Name
+% & \multicolumn{5}{l}{\footnotesize Font attributes}\\
+%\cmidrule{2-6}
+% & \footnotesize Kodierung
+% & \footnotesize Familie
+% & \footnotesize Serie
+% & \footnotesize Shape
+% & \footnotesize Größe\\
+%\cmidrule(r){1-1}\cmidrule(r){2-2}\cmidrule(r){3-3}
+%\cmidrule(r){4-4}\cmidrule(r){5-5}\cmidrule{6-6}
+% |all|
+% & !
+% & !
+% & !
+% & !
+% & ! \\
+%\cmidrule(r){1-1}
+% |alltext|\linebreak(|allmath|)
+% & Textkodierungen, <TS1>\linebreak (<OML>, <OMS>, <U>)
+% & !
+% & !
+% & !
+% & ! \\
+%\cmidrule(r){1-1}
+% |basictext|\linebreak(|basicmath|)
+% & Textkodierungen \linebreak (<OML>, <OMS>)
+% & /\cmd\rm|*|/,\linebreak /\cmd\sf|*|/
+% & /\cmd\md|*|/
+% & !
+% & /\cmd\normalsize/, /\cmd\footnotesize/, /\cmd\small/, /\cmd\large/\\
+%\cmidrule(r){1-1}
+% |smallcaps|
+% & Textkodierungen
+% & !
+% & !
+% & /\cmd\sc|*|/
+% & ! \\
+%\cmidrule(r){1-1}
+% |footnotesize|
+% & Textkodierungen, <TS1>
+% & !
+% & !
+% & !
+% & |-|/\cmd\small/\\
+%\cmidrule(r){1-1}
+% |scriptsize|
+% & Textkodierungen, <TS1>
+% & !
+% & !
+% & !
+% & |-|/\cmd\footnotesize/\\
+%\cmidrule(r){1-1}
+% |normalfont|
+% & /\cmd\encoding|*|/
+% & /\cmd\family|*|/
+% & /\cmd\series|*|/
+% & /\cmd\shape|*|/
+% & /\cmd\normalsize/\\
+%\bottomrule
+%\end{tabular}
+%\vskip4pt\footnotesize
+% `Textkodierungen' = <OT1>, <T1>, <T2A>, <LY1>, <OT4>, <QX>, <T5>
+%\hfill
+% `/\bslash\,\dots|*|/' = `/\bslash\,\dots|default|/'
+%\vskip3pt
+%\end{minipage}^^A
+%}\kern-\dimexpr\fboxsep+\fboxrule\relax ^^A end \fcolorbox
+%\end{table}
+%
+%\medskip
+%\Describe{Macro}{\UseMicrotypeSet}{?features,set name}
+% Dieses Kommando aktiviert ein vorher durch \cs{DeclareMicrotypeSet} deklariertes Font Set.
+% Nutzt man das optionale Argument, so kann man begrenzen, wieviele Features auf das Set angewendet werden.
+% Diese Anweisung hat nur einen Effekt, wenn das Features in den Paketoptionen aktiviert wurde.
+%
+%\medskip
+%\Describe{Macro}{\DeclareMicrotypeSetDefault}{?features,set name}
+% Falls ein Feature aktiviert ist, aber kein Font Set explizit gewählt wurde, so
+% werden die von diesem Befehl deklarierten Sets aktiviert. Standardmäßig wird das `|alltext|' Font
+% Set für Zeichenhervorhebungen und zusätzliches Kerning genutzt, das
+% `|basictext|' Set für Fontexpansion und Wortzwischenräume und das
+% `|smallcaps|' Set für Tracking.
+%
+%\medskip\noindent
+% Diese Anweisungen können nur in der Präambel oder der Hauptkonfigurationsdatei
+% verwendet werden. Ihre Bandbreite gilt global für das Dokument. Nur ein Set pro Feature
+% kann aktiviert werden.
+%
+%
+%\section{Micro Feinabstimmung}\label{sec:fine-tuning}
+%
+% Jedes Zeichen bedarf eines bestimmten Betrags an Protrusion, Kerning oder Spacing.
+% Es kann ebenso wünschenswert sein, die maximale Expansion bestimmter Zeichen zu
+% begrenzen. Überdies, da jeder Font anders aussieht, müssen Einstellungen speziell
+% auf eine Schriftart oder ein Set von Fonts zutreffen. Dieses Paket enthält flexible und
+% einfache Methoden, um diese feineren Aspekte der Mikrotypographie
+% anzupassen.
+%
+% Alle Anweisungen zur Feinabstimmung folgen prinzipiell derselben Syntax: Sie benötigen alle
+% 3 argumente; das Erste ist optional und kann zusätzliche Optionen enthalten;
+% im zweiten Argument werden Font Sets spezifiziert, auf welche die Einstellungen angewendet
+% werden sollen; das dritte Argument enthält die eigentlichen Einstellungen.
+%
+% Das Font Set, für welches die Einstellungen greifen sollen, wird mit der selben
+% Syntax von \meta{font axis}\,|=|\,\meta{Werteliste} Paaren deklariert wie für das
+% Kommando \cs{DeclareMicrotypeSet} (siehe Abschnitt~\ref{sec:font-sets}). Der einzige
+% Unterschied liegt darin, dass Werte mit anführendem Asterisk sofort übersetzt werden,
+% nicht am Ende der Präambel.
+%^^A
+%\ifcmr\else\enlargethispage{3\baselineskip}\fi ^^A layout
+%\changes{v1.7}{2005/03/23}{remove table of match order}^^A
+% Um die passenden Einstellungen für eine gegebene Schriftart zu finden, versucht das Paket alle
+% Kombinationen von Fontkodierung, Familie, Serie, Form und Größe, mit abnehmendem
+% Stellenwert in dieser Reihenfolge. Existieren zum Beispiel sowohl Einstellungen für die
+% momentanen Familien (z.B. |T1/cmr///|) als auch Einstellungen für kursive Fonts mit normalem Gewicht
+% (|T1//m/it/|), so würden die Einstellungen für die |cmr| Familie benutzt.\footnote{
+% Für alle Interessierten stellt Tabelle~\ref{tab:match-order} auf
+% Seite~\pageref{tab:match-order} die exakte Reihenfolge dar.}
+% Die Kodierung muss immer stimmen.
+%
+%\subsection{Character Protrusion}\label{sub:protrusion}
+%
+%\Describe{Macro}{\SetProtrusion}{?options,set of fonts,protrusion settings}
+% Benutzt man dieses Kommando, so kann man die Protrusionsfaktoren jedes einzelnen Zeichens
+% einer Schriftart oder eines Font Sets verändern. Ein sehr unvollständiges Beispiel wäre das folgende:
+%\begin{verbatim}
+%\SetProtrusion
+% { encoding = T1,
+% family = cmr }
+% { A = {50,50},
+% \textquoteleft = {700, } }
+%\end{verbatim}
+% Dies würde darin resultieren, dass der Buchstabe `A' um 5\% seiner Breite
+% auf beiden Seiten hervorragt; das linke Anführungszeichen würde hier um 70\% seiner Breite zum linken Rand hin
+% hervorragen. Angewandt wird das Beispiel auf alle Font Formen, Serien und Größen der
+% <T1>~kodierten Computer Modern Roman Familie.
+%
+%\paragraph{Die Protrusionseinstellungen}
+% bestehen aus \meta{Zeichen}\,|=|\,\meta{Protrusionsfaktoren} Paaren.
+%
+% Die Zeichen können entweder einzeln als solche angegeben werden (`|A|'),
+% als ein Symbolkommando (`\cmd\textquoteleft'), oder als Slotnummer: 3 Stellen
+% für dezimale Notation, angeführt von~|"| für hexadezimal, mit~|'| für
+% oktal (z.B. die `fl' Ligatur in <T1> Kodierung:~|029|, |"1D|, |'35|).
+% \mbox{8-bit} (und sogar <UTF-8>) Zeichen können direkt oder in
+% \LaTeX's traditioneller \mbox{7-bit} Notation eingegeben werden: sowohl |\"A| als auch \expandafter|\"A|
+% sind zulässig, vorausgesetzt, dass das Zeichen sowohl in der Input- als auch
+% der Fontkodierung deklariert wird. Sie haben ebenfalls die Möglichkeit, Zeichenlisten anzugeben,
+% für welche die Einstellungen übernommen werden sollen (siehe Abschnitt~\ref{sub:inherit}).
+%
+% Die Protrusionsfaktoren weisen einem Zeichen den Betrag zu,
+% um den sie zum linken Rand hin (erster Wert) bzw. rechten Rand hin (zweiter Wert) hervorragen
+% sollen. Standardmäßig sind die Werte relativ zur Breite des Zeichens zu verstehen,
+% sodass ein Wert von 1000 bedeutet, dass das Zeichen vollständig zwischen die Ränder
+% gelegt werden sollte, während es z.B. bei einem Wert von 50
+% um 5\% seiner Breite hervorragen würde. Negative Werte sind erlaubt, ebenso Zahlen größer
+% als 1000 (effektiv jedoch nicht mehr als 1\,em der Schriftart).
+% Sie können jede der beiden Zahlen auslassen, wenn Sie nicht wollen, dass
+% das jeweilige Zeichen zu dieser Seite hervorragen sollte. Das abtrennende Komma jedoch
+% dürfen Sie nicht auslassen.
+%
+%\paragraph{Optionen:}
+%\begin{options}
+% \item[\key{name}] Sie können den Protrusionseinstellungen einen Namen zuweisen, sodass
+% Sie in der Lage sind, es aus einer anderen Liste zu laden.
+% \item[\key{load}] Sie können eine andere Liste laden (vorausgesetzt, dass Sie dieser zuvor
+% einen Namen zugewiesen haben) bevor die aktuelle Liste geladen wird, wodurch die Fonts die
+% Werte der geladenen Liste erben.
+% \par
+% Dadurch kann die Konfiguration beträchtlich erleichtert werden. Sie können
+% zum Beispiel eine Standardliste für eine Schriftarte erstllen; Einstellungen für andere
+% Formen oder Serien können diese Einstellungen laden, sie erweitern und überschreiben
+% (da der jeweils letzte Wert Vorrang hat). Font Einstellungen werden
+% rekursiv geladen.
+% Die folgenden Optionen werden alle geladenen Listen beeinflussen:
+%\changes{v1.8}{2005/06/23}{add example for \texttt{factor} option}
+% \item[\key{factor}] Diese Option kann genutzt werden, um alle Protrusionsfaktoren
+% der Liste zu beeinflussen, was alle globalen \opt{factor} Einstellungen überschreibt (siehe
+% Abschnitt~\ref{sub:options-protrusion}). Wollen sie zum Beispiel, dass Fonts mit größeren Abmaßen
+% weniger hervorragen, könnten Sie die normalen Listen laden, allerdings
+% könnten Sie kleinere Faktoren darauf anwenden:
+%\begin{verbatim}
+%\SetProtrusion
+% [ factor = 700
+% load = cmr-T1 ]
+% { encoding = T1,
+% family = cmr,
+% size = large- }
+% { }
+%\end{verbatim}
+% \item[\key{unit}] Standardmäßig sind die Protrusionsfaktoren relativ zur Breite
+% des jeweiligen Zeichens. Die |unit| Option kann genutzt werden, um dieses Verhalten
+% zu überschreiben, sodass \microtype\ diese Werte als Tausendstel der
+% angegeben Werte deutet. Gibt man z.B. die Anweisung `|unit=1em|' hätte dies den Effekt, dass
+% ein Wert von 50 nun darin resultieren würde, dass ein ein Zeichen um
+% 5\% eines em des Fonts hervorragen würde (und somit die interne
+% Vermessung von \pdftex's \cmd\lpcode\ und \cmd\rpcode\ primitives simuliert).
+% Das normale Verhalten kann mittels |unit=character| wiederhergestellt werden.\footnote{
+% Die |unit| Option kann auch global an das Paket geleitet werden (siehe
+% Abschnitt~\ref{sub:options-protrusion}).
+% Allerdings werden alle vorliegenden Einstellungen unter der Annahme,
+% dass die Werte relativ zur Zeichenbreite sind, erstellt. Deshalb
+% sollten Sie es nur ändern wenn Sie sich sicher sind, dass
+% die Standardeinstellungen im Dokument nicht verwendet werden.}
+% \item[\key{preset}] Setzt die Protrusions Codes aller Zeichen auf die angegebenen
+% Werte (|={|\meta{left}|,|\meta{right}|}|), u.U. skaliert mit
+% einem |factor|. Eine |unit| Einstellung wird nur berücksichtigt, wenn sie
+% nicht |=character| ist.
+% \item[\key{inputenc}] Wählt eine Inputkodierung aus, die auf die Liste angewendet
+% werden soll, unabhängig von der Eingabekodierung des Dokuments selbst. Sie können jede
+% Kodierung angeben, die per \pkg{inputenc} geladen werden könnte,
+% also u.a. |ansinew|, |koi8-r|, |utf8|.
+% \item[\key{context}] Die Bandbreite der Liste kann auf einen gewissen Kontext limitiert
+% werden. Schauen Sie in Abschnitt~\ref{sec:context} für ein Anwendungsbeispiel nach.
+%\end{options}
+%
+%
+%\subsection{Fontexpansion}\label{sub:expansion}
+%
+%\Describe{Macro}{\SetExpansion}{?options,set of fonts,expansion settings}
+% Standardmäßig können alle Zeichen eines Fonts um denselben Betrag gestrecht
+% oder geschrumpft werden. Man kann aber auch die Expansionslimits für bestimmte
+% einzelne Zeichen festlegen, wenn diese sensibler auf Deformation reagieren. Das ist der
+% Zweck des \cs{SetExpansion} Kommandos. Beachten Sie, dass dies nur einen Effekt hat,
+% wenn das Paket mit der Option \opt{selected} geladen wurde (siehe
+% Abschnitt~\ref{sub:options-expansion}). Ansonsten werden die Expansionseinstellungen
+% ignoriert~-- anders als die Optionen im optionalen ersten Argument, welche
+% trotzdem ausgewertet werden.
+%
+% Falls das Paket mit der \opt{selected} Option geladen wurde und Einstellungen für einen Font
+% nicht existieren, wird Fontexpansion gar nicht auf diesen Font angewendet.
+% Sollte die außergewöhnliche Situation aufkommen, dass sie die ausgewählte Expansion
+% generell verwenden wollen, aber dass alle Zeichen eines bestimmten Font (Sets)
+% um denselben Betrag geschrumpft oder expandiert werden sollten, so müssen sie eine
+% leere Liste für diese Fonts erstellen.
+%
+%\ifcmr\else\enlargethispage\baselineskip\fi ^^A layout
+%\paragraph{Die Expansionseinstellungen}
+% bestehen aus Paaren der Form \meta{character}\,|=|\,\meta{expansion factor}.
+% Sie können eine Zahl für jedes Zeichen festlegen, die den Betrag bestimmt, um den
+% ein Zeichen expandiert werden kann. Die Zahlen bezeichnen Tausendstel
+% der vollen Expansion.
+% Setzt man zum Beispiel den Expansionsfaktor des Zeichens `O' auf 500,
+% wird dieses nur um die Hälfte des Betrages geschrumpft oder expandiert, um
+% den die anderen Zeichen expandiert werden.
+% Während der Standardwert für Character Protrusion auf 0 gesetzt ist -- sofern Sie
+% keine Zeichen angegeben haben, wird auch keines hervorspringen ~-- ist der Standardwert
+% für Expansion 1000, was bedeutet, dass alle Zeichen um denselben Betrag
+% expandiert werden.
+%
+%\paragraph{Optionen:}
+%\begin{options}
+% \item[\key{name}, \key{load}, \key{preset}, \key{inputenc}, \key{context}]
+% Analog zu \cs{SetProtrusion} kann dieses optionale Argument genutzt werden,
+% um einer Liste einen Namen zuzuweisen, eine andere Liste zu laden, alle Expansionsfaktoren
+% voreinzustellen, die Eingabekodierung festzulegen oder den Kontext der Liste
+% zu bestimmen (Expansionskontexte sind nur möglich mit \pdftex\
+% Version 1.40.4 oder neuer).
+%\changes{v1.8}{2005/04/12}{add example of how to get rid of a widow
+% (suggested by \contributor Adam Kucharczyk <adamk\at ijp-pan.krakow.pl>)}
+% ^^A private mail, 2005/04/09
+% \item[\key{auto}, \key{stretch}, \key{shrink}, \key{step}]
+% Diese Schlüssel können genutzt werden um die globalen Einstellungen der Paketoptionen
+% zu überschreiben (siehe Abschnitt~\ref{sub:options-expansion}). Wenn Sie keine
+% der Optionen |stretch|, |shrink| und |step| angeben, wird ihr jeweiliger globaler
+% Wert genutzt (es findet also keine Berechnung statt).
+%
+% Ein praktisches Beispiel: Nehmen wir an, wir haben einen Paragraphen, der eine
+% Witwe enthält, die man einfach hätte verhindern können, indem man den Font ein wenig
+% mehr geschrumpft hätte. In Verbindung mit der |context| Option (siehe Abschnitt~\ref{sec:context}
+% für weitere Details) könnte man mit diesem speziellen Paragraphen mehr Expansion erlauben:
+%\begin{verbatim}[gobble=2]
+% \SetExpansion
+% [ context = sloppy,
+% stretch = 30,
+% shrink = 60,
+% step = 5 ]
+% { encoding = {OT1,T1,TS1} }
+% { }
+% % ... END PREAMBLE
+% {\microtypecontext{expansion=sloppy}%
+% Dieser Paragraph enthält eine `unnötige' Witwe.}
+%\end{verbatim}
+% Diese Methode, Kontext anzuwenden um vorübergehend verschiedene
+% Expansionsparameter zu setzen funktioniert nur mit \pdftex\ 1.40.4 oder neuer
+% (für ältere Versionen wird ein schmutziger Trick in
+% Abschnitt~\ref{ssec:font-setup} auf Seite~\pageref{exp-hack} beschrieben). Bedenken Sie auch,
+% dass \pdftex\ die Nutzung von Fonts mit verschiedenen Expansionslimits oder -stufen
+% (sogar für verschiedene Fonts) innerhalb eines Paragraphs verbietet, weswegen
+% der saloppe Kontext benutzt werden muss, um Paragraphen zu komplettieren.
+% \item[\key{factor}]
+% Diese Option stelle eine andere Methode bereit, um Expansionseinstellungen für
+% bestimmte Fonts zu verändern, arbeitet aber um die eben beschriebenen Restriktionen herum. Die
+% |factor| Option beeinflusst die Expansionsfaktoren aller Zeichen (in
+% Kontrast zur allgemeinen Streckbarkeit) des Fonts. Wollten sie z.B. die
+% kursive Form weniger expandieren lassen, würden sie vereinbaren:
+%\begin{verbatim}
+%\SetExpansion
+% [ factor = 500 ]
+% { encoding = *,
+% shape = it }
+% { }
+%\end{verbatim}
+% Die |factor| Option kann nur genutzt werden, um die Streckbarkeit der Zeichen
+% zu \emph{verringern}, weshalb sie nur Werte kleiner als 1000 erhalten darf.
+% Außerdem kann sie nur für einzelne Fonts oder Font Sets genutzt werden;
+% die Option global in den Paketoptionen zu setzen macht wenig Sinn --
+% dafür nutzt man die Optionen \opt{stretch} und
+% \opt{shrink} des Pakets.
+%\end{options}
+%
+%
+%\subsection{Tracking}\label{sub:tracking}
+%\Describe{Macro}{\SetTracking}{?options,set of fonts,tracking amount}
+% Eine bedeutende typographische Technik -- welche lange in \TeX\ fehlte --
+% ist die Anpassung des Trackings, sprich die uniforme Addition oder Subtraktion
+% von Sperrsatz zu/von allen Zeichen eines Fonts. Zum Beispiel ist es ein
+% normal üblicher, typographischer Brauch, komplett in Kapitälchen
+% (wie in diesem Dokument) ein wenig zu sperren. Die Lesbarkeit kann auch verbessert
+% werden, indem man das Tracking von kleinerer Typen minimal erhöht und das größerer
+% Typen minimal erhöht.\footnote{
+% Für Fonts mit vollem Funktionsumfang wie Computer Modern ist das für gewöhnlich
+% nicht nötig, da sie in optischen Größen kommen und das Tracking der Kapitälchen
+% bereits angepasst ist.}
+% Das \cs{SetTracking} Kommando erlaubt, die Menge des Trackings für verschiedene
+% Fonts oder Font Sets zu setzen. Es wird vom \cs{textls} Kommando ausgewertet,
+% welches genutzt werden kann, um kleinere Textpassagen zu sperren (siehe
+% Abschnitt~\ref{sec:lettersp}).
+%
+%\paragraph{Die Menge des Tracking}
+% wird festgelegt in Tausendsteln von 1\,em (oder der gegebenen Einheit); negative Werte
+% sind ebenfalls erlaubt.
+%
+%\paragraph{Optionen:}
+%\begin{options}
+% \item[\key{name}, \key{unit}, \key{context}]
+% Diese Optionen dienen derselben Funktionalität wie bei den vorigen
+% Konfigurationskommandos. Die Einheit kann jegliche Dimension annehmen,
+% der Standard beträgt 1\,em.
+% \item[\key{spacing}]
+% Werden die \emph{Zeichen}zwischenräume verändert, müssen auch die \emph{Wort}zwischenräume
+% vielleicht angepasst werden. Diese Option erwartet drei Zahlen für Wortzwischenraum,
+% bzw. Streckung und Schrumpfung, welche in Tausendsteln eines 1\,em
+% angegeben werden (oder in der aktuellen Einheit (\texttt{unit})). Folgt
+% einem Wert ein Asterisk, so zeigt es an, dass Tausendstel der jeweiligen
+% Fontdimension zu dieser hinzuaddiert werden. Zum Beispiel werden durch
+%\begin{verbatim}
+%\SetTracking[ spacing = {25*,166, } ]{ encoding = *, shape = sc }{ 25 }
+%\end{verbatim}
+% die Wortzwischenräume um 2.5\% erhöht, die Streckung wird auf einen Betrag
+% von 0.166\,em gesetzt, an den Schrumpf-Einstellungen wird nichts geändert. Falls
+% sie die \texttt{spacing} Option nicht angeben, wird der Wortzwischenraum
+% über die aktuelle Größe der Sperrsatzabstände skaliert (wie in obigem Beispiel),
+% wobei stretch und shrink unberührt bleiben.
+% \item[\key{outer spacing}]
+% Falls ein Wortzwischenraum direkt auf Sperrsatz folgt (oder umgekehrt),
+% wird er standardmäßig gleich den Zwischenräumen im gesperrten Text behandelt.
+% Mit dieser Option, welche dieselben Werte wie \texttt{spacing} akzeptiert,
+% kann sie unabhängig eingestellt werden.
+% \item[\key{outer kerning}]
+% Falls andererseits kein Wortzwischenraum folgt oder vorgeht, können Sie
+% immer noch die ersten und letzten Buchstaben von angrenzenden Buchstaben
+% abtrennen. Diese Option erwartet durch Komma abgretrennte Kerning Beträge
+% für die linke und rechte Seite, in Tausendsteln eines 1\,em (oder der aktuellen
+% \texttt{unit}). Folgt einem Wert ein Asterisk, bezeichnet dies Tausendstel
+% der aktuellen Abstandsgröße des Sperrsatzes. Ein einzelner Asterisk bedeutet
+% `|500*|'; das ist ebenso der Standard, sprich die Summe des äußeren Kerns beträgt
+% standardmäßig soviel wie die aktuelle Größe der Abstände des Sperrsatzes. Um kerning auf
+% beiden Seiten zu entfernen, verwendet man `|outer kerning={0,0}|'.
+% \item[\key{no ligatures}]
+% Soweit \pdftex\ betroffen ist, werden Ligaturen in gesperrten Fonts
+% wie gewöhnlich konstruiert, was angebracht sein kann, wenn das Tracking
+% um einen kleinen Betrag geändert wird. Für größere Abstände andererseits
+% hätte der normale Abstand zwischen Zeichen innerhalb Ligaturen
+% enttäsuchende \textls[150]{E\lslig{ff}ekte}.
+% Dieser Schlüssel erwartet eine per Komma abgetrennte Liste von Zeichen, für welche
+% die Ligaturen abgeschaltet werden sollen; nur das Zeichen, mit welchem die Ligatur
+% beginnt, muss angegeben werden.
+% Wird der Schlüssel ohne Wert angegeben, so werden \emph{alle} Ligaturen des Fonts
+% abgeschaltet. Das wird jedoch nicht empfohlen, da es ebenso mit sich bringt, dass
+% Kerning ausgeschaltet wird.\footnote{
+% Die untrennbare Verbindung von Ligaturen und Kernen ist eine Begrenzung von
+% \TeX\, die nicht vor der Einführung \luatex beseitigt wird.}
+% Die Standardeinstellungen stellen Ligaturen nur für das Zeichen `|f|' ab,
+% sprich, `ff', `fi', ffi', etc.\footnote{
+% Mit \pdftex\ Versions vor 1.40.4 sind \emph{alle} Ligaturen und
+% somit jegliches Kerning abgeschaltet. Es wird deshalb empfohlen, wenigstens
+% Version 1.40.4 zu nutzen.}
+% In außergewöhnlichen Situationen könenn Sie manuell Ligaturen aufbrechen, indem
+% sie `|{\kern0pt}|' bzw. \pkg{babel}s \verb="|=
+% Kürzel verwenden, oder aber die Ligaturen schützen, indem Sie sie in \cs{lslig} einschließen (siehe
+% Abschnitt~\ref{sec:lettersp}).
+%\end{options}
+%
+%\ifx\lssample\undefined
+% \fallbacktext{Die originale Dokumentation\footnote{
+% \ctanurl{macros/latex/contrib/microtype/microtype.pdf}.}
+% enthält ein Bild, welches all diese Optionen illustriert.}
+%\medskip\noindent
+% Nehmen wir zum Beispiel an,
+%\else
+%\changes{v2.3}{2007/11/03}{add letterspacing illustration}
+%\medskip\noindent
+% Since a picture is worth a thousand words, probably even more if, in our
+% case, it depicts a couple of letterspaced words, let's bring one to sum up
+% these somewhat confusing options. Suppose you had the following settings
+% (which I would in no way recommend; they are only for illustrative purposes):
+%\begin{verbatim}
+%\SetTracking
+% [ no ligatures = {"\anchorarrow{nolig}"f},
+% spacing = {60"\anchorarrow{ispace}"0*,-1"\anchorarrow{istretch}"00*, "\anchorarrow{ishrink}"},
+% outer spacing = {4"\anchorarrow{ospace}"50,2"\anchorarrow{ostretch}"50,1"\anchorarrow{oshrink}"50},
+% outer kerning = {"\anchorarrow{okernbegin}"*,"\anchorarrow{okernend}"*} ]
+% { encoding = * }
+% { 1"\anchorarrow{lsamount}"60 }
+%\end{verbatim}
+% and then write:
+%\begin{verbatim}
+%Stop \textls{stealing sheep}!
+%\end{verbatim}
+% this is the (typographically dubious) outcome:
+%
+% \lssample
+%
+%\noindent
+% While the word `Stop' is not letterspaced, the space between the letters in
+% the other two words is expanded by the \showarrow[tracking]{tracking~amount}{red}
+% of 160/1000\,em\,=\allowbreak\,0.16\,em.
+% The \showarrow[ispace]{inner~space}{green} within the letterspaced text is
+% increased by 60\%, while its \showarrow[istretch]{stretch}{green} amount is
+% decreased by 10\% and the \showarrow[ishrink]{shrink}{green} amount is left
+% untouched.
+% The \showarrow[ospace]{outer~space}{green} (of 0.45\,em) immediately before the
+% piece of text may \showarrow[ostretch]{stretch}{green} by 0.25\,em and
+% \showarrow[oshrink]{shrink}{green} by 0.15\,em.
+% Note that there is no outer space after the text, since the exclamation mark
+% immediately follows; instead, the default \showarrow[okern]{outer~kern}{red}
+% of half the letterspace amount (0.08\,em) is added.
+% Furthermore, one \showarrow{ligature}{grey} wasn't broken up, because we
+% neglected to specify the `|s|' in the |no ligatures| key.
+%
+%\medskip\noindent
+% As another, more realistic
+%\fi
+% Sie wollen alle kleinen Kapitälchen um 50/1000\,em
+% sperren, Fonts kleiner \cmd\small\ um 0.02\,em, und das Tracking großer Typen
+% um 0.02\,em erhöhen. Sie können das mit folgenden Einstellungen erreichen:
+%^^A there's a \nobreakspace ahead!
+%\begin{verbatim}
+%\usepackage[tracking=true]{microtype}
+%\DeclareMicrotypeSet*[tracking]{my}
+% { encoding = *,
+% size = {-small,Large-},
+% font = */*/*/sc/* }
+%\SetTracking[ no ligatures = f ]{ encoding = *, shape = sc}{ 50 }
+%\SetTracking{ encoding = *, size = -small }{ 20 }
+%\SetTracking{ encoding = *, size = Large- }{ -20 }
+%\end{verbatim}
+%
+%\medskip\noindent
+% Gesperrte Schriftarten, für welche keine Einstellungen vorliegen, werden um den
+% den Standard von 0.1\,em gesperrt (einstellbar mit der Paketoption \opt{letterspace}, siehe
+% Abschnitt~\ref{sub:options-misc}). Setzen wir voraus, ihr Herausgeber will, dass Sie ihre
+% 1000 Seiten auf ein Meisterwerk von einer handvoll Seiten zusammenkürzen, dann könnten Sie
+% (mit gekreuzten Fingern) \microtype\ laden:
+%\begin{verbatim}
+%\usepackage[tracking=alltext,letterspace=-40]{microtype}
+%\end{verbatim}
+%
+%\emptypdfpageresources ^^A layers of letterspacing illustration
+%
+%
+%\subsection{Zusätzliches Kerning}\label{sub:kerning}
+%
+%\Describe{Macro}{\SetExtraKerning}{?options,set of fonts,kerning settings}
+% Mit diesem Befehl können sie das zusätzliche Kerning feinabstimmen. Im Vergleich zu
+% herkömmlichem Kerning, welches immer mit einem \emph{Paar} von Zeichen assoziiert
+% wird, und Tracking, welches den Zwischenraum zwischen \emph{allen}
+% Zeichen eines Fonts angibt, bezieht sich zusätzliches Kerning nur auf einzelne Zeichen,
+% soll heißen, immer wenn ein bestimmtes Zeichen im Text auftaucht, wird das angegebene
+% Kerning eingefügt, unabhängig davon, welche Zeichen vorgehen oder folgen.
+%
+% Ich sollte nicht versäumen zu sagen, dass es eine Limitierung zusätzlichen Kernings gibt:
+% Wörter, die solch einem Kern\emph{direkt folgen} (nicht von einem Leerzeichen getrennt),
+% werden nicht mit Bindestrich versehen, solang man die Trennpunkte nicht selbst einstellt,
+% z.B. für Kerning nach dem Apostroph `|l'apos\-trophe|'. Diese Restriktion von \pdftex\
+% wird hoffentlich bald abgeschafft.
+%
+%\paragraph{Die Einstellungen des Kerning}
+% werden als Paare der Form \meta{Zeichen}\,|=|\,\meta{Kerning Werte} angegeben, wobei
+% letzteres 2 Werte enthätl: das Kerning, welches vor und nach dem betreffenden Zeichen angefügt wird.
+% Einmal mehr können Werte ausgelassen werden, nicht aber das Komma.
+%
+%\paragraph{Optionen:}
+%\begin{options}
+% \item[\key{name}, \key{load}, \key{factor}, \key{preset}, \key{inputenc}]
+% Diese Optionen dienen der gleichen Funktionalität wie in den vorigen
+% Konfigurationsbefehlen.
+% \item[\key{unit}] Zulässige Werte sind: |space|, |character| und eine
+% \meta{Dimension}. Standardmäßig bezeichnen die Werte ein Tausendstel von 1\,em.
+% \item[\key{context}] Wenn es um Kerning Einstellungen geht, ist diese Option
+% besonders nützlich, da sie erlaubt, Einstellungen abhängig von der Sprache
+% anzuwenden.
+% \par
+% Zum Beispiel kann man die folgenden Einstellungen, angedacht für Dokumente in Französisch,
+% in der Hauptkonfigurationsdatei finden:
+%\ifcmr\else\pagebreak\fi ^^A layout
+%\begin{verbatim}[deletekeywords={[1]{unit}}]
+%\SetExtraKerning
+% [ name = french-default,
+% context = french,
+% unit = space ]
+% { encoding = {OT1,T1,LY1} }
+% {
+% : = {1000,}, % = \fontdimen2
+% ; = {500, }, % ~ \thinspace
+% ! = {500, },
+% ? = {500, }
+% }
+%\end{verbatim}
+%\changes{v2.3}{2007/11/20}{add kerning sample}
+%\ifluatex
+% \fallbacktext{Since this document was compiled with |luatex| instead of
+% |pdftex|, it does not\\include the sample that the original documentation
+% features.}
+%\else
+% \begin{microtypecontext}{kerning=french}
+% Was ist das Ergebnis dieser Einstellungen? Wenn sie aktiv sind wie
+% im vorliegenden Paragraphen, wird ein schmales Leerzeichen vor jedem Fragezeichen,
+% Ausrufezeichen und Semikolon eingefügt; ein normales Leerzeichen vorm Doppelpunkt.
+% In Abschnitt~\ref{sec:context} wird beschrieben, wie diese Einstellungen aktiviert
+% werden. Dieser Paragraph wurde eingegeben wie folgt:
+% \end{microtypecontext}
+%\begin{verbatim}[deletekeywords={[1]{context,activate}}]
+%\begin{microtypecontext}{kerning=french}
+% Was ist das Ergebnis dieser Einstellungen? Wenn sie aktiv sind wie
+% im vorliegenden Paragraphen, wird ein schmales Leerzeichen vor jedem Fragezeichen,
+% Ausrufezeichen und Semikolon eingefügt; ein normales Leerzeichen vorm Doppelpunkt.
+% In Abschnitt~\ref{sec:context} wird beschrieben, wie diese Einstellungen aktiviert
+% werden. Dieser Paragraph wurde eingegeben wie folgt:
+%\end{microtypecontext}
+%\end{verbatim}
+%\fi
+%\end{options}
+%
+%
+%\subsection{Wortzwischenräume}\label{sub:spacing}
+%
+%\Describe{Macro}{\SetExtraSpacing}{?Optionen,Font Set,Spacing Einstellungen}
+% Dieser Befehl erlaubt Ihnen, die Wortzwischenräume fein abzustimmen (auch bekannt als
+% glue). Eine vorausgehende Bemerkung darüber, was ein `Zwischenraum' ist, könnte angebracht sein: zwischen zwei
+% Wörtern fügt \TeX\ sogenannten glue ein, welcher von drei Parametern charakterisiert wird
+% -- der normale Abstand zwischen zwei Wörtern, der maximale Abstand, der dem angefügt
+% werden darf, und das Maximum welches davon subtrahiert werden kann.
+% Die letzteren beiden Parameter wirken wann immer \TeX\ versucht, einen Paragraphen
+% in Zeilen zu zerlegen und dabei scheitert; es kann die Räume zwischen Wörtern strecken
+% oder schrumpfen. Diese drei Parameter sind spezifisch für jeden Font.
+%
+% Obendrein beherrscht \TeX\ das Konzept von `space factors'.
+% Sie können genutzt werden, um die Räume zwischen bestimmten Zeichen, besonders
+% den Satzzeichen zu vergrößern. Falls \pdftex zusätzliche Zwischenräume
+% in Betrieb sind, werden space factors ignoriert, da es als Erweiterung
+% zu space factors mit viel präziserer Kontrolle betrachtet werden kann.
+%
+%\paragraph{Einstellungen an den Zwischenräumen}
+% werden als Paare der Form \meta{Zeichen}\,|=|\,\meta{Zwischenraum Faktoren} deklariert, wobei
+% letztere aus drei Zahlen bestehen: zuerst der zusätzliche Kern, der nach diesem Zeichen
+% angefügt wird, wenn es vor einem Wortzwischenraum vorkommt, 2. der zusätzliche Streckungsbetrag
+% und zuletzt der zusätzliche Schrumpfbetrag. Alle Werte können auch negativ sein,
+% wodurch die Dimensionen verkleinert werden. Nicht alle Werte müssen angegeben werden,
+% die Einstellungen müssen jedoch zwei abtrennende Kommas beinhalten.
+%
+%\paragraph{Optionen:}
+%\begin{options}
+% \item[\key{name}, \key{load}, \key{factor}, \key{preset}, \key{inputenc}, \key{context}]
+% Diese Optionen dienen der gleichen Funktionalität wie in den vorigen
+% Konfigurationsbefehlen.
+% \item[\key{unit}] Sie können die Einheit wählen, in der die angegebenen Zahlen
+% gemessen werden. Mögliche Werte sind: |character|, eine \meta{Dimension} und
+% zusätzlich |space|. Letztere Einstellung misst die Werte in Tausendsteln der
+% jeweiligen Dimension, die vom Font eingestellt ist. Standardmäßig wird die Einheit
+% in Zwischenraumdimensionen gemessen. Mit folgenden (unsinnigen) Einstellungen z.B.:
+%\begin{verbatim}
+%\SetExtraSpacing
+% [ unit = space ] % default
+% { font = */*/*/*/* }
+% {
+% . = {1000,1000,1000},
+% }
+%\end{verbatim}
+% würde der Raum nach einem Punkt verdoppelt (streng genommen:
+% 2\,\texttimes\ \fontdim2),ebenso
+% die Schrumpfbeträge der Wortzwischenräume (\fontdim3 und~4). Umgekehrt
+% würde man, so alle drei Werte auf \textminus1000 setzt, das Leerzeichen
+% nach dem betreffenden Zeichen komplett aufheben.
+%\end{options}
+%
+%
+%\subsection{Zeichenvererbung}\label{sub:inherit}
+%
+% \Describe{Macro}{\DeclareCharacterInheritance}
+% {?Features,Font Set,Vererbungslisten}
+% In den meisten Fällen sollten akzentuierte Zeichen die Einstellungen ihres
+% Ursprungszeichens erben. Zum Beispiel sollten vermutlich alle der Zeichen \`A, \'A, \^A,
+% \~A, \"A, \r{A} und \u{A} um denselben (absoluten) Betrag hervorragen wie der
+% Buchstabe A. Nutzt man den Befehl \cs{DeclareCharacterInheritance},
+% so kann man Klassen von Zeichen benennen, wodurch man nur das betreffende
+% Grundzeichen einstellen muss. Mit dem zusätzlichen Argument, welches eine per
+% Komma abgetrennte Liste von Features enthalten kann, können Sie die Reichweite
+% der Liste beschränken. Zusätzlich dazu akzeptiert es den |inputenc| Schlüssel, um die Eingabekodierung
+% für diese Liste einzustellen. Das Font Set kann wie üblich eingestellt werden.
+% Die einzige Ausnahme hierbei ist, dass exakt eine Kodierung gewählt werden muss. Die Vererbungslisten
+% werden als Paare der Form \meta{base character}\,|=|\,\meta{Liste der erbenden
+% Zeichen} deklariert. Solange Sie keine abweichende Kodierung oder einen sehr eigenartig
+% geformten Font verwenden, sollte es keinen Grund geben, die standardmäßigen Vererbungseinstellungen
+% zu ändern.
+%
+%\bigskip\noindent
+% In der Hauptkonfigurationsdatei \file{microtype.cfg} und den anderen
+% font-spezifischen Konfigurationsdateien können Sie Beispiele zu all
+% diesen Befehlen finden.
+%
+%
+%\subsection{Konfigurationsdateien}\label{sub:config-file}
+%
+% Die Standardkonfiguration beinhaltet Vererbungseinstellungen, Deklarationen von
+% Font Sets und alias Fonts sowie generische Hervorragung, Expansion, Spacing und
+% Kerning Einstellungen, und wird aus der Datei \file{microtype.cfg} geladen. Sie können
+% diese Datei mit eigenen Einstellungen erweitern (oder eine andere Konfigurationsdatei
+% mit der `\opt{config}' Option laden, siehe Abschnitt~\ref{sub:options-misc}).
+%
+% Wenn Sie den Weg einschlagen, neue Einstellungen für eine Fontfamilie zu treffen, sollten Sie
+% diese in eine separate Datei stecken, deren Name `|mt-|\meta{Fontfamilie}|.cfg|'
+% (z.B. `\file{mt-cmr.cfg}') lauten muss, und welche alle Befehle enthalten muss,
+% die in diesem Abschnitt~\ref{sec:fine-tuning} beschrieben. Diese Dateien werden
+% automatisch geladen, wenn sie die betreffenden Fonts tatsächlich nutzen.
+% Das Paket kommt mit mit Konfigurationsdateien für eine Reihe von Fontfamilien;
+% Tabelle~\ref{tab:fonts} enthält sie alle.
+%
+%\begin{table}[t]\small
+%\changes{v1.6a}{2005/02/02}{add table of fonts with tailored protrusion settings}
+%\caption{Fonts mit zugeschnitten Hervorragungseinstellungen}\label{tab:fonts}
+%\setlength\fboxsep{4pt}
+%\leavevmode\kern-\dimexpr\fboxsep+\fboxrule\relax
+%\fcolorbox{theframe}{white}{^^A
+%\begin{minipage}{\textwidth}
+%\def\arraystretch{1.2}
+%\long\def\@makefntext#1{%
+% \leftskip 0pt
+% \parindent 0pt
+% \everypar{\parindent 0pt}%
+% \leavevmode\hbox to 15pt{\@thefnmark\hss}#1}
+%\let\footnoterule\relax
+%\def\fnref#1{\textsuperscript{\itshape\ifpdf\ref*{#1}\else\ref{#1}\fi}}
+%\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}*3l@{}}
+% \footnotesize Fontfamilie (<NFSS> code)
+% & \multicolumn{2}{l}{\footnotesize Features}\\
+%\cmidrule{2-3}
+% & \footnotesize Kodierungen
+% & \footnotesize Formen\\
+%\cmidrule{1-1}\cmidrule{2-2}\cmidrule{3-3}
+% Generic
+% & <OT1>, <T1>, <T2A>, <LY1>, <QX>, (<TS1>)\footnote{Unvollständig\label{fn:incmpl}}
+% & n, (it, sl, sc)\fnref{fn:incmpl} \\
+% Computer Modern Roman (|cmr|)\footnote{Alias: Latin Modern (|lmr|),
+% \pkg{ae} (|aer|), \pkg{zefonts} (|zer|),
+% \pkg{eco} (|cmor|), \pkg{hfoldsty} (|hfor|)}
+% & <OT1>, <OT4>, <T1>, <T2A>, <T5>, <LY1>, <TS1>
+% & n, it, sl, sc \\
+% Bitstream Charter (|bch|)\footnote{Alias: \pkg{mathdesign}/Charter (|mdbch|),
+% MicroPress's \pkg{chmath} (|chr|)}
+% & <OT1>, <T1>, <T5>, <LY1>, <TS1>
+% & n, it, (sl)\footnote{Einstellungen vererbt von kursiver Form\label{fn:it-sl}}, sc \\
+% Adobe Garamond (|pad|, |padx|, |padj|)
+% & <OT1>, <T1>, <LY1>, <TS1>
+% & n, it, (sl)\fnref{fn:it-sl}, sc \\
+% <URW> Garamond (|ugm|)\footnote{Alias: \pkg{mathdesign}/<URW> Garamond (|mdugm|)}
+% & <OT1>, <T1>, <TS1>
+% & n, it\\
+% Bitstream Letter Gothic (|blg|)\footnote{Alias: \pkg{ulgothic} (|ulg|)}
+% & <OT1>, <T1>, <TS1>
+% & n, it \\
+% Adobe Minion (|pmnx|, |pmnj|)
+% & <OT1>, <T1>, <T2A>, <LY1>, <TS1>
+% & n, it, (sl)\fnref{fn:it-sl}, sc, si\\
+% Palatino (|ppl|, |pplx|, |pplj|)\footnote{Alias: \pkg{pxfonts} (|pxr|),
+% \pkg{qfonts}/QuasiPalatino, \TeX\ Gyre Pagella (|qpl|),
+% <FPL> Neu (|fp9x|, |fp9j|)}
+% & <OT1>, <OT4>, <T1>, <LY1>, (<TS1>)\fnref{fn:incmpl}
+% & n, it, (sl)\fnref{fn:it-sl}, sc \\
+% Times (|ptm|, |ptmx|, |ptmj|)\footnote{Alias: \pkg{txfonts} (|txr|),
+% \pkg{qfonts}/QuasiTimes, \TeX\ Gyre Termes (|qtm|)}
+% & <OT1>, <OT4>, <T1>, <LY1>, <QX>, (<TS1>)\fnref{fn:incmpl}
+% & n, it, (sl)\fnref{fn:it-sl}, sc \\
+% Computer Modern math (|cmsy|, |cmm|)
+% & <OML>/<OMS>
+% & n/it \\
+% <AMS> symbols (|msa|, |msb|)
+% & <U>
+% & n\\
+% Euler (|eur|, |eus|, |euf|)\footnote{Alias: \pkg{eulervm} (|zeur|, |zeus|)}
+% & <U>
+% & n\\
+% Euro symbols (Adobe, <ITC>, \pkg{marvosym})
+% & <U>/<OT1>
+% & n, it \\
+%\bottomrule
+%\end{tabular*}^^A
+%\end{minipage}^^A
+%}\kern-\dimexpr\fboxsep+\fboxrule\relax ^^A end \fcolorbox
+%\end{table}
+%
+%\medskip
+%\Describe{Macro}{\DeclareMicrotypeVariants}{list of suffixes}
+%\DescribeMacro{\DeclareMicrotypeVariants*}
+% Auf seiner Suche nach einer Konfigurationsdatei versucht das Paket auch,
+% Suffixe oder einen oder mehr Buchstaben von einem Fontnamen zu entfernen, welche auf eine `Variante'
+% des Basisfonts hindeuten könnten (vergleiche Karl Berrys \cite{fontname}). Das erlaubt z.B.,
+% Einstellungen für z.B. die Fonts |padx| (Experten Set), |padj| (altertümliche Numerale)
+% und |pad| (einfach) in der selben Datei \file{mt-pad.cfg} vorzunehmen.
+% Der Befehl erwartet eine durch Komma abgetrennte Liste von Suffixen für Varianten. Die Version
+% mit Stern hängt die Suffixe der existierenden Liste an. Die Standard-Deklaration
+% in \file{microtype.cfg} lautet:
+%\begin{verbatim}
+%\DeclareMicrotypeVariants{x,j,w,a,d,0,1}
+%\end{verbatim}
+%
+%\medskip
+%\Describe{Macro}{\DeclareMicrotypeAlias}{Fontname,alias Font}
+% Dieser Befehle kann für Fonts genutzt werden, die sich sehr ähnlich
+% oder gar gleich sind (falls sie sich zum Beispiel nicht an das Berry Namensgebungsschema beim
+% Installieren der Fonts hielten). Ein Beispiel wären die Latin Modern Fonts, welche
+% von Computer Modern abgeleitet sind, sodass es nicht notwendig ist, neue Einstellungen
+% für diese vorzunehmen -- man könnte sagen:
+%\begin{verbatim}
+%\DeclareMicrotypeAlias{lmr}{cmr}
+%\end{verbatim}
+% wodurch das Paket -- wann immer der Font |lmr| vorkommt und keine Einstellungen
+% dafür gefunden werden können -- auch den Font |cmr| ausprobiert. Tatsächlich werden Sie
+% eben diese Zeile (mit einigen anderen) in der Standardkonfigurationsdatei vorfinden.
+%
+%\medskip
+%\Describe{Macro}{\LoadMicrotypeFile}{Fontname}
+% In wenigen Fällen kann es nötig sein, eine Fontkonfigurationsdatei manuell
+% zu laden (z.B. aus einer anderen Konfigurationsdatei heraus), oder in der Lage
+% zu sein, in einer Datei festgelegte Einstellungen zu erweitern, die sonst
+% nicht automatisch oder zu spät geladen würden.\footnote{
+% Authoren von Fontpaketen sollten vielleicht einen Blick auf den hook
+% \cs{Microtype@Hook} werfen, beschrieben im Implementationsteil,
+% Abschnitt~\ref{sub:hook}.}
+% Dieser Befehle lädt die Datei `|mt-|\meta{Fontname}|.cfg|'.
+%
+%
+%\section{Kontext-sensitive Einstellungen}\label{sec:context}
+%
+% Das \microtype\ -Paket erlaubt zudem verschiedene Mikro-typografische
+% Einstellungen für die Schriftarten, die vom Zusammenhang abhängig sind, zu
+% verwenden.
+% Dies eröffnet unendlich viele Möglichkeiten der Feinabstimmungen für das Aussehen
+% des Dokuments.
+%
+%\medskip
+%\Describe{Macro}{\microtypecontext}{context assignments}
+% Dieser Befehl kann überall im Dokument (auch in der Präambel) verwendet werden,
+% um den Mikro-typografischen Zusammenhang in der aktuellen Gruppe zu ändern.
+% Zu jeder Funktion (\key{protrusion}, \key{expansion}, \key{tracking},
+% \key{spacing} und \key{kerning}), kann ein Kontext zugewiesen werden. Folglich
+% können nur Einstellungen mit dem entsprechenden 'Kontext'-Schlüsselwort verwendet
+% werden.
+%
+%\medskip
+%\Describe{Env}{microtypecontext}{context assignments}
+% Wieviele andere \LaTeX\ -Befehle ist der Befehl, in Form einer Umgebung
+% verfügbar.
+%
+%\medskip
+%\Describe{Macro}{\textmicrotypecontext}{context assignments,general text}
+% Als weitere Möglichkeit, ändert der Befehl \cs {textmicrotypecontext} den
+% Kontext für den Text, der im zweiten Argument übergeben wird.
+%
+%\changes{v1.9c}{2006/01/25}{add example of how to increase protrusion of footnote markers
+% (suggested by \contributor Georg Verweyen <verweyen\at gmail.com>)}
+% ^^A private mail, 2006/01/25
+%\medskip\noindent
+% Angenommen, Sie möchten eine größere Menge von Fussnotenzeichen im Text
+% erhalten, dann können die Einstellungen der Zahlen so definieret werden
+%\begin{verbatim}
+%\SetProtrusion
+% [ context = footnote ]
+% { font = */*/*/*/scriptsize } % adapt if necessary
+% { 1 = { ,650}, 2 = { ,400}, 3 = { ,400}, 4 = { ,400}, 5 = { ,400},
+% 6 = { ,400}, 7 = { ,500}, 8 = { ,400}, 9 = { ,400}, 0 = { ,400} }
+%\end{verbatim}
+%\ifcmr\else\enlargethispage{2\baselineskip}\fi ^^A layout
+% um damit den Kontext im Fussnoten-Befehl zu ändern. Dieser Befehl
+% unterscheidet sich zwischen den verscheidenen Klassen. Für die Basisklassen z.B, % \pkg{article}, wäre es:
+%\begin{verbatim}
+%\newcommand*\new@makefnmark{\hbox{\@textsuperscript{\normalfont
+% \microtypecontext{protrusion=footnote}\@thefnmark}}}
+%\renewcommand*\@footnotemark{%
+% \leavevmode \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi
+% \new@makefnmark \ifhmode\spacefactor\@x@sf\fi \relax}
+%\end{verbatim}
+% Für die \pkg{memoir} Klasse, müssten Sie zusätzlich die automatische Erkennung
+% mehrerer Fussnoten deaktivieren, welches ein hervorheben des Fussnotentextes
+% verhindert.
+%\begin{verbatim}
+%\renewcommand*\@makefnmark{\hbox{\@textsuperscript{\normalfont
+% \microtypecontext{protrusion=footnote}\@thefnmark}}}
+%\let\m@mmf@prepare\relax
+%\let\m@mmf@check\relax
+%\end{verbatim}
+% ^^A For other classes, the command would have to be changed in a similar way.
+%
+%\medskip\noindent
+% Eine weitere Möglichkeit wäre es den Kontext für eine sprachabhängige Einstellung
+% zu verwenden.
+% Zum Beispiel, wenn Sie einen Text auf Französisch schreiben, können Sie
+%\begin{verbatim}
+%\microtypecontext{kerning=french}
+%\end{verbatim}
+% in der Präampel hinzufügen. Das hätte den Effekt, dass die
+% Abstandseinstellungen des französischen Kontextes, für das Dokument übernommen würden. Sollten Teile des Dokuments in Englisch sein, könnten Sie schreiben
+%\begin{verbatim}
+%\textmicrotypecontext{kerning=}{English text!}
+%\end{verbatim}
+% um den Kontext zurückzusetzen, so dass die Interpunktion in diesen
+% Teilen kein extra Zeichenabstand erhalten.
+%
+% Anstatt diese Befehle manuell zu Ihrem Dokument hinzuzufügen, können Sie
+% \microtype\ auch mit der \opt {Babel}-Funktion laden
+% (siehe Abteilung~\ref{sub:options-misc}).
+% Die aktuelle Sprache wird dann automatisch erkannt und der Kontext
+% dementsprechend angepasst.
+%
+%\medskip
+%\Describe{Macro}{\DeclareMicrotypeBabelHook}
+% {list of \pkg{babel} languages,context list}
+% Natürlich kennt \microtype\ nicht jede typografische Besonderheit, jeder einzelen
+% Sprache.
+% Dieser Befehl ist ein Mittel, um zu lehren, wie man den Kontext anpassen
+% kann, wenn eine bestimmte Sprache ausgewählt ist. Die Hauptkonfigurationsdatei
+% enthält unter anderen die folgende Deklaration:
+%\begin{verbatim}
+%\DeclareMicrotypeBabelHook
+% {french,francais,acadian,canadien}
+% {kerning=french, spacing=}
+%\end{verbatim}
+% Folglich, wann immer Sie auf französische Sprache umschalten, wird die
+% Abstandseinstellung im Kontext auf `|französisch|' geändert und der
+% Abstandskontext zurüchgesetzt.
+% Dieser Effekt greift nur dann, wenn das Paket mit der \opt {babel} Option geladen % wurde. Derzeit unterstützt \microtype\ französische, türkische und englische
+% Buchstabenabstände (auch bekannt als \cmd\nonfrenchspacing). Für unbekannte
+% Sprachen werden alle Kontexte zurückgesetzt.
+
+%
+%\section{Erneute Betrachtung der Funktion Letterspacing}\label{sec:lettersp}
+%
+%\Describe{Macro}{\textls}{?amount,general text}
+%\DescribeMacro{\textls*}
+%\DescribeMacro{\lsstyle}
+% Während die \opt{tracking} Funktion, die im Abschnitt~\ref{sub:tracking}
+% beschrieben wurde, für Sätze von Schriftarten gilt, können sie letterspace
+% benutzen um kürzere Stücke des Textes zu erzeugen, unabhängig von der Schriftart
+% in dem sich der Schriftsatz befindet.\footnote{
+% Letterspacing sollte vorsichtig verwendet werden, insbesondere der
+% Zeichenabstand der Kleinbuchstaben wird mit Abscheu von einigen Typpgrafen
+% betrachtet. Falls sie wissen was sie tun, sollten Sie vielleicht kleine Kapitel % oder oder alle Kapitel nutzen. Eine andere Eigenschaft kann zur Betonung in
+% Texten von Schriftarten verwendet werden.}
+% Für solche Ad-hoc-Zeichenabstände, bestizt \microtype\ zwei Befehle, (unabhängig
+% davon, ob die |tracking| Option aktiviert ist) die auf die gleiche Weise
+% verwendet werden können wie die \LaTeX-Befehle: \cs{textls} -- welches auch im
+% Mathemodus funktioniert -- erwartet der Text im notwendigen Argument, während
+% \cs{lsstyle} `letterspacing' für alle nachfolgenden Schriften bis zum Ende der
+% aktuellen Gruppe aktiviert wird. Die Favoriten-Version von \cs{textls} fügt keine % zusätzlichen Buchstabenabstände, vor oder nachdem Text ein, was für z.B
+% Absatztitel nützlich sein kann.
+% Standardmäßig wird jedes Zeichen mit 100/1000 \,em \,= \,0.1 \,em von einander
+% getrennt, dieser Betrag kann im optionalen Argument von \cs {textls}, durch
+% Verwendung des \cs {SetTracking} Befehl oder global über die \opt {letterspace}
+% Paketoption, geändert werden, mit abnehmender Signifikanz in dieser Reihenfolge.
+%
+%\medskip
+%\Describe{Macro}{\lslig}{ligature}
+% Seitdem die Befehle \cs{textls} und \cs{lsstyle} auch die
+% `\texttt{no ligatures}'-Schlüssel für die entsprechenden Schriftarten auswerten,
+% brauchen Sie sich keine Gedanken mehr über das Schützen oder Trennen von Liganten % in den meisten Schriftarten zu machen. Jedoch, in bestimmten Situationen, kann es % zu einem Konflikt der Liganten, welche mit den gleichen Buchstaben beginnen,
+% kommen, wobei einige von diesen verhindert werden sollten, während das bei
+% anderen nicht geschehen soll. Beim letterspacing von Texten mit Textschriftsatz
+% in Frakturschriftarten, sollen zum Beispiel, die Liganten 'ch', 'ck', 'tz' und
+% 'sz' ~(`\textfrak {sz}') niemals getrennt werden, normalerweise sieht man auch
+% 'St.' ~(`\textfrak {St.}') Liganten im letterspacing-Text. Darüber hinaus
+% realisiert das \pkg{yfonts} Paket das kurze ~s~(`\textfrak{s:}') als den
+% Liganten~`|s:|' andererseits, wenn der `ct'~Ligant und die anderen `lang~s'
+% Liganten in Frakturschriftarten gefunden werden, unterdrückt werden.
+% Es gibt zwei Wege dieses Problem zu lösen: Entweder deaktivieren Sie nicht die
+% "`| s | und/ oder | c |" Ligaturen und
+% trennen diejenigen, die getrennt werden müssen durch das Einfügen von
+% `|{\kern0pt}|' oder \pkg{babel}'s Abkürzung oder deaktivieren Sie diese
+% und schützen jene Liganten welche geschützt werden müssen, durch umschließen mit % dem \cs{lslig} Befehl. Damit liefern folgende Lösungen das gleiche Ergebnis
+% (nämlich, `\textfrak{\lsstyle Aus:s{\kern0pt}ichts:los{\kern0pt}igkeit}').
+%
+%\begin{verbatim}[morekeywords={[0]{\kern}}]
+%\SetTracking[no ligatures={f}]{encoding = LY, family = yfrak}{100}
+%\textfrak{\lsstyle Aus:s{\kern0pt}ichts:los{\kern0pt}igkeit}
+%\end{verbatim}
+%\begin{verbatim}
+%\SetTracking[no ligatures={f,s,c}]{encoding = LY, family = yfrak}{100}
+%\textfrak{\lsstyle Au\lslig{s:}si\lslig{ch}t\lslig{s:}losigkeit}
+%\end{verbatim}
+%
+%\bigskip\noindent
+%\DescribePackage{letterspace}
+% Diese drei Befehle (mitsamt der \opt{letterspace} -Option, beschrieben in
+% Abschnitt~\ref{sub:option-tracking}) sind auch in dem alternativen
+% \letterspace\ Paket enthalten, welches ansich eine sehr stark abgespeckte Version % von \microtype\ ist, das eine Unterstützung für alle anderen Erweiterungen
+% weglässt (zudem wurden die Möglichkeiten des \cs{SetTracking} Befehls weggelassen % und alle `|f|' Liganten werden deaktiviert, innere und äußere Abstände und der
+% äußere Buchstabenabstand wurden auf ihre Standartwerte zurückgesetzt, so wie in
+% Abschnitt~\ref{sub:tracking} beschrieben). Wenn Sie es bevorzugen auf
+% \microtype's Besonderheiten zu verzichten, können Sie stattdesen das
+% \letterspace\ Paket laden. Beide Pakete können nicht zur gleichen Zeit benutzt
+% werden.
+%
+% Im Gegensatz zu \microtype, welches \LaTeX\ verlangt, arbeitet das \letterspace\
+% Paket auch mit \pkg{eplain} oder auch nur mit \pkg{miniltx}: beim Gebrauch von
+% \pkg{eplain}, laden Sie das Paket mit \cmd\usepackage\ innerhalb
+% \cmd\beginpackages~\dots\ \cmd\endpackages\ Umgebung, für \pkg{miniltx}
+% (welches die Paketoptionen nicht unterstützt) einfach mit \cmd\input\
+% \file{letterspace.sty} laden.
+%
+%
+%\section{Deaktivieren von Ligaturen(Bindungen)}\label{sec:disable-ligatures}
+%
+%\Describe{Macro}{\DisableLigatures}{?characters,set of fonts}
+% Beim vollständigen Deaktivieren aller Liganten einer Schriftart (welches auch
+% Kerning für diese Schriftart ausschaltet, senkt \textit{lowers} absichtlich die
+% mikro-typografische Qualität des Textes, anstatt diese zu erhöhen, dies ist
+% speziell für Schreibmaschine-Schriftarten nützlich, so dass, z.B. in einer <T1>
+% kodierten Schriftart, `|\texttt{--}|' natürlich als `|--|', nicht als
+% `\texttt{--}'gedruckt wird. \cs{DisableLigatures} kann dazu verwendet werden, um % auf gewöhnlichem Weg, eine Reihe von Schriftarten zu spezifizieren, für welche
+% Liganten deaktiviert sein sollen, z.B für die Schriebmaschinenschrift kodiert in <T1>:
+%\begin{verbatim}
+%\DisableLigatures{encoding = T1, family = tt* }
+%\end{verbatim}
+% Es ist auch möglich nur ganz bestimmt Liganten zu deaktivieren. Das optionale
+% Argument, kann eine durch Komma getrennte Liste von Zeichen enthalten, für die
+% der Ligantenmechanismus unterbunden werden soll:
+%\begin{verbatim}
+%\DisableLigatures[?,!]{encoding = T1} % "\ifx\tagcode\undefined\else ^^A
+% \normalfont\color{thegrey}inhibit ?` and !`, but not fi, --, >>, etc.\fi"
+%\end{verbatim}
+% Dabei ist der Buchstabe, mit dem der Ligant beginnt von Bedeutung. Dieser Befehl
+% kann nur in der Präampel verwendet werden und auch nur einmal. Der Befehl
+% fortert \pdftex\ 1.30 oder eine aktuellere Version.
+%
+%
+%\section{Hinweise und Warnungen}\label{sec:caveats}
+%
+%\paragraph{Verwenden Sie Einstellungen, die zu Ihrer Schriftart passen.}
+% Obwohl die Standardeinstellungen akzeptable Ergebnisse für die meisten Schriften
+% liefern sollten, kann es sein das die spezielle Schriftart, welche Sie gerade
+% verwenden, verschiedene Schriftformen hat, so dass mehr oder weniger Hervorhebung
+% oder Vergrößerungen erforderlich sind. Insbesondere kursive Schriftformen
+% können sich deutlich in unterschiedlichen Schriftarten unterscheiden, deshalb
+% habe Ich mich dageben entscheiden Standarthervorhebungseinstellungen für diese
+% anzubieten. Die Datei \file{test-microtype.tex} kann eine Hilfe, beim anpassen
+% der Hervorhebungseinstellungen für eine Schriftart sein.
+%
+%\paragraph{Verwenden Sie keinen zu großen Wert für die Vergrößerung.}
+% Font-expansion (Schriftartenvergrößerung) ist eine Funktion, welche die
+% typographische Qualität des Dokuments verbessern soll, indem sie eine
+% gleichmäßige Graustufe des Textblocks erzeugt (und potenziell die Verringerung
+% der Zahl der erforderlichen Silbentrennungen).
+% Wenn die Erweiterung oder Verkleinerung einer Schrift zu groß
+% oder zu klein wird, so wird der Effekt ins Gegenteil gewandelt. Die Vergrößerung
+% der Schriftarten um mehr als 2\%, d.h. der Wert der Einstellung \opt{Strecken}
+% größer als 20 ist, erfordert ein geschultes Auge.
+% Wenn Sie das Glück haben und im Besitz von mehreren Kopien einer
+% multiplen Master-Schriftart sind, können Sie die Vergrößerungsgrenze bis
+% auf 4\% erhöhen.
+%
+%\changes{v2.0}{2006/12/13}{Hinweis für Web-Dokumente im Hinblick auf ältere \pdftex\ Versionen}
+%\paragraph{Verwenden Sie keine Schriftartvergrößerung für Web-Documente (mit
+% älteren \pdftex\ Versionen).}
+% Mit \pdftex\ Versionen die älter als die 1.40 Version sind, wird jede vergrößerte % Kopie der Schriftart in der <PDF> Datei eingebettet, folglich kann die
+% Dateigröße stark zunehmen (abhängig von Vergrößerungsgrenze und -schritt).
+% Deshalb, für die Zuvorkommenheit und für Sparsamkeit der Bandbreite, aktivieren
+% Sie nicht die Schriftartenvergrößerung, beim Erstellen von Datein die
+% elektronisch verteilt werden. Mit \pdftex\ 1.40,
+% welches eine andere Technik der Vergrößerung nutzt, kann die Erhöhung der
+% Dateigröße vernachlässigt werden.
+%
+%\changes{v2.2}{2007/07/06}{add hint about extra <TOC> leader dot
+% (first discovered by \contributor Morten H\o gholm <morten.hoegholm\at latex-project.org>)}
+% ^^A private mail, 2006/08/26
+%\paragraph{Möglicherweise möchten sie Hervorhebungen im Inhaltsverzeichnis deaktivieren.}
+% In unglücklichen Fällen, könnte die aktivierte Hervorhebung, die Längenlinie im im Inhaltsverzeichnis und ähnliche Listen auf eine Weise verändern, so dass ein Excess-Leader Punkte einfügeführt werden muss. Die Lösung ist Hervorhebungen vorübergehend im Inhaltsverzeichnis zu deaktivieren:
+%\begin{verbatim}
+%\microtypesetup{protrusion=false}
+%\tableofcontents
+%\microtypesetup{protrusion=true}
+%\end{verbatim}
+%
+%\changes{v1.9}{2005/07/10}{Hinzufügen von Hinweisen in \texttt{verbatim} Umgebungen}
+%\todo{introduce option to patch \texttt{verbatim}} ^^A for Karl
+%\paragraph{Möglicherweise möchten Sie die Hervorhebungen in der \texttt{verbatim} % Umgebung deaktivieren.}
+% Wie Sie bereits wissen, wird \microtype\ standartmäßig die Zeichenhervorhebung in % allen Schriftarten aktiviert, die im Schriftartenset `|alltext|' enthalten sind. % Das schließt auch die Schreibmaschinenschrift mit ein. Obwohl es wirklich Sinn
+% macht, die Schreibmaschine-Schriftart hervorzuheben, wenn Sie im laufenden Text
+% erscheint (wie, zum Beispiel, in diesem Handbuch), ist dies wahrscheinlich nicht
+% wünschenswert innerhalb der |verbatim| Umgebung. Jedoch hat
+% \microtype\ kein Wissen über den Kontext, in dem eine Schriftart steht, dies wird % allein durch die Bestimmung der Attribute entschieden.
+% Deshalb müssen Sie sich um die Deaktivierung der Hervorhebung in der |verbatim|
+% Umgebung, selbst kümmern (d.h wenn Sie Hervorhebungen in der
+% Schreibmaschinenschrift, nicht durch auswählen eines anderen Schriftsatzes
+% insgesamt deaktivieren wollen). Obwohl der \cs{microtypesetup} Befehl natürlich % für Fälle wie diesen entwickelt wurde, könnten Sie es
+% anstrengend finden ihn jedesmal zu wiederholen, wenn Sie ihn in der |verbatim|
+% Umgebung öfters nutzen. Die folgende Zeile, die der Präampel hinzugefügt wird,
+% hätte den selben Effekt:
+%\changes{v2.3e}{2009/07/21}{suggest to patch \cmd\@verbatim\ instead of \cmd\verbatim}
+%\begin{verbatim}
+%\g@addto@macro\@verbatim{\microtypesetup{activate=false}}
+%\end{verbatim}
+% Falls sie das \pkg{fancyvrb} oder das \pkg{listings} Paket verwenden, ist dies
+% nicht notwenig, da diese so konzipiert sind, das Sie in der entsprechenden
+% Umgebung, die Hervorhebung in jedem Fall hemmen.
+%
+%\changes{v1.9e}{2006/07/10}{add hint about unknown encodings}
+%\paragraph{Einstellungen für Griechisch/Thailändisch/Amerikanisch usw. Kodierungen
+% sind bis jetzt noch nicht inbegriffen.}
+% Die Standartsätze von Schriftarten, für welche die mikro-typrografischen
+% Funktionen aktiviert werden (siehe Tabelle~\ref{tab:predefined-font-sets}),
+% enthalten nur die Kodierungen für die auch Konfigurationen existieren. Deshalb, % wenn Sie eine andere Kodierung verwenden (z.B. <LGR>, <T2B>, etc.), wird
+% \microtype\ nicht auf diese Schriftarten anwendbar sein. Sie müssen einen neuen
+% Schriftsatz, einschließlich der Kodierung, definieren und aktivieren um Sie
+% benutzen zu können(weitere Details, siehe
+% Abschnitt~\ref{sec:font-sets}). Spätestens für die Hervorhebungen müssten Sie
+% Einstellungen für die Schriftarten die in Frage kommen erstellen (siehe
+% Abschnitt~\ref{sub:protrusion}).
+% Selbstverständlich sind Beiträge für diese Art von Kodierung mehr als willkommen.
+%
+%\paragraph{Nehmen Sie nur dann Kerning-Anpassungen vor, wenn es üblich in der typografischen Tradition der Sprache ist.}
+% Im Gegensatz zu Hervorhebung und der Vergrößerung, trägt zusätzliche Kerning
+% nicht unbedingt zur Verbesserung der mikro-typographische Qualität des Dokuments % bei. Sie sollten das zusätzliche Kerning nur aktivieren, wenn Sie ein Dokument in % einer Sprache schreiben, dessen typografische Tradition ein solches Kerning
+% garantiert. Wenn Sie zum Beispiel einen englischen Text schreiben, würden die
+% Leser durch zusätzliche Leerzeichen vor dem Satzzeichen verwirrt werden.
+%
+%\changes{v2.3c}{2008/10/27}{add hint about spacing being experimental}
+%\paragraph{Anpassung der Zwischenwortabstandes befindet sich noch in einem
+% experimentellen Stadium.}
+% Die Umsetzung dieser Eigenschaft in \pdftex\ ist nicht vollständig und kann zu
+% den positiven Auswirkungen, auf die typographische Qualität, die Sie eventuell
+% erwarten, nicht beitragen. In bestimmten Situationen kann es sogar zu
+% unerwünschten Nebenwirkungen kommen.
+% Deshalb, sollte die \opt {Abstand}option nicht blind gewählt werden. Es wird
+% empfohlen mit den Einstellungen zu experimentieren, um zuverstehen wie die
+% Eigenschaften funktionieren.
+%
+%\changes{v1.7}{2005/03/23}{add hint about compatibility}
+%\paragraph{Kompatibilität und Interaktion mit anderen Paketen:}
+% Das \microtype\ -Paket sollte sehr gut mit anderen
+% \LaTeX\ -Paketen zusammen arbeiten (ausgenommen von \pkg{pdfcprot}). Jedoch da
+% das Leben nicht perfekt ist, sind Probleme zu erwarten. Momentan sind folgende
+% Probleme bekannt:
+%\begin{itemize}
+% \item Wenn Sie 8-Bit-Zeichen in der Konfiguration verwenden möchten, müssen Sie % zuerst das Paket \pkg{inputenc} laden. Das Verwenden von Unicode wird
+% ebenfalls unterstützt (wenn Sie \pkg{inputenc} mit der |utf8| oder |utf8x| % option laden).
+% Bei der Verwendung von mehreren Input-Kodierungen in einem Dokument,
+% werden 8-Bit-Zeichen in den Einstellungen nur zuverlässig funktionieren,
+% wenn Sie den |inputenc| Schlüssel spezifizieren.
+%\changes{v2.3a}{2008/02/25}{add hint about \pkg{babel} having to be loaded first}
+% \item Beim Laden des Pakets mit der \opt{babel}-Option, sollten Sie das
+% \pkg{babel}-Paket vor \microtype\ laden.
+%\changes{v2.3c}{2008/11/11}{add hint about partial incompatibility with \pkg{CJK}}
+% \item Es ist derzeit nicht möglich, Charakter-spezifische Einstellungen für
+% chinesische\slash japanischen\slash koreanischen Schriften zu erstellen.
+% Deshalb, ist die einzige mikro-typografische Erweiterung, die mit dem
+% \pkg {CJK} Paket arbeiten kann, die Schriftartvergrößerung.
+%\end{itemize}
+%
+%\changes{v1.8}{2005/06/23}{add hint about error messages}
+%\paragraph{Mögliche Fehlermeldungen und wie man diese beseitigt:}
+%\begin{itemize}
+%\lstset{deletekeywords={[1]{expansion,auto}},belowskip=-\smallskipamount,frame=none,
+% xleftmargin=0pt,backgroundcolor=,basicstyle=\MacroFont\footnotesize}
+%\changes{v1.9a}{2005/11/15}{add explanation for error message in <DVI> mode}
+% \item
+%\begin{verbatim}
+%! Font csnameendcsname=cmr10+20 at 10.0pt not loadable: Metric (TFM) file not found.
+%\end{verbatim}
+% Diese Fehlermeldung tritt auf, wenn Sie versuchen die Schriftartvergrößerung zu
+% verwenden, während Sie eine <DVI>- Ausgabe erstellen. Denken Sie daran, dass die % \emph{automatische} Schriftartenerweiterung nur als \pdftex\ im <PDF> Modus
+% funktioniert. Vergrößerung ist auch im <DVI> Modus möglich. Dies erfordert, dass % alle Instanzen der erweiterten Schriftarten auf Ihrem \TeX\ -System existieren.
+%
+%\changes{v2.2}{2007/06/13}{add hint about error message with \pdftex\ 1.40}
+% \item
+%\begin{verbatim}
+%! pdfTeX error (font expansion): auto expansion is only possible with scalable fonts.
+%\end{verbatim}
+% Die automatische Schriftartvergrößerung ist in \pdftex\ 1.40, darin verbessert
+% worden,
+% dass sie nicht nur mit Typ\,1 Schriften sondern, auch mit TrueType, OpenType und
+% sogar auch mit nicht-eingebetteten Schriftarten arbeitet. Die obige Fehlermeldung % bedeutet entweder, dass Sie versuchen die Vergrößerung, auf eine Bitmap~(|pk|)
+% Schriftart anzuwenden, die noch nicht möglich ist, oder dass die Schrift nicht
+% gefunden werden kann, da z.B. deren Einträge fehlen.
+%
+%\changes{v2.0}{2006/12/13}{qualify hints about expansion error messages with
+% regard to older \pdftex\ versions}
+% \item
+%\begin{verbatim}
+% Warning: pdflatex: font ptmr8r cannot be expanded (not an included Type1 font)
+%\end{verbatim}
+% und der <PDF> Viewer beklagt sich über eine fehlende Schriftart, z.B der Adobe
+% Reader auf diese Weise:
+%\begin{verbatim}[aboveskip=\smallskipamount]
+% Could not find a font in the Resources dictionary - using Helvetica instead.
+%\end{verbatim}
+% Mit \pdftex\ Versionen, die älter sind als 1.40, kann Schriftartvergrößerung nur
+% dann angewandt werden, wenn die Schriftart in der <PDF> Datei eingebettet wird.
+% Falls Sie die obengenannte Fehlermeldung erhalten, kann Ihr \TeX\ System noch
+% nicht mit PostScript-Schriftarten (z.B Times, Helvetica, Courier) arbeiten, da
+% diese in die Basisdatei eingebettet werden müssen. In den meisten \TeX\
+% Distributionen, kann diese in der Datei \file{updmap.cfg} durch Einstellungen der
+% |pdftexDownloadBase14| in |true| geändert werden.
+%
+%\changes{v1.9a}{2005/11/15}{add explanation for error message with non-Type\,1 fonts}
+% \item
+%\begin{verbatim}
+% Warning: pdflatex (file ecrm1000+20): Font ecrm1000+20 at 1200 not found
+%\end{verbatim}
+% Außerdem erfordern \pdftex\ Versionen die älter als 1.40 sind, Typ \,1-Schriften
+% für die automatische Schriftarten-Vergrößerung. Wenn Sie eine Nachricht wie die
+% obengenannte erhalten, haben Sie wahrscheinlich versucht, die
+% Schriftartvergrößerung auf eine bitmap oder TrueType Schriftart anzuwenden. Bei
+% älteren \pdftex\ Versionen ist dies nur möglich, wenn Sie manuell erweiterte
+% Instanzen der Schriften erstellen.
+%\ifcmr\else\pagebreak\fi ^^A layout
+%\changes{v2.0}{2006/11/05}{add hint about how to increase \texttt{font\textunderscore max}
+% and \texttt{font\textunderscore mem\textunderscore size}}
+% \item
+%\begin{verbatim}
+%! Font T1/cmr/m/n/10=ecrm1000 at 10.0pt not loaded: Not enough room left.
+%\end{verbatim}
+% Speicherparameter `|font_mem_size|` zu klein.
+% \item
+%\begin{verbatim}
+%! TeX capacity exceeded, sorry [maximum internal font number (font_max)=2000].
+%\end{verbatim}
+% Speicherparameter `|font_max|` zu klein.
+% \item
+%\begin{verbatim}
+%! TeX capacity exceeded, sorry [PDF memory size (pdf_mem_size)=65536].
+%\end{verbatim}
+% Speicherparameter `|pdf_mem_size|` zu klein (bei \pdftex\ Versionen, die älter
+% sind als 1.30).
+%
+% Bei Anwendung von mikro-typografischen Erweiterung eines großes Dokumentes mit
+% einer Menge von Schriftarten, kann die Speicherkapazität von \pdftex\ knapp
+% werden. Dies kann durch Setzen der entsprechenden Parameter, auf einen größeren
+% Wert erhöht werden. Für web2c-basierte Systeme, z.B \texlive, sollten Sie die
+% Einstellungen in der Datei \file{texmf.cnf}, und für MiK\TeX in der Datei
+% \file{miktex.ini} (für 2,4 Jahre ältere Versionen) bzw. \file{pdflatex.ini} (2,5
+% Jahre neuere Versionen) ändern.
+%
+%\changes{v2.0}{2007/01/05}{add hint about warning when tracking \emph{and}
+% expansion is applied to a font}
+% \item
+%\begin{verbatim}[deletekeywords={[1]{expansion}}]
+%pdfTeX warning (font expansion): font should be expanded before its first use
+%\end{verbatim}
+% Diese Warnung wird bei \pdftex\ Versionen vorkommen, die älter sind als 1.40.4,
+% wenn Tracking \emph{und} Vergrößerung auf eine Schriftart angewendet werden. Sie
+% ist harmlos und kann ignoriert werden.
+%\end{itemize}
+%
+%
+%
+%\section{Beiträge}
+%
+% Ich wäre froh, Konfigurationsdateien für mehr Schriftarten beizufügen. Das
+% Vorbereiten solcher Konfigurationen ist recht zeitaufwändig und erfordert viel
+% Geduld.
+% Um diesen Prozess zu erleichtern, schließt dieses Paket auch eine Testdatei ein,
+% die verwendet werden kann, um zumindest die Hervorhebungseinstellungen überprüfen % zu können (\file{test-microtype.tex}).
+%^^A
+% Wenn Sie eine Konfigurationsdatei für eine andere Schriftart erstellt, oder
+% Anregungen für Verbesserungen in den Standardkonfigurations-Dateien haben, würde % Ich diese dankbar entgegennehmen: \mailtoRS.
+%\iffalse\footnote{^^A ... OK, so nobody has any ...
+% Should you have lots of \pkg{pdfcprot} configuration files lying around,
+% I can also provide you with a \TeX\ conversion script. Just ask me.}
+%\fi
+%
+%
+%\section{Danksagungen}
+%
+% Dieses Paket wäre sinnlos, wenn \contributor\thanh{} <thanh\at pdftex.org>
+% dieses \pdftex\ Programm überhautpt nicht erstellt hätte, welches die
+% mikro-typographische Erweiterung einführt und so für die \TeX\ -Welt verfügbar
+% macht. Darüber hinaus danke ich ihm für die Hilfe, dieses Paket zu
+% verbessern und nicht zuletzt für die Förderung in \cite{ThanhPracTeX} und
+% \cite{ThanhEuroTeX07} und anderswo. Also bedanke Ich mich bei ihm und dem Rest
+% der \pdftex\ Mannschaft für die Widerlegung der Idee, dass \TeX\ tot ist, und für % dass Fixen der Programmfehler die ich gefunden habe.
+%
+% \contributor Harald Harders <h.harders\at tu-bs.de> hat dazu beigetragen die
+% Vorsprungseinstellungen für Adobe Minion möglich zu machen. Ich möchste ihm auch % für eine Reihe an Fehlermeldungen und Vorschlägen danken, die er gemacht hat.
+% \contributor Andreas B\"uhmann <andreas.buehmann\at web.de> hat die Möglichkeit
+% vorgeschlagen, Bereiche von Schriftgrößen anzugeben und geistreich bei der
+% Implementierung dieser zu helfen. Er hatte auch einige guten Ideen für das
+% Management von komplexen Konfigurationen.
+% \contributor Ulrich Dirr <ud\at art-satz.de> hat zahlreiche Vorschläge gemacht,
+% besonders bezüglich der neuen Erweiterungen der Zwischenwortabstandsanpassung und % zum zusätzlichen Kerning.
+% Mein Dank gilt auch \contributor Maciej Eder <maciej_eder\at poczta.onet.pl>
+% für die beigetragenen Einstellungen der <QX> Kodierung, sowie
+% \contributor Karl Karlsson <karl-karlsson\at yandex.ru> zur Bereitstellung von
+% Einstellungen für die kyrillische <T2A> Kodierung.
+% Ich bedanke mich bei \contributor \'Elie Roux <elie.roux\at telecom-bretagne.eu>,
+% das sie das |lua| Modul erschaffen hat.
+%
+% Ich danke \contributor Philipp Lehman <plehman\at gmx.net> das er seinem
+% \pkg{csquotes} Paket die Möglichkeit hinzugefügt hat, die ursprüngliche Bedeutung % aller aktivierten Zeichen wiederherzustellen, so dass diese für die Zeichen in
+% den Konfigurationsdateien verwendet werden können.
+% Freundlicherweise hat \contributor Peter Wilson <herries.press\at earthlink.net>
+% ein Häkchen in seinen \pkg{ledmac}/\pkg{ledpar} Paketen zur Verfügung gestellt,
+% so dass kritische Editionen, schließlich auch vom Charakter-Vorsprung profitieren.
+%
+% Zusätzlich haben die folgenden Personen Bugs gemeldet, Vorschläge gemacht oder
+% anders geholfen (in chronologischer Reihenfolge):
+% \contributor Tom Kink <kink\at hia.rwth-aachen.de>,
+% \contributor Herb Schulz <herbs\at wideopenwest.com>,
+% \contributor Michael Hoppe <mh\at michael-hoppe.de>,
+% \contributor Gary~L. Gray <gray\at engr.psu.edu>,
+% \contributor Georg Verweyen <verweyen\at gmail.com>,
+% \contributor Christoph Bier <christoph.bier\at web.de>,
+% \contributor Peter Muthesius <Pemu\at gmx.de>,
+% \contributor Bernard Gaulle <gaulle\at idris.fr>\,\textdagger,
+% \contributor Adam Kucharczyk <adamk\at ijp-pan.krakow.pl>,
+% \contributor Mark Rossi <mark.rossi\at de.bosch.com>,
+% \contributor Stephan Hennig <stephanhennig\at arcor.de>,
+% \contributor Michael Zedler <Michael.Zedler\at tum.de>,
+% \contributor Herbert Vo\ss{} <Herbert.Voss\at gmx.net>,
+% \contributor Ralf Stubner <ralf.stubner\at physik.uni-erlangen.de>,
+% \contributor Holger Uhr <huhr\at uni-paderborn.de>,
+% \contributor Peter Dyballa <Peter_Dyballa\at Web.DE>,
+% \contributor Morten H\o gholm <morten.hoegholm\at latex-project.org>,
+% \contributor Steven Bath <steven128\at iname.com>,
+% \contributor Daniel Flipo <daniel.flipo\at univ-lille1.fr>,
+% \contributor Michalis Miatidis <miatidis\at informatik.rwth-aachen.de>,
+% \contributor Sven Naumann <svenau\at gmx.net>,
+% \contributor Ross Hetherington <ross\at heth.eclipse.co.uk>,
+% \contributor Geoff Vallis <gkv\at Princeton.EDU>,
+% \contributor Steven~E. Harris <seh\at panix.com>,
+% \contributor Karl Berry <karl\at freefriends.org>,
+% \contributor Peter Meier <Peter.Meier998\at gmx.de>,
+% \contributor Nathan Rosenblum <nater\at cs.wisc.edu>,
+% \contributor Wolfram Schaalo <schaalo\at gmx.net>,
+% \contributor Vasile Gaburici <vgaburici\at gmail.com>,
+% \contributor Sveinung Heggen <sveinung.heggen\at orkla.no>,
+% \contributor Colin Rourke <gt\at msp.warwick.ac.uk>,
+% \contributor Maverick Woo <maverick\at cs.cmu.edu>,
+% \contributor Silas~S. Brown <ssb22\at cam.ac.uk>,
+% \contributor Christian Stark <cstark\at gmx.de>
+% and
+% \contributor Marcin Borkowski <mbork\at atos.wmid.amu.edu.pl>.
+%
+%
+%\begin{thebibliography}{}
+% \bibitem[Th\`anh 2000]{ThanhThesis}
+% \thanh, `Micro-typographic extensions to the \TeX\ typesetting system',
+% \newblock Diss. Masaryk University Brno 2000,
+% \newblock in: \textit{TUGBoat}, vol.~21 (2000), no.~4, pp.~317--434.
+% \newblock (Online at \url{http://www.tug.org/TUGboat/Articles/tb21-4/tb69thanh.pdf})
+%
+%\iffalse ^^A obsolete
+% \bibitem[Th\`anh 2001]{ThanhTUG}
+% \thanh, `Margin Kerning and Font Expansion with \pdftex',
+% \newblock in: \textit{TUGBoat}, vol.~22 (2001), no.~3:
+% `Proceedings of the 2001 Annual Meeting', pp.~146--148.
+% \newblock (Online at \url{http://www.tug.org/TUGboat/Articles/tb22-3/tb72thanh.pdf})
+%\fi
+%
+% \bibitem[Th\`anh 2004]{ThanhPracTeX}
+% \thanh, `Micro-typographic extensions of \pdftex\ in practice',
+% \newblock in: \textit{TUGBoat}, vol.~25 (2004), no.~1:
+% `Proceedings of the Practical \TeX\ 2004 Conference', pp.~35--38.
+% \newblock (Online at \url{http://www.tug.org/TUGboat/Articles/tb25-1/thanh.pdf})
+%
+%\iffalse
+% \bibitem[Th\`anh 2005]{ThanhEuroTeX05}
+% \thanh, `Experiences with micro-typographic extensions of \pdftex\ in practice',
+% \newblock in: Euro\TeX\ 2005 Proceedings
+% ^^A 15th~Annual Meeting of the European \TeX\ Users,
+% ^^A March~7 -- March~11, 2005, Abbaye des Pr\'emontr\'es, Pont-\`a-Mousson,
+% [=~\textit{TUGBoat}, vol.~27 (2006), no.~0],
+% pp.~159--164.
+% \newblock (Online at \url{http://www.tug.org/TUGboat/Articles/tb27-0/thanh.pdf})
+% ^^A = \url{http://www.dante.de/dante/events/eurotex/papers/TUT07.pdf}
+%\fi
+%
+% \bibitem[Th\`anh 2008]{ThanhEuroTeX07}
+% \thanh, `Font-specific issues in \pdftex',
+% \newblock in: \textit{TUGBoat}, vol.~29 (2008), no.~1:
+% `EuroBacho\TeX\ 2007 Proceedings', pp.~36--41.
+% \newblock (Online at \url{http://www.tug.org/TUGboat/Articles/tb29-1/tb91thanh-fonts.pdf})
+%
+% \bibitem[\pdftex\ manual]{pdftexman}
+% \thanh, Sebastian Rahtz, Hans Hagen, Hartmut Henkel, Pawe\l\ Jackowski, Martin Schr\"oder,
+% \emph{The \pdftex\ user manual},
+% \newblock 25 January 2007.
+% \newblock (\ctanurl{systems/pdftex/};
+% latest version at \url{http://sarovar.org/projects/pdftex/})
+% ^^A or even \url{http://foundry.supelec.fr/scm/?group_id=23}
+%
+% \bibitem[Fontname]{fontname}
+% Karl Berry, \emph{Fontname. Filenames for \TeX\ fonts},
+% \newblock July 2009.
+% \newblock (\ctanurl{info/fontname/fontname.pdf})
+%
+% \bibitem[\LaTeXe\ font selection]{fntguide}
+% \LaTeX3 Project Team, \emph{\LaTeXe\ font selection},
+% \newblock 27 November 2005.
+% \newblock (\ctanurl{macros/latex/doc/fntguide.pdf})
+%
+% \bibitem[\pkg{pdfcprot}]{pdfcprot}
+% Carsten Schurig, Tobias Schlemmer, \emph{The \pkg{pdfcprot}|.sty| package},
+% \newblock 10 June 2005.
+% \newblock (\ctanurl{macros/latex/contrib/pdfcprot/})
+%
+% \bibitem[\pkg{soul}]{soul}
+% Melchior Franz, \emph{The \pkg{soul} package},
+% \newblock 17 November 2003.
+% \newblock (\ctanurl{macros/latex/contrib/soul/}).
+%\changes{v2.3a}{2008/01/06}{mention \pkg{soulutf8}}
+% \newblock See also Heiko Oberdiek's extension of this package,
+% \pkg{soulutf8}, which adds Unicode support.
+% \newblock (\ctanurl{macros/latex/contrib/oberdiek/})
+%\end{thebibliography}
+%
+%
+%\section{Short history}
+%\changes{v1.5}{2004/12/11}{add `Short history'}
+%
+% The comprehensive list of changes can be
+% \expandafter\ifx\csname r@sec:changes\endcsname\relax
+% obtained by running `\texttt{makeindex \mbox{-s gglo.ist}
+% \mbox{-o microtype.gls} microtype.glo}'\else
+% found in appendix~\ref{sec:changes}\fi.
+% The following is a list of all changes relevant in the user land; bug and
+% compatibility fixes are swept under the rug. Numbers in brackets indicate
+% the relevant section in this manual.
+%
+%\newenvironment{History}
+% {\list\labelitemi
+% {\leftmargin 0pt
+% \parsep 0pt
+% \def\refsection##1{[##1]}
+% \def\makelabel##1{\hss\llap{##1}}}}
+% {\endlist}
+%\newcommand\Version[2]{
+% \VersionDate{#1}{#2}
+% \vskip\topsep
+% \pagebreak[2]
+% \item[#1](#2)
+% \vskip\topsep
+% \nopagebreak}
+%\newcommand\VersionDate[2]{^^A needed in the Change history
+% \global\expandafter\def\csname MTversiondate#1\endcsname{#2}}
+%
+%\begin{History}
+%
+%\Version{\expandafter\@gobble\fileversion}{\filedate}
+% \item |lua| functions moved to a dedicated file
+% \item Protrusion settings for <T2A> encoded Minion
+%
+%\Version{2.3e}{2009/11/09}
+% \item Support for the Cyrillic <T2A> encoding (protrusion, expansion, spacing)
+%
+%\Version{2.3d}{2009/03/27}
+% \item New default for expansion option `\opt{step}': 1, if \pdftex\ $\geq$ 1.40
+% \refsection{\ref{sub:options-expansion}}
+%
+%\Version{2.3c}{2008/11/11}
+% \item Support for \luatex\ enabled by default
+%
+%\VersionDate{2.3b}{2008/06/04}
+%
+%\VersionDate{2.3a}{2008/02/29}
+%
+%\Version{2.3}{2007/12/23}
+% \item New key `|outer kerning|' for \cs{SetTracking} to customise outer kerning
+% \refsection{\ref{sub:tracking}}
+% \item Adjust protrusion settings for tracking even if protrusion is not enabled
+% \item New option `\opt{verbose}|=silent|' to turn all warnings into mere messages
+% \refsection{\ref{sub:options-misc}}
+% \item The \letterspace\ package also works with \pkg{eplain} or \pkg{miniltx}
+% \refsection{\ref{sec:lettersp}}
+%
+%\Version{2.2}{2007/07/14}
+% \item Improvements to tracking/letterspacing: retain kerning (\pdftex\ $\geq$ 1.40.4);
+% automatically adjust protrusion settings
+% \item New key `|no ligatures|' for \cs{SetTracking} to disable selected or
+% all ligatures (\pdftex\ $\geq$ 1.40.4)
+% \refsection{\ref{sub:tracking}}
+% \item New keys `|spacing|' and `|outer spacing|' for \cs{SetTracking} to
+% customise interword spacing
+% \refsection{\ref{sub:tracking}}
+% \item Possibility to expand a font with different parameters (\pdftex\ $\geq$ 1.40.4)
+% ^^A ; new option `\opt{copyfonts}'
+% \refsection{\ref{sub:expansion}}
+% \item New optional argument for \cs{DisableLigatures} to disable selected ligatures only
+% \refsection{\ref{sec:disable-ligatures}}
+% \item New command \cs{DeclareMicrotypeVariants} to specify variant suffixes
+% \refsection{\ref{sub:config-file}}
+% \item New command \cs{textmicrotypecontext} as a wrapper for \cs{microtypecontext}
+% \refsection{\ref{sec:context}}
+% \item Protrusion settings for Bitstream Letter Gothic
+%^^A \item Basic support for \luatex\ (if generated with the |lua| option)
+%
+%\Version{2.1}{2007/01/21}
+% \item New command \cs{lslig} to protect ligatures in letterspaced text
+% \refsection{\ref{sec:lettersp}}
+%
+%\Version{2.0}{2007/01/14}
+% \item Support for the new extensions of \pdftex\ $\geq$ 1.40:
+% tracking/letterspacing, adjustment of interword spacing (glue),
+% and additional kerning
+% (new commands \cs{SetTracking}, \cs{SetExtraSpacing}, \cs{SetExtraKerning};
+% new options `\opt{tracking}', `\opt{spacing}', `\opt{kerning}')
+% \refsection{\ref{sub:tracking}, \ref{sub:spacing}, \ref{sub:kerning}}
+% \item New commands \cs{textls} and \cs{lsstyle} for letterspacing,
+% new option `\opt{letterspace}'
+% \refsection{\ref{sub:option-tracking}, \ref{sec:lettersp}}
+% \item New option `\opt{babel}' for automatic micro-typographic adjustment to
+% the selected language
+% \refsection{\ref{sub:options-misc}, \ref{sec:context}}
+% \item New font sets: `|smallcaps|', `|footnotesize|', `|scriptsize|'
+% \refsection{\ref{sec:font-sets}, table~\ref{tab:predefined-font-sets}}
+% \item New package `\letterspace' providing the commands for robust and
+% hyphenatable letterspacing
+% \refsection{\ref{sec:lettersp}}
+%
+%\VersionDate{1.9f}{2006/09/09}
+%
+%\Version{1.9e}{2006/07/28}
+% \item New key `|inputenc|' to specify the lists' input encodings
+% \refsection{\ref{sec:fine-tuning}}
+% \item Protrusion settings for Euler math fonts
+%
+%\Version{1.9d}{2006/05/05}
+% \item Support for the Central European <QX> encoding
+% (protrusion, inheritance)
+% \item Protrusion settings for various Euro symbol fonts (Adobe, <ITC>, \pkg{marvosym})
+% \item Support for Unicode input in the configuration (\pkg{inputenc}/|utf8|)
+%
+%\Version{1.9c}{2006/02/02}
+% \item Protrusion settings for <URW> Garamond
+%
+%\VersionDate{1.9b}{2006/01/20}
+%
+%\Version{1.9a}{2005/12/05}
+% \item Defer setup until the end of the preamble
+% ^^A ; consequently, no need to
+% ^^A change font defaults before loading \microtype, or to put it the other
+% ^^A way round, \microtype\ may now be loaded at any time
+% ^^A ; new option `\opt{defersetup}'
+% \item Inside the preamble, \cs{microtypesetup} accepts all package options
+% \refsection{\ref{sub:options-cmd}}
+% \item Protrusion settings for <T5> encoded Charter
+%
+%\Version{1.9}{2005/10/28}
+% \item New command \cs{DisableLigatures} to disable ligatures of fonts
+% (\pdftex\ $\geq$ 1.30)
+% \refsection{\ref{sec:disable-ligatures}}
+% \item New command \cs{microtypecontext} to change the configuration context;
+% new key `|context|' for the configuration commands
+% \refsection{\ref{sec:context}}
+% \item New key `|font|' to add single fonts to the font sets
+% \refsection{\ref{sec:font-sets}}
+% \item New key `|preset|' to set all characters to the specified value before
+% loading the lists
+% \item Value `|relative|' renamed to `|character|' for `|unit|' keys
+% \item Support for the Polish <OT4> encoding (protrusion, expansion, inheritance)
+% \item Support for the Vietnamese <T5> encoding (protrusion, expansion, inheritance)
+%^^A \item `\opt{DVIoutput}' option will work with \texlive\ 2004
+%
+%\Version{1.8}{2005/06/23}
+%^^A \item If font substitution has occurred, the settings for the substitute will
+%^^A be used instead of those for the selected font
+% \item New command \cs{DeclareMicrotypeSetDefault} to declare the default font sets
+% \refsection{\ref{sec:font-sets}}
+% \item New option `\opt{config}' to load a different configuration file
+% \refsection{\ref{sub:options-misc}}
+% \item New option `\opt{unit}' to measure protrusion factors relative to a
+% dimension instead of the character width
+% \refsection{\ref{sub:protrusion}}
+% \item Renamed commands from \cs{..MicroType..} to \cs{..Microtype..}
+% \item Protrusion settings for <AMS> math fonts
+% \item Protrusion settings for Times in <LY1> encoding completed
+% \item The `|allmath|' font set also includes <U> encoding
+%^^A \item 8-bit characters in the configuration finally work as advertised,
+%^^A even if made active by the \pkg{csquotes} package
+% \item When using the \pkg{ledmac} package, character protrusion will work
+% for the first time ever (\pdftex\ $\geq$ 1.30)
+%
+%\Version{1.7}{2005/03/23}
+% \item Possibility to specify ranges of font sizes in the set declarations
+% and protrusion and expansion settings
+% \refsection{\ref{sec:font-sets}, \ref{sec:fine-tuning}}
+%^^A \item Always take font size into account when trying to find protrusion resp.
+%^^A expansion settings for a given font
+%^^A \refsection{\ref{sec:fine-tuning}}
+% \item New command \cs{LoadMicrotypeFile} to load a font configuration file manually
+% \refsection{\ref{sub:config-file}}
+% \item Hook \cs{Microtype@Hook} for font package authors
+% \refsection{\ref{sub:hook}}
+% \item New option `\opt{verbose}|=errors|' to turn all warnings into errors
+%^^A \item Disable expansion inside \cmd\showhyphens
+% \item Warning when running in draft mode
+%
+%\VersionDate{1.6a}{2005/02/02}
+%
+%\Version{1.6}{2005/01/24}
+% \item New option `\opt{factor}' to influence protrusion resp. expansion of
+% all characters of a font or font set
+% \refsection{\ref{sub:options-protrusion}, \ref{sec:fine-tuning}}
+% \item When \pdftex\ is too old to expand fonts automatically, expansion
+% has to be enabled explicitly, automatic expansion will be disabled
+% \refsection{\ref{sub:options-microtype}}
+%^^A \item Protrusion settings of digits improved
+% \item Use \etex\ extensions, if available
+%
+%\Version{1.5}{2004/12/15}
+% \item When output mode is <DVI>, font expansion has to be enabled explicitly,
+% automatic expansion will be disabled
+% \refsection{\ref{sub:options-microtype}}
+% \item New option `\opt{selected}' to enable selected expansion,
+% default: |false|
+% \refsection{\ref{sub:options-expansion}, \ref{sub:expansion}}
+% \item New default for expansion option `\opt{step}': 4 (min(\opt{stretch},\opt{shrink})/5)
+% \refsection{\ref{sub:options-expansion}}
+% \item Protrusion settings for Bitstream Charter
+%
+%\VersionDate{1.4b}{2004/11/26}
+%^^A\Version{1.4b}{2004/11/26}
+%^^A \item \cs{UseMicrotypeSet} requires the set to be declared
+%^^A \refsection{\ref{sec:font-sets}}
+%
+%\VersionDate{1.4a}{2004/11/17}
+%
+%\Version{1.4}{2004/11/12}
+% \item Set up fonts independently from \LaTeX\ font loading
+%^^A (therefore, no risk of overlooking fonts anymore, and the package may
+%^^A be loaded at any time)
+%^^A \item \cs{microtypesetup} now sets the correct level of protrusion
+%^^A \refsection{\ref{sub:options-cmd}}
+% \item New option: `\opt{final}'
+% \refsection{\ref{sub:options-misc}}
+%
+%\VersionDate{1.3}{2004/10/27}
+%
+%\Version{1.2}{2004/10/03}
+% \item New font sets: `|allmath|' and `|basicmath|'
+% \refsection{\ref{sec:font-sets}, table~\ref{tab:predefined-font-sets}}
+% \item Protrusion settings for Computer Modern Roman math symbols
+% \item Protrusion settings for <TS1> encoding completed for Computer Modern
+% Roman and Adobe Garamond
+%^^A \item If an alias font name is specified, it will be used as an alternative,
+%^^A not as a replacement \refsection{\ref{sub:config-file}}
+%
+%\Version{1.1}{2004/09/21}
+% \item Protrusion settings for Adobe Minion
+% \item New command: \cs{DeclareCharacterInheritance}
+% \refsection{\ref{sub:inherit}}
+% \item Characters may also be specified as octal or hexadecimal numbers
+% \refsection{\ref{sec:fine-tuning}}
+%^^A \item Configuration file names in lowercase [\ref{sub:config-file}]
+%
+%\Version{1.0}{2004/09/11}
+% \item First <CTAN> release
+%\end{History}
+%
+%
+%\def\AppendixSettings{
+% \addtolength\textwidth{50pt}
+% \addtolength{\oddsidemargin}{-50pt}
+% \setlength{\columnwidth}{\textwidth}
+% \setlength{\hsize}{\textwidth}
+% \setlength{\linewidth}{\textwidth}
+% \footnotesize
+%}
+%\def\LPPLSettings{
+%\changes{v1.9e}{2006/06/13}{include <LPPL>}
+% \let\LPPLicense\empty
+% \def\endLPPLicense{\endmulticols\endgroup}
+% \def\LPPLsection##1{\begin{multicols}{2}[\section{##1}][12\baselineskip]}
+% \def\LPPLsubsection##1{\end{multicols}\begin{multicols}{2}[\subsection*{##1}][6\baselineskip]}
+% \def\LPPLsubsubsection{\subsubsection*}
+% \let\LPPLparagraph\textit
+% \let\LPPLfile\file
+% \def\textsc##1{\acronym{\MakeUppercase{##1}}}
+% \lstset{gobble=2,basicstyle=\MacroFont\tiny,commentstyle=,aboveskip=\smallskipamount}
+% \let\oldmakeatletter\makeatletter
+% \long\def\makeatletter##1\makeatother{\let\makeatletter\oldmakeatletter}
+% \MakePercentComment
+%}
+%
+%\StopEventually{
+% \GeneralChanges{Documentation}
+% \newpage
+% \appendix
+% \AppendixSettings
+% \typeout{:?1000} ^^A tell WinEdt not to bother about overfull boxes
+% \PrintChanges
+% \PrintIndex
+% \typeout{:?1111}
+% \InputIfFileExists{lppl.tex}\LPPLSettings\relax
+%}
+%
+% \GeneralChanges*
+%
+% ^^A =========================================================================
+%
+% ^^A Heiko Oberdiek's fix from latexbugs (latex/3540):
+%\begingroup
+% \def\x\begingroup#1\@nil{\endgroup
+% \def\DoNotIndex{\begingroup
+% \@tfor\@tempa:=\#\$\&\^\_\|\~\ \<\do{\expandafter\@makeother\@tempa}#1}}
+%\expandafter\x\DoNotIndex\@nil
+%\def\PercentIndex{}\def\LeftBraceIndex{}\def\RightBraceIndex{}
+% ^^A also index new ifs:
+%\def\@newif{newif}\newif\if@newif
+%\def\macro@finish{\macro@namepart
+% \ifx\macro@namepart\@newif\@tempswatrue\else\@tempswafalse\fi
+% \ifnot@excluded
+% \edef\@tempa{\noexpand\SpecialIndex{\bslash\macro@namepart}}\@tempa
+% \fi
+% \if@newif
+% \edef\@tempa{\noexpand\SpecialMainIndex
+% {\bslash\expandafter\@gobbletwo\macro@namepart true}}\@tempa
+% \edef\@tempa{\noexpand\SpecialMainIndex
+% {\bslash\expandafter\@gobbletwo\macro@namepart false}}\@tempa
+% \fi
+% \if@tempswa\@newiftrue\else\@newiffalse\fi
+%}
+%
+%
+%\DoNotIndex{\!,\",\',\(,\),\*,\+,\,,\-,\.,\/,\:,\;,\<,\=,\>,\?,\[,\\,\],\`,
+% \#,\$,\&,\^,\_,\|,\~,\ ,
+% \advance,\afterassignment,\aftergroup,\begingroup,\bgroup,\catcode,\char,
+% \chardef,\csname,\def,\divide,\edef,\egroup,\else,\endcsname,\endgroup,
+% \endinput,\escapechar,\everypar,\expandafter,\fi,\futurelet,\gdef,\global,
+% \hbadness,\hbox,\hsize,\hskip,\if,\ifcase,\ifcat,\ifdim,\iffalse,\ifhbox,
+% \ifhmode,\ifmmode,\ifnum,\iftrue,\ifx,\immediate,\input,\inputlineno,\jobname,
+% \kern,\lastskip,\let,\lowercase,\meaning,\multiply,\newlinechar,\noexpand,
+% \number,\or,\parfillskip,\pretolerance,\relax,\setbox,\showboxdepth,\string,
+% \the,\tolerance,\unkern,\unskip,\uppercase,\vbox,\wd,\write,\xdef}
+%^^A\DoNotIndex{\font,\fontdimen,\nullfont,\sfcode,\spacefactor,\spaceskip,
+%^^A \xspaceskip} ^^A tex
+%\DoNotIndex{\currentgrouptype,\detokenize,\dimexpr,\eTeXversion,\ifcsname,
+% \ifdefined,\numexpr}
+%^^A\DoNotIndex{\fontcharwd,\iffontchar} ^^A e-tex
+%\DoNotIndex{\pdfannot,\pdfescapestring,\pdfmatch,\pdfoutput,\pdfstrcmp,
+% \pdftexrevision,\pdftexversion}
+%^^A\DoNotIndex{\(ef,lp,rp,kn(ac,bc),(kn,sh,st)bs)code,\(left,right)marginkern,
+%^^A \tagcode,\letterspacefont,\pdfcopyfont,\pdffontexpand,\pdfnoligatures,
+%^^A \pdfprotrudechars,\pdfadjust(interwordglue,spacing),\pdf(app,prep)endkern,
+%^^A \pdftracingfonts} ^^A pdftex
+%\DoNotIndex{\directlua,\luatexversion} ^^A luatex
+%\DoNotIndex{\eplain,\usepkg@pkg} ^^A eplain
+%\DoNotIndex{\@backslashchar,\@cclv,\@cclvi,\@classoptionslist,\@currext,
+% \@currname,\@defaultunits,\@empty,\@expandtwoargs,\@firstofone,\@firstoftwo,
+% \@gobble,\@gobbletwo,\@ifl@aded,\@ifpackagelater,\@ifpackageloaded,\@ifstar,
+% \@ifundefined,\@let@token,\@m,\@makeother,\@minus,\@nameuse,\@ne,\@nil,\@nnil,
+% \@onelevel@sanitize,\@onlypreamble,\@percentchar,\@pkgextension,\@plus,
+% \@ptionlist,\@removeelement,\@secondoftwo,\@spaces,\@sptoken,\@tempa,\@tempb,
+% \@tempc,\@tempcnta,\@tempcntb,\@tempdima,\@typeset@protect,\@undefined,
+% \@unprocessedoptions,\@unusedoptionlist,\@xobeysp,\check@icr,\color@begingroup,
+% \color@endgroup,\g@addto@macro,\hmode@bgroup,\m@ne,\maybe@ic,\maybe@ic@,
+% \nfss@text,\not@math@alphabet,\on@line,\p@,\set@display@protect,\strip@prefix,
+% \strip@pt,\tw@,\z@,\z@skip,\active,\documentclass,\leavevmode,\makeatletter,
+% \maxdimen,\newcommand,\newcount,\newdimen,\newif,\newskip,\newtoks,\nobreak,
+% \nonfrenchspacing,\normalsize,\renewcommand,\space,
+% \AtBeginDocument,\AtEndOfPackage,\CheckCommand,\CurrentOption,
+% \DeclareRobustCommand,\IfFileExists,\InputIfFileExists,\MessageBreak,
+% \PackageError,\PackageInfo,\PackageWarning,\RequirePackage,
+% \@@enc@update,\cf@encoding,\f@encoding}
+%^^A\DoNotIndex{\add@accent,\curr@fontshape,\define@newfont,\do@subst@correction,
+%^^A \f@size,\font@name,\normalfont,\pickup@font,\selectfont,\set@fontsize,
+%^^A \showhyphens} ^^A latex
+%\DoNotIndex{\XeTeXversion} ^^A xetex
+%\DoNotIndex{\normalpdfoutput,\normalpdftexversion,\normalpdftexrevision} ^^A tex live
+%\DoNotIndex{\foreign@language,\languagename,\select@language,\shorthandoff} ^^A babel
+%\DoNotIndex{\percentsign} ^^A babel/spanish,galician,mexican
+%\DoNotIndex{\CJK@ifundefined,\CJK@plane,\CJK@temp,\CJK@addcmap} ^^A CJK,CJKutf8
+%\DoNotIndex{\@disablequotes} ^^A csquotes
+%\DoNotIndex{\pdfstringdefDisableCommands,\pdfstringdefWarn} ^^A hyperref
+%\DoNotIndex{\ifpdf} ^^A ifpdf
+%\DoNotIndex{\@inpenc@undefined@,\IeC,\inputencoding,\inputencodingname} ^^A inputenc
+%\DoNotIndex{\UTFviii@defined} ^^A inputenc/utf8
+%\DoNotIndex{\PrerenderUnicode,\unicode@charfilter} ^^A inputenc/utf8x
+%\DoNotIndex{\define@key,\KV@@sp@def,\setkeys} ^^A keyval
+%\DoNotIndex{\l@dunhbox@line} ^^A ledmac,ledpar
+%\DoNotIndex{\lst@ProcessLetter} ^^A listings
+%\DoNotIndex{\pdf@escapestring} ^^A pdftexcmds
+%\DoNotIndex{\py@macron} ^^A pinyin
+%\DoNotIndex{\SOUL@,\soulregister} ^^A soul
+%\DoNotIndex{\tikz@expandcount} ^^A tikz
+%\DoNotIndex{\conditionally@traceoff} ^^A trace
+%\DoNotIndex{\x,\MT@dinfo,\MT@dinfo@nl,\tracingmicrotype,\tracingmicrotypeinpdf,
+% \ifMT@inannot,\MT@inannottrue,\MT@inannotfalse,\MT@addto@annot,\MT@pdf@annot,
+% \MT@show@pdfannot,\iftracingmicrotypeinpdfall,\tracingmicrotypeinpdfalltrue,
+% \tracingmicrotypeinpdfallfalse,\DeclareMicroTypeSet,\DeclareMicroTypeAlias,
+% \UseMicroTypeSet,\LoadMicroTypeFile,\MicroType@Hook} ^^A microtype
+%
+% ^^A -------------------------------------------------------------------------
+%
+%\newpage
+%\ImplementationSettings
+%\ifpdf\hypersetup{bookmarksopen=false}\fi
+%
+%\section{Implementation}
+%
+% The \pkg{docstrip} modules in this file are:
+% \begin{description}
+% \item[|driver|] The documentation driver, only visible in the \file{dtx} file.
+% \item[|package|] The code for the \microtype\ package (\file{microtype.sty}).
+% \begin{description}
+% \item[|letterspace|] The code for the \letterspace\ package (\file{letterspace.sty}).
+% \item[|lua|] Code for \luatex\ (\microtype\ only).
+% \item[|plain|] Code for \pkg{eplain}, \pkg{miniltx} (\letterspace\ only).
+% \item[|debug|] Code for additional output in the log file.
+% \\Used for -- surprise! -- debugging purposes.
+% \end{description}
+% \item[|config|] Surrounds all configuration modules.
+% \begin{description}
+% \item[|cfg-t|] Surrounds (Latin) text configurations.
+% \begin{description}
+% \item[|m-t|] The main configuration file (\file{microtype.cfg}).
+% \item[|bch|] Settings for Bitstream Charter (\file{mt-bch.cfg}).
+% \item[|blg|] Settings for Bitstream Letter Gothic (\file{mt-blg.cfg}).
+% \item[|cmr|] Settings for Computer Modern Roman (\file{mt-cmr.cfg}).
+% \item[|pad|] Settings for Adobe Garamond (\file{mt-pad.cfg}).
+% \item[|ppl|] Settings for Palatino (\file{mt-ppl.cfg}).
+% \item[|ptm|] Settings for Times (\file{mt-ptm.cfg}).
+% \item[|pmn|] Settings for Adobe Minion (\file{mt-pmn.cfg}).
+% \\Contributed by \contributor Harald Harders <h.harders\at tu-bs.de>.
+% \item[|ugm|] Settings for <URW> Garamond (\file{mt-ugm.cfg}).
+% \end{description}
+% \item[|cfg-u|] Surrounds non-text configurations (<U> encoding).
+% \begin{description}
+% \item[|msa|] Settings for <AMS> `a' symbol font (\file{mt-msa.cfg}).
+% \item[|msb|] Settings for <AMS> `b' symbol font (\file{mt-msb.cfg}).
+% \item[|euf|] Settings for Euler Fraktur font (\file{mt-euf.cfg}).
+% \item[|eur|] Settings for Euler Roman font (\file{mt-eur.cfg}).
+% \item[|eus|] Settings for Euler Script font (\file{mt-eus.cfg}).
+% \end{description}
+% \item[|cfg-e|] Surrounds Euro symbol configurations.
+% \begin{description}
+% \item[|zpeu|] Settings for Adobe Euro symbol fonts (\file{mt-zpeu.cfg}).
+% \item[|euroitc|] Settings for <ITC> Euro symbol fonts (\file{mt-euroitc.cfg}).
+% \item[|mvs|] Settings for \pkg{marvosym} Euro symbol (\file{mt-mvs.cfg}).
+% \end{description}
+% \end{description}
+% \item[|test|] A helper file that may be used to create and test
+% protrusion settings\\(\file{test-microtype.tex}).
+% \end{description}
+% And now for something completely different.
+%
+% \begin{macrocode}
+%<*package|letterspace>
+% \end{macrocode}
+%
+%\subsection{Preliminaries}
+%
+%\begin{macro}{\MT@MT}
+% This is us.
+% \begin{macrocode}
+\def\MT@MT
+%<package> {microtype}
+%<letterspace> {letterspace}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@fix@catcode}
+%\changes{v1.3}{2004/10/27}{check some category codes (compatibility with \pkg{german})}
+%\changes{v1.5}{2004/12/03}{reset catcode of `\texttt{\^}' (compatibility with \pkg{chemsym})}
+%\changes{v2.3a}{2007/12/29}{fix catcodes earlier, and also for the \letterspace\ package}
+% We have to make sure that the category codes of some characters are correct
+% (the \pkg{german} package, for instance, makes |"| active). Probably overly
+% cautious. Ceterum censeo: it should be forbidden for packages to change
+% catcodes within the preamble.
+%\begin{macro}{\MT@restore@catcodes}
+% Polite as we are, we'll restore them afterwards.
+% \begin{macrocode}
+\let\MT@restore@catcodes\@empty
+% \end{macrocode}
+%\end{macro}
+% \begin{macrocode}
+\def\MT@fix@catcode#1#2{%
+ \edef\MT@restore@catcodes{%
+ \MT@restore@catcodes
+ \catcode#1 \the\catcode#1\relax
+ }%
+ \catcode#1 #2\relax
+}
+%<package>\MT@fix@catcode{17}{14}% ^^Q (comment)
+\MT@fix@catcode{24} {9}% ^^X (ignore)
+%<package>\MT@fix@catcode{33}{12}% !
+%<package>\MT@fix@catcode{34}{12}% "
+\MT@fix@catcode{36} {3}% $ (math shift)
+\MT@fix@catcode{39}{12}% '
+\MT@fix@catcode{42}{12}% *
+\MT@fix@catcode{43}{12}% +
+\MT@fix@catcode{44}{12}% ,
+\MT@fix@catcode{45}{12}% -
+\MT@fix@catcode{58}{12}% :
+\MT@fix@catcode{60}{12}% <
+\MT@fix@catcode{61}{12}% =
+\MT@fix@catcode{62}{12}% >
+%<package>\MT@fix@catcode{63}{12}% ?
+\MT@fix@catcode{94} {7}% ^ (superscript)
+\MT@fix@catcode{96}{12}% `
+%<package>\MT@fix@catcode{124}{12}% |
+% \end{macrocode}
+%\end{macro}
+% These are all commands for the outside world. We define them here as blank
+% commands, so that they won't generate an error if we are not running \pdftex.
+% \begin{macrocode}
+%<*package>
+\newcommand*\DeclareMicrotypeSet[3][]{}
+\newcommand*\UseMicrotypeSet[2][]{}
+\newcommand*\DeclareMicrotypeSetDefault[2][]{}
+\newcommand*\SetProtrusion[3][]{}
+\newcommand*\SetExpansion[3][]{}
+\newcommand*\SetTracking[3][]{}
+\newcommand*\SetExtraKerning[3][]{}
+\newcommand*\SetExtraSpacing[3][]{}
+\newcommand*\DisableLigatures[2][]{}
+\newcommand*\DeclareCharacterInheritance[3][]{}
+\newcommand*\DeclareMicrotypeVariants[1]{}
+\newcommand*\DeclareMicrotypeAlias[2]{}
+\newcommand*\LoadMicrotypeFile[1]{}
+\newcommand*\DeclareMicrotypeBabelHook[2]{}
+\newcommand*\microtypesetup[1]{}
+\newcommand*\microtypecontext[1]{}
+\newcommand*\textmicrotypecontext[2]{#2}
+\@ifpackageloaded{letterspace}{\let\MT@textls\relax}{%
+%</package>
+\newcommand*\lsstyle{}
+\newcommand\textls[2][]{}
+\def\textls#1#{}
+\newcommand*\lslig[1]{#1}
+%<*package>
+}
+% \end{macrocode}
+% These commands also have a starred version.
+% \begin{macrocode}
+\def\DeclareMicrotypeSet#1#{\@gobbletwo}
+\def\DeclareMicrotypeVariants#1#{\@gobble}
+% \end{macrocode}
+% Set declarations are only allowed in the preamble (resp. the main
+% configuration file). The configuration commands, on the other hand, must be
+% allowed in the document, too, since they may be called inside font
+% configuration files, which, in principle, may be loaded at any time.
+% \begin{macrocode}
+\@onlypreamble\DeclareMicrotypeSet
+\@onlypreamble\UseMicrotypeSet
+\@onlypreamble\DeclareMicrotypeSetDefault
+\@onlypreamble\DisableLigatures
+\@onlypreamble\DeclareMicrotypeVariants
+\@onlypreamble\DeclareMicrotypeBabelHook
+% \end{macrocode}
+%\begin{macro}{\MT@old@cmd}
+% The old command names had one more hunch.
+%\changes{v1.8}{2005/04/28}{renamed commands from \cs{..MicroType..} to \cs{..Microtype..}}
+% \begin{macrocode}
+\def\MT@old@cmd#1#2{%
+ \newcommand*#1{\MT@warning{%
+ \string#1 is deprecated. Please use\MessageBreak
+ \string#2 instead}%
+ \let #1#2#2}}
+% \end{macrocode}
+%\end{macro}
+% \begin{macrocode}
+\MT@old@cmd\DeclareMicroTypeAlias\DeclareMicrotypeAlias
+\MT@old@cmd\DeclareMicroTypeSet \DeclareMicrotypeSet
+\MT@old@cmd\UseMicroTypeSet \UseMicrotypeSet
+\MT@old@cmd\LoadMicroTypeFile \LoadMicrotypeFile
+%</package>
+% \end{macrocode}
+%\begin{macro}{\MT@warning}
+%\begin{macro}{\MT@warning@nl}
+%\begin{macro}{\MT@info}
+%\begin{macro}{\MT@info@nl}
+%\begin{macro}{\MT@vinfo}
+%\changes{v1.6}{2005/01/06}{new macro instead of \cs{ifMT@verbose}}
+%\begin{macro}{\MT@error}
+%\begin{macro}{\MT@warn@err}
+%\changes{v1.7}{2005/03/16}{new macro: for \opt{verbose}\texttt{\quotechar=errors}}
+% Communicate.
+% \begin{macrocode}
+\def\MT@warning{\PackageWarning\MT@MT}
+\def\MT@warning@nl#1{\MT@warning{#1\@gobble}}
+%<*package>
+\def\MT@info{\PackageInfo\MT@MT}
+\def\MT@info@nl#1{\MT@info{#1\@gobble}}
+\let\MT@vinfo\@gobble
+\def\MT@error{\PackageError\MT@MT}
+\def\MT@warn@err#1{\MT@error{#1}{%
+ This error message appears because you loaded the `\MT@MT'\MessageBreak
+ package with the option `verbose=errors'. Consult the documentation\MessageBreak
+ in \MT@MT.pdf to find out what went wrong.}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%
+%\subsubsection{Debugging}
+%
+%\begin{macro}{\tracingmicrotype}
+%\begin{macro}{\MT@dinfo}
+%\begin{macro}{\MT@dinfo@nl}
+% Cases for \cs{tracingmicrotype}:
+%\begin{enum}
+% \item almost none
+% \item + sets \& lists
+% \item + heirs
+% \item + slots
+% \item + factors
+%\end{enum}
+% \begin{macrocode}
+%<*debug>
+\MT@warning@nl{This is the debug version}
+\newcount\tracingmicrotype
+\tracingmicrotype=2
+\def\MT@info#1{\PackageInfo\MT@MT{#1}\MT@addto@annot{#1}}
+\def\MT@info@nl#1{\PackageInfo\MT@MT{#1\@gobble}\MT@addto@annot{#1}}
+\let\MT@vinfo\MT@info@nl
+\def\MT@warning#1{\PackageWarning\MT@MT{#1}\MT@addto@annot{Warning: #1}}
+\def\MT@warning@nl#1{\PackageWarning\MT@MT{#1\@gobble}\MT@addto@annot{Warning: #1}}
+\def\MT@dinfo#1#2{\ifnum\tracingmicrotype<#1 \else\MT@info{#2}\fi}
+\def\MT@dinfo@nl#1#2{\ifnum\tracingmicrotype<#1 \else\MT@info@nl{#2}\fi}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\tracingmicrotypeinpdf}
+%\changes{v2.0}{2006/09/21}{new debug method: mark all fonts with <PDF> annotations}
+% Another debug method: font switches can be marked in the <PDF> file with a
+% small caret, an accompanying popup text box displaying all debug messages.
+%
+% Cases for \cs{tracingmicrotypeinpdf}:
+%\begin{enum}[1]
+% \item show new fonts
+% \item + show known fonts
+%\end{enum}
+% \begin{macrocode}
+\newcount\tracingmicrotypeinpdf
+% \end{macrocode}
+%\end{macro}
+%\ifpdf\ifx\tracingmicrotypeinpdf\undefined
+% \fallbacktext{If \file{microtype.sty} had been generated with the `|debug|'
+% option,\\this method would be demonstrated here.}
+%\else
+% Let's see how it works~\dots
+%\begin{verbatim}
+%\tracingmicrotypeinpdf=2
+%\end{verbatim}
+%\tracingmicrotypeinpdf=2
+%\fi\fi
+%\begin{macro}{\MT@pdf@annot}
+%\begin{macro}{\MT@addto@annot}
+%\begin{macro}{\ifMT@inannot}
+% During font setup, we save the text for the popup in \cs{MT@pdf@annot}.
+% (This requires \pdftex\ $\geq$~1.30.)
+% The \pkg{pdftexcmds} package provides \pdftex's utility commands in \luatex, too.
+%\changes{v2.3d}{2009/02/27}{use \pkg{pdftexcmds} for debugging}
+% \begin{macrocode}
+\RequirePackage{pdftexcmds}
+\newif\ifMT@inannot \MT@inannottrue
+\let\MT@pdf@annot\@empty
+\def\MT@addto@annot#1{\ifnum\tracingmicrotypeinpdf>\z@ \ifMT@inannot
+ {\def\MessageBreak{^^J\@spaces}%
+ \MT@xadd\MT@pdf@annot{\pdf@escapestring{#1^^J}}}\fi\fi}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\iftracingmicrotypeinpdfall}
+% With \cs{tracingmicrotypeinpdfallfalse}, the <PDF> output is (hopefully)
+% identical, but some font switches will not be displayed; otherwise the output
+% is affected, but \emph{all} font switches are visible. In the latter case, we
+% also insert a small kern so that multiple font switches are discernable.
+% \begin{macrocode}
+\newif\iftracingmicrotypeinpdfall
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@show@pdfannot}
+% A red caret is shown for fonts which are actually set up by
+% {\ifpdf\ifx\tracingmicrotypeinpdf\undefined\else\fontfamily{pzc}\itshape\fi\fi
+% Microtype},
+% a green one marks fonts that we have already seen. The |/Caret| annotation
+% requires a viewer for <PDF> version 1.5 (you could use |/Text| if you're
+% using an older <PDF> viewer).
+% \begin{macrocode}
+\def\MT@show@pdfannot#1{%
+ \ifnum\tracingmicrotypeinpdf<#1 \else
+ \iftracingmicrotypeinpdfall\leavevmode\fi
+ \pdfannot height 4pt width 4pt depth 2pt {%
+ /Subtype/Caret
+ /T(\expandafter\string\font@name)
+ \ifcase#1\or
+ /Subj(New font)/C[1 0 0]
+ \else
+ /Subj(Known font)/C[0 1 0]
+ \fi
+ /Contents(\MT@pdf@annot)
+ }%
+ \iftracingmicrotypeinpdfall\kern1pt \fi
+ \global\MT@inannotfalse
+ \fi
+}
+%</debug>
+%</package>
+% \end{macrocode}
+%\end{macro}
+%\ifpdf\ifx\tracingmicrotypeinpdf\undefined\else
+% \tracingmicrotypeinpdf0
+% \tracingmicrotype0
+%\fi\fi
+%
+%\subsubsection{Requirements}
+%
+%\begin{macro}{\MT@plain}
+% The \letterspace\ package works with:
+%\begin{enum}
+%\changes{v2.3}{2007/11/07}{\letterspace: support for \pkg{eplain}/\pkg{miniltx}}
+% \item \pkg{miniltx}
+% \item \pkg{eplain} ^^A tested with eplain v3.1, 2006/12/03; v3.2, 2007/11/26; v3.3, 2009/07/21
+% \item \LaTeX
+%\end{enum}
+% For plain usage, we have to copy some commands from \file{latex.ltx}.
+% \begin{macrocode}
+%<*plain>
+\def\MT@plain{2}
+\ifx\documentclass\@undefined
+ \def\MT@plain{1}
+ \def\hmode@bgroup{\leavevmode\bgroup}
+ \def\nfss@text#1{{\mbox{#1}}}
+ \let\@typeset@protect\relax
+ \ifx\eplain\@undefined
+ \def\MT@plain{0}
+ \def\PackageWarning#1#2{%
+ \begingroup
+ \newlinechar=10 %
+ \def\MessageBreak{^^J(#1)\@spaces\@spaces\@spaces\@spaces}%
+ \immediate\write16{^^JPackage #1 Warning: #2\on@line.^^J}%
+ \endgroup
+ }
+ \def\on@line{ on input line \the\inputlineno}
+ \def\@spaces{\space\space\space\space}
+ \fi
+\fi
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@requires@latex}
+%\changes{v2.3b}{2008/05/26}{new macro}
+% Better use groups than plain ifs.
+% \begin{macrocode}
+\def\MT@requires@latex#1{%
+ \ifnum\MT@plain<#1 \expandafter\@secondoftwo\else\expandafter\@firstoftwo\fi
+}
+%</plain>
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@pdftex@no}
+%\changes{v1.6a}{2005/02/02}{new macro}
+% \pdftex's features for which we provide an interface here haven't always been
+% available, and some specifics have changed over time. Therefore, we have to
+% test which \pdftex\ we're using, if any. \cs{MT@pdftex@no} will be used
+% throughout the package to respectively do the right thing.
+%
+% Currently, we have to distinguish seven cases for \pdftex:
+%\begin{enum}
+% \item not running \pdftex
+% \item \pdftex\ ($\less$~0.14f)
+% \item + micro-typographic extensions (0.14f,g)
+% \item + protrusion relative to 1\,em ($\geq$~0.14h)
+% \item + automatic font expansion;
+% protrusion no longer has to be set up first;
+% scale factor fixed to 1000;
+% default \cmd\efcode\,=\,1000 ($\geq$~1.20)
+%\changes{v1.8}{2005/04/15}{case 5: \pdftex\ 1.30}
+% \item + \cmd{\(left,right)marginkern};
+% \cmd\pdfnoligatures;
+% \cmd\pdfstrcmp;
+% \cmd\pdfescapestring\ ($\geq$~1.30)
+%\changes{v2.0}{2005/08/20}{(beta:1) case 6: \pdftex\ 1.40}
+% \item + adjustment of interword spacing;
+% extra kerning;
+% \cmd\letterspacefont;
+% \cmd\pdfmatch\footnote{This command was actually introduced
+% in 1.30, but failed on strings longer than 1023 bytes.};
+% \cmd\pdftracingfonts;
+% always \etex\
+% ($\geq$~1.40)
+%\changes{v2.2}{2007/02/23}{case 7: \pdftex\ 1.40.4}
+% \item + \cmd\letterspacefont\ doesn't disable ligatures and kerns;
+% \cmd\pdfcopyfont\
+% ($\geq$~1.40.4)
+%\end{enum}
+%\changes{v1.1}{2004/09/13}{fix: version check
+% (reported by \contributor Harald Harders <h.harders\at tu-bs.de>)}
+% ^^A private mail, 2004/09/13
+% \begin{macrocode}
+\def\MT@pdftex@no{0}
+% \end{macrocode}
+%\changes{v1.9}{2005/08/29}{compatibility with \texlive\ hack
+% (reported by \contributor Herbert Vo\ss{} <Herbert.Voss\at gmx.net>)}
+% ^^A MID: <deprh8$c69$00$1@news.t-online.com>
+% A hack circumventing the \texlive\ 2004 hack which undefines the \pdftex\
+% primitives in the format in order to hide the fact that \pdftex\ is being run
+% from the user. This has been \emph{fixed} in \texlive\ 2005.
+% \begin{macrocode}
+\ifx\normalpdftexversion\@undefined \else
+ \let\pdftexversion \normalpdftexversion
+ \let\pdftexrevision\normalpdftexrevision
+ \let\pdfoutput \normalpdfoutput
+\fi
+% \end{macrocode}
+% Old packages might have let \cmd\pdftexversion\ to \cmd\relax.
+% \begin{macrocode}
+\ifx\pdftexversion\@undefined \else
+ \ifx\pdftexversion\relax \else
+%<debug>\MT@dinfo@nl{0}{this is pdftex \the\pdftexversion(\pdftexrevision)}
+ \def\MT@pdftex@no{7}
+%<*package>
+ \ifnum\pdftexversion = 140
+ \ifnum\pdftexrevision < 4
+ \def\MT@pdftex@no{6}
+ \fi
+ \else
+%</package>
+ \ifnum\pdftexversion < 140
+ \def\MT@pdftex@no{5}
+%<*package>
+ \ifnum\pdftexversion < 130
+ \def\MT@pdftex@no{4}
+ \ifnum\pdftexversion < 120
+ \def\MT@pdftex@no{3}
+ \ifnum\pdftexversion = 14
+ \ifnum \expandafter`\pdftexrevision < `h
+ \def\MT@pdftex@no{2}
+ \ifnum \expandafter`\pdftexrevision < `f
+ \def\MT@pdftex@no{1}
+ \fi
+ \fi
+ \else
+ \ifnum\pdftexversion < 14
+ \def\MT@pdftex@no{1}
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+%</package>
+ \fi
+ \fi
+\fi
+%<debug>\MT@dinfo@nl{0}{pdftex no.: \MT@pdftex@no}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@clear@options}
+% If we are not using \pdftex\ or in case it is too old, we disable everything
+% and exit.
+% \begin{macrocode}
+\def\MT@clear@options{%
+%<plain> \MT@requires@latex1{%
+ \AtEndOfPackage{\let\@unprocessedoptions\relax}%
+ \let\CurrentOption\@empty
+%<plain> }\relax
+}
+% \end{macrocode}
+%\end{macro}
+% \begin{macrocode}
+\ifnum\MT@pdftex@no <
+%<package> 2
+%<letterspace> 6
+ \MT@warning@nl{You
+ \ifcase\MT@pdftex@no
+ don't seem to be using pdftex.\MessageBreak
+ `\MT@MT' only works with pdftex.\MessageBreak
+ Try running `pdflatex' instead of
+ `\ifx\XeTeXversion\@undefined\else xe\fi latex'%
+ \else
+ are using a pdftex version older than
+%<package> 0.14f%
+%<letterspace> 1.40%
+ .\MessageBreak
+ `\MT@MT' does not work with this version.\MessageBreak
+ Please install a newer version of pdftex%
+ \fi
+ }
+ \MT@clear@options\MT@restore@catcodes
+\endinput\fi
+% \end{macrocode}
+%\changes{v2.3c}{2008/09/09}{\luatex\ supported by default}
+% Since \luatex\ is included in \texlive\ 2008, we now support it by default,
+% even though it's still experimental. Letterspacing doesn't work at all yet,
+% since \luatex\ doesn't know the \cmd\letterspacefont\ command.
+% \begin{macrocode}
+%<*!lua|letterspace>
+\ifx\directlua\@undefined \else
+ \ifx\directlua\relax \else
+%<!letterspace> \MT@error
+%<letterspace> \MT@warning@nl
+ {`\MT@MT'
+%<!letterspace> only works with luatex if you generate%
+%<letterspace> doesn't currently work with luatex.%
+ \MessageBreak
+%<!letterspace> the package with the `lua' option%
+%<letterspace> Bye bye%
+ }
+%<!letterspace> {}
+%<letterspace> \MT@clear@options\MT@restore@catcodes
+%<letterspace> \expandafter\expandafter\expandafter\endinput
+ \fi
+\fi
+%</!lua|letterspace>
+% \end{macrocode}
+% Still there? Then we can begin:
+% We need the \pkg{keyval} package, including the `new' \cmd\KV@@sp@def\
+% implementation.
+%\changes{v2.1}{2007/01/15}{fix: \letterspace\ package forgot to load \pkg{keyval}}
+% \begin{macrocode}
+\RequirePackage{keyval}[1997/11/10]
+%<*package>
+% \end{macrocode}
+%\begin{macro}{\MT@toks}
+% We need a token register.
+%\changes{v1.9}{2005/09/28}{use instead of \cmd\toks@}
+% \begin{macrocode}
+\newtoks\MT@toks
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ifMT@if@}
+% A scratch if.
+% \begin{macrocode}
+\newif\ifMT@if@
+% \end{macrocode}
+%\end{macro}
+%
+%\subsubsection{Declarations}
+%
+%\begin{macro}{\ifMT@protrusion}
+%\begin{macro}{\ifMT@expansion}
+%\begin{macro}{\ifMT@auto}
+%\begin{macro}{\ifMT@selected}
+%\begin{macro}{\ifMT@noligatures}
+%\begin{macro}{\ifMT@draft}
+%\begin{macro}{\ifMT@spacing}
+%\begin{macro}{\ifMT@kerning}
+%\begin{macro}{\ifMT@tracking}
+%\begin{macro}{\ifMT@babel}
+% These are the global switches~\dots
+% \begin{macrocode}
+\newif\ifMT@protrusion
+\newif\ifMT@expansion
+\newif\ifMT@auto
+\newif\ifMT@selected
+\newif\ifMT@noligatures
+\newif\ifMT@draft
+\newif\ifMT@spacing
+\newif\ifMT@kerning
+\newif\ifMT@tracking
+\newif\ifMT@babel
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@pr@level}
+%\begin{macro}{\MT@ex@level}
+%\begin{macro}{\MT@pr@factor}
+%\begin{macro}{\MT@ex@factor}
+%\begin{macro}{\MT@sp@factor}
+%\begin{macro}{\MT@kn@factor}
+% \dots~and numbers.
+% \begin{macrocode}
+\let\MT@pr@level\tw@
+\let\MT@ex@level\tw@
+\let\MT@pr@factor\@m
+\let\MT@ex@factor\@m
+\let\MT@sp@factor\@m
+\let\MT@kn@factor\@m
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@pr@unit}
+%\begin{macro}{\MT@sp@unit}
+%\begin{macro}{\MT@kn@unit}
+% Default unit for protrusion settings is character width, for spacing
+% |space|, for kerning (and tracking) 1\,em.
+% \begin{macrocode}
+\let\MT@pr@unit\@empty
+\let\MT@sp@unit\m@ne
+\def\MT@kn@unit{1em}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@stretch}
+%\begin{macro}{\MT@shrink}
+%\begin{macro}{\MT@step}
+% Expansion settings.
+% \begin{macrocode}
+\let\MT@stretch\m@ne
+\let\MT@shrink \m@ne
+\let\MT@step \m@ne
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@pr@min}
+%\begin{macro}{\MT@pr@max}
+%\begin{macro}{\MT@ex@min}
+%\begin{macro}{\MT@ex@max}
+%\begin{macro}{\MT@sp@min}
+%\begin{macro}{\MT@sp@max}
+%\begin{macro}{\MT@kn@min}
+%\begin{macro}{\MT@kn@max}
+%\begin{macro}{\MT@tr@min}
+%\begin{macro}{\MT@tr@max}
+% Minimum and maximum values allowed by \pdftex.
+% \begin{macrocode}
+\def\MT@pr@min{-\@m}
+\let\MT@pr@max\@m
+\let\MT@ex@min\z@
+\let\MT@ex@max\@m
+\def\MT@sp@min{-\@m}
+\let\MT@sp@max\@m
+\def\MT@kn@min{-\@m}
+\let\MT@kn@max\@m
+%</package>
+\def\MT@tr@min{-\@m}
+\let\MT@tr@max\@m
+%<*package>
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@factor@default}
+% Default factor.
+% \begin{macrocode}
+\def\MT@factor@default{1000 }
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@stretch@default}
+%\begin{macro}{\MT@shrink@default}
+%\begin{macro}{\MT@step@default}
+% Default values for expansion.
+% \begin{macrocode}
+\def\MT@stretch@default{20 }
+\def\MT@shrink@default{20 }
+\def\MT@step@default{4 }
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@letterspace}
+%\begin{macro}{\MT@letterspace@default}
+% Default value for letterspacing (in thousandths of 1\,em).
+% \begin{macrocode}
+%</package>
+\let\MT@letterspace\m@ne
+\def\MT@letterspace@default{100}
+%<*package>
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\ifMT@document}
+% Our private test whether we're still in the preamble.
+% \begin{macrocode}
+\newif\ifMT@document
+% \end{macrocode}
+%\end{macro}
+%
+%\subsubsection{Auxiliary macros}
+%
+%\begin{macro}{\MT@maybe@etex}
+%\changes{v2.2}{2007/05/01}{use catcode trickery}
+%\changes{v2.3a}{2007/12/29}{removed}
+% For definitions that depend on \etex\ features.
+% \begin{macrocode}
+\ifcase 0%
+ \ifx\eTeXversion\@undefined 1\else
+ \ifx\eTeXversion\relax 1\else
+ \ifcase\eTeXversion 1\fi
+ \fi
+ \fi
+\else
+ \catcode`\^^Q=9 \catcode`\^^X=14
+\fi
+%<debug>\MT@dinfo@nl{0}{this is
+%<debug>^^Q not
+%<debug> etex}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@requires@pdftex}
+% For definitions that depend on a particular \pdftex\ version.
+% \begin{macrocode}
+\def\MT@requires@pdftex#1{%
+ \ifnum\MT@pdftex@no<#1 \expandafter\@secondoftwo\else\expandafter\@firstoftwo\fi
+}
+%<debug>\MT@requires@pdftex6{\pdftracingfonts=1 }\relax
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@requires@luatex}
+%\changes{v2.2}{2007/05/10}{(basic) support for \luatex}
+% For definitions that depend on \luatex.
+% \begin{macrocode}
+%<*lua>
+\let\MT@requires@luatex\@secondoftwo
+\ifx\directlua\@undefined \else
+ \ifx\directlua\relax \else
+ \let\MT@requires@luatex\@firstoftwo
+ \fi
+\fi
+%<debug>\MT@dinfo@nl0{this is \MT@requires@luatex{}{not }luatex}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@lua}
+% Communicate with |lua|.
+% Beginning with \luatex\ 0.36, \cmd\directlua\ no longer requires a state
+% number.
+%\changes{v2.3d}{2009/03/25}{update for \luatex\ 0.36}
+% \cmd\luatexversion\ ought to have been enabled by the format.
+% \begin{macrocode}
+\MT@requires@luatex{
+\ifnum\luatexversion<36
+ \def\MT@lua{\directlua0}
+\else
+ \def\MT@lua{\directlua}
+\fi
+% \end{macrocode}
+%\end{macro}
+% Some functions are loaded from a dedicated |lua| file. This avoids character
+% escaping problems and incompatibilities between versions of \luatex.
+% If available, we'll use the \pkg{luatextra} package to load the module.
+% \begin{macrocode}
+\MT@lua{
+ if (luatextra and luatextra.use_module) then
+ luatextra.use_module("microtype")
+ else
+ dofile(kpse.find_file("microtype.lua"))
+ end}
+}\relax
+%</lua>
+%</package>
+%</package|letterspace>
+% \end{macrocode}
+% Here it begins. The module was contributed by \'Elie Roux.
+%\changes{v2.4}{2009/11/12}{new file \file{microtype.lua} containing the \texttt{lua} functions
+% (contributed by \contributor \'Elie Roux <elie.roux\at telecom-bretagne.eu>)}
+% \begin{macrocode}
+%<*luafile>
+if microtype then
+ -- we simply don't load
+else
+
+microtype = {}
+
+microtype.module = {
+ name = "microtype",
+ version = 2.4,
+ date = "2010/01/10",
+ description = "microtype module.",
+ author = "R Schlicht",
+ copyright = "R Schlicht",
+ license = "LPPL",
+}
+
+if luatextra and luatextra.provides_module then
+ luatextra.provides_module(microtype.module)
+end
+
+%</luafile>
+% \end{macrocode}
+% To be continued, but first back to primitives.
+%\begin{macro}{\MT@glet}
+%\changes{v1.9f}{2006/08/09}{new macro}
+% Here's the forgotten one.
+% \begin{macrocode}
+%<*package|letterspace>
+\def\MT@glet{\global\let}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@exp@cs}
+%\begin{macro}{\MT@exp@gcs}
+%\changes{v2.3b}{2008/03/07}{new macro: reduce save stack size}
+% Commands to create command sequences. Those that are going to be defined
+% globally should be created inside a group so that the save stack won't
+% explode.
+% \begin{macrocode}
+\def\MT@exp@cs#1#2{\expandafter#1\csname#2\endcsname}
+%<*package>
+\def\MT@exp@gcs#1#2{\begingroup\expandafter\endgroup\expandafter#1\csname#2\endcsname}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\changes{v1.4b}{2004/11/21}{optimisation: use less \cmd\expandafter s and \cmd\csname s}
+%\begin{macro}{\MT@def@n}
+%\begin{macro}{\MT@gdef@n}
+%\changes{v1.9f}{2006/08/09}{new macros: global variants}
+% This is \cmd\@namedef\ and global.
+% \begin{macrocode}
+\def\MT@def@n{\MT@exp@cs\def}
+\def\MT@gdef@n{\MT@exp@gcs\gdef}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@edef@n}
+%\begin{macro}{\MT@xdef@n}
+% Its expanding versions.
+% \begin{macrocode}
+%</package>
+\def\MT@edef@n{\MT@exp@cs\edef}
+%<*package>
+\def\MT@xdef@n{\MT@exp@gcs\xdef}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@let@nc}
+%\begin{macro}{\MT@glet@nc}
+% \cmd\let\ a \cmd\csname\ sequence to a command.
+% \begin{macrocode}
+\def\MT@let@nc{\MT@exp@cs\let}
+\def\MT@glet@nc{\MT@exp@gcs\MT@glet}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@let@cn}
+% \cmd\let\ a command to a \cmd\csname\ sequence.
+% \begin{macrocode}
+\def\MT@let@cn#1#2{\expandafter\let\expandafter#1\csname #2\endcsname}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@let@nn}
+%\begin{macro}{\MT@glet@nn}
+% \cmd\let\ a \cmd\csname\ sequence to a \cmd\csname\ sequence.
+% \begin{macrocode}
+\def\MT@let@nn{\MT@exp@cs\MT@let@cn}
+\def\MT@glet@nn{\MT@exp@gcs{\global\expandafter\MT@let@cn}}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@@font}
+% Remove trailing space from the font name.
+% \begin{macrocode}
+\def\MT@@font{\expandafter\string\MT@font}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@exp@one@n}
+% Expand the second token once and enclose it in braces.
+% \begin{macrocode}
+%</package>
+\def\MT@exp@one@n#1#2{\expandafter#1\expandafter{#2}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@exp@two@c}
+% Expand the next two tokens after \meta{\#1} once.
+% \begin{macrocode}
+\def\MT@exp@two@c#1{\expandafter\expandafter\expandafter#1\expandafter}
+%<*package>
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@exp@two@n}
+%\changes{v1.9}{2005/09/28}{new macros: less \cmd\expandafter s}
+% Expand the next two tokens after \meta{\#1} once and enclose them in braces.
+% \begin{macrocode}
+\def\MT@exp@two@n#1#2#3{%
+ \expandafter\expandafter\expandafter
+ #1\expandafter\expandafter\expandafter
+ {\expandafter#2\expandafter}\expandafter{#3}}
+% \end{macrocode}
+%\end{macro}
+% You do not wonder why |\MT@exp@one@c| doesn't exist, do you?
+%\changes{v1.6}{2005/01/19}{use \etex's \cs{ifcsname} and \cs{ifdefined} if defined}
+%\begin{macro}{\MT@ifdefined@c@T}
+%\changes{v1.9a}{2005/11/08}{new macros: true case only}
+%\begin{macro}{\MT@ifdefined@c@TF}
+%\begin{macro}{\MT@ifdefined@n@T}
+%\begin{macro}{\MT@ifdefined@n@TF}
+% Wrapper for testing whether command resp. \cmd\csname\ sequence is defined.
+% If we are running \etex, we will use its primitives \cs{ifdefined} and
+% \cs{ifcsname}, which decreases memory use substantially.
+% \begin{macrocode}
+\def\MT@ifdefined@c@T#1{%
+^^X \ifdefined#1\expandafter\@firstofone\else\expandafter\@gobble\fi
+^^Q \ifx#1\@undefined\expandafter\@gobble\else\expandafter\@firstofone\fi
+}
+%</package>
+\def\MT@ifdefined@c@TF#1{%
+^^X \ifdefined#1\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi
+%<package>^^Q \ifx#1\@undefined
+%<package>^^Q \expandafter\@secondoftwo\else\expandafter\@firstoftwo\fi
+}
+\def\MT@ifdefined@n@T#1{%
+^^X \ifcsname#1\endcsname\expandafter\@firstofone\else\expandafter\@gobble\fi
+%<package>^^Q \begingroup\MT@exp@two@c\endgroup\ifx\csname #1\endcsname\relax
+%<package>^^Q \expandafter\@gobble\else\expandafter\@firstofone\fi
+}
+%<*package>
+\def\MT@ifdefined@n@TF#1{%
+^^X \ifcsname#1\endcsname\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi
+^^Q \begingroup\MT@exp@two@c\endgroup\ifx\csname #1\endcsname\relax
+^^Q \expandafter\@secondoftwo\else\expandafter\@firstoftwo\fi
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@detokenize@n}
+%\changes{v1.9d}{2006/03/08}{new macro: use \cmd\detokenize\ if available}
+%\begin{macro}{\MT@detokenize@c}
+%\changes{v1.9}{2005/08/17}{fix the \nonetex\ version}
+%\changes{v2.3c}{2008/08/23}{fix: remove last space only
+% (reported by \contributor Ulrich Dirr <ud\at mucschach.de>)}
+% ^^A private mail, 2008/08/22
+%\begin{macro}{\MT@rem@last@space}
+% Translate a macro into a token list. With \etex, we can use \cmd\detokenize.
+% We also need to remove the last trailing space; and only the last one --
+% therefore the fiddling (and the \cmd\string\ isn't perfect, of course).
+% \begin{macrocode}
+\def\MT@detokenize@n#1{%
+^^X \expandafter\MT@rem@last@space\detokenize{#1} \@nil
+^^Q \string#1%
+}
+\def\MT@detokenize@c#1{%
+^^X \MT@exp@one@n\MT@detokenize@n#1%
+^^Q \MT@exp@two@c\MT@rem@last@space\strip@prefix\meaning#1 \@nil
+}
+\def\MT@rem@last@space#1 #2{#1%
+ \ifx\@nil#2\else \space
+ \expandafter\MT@rem@last@space\expandafter#2\fi
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@ifempty}
+% Test whether argument is empty.
+%\changes{v1.1}{2004/09/15}{fix: use category code 12 for the percent character
+% (reported by \contributor Tom Kink <kink\at hia.rwth-aachen.de>)}
+% ^^A MID: <2qrkp9F134l6lU1@uni-berlin.de>
+% \begin{macrocode}
+%</package>
+\begingroup
+\catcode`\%=12
+\catcode`\&=14
+\gdef\MT@ifempty#1{&
+ \if %#1%&
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+}
+\endgroup
+%<*package>
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@ifint}
+% Test whether argument is an integer, using an old trick by Mr. Arseneau,
+%\changes{v1.9a}{2005/11/03}{use \cmd\pdfmatch\ if available}
+% or the latest and greatest from \pdftex\
+%\changes{v2.2}{2007/05/10}{employ \luatex\ features if available}
+% or \luatex\ (which also allows negative numbers, as required by the
+% \opt{letterspace} option).
+% \begin{macrocode}
+\MT@requires@pdftex6{
+%<*lua>
+ \MT@requires@luatex{
+ \def\MT@ifint#1{\csname\MT@lua{microtype.ifint([[#1]])}\endcsname}
+ }{
+%</lua>
+%</package>
+ \def\MT@ifint#1{%
+ \ifcase\pdfmatch{^-*[0-9]+ *$}{#1}\relax
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi
+ }
+%<*package>
+%<lua> }
+}{
+ \def\MT@ifint#1{%
+ \if!\ifnum9<1#1!\else?\fi
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ }
+}
+%</package>
+%</package|letterspace>
+%<*luafile>
+function microtype.ifint(s)
+ if string.find(s,"^-*[0-9]+ *$") then
+ tex.write("@firstoftwo")
+ else
+ tex.write("@secondoftwo")
+ end
+end
+
+%</luafile>
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@ifdimen}
+% Test whether argument is dimension (or number).
+%\changes{v1.4b}{2004/11/22}{don't set \cs{MT@count} globally (save stack problem)}
+%\changes{v1.7}{2005/03/15}{comparison with 1 to allow size smaller than 1
+% (suggested by \contributor Andreas B\"uhmann <andreas.buehmann\at web.de>)}
+% ^^A private mail, 2005/03/15
+%\changes{v1.9b}{2006/01/05}{use \cmd\pdfmatch\ if available}
+% (|nd| and |nc| are new Didot resp. Cicero, added in \pdftex\ 1.30; |px| is a pixel.)
+%\changes{v2.2}{2007/05/10}{employ \luatex\ features if available}
+%\todo{fix \texttt{lua} expression}
+% \begin{macrocode}
+%<*package>
+\MT@requires@pdftex6{
+%<*lua>
+ \MT@requires@luatex{
+ \def\MT@ifdimen#1{\csname\MT@lua{microtype.ifdimen([[#1]])}\endcsname}
+ }{
+%</lua>
+ \def\MT@ifdimen#1{%
+ \ifcase\pdfmatch{^([0-9]+([.,][0-9]+)?|[.,][0-9]+)%
+ (em|ex|cm|mm|in|pc|pt|dd|cc|bp|sp|nd|nc|px)? *$}{#1}\relax
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi
+ }
+%<lua> }
+}{
+ \def\MT@ifdimen#1{%
+ \setbox\z@=\hbox{%
+ \MT@count=1#1\relax
+ \ifnum\MT@count=\@ne
+ \aftergroup\@secondoftwo
+ \else
+ \aftergroup\@firstoftwo
+ \fi
+ }%
+ }
+}
+%</package>
+%<*luafile>
+function microtype.ifdimen(s)
+ if (string.find(s, "^-*[0-9]+(%a*) *$") or
+ string.find(s, "^-*[0-9]*[.,][0-9]+(%a*) *$")) then
+ tex.write("@firstoftwo")
+ else
+ tex.write("@secondoftwo")
+ end
+end
+
+%</luafile>
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@ifdim}
+% Test floating point numbers.
+% \begin{macrocode}
+%<*package>
+\def\MT@ifdim#1#2#3{%
+ \ifdim #1\p@ #2 #3\p@
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@ifstreq}
+% Test whether two strings (fully expanded) are equal.
+%\changes{v1.9a}{2005/11/03}{use \cmd\pdfstrcmp\ if available}
+%\changes{v2.2}{2007/03/07}{fix: \nonetex\ version shouldn't use \cmd\x\ and \cmd\y\
+% (found by \contributor Wiebke Petersen <petersew\at uni-duesseldorf.de>)}
+% ^^A MID: <esmd6k$954$1@news1.rz.uni-duesseldorf.de>
+%\changes{v2.2}{2007/05/10}{employ \luatex\ features if available}
+% \begin{macrocode}
+\MT@requires@pdftex5{
+%<*lua>
+ \MT@requires@luatex{
+ \def\MT@ifstreq#1#2{\csname\MT@lua{microtype.ifstreq([[#1]],[[#2]])}\endcsname}
+ }{
+%</lua>
+ \def\MT@ifstreq#1#2{%
+ \ifcase\pdfstrcmp{#1}{#2}\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ }
+%<lua> }
+}{
+ \def\MT@ifstreq#1#2{%
+ \edef\MT@res@a{#1}%
+ \edef\MT@res@b{#2}%
+ \ifx\MT@res@a\MT@res@b
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ }
+}
+%</package>
+%<*luafile>
+function microtype.ifstreq(s1, s2)
+ if s1 == s2 then
+ tex.write("@firstoftwo")
+ else
+ tex.write("@secondoftwo")
+ end
+end
+
+% \end{macrocode}
+% And here we end the |lua| file.
+% \begin{macrocode}
+end
+%</luafile>
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@xadd}
+%\changes{v1.8}{2005/04/17}{simplified}
+% Add item to a list.
+% \begin{macrocode}
+%<*package>
+\def\MT@xadd#1#2{%
+ \ifx#1\relax
+ \xdef#1{#2}%
+ \else
+ \xdef#1{#1#2}%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@xaddb}
+% Add item to the beginning.
+% \begin{macrocode}
+\def\MT@xaddb#1#2{%
+ \ifx#1\relax
+ \xdef#1{#2}%
+ \else
+ \xdef#1{#2#1}%
+ \fi
+}
+%</package>
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@map@clist@n}
+%\changes{v1.8}{2005/04/17}{new macro: used instead of \cmd\@for}
+%\changes{v1.9a}{2005/11/03}{following \LaTeX3}
+%\begin{macro}{\MT@map@clist@c}
+%\begin{macro}{\MT@map@clist@}
+%\begin{macro}{\MT@clist@function}
+%\begin{macro}{\MT@clist@break}
+% Run \meta{\#2} on all elements of the comma list \meta{\#1}. This and the
+% following is modelled after \LaTeX3 commands.
+% \begin{macrocode}
+%<*package|letterspace>
+\def\MT@map@clist@n#1#2{%
+ \ifx\@empty#1\else
+ \def\MT@clist@function##1{#2}%
+ \MT@map@clist@#1,\@nil,\@nnil
+ \fi
+}
+\def\MT@map@clist@c#1{\MT@exp@one@n\MT@map@clist@n#1}
+\def\MT@map@clist@#1,{%
+ \ifx\@nil#1%
+ \expandafter\MT@clist@break
+ \fi
+ \MT@clist@function{#1}%
+ \MT@map@clist@
+}
+\let\MT@clist@function\@gobble
+\def\MT@clist@break#1\@nnil{}
+%<*package>
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@map@tlist@n}
+%\changes{v1.8}{2005/04/16}{new macro: used instead of \cmd\@tfor}
+%\begin{macro}{\MT@map@tlist@c}
+%\begin{macro}{\MT@map@tlist@}
+%\begin{macro}{\MT@tlist@break}
+% Execute \meta{\#2} on all elements of the token list \meta{\#1}.
+% \cs{MT@tlist@break} can be used to jump out of the loop.
+% \begin{macrocode}
+\def\MT@map@tlist@n#1#2{\MT@map@tlist@#2#1\@nnil}
+\def\MT@map@tlist@c#1#2{\expandafter\MT@map@tlist@\expandafter#2#1\@nnil}
+\def\MT@map@tlist@#1#2{%
+ \ifx\@nnil#2\else
+ #1{#2}%
+ \expandafter\MT@map@tlist@
+ \expandafter#1%
+ \fi
+}
+\def\MT@tlist@break#1\@nnil{\fi}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\ifMT@inlist@}
+%\begin{macro}{\MT@in@clist}
+% Test whether item \meta{\#1} is in comma list \meta{\#2}.
+%^^A\changes{v1.4b}{2004/11/22}{fix: compare with \cmd\\ instead of \cmd\relax\
+%^^A (discovered by \contributor Herb Schulz <herbs\at wideopenwest.com>)}
+%^^A ^^A MID: <BDBFA967.C01F%herbs@wideopenwest.com>
+% Using \cmd\pdfmatch\ would be slower.
+%\changes{v1.9a}{2005/11/03}{fix}
+%\changes{v2.3}{2007/11/14}{fix: don't use \cmd\x\
+% (reported by \contributor Peter Meier <Peter.Meier998\at gmx.de>)}
+% ^^A private mail, 2007/11/12
+% \begin{macrocode}
+\newif\ifMT@inlist@
+\def\MT@in@clist#1#2{%
+ \def\MT@res@a##1,#1,##2##3\@nnil{%
+ \ifx##2\@empty
+ \MT@inlist@false
+ \else
+ \MT@inlist@true
+ \fi
+ }%
+ \expandafter\MT@res@a\expandafter,#2,#1,\@empty\@nnil
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@rem@from@clist}
+% Remove item \meta{\#1} from comma list \meta{\#2}. This is basically
+% \cmd\@removeelement\ from \file{ltcntrl.dtx}.
+%\changes{v1.9}{2005/10/28}{new macro: remove an item from a comma list}
+%\changes{v1.9a}{2005/11/03}{fix}
+%\changes{v1.9e}{2006/07/26}{model after \cmd\@removeelement}
+% Using \cmd\pdfmatch\ and \cmd\pdflastmatch\ here would be really slow!
+% \begin{macrocode}
+\def\MT@rem@from@clist#1#2{%
+ \def\MT@res@a##1,#1,##2\MT@res@a{##1,##2\MT@res@b}%
+ \def\MT@res@b##1,\MT@res@b##2\MT@res@b{\ifx,##1\@empty\else##1\fi}%
+ \xdef#2{\MT@exp@two@c\MT@res@b\MT@res@a\expandafter,#2,\MT@res@b,#1,\MT@res@a}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@in@tlist}
+%\begin{macro}{\MT@in@tlist@}
+% Test whether item is in token list. Since this isn't too elegant, I thought
+% that at least here, \cmd\pdfmatch\ would be more efficient -- however, it
+% turned out to be even slower than this solution.
+% \begin{macrocode}
+\def\MT@in@tlist#1#2{%
+ \MT@inlist@false
+ \def\MT@res@a{#1}%
+ \MT@map@tlist@c#2\MT@in@tlist@
+}
+\def\MT@in@tlist@#1{%
+ \edef\MT@res@b{#1}%
+ \ifx\MT@res@a\MT@res@b
+ \MT@inlist@true
+ \expandafter\MT@tlist@break
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@in@rlist}
+%\changes{v1.8}{2005/04/20}{made recursive}
+%\begin{macro}{\MT@in@rlist@}
+%\begin{macro}{\MT@in@rlist@@}
+%\begin{macro}{\MT@size@name}
+% Test whether size \cs{MT@size} is in a list of ranges. Store the name of the
+% list in \cs{MT@size@name}
+% \begin{macrocode}
+\def\MT@in@rlist#1{%
+ \MT@inlist@false
+ \MT@map@tlist@c#1\MT@in@rlist@
+}
+\def\MT@in@rlist@#1{\expandafter\MT@in@rlist@@#1}
+\def\MT@in@rlist@@#1#2#3{%
+ \MT@ifdim{#2}=\m@ne{%
+ \MT@ifdim{#1}=\MT@size
+ \MT@inlist@true
+ \relax
+ }{%
+ \MT@ifdim\MT@size<{#1}\relax{%
+ \MT@ifdim\MT@size<{#2}%
+ \MT@inlist@true
+ \relax
+ }%
+ }%
+ \ifMT@inlist@
+ \def\MT@size@name{#3}%
+ \expandafter\MT@tlist@break
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@loop}
+%\changes{v1.2}{2004/09/23}{fix: new macro, used instead of \cmd\loop}
+%\begin{macro}{\MT@iterate}
+%\begin{macro}{\MT@repeat}
+% This is the same as \LaTeX's \cmd\loop, which we mustn't use, since this
+% could confuse an outer \cmd\loop\ in the document.
+% \begin{macrocode}
+%</package>
+\def\MT@loop#1\MT@repeat{%
+ \def\MT@iterate{#1\relax\expandafter\MT@iterate\fi}%
+ \MT@iterate \let\MT@iterate\relax
+}
+\let\MT@repeat\fi
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@while@num}
+% Execute \meta{\#3} from \meta{\#1} up to (excluding) \meta{\#2} (much faster
+% than \LaTeX's \cmd\@whilenum).
+% \begin{macrocode}
+\def\MT@while@num#1#2#3{%
+ \@tempcnta#1\relax
+ \MT@loop #3%
+ \advance\@tempcnta \@ne
+ \ifnum\@tempcnta < #2\MT@repeat
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@do@font}
+% Execute \meta{\#1} 256 times.
+% \begin{macrocode}
+\def\MT@do@font{\MT@while@num\z@\@cclvi}
+%<*package>
+% \end{macrocode}
+%\end{macro}
+%\changes{v1.4}{2004/11/12}{use one instead of five counters}
+%\begin{macro}{\MT@count}
+%\begin{macro}{\MT@increment}
+% Increment macro \meta{\#1} by one. Saves using up too many counters.
+%\changes{v1.7}{2005/03/07}{use \etex's \cmd\numexpr\ if available}
+% The \etex\ way is slightly faster.
+% \begin{macrocode}
+\newcount\MT@count
+\def\MT@increment#1{%
+^^X \edef#1{\number\numexpr #1 + 1\relax}%
+^^Q \MT@count=#1\relax
+^^Q \advance\MT@count \@ne
+^^Q \edef#1{\number\MT@count}%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@scale}
+%\changes{v1.7}{2005/02/12}{new macro: use \etex's \cs{numexpr} if available}
+%\changes{v1.8}{2005/03/30}{fix: remove spaces in \nonetex\ variant
+% (reported by \contributor Mark Rossi <mark.rossi\at de.bosch.com>)}
+% ^^A MID: <d6uhag$qoi$1@ns2.fe.internet.bosch.com>
+% Multiply and divide a counter. If we are using \etex, we will use its
+% \cmd\numexpr\ primitive. This has the advantage that it is less likely to
+% run into arithmetic overflow. The result of the division will be rounded
+% instead of truncated. Therefore, we'll get a different (more accurate)
+% result in about half of the cases.
+% \begin{macrocode}
+\def\MT@scale#1#2#3{%
+^^Q \multiply #1 #2\relax
+ \ifnum #3 = \z@
+^^X #1=\numexpr #1 * #2\relax
+ \else
+^^X #1=\numexpr #1 * #2 / #3\relax
+^^Q \divide #1 #3\relax
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\changes{v1.7}{2005/03/07}{shorter command names}
+%\begin{macro}{\MT@abbr@pr}
+%\begin{macro}{\MT@abbr@ex}
+%\begin{macro}{\MT@abbr@pr@c}
+%\begin{macro}{\MT@abbr@ex@c}
+%\begin{macro}{\MT@abbr@pr@inh}
+%\begin{macro}{\MT@abbr@ex@inh}
+%\begin{macro}{\MT@abbr@nl}
+%\begin{macro}{\MT@abbr@sp}
+%\begin{macro}{\MT@abbr@sp@c}
+%\begin{macro}{\MT@abbr@sp@inh}
+%\begin{macro}{\MT@abbr@kn}
+%\begin{macro}{\MT@abbr@kn@c}
+%\begin{macro}{\MT@abbr@kn@inh}
+%\begin{macro}{\MT@abbr@tr}
+%\begin{macro}{\MT@abbr@tr@c}
+% Some abbreviations. Thus, we can have short command names but full-length
+% log output.
+% \begin{macrocode}
+\def\MT@abbr@pr{protrusion}
+\def\MT@abbr@ex{expansion}
+\def\MT@abbr@pr@c{protrusion codes}
+\def\MT@abbr@ex@c{expansion codes}
+\def\MT@abbr@pr@inh{protrusion inheritance}
+\def\MT@abbr@ex@inh{expansion inheritance}
+\def\MT@abbr@nl{noligatures}
+\def\MT@abbr@sp{spacing}
+\def\MT@abbr@sp@c{interword spacing codes}
+\def\MT@abbr@sp@inh{interword spacing inheritance}
+\def\MT@abbr@kn{kerning}
+\def\MT@abbr@kn@c{kerning codes}
+\def\MT@abbr@kn@inh{kerning inheritance}
+\def\MT@abbr@tr{tracking}
+\def\MT@abbr@tr@c{tracking amount}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@rbba@protrusion}
+%\begin{macro}{\MT@rbba@expansion}
+%\begin{macro}{\MT@rbba@spacing}
+%\begin{macro}{\MT@rbba@kerning}
+%\begin{macro}{\MT@rbba@tracking}
+% These we also need the other way round.
+% \begin{macrocode}
+\def\MT@rbba@protrusion{pr}
+\def\MT@rbba@expansion{ex}
+\def\MT@rbba@spacing{sp}
+\def\MT@rbba@kerning{kn}
+\def\MT@rbba@tracking{tr}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@features}
+%\changes{v1.9b}{2006/01/17}{use throughout the package to adjust to beta-ness}
+%\begin{macro}{\MT@features@long}
+% We can work on these lists to save some guards in the \file{dtx} file.
+% \begin{macrocode}
+\def\MT@features{pr,ex,sp,kn,tr}
+\def\MT@features@long{protrusion,expansion,spacing,kerning,tracking}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@is@feature}
+%\changes{v1.9a}{2005/11/03}{new macro: check for \pdftex\ feature}
+% Whenever an optional argument accepts a list of features, we can use this
+% command to check whether a feature exists in order to prevent a rather
+% confusing `|Missing \endcsname inserted|' error message. The feature (long
+% form) must be in \cmd\@tempa, the type of list to ignore in \meta{\#1},
+% then comes the action.
+% \begin{macrocode}
+\def\MT@is@feature#1{%
+ \MT@exp@one@n\MT@in@clist\@tempa\MT@features@long
+ \ifMT@inlist@
+ \expandafter\@firstofone
+ \else
+ \MT@error{`\@tempa' is not an available micro-typographic\MessageBreak
+ feature. Ignoring #1}{Available features are: `\MT@features@long'.}%
+ \expandafter\@gobble
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsubsection{Compatibility}\label{sub:compatibility}
+%
+% For the record, the following \LaTeX\ kernel commands will be modified by
+% \microtype:
+%\begin{itemize}
+% \item \cmd\pickup@font
+% \item \cmd\do@subst@correction
+% \item \cmd\add@accent\ (all in section~\ref{sssec:impl.hook})
+% \item \cmd\showhyphens\ (in section~\ref{sssec:impl.options})
+%\end{itemize}
+%
+% The \pkg{wordcount} package redefines the font-switching commands, which will
+% break \microtype. Since \microtype\ doesn't have an effect on the number of
+% words in the document anyway, we will simply disable ourselves.
+%\changes{v2.2}{2007/02/11}{disable \microtype\ if \pkg{wordcount} is loaded
+% (reported by \contributor Ross Hetherington <ross\at heth.eclipse.co.uk>)}
+% ^^A MID: <A9-dnaHX5LxN01LYnZ2dnUVZ8tqqnZ2d@eclipse.net.uk>
+% \begin{macrocode}
+\@ifl@aded{tex}{wordcount}{%
+ \MT@warning@nl{Detected the `wordcount' utility.\MessageBreak
+ Disabling `\MT@MT', since it wouldn't work}%
+ \MT@clear@options\MT@restore@catcodes\endinput}\relax
+% \end{macrocode}
+%\begin{macro}{\MT@setup@}
+%\changes{v1.9a}{2005/11/21}{defer setup until the end of the preamble}
+%\changes{v1.9e}{2006/07/06}{empty \cs{MT@setup@} after use
+% (compatibility with the \pkg{combine} class)}
+%\changes{v2.3e}{2009/08/31}{make space-unaware
+% (requested by \contributor Marcin Borkowski <mbork\at atos.wmid.amu.edu.pl>)}
+% ^^A private mail, 2009/08/31
+% The setup is deferred until the end of the preamble. This has a couple of
+% advantages: \cs{microtypesetup} can be used to change options later on in the
+% preamble, and fonts don't have to be set up before \microtype.
+% \begin{macrocode}
+%</package>
+%<plain>\MT@requires@latex1{
+\let\MT@setup@\@empty
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@addto@setup}
+% We use our private hook to have better control over the timing.
+% This will also work with \pkg{eplain}, but not with \pkg{miniltx} alone.
+% \begin{macrocode}
+\def\MT@addto@setup{\g@addto@macro\MT@setup@}
+% \end{macrocode}
+%\end{macro}
+% Don't hesitate with \pkg{miniltx}.
+% \begin{macrocode}
+%<plain>}{\let\MT@addto@setup\@firstofone}
+% \end{macrocode}
+%\begin{macro}{\MT@with@package@T}
+% We almost never do anything if a package is not loaded.
+% \begin{macrocode}
+\def\MT@with@package@T#1{\@ifpackageloaded{#1}\@firstofone\@gobble}
+%<*package>
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@with@babel@and@T}
+%\changes{v2.2}{2007/05/25}{also inspect class options}
+% \LaTeX's \cmd\@ifpackagewith\ ignores the class options.
+% \begin{macrocode}
+\def\MT@with@babel@and@T#1{%
+ \MT@ifdefined@n@T{opt@babel.\@pkgextension}{%
+ \@expandtwoargs\MT@in@clist{#1}
+ {\csname opt@babel.\@pkgextension\endcsname,\@classoptionslist}%
+ \ifMT@inlist@\expandafter\@gobble\fi
+ }\@gobble
+}
+% \end{macrocode}
+%\end{macro}
+% Don't load \letterspace.
+% \begin{macrocode}
+\MT@let@nc{ver@letterspace.sty}\@empty
+% \end{macrocode}
+%\begin{macro}{\MT@ledmac@setup}
+%\begin{macro}{\MT@led@unhbox@line}
+%\begin{macro}{\MT@led@kern}
+% The \pkg{ledmac} package first saves each paragraph in a box, from which it
+% then splits off the lines one by one. This will destroy character protrusion.
+% (There aren't any problems with the \pkg{lineno} package, since it takes a
+% different approach.)
+%\iffalse
+% We issue a warning, so that nobody can say they didn't know.
+%\changes{v1.6}{2004/12/29}{warning when using the \pkg{ledmac} package}
+% --- This is fixed in \pdftex\ 1.21a, so we no longer warn.
+%\changes{v1.6a}{2005/02/02}{no warning when using the \pkg{ledmac} package}
+% --- Actually, it was completely broken in 1.21a, but 1.21b provides a work-around.
+%\fi
+% ---~\dots~---
+%\changes{v1.8}{2005/04/15}{character protrusion with \pkg{ledmac}}
+% After much to and fro, the situation has finally settled and there is a fix.
+% Beginning with \pdftex\ version 1.21b together with \file{ledpatch.sty} as of
+% 2005/06/02 (v0.4), character protrusion will work at last.
+%
+% Peter Wilson was so kind to provide the \cmd\l@dunhbox@line\ hook in
+% \pkg{ledmac} to allow for protrusion. \cmd\leftmarginkern\ and
+% \cmd\rightmarginkern\ are new primitives of \pdftex\ 1.21b (aka. 1.30.0).
+% \begin{macrocode}
+\MT@requires@pdftex5{
+ \def\MT@ledmac@setup{%
+ \ifMT@protrusion
+ \MT@ifdefined@c@TF\l@dunhbox@line{%
+ \MT@info@nl{Patching ledmac to enable character protrusion}%
+ \newdimen\MT@led@kern
+ \let\MT@led@unhbox@line\l@dunhbox@line
+ \renewcommand*{\l@dunhbox@line}[1]{%
+ \ifhbox##1%
+ \MT@led@kern=\rightmarginkern##1%
+ \kern\leftmarginkern##1%
+ \MT@led@unhbox@line##1%
+ \kern\MT@led@kern
+ \fi
+ }%
+ }{%
+ \MT@warning@nl{%
+ Character protrusion in paragraphs with line\MessageBreak
+ numbering will only work if you update ledmac}%
+ }%
+ \fi
+ }
+}{
+ \def\MT@ledmac@setup{%
+ \ifMT@protrusion
+ \MT@warning@nl{%
+ The pdftex version you are using does not allow\MessageBreak
+ character protrusion in paragraphs with line\MessageBreak
+ numbering by the `ledmac' package.\MessageBreak
+ Upgrade pdftex to version 1.30 or later}%
+ \fi
+ }
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@restore@p@h}
+% Restore meaning of \cmd\% and \cmd\#.
+% \begin{macrocode}
+\def\MT@restore@p@h{\chardef\%`\% \chardef\#`\# }
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@setupfont@hook}
+% This hook will be executed every time a font is set up (inside a group).
+%
+% In the preamble, we check for the packages each time a font is set up.
+% Thus, it will work regardless when the packages are loaded.
+%
+% Even for packages that don't activate any characters in the preamble (like
+% \pkg{babel} and \pkg{csquotes}), we have to check here, too, in case they were
+% loaded before \microtype, and a font is loaded \cmd\AtBeginDocument, before
+% \microtype.
+% (This is no longer needed, since the complete setup is now deferred until the
+% end of the preamble. However, it is still necessary for \opt{defersetup}|=false|.)
+% \begin{macrocode}
+\def\MT@setupfont@hook{%
+% \end{macrocode}
+%\iffalse
+%\changes{v1.7}{2005/02/06}{compatibility with the \pkg{chemsym} package}
+% The \pkg{chemsym} package redefines, among other commands, the Hungarian
+% umlaut \cmd\H\ in a way that cannot be parsed by \microtype. As a work-around,
+% we restore the usual definition of \cmd\H\ before setting up the font (which
+% will be done inside a group).
+%\changes{v1.8}{2005/03/24}{remove superfluous \pkg{chemsym} hook}
+% --- Since version 1.7, this is no longer needed, since our character parsing
+% is robust enough now.
+%
+%\changes{v1.7}{2005/03/10}{compatibility with the \pkg{statex} package}
+% Same for \pkg{statex}.
+%\changes{v1.8}{2005/03/24}{remove superfluous \pkg{statex} hook}
+% --- No longer needed, either.
+%\fi
+%\changes{v1.8}{2005/03/30}{restore percent character if Spanish \pkg{babel} is loaded}
+%\changes{v2.2}{2007/02/02}{restore percent character if Galician \pkg{babel} is loaded}
+%\changes{v2.3a}{2008/01/29}{restore percent character if Mexican \pkg{babel} is loaded}
+% Spanish (and Galician and Mexican) \pkg{babel} modify \cmd\%, storing the
+% original meaning in \cmd\percentsign.
+% \begin{macrocode}
+ \MT@if@false
+ \MT@with@babel@and@T{spanish} \MT@if@true
+ \MT@with@babel@and@T{galician}\MT@if@true
+ \MT@with@babel@and@T{mexican} \MT@if@true
+ \ifMT@if@\MT@ifdefined@c@T\percentsign{\let\%\percentsign}\fi
+% \end{macrocode}
+%\changes{v1.8}{2005/04/22}{restore \pkg{csquotes}'s active characters}
+% Using \cmd\@disablequotes, we can restore the original meaning of all
+% characters made active by \pkg{csquotes}.
+% (It would be doable for older versions, too, but we won't bother.)
+% \begin{macrocode}
+ \MT@with@package@T{csquotes}{%
+ \@ifpackagelater{csquotes}{2005/05/11}\@disablequotes\relax}%
+% \end{macrocode}
+% \pkg{hyperref} redefines \cmd\% and \cmd\# inside a \cmd\url. We restore
+% the original meanings (which we can only hope are correct).
+%\changes{v1.8}{2005/05/20}{restore \cmd\% and \cmd\# when \pkg{hyperref} is loaded}
+% Same for \pkg{tex4ht}.
+%\changes{v1.9d}{2006/02/27}{restore \cmd\% and \cmd\# when \pkg{tex4ht} is loaded
+% (reported by \contributor Peter Dyballa <Peter_Dyballa\at Web.DE>)}
+% ^^A private mail, 2006/02/26
+% \begin{macrocode}
+ \MT@if@false
+ \MT@with@package@T{hyperref}\MT@if@true
+ \MT@with@package@T{tex4ht} \MT@if@true
+ \ifMT@if@\MT@restore@p@h\fi
+}
+% \end{macrocode}
+%\end{macro}
+% Check again at the end of the preamble.
+% \begin{macrocode}
+%</package>
+\MT@addto@setup{%
+%<*package>
+% \end{macrocode}
+%\changes{v1.4}{2004/11/04}{check for \pkg{pdfcprot}}
+% Our competitor, the \pkg{pdfcprot} package, must not be tolerated!
+% \begin{macrocode}
+ \MT@with@package@T{pdfcprot}{%
+ \MT@error{Detected the `pdfcprot' package!\MessageBreak
+ `\MT@MT' and `pdfcprot' may not be used together}{%
+The `pdfcprot' package provides an interface to character protrusion.\MessageBreak
+So does the `\MT@MT' package. Using both packages at the same\MessageBreak
+time will almost certainly lead to undesired results. Have your choice!}%
+ }%
+ \MT@with@package@T{ledmac}\MT@ledmac@setup
+% \end{macrocode}
+% We can clean up \cs{MT@setupfont@hook} now.
+% \begin{macrocode}
+ \let\MT@setupfont@hook\@empty
+ \MT@if@false
+ \MT@with@babel@and@T{spanish} \MT@if@true
+ \MT@with@babel@and@T{galician}\MT@if@true
+ \MT@with@babel@and@T{mexican} \MT@if@true
+ \ifMT@if@
+ \g@addto@macro\MT@setupfont@hook{%
+ \MT@ifdefined@c@T\percentsign{\let\%\percentsign}}%
+ \fi
+ \MT@with@package@T{csquotes}{%
+ \@ifpackagelater{csquotes}{2005/05/11}{%
+ \g@addto@macro\MT@setupfont@hook\@disablequotes
+ }{%
+ \MT@warning@nl{%
+ Should you receive warnings about unknown slot\MessageBreak
+ numbers, try upgrading the `csquotes' package}%
+ }%
+ }%
+% \end{macrocode}
+% We disable \microtype's additions inside \pkg{hyperref}'s \cmd\pdfstringdef,
+% which redefines lots of commands.
+%\changes{v1.9}{2005/09/10}{disable \microtype\ setup inside \pkg{hyperref}'s \cmd\pdfstringdef\
+% (reported by \contributor\thanh{} <hanthethanh\at gmail.com>)}
+% ^^A private mail, 2005/09/10
+%\changes{v2.3}{2007/11/11}{disable \cs{microtypecontext} in \pkg{hyperref}'s \cmd\pdfstringdef}
+% \pkg{hyperref} doesn't work with plain \TeX, so in that case we don't bother.
+% \begin{macrocode}
+ \MT@if@false
+%</package>
+%<plain> \MT@requires@latex2{
+ \MT@with@package@T{hyperref}{%
+ \pdfstringdefDisableCommands{%
+%<*package>
+ \let\pickup@font\MT@orig@pickupfont
+ \let\textmicrotypecontext\@secondoftwo
+ \let\microtypecontext\@gobble
+%</package>
+ \def\lsstyle{\pdfstringdefWarn\lsstyle}%
+ \def\textls#1#{\pdfstringdefWarn\textls}%
+ }%
+%<package> \MT@if@true
+ }%
+%<plain> }\relax
+%<*package>
+ \MT@with@package@T{tex4ht}\MT@if@true
+ \ifMT@if@\g@addto@macro\MT@setupfont@hook\MT@restore@p@h\fi
+% \end{macrocode}
+%\changes{v1.9b}{2005/12/19}{compatibility with \pkg{listings}: sanitise more catcodes
+% (reported by \contributor Holger Uhr <huhr\at uni-paderborn.de>)}
+% ^^A MID: <do4gvo$tv$1@news.uni-paderborn.de>
+% The \pkg{listings} package makes numbers and letters active,
+% \begin{macrocode}
+ \MT@with@package@T{listings}{%
+ \g@addto@macro\MT@cfg@catcodes{%
+ \MT@while@num{"30}{"3A}{\catcode\@tempcnta 12\relax}%
+ \MT@while@num{"41}{"5B}{\catcode\@tempcnta 11\relax}%
+ \MT@while@num{"61}{"7B}{\catcode\@tempcnta 11\relax}%
+ }%
+% \end{macrocode}
+% \dots~and the backslash (which would lead to problems in \cs{MT@get@slot}).
+%\changes{v2.0}{2006/09/15}{compatibility with \pkg{listings}: set catcode of backslash to zero
+% (reported by \contributor Steven Bath <steven128\at iname.com>)}
+% ^^A private mail, 2006/09/15
+% \begin{macrocode}
+ \g@addto@macro\MT@setupfont@hook{%
+ \catcode`\\\z@
+% \end{macrocode}
+%\changes{v1.9b}{2005/12/23}{compatibility with the \texttt{extendedchar} option of
+% the \pkg{listings} package}
+% When loaded with the |extendedchar| option, \pkg{listings} will also redefine
+% 8-bit active characters (\pkg{inputenc}). Luckily, this simple redefinition
+% will make them expand to their original definition, so that they could be used
+% in the configuration.
+% \begin{macrocode}
+ \let\lst@ProcessLetter\@empty
+ }%
+ }%
+% \end{macrocode}
+%\changes{v2.0}{2005/12/21}{(beta:3) compatibility with \pkg{soul}: register \cs{textls} and \cs{lsstyle}}
+% Of course, using both \pkg{soul}'s and \microtype's letterspacing mechanisms
+% at the same time doesn't make much sense. But \pkg{soul} can do more, \eg,
+% underlining. The optional argument to \cs{textls} may not be used.
+% \begin{macrocode}
+%</package>
+%<plain> \MT@requires@latex2{
+ \MT@with@package@T{soul}{%
+ \soulregister\lsstyle 0%
+ \soulregister\textls 1%
+ }%
+% \end{macrocode}
+%\changes{v2.3a}{2008/01/06}{fix test for \pkg{soul} under plain \TeX}
+% Under plain \TeX, \pkg{soul} doesn't register itself the \LaTeX\ way, hence
+% we have to use a different test in this case.
+% \begin{macrocode}
+%<*plain>
+ }{\ifx\SOUL@\@undefined\else
+ \soulregister\lsstyle 0%
+ \soulregister\textls 1%
+ \fi}%
+%</plain>
+%<*package>
+% \end{macrocode}
+%\changes{v2.1}{2007/01/15}{compatibility with \pkg{pinyin}: disable \microtype\ in \cmd\py@macron\
+% (reported by \contributor Sven Naumann <svenau\at gmx.net>)}
+% ^^A MID: <87d55hxxdd.fsf@linux.site>
+% Compatibility with the \pkg{pinyin} package (from \pkg{CJK}): disable
+% \microtype\ in \cmd\py@macron, which loads a different font for the accent.
+% In older versions of \pkg{pinyin} (pre-4.6.0),
+%\changes{v2.3d}{2009/03/19}{fix \pkg{pinyin} compatibility check
+% (reported by \contributor Silas~S. Brown <ssb22\at cam.ac.uk>)}
+% ^^A private mail, 2009/03/19
+% \cmd\py@macron\ had only one argument.
+% \begin{macrocode}
+ \MT@with@package@T{pinyin}{%
+ \let\MT@orig@py@macron\py@macron
+ \@ifpackagelater{pinyin}{2005/08/11}{% 4.6.0
+ \def\py@macron#1#2{%
+ \let\pickup@font\MT@orig@pickupfont
+ \MT@orig@py@macron{#1}{#2}%
+ \let\pickup@font\MT@pickupfont}%
+ }{%
+ \def\py@macron#1{%
+ \let\pickup@font\MT@orig@pickupfont
+ \MT@orig@py@macron{#1}%
+ \let\pickup@font\MT@pickupfont}%
+ }%
+ }%
+%</package>
+}
+%<*package>
+% \end{macrocode}
+%\changes{v1.6}{2005/01/19}{load a font if none is selected}
+% We need a font (the \pkg{minimal} class doesn't load one).
+% \begin{macrocode}
+\expandafter\ifx\the\font\nullfont\normalfont\fi
+% \end{macrocode}
+%
+%\subsection{Font setup}\label{ssec:font-setup}
+%
+%\begin{macro}{\MT@setupfont}
+% Setting up a font entails checking for each feature whether it should be
+% applied to the current font (\cs{MT@font}).
+% But first, we might have to disable stuff when used together with adventurous
+% packages.
+% \begin{macrocode}
+\def\MT@setupfont{\MT@setupfont@hook}
+% \end{macrocode}
+% This will use a copy of the font (allowing for expansion parameter variation
+% and the use of more than one set of protrusion factors for a font within one
+% paragraph).
+% \begin{macrocode}
+\MT@requires@pdftex7
+ {\g@addto@macro\MT@setupfont\MT@copy@font}\relax
+% \end{macrocode}
+% The font properties must be extracted from \cs{MT@font}, since the current
+% value of \cmd\f@encoding\ and friends may be wrong!
+% \begin{macrocode}
+\g@addto@macro\MT@setupfont{%
+ \MT@exp@two@c\MT@split@name\string\MT@font/\@nil
+% \end{macrocode}
+% Try to find a configuration file for the current font family.
+%\changes{v1.2}{2004/09/29}{also search for alias font file}
+% \begin{macrocode}
+ \MT@exp@one@n\MT@find@file\MT@family
+ \ifx\MT@familyalias\@empty \else
+ \MT@exp@one@n\MT@find@file\MT@familyalias\fi
+% \end{macrocode}
+%\changes{v1.2}{2004/09/26}{fix: call \cmd\@@enc@update\ if necessary}
+% We have to make sure that \cmd\cf@encoding\ expands to the correct value (for
+% later, in \cs{MT@get@slot}), which isn't the case when \cmd\selectfont\
+% chooses a new encoding (this would be done a second later in
+% \cmd\selectfont, anyway -- three lines, to be exact).
+% (I think, I do not need this anymore -- however, I'm too afraid to remove it.
+% \dots\ Oops, I did it. Let's see whether anybody complains.)
+%\changes{v2.2}{2007/04/15}{don't call \cmd\@@enc@update\ anymore}
+% \begin{macrocode}
+% \ifx\f@encoding\cf@encoding\else\@@enc@update\fi
+}
+% \end{macrocode}
+% Tracking has to come first, since it means actually loading a different font.
+%\changes{v2.2}{2007/04/15}{only add features that are available with the respective \pdftex}
+% \begin{macrocode}
+\MT@requires@pdftex6
+ {\g@addto@macro\MT@setupfont\MT@tracking}\relax
+\g@addto@macro\MT@setupfont{%
+ \MT@check@font
+ \ifMT@inlist@
+%<debug>\MT@show@pdfannot2%
+ \else
+ \MT@vinfo{Setting up font `\MT@@font'\on@line}%
+% \end{macrocode}
+% Now we can begin setting up the font for all features that the current
+% \pdftex\ provides. The following commands are \cmd\let\ to \cmd\relax\ if the
+% respective feature is disabled via package options.
+%
+% For versions older than 1.20, protrusion has to be set up first, beginning
+% with 1.20, the order doesn't matter.
+% \begin{macrocode}
+ \MT@protrusion
+ \MT@expansion
+}
+% \end{macrocode}
+% Interword spacing and kerning (\pdftex\ 1.40).
+% \begin{macrocode}
+\MT@requires@pdftex6
+ {\g@addto@macro\MT@setupfont{\MT@spacing\MT@kerning}}\relax
+% \end{macrocode}
+% Disable ligatures (\pdftex\ 1.30).
+% \begin{macrocode}
+\MT@requires@pdftex5
+ {\g@addto@macro\MT@setupfont\MT@noligatures}\relax
+\g@addto@macro\MT@setupfont{%
+% \end{macrocode}
+% Debugging.
+% \begin{macrocode}
+%<debug>\MT@show@pdfannot1%
+% \end{macrocode}
+% Finally, register the font so that we don't set it up anew each time.
+% \begin{macrocode}
+ \MT@register@font
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@copy@font}
+%\changes{v2.2}{2007/07/03}{optionally work on copies of fonts}
+%\begin{macro}{\MT@copy@font@}
+% The new (1.40.4) \cmd\pdfcopyfont\ command allows to expand a font with
+% different parameters, or to use more than one set of protrusion factors for a
+% given font within one paragraph. It will be used when we find a context for
+% \cs{SetProtrusion} or \cs{SetExpansion} in the preamble, or when the package
+% has been loaded with the \opt{copyfonts} option.
+% \begin{macrocode}
+\let\MT@copy@font\relax
+\MT@requires@pdftex7{
+\def\MT@copy@font@{%
+% \end{macrocode}
+%\begin{macro}{\MT@font@copy}
+% For every new protrusion and expansion contexts, we create a new copy.
+%\changes{v2.3b}{2008/04/15}{enable font copies also with protrusion contexts
+% (reported by \contributor Nathan Rosenblum <nater\at cs.wisc.edu>)}
+% ^^A private mail, 2008/04/14
+% \begin{macrocode}
+ \xdef\MT@font@copy{\csname\MT@@font/\MT@pr@context/\MT@ex@context\endcsname}%
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@font@orig}
+% \pdftex\ doesn't allow to copy a font that has already been copied and
+% expanded\slash letterspaced. Hence, we have to get the original.
+% \begin{macrocode}
+ \expandafter\ifx\MT@font@copy\relax
+ \edef\MT@font@orig{\csname\expandafter\string\font@name @orig\endcsname}%
+ \expandafter\ifx\MT@font@orig\relax
+ \MT@exp@two@c\MT@glet\MT@font@orig\font@name
+ \else
+ \MT@exp@two@c\let\font@name\MT@font@orig
+ \fi
+ \global\MT@exp@two@c\pdfcopyfont\MT@font@copy\font@name
+%<debug>\MT@dinfo1{creating new copy: \MT@font@copy}%
+% \end{macrocode}
+%\end{macro}
+% Since it's a new font, we have to remove it from the context lists.
+% \begin{macrocode}
+ \MT@map@clist@c\MT@active@features{%
+ \MT@exp@cs\ifx{MT@\@nameuse{MT@abbr@##1}}\relax\else
+ \def\@tempa{##1}%
+ \MT@exp@cs\MT@map@tlist@c{MT@##1@doc@contexts}\MT@rem@from@list
+ \fi
+ }%
+ \fi
+ \MT@exp@two@c\let\MT@font\MT@font@copy
+% \end{macrocode}
+% We only need the font identifier for letterspacing.
+% \begin{macrocode}
+ \let\font@name\MT@font@copy
+% \end{macrocode}
+% But we have to properly substitute the font after we're done.
+% \begin{macrocode}
+ \aftergroup\let\aftergroup\font@name\aftergroup\MT@font@copy
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@rem@from@list}
+% \begin{macrocode}
+\def\MT@rem@from@list#1{%
+ \MT@exp@cs\ifx{MT@\@tempa @#1font@list}\relax\else
+ \expandafter\MT@exp@one@n\expandafter\MT@rem@from@clist\expandafter
+ \MT@font \csname MT@\@tempa @#1font@list\endcsname
+ \fi
+}
+}\relax
+% \end{macrocode}
+%\end{macro}
+%\ifpdf\phantomsection\fi\label{exp-hack}
+%\paragraph{Here's the promised dirty trick}
+% for users of older \pdftex\ versions, which works around the problem that the
+% use of the same font with different expansion parameters is prohibited. If
+% you do not want to create a clone of the font setup (this would require
+% duplicating the \file{tfm}/\file{vf} files under a new name, and writing new
+% \file{fd} files and \file{map} entries), you can load a minimally larger font
+% for the paragraph in question. E.\,g., for a document typeset in 10\,pt:
+%\begin{verbatim}[gobble=2,morekeywords={[0]{\expandpar}}]
+% \SetExpansion
+% [ stretch = 30,
+% shrink = 60,
+% step = 5 ]
+% { encoding = *,
+% size = 10.001 }
+% { }
+% \newcommand{\expandpar}[1]{{%
+% \fontsize{10.001}{\baselineskip}\selectfont #1\par}}
+% % ...
+% \expandpar{This paragraph contains an `unnecessary' widow.}
+%\end{verbatim}
+% Note that the \cmd\expandpar\ command can only be applied to complete
+% paragraphs. If you are using Computer Modern Roman, you have to load the
+% \pkg{fix-cm} package to be able to select fonts in arbitrary sizes. Finally,
+% the reason I suggest to use a larger font, and not a smaller one, is to
+% prevent a different design size being selected.
+%
+%\bigskip
+%\begin{macro}{\MT@split@name}
+%\changes{v1.7}{2005/02/27}{don't define \cs{MT@encoding} \&c. \cmd\global ly}
+%\changes{v2.0}{2006/12/19}{adjust to possible letterspacing}
+%\begin{macro}{\MT@encoding}
+%\begin{macro}{\MT@family}
+%\begin{macro}{\MT@series}
+%\begin{macro}{\MT@shape}
+%\begin{macro}{\MT@size}
+% Split up the font name (\meta{\#6} may be a protrusion\slash expansion
+% context and/or a letterspacing amount). ^^A really?
+% \begin{macrocode}
+\def\MT@split@name#1/#2/#3/#4/#5/#6\@nil{%
+ \def\MT@encoding{#1}%
+ \def\MT@family {#2}%
+ \def\MT@series {#3}%
+ \def\MT@shape {#4}%
+ \def\MT@size {#5}%
+% \end{macrocode}
+%\begin{macro}{\MT@familyalias}
+% Alias family?
+%\changes{v1.2}{2004/09/29}{define alias font name as an alternative, not
+% as a replacement}
+% \begin{macrocode}
+ \MT@ifdefined@n@TF{MT@\MT@family @alias}%
+ {\MT@let@cn\MT@familyalias{MT@\MT@family @alias}}%
+ {\let\MT@familyalias\@empty}%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\ifMT@do}
+%\begin{macro}{\MT@feat}
+%\begin{macro}{\MT@maybe@do}
+% We check all features of the current font against the lists of the currently
+% active font set, and set \cs{ifMT@do} accordingly.
+%\changes{v1.2}{2004/09/29}{also check for alias font name}
+%\changes{v1.9}{2005/09/28}{redone}
+% \begin{macrocode}
+\newif\ifMT@do
+\def\MT@maybe@do#1{%
+% \end{macrocode}
+% (but only if the feature isn't globally set to false)
+% \begin{macrocode}
+ \csname ifMT@\csname MT@abbr@#1\endcsname\endcsname
+% \end{macrocode}
+% Begin with setting micro-typography to true for this font. The
+% \cs{MT@checklist@...} tests will set it to false if the property is not in
+% the list. The first non-empty list that does not contain a match will stop us
+% (except for |font|).
+% \begin{macrocode}
+ \MT@dotrue
+ \edef\@tempa{\csname MT@#1@setname\endcsname}%
+ \MT@map@clist@n{font,encoding,family,series,shape,size}{%
+ \MT@ifdefined@n@TF{MT@checklist@##1}%
+ {\csname MT@checklist@##1\endcsname}%
+ {\MT@checklist@{##1}}%
+ {#1}%
+ }%
+ \else
+ \MT@dofalse
+ \fi
+ \ifMT@do
+% \end{macrocode}
+% \cs{MT@feat} stores the current feature.
+% \begin{macrocode}
+ \def\MT@feat{#1}%
+ \csname MT@set@#1@codes\endcsname
+ \else
+ \MT@vinfo{... No \@nameuse{MT@abbr@#1}}%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@dinfo@list}
+% \begin{macrocode}
+%<debug>\def\MT@dinfo@list#1#2#3{\MT@dinfo@nl{1}{\@nameuse{MT@abbr@#1}: #2
+%<debug> \ifx\\#3\\list empty\else `\@nameuse{MT@#2}' #3 list\fi}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@checklist@}
+% The generic test (\meta{\#1} is the axis, \meta{\#2} the feature, \cmd\@tempa\
+% contains the set name).
+% \begin{macrocode}
+\def\MT@checklist@#1#2{%
+%<!debug> \MT@ifdefined@n@T
+%<debug> \MT@ifdefined@n@TF
+ {MT@#2list@#1@\@tempa}{%
+% \end{macrocode}
+% Begin a (masqueraded) \cmd\expandafter\ orgy to test whether the font
+% attribute is in the list.
+% \begin{macrocode}
+ \expandafter\MT@exp@one@n\expandafter\MT@in@clist
+ \csname MT@#1\expandafter\endcsname
+ \csname MT@#2list@#1@\@tempa\endcsname
+ \ifMT@inlist@
+%<debug>\MT@dinfo@list{#2}{#1}{in}%
+ \MT@dotrue
+ \else
+%<debug>\MT@dinfo@list{#2}{#1}{not in}%
+ \MT@dofalse
+ \expandafter\MT@clist@break
+ \fi
+ }%
+% \end{macrocode}
+% If no limitations have been specified, \ie, the list for a font attribute
+% has not been defined at all, the font should be set up.
+% \begin{macrocode}
+%<debug> {\MT@dinfo@list{#2}{#1}{}}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@checklist@family}
+% Also test for the alias font, if the original font is not in the list.
+%\changes{v1.4b}{2004/11/22}{fix: don't try alias family name if encoding failed}
+%\changes{v1.9}{2005/07/12}{fix: add two missing \cmd\expandafter s}
+% \begin{macrocode}
+\def\MT@checklist@family#1{%
+%<!debug> \MT@ifdefined@n@T
+%<debug> \MT@ifdefined@n@TF
+ {MT@#1list@family@\@tempa}{%
+ \MT@exp@two@n\MT@in@clist
+ \MT@family{\csname MT@#1list@family@\@tempa\endcsname}%
+ \ifMT@inlist@
+%<debug>\MT@dinfo@list{#1}{family}{in}%
+ \MT@dotrue
+ \else
+%<debug>\MT@dinfo@list{#1}{family}{not in}%
+ \MT@dofalse
+ \ifx\MT@familyalias\@empty \else
+ \MT@exp@two@n\MT@in@clist
+ \MT@familyalias{\csname MT@#1list@family@\@tempa\endcsname}%
+ \ifMT@inlist@
+%<debug> \MT@dinfo@list{#1}{family alias}{in}%
+ \MT@dotrue
+%<debug>\else\MT@dinfo@list{#1}{family alias}{not in}%
+ \fi
+ \fi
+ \fi
+ \ifMT@do \else
+ \expandafter\MT@clist@break
+ \fi
+ }%
+%<debug> {\MT@dinfo@list{#1}{family}{}}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@checklist@size}
+% Test whether font size is in list of size ranges.
+% \begin{macrocode}
+\def\MT@checklist@size#1{%
+%<!debug> \MT@ifdefined@n@T
+%<debug> \MT@ifdefined@n@TF
+ {MT@#1list@size@\@tempa}{%
+ \MT@exp@cs\MT@in@rlist{MT@#1list@size@\@tempa}%
+ \ifMT@inlist@
+%<debug>\MT@dinfo@list{#1}{size}{in}%
+ \MT@dotrue
+ \else
+%<debug>\MT@dinfo@list{#1}{size}{not in}%
+ \MT@dofalse
+ \expandafter\MT@clist@break
+ \fi
+ }%
+%<debug> {\MT@dinfo@list{#1}{size}{}}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@checklist@font}
+% If the font matches, we skip the rest of the test.
+% \begin{macrocode}
+\def\MT@checklist@font#1{%
+%<!debug> \MT@ifdefined@n@T
+%<debug> \MT@ifdefined@n@TF
+ {MT@#1list@font@\@tempa}{%
+% \end{macrocode}
+% Since \cs{MT@font} may be appended with context and/or letterspacing specs,
+% we construct the name from the font characteristics.
+%\changes{v2.2}{2007/07/03}{fix: construct font name from characteristics}
+% \begin{macrocode}
+ \edef\@tempb{\MT@encoding/\MT@family/\MT@series/\MT@shape/\MT@size}%
+ \expandafter\MT@exp@one@n\expandafter\MT@in@clist\expandafter
+ \@tempb \csname MT@#1list@font@\@tempa\endcsname
+ \ifMT@inlist@
+%<debug>\MT@dinfo@list{#1}{font}{in}%
+ \expandafter\MT@clist@break
+ \else
+%<debug>\MT@dinfo@list{#1}{font}{not in}%
+ \MT@dofalse
+ \fi
+ }%
+%<debug> {\MT@dinfo@list{#1}{font}{}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsubsection{Protrusion}
+%
+%\begin{macro}{\MT@protrusion}
+% Set up for protrusion?
+% \begin{macrocode}
+\def\MT@protrusion{\MT@maybe@do{pr}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@set@pr@codes}
+% This macro is called by \cs{MT@setupfont}, and does all the work for setting
+% up a font for protrusion.
+%\changes{v1.5}{2004/12/10}{adjust protrusion factors before setting the inheriting
+% characters}
+%\changes{v1.6}{2004/12/18}{introduce \texttt{factor} option}
+% \begin{macrocode}
+\def\MT@set@pr@codes{%
+% \end{macrocode}
+% Check whether and if, which list should be applied to the current font.
+% \begin{macrocode}
+ \MT@if@list@exists{%
+ \MT@get@font@dimen@six{%
+ \MT@get@opt
+ \MT@reset@pr@codes
+% \end{macrocode}
+% Get the name of the inheritance list and parse it.
+% \begin{macrocode}
+ \MT@get@inh@list
+% \end{macrocode}
+% Set an input encoding?
+% \begin{macrocode}
+ \MT@set@inputenc{c}%
+% \end{macrocode}
+% Load additional lists?
+% \begin{macrocode}
+ \MT@load@list\MT@pr@c@name
+ \MT@set@listname
+% \end{macrocode}
+% Load the main list.
+% \begin{macrocode}
+ \MT@let@cn\@tempc{MT@pr@c@\MT@pr@c@name}%
+ \expandafter\MT@set@codes\@tempc,\relax,}%
+ }\MT@reset@pr@codes
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@get@font@dimen@six}
+%\changes{v1.8}{2005/05/03}{new macro: test whether \fontdim6 is defined}
+%\changes{v2.3e}{2009/08/31}{fix: gobbling settings with tracking failed
+% (reported by \contributor Leo <sdl.web\at gmail.com>)}
+% ^^A MID: <m0vdk4g8t2.fsf@cam.ac.uk>
+%\begin{macro}{\MT@dimen@six}
+% If \fontdim6 is zero, character protrusion, spacing, kerning and tracking
+% won't work, and we can skip the settings (for example, the \pkg{dsfont} and
+% \pkg{fourier} fonts don't specify this dimension; this is probably a bug in
+% the fonts).
+% \begin{macrocode}
+\def\MT@get@font@dimen@six{%
+ \ifnum\fontdimen6\MT@font=\z@
+ \MT@warning@nl{%
+ Font `\MT@@font' does not specify its\MessageBreak
+ \@backslashchar fontdimen 6 (width of an `em')! Therefore,\MessageBreak
+ \@nameuse{MT@abbr@\MT@feat} will not work with this font}%
+ \expandafter\@gobble
+ \else
+ \edef\MT@dimen@six{\number\fontdimen6\MT@font}%
+ \expandafter\@firstofone
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@set@all@pr}
+%\changes{v2.2}{2007/06/16}{(et al.) allow empty values}
+% Set all protrusion codes of the font.
+% \begin{macrocode}
+\def\MT@set@all@pr#1#2{%
+%<debug>\MT@dinfo@nl{3}{-- lp/rp: setting all to #1/#2}%
+ \let\MT@temp\@empty
+ \MT@ifempty{#1}\relax{\g@addto@macro\MT@temp{\lpcode\MT@font\@tempcnta=#1\relax}}%
+ \MT@ifempty{#2}\relax{\g@addto@macro\MT@temp{\rpcode\MT@font\@tempcnta=#2\relax}}%
+ \MT@do@font\MT@temp
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@reset@pr@codes@}
+%\begin{macro}{\MT@reset@pr@codes}
+% All protrusion codes are zero for new fonts. However, if we have to reload
+% the font due to different contexts, we have to reset them.
+% This command will be changed by \cs{microtypecontext} if necessary.
+% \begin{macrocode}
+\def\MT@reset@pr@codes@{\MT@set@all@pr\z@\z@}
+\let\MT@reset@pr@codes\relax
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@the@pr@code}
+%\begin{macro}{\MT@the@pr@code@tr}
+%\changes{v2.2}{2007/04/05}{adjust protrusion of letterspaced fonts}
+% If the font is letterspaced, we have to add half the letterspacing amount to
+% the margin kerns. This will be activated in \cs{MT@set@tr@codes}.
+% \begin{macrocode}
+\def\MT@the@pr@code{\@tempcntb}
+\MT@requires@pdftex6{
+ \def\MT@the@pr@code@tr{%
+ \numexpr\@tempcntb+\MT@letterspace@/2\relax
+ }
+}\relax
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@set@codes}
+%\changes{v2.3a}{2007/12/29}{generalised}
+% Split up the values and set the codes.
+% \begin{macrocode}
+\def\MT@set@codes#1,{%
+ \ifx\relax#1\@empty\else
+ \MT@split@codes #1==\relax
+ \expandafter\MT@set@codes
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@split@codes}
+%\changes{v1.1}{2004/09/13}{fix: allow zero and negative values}
+%\changes{v1.8}{2005/05/25}{get character width once only}
+% The \pkg{keyval} package would remove spaces here, which we needn't do since
+% \cs{SetProtrusion} ignores spaces in the protrusion list anyway.
+% \cs{MT@get@char@unit} may mean different things.
+% \begin{macrocode}
+\def\MT@split@codes#1=#2=#3\relax{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\@empty \else
+ \MT@get@slot
+ \ifnum\MT@char > \m@ne
+ \MT@get@char@unit
+ \csname MT@\MT@feat @split@val\endcsname#2\relax
+ \fi
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@pr@split@val}
+% \begin{macrocode}
+\def\MT@pr@split@val#1,#2\relax{%
+ \def\@tempb{#1}%
+ \MT@ifempty\@tempb\relax{%
+ \MT@scale@to@em
+ \lpcode\MT@font\MT@char=\MT@the@pr@code
+%<debug>\MT@dinfo@nl{4}{;;; lp (\MT@char): \number\lpcode\MT@font\MT@char: [#1]}%
+ }%
+ \def\@tempb{#2}%
+ \MT@ifempty\@tempb\relax{%
+ \MT@scale@to@em
+ \rpcode\MT@font\MT@char=\MT@the@pr@code
+%<debug>\MT@dinfo@nl{4}{;;; rp (\MT@char): \number\rpcode\MT@font\MT@char: [#2]}%
+ }%
+% \end{macrocode}
+% Now we can set the values for the inheriting characters. Their slot numbers
+% are saved in the macro |\MT@inh@|\meta{list name}|@|\meta{slot number}|@|.
+% \begin{macrocode}
+ \MT@ifdefined@c@T\MT@pr@inh@name{%
+ \MT@ifdefined@n@T{MT@inh@\MT@pr@inh@name @\MT@char @}{%
+ \MT@exp@cs\MT@map@tlist@c
+ {MT@inh@\MT@pr@inh@name @\MT@char @}%
+ \MT@set@pr@heirs
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@scale@to@em}
+% Since \pdftex\ version 0.14h, we have to adjust the protrusion factors (\ie,
+% convert numbers from thousandths of character width to thousandths of an em
+% of the font). We have to do this \emph{before} setting the inheriting
+% characters, so that the latter inherit the absolute value, not the relative
+% one if they have a differing width (\eg, the `ff' ligature).
+%\changes{v1.5}{2004/12/10}{don't use \cmd\lpcode\ and \cmd\rpcode\ for the
+% calculation}
+% Unlike \file{protcode.tex} and \pkg{pdfcprot}, we do not calculate with
+% \cs{lpcode} resp. \cs{rpcode}, since this would disallow protrusion factors
+% larger than the character width (since \cs{[lr]pcode}'s limit is 1000). Now,
+% the maximum protrusion is 1\,em of the font.
+%
+% The unit is in \cs{MT@count}, the desired factor in \cmd\@tempb, and the
+% result will be returned in \cmd\@tempcntb.
+% \begin{macrocode}
+\MT@requires@pdftex3{
+ \def\MT@scale@to@em{%
+ \@tempcntb=\MT@count\relax
+% \end{macrocode}
+% For really huge fonts (100\,pt or so), an arithmetic overflow could occur
+% with vanilla \TeX. Using \etex, this can't happen, since the intermediate
+% value is 64\,bit, which could only be reached with a character width larger
+% than \cs{maxdimen}.
+% \begin{macrocode}
+ \MT@scale\@tempcntb \@tempb \MT@dimen@six
+ \ifnum\@tempcntb=\z@ \else
+ \MT@scale@factor
+ \fi
+ }
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@get@charwd}
+% Get the width of the character. When using \etex, we can employ
+% \cmd\fontcharwd\ instead of building scratch boxes.
+%\changes{v1.6}{2005/01/19}{use \etex's \cmd\fontcharwd, if available}
+%\changes{v1.8}{2005/05/25}{warning for missing (resp. zero-width) characters}
+% \begin{macrocode}
+ \def\MT@get@charwd{%
+^^X \MT@count=\fontcharwd\MT@font\MT@char\relax
+^^Q \setbox\z@=\hbox{\MT@font \char\MT@char}%
+^^Q \MT@count=\wd\z@
+ \ifnum\MT@count=\z@ \MT@info@missing@char \fi
+ }
+% \end{macrocode}
+%\changes{v2.2}{2007/04/05}{subtract letterspacing amount from width}
+% For letterspaced fonts, we have to subtract the letterspacing amount from the
+% characters' widths. The protrusion amounts will be adjusted in
+% \cs{MT@set@pr@codes}.
+% The letterspaced font is already loaded so that 1\,em = \fontdim6.
+% \begin{macrocode}
+ \MT@requires@pdftex6{
+ \g@addto@macro\MT@get@charwd{%
+ \MT@ifdefined@c@T\MT@letterspace@
+ {\advance\MT@count -\dimexpr\MT@letterspace@ sp *\dimexpr 1em/1000\relax}%
+ }
+ }\relax
+}{
+% \end{macrocode}
+%\end{macro}
+% No adjustment with versions 0.14f and 0.14g.
+% \begin{macrocode}
+ \def\MT@scale@to@em{%
+ \MT@count=\@tempb\relax
+ \ifnum\MT@count=\z@ \else
+ \MT@scale@factor
+ \fi
+ }
+% \end{macrocode}
+% We need this in \cs{MT@warn@code@too@large} (neutralised).
+% \begin{macrocode}
+ \def\MT@get@charwd{\MT@count=\MT@dimen@six}
+}
+% \end{macrocode}
+%\begin{macro}{\MT@get@font@dimen}
+% For the |space| unit.
+%\changes{v1.9d}{2006/02/13}{warning for zero fontdimen}
+% \begin{macrocode}
+\def\MT@get@font@dimen#1{%
+ \ifnum\fontdimen#1\MT@font=\z@
+ \MT@warning@nl{Font `\MT@@font' does not specify its\MessageBreak
+ \@backslashchar fontdimen #1 (it's zero)!\MessageBreak
+ You should use a different `unit' for \MT@curr@list@name}%
+ \else
+ \MT@count=\fontdimen#1\MT@font
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@info@missing@char}
+%\changes{v1.9a}{2005/11/17}{info instead of warning
+% (after \contributor Michael Hoppe <mh\at michael-hoppe.de> reported that
+% the `fl' ligature is missing in Palatino <SC>)}
+% ^^A MID: <1h64d0x.16xsx9n1151dieN%mh@michael-hoppe.de>
+% Info about missing characters, or characters with zero width.
+% \begin{macrocode}
+\def\MT@info@missing@char{%
+ \MT@info@nl{Character `\the\MT@toks'
+^^X \iffontchar\MT@font\MT@char
+ has a width of 0pt
+^^X \else is missing\fi
+^^Q \MessageBreak (it's probably missing)
+ \MessageBreak in font `\MT@@font'.\MessageBreak
+ Ignoring protrusion settings for this character}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@scale@factor}
+%\changes{v1.5}{2004/12/10}{warning for factors outside limits}
+%\changes{v1.9}{2005/09/28}{generalised}
+% Furthermore, we might have to multiply with a factor.
+% \begin{macrocode}
+\def\MT@scale@factor{%
+ \ifnum\csname MT@\MT@feat @factor@\endcsname=\@m \else
+ \expandafter\MT@scale\expandafter \@tempcntb
+ \csname MT@\MT@feat @factor@\endcsname \@m
+ \fi
+ \ifnum\@tempcntb>\csname MT@\MT@feat @max\endcsname\relax
+ \MT@exp@cs\MT@warn@code@too@large{MT@\MT@feat @max}%
+ \else
+ \ifnum\@tempcntb<\csname MT@\MT@feat @min\endcsname\relax
+ \MT@exp@cs\MT@warn@code@too@large{MT@\MT@feat @min}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@warn@code@too@large}
+% Type out a warning if a chosen protrusion factor is too large after the
+% conversion. As a special service, we also type out the maximum amount that
+% may be specified in the configuration.
+%\changes{v1.7}{2005/02/17}{new macro: type out maximum protrusion factor}
+%\changes{v1.9b}{2006/01/03}{fix calculation with present factor}
+% \begin{macrocode}
+\def\MT@warn@code@too@large#1{%
+ \@tempcnta=#1\relax
+ \ifnum\csname MT@\MT@feat @factor@\endcsname=\@m \else
+ \expandafter\MT@scale\expandafter\@tempcnta\expandafter
+ \@m \csname MT@\MT@feat @factor@\endcsname
+ \fi
+ \MT@scale\@tempcnta \MT@dimen@six \MT@count
+ \MT@warning@nl{The \@nameuse{MT@abbr@\MT@feat} code \@tempb\space
+ is too large for character\MessageBreak
+ `\the\MT@toks' in \MT@curr@list@name.\MessageBreak
+ Setting it to the maximum of \number\@tempcnta}%
+ \@tempcntb=#1\relax
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@get@opt}
+% The optional argument to the configuration commands (except for
+% \cs{SetExpansion}, which is being dealt with in \cs{MT@get@ex@opt}).
+% \begin{macrocode}
+\def\MT@get@opt{%
+ \MT@set@listname
+% \end{macrocode}
+%\begin{macro}{\MT@pr@factor@}
+%\begin{macro}{\MT@sp@factor@}
+%\begin{macro}{\MT@kn@factor@}
+% Apply a factor?
+% \begin{macrocode}
+ \MT@ifdefined@n@TF{MT@\MT@feat @c@\csname MT@\MT@feat @c@name\endcsname @factor}{%
+ \MT@let@nn{MT@\MT@feat @factor@}
+ {MT@\MT@feat @c@\csname MT@\MT@feat @c@name\endcsname @factor}%
+ \MT@vinfo{... : Multiplying \@nameuse{MT@abbr@\MT@feat} codes by
+ \number\csname MT@\MT@feat @factor@\endcsname/1000}%
+ }{%
+ \MT@let@nn{MT@\MT@feat @factor@}{MT@\MT@feat @factor}%
+ }%
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@pr@unit@}
+%\begin{macro}{\MT@sp@unit@}
+%\begin{macro}{\MT@kn@unit@}
+% The |unit| can only be evaluated here, since it might be font-specific.
+% If it's \cmd\@empty, it's relative to character widths, if it's \textminus1,
+% relative to space dimensions.
+% \begin{macrocode}
+ \MT@ifdefined@n@TF{MT@\MT@feat @c@\csname MT@\MT@feat @c@name\endcsname @unit}{%
+ \MT@let@nn{MT@\MT@feat @unit@}%
+ {MT@\MT@feat @c@\csname MT@\MT@feat @c@name\endcsname @unit}%
+ \MT@exp@cs\ifx{MT@\MT@feat @unit@}\@empty
+ \MT@vinfo{... : Setting \@nameuse{MT@abbr@\MT@feat} codes
+ relative to character widths}%
+ \else
+ \MT@exp@cs\ifx{MT@\MT@feat @unit@}\m@ne
+ \MT@vinfo{... : Setting \@nameuse{MT@abbr@\MT@feat} codes
+ relative to width of space}%
+ \fi
+ \fi
+ }{%
+ \MT@let@nn{MT@\MT@feat @unit@}{MT@\MT@feat @unit}%
+ }%
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@get@space@unit}
+%\begin{macro}{\MT@get@char@unit}
+% The codes are either relative to character widths, or to a fixed width.
+% For spacing and kerning lists, they may also be relative to the width of
+% the interword glue.
+% Only the setting from the top list will be taken into account.
+% \begin{macrocode}
+ \let\MT@get@char@unit\relax
+ \let\MT@get@space@unit\@gobble
+ \MT@exp@cs\ifx{MT@\MT@feat @unit@}\@empty
+ \let\MT@get@char@unit\MT@get@charwd
+ \else
+ \MT@exp@cs\ifx{MT@\MT@feat @unit@}\m@ne
+ \let\MT@get@space@unit\MT@get@font@dimen
+ \else
+ \MT@exp@cs\MT@get@unit{MT@\MT@feat @unit@}%
+ \fi
+ \fi
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+% Preset all characters? If so, we surely don't need to reset, too.
+%\changes{v1.9}{2005/10/08}{new key `\texttt{preset}' to set all characters to
+% the specified value before loading the lists}
+%\changes{v1.9d}{2006/02/13}{set list name before presetting}
+%\changes{v1.9d}{2006/02/18}{optimise: don't reset when \texttt{preset} option is set}
+% \begin{macrocode}
+ \MT@ifdefined@n@T{MT@\MT@feat @c@\csname MT@\MT@feat @c@name\endcsname @preset}{%
+ \csname MT@preset@\MT@feat\endcsname
+ \MT@let@nc{MT@reset@\MT@feat @codes}\relax
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@get@unit}
+%\changes{v1.8}{2005/04/14}{new macro: get unit for codes}
+%\begin{macro}{\MT@get@unit@}
+% If |unit| contains an |em| or |ex|, we use the corresponding \cmd\fontdimen\
+% to obtain the real size. Simply converting the em into points might give a
+% wrong result, since the font probably isn't set up yet, so that these
+% dimensions haven't been updated, either.
+% \begin{macrocode}
+\def\MT@get@unit#1{%
+ \expandafter\MT@get@unit@#1 e!\@nil
+ \ifx\x\@empty\else\let#1\x\fi
+ \@defaultunits\@tempdima#1 pt\relax\@nnil
+ \ifdim\@tempdima=\z@
+ \MT@warning@nl{%
+ Cannot set \@nameuse{MT@abbr@\MT@feat} factors relative to zero\MessageBreak
+ width. Setting factors of list `\@nameuse{MT@\MT@feat @c@name}'\MessageBreak
+ relative to character widths instead}%
+ \let#1\@empty
+ \let\MT@get@char@unit\MT@get@charwd
+ \else
+ \MT@vinfo{... : Setting \@nameuse{MT@abbr@\MT@feat} factors relative
+ to \the\@tempdima}%
+ \MT@count=\@tempdima\relax
+ \fi
+}
+\def\MT@get@unit@#1e#2#3\@nil{%
+ \ifx\\#3\\\let\x\@empty \else
+ \if m#2%
+ \edef\x{#1\fontdimen6\MT@font}%
+ \else
+ \if x#2%
+ \edef\x{#1\fontdimen5\MT@font}%
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@set@inputenc}
+% The configurations may be under the regime of an input encoding.
+% \begin{macrocode}
+\def\MT@set@inputenc#1{%
+% \end{macrocode}
+%\begin{macro}{\MT@cat}
+% We remember the current category (|c| or |inh|), in case of warnings later.
+% \begin{macrocode}
+ \def\MT@cat{#1}%
+% \end{macrocode}
+%\end{macro}
+% \begin{macrocode}
+ \edef\@tempa{MT@\MT@feat @#1@\csname MT@\MT@feat @#1@name\endcsname @inputenc}%
+ \MT@ifdefined@n@T\@tempa\MT@set@inputenc@
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@set@inputenc@}
+%\changes{v2.2}{2007/06/08}{only load \pkg{inputenc} files if necessary}
+% More recent versions of \pkg{inputenc} remember the current encoding, so that
+% we can test whether we really have to load the encoding file.
+% \begin{macrocode}
+\MT@addto@setup{%
+ \@ifpackageloaded{inputenc}{%
+ \@ifpackagelater{inputenc}{2006/02/22}{%
+ \def\MT@set@inputenc@{%
+ \MT@ifstreq\inputencodingname{\csname\@tempa\endcsname}\relax
+ \MT@load@inputenc
+ }%
+ }{%
+ \let\MT@set@inputenc@\MT@load@inputenc
+ }%
+ }{%
+ \def\MT@set@inputenc@{%
+ \MT@warning@nl{Key `inputenc' used in \MT@curr@list@name, but the `inputenc'
+ \MessageBreak package isn't loaded. Ignoring input encoding}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@load@inputenc}
+% Set up normal catcodes, since, \eg, \pkg{listings} would otherwise want to
+% actually typeset the \pkg{inputenc} file when it is being loaded inside a
+% listing.
+%\changes{v2.0}{2006/09/15}{sanitise catcodes before loading input encoding
+% (problem with \pkg{listings})}
+% \begin{macrocode}
+\def\MT@load@inputenc{%
+ \MT@cfg@catcodes
+%<debug>\MT@dinfo@nl{1}{loading input encoding: \@nameuse{\@tempa}}%
+ \inputencoding{\@nameuse{\@tempa}}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@set@pr@heirs}
+% Set the inheriting characters.
+% \begin{macrocode}
+\def\MT@set@pr@heirs#1{%
+ \lpcode\MT@font#1=\lpcode\MT@font\MT@char
+ \rpcode\MT@font#1=\rpcode\MT@font\MT@char
+%<debug>\MT@dinfo@nl{2}{-- heir of \MT@char: #1}%
+%<debug>\MT@dinfo@nl{4}{;;; lp/rp (#1): \number\lpcode\MT@font\MT@char/%
+%<debug> \number\rpcode\MT@font\MT@char}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@preset@pr}
+%\begin{macro}{\MT@preset@pr@}
+% Preset characters. Presetting them relative to their widths is not allowed.
+% \begin{macrocode}
+\def\MT@preset@pr{%
+ \expandafter\expandafter\expandafter\MT@preset@pr@
+ \csname MT@pr@c@\MT@pr@c@name @preset\endcsname\@nil
+}
+\def\MT@preset@pr@#1,#2\@nil{%
+ \ifx\MT@pr@unit@\@empty
+ \MT@warn@preset@towidth{pr}%
+ \let\MT@preset@aux\MT@preset@aux@factor
+ \else
+ \def\MT@preset@aux{\MT@preset@aux@space2}%
+ \fi
+ \MT@ifempty{#1}{\let\@tempa\@empty}{\MT@preset@aux{#1}\@tempa}%
+ \MT@ifempty{#2}{\let\@tempb\@empty}{\MT@preset@aux{#2}\@tempb}%
+ \MT@set@all@pr\@tempa\@tempb
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@preset@aux}
+%\begin{macro}{\MT@preset@aux@factor}
+%\begin{macro}{\MT@preset@aux@space}
+%\changes{v2.2}{2007/06/16}{generalised}
+% Auxiliary macro for presetting. Store value \meta{\#1} in macro \meta{\#2}.
+% \begin{macrocode}
+\def\MT@preset@aux@factor#1#2{%
+ \@tempcntb=#1\relax
+ \MT@scale@factor
+ \edef#2{\number\@tempcntb}%
+}
+\def\MT@preset@aux@space#1#2#3{%
+ \def\@tempb{#2}%
+ \MT@get@space@unit#1%
+ \MT@scale@to@em
+ \edef#3{\number\@tempcntb}%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@warn@preset@towidth}
+% \begin{macrocode}
+\def\MT@warn@preset@towidth#1{%
+ \MT@warning@nl{%
+ Cannot preset characters relative to their widths\MessageBreak
+ for \@nameuse{MT@abbr@#1} list `\@nameuse{MT@#1@c@name}'. Presetting them%
+ \MessageBreak relative to 1em instead}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsubsection{Expansion}
+%
+%\begin{macro}{\MT@expansion}
+% Set up for expansion?
+% \begin{macrocode}
+\def\MT@expansion{\MT@maybe@do{ex}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@set@ex@codes@s}
+% Setting up font expansion is a bit different because of the \opt{selected} option.
+% There are two versions of this macro.
+%
+% If \opt{selected}|=true|, we only apply font expansion to those fonts for which a
+% list has been declared (\ie, like for protrusion).
+% \begin{macrocode}
+\def\MT@set@ex@codes@s{%
+ \MT@if@list@exists{%
+ \MT@get@ex@opt
+ \let\MT@get@char@unit\relax
+ \MT@reset@ef@codes
+ \MT@get@inh@list
+ \MT@set@inputenc{c}%
+ \MT@load@list\MT@ex@c@name
+ \MT@set@listname
+ \MT@let@cn\@tempc{MT@ex@c@\MT@ex@c@name}%
+ \expandafter\MT@set@codes\@tempc,\relax,%
+ \MT@expandfont
+ }\relax
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\MT@set@ex@codes@n}
+% If, on the other hand, all characters should be expanded by the same amount,
+% we only take the first optional argument to \cs{SetExpansion} into account.
+%\begin{macro}{\ifMT@nonselected}
+% We need this boolean in \cs{MT@if@list@exists} so that no warning for missing
+% lists will be issued.
+% \begin{macrocode}
+\newif\ifMT@nonselected
+% \end{macrocode}
+%\end{macro}
+% \begin{macrocode}
+\def\MT@set@ex@codes@n{%
+ \MT@nonselectedtrue
+ \MT@if@list@exists
+ \MT@get@ex@opt
+ {%
+ \let\MT@stretch@ \MT@stretch
+ \let\MT@shrink@ \MT@shrink
+ \let\MT@step@ \MT@step
+ \let\MT@auto@ \MT@auto
+ \let\MT@ex@factor@\MT@ex@factor
+ }%
+ \MT@reset@ef@codes
+ \MT@expandfont
+ \MT@nonselectedfalse
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@set@ex@codes}
+%\changes{v1.5}{2004/12/02}{allow non-selected font expansion}
+%\changes{v1.6}{2004/12/26}{introduce \texttt{factor} option}
+%\changes{v1.7}{2005/02/06}{two versions of this macro}
+% Default is non-selected. It can be changed in the package options.
+% \begin{macrocode}
+\let\MT@set@ex@codes\MT@set@ex@codes@n
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@expandfont}
+% Expand the font.
+% \begin{macrocode}
+\def\MT@expandfont{%
+ \pdffontexpand\MT@font \MT@stretch@ \MT@shrink@ \MT@step@ \MT@auto@\relax
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@set@all@ex}
+%\begin{macro}{\MT@reset@ef@codes@}
+% At first, all expansion factors for the characters will be set to 1000
+% (respectively the |factor| of this font).
+% \begin{macrocode}
+\def\MT@set@all@ex#1{%
+%<debug>\MT@dinfo@nl{3}{-- ex: setting all to \number#1}%
+ \MT@do@font{\efcode\MT@font\@tempcnta=#1\relax}%
+}
+\def\MT@reset@ef@codes@{\MT@set@all@ex\MT@ex@factor@}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@reset@ef@codes}
+% However, this is only necessary for versions prior to~1.20.
+%\changes{v1.6a}{2005/01/30}{only reset \cmd\efcode s for older \pdftex\ versions}
+% \begin{macrocode}
+\MT@requires@pdftex4{
+ \def\MT@reset@ef@codes{%
+ \ifnum\MT@ex@factor@=\@m \else
+ \MT@reset@ef@codes@
+ \fi
+ }
+}{
+ \let\MT@reset@ef@codes\MT@reset@ef@codes@
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@ex@split@val}
+% There's only one number per character.
+% \begin{macrocode}
+\def\MT@ex@split@val#1\relax{%
+ \@tempcntb=#1\relax
+% \end{macrocode}
+% Take an optional factor into account.
+% \begin{macrocode}
+ \ifnum\MT@ex@factor@=\@m \else
+ \MT@scale\@tempcntb \MT@ex@factor@ \@m
+ \fi
+ \ifnum\@tempcntb > \MT@ex@max
+ \MT@warn@ex@too@large\MT@ex@max
+ \else
+ \ifnum\@tempcntb < \MT@ex@min
+ \MT@warn@ex@too@large\MT@ex@min
+ \fi
+ \fi
+ \efcode\MT@font\MT@char=\@tempcntb
+%<debug>\MT@dinfo@nl{4}{::: ef (\MT@char): \number\efcode\MT@font\MT@char: [#1]}%
+% \end{macrocode}
+% Heirs, heirs, I love thy heirs.
+% \begin{macrocode}
+ \MT@ifdefined@c@T\MT@ex@inh@name{%
+ \MT@ifdefined@n@T{MT@inh@\MT@ex@inh@name @\MT@char @}{%
+ \MT@exp@cs\MT@map@tlist@c{MT@inh@\MT@ex@inh@name @\MT@char @}\MT@set@ex@heirs
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@warn@ex@too@large}
+% \begin{macrocode}
+\def\MT@warn@ex@too@large#1{%
+ \MT@warning@nl{Expansion factor \number\@tempcntb\space too large for
+ character\MessageBreak `\the\MT@toks' in \MT@curr@list@name.\MessageBreak
+ Setting it to the maximum of \number#1}%
+ \@tempcntb=#1\relax
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@get@ex@opt}
+%\changes{v1.9d}{2006/02/13}{fix: evaluate \texttt{preset}}
+%\begin{macro}{\MT@ex@factor@}
+%\begin{macro}{\MT@stretch@}
+%\begin{macro}{\MT@shrink@}
+%\begin{macro}{\MT@step@}
+%\begin{macro}{\MT@auto@}
+% Apply different values to this font?
+% \begin{macrocode}
+\def\MT@get@ex@opt{%
+ \MT@set@listname
+ \MT@ifdefined@n@TF{MT@ex@c@\MT@ex@c@name @factor}{%
+ \MT@let@cn\MT@ex@factor@{MT@ex@c@\MT@ex@c@name @factor}%
+ \MT@vinfo{... : Multiplying expansion factors by \number\MT@ex@factor@/1000}%
+ }{%
+ \let\MT@ex@factor@\MT@ex@factor
+ }%
+ \MT@get@ex@opt@{stretch}{Setting stretch limit to \number\MT@stretch@}%
+ \MT@get@ex@opt@{shrink} {Setting shrink limit to \number\MT@shrink@}%
+ \MT@get@ex@opt@{step} {Setting expansion step to \number\MT@step@}%
+ \def\@tempa{autoexpand}%
+ \MT@get@ex@opt@{auto}{\ifx\@tempa\MT@auto@ En\else Dis\fi abling automatic expansion}%
+ \MT@ifdefined@n@T{MT@ex@c@\MT@ex@c@name @preset}{%
+ \MT@preset@ex
+ \let\MT@reset@ef@codes\relax
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@get@ex@opt@}
+% \begin{macrocode}
+\def\MT@get@ex@opt@#1#2{%
+ \MT@ifdefined@n@TF{MT@ex@c@\MT@ex@c@name @#1}{%
+ \MT@let@nn{MT@#1@}{MT@ex@c@\MT@ex@c@name @#1}%
+ \MT@vinfo{... : #2}%
+ }{%
+ \MT@let@nn{MT@#1@}{MT@#1}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@set@ex@heirs}
+% \begin{macrocode}
+\def\MT@set@ex@heirs#1{%
+ \efcode\MT@font#1=\efcode\MT@font\MT@char
+%<debug>\MT@dinfo@nl{2}{-- heir of \MT@char: #1}%
+%<debug>\MT@dinfo@nl{4}{::: ef (#1) \number\efcode\MT@font\MT@char}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@preset@ex}
+% \begin{macrocode}
+\def\MT@preset@ex{%
+ \@tempcntb=\csname MT@ex@c@\MT@ex@c@name @preset\endcsname\relax
+ \MT@scale@factor
+ \MT@set@all@ex\@tempcntb
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsubsection{Interword spacing (glue)}
+%
+%\begin{macro}{\MT@spacing}
+% Adjustment of interword spacing?
+% \begin{macrocode}
+\MT@requires@pdftex6{
+\def\MT@spacing{\MT@maybe@do{sp}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@set@sp@codes}
+% This is all the same.
+% \begin{macrocode}
+\def\MT@set@sp@codes{%
+ \MT@if@list@exists{%
+ \MT@get@font@dimen@six{%
+ \MT@get@opt
+ \MT@reset@sp@codes
+ \MT@get@inh@list
+ \MT@set@inputenc{c}%
+ \MT@load@list\MT@sp@c@name
+ \MT@set@listname
+ \MT@let@cn\@tempc{MT@sp@c@\MT@sp@c@name}%
+ \expandafter\MT@set@codes\@tempc,\relax,}%
+ }\MT@reset@sp@codes
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@sp@split@val}
+% If |unit=space|, \cs{MT@get@space@unit} will be defined to fetch the
+% corresponding fontdimen (2 for the first, 3 for the second and 4 for the
+% third argument).
+% \begin{macrocode}
+\def\MT@sp@split@val#1,#2,#3\relax{%
+ \def\@tempb{#1}%
+ \MT@ifempty\@tempb\relax{%
+ \MT@get@space@unit2%
+ \MT@scale@to@em
+ \knbscode\MT@font\MT@char=\@tempcntb
+%<debug>\MT@dinfo@nl{4}{;;; knbs (\MT@char): \number\knbscode\MT@font\MT@char: [#1]}%
+ }%
+ \def\@tempb{#2}%
+ \MT@ifempty\@tempb\relax{%
+ \MT@get@space@unit3%
+ \MT@scale@to@em
+ \stbscode\MT@font\MT@char=\@tempcntb
+%<debug>\MT@dinfo@nl{4}{;;; stbs (\MT@char): \number\stbscode\MT@font\MT@char: [#2]}%
+ }%
+ \def\@tempb{#3}%
+ \MT@ifempty\@tempb\relax{%
+ \MT@get@space@unit4%
+ \MT@scale@to@em
+ \shbscode\MT@font\MT@char=\@tempcntb
+%<debug>\MT@dinfo@nl{4}{;;; shbs (\MT@char): \number\shbscode\MT@font\MT@char: [#3]}%
+ }%
+ \MT@ifdefined@c@T\MT@sp@inh@name{%
+ \MT@ifdefined@n@T{MT@inh@\MT@sp@inh@name @\MT@char @}{%
+ \MT@exp@cs\MT@map@tlist@c{MT@inh@\MT@sp@inh@name @\MT@char @}\MT@set@sp@heirs
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@set@sp@heirs}
+% \begin{macrocode}
+\def\MT@set@sp@heirs#1{%
+ \knbscode\MT@font#1=\knbscode\MT@font\MT@char
+ \stbscode\MT@font#1=\stbscode\MT@font\MT@char
+ \shbscode\MT@font#1=\shbscode\MT@font\MT@char
+%<debug>\MT@dinfo@nl{2}{-- heir of \MT@char: #1}%
+%<debug>\MT@dinfo@nl{4}{;;; knbs/stbs/shbs (#1): \number\knbscode\MT@font\MT@char/%
+%<debug> \number\stbscode\MT@font\MT@char/\number\shbscode\MT@font\MT@char}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@set@all@sp}
+%\begin{macro}{\MT@reset@sp@codes}
+%\begin{macro}{\MT@reset@sp@codes@}
+% \begin{macrocode}
+\def\MT@set@all@sp#1#2#3{%
+%<debug>\MT@dinfo@nl{3}{-- knbs/stbs/shbs: setting all to #1/#2/#3}%
+ \let\MT@temp\@empty
+ \MT@ifempty{#1}\relax{\g@addto@macro\MT@temp{\knbscode\MT@font\@tempcnta=#1\relax}}%
+ \MT@ifempty{#2}\relax{\g@addto@macro\MT@temp{\stbscode\MT@font\@tempcnta=#2\relax}}%
+ \MT@ifempty{#3}\relax{\g@addto@macro\MT@temp{\shbscode\MT@font\@tempcnta=#3\relax}}%
+ \MT@do@font\MT@temp
+}
+\def\MT@reset@sp@codes@{\MT@set@all@sp\z@\z@\z@}
+\let\MT@reset@sp@codes\relax
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@preset@sp}
+%\begin{macro}{\MT@preset@sp@}
+% \begin{macrocode}
+\def\MT@preset@sp{%
+ \expandafter\expandafter\expandafter\MT@preset@sp@
+ \csname MT@sp@c@\MT@sp@c@name @preset\endcsname\@nil
+}
+\def\MT@preset@sp@#1,#2,#3\@nil{%
+ \ifx\MT@sp@unit@\@empty
+ \MT@warn@preset@towidth{sp}%
+ \MT@ifempty{#1}{\let\@tempa\@empty}{\MT@preset@aux@factor{#1}\@tempa}%
+ \MT@ifempty{#2}{\let\@tempc\@empty}{\MT@preset@aux@factor{#2}\@tempc}%
+ \MT@ifempty{#3}{\let\@tempb\@empty}{\MT@preset@aux@factor{#3}\@tempb}%
+ \else
+ \MT@ifempty{#1}{\let\@tempa\@empty}{\MT@preset@aux@space2{#1}\@tempa}%
+ \MT@ifempty{#2}{\let\@tempc\@empty}{\MT@preset@aux@space3{#2}\@tempc}%
+ \MT@ifempty{#3}{\let\@tempb\@empty}{\MT@preset@aux@space4{#3}\@tempb}%
+ \fi
+ \MT@set@all@sp\@tempa\@tempc\@tempb
+}
+}\relax
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%
+%\subsubsection{Additional kerning}
+%
+%\begin{macro}{\MT@kerning}
+% Again, only check for additional kerning for new versions of \pdftex.
+% \begin{macrocode}
+\MT@requires@pdftex6{
+\def\MT@kerning{\MT@maybe@do{kn}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@set@kn@codes}
+% It's getting boring, I know.
+% \begin{macrocode}
+\def\MT@set@kn@codes{%
+ \MT@if@list@exists{%
+ \MT@get@font@dimen@six{%
+ \MT@get@opt
+ \MT@reset@kn@codes
+ \MT@get@inh@list
+ \MT@set@inputenc{c}%
+ \MT@load@list\MT@kn@c@name
+ \MT@set@listname
+ \MT@let@cn\@tempc{MT@kn@c@\MT@kn@c@name}%
+ \expandafter\MT@set@codes\@tempc,\relax,}%
+ }\MT@reset@kn@codes
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@kn@split@val}
+% Again, the unit may be measured in the space dimension; this time only
+% \fontdim2.
+% \begin{macrocode}
+\def\MT@kn@split@val#1,#2\relax{%
+ \def\@tempb{#1}%
+ \MT@ifempty\@tempb\relax{%
+ \MT@get@space@unit2%
+ \MT@scale@to@em
+ \knbccode\MT@font\MT@char=\@tempcntb
+%<debug>\MT@dinfo@nl{4}{;;; knbc (\MT@char): \number\knbccode\MT@font\MT@char: [#1]}%
+ }%
+ \def\@tempb{#2}%
+ \MT@ifempty\@tempb\relax{%
+ \MT@get@space@unit2%
+ \MT@scale@to@em
+ \knaccode\MT@font\MT@char=\@tempcntb
+%<debug>\MT@dinfo@nl{4}{;;; knac (\MT@char): \number\knaccode\MT@font\MT@char: [#2]}%
+ }%
+ \MT@ifdefined@c@T\MT@kn@inh@name{%
+ \MT@ifdefined@n@T{MT@inh@\MT@kn@inh@name @\MT@char @}{%
+ \MT@exp@cs\MT@map@tlist@c{MT@inh@\MT@kn@inh@name @\MT@char @}\MT@set@kn@heirs
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@set@kn@heirs}
+% \begin{macrocode}
+\def\MT@set@kn@heirs#1{%
+ \knbccode\MT@font#1=\knbccode\MT@font\MT@char
+ \knaccode\MT@font#1=\knaccode\MT@font\MT@char
+%<debug>\MT@dinfo@nl{2}{-- heir of \MT@char: #1}%
+%<debug>\MT@dinfo@nl{4}{;;; knbc (#1): \number\knbccode\MT@font\MT@char/%
+%<debug> \number\knaccode\MT@font\MT@char}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@set@all@kn}
+%\begin{macro}{\MT@reset@kn@codes}
+%\begin{macro}{\MT@reset@kn@codes@}
+% \begin{macrocode}
+\def\MT@set@all@kn#1#2{%
+%<debug>\MT@dinfo@nl{3}{-- knac/knbc: setting all to #1/#2}%
+ \let\MT@temp\@empty
+ \MT@ifempty{#1}\relax{\g@addto@macro\MT@temp{\knbccode\MT@font\@tempcnta=#1\relax}}%
+ \MT@ifempty{#2}\relax{\g@addto@macro\MT@temp{\knaccode\MT@font\@tempcnta=#2\relax}}%
+ \MT@do@font\MT@temp
+}
+\def\MT@reset@kn@codes@{\MT@set@all@kn\z@\z@}
+\let\MT@reset@kn@codes\relax
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@preset@kn}
+%\begin{macro}{\MT@preset@kn@}
+% \begin{macrocode}
+\def\MT@preset@kn{%
+ \expandafter\expandafter\expandafter\MT@preset@kn@
+ \csname MT@kn@c@\MT@kn@c@name @preset\endcsname\@nil
+}
+\def\MT@preset@kn@#1,#2\@nil{%
+ \ifx\MT@kn@unit@\@empty
+ \MT@warn@preset@towidth{kn}%
+ \let\MT@preset@aux\MT@preset@aux@factor
+ \else
+ \def\MT@preset@aux{\MT@preset@aux@space2}%
+ \fi
+ \MT@ifempty{#1}{\let\@tempa\@empty}{\MT@preset@aux{#1}\@tempa}%
+ \MT@ifempty{#2}{\let\@tempb\@empty}{\MT@preset@aux{#2}\@tempb}%
+ \MT@set@all@kn\@tempa\@tempb
+}
+}\relax
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%
+%\subsubsection{\lsstyle Tracking}
+%
+% This only works with \pdftex\ 1.40.
+% \begin{macrocode}
+\MT@requires@pdftex6{
+% \end{macrocode}
+%\begin{macro}{\MT@tracking}
+%\changes{v2.2}{2007/02/23}{remember fonts that shouldn't be letterspaced}
+%\begin{macro}{\MT@tracking@}
+%\changes{v2.2}{2007/06/16}{fix: tracking couldn't be re-enabled}
+%\begin{macro}{\MT@tr@font@list}
+% We only check whether a font should not be letterspaced at all, not whether
+% we've already done that (because we have to do it again).
+% \begin{macrocode}
+\let\MT@tr@font@list\@empty
+\def\MT@tracking@{%
+ \MT@exp@one@n\MT@in@clist\MT@font\MT@tr@font@list
+ \ifMT@inlist@\else
+ \MT@maybe@do{tr}%
+ \ifMT@do\else
+ \xdef\MT@tr@font@list{\MT@tr@font@list\MT@font,}%
+ \fi
+ \fi
+}
+%</package>
+\let\MT@tracking
+%<package> \MT@tracking@
+%<letterspace> \relax
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@set@tr@codes}
+% The tracking amount is determined by the optional argument to \cs{textls},
+% settings from \cs{SetTracking}, or the global \opt{letterspace} option, in
+% this order.
+% \begin{macrocode}
+\def\MT@set@tr@codes{%
+%<*package>
+ \MT@vinfo{Tracking font `\MT@@font'\on@line}%
+ \MT@get@font@dimen@six{%
+ \MT@if@list@exists
+ \MT@get@tr@opt
+ \relax
+%</package>
+ \MT@ifdefined@c@TF\MT@letterspace@\relax{\let\MT@letterspace@\MT@letterspace}%
+ \ifnum\MT@letterspace@=\z@
+% \end{macrocode}
+%\changes{v2.3d}{2009/03/05}{allow zero tracking}
+% Zero tracking requires special treatment.
+% \begin{macrocode}
+ \MT@set@tr@zero
+ \else
+%<package> \MT@vinfo{... Tracking by \number\MT@letterspace@}%
+% \end{macrocode}
+% Letterspacing only works in <PDF> mode.
+% \begin{macrocode}
+ \MT@warn@tracking@DVI
+% \end{macrocode}
+%\begin{macro}{\MT@lsfont}
+% The letterspaced font instances are saved in macros
+% |\|\meta{font name}|/|\meta{letterspacing amount}|ls|.
+%
+%\changes{v2.2}{2007/03/07}{use \cmd\font@name, not \cs{MT@font}}
+% In contrast to \cs{MT@font}, which may reflect the font characteristics more
+% accurately (taking substitutions into account), \cmd\font@name\ is guaranteed
+% to correspond to an actual font identifier.
+% \begin{macrocode}
+ \xdef\MT@lsfont{\csname\expandafter\string\font@name
+ /\number\MT@letterspace@ ls\endcsname}%
+ \expandafter\ifx\MT@lsfont\relax
+%<debug>\MT@dinfo@nl{1}{... new letterspacing instance}%
+% \end{macrocode}
+%\end{macro}
+% In case of nested letterspacing with different amounts, we have to extract
+% the base font again.
+%\todo{outer spacing/kerning for nested letterspaced text}
+% \begin{macrocode}
+ \MT@get@ls@basefont
+ \global\expandafter\letterspacefont\MT@lsfont\font@name\MT@letterspace@
+% \end{macrocode}
+%\changes{v2.2}{2007/06/16}{possibility to customise interword spacing}
+% Scale interword spacing (not configurable in \letterspace).
+% \begin{macrocode}
+%<*package>
+ \MT@ifdefined@c@TF\MT@tr@ispace
+ {\let\@tempa\MT@tr@ispace}%
+ {\edef\@tempa{\MT@letterspace@*,,}}%
+ \MT@ifdefined@c@TF\MT@tr@ospace
+ {\edef\@tempa{\@tempa,\MT@tr@ospace}}%
+ {\edef\@tempa{\@tempa,,,}}%
+ \expandafter\MT@tr@set@space\@tempa,%
+%</package>
+%<*letterspace>
+ % spacing = {<letterspace amount>*,,}
+ \fontdimen2\MT@lsfont=\dimexpr\numexpr 1000+\MT@letterspace@\relax sp
+ * \fontdimen2\MT@lsfont/1000\relax
+%</letterspace>
+% \end{macrocode}
+%\changes{v2.3}{2007/11/03}{possibility to customise outer kerning
+% (suggested by \contributor Stephan Hennig <stephanhennig\at arcor.de>)}
+% ^^A MID: <46aa1cbb$0$31620$9b4e6d93@newsspool3.arcor-online.net>
+% Adjust outer kerning (\microtype\ only).
+% \begin{macrocode}
+%<*package>
+ \MT@ifdefined@c@TF\MT@tr@okern{\let\@tempa\MT@tr@okern}{\def\@tempa{*,*}}%
+ \expandafter\MT@tr@set@okern\@tempa,%
+% \end{macrocode}
+%\changes{v2.2}{2007/02/23}{disable ligatures in letterspaced fonts manually
+% (due to change in \pdftex\ 1.40.4)}
+% Disable ligatures (not configurable in \letterspace).
+% \begin{macrocode}
+ \MT@ifdefined@c@T\MT@tr@ligatures\MT@tr@noligatures
+%</package>
+%<*letterspace>
+ % no ligatures = {f}
+ \tagcode\MT@lsfont`f=\m@ne
+%</letterspace>
+% \end{macrocode}
+% Adjust protrusion values now, and maybe later (in \cs{MT@pr@split@val}).
+%\changes{v2.3}{2007/07/27}{also adjust tracking if protrusion is not enabled,
+% and even for \letterspace\
+% (reported by \contributor Stephan Hennig <stephanhennig\at arcor.de>)}
+% ^^A MID: <46a9c6c6$0$21005$9b4e6d93@newsspool1.arcor-online.net>
+%\changes{v2.3b}{2008/05/12}{fix: protrusion adjustment only for new fonts
+% (reported by \contributor Wolfram Schaalo <schaalo\at gmx.net>)}
+% ^^A private mail, 2008/05/12
+% \begin{macrocode}
+%<debug>\MT@dinfo@nl{2}{... compensating for tracking (\number\MT@letterspace@)}%
+ \MT@do@font{\lpcode\MT@lsfont\@tempcnta=\numexpr\MT@letterspace@/2\relax
+ \rpcode\MT@lsfont\@tempcnta=\numexpr\MT@letterspace@/2\relax}%
+%<package> \let\MT@the@pr@code\MT@the@pr@code@tr
+ \fi
+% \end{macrocode}
+% Finally, let the letterspaced font propagate.
+% \begin{macrocode}
+ \aftergroup\MT@set@lsfont
+%<package> \let\MT@font\MT@lsfont
+% \end{macrocode}
+%\begin{macro}{\MT@set@curr@ls}
+%\begin{macro}{\MT@curr@ls}
+% We need to remember the current letterspacing amount (for \cs{lslig}).
+% \begin{macrocode}
+ \xdef\MT@set@curr@ls{\def\noexpand\MT@curr@ls{\MT@letterspace@}}%
+ \aftergroup\MT@set@curr@ls
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+% Adjust surrounding spacing and kerning.
+%\begin{macro}{\MT@set@curr@os}
+%\changes{v2.3}{2007/11/03}{adjusting spaces made more reliable}
+% We get the current outer spacing and adjust it, then, after the end of the
+% current outer group, set the current outer spacing, again, and adjust.
+% \begin{macrocode}
+%<*package>
+ \MT@outer@space=\csname MT@outer@space\expandafter\string\font@name\endcsname\relax
+ \xdef\MT@set@curr@os{\MT@outer@space=\the\MT@outer@space\relax}%
+ \MT@tr@outer@l
+%</package>
+% \end{macrocode}
+%\end{macro}
+% If \cs{MT@ls@adjust} is empty, it's the starred version of \cs{textls}.
+% Use scaling to avoid a `Dimension too large'.
+% \begin{macrocode}
+ \ifx\MT@ls@adjust\@empty
+%<letterspace> % \textls : outer kerning = {*,*} ; \textls* : outer kerning = {0,0}
+ \MT@outer@kern=-\dimexpr\MT@letterspace@ sp * \fontdimen6\font@name/2000\relax
+ \MT@ls@outer@k
+%<*letterspace>
+ \xdef\MT@set@curr@ok{\MT@outer@kern=\the\MT@outer@kern\relax}%
+ \aftergroup\aftergroup\aftergroup\MT@ls@aftergroup
+%</letterspace>
+% \end{macrocode}
+% Otherwise, get the current outer kerning and adjust it, for left and right
+% side (\microtype\ only).
+% \begin{macrocode}
+%<*package>
+ \else
+ \MT@outer@kern=\expandafter\expandafter\expandafter\@firstoftwo
+ \csname MT@outer@kern\expandafter\string\font@name\endcsname\relax
+ \ifdim\MT@outer@kern=\z@\else \MT@ls@outer@k \fi
+ \MT@outer@kern=\expandafter\expandafter\expandafter\@secondoftwo
+ \csname MT@outer@kern\expandafter\string\font@name\endcsname\relax
+%</package>
+ \fi
+%<*package>
+% \end{macrocode}
+%\begin{macro}{\MT@set@curr@ok}
+% Carry the outer kerning amount to outside the next group, then set outer
+% spacing (which will set kerning, if no space follows).
+% \begin{macrocode}
+ \xdef\MT@set@curr@ok{\MT@outer@kern=\the\MT@outer@kern\relax}%
+ \aftergroup\aftergroup\aftergroup\MT@ls@aftergroup
+% \end{macrocode}
+%\end{macro}
+% \begin{macrocode}
+%</package>
+ \fi
+%<package> }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@ls@aftergroup}
+% Stuff to be done after the letterspace group. The \letterspace\ package
+% only adjusts the kerning.
+% \begin{macrocode}
+%<letterspace>\def\MT@ls@aftergroup{\MT@set@curr@ok\MT@ls@outer@k}
+% \end{macrocode}
+%\changes{v2.3e}{2009/11/02}{compatibility with \pkg{tikz} (first reported by
+% \contributor Christian Stark <cstark\at gmx.de>)} ^^A MID: <7d81lgF2ad3ckU1@mid.dfncis.de>, 2009/07/28
+%^^A Also: \contributor Karl Karlsson <karl-karlsson\at yandex.ru> ^^A privat mail, 2009/10/29
+%^^A \contributor hscm <henkmetselaar\at gmail.com> ^^A MID: <6a24e972-b1a7-4172-a5a0-d2707e016301@12g2000pri.googlegroups.com>, 2009/11/02
+% \microtype\ also adjusts spacing.
+% If \cmd\tikz@expandcount\ is greater than zero, we're inside or at the end of
+% a \pkg{tikz} node, where we don't want to do anything, lest we disturb
+% \pkg{tikz}.
+% \begin{macrocode}
+%<*package>
+\MT@addto@setup{%
+ \@ifpackageloaded{tikz}
+ {\def\MT@ls@aftergroup{%
+ \ifnum\tikz@expandcount>\z@ \else
+ \MT@set@curr@os\MT@set@curr@ok\expandafter\MT@tr@outer@r\fi}}
+ {\def\MT@ls@aftergroup{\MT@set@curr@os\MT@set@curr@ok\MT@tr@outer@r}}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@get@tr@opt}
+% Various settings (only for the \microtype\ version).
+% \begin{macrocode}
+\def\MT@get@tr@opt{%
+ \MT@set@listname
+ \MT@ifdefined@n@T{MT@tr@c@\MT@tr@c@name}{%
+ \MT@let@cn\MT@letterspace{MT@tr@c@\MT@tr@c@name}%
+% \end{macrocode}
+%\begin{macro}{\MT@tr@unit@}
+% Different unit?
+% \begin{macrocode}
+ \MT@ifdefined@n@T{MT@tr@c@\MT@tr@c@name @unit}{%
+ \MT@let@cn\MT@tr@unit@{MT@tr@c@\MT@tr@c@name @unit}%
+ \ifdim\MT@tr@unit@=1em
+ \let\MT@tr@unit@\@undefined
+ \else
+ \MT@let@cn\@tempb{MT@tr@c@\MT@tr@c@name}%
+ \MT@get@unit\MT@tr@unit@
+ \let\MT@tr@factor@\@m
+ \MT@scale@to@em
+ \edef\MT@letterspace{\number\@tempcntb}%
+ \fi
+ }%
+ }%
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@tr@ispace}
+%\begin{macro}{\MT@tr@ospace}
+% Adjust interword spacing.
+% \begin{macrocode}
+ \MT@get@tr@opt@{spacing} {ispace}%
+ \MT@get@tr@opt@{outerspacing}{ospace}%
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@tr@okern}
+% Adjust outer kerning.
+% \begin{macrocode}
+ \MT@get@tr@opt@{outerkerning}{okern}%
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@tr@ligatures}
+% Which ligatures should we disable (empty means all, undefined none)?
+% \begin{macrocode}
+ \MT@get@tr@opt@{noligatures} {ligatures}%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@get@tr@opt@}
+% \begin{macrocode}
+\def\MT@get@tr@opt@#1#2{%
+ \MT@ifdefined@n@T{MT@tr@c@\MT@tr@c@name @#1}%
+ {\MT@let@nn{MT@tr@#2}{MT@tr@c@\MT@tr@c@name @#1}}%
+}
+%</package>
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@set@lsfont}
+% Redefine \cmd\font@name, which will be called a second later (in
+% \cmd\selectfont).
+% \begin{macrocode}
+%<plain>\MT@requires@latex2{
+\def\MT@set@lsfont{\MT@exp@two@c\let\font@name\MT@lsfont}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\lsstyle}
+%\changes{v2.0}{2005/09/21}{(beta:1) new command: letterspacing}
+%\changes{v2.0}{2006/09/19}{(beta:8) fix: font switches don't pose a problem anymore}
+%\changes{v2.0}{2006/09/21}{(beta:8) fix: letterspacing commands may be nested}
+%\changes{v2.0}{2006/12/28}{totally redone, using the new \cmd\letterspacefont}
+%\changes{v2.3d}{2008/11/16}{make invalid in math mode}
+%\changes{v2.3d}{2009/01/07}{disable for \luatex}
+% Disable the tests whether the font should be letterspaced, then trigger the
+% setup.
+% Only \cs{textls} can be used in math mode (\cs{lsstyle} may be used inside
+% another text switch, of course).
+% \begin{macrocode}
+\DeclareRobustCommand\lsstyle{%
+ \not@math@alphabet\lsstyle\textls
+%<package> \def\MT@feat{tr}%
+ \let\MT@tracking\MT@set@tr@codes
+ \selectfont
+}
+% \end{macrocode}
+% Now the definitions for the \letterspace\ package with plain \TeX.
+% \begin{macrocode}
+%<*plain>
+}{
+\def\MT@set@lsfont{\MT@lsfont}
+\def\lsstyle{%
+ \begingroup
+ \escapechar\m@ne
+ \xdef\font@name{\csname\expandafter\string\the\font\endcsname}%
+ \MT@set@tr@codes
+ \endgroup
+}
+\let\textls\@undefined
+\let\lslig\@undefined
+}
+%</plain>
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\lslig}
+%\changes{v2.1}{2007/01/17}{new command: protect ligatures in letterspaced text}
+%\changes{v2.2}{2007/02/25}{always defined}
+%\changes{v2.3}{2007/11/03}{redone: extract outer kerns from current letterspacing
+% amount}
+%\begin{macro}{\MT@lslig}
+% For Fraktur fonts, some ligatures shouldn't be broken up. This command will
+% temporarily select the base font and insert the correct kerning.
+% \begin{macrocode}
+\DeclareRobustCommand\lslig[1]{%
+ {\MT@ifdefined@c@TF\MT@curr@ls{%
+ \escapechar\m@ne
+ \MT@get@ls@basefont
+ \MT@outer@kern=\dimexpr\MT@curr@ls sp * \fontdimen6\font@name/2000\relax
+ \kern\MT@outer@kern
+ \font@name #1%
+ \kern\MT@outer@kern%
+ }{#1}}%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@ls@basefont}
+%\begin{macro}{\MT@get@ls@basefont}
+%\changes{v2.1}{2007/01/19}{redone: use \cmd\pdfmatch\ to make it bullet-proof}
+% \pdftex\ cannot letterspace fonts that already are letterspaced. Therefore,
+% we have to save the base font in |\|\meta{font name}|@base|.
+%
+%\changes{v2.2}{2007/02/18}{fix again: remember base font in a macro}
+% The previous solution (checking the macro's meaning with \cmd\pdfmatch),
+% where we were loading the base font via the \cmd\font\ primitive again,
+% would destroy all previously set up micro-typographic features of the font.
+% \begin{macrocode}
+\def\MT@get@ls@basefont{%
+ \xdef\MT@ls@basefont{\csname\expandafter\string\font@name @base\endcsname}%
+ \expandafter\ifx\MT@ls@basefont\relax
+ \MT@exp@two@c\MT@glet\MT@ls@basefont\font@name
+ \else
+%<debug>\MT@dinfo@nl{1}{... fixing base font}%
+ \MT@exp@two@c\let\font@name\MT@ls@basefont
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@set@lsbasefont}
+%\begin{macro}{\MT@set@tr@zero}
+%\changes{v2.3d}{2009/03/05}{fix: allow switching off tracking
+% (reported by \contributor Ulrich Dirr <ud\at mucschach.de>)}
+% ^^A private mail, 2009/02/22
+% If tracking is switched off in the middle of the document, or if \cs{textls}
+% is called with a zero letterspacing amount, we have to retrieve the base font
+% and select it.
+% \begin{macrocode}
+\def\MT@set@lsbasefont{\MT@exp@two@c\let\font@name\MT@ls@basefont}
+\def\MT@set@tr@zero{%
+%<debug>\MT@dinfo@nl{1}{... zero tracking}%
+ \xdef\MT@ls@basefont{\csname\expandafter\string\font@name @base\endcsname}%
+ \expandafter\ifx\MT@ls@basefont\relax \else
+%<debug>\MT@dinfo@nl{1}{... fixing base font}%
+ \aftergroup\MT@set@lsbasefont
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@tr@noligatures}
+% \pdftex\ 1.40.0--1.40.3 disabled all ligatures in letterspaced fonts.
+% \begin{macrocode}
+%<*package>
+\MT@requires@pdftex7{
+ \def\MT@tr@noligatures{%
+ \ifx\MT@tr@ligatures\@empty
+ \MT@noligatures@\MT@lsfont\@undefined
+ \else
+ \MT@noligatures@\MT@lsfont\MT@tr@ligatures
+ \fi
+ }
+}{
+ \def\MT@tr@noligatures{%
+ \MT@warning@nl{%
+ Disabling selected ligatures is only possible since\MessageBreak
+ pdftex 1.40.4. Disabling all ligatures instead}%
+ \MT@glet\MT@tr@noligatures\relax
+ }
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@outer@space}
+% A new skip for outer spacing.
+% \begin{macrocode}
+\newskip\MT@outer@space
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@tr@set@space}
+% Adjust interword spacing (\fontdim2--4) for inner and outer space.
+% For inner spacing, the font dimensions will be adjusted, the settings for
+% outer spacing will be remembered in a macro.
+% \begin{macrocode}
+\def\MT@tr@set@space#1,#2,#3,#4,#5,#6,{%
+%<debug>\MT@dinfo@nl2{... orig. space: \the\fontdimen2\MT@lsfont,
+%<debug> \the\fontdimen3\MT@lsfont, \the\fontdimen4\MT@lsfont
+%<debug> \MessageBreak... (#1,#2,#3) (#4,#5,#6)}%
+ \let\MT@temp\@empty
+ \MT@tr@set@space@{#1}{#4}{2}\@empty
+ \MT@tr@set@space@{#2}{#5}{3}\@plus
+ \MT@tr@set@space@{#3}{#6}{4}\@minus
+ \MT@glet@nc{MT@outer@space\expandafter\string\font@name}\MT@temp
+%<debug>\MT@dinfo@nl2{... inner space: \the\fontdimen2\MT@lsfont,
+%<debug> \the\fontdimen3\MT@lsfont, \the\fontdimen4\MT@lsfont}%
+%<debug>\MT@dinfo@nl2{... outer space: \MT@temp}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@tr@set@space@}
+% If outer spacing settings don't exist, they will be inherited from the inner
+% spacing settings.
+% \begin{macrocode}
+\def\MT@tr@set@space@#1#2#3#4{%
+ \MT@ifempty{#2}{%
+ \MT@ifempty{#1}{%
+ \edef\MT@temp{\MT@temp#4\the\fontdimen#3\MT@lsfont}%
+ }{%
+ \MT@tr@set@space@@{#1}{#3}{1000}%
+ \edef\MT@temp{\MT@temp#4\the\@tempdima}%
+ \fontdimen#3\MT@lsfont=\@tempdima
+ }%
+ }{%
+ \MT@tr@set@space@@{#2}{#3}{2000}%
+ \edef\MT@temp{\MT@temp#4\the\@tempdima}%
+ \MT@ifempty{#1}\relax{%
+ \MT@tr@set@space@@{#1}{#3}{1000}%
+ \fontdimen#3\MT@lsfont=\@tempdima
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@tr@set@space@@}
+% If the value is followed by an asterisk, the fontdimen will be scaled by the
+% respective amount, otherwise the value denotes the desired dimension in the
+% respective unit.
+% \begin{macrocode}
+\def\MT@tr@set@space@@#1#2#3{%
+ \MT@test@ast#1*\@nil{%
+ \MT@ifdefined@c@TF\MT@tr@unit@
+ {\edef\@tempb{#1}\MT@scale@to@em}
+ {\@tempcntb=#1\relax}%
+ \@tempdima=\dimexpr \dimexpr\@tempcntb sp*\MT@dimen@six/1000\relax
+ -\fontdimen#2\MT@lsfont\relax
+% \end{macrocode}
+% For \fontdim2, we also have to subtract the kerning that letterspacing adds
+% to the sides of the characters (only half if it's for outer spacing).
+% \begin{macrocode}
+ \ifnum#2=\tw@
+ \advance\@tempdima -\dimexpr\MT@letterspace@ sp*\MT@dimen@six/#3\relax
+ \fi
+ \@tempdima=\dimexpr \fontdimen#2\MT@lsfont+\@tempdima\relax
+ }{%
+ \MT@ifempty\@tempa{\let\@tempa\MT@letterspace@}\relax
+ \@tempdima=\dimexpr \numexpr1000+\@tempa sp *\fontdimen#2\MT@lsfont/1000\relax
+ }%
+%<debug>\MT@dinfo@nl3{... : font dimen #2 (#1): \the\@tempdima}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@tr@outer@l}
+% Recall the last skip (must really be an interword space, not just a marker,
+%\changes{v2.3}{2007/10/23}{only change pre outer space if it contains shrink}
+% nor a `hard' space, \ie, one that doesn't contain stretch or shrink parts).
+%\changes{v2.3b}{2008/05/12}{fix: only in horizontal mode}
+% \begin{macrocode}
+\def\MT@tr@outer@l{%
+ \ifhmode
+ \ifdim\lastskip>5sp
+ \edef\x{\the\lastskip minus 0pt}%
+ \setbox\z@\hbox{\MT@outer@space=\x}%
+ \ifdim\wd\z@>\z@
+%<debug>\MT@dinfo2{[[[ adjusting pre space: \the\MT@outer@space}%
+ \unskip \hskip\MT@outer@space\relax
+% \end{macrocode}
+% Disable left outer kerning.
+% \begin{macrocode}
+ \let\MT@ls@outer@k\relax
+ \else
+% \end{macrocode}
+%\changes{v2.3b}{2008/05/18}{make \cmd\spaceskip-aware (\pkg{ragged2e})}
+% The \pkg{ragged2e} package sets \cmd\spaceskip\ without glue.
+% \begin{macrocode}
+ \ifdim\lastskip=%
+ \ifnum\spacefactor<2000
+ \spaceskip
+ \else
+ \ifdim\xspaceskip=\z@
+ \dimexpr\spaceskip+\fontdimen7\font@name\relax
+ \else
+ \xspaceskip
+ \fi
+ \fi
+%<debug>\MT@dinfo2{[[[ adjusting pre space (skip): \the\MT@outer@space}%
+ \unskip \hskip\MT@outer@space\relax
+ \let\MT@ls@outer@k\relax
+ \fi
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@tr@outer@next}
+%\begin{macro}{\MT@tr@outer@r}
+%\begin{macro}{\MT@tr@outer@r@}
+% The following is borrowed from \pkg{soul}. I've added the cases for italic
+% correction, since tracking may also be triggered by text commands (\eg,
+% \cmd\textsc).
+% \begin{macrocode}
+\def\MT@tr@outer@r{%
+ \futurelet\MT@tr@outer@next\MT@tr@outer@r@
+}
+\def\MT@tr@outer@r@{%
+ \def\MT@temp*{}%
+% \end{macrocode}
+% Don't adjust in math mode.
+%\changes{v2.3d}{2008/11/16}{fix: don't adjust in math mode
+% (reported by \contributor Christoph Bier <christoph.bier\at web.de>)}
+% ^^A MID: <6oapk7F2lvo6U1@mid.individual.net>
+% There was a tricky bug when \cs{textls} was the last command in a
+% \cmd\mathchoice\ group.
+% \begin{macrocode}
+ \ifmmode \else
+% \end{macrocode}
+% A similar bug occurred when adjustment would happen inside a discretionary
+% group, which we prevent here.
+%\changes{v2.3d}{2009/02/08}{fix: don't adjust inside discretionary
+% (reported by \contributor Maverick Woo <maverick\at cs.cmu.edu>)}
+% ^^A private mail, 2009/02/07
+% This only works with \etex\ (which we know is available).
+%\changes{v2.3b}{2008/05/18}{additional test for horizontal mode}
+% \begin{macrocode}
+ \ifnum\currentgrouptype=10 \else
+ \def\MT@temp*##1{\ifhmode\hskip\MT@outer@space
+%<debug>\MT@dinfo2{]]] adjusting post space (1): \the\MT@outer@space}%
+ \fi}%
+ \ifcat\egroup\noexpand\MT@tr@outer@next
+% \end{macrocode}
+%\changes{v2.3c}{2008/09/18}{additional test for horizontal mode
+% (reported by \contributor Sveinung Heggen <sveinung.heggen\at orkla.no>)}
+% ^^A private mail, 2008/09/18
+%\todo{fix problem with tikz}
+%^^A \path[->] (N0) edge node {\textls{abc}} (N1);
+%^^A reported by \contributor Christian Stark <cstark\at gmx.de>
+%^^A ^^A 2009/07/28, MID: <7d81lgF2ad3ckU1@mid.dfncis.de>
+% \begin{macrocode}
+ \ifhmode\unkern\fi\egroup
+ \MT@set@curr@ok \MT@set@curr@os
+ \def\MT@temp*{\afterassignment\MT@tr@outer@r\let\MT@temp=}%
+ \else
+% \end{macrocode}
+% If the next token is \cmd\maybe@ic\ (from an enclosing text command), we
+% gobble it, read the next one, feed it to \cmd\maybe@ic@\ (via
+% \cs{MT@tr@outer@icr}) and then call ourselves again.
+%\changes{v2.3d}{2009/02/25}{don't use \cmd\x\
+% (reported by \contributor Ulrich Dirr <ud\at mucschach.de>)}
+% ^^A private mail, 2009/02/22
+%\changes{v2.3e}{2009/05/29}{fix: set current kerning and spacing again
+% (found by \contributor Lars R\"onnb\"ack <lars.ronnback\at affecto.com>)}
+% ^^A <http://code.google.com/p/tufte-latex/issues/detail?id=25>
+% \begin{macrocode}
+ \ifx\maybe@ic\MT@tr@outer@next
+ \MT@set@curr@ok \MT@set@curr@os
+ \def\MT@temp*{\afterassignment\MT@tr@outer@icr\let\MT@temp=}%
+ \else
+% \end{macrocode}
+% If the next token is \cmd\check@icr\ (from an inner text command), we insert
+% ourselves just before it. This will then call \cmd\maybe@ic\ again the next
+% round (which however will always insert an italic correction, since it
+% doesn't read beyond our group).
+% \begin{macrocode}
+ \ifx\check@icr\MT@tr@outer@next
+ \def\MT@temp*{\aftergroup\MT@tr@outer@r\check@icr\let\MT@temp=}%
+ \else
+ \ifx\@sptoken\MT@tr@outer@next
+ \def\MT@temp* {\ifhmode\hskip\MT@outer@space
+%<debug>\MT@dinfo2{]]] adjusting post spaces (2): \the\MT@outer@space}%
+ \fi}%
+ \else
+ \ifx~\MT@tr@outer@next
+ \def\MT@temp*~{\nobreak\hskip\MT@outer@space
+%<debug>\MT@dinfo2{]]] adjusting post spaces (3): \the\MT@outer@space}%
+ }%
+ \else
+ \ifx\ \MT@tr@outer@next \else
+ \ifx\space\MT@tr@outer@next \else
+ \ifx\@xobeysp\MT@tr@outer@next \else
+% \end{macrocode}
+% If there's no outer spacing, there may be outer kerning.
+% \begin{macrocode}
+ \def\MT@temp*{\ifdim\MT@outer@kern=\z@\else\MT@ls@outer@k
+%<debug>\MT@dinfo2{--- adjusting post kern: \the\MT@outer@kern}%
+ \fi}%
+ \let\MT@tr@outer@next\relax
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \MT@temp*%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@tr@outer@icr}
+%\begin{macro}{\MT@tr@outer@icr@}
+% Helper macros for the italic correction mess.
+% \begin{macrocode}
+\def\MT@tr@outer@icr{\afterassignment\MT@tr@outer@icr@\MT@tr@outer@r}
+\def\MT@tr@outer@icr@{%
+ \let\@let@token= \MT@tr@outer@next
+ \maybe@ic@
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+% For older \pdftex\ versions, throw an error.
+% \begin{macrocode}
+}{
+ \DeclareRobustCommand\lsstyle{%
+ \MT@error{Letterspacing only works with pdftex version 1.40\MessageBreak
+ or newer}{Upgrade pdftex, or use the `soul' package instead.}%
+ \MT@glet\lsstyle\relax
+ }
+}
+% \end{macrocode}
+% And for \luatex, too.
+% \begin{macrocode}
+%<*lua>
+\MT@requires@luatex{
+ \DeclareRobustCommand\lsstyle{%
+ \MT@error{Letterspacing currently doesn't work with luatex}
+ {Run pdftex, or use the `soul' package instead.}%
+ \MT@glet\lsstyle\relax
+ }
+}\relax
+%</lua>
+%</package>
+% \end{macrocode}
+%\begin{macro}{\textls}
+%\changes{v2.0}{2005/09/21}{(beta:1) new command: letterspacing}
+%\changes{v2.0}{2006/12/28}{starred version: remove spaces around text}
+%\changes{v2.1}{2007/01/19}{fix: use \cmd\hmode@bgroup}
+%\changes{v2.3d}{2008/11/16}{make math mode aware}
+%\begin{macro}{\MT@ls@adjust@}
+% This command may be used like the other text commands.
+% The starred version removes kerning on the sides.
+% The optional argument changes the letterspacing factor.
+% \begin{macrocode}
+\DeclareRobustCommand\textls{%
+ \@ifstar{\let\MT@ls@adjust@\MT@ls@adjust@empty\MT@textls}%
+ {\let\MT@ls@adjust@\MT@ls@adjust@relax\MT@textls}%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@textls}
+%\begin{macro}{\MT@letterspace@}
+% This is now almost \LaTeX's \cmd\DeclareTextFontCommand, with the difference
+% that we adjust the outer spacing and kerning also for \cs{lsstyle}, while
+% \LaTeX's text \emph{switches} don't bother about italic correction.
+% \begin{macrocode}
+\newcommand\MT@textls[2][]{%
+ \ifmmode
+ \nfss@text{\MT@ls@set@ls{#1}\lsstyle#2}%
+ \else
+ \hmode@bgroup
+ \MT@ls@set@ls{#1}%
+ \lsstyle #2%
+ \expandafter
+ \egroup
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@ls@adjust}
+%\begin{macro}{\MT@ls@adjust@empty}
+%\begin{macro}{\MT@ls@adjust@relax}
+%\begin{macro}{\MT@ls@set@ls}
+% Set current letterspacing amount and outer kerning. This has to be done inside
+% the same group as the letterspacing command.
+% \begin{macrocode}
+\def\MT@ls@adjust@empty{\let\MT@ls@adjust\@empty}
+\def\MT@ls@adjust@relax{\let\MT@ls@adjust\relax}
+\def\MT@ls@set@ls#1{%
+ \MT@ifempty{#1}%
+ {\let\MT@letterspace@\@undefined}%
+ {\KV@@sp@def\MT@letterspace@{#1}%
+ \MT@ls@too@large\MT@letterspace@}%
+ \MT@ls@adjust@
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@ls@too@large}
+% Test whether letterspacing amount is too large.
+% \begin{macrocode}
+\def\MT@ls@too@large#1{%
+ \ifnum#1>\MT@tr@max
+ \MT@warning{Maximum for option `letterspace' is \number\MT@tr@max}%
+ \let#1\MT@tr@max
+ \else
+ \ifnum#1<\MT@tr@min
+ \MT@warning{Minimum for option `letterspace' is \number\MT@tr@min}%
+ \let#1\MT@tr@min
+ \fi
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@outer@kern}
+%\begin{macro}{\MT@tr@set@okern}
+%\changes{v2.3d}{2008/12/19}{allow empty value for \texttt{outer kerning}}
+% This dimen is used for the starred version of \cs{textls}, for \cs{lslig}
+% and for adjusted outer kerning.
+% \begin{macrocode}
+\newdimen\MT@outer@kern
+%<*package>
+\def\MT@tr@set@okern#1,#2,{%
+ \let\MT@temp\@empty
+ \MT@ifempty{#1}{\MT@tr@set@okern@{*}}{\MT@tr@set@okern@{#1}}%
+ \MT@ifempty{#2}{\MT@tr@set@okern@{*}}{\MT@tr@set@okern@{#2}}%
+ \MT@glet@nc{MT@outer@kern\expandafter\string\font@name}\MT@temp
+%<debug>\MT@dinfo@nl2{... outer kerning: (#1,#2)
+%<debug> = \@nameuse{MT@outer@kern\expandafter\string\font@name}}%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@tr@set@okern@}
+% \begin{macrocode}
+\def\MT@tr@set@okern@#1{%
+ \MT@test@ast#1*\@nil{%
+ \MT@ifdefined@c@TF\MT@tr@unit@
+ {\edef\@tempb{#1}\MT@scale@to@em}
+ {\@tempcntb=#1\relax}%
+ \@tempdima=\dimexpr \@tempcntb sp * \MT@dimen@six/1000\relax
+ }{%
+ \MT@ifempty\@tempa{\let\@tempa\@m}\relax
+ \@tempdima=\dimexpr \numexpr\@tempa*\MT@letterspace@/1000\relax sp
+ * \fontdimen6\MT@lsfont/2000\relax
+ }%
+ \advance\@tempdima -\dimexpr \MT@letterspace@ sp
+ * \fontdimen6\MT@lsfont/2000\relax
+ \edef\MT@temp{\MT@temp{\the\@tempdima}}%
+}
+%</package>
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@ls@outer@k}
+% Adjust outer kerning.
+% \begin{macrocode}
+\def\MT@ls@outer@k{\ifhmode\kern\MT@outer@kern\relax\fi}
+%<*package>
+% \end{macrocode}
+%\end{macro}
+%
+%\subsubsection{Disabling ligatures}
+%
+%\begin{macro}{\MT@noligatures}
+% The possibility to disable ligatures is a new features of \pdftex\ 1.30.
+%\changes{v2.3}{2007/10/23}{fix: set evaluation didn't work (bug introduced in 2.2)}
+% \begin{macrocode}
+\MT@requires@pdftex5{
+\def\MT@noligatures{%
+ \MT@dotrue
+ \let\@tempa\MT@nl@setname
+ \MT@map@clist@n{font,encoding,family,series,shape,size}{%
+ \MT@ifdefined@n@TF{MT@checklist@##1}%
+ {\csname MT@checklist@##1\endcsname}%
+ {\MT@checklist@{##1}}%
+ {nl}%
+ }%
+ \ifMT@do
+ \MT@noligatures@\MT@font\MT@nl@ligatures
+ \fi
+}
+% \end{macrocode}
+%\begin{macro}{\MT@noligatures@}
+% This is also used by \cs{MT@set@tr@codes}.
+% \begin{macrocode}
+\def\MT@noligatures@#1#2{%
+ \MT@ifdefined@c@TF#2{%
+% \end{macrocode}
+% Early MiK\TeX\ versions (before 2.5.2579) didn't know \cmd\tagcode.
+% \begin{macrocode}
+ \MT@ifdefined@c@TF\tagcode{%
+% \end{macrocode}
+% No `|inputenc|' key.
+%\changes{v2.3b}{2008/03/27}{fix: warning messages for unknown slots}
+% \begin{macrocode}
+ \let\MT@warn@maybe@inputenc\@empty
+ \def\MT@curr@list@name{\@backslashchar DisableLigatures}%
+ \MT@map@clist@c#2{%
+ \KV@@sp@def\@tempa{##1}\MT@get@slot
+ \ifnum\MT@char>\m@ne \tagcode#1\MT@char=\m@ne \fi}%
+ \MT@vinfo{... Disabling ligatures for characters: #2}%
+ }{%
+ \pdfnoligatures#1%
+ \MT@warning{Cannot disable selected ligatures (pdftex doesn't\MessageBreak
+ know \@backslashchar tagcode). Disabling all ligatures of\MessageBreak
+ the font instead}%
+ }%
+ }{%
+ \pdfnoligatures#1%
+ \MT@vinfo{... Disabling ligatures}%
+ }%
+}
+}\relax
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%
+%\subsubsection{Loading the configuration}
+%
+%\begin{macro}{\MT@load@list}
+% Recurse through the lists to be loaded.
+%\changes{v1.3}{2004/10/27}{check whether list exists}
+%\todo{load more than one list}
+% \begin{macrocode}
+\def\MT@load@list#1{%
+ \edef\@tempa{#1}%
+ \MT@let@cn\@tempb{MT@\MT@feat @c@\@tempa @load}%
+ \MT@ifstreq\@tempa\@tempb{%
+ \MT@error{\@nameuse{MT@abbr@\MT@feat} list `\@tempa' cannot load itself}{}%
+ }{%
+ \ifx\@tempb\relax \else
+ \MT@ifdefined@n@TF{MT@\MT@feat @c@\@tempb}{%
+ \MT@vinfo{... : First loading \@nameuse{MT@abbr@\MT@feat} list `\@tempb'}%
+ \begingroup
+ \MT@load@list\@tempb
+ \endgroup
+ \edef\MT@curr@list@name{\@nameuse{MT@abbr@\MT@feat} list
+ \noexpand\MessageBreak`\@tempb'}%
+ \MT@let@cn\@tempc{MT@\MT@feat @c@\@tempb}%
+ \expandafter\MT@set@codes\@tempc,\relax,%
+ }{%
+ \MT@error{\@nameuse{MT@abbr@\MT@feat} list `\@tempb' undefined.\MessageBreak
+ Cannot load it from list `\@tempa'}{}%
+ }%
+ \fi
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\changes{v1.1}{2004/09/13}{configuration file names in lowercase
+% (suggested by \contributor Harald Harders <h.harders\at tu-bs.de>)}
+% ^^A private mail, 2004/09/13
+%\begin{macro}{\MT@find@file}
+%\changes{v1.1}{2004/09/14}{fix: also check whether the file for the base
+% font family has already been loaded}
+% Micro-typographic settings may be written into a file |mt-|\meta{font family}|.cfg|.
+%\changes{v1.8}{2005/04/16}{no longer wrap names in commands}
+%\begin{macro}{\MT@file@list}
+% We must also record whether we've already loaded the file.
+% \begin{macrocode}
+\let\MT@file@list\@empty
+\def\MT@find@file#1{%
+% \end{macrocode}
+%\end{macro}
+% Check for existence of the file only once.
+% \begin{macrocode}
+ \MT@in@clist{#1}\MT@file@list
+ \ifMT@inlist@ \else
+% \end{macrocode}
+% Don't forget that because reading the files takes place inside a group, all
+% commands that may be used there have to be defined globally.
+% \begin{macrocode}
+ \MT@begin@catcodes
+ \let\MT@begin@catcodes\relax
+ \let\MT@end@catcodes\relax
+ \InputIfFileExists{mt-#1.cfg}{%
+ \edef\MT@curr@file{mt-#1.cfg}%
+ \MT@vinfo{... Loading configuration file \MT@curr@file}%
+ \MT@xadd\MT@file@list{#1,}%
+ }{%
+ \MT@get@basefamily#1\@empty\@empty\@empty\@nil
+ \MT@exp@one@n\MT@in@clist\@tempa\MT@file@list
+ \ifMT@inlist@
+ \MT@xadd\MT@file@list{#1,}%
+ \else
+ \InputIfFileExists{mt-\@tempa.cfg}{%
+ \edef\MT@curr@file{mt-\@tempa.cfg}%
+ \MT@vinfo{... Loading configuration file \MT@curr@file}%
+ \MT@xadd\MT@file@list{\@tempa,#1,}%
+ }{%
+ \MT@vinfo{... No configuration file mt-#1.cfg}%
+ \MT@xadd\MT@file@list{#1,}%
+ }%
+ \fi
+ }%
+ \endgroup
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@cfg@catcodes}
+% We have to make sure that all characters have the correct category code.
+% Especially, new lines and spaces should be ignored, since files might be
+% loaded in the middle of the document. This is basically \cmd\nfss@catcodes\
+% (from the \LaTeX\ kernel). I've added:
+%\changes{v1.4a}{2004/11/16}{fix: reset some more catcodes when reading files
+% (reported by \contributor Michael Hoppe <mh\at michael-hoppe.de>)}
+% ^^A MID: <p06002000bdbff1f93eb7@[192.168.0.34]>
+% |&| (in |tabular|s), |!|, |?|, |;|,
+%\changes{v1.7}{2005/02/06}{reset catcode of `\texttt{:}'
+% (compatibility with \pkg{french}* packages)}
+% |:| (|french|), |,|, |$|, |_|, |~|,
+%\changes{v1.5}{2004/11/28}{reset catcode of `\texttt{\quotechar=}'
+% (compatibility with Turkish \pkg{babel})}
+% and |=| (Turkish \pkg{babel}).
+%
+%\changes{v1.8}{2005/03/29}{reset catcodes of the remaining <ASCII> characters}
+% OK, now all printable characters up to 127 are `other'. We hope that letters
+% are always letters and numbers other. (\pkg{listings} makes them active, see
+% section~\ref{sub:compatibility}.)
+%
+% We leave |^| at catcode 7, so that stuff like `|^^ff|' remains possible.
+% \begin{macrocode}
+\def\MT@cfg@catcodes{%
+ \makeatletter
+ \catcode`\^7%
+ \catcode`\ 9%
+ \catcode`\^^I9%
+ \catcode`\^^M9%
+ \catcode`\\\z@
+ \catcode`\{\@ne
+ \catcode`\}\tw@
+ \catcode`\#6%
+ \catcode`\%14%
+ \MT@map@tlist@n
+ {\!\"\$\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\[\]\_\`\|\~}%
+ \@makeother
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@begin@catcodes}
+% This will be used before reading the files as well as in the configuration
+% commands \cs{Set...}, and \cs{DeclareCharacterInheritance}, so that the
+% catcodes are also harmless when these commands are used outside the
+% configuration files.
+%\changes{v1.7}{2005/02/17}{also use inside configuration commands}
+%\changes{v2.3}{2007/11/20}{fix: don't disable \cmd\KV@@sp@def}
+% \begin{macrocode}
+\def\MT@begin@catcodes{%
+ \begingroup
+ \MT@cfg@catcodes
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@end@catcodes}
+% End group if outside configuration file (otherwise relax).
+% \begin{macrocode}
+\let\MT@end@catcodes\endgroup
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@get@basefamily}
+% The family name might have a suffix
+%\changes{v1.1}{2004/09/14}{only remove suffix if it is `\texttt{x}' or `\texttt{j}'}
+% \eg, for expert set (|x|), old style numbers (|j|)
+%\changes{v1.2}{2004/09/26}{also remove `w' (swash capitals)}
+% swash capitals (|w|) etc. We mustn't simply remove the last letter, as this
+% would make for instance |cms| out of |cmss| \textit{and} |cmsy| (OK, |cmex|
+% will still become |cme|~\dots).
+%\changes{v1.4b}{2004/11/25}{fix: failed for font names of the form \texttt{abczz}
+% (reported by \contributor Georg Verweyen <Georg.Verweyen\at WEB.DE>)}
+% ^^A MID: <41A64DC7.7040404@web.de>
+%\changes{v2.2}{2007/02/04}{redone, working on font names and suffixes of arbitrary length}
+%
+% We only work on the font name if it is longer than three characters.
+% \begin{macrocode}
+\def\MT@get@basefamily#1#2#3#4\@nil{%
+ \ifx\@empty#4%
+ \def\@tempa{#1#2#3}%
+ \else
+ \let\@tempa\@empty
+ \edef\@tempb{#1#2#3#4}%
+ \expandafter\MT@get@basefamily@\@tempb\@nil
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@get@basefamily@}
+% This will only remove one suffix (the longest match), so that
+% \emph{combinations} of suffixes would have be to added manually (\eg,
+% |\DeclareMicrotypeVariants*{aw}|). But otherwise, something like `|padx|'
+% would be truncated to `|p|'.
+% \begin{macrocode}
+\def\MT@get@basefamily@#1#2\@nil{%
+ \edef\@tempa{\@tempa#1}%
+ \ifx\\#2\\\expandafter\@gobble\else\expandafter\@firstofone\fi
+ {\MT@in@tlist{#2}\MT@variants
+ \ifMT@inlist@\else\MT@get@basefamily@#2\@nil\fi}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@listname}
+%\begin{macro}{\MT@get@listname}
+%\begin{macro}{\MT@get@listname@}
+% Try all combinations of font family, series, shape and size to get a list for
+% the current font.
+%\changes{v1.1}{2004/09/15}{don't check for empty attributes list}
+%\changes{v1.2}{2004/09/30}{alternatively check for alias font name}
+%\changes{v1.7}{2005/03/15}{use \cmd\@tfor\
+% (\contributor Andreas B\"uhmann <andreas.buehmann\at web.de>'s idea)}
+% ^^A private mail, 2005/03/12
+%\changes{v1.8}{2005/04/16}{made recursive}
+% \begin{macrocode}
+\def\MT@get@listname#1{%
+%<debug>\MT@dinfo@nl{1}{trying to find \@nameuse{MT@abbr@#1} list for font `\MT@@font'}%
+ \let\MT@listname\@undefined
+ \def\@tempb{#1}%
+ \MT@map@tlist@c\MT@try@order\MT@get@listname@
+}
+\def\MT@get@listname@#1{%
+ \expandafter\MT@next@listname#1%
+ \ifx\MT@listname\@undefined \else
+ \expandafter\MT@tlist@break
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@try@order}
+%\changes{v1.7}{2005/03/11}{fix: also check for //\meta{series}/\meta{shape}//
+% (reported by \contributor Andreas B\"uhmann <andreas.buehmann\at web.de>)}
+% ^^A private mail, 2005/03/10
+%\changes{v1.7}{2005/03/11}{always check for size, too
+% (suggested by \contributor Andreas B\"uhmann <andreas.buehmann\at web.de>)}
+% ^^A private mail, 2005/03/10
+%
+%\begin{table}\footnotesize
+%\caption{Order for matching font attributes}\label{tab:match-order}
+%\catcode`\!=13 \let!\match
+%\setlength\fboxsep{4pt}
+%\leavevmode\kern-\dimexpr\fboxsep+\fboxrule\relax
+%\fcolorbox{theframe}{white}{^^A
+%\begin{minipage}{\textwidth}
+%\begin{tabular}{@{}L{38pt}*{16}{p{19.5pt}<{\centering}@{}}}
+% & 1.& 2.& 3.& 4.& 5.& 6.& 7.& 8.& 9.&10.&11.&12.&13.&14.&15.&16.\\
+%\cmidrule(r){2-2} \cmidrule(r){3-3} \cmidrule(r){4-4} \cmidrule(r){5-5}
+%\cmidrule(r){6-6} \cmidrule(r){7-7} \cmidrule(r){8-8} \cmidrule(r){9-9}
+%\cmidrule(r){10-10}\cmidrule(r){11-11}\cmidrule(r){12-12}\cmidrule(r){13-13}
+%\cmidrule(r){14-14}\cmidrule(r){15-15}\cmidrule(r){16-16}\cmidrule {17-17}
+% Encoding & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! \\
+% Family & ! & ! & ! & ! & ! & ! & ! & ! & - & - & - & - & - & - & - & - \\
+% Series & ! & ! & ! & ! & - & - & - & - & ! & ! & ! & ! & - & - & - & - \\
+% Shape & ! & ! & - & - & ! & ! & - & - & ! & ! & - & - & ! & ! & - & - \\
+% Size & ! & - & ! & - & ! & - & ! & - & ! & - & ! & - & ! & - & ! & - \\
+%\end{tabular}
+%\end{minipage}^^A
+%}\kern-\dimexpr\fboxsep+\fboxrule\relax ^^A end \fcolorbox
+%\end{table}
+%
+% Beginning with version 1.7, we always check for the font size. Since the
+% matching order has become more logical now, it can be described in words, so
+% that we don't need table~\ref{tab:match-order} in the documentation part any
+% longer and can cast it off here.
+% \begin{macrocode}
+\def\MT@try@order{%
+ {1111}{1110}{1101}{1100}{1011}{1010}{1001}{1000}%
+ {0111}{0110}{0101}{0100}{0011}{0010}{0001}{0000}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@next@listname}
+% The current context is added to the font attributes. That is, the context must
+% match.
+% \begin{macrocode}
+\def\MT@next@listname#1#2#3#4{%
+ \edef\@tempa{\MT@encoding
+ /\ifnum#1=\@ne \MT@family\fi
+ /\ifnum#2=\@ne \MT@series\fi
+ /\ifnum#3=\@ne \MT@shape\fi
+ /\ifnum#4=\@ne *\fi
+ \MT@context}%
+%<debug>\MT@dinfo@nl{1}{trying \@tempa}%
+ \MT@ifdefined@n@TF{MT@\@tempb @\@tempa}{%
+ \MT@next@listname@#4%
+ }{%
+% \end{macrocode}
+% Also try with an alias family.
+% \begin{macrocode}
+ \ifnum#1=\@ne
+ \ifx\MT@familyalias\@empty \else
+ \edef\@tempa{\MT@encoding
+ /\MT@familyalias
+ /\ifnum#2=\@ne \MT@series\fi
+ /\ifnum#3=\@ne \MT@shape\fi
+ /\ifnum#4=\@ne *\fi
+ \MT@context}%
+%<debug>\MT@dinfo@nl{1}{(alias) \@tempa}%
+ \MT@ifdefined@n@T{MT@\@tempb @\@tempa}{%
+ \MT@next@listname@#4%
+ }%
+ \fi
+ \fi
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@next@listname@}
+% If size is to be evaluated, do that, otherwise use the current list.
+% \begin{macrocode}
+\def\MT@next@listname@#1{%
+ \ifnum#1=\@ne
+ \MT@exp@cs\MT@in@rlist{MT@\@tempb @\@tempa @sizes}%
+ \ifMT@inlist@
+ \let\MT@listname\MT@size@name
+ \fi
+ \else
+ \MT@let@cn\MT@listname{MT@\@tempb @\@tempa}%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@if@list@exists}
+%\changes{v1.7}{2005/02/06}{don't define \cs{MT@\#1@c@name} \cmd\global ly,
+% here and elsewhere}
+%\begin{macro}{\MT@context}
+% \begin{macrocode}
+\def\MT@if@list@exists{%
+ \MT@let@cn\MT@context{MT@\MT@feat @context}%
+ \MT@ifstreq{@}\MT@context{\let\MT@context\@empty}\relax
+ \MT@get@listname{\MT@feat @c}%
+ \MT@ifdefined@c@TF\MT@listname{%
+ \MT@edef@n{MT@\MT@feat @c@name}{\MT@listname}%
+ \ifMT@nonselected
+ \MT@vinfo{... Applying non-selected expansion (list `\MT@listname')}%
+ \else
+ \MT@vinfo{... Loading \@nameuse{MT@abbr@\MT@feat} list `\MT@listname'}%
+ \fi
+ \@firstoftwo
+ }{%
+% \end{macrocode}
+% Since the name cannot be \cmd\@empty, this is a sound proof that no matching
+% list exists.
+% \begin{macrocode}
+ \MT@let@nc{MT@\MT@feat @c@name}\@empty
+% \end{macrocode}
+% Don't warn if \opt{selected}|=false|.
+% \begin{macrocode}
+ \ifMT@nonselected
+ \MT@vinfo{... Applying non-selected expansion (no list)}%
+ \else
+% \end{macrocode}
+% Tracking doesn't require a list, either.
+% \begin{macrocode}
+ \MT@ifstreq\MT@feat{tr}\relax{%
+ \MT@warning{I cannot find a \@nameuse{MT@abbr@\MT@feat} list
+ for font\MessageBreak`\MT@@font'%
+ \ifx\MT@context\@empty\else\space(context: `\MT@context')\fi.
+ Switching off\MessageBreak\@nameuse{MT@abbr@\MT@feat} for this font}%
+ }%
+ \fi
+ \@secondoftwo
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@get@inh@list}
+%\changes{v1.6}{2004/12/18}{correct message if \opt{selected} is false}
+%\begin{macro}{\MT@context}
+% The inheritance lists are global (no context).
+% \begin{macrocode}
+\def\MT@get@inh@list{%
+ \let\MT@context\@empty
+% \end{macrocode}
+%\end{macro}
+% \begin{macrocode}
+ \MT@get@listname{\MT@feat @inh}%
+ \MT@ifdefined@c@TF\MT@listname{%
+ \MT@edef@n{MT@\MT@feat @inh@name}{\MT@listname}%
+%<debug>\MT@dinfo@nl{1}{... Using \@nameuse{MT@abbr@\MT@feat} inheritance list
+%<debug> `\MT@listname'}%
+ \MT@let@cn\@tempc{MT@\MT@feat @inh@\MT@listname}%
+% \end{macrocode}
+% If the list is \cmd\@empty, it has already been parsed.
+%\changes{v1.2}{2004/09/26}{fix: set inheritance list \cmd\global ly to \cmd\@empty}
+% \begin{macrocode}
+ \ifx\@tempc\@empty \else
+%<debug>\MT@dinfo@nl{1}{parsing inheritance list ...}%
+% \end{macrocode}
+% The group is only required in case an input encoding is given.
+%\changes{v1.9f}{2006/08/03}{fix: input encoding must be set after the inheritance
+% list has been parsed}
+% \begin{macrocode}
+ \begingroup
+ \edef\MT@curr@list@name{inheritance list\noexpand\MessageBreak`\MT@listname'}%
+ \MT@set@inputenc{inh}%
+ \expandafter\MT@inh@do\@tempc,\relax,%
+ \MT@glet@nc{MT@\MT@feat @inh@\MT@listname}\@empty
+ \endgroup
+ \fi
+ }{%
+ \MT@let@nc{MT@\MT@feat @inh@name}\@undefined
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% \subsubsection{Translating characters into slots}
+%
+%\changes{v1.4}{2004/11/04}{don't use scratch registers in global definitions}
+% Get the slot number of the character in the current encoding.
+%
+%\begin{macro}{\MT@get@slot}
+%^^A\changes{v1.2}{2004/09/26}{fix: group must also include \cs{MT@get@composite}}
+%\changes{v1.4b}{2004/11/22}{don't define \cs{MT@char} globally (save stack problem)}
+%\changes{v1.6a}{2005/01/30}{completely redone, hopefully more robust
+% (compatible with \pkg{frenchpro}; problem reported by
+% \contributor Bernard Gaulle <gaulle\at idris.fr>)}
+% ^^A private mail, 2005/01/28
+%\changes{v1.7}{2005/03/21}{remove backslash hack}
+% There are lots of possibilities how a character may be specified in the
+% configuration files, which makes translating them into slot numbers quite
+% expensive. Also, we want to have this as robust as possible, so that the user
+% does not have to solve a sphinx's riddle if anything goes wrong.
+%
+%\begin{macro}{\MT@char}
+%\begin{macro}{\MT@char@}
+% The character is in \cs{@tempa}, we want its slot number in \cs{MT@char}.
+% \begin{macrocode}
+\def\MT@get@slot{%
+ \escapechar`\\
+ \let\MT@char@\m@ne
+ \MT@noresttrue
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+% Save unexpanded string in case we need to issue a warning message.
+% \begin{macrocode}
+ \MT@toks=\expandafter{\@tempa}%
+% \end{macrocode}
+% Now, let's walk through (hopefully) all possible cases.
+%\begin{itemize}
+% \item It's a letter, a character or a number.
+% \begin{macrocode}
+ \expandafter\MT@is@letter\@tempa\relax\relax
+ \ifnum\MT@char@ < \z@
+% \end{macrocode}
+%\changes{v1.8}{2005/03/30}{fix: expand active characters}
+% \item It might be an active character, \ie, an 8-bit character defined by
+% \pkg{inputenc}. If so, we will expand it here to its <LICR> form.
+% \begin{macrocode}
+ \MT@exp@two@c\MT@is@active\string\@tempa\@nil
+% \end{macrocode}
+% \item OK, so it must be a macro. We do not allow random commands but only
+% those defined in \LaTeX's idiosyncratic font encoding scheme:
+%
+% If |\|\meta{encoding}|\|\meta{command} (that's \emph{one} command) is
+% defined, we try to extract the slot number.
+%\changes{v1.7}{2005/02/27}{test whether \cs{}\meta{encoding}\cs{}\meta{...} is defined}
+%\changes{v1.8}{2005/04/04}{test whether \cs{}\meta{encoding}\cs{}\meta{...} is defined
+% made more robust}
+%
+% We must be cautious not to stumble over accented characters consisting
+% of two commands, like \cmd\`\cmd\i\ or \cmd\U\cmd\CYRI, hence,
+% \cmd\string\ wouldn't be safe enough.
+% \begin{macrocode}
+ \MT@ifdefined@n@TF{\MT@encoding\MT@detokenize@c\@tempa}%
+ \MT@is@symbol
+% \end{macrocode}
+% \item Now, we'll catch the rest, which hopefully is an accented character
+% (\eg~|\"a|).
+% \begin{macrocode}
+ {\expandafter\MT@is@composite\@tempa\relax\relax}%
+ \ifnum\MT@char@ < \z@
+% \end{macrocode}
+% \item It could also be a \cmd\chardef ed command (\eg, the percent character).
+% This seems the least likely case, so it's last.
+%\changes{v1.7}{2005/03/20}{test for \cmd\chardef ed commands}
+% \begin{macrocode}
+ \expandafter\MT@exp@two@c\expandafter\MT@is@char\expandafter
+ \meaning\expandafter\@tempa\MT@charstring\relax\relax\relax
+ \fi
+ \fi
+% \end{macrocode}
+%\end{itemize}
+% \begin{macrocode}
+ \let\MT@char\MT@char@
+ \ifnum\MT@char < \z@
+ \MT@warn@unknown
+ \else
+% \end{macrocode}
+% If the user has specified something like `|fi|', or wanted to define a number
+% but forgot to use three digits, we'll have something left of the string. In
+% this case, we issue a warning and forget the complete string.
+% \begin{macrocode}
+ \ifMT@norest \else
+ \MT@warn@rest
+ \let\MT@char\m@ne
+ \fi
+ \fi
+ \escapechar\m@ne
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ifMT@norest}
+% Test whether all of the string has been used up.
+% \begin{macrocode}
+\newif\ifMT@norest
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@is@letter}
+% Input is a letter, a character or a number.
+%\changes{v1.8}{2005/04/04}{warning for non-<ASCII> characters}
+%\changes{v1.9}{2005/10/22}{using \cmd\catcode\ should be more efficient than
+% inspecting the \cmd\meaning}
+% \begin{macrocode}
+\def\MT@is@letter#1#2\relax{%
+ \ifcat a\noexpand#1\relax
+ \edef\MT@char@{\number`#1}%
+ \ifx\\#2\\%
+%<debug>\MT@dinfo@nl{3}{> `\the\MT@toks' is a letter (\MT@char@)}%
+ \else
+ \MT@norestfalse
+ \fi
+ \else
+ \ifcat !\noexpand#1\relax
+ \edef\MT@char@{\number`#1}%
+%<debug>\MT@dinfo@nl{3}{> `\the\MT@toks' is a character (\MT@char@)}%
+ \ifx\\#2\\%
+ \ifnum\MT@char@ > 127 \MT@warn@ascii \fi
+ \else
+ \MT@norestfalse
+ \expandafter\MT@is@number#1#2\relax\relax
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@is@number}
+% Numbers may be specified as a three-digit decimal number (|029|),
+%\changes{v1.1}{2004/09/13}{numbers may also be specified in hexadecimal or octal
+% (suggested by \contributor Harald Harders <h.harders\at tu-bs.de>)}
+% ^^A private mail, 2004/09/13
+% as a hexadecimal number (prefixed with~|"|: |"1D|) or as a octal number
+% (prefixed with~|'|: |'35|). They must consist of at least three characters
+% (including the prefix), that is, |"F| is not permitted.
+% \begin{macrocode}
+\def\MT@is@number#1#2#3\relax{%
+ \ifx\relax#3\relax \else
+ \ifx\relax#2\relax \else
+ \MT@noresttrue
+ \if#1"\relax
+ \def\x{\uppercase{\edef\MT@char@{\number#1#2#3}}}\x
+%<debug>\MT@dinfo@nl{3}{> ... a hexadecimal number: \MT@char@}%
+ \else
+ \if#1'\relax
+ \def\MT@char@{\number#1#2#3}%
+%<debug>\MT@dinfo@nl{3}{> ... an octal number: \MT@char@}%
+ \else
+ \MT@ifint{#1#2#3}{%
+ \def\MT@char@{\number#1#2#3}%
+%<debug>\MT@dinfo@nl{3}{> ... a decimal number: \MT@char@}%
+ }\MT@norestfalse
+ \fi
+ \fi
+ \ifnum\MT@char@ > \@cclv
+ \MT@warn@number@too@large{\noexpand#1\noexpand#2\noexpand#3}%
+ \let\MT@char@\m@ne
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@is@active}
+%\changes{v1.8}{2005/03/30}{new macro: translate \pkg{inputenc}-defined characters}
+% Expand an active character. (This was completely broken in v1.7, and only
+% worked by chance before.)
+%\changes{v1.9}{2005/09/08}{redone: use \cmd\set@display@protect}
+% We \cmd\set@display@protect\ to translate, \eg, \expandafter|\"A| into |\"A|,
+% that is to whatever it is defined in the \pkg{inputenc} encoding file.
+%
+%\iffalse
+% Previous solution, slightly more robust (but doesn't understand Unicode):
+%\begin{verbatim}
+%\def\MT@is@active#1#2\@nil{%
+% \ifx\\#2\\%
+% \ifnum\catcode`#1 = \active
+% \toks@=\expandafter\expandafter\expandafter{\@tempa}%
+% \expandafter\MT@active@inpenc\the\toks@\relax\relax
+% \edef\@tempa{\the\toks@}%
+% \edef\x{\MT@toks={\the\MT@toks\space(= \the\toks@)}}\x
+% \fi
+% \fi
+%}
+%\def\MT@active@inpenc#1#2#3\relax{%
+% \ifx#1\IeC
+% \def\IeC##1{\toks@={##1}}%
+% \the\toks@
+% \expandafter\MT@active@inpenc\the\toks@\relax\relax
+% \fi
+% \ifx#1\@tabacckludge
+% \def\@tabacckludge##1##2{%
+% \toks@=\expandafter{\csname\string##1\endcsname#3}}%
+% \the\toks@
+% \fi
+% \ifx#1\@inpenc@undefined@
+% \def\@inpenc@undefined@##1{%
+% \edef\x{\toks@={%
+% undefined^^J(\MT@MT)\@spaces\@spaces\@spaces\@spaces
+% in input encoding ``##1''}}\x}%
+% \the\toks@
+% \fi
+%}
+%\end{verbatim}
+%\fi
+%
+% Unfortunately, the (older) \pkg{inputenc} definitions prefer the
+% protected\slash generic variants (\eg, \cmd\copyright\ instead of
+% \cmd\textcopyright), which our parser won't be able to understand.
+% (I'm fed up now, so you have to complain if you really, really want to be able
+% to write `\expandafter|\textcopyright|' instead of \cmd\textcopyright, thus
+% rendering your configuration files unportable.)
+%
+% Unicode characters (\pkg{inputenc}/|utf8|,|utf8x|) are also supported.
+%\changes{v1.9d}{2006/03/06}{support for Unicode (\pkg{inputenc}\slash\texttt{utf8})}
+%\changes{v2.3}{2007/11/11}{support for extended Unicode (\pkg{inputenc}\slash\texttt{utf8x} resp. \pkg{ucs}) -- experimental}
+%
+%\iffalse ^^A obsolete because of `inputenc' key
+% We presume that only one input encoding is being used throughout the entire
+% document. We could of course save the input encoding together with the list,
+% but this would entail a couple of problems: (1)~the overhead of resetting the
+% input encoding every time, (2)~the problem (or rather, impossibility) to
+% decide which input encoding should be chosen -- the one active when the list
+% was declared or the one active when the font is selected, and (3)~the
+% improbability of multiple input encodings being used at all.
+%\fi
+% \begin{macrocode}
+\def\MT@is@active#1#2\@nil{%
+ \ifnum\catcode`#1 = \active
+ \begingroup
+ \set@display@protect
+ \let\IeC\@firstofone
+ \let\@inpenc@undefined@\MT@undefined@char
+% \end{macrocode}
+% We refrain from checking whether there is a sufficient number of octets.
+% \begin{macrocode}
+ \def\UTFviii@defined##1{\ifx ##1\relax
+ \MT@undefined@char{utf8}\else\expandafter ##1\fi}%
+% \end{macrocode}
+% For \pkg{ucs} (utf8x). Let's call it experimental~\dots
+% \begin{macrocode}
+ \MT@ifdefined@c@T\PrerenderUnicode
+ {\PrerenderUnicode{\@tempa}\let\unicode@charfilter\@firstofone}%
+ \edef\x{\endgroup
+ \def\noexpand\@tempa{\@tempa}%
+% \end{macrocode}
+% Append what we think the translation is to the token register we use for the
+% log.
+% \begin{macrocode}
+ \MT@toks={\the\MT@toks\space(= \@tempa)}%
+ }%
+ \x
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@undefined@char}
+% For characters not defined in the current input encoding.
+% \begin{macrocode}
+\def\MT@undefined@char#1{undefined in input encoding ``#1''}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@is@symbol}
+% The symbol commands might expand to funny stuff, depending on context.
+% Instead of simply expanding |\|\meta{command}, we construct the command
+% |\|\meta{encoding}|\|\meta{command} and see whether its meaning is
+% \cmd\char|"|\meta{hex number}, which is the case for everything that has
+% been defined with \cs{DeclareTextSymbol} in the encoding definition files.
+%\changes{v2.0}{2006/09/15}{made even more robust}
+% \begin{macrocode}
+\def\MT@is@symbol{%
+ \expandafter\def\expandafter\MT@char\expandafter
+ {\csname\MT@encoding\MT@detokenize@c\@tempa\endcsname}%
+ \expandafter\MT@exp@two@c\expandafter\MT@is@char\expandafter
+ \meaning\expandafter\MT@char\MT@charstring\relax\relax\relax
+ \ifnum\MT@char@ < \z@
+% \end{macrocode}
+%\changes{v2.2}{2007/03/07}{expand once more (for \pkg{frenchpro})}
+% \dots~or, if it hasn't been defined by \cs{DeclareTextSymbol}, a letter
+% (\eg, \cmd\i, when using \pkg{frenchpro}). ^^A as noted by Bernard Gaulle
+% ^^A private mail, 2005/01/28
+% \begin{macrocode}
+ \expandafter\expandafter\expandafter\MT@is@letter\MT@char\relax\relax
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@is@char}
+%\begin{macro}{\MT@charstring}
+% A helper macro that inspects the \cmd\meaning\ of its argument.
+% \begin{macrocode}
+\begingroup
+ \catcode`\/=\z@
+% \end{macrocode}
+%\SpecialEscapechar{\/}
+% \begin{macrocode}
+ /MT@map@tlist@n{/\CHAR}/@makeother
+ /lowercase{%
+ /def/x{/endgroup
+ /def/MT@charstring{\CHAR"}%
+ /def/MT@is@char##1\CHAR"##2##3##4/relax{%
+ /ifx/relax##1/relax
+ /if##3\/relax
+ /edef/MT@char@{/number"##2}%
+ /MT@ifstreq/MT@charstring{##3##4}/relax/MT@norestfalse
+ /else
+ /edef/MT@char@{/number"##2##3}%
+ /MT@ifstreq/MT@charstring{##4}/relax/MT@norestfalse
+ /fi
+%<debug> /MT@dinfo@nl{3}{> `/the/MT@toks' is a \char (/MT@char@)}%
+ /fi
+ }%
+ }%
+ }
+/x
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@is@composite}
+% Here, we are dealing with accented characters, specified as two tokens.
+%\changes{v1.7}{2005/03/10}{new macro: construct command for composite character;
+% no uncontrolled expansion}
+%\changes{v2.2}{2007/06/08}{more robust: expand exactly once}
+% \begin{macrocode}
+\def\MT@is@composite#1#2\relax{%
+ \ifx\\#2\\\else
+% \end{macrocode}
+% Again, we construct a control sequence, this time of the form:
+% |\\|\meta{encoding}\allowbreak|\|\meta{accent}|-|\meta{character}, \eg,
+% |\\T1\"-a|, which we then expand once to see if it is a letter (if it has
+% been defined by \cs{DeclareTextComposite}). This should be robust, finally,
+% especially, since we also \cmd\detokenize\ the input instead of only
+% \cmd\string ifying it. Thus, we will die gracefully even on wrong Unicode
+% input without |utf8|.
+% \begin{macrocode}
+ \expandafter\def\expandafter\MT@char\expandafter{\csname\expandafter
+ \string\csname\MT@encoding\endcsname
+ \MT@detokenize@n{#1}-\MT@detokenize@n{#2}\endcsname}%
+ \expandafter\expandafter\expandafter\MT@is@letter\MT@char\relax\relax
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+% [What about math? Well, for a moment the following looked like a solution, with
+% \cs{mt@is@mathchar} defined accordingly, analogous to \cs{MT@is@char} above,
+% to pick up the last two tokens (the \cmd\meaning\ of a \cmd\mathchardef'ed
+% command expands to its hexadecimal notation):
+%\begin{verbatim}
+%\def\MT@is@mathchar#1{%
+% \if\relax\noexpand#1% it's a macro
+% \let\x#1%
+% \else % it's a character
+% \mathchardef\x=\mathcode`#1\relax
+% \fi
+% \expandafter\MT@exp@two@c\expandafter\mt@is@mathchar\expandafter
+% \meaning\expandafter\x\mt@mathcharstring\relax\relax\relax
+%}
+%\end{verbatim}
+% However, the problem is that \cmd\mathcode s and \cmd\mathchardef s have
+% global scope. Therefore, if they are changed by a package that loads
+% different math fonts, there is no guarantee whatsoever that things will still
+% be correct (\eg, the minus in |cmsy| when the \pkg{euler} package is loaded).
+% So, no way to go, unfortunately.]
+%
+% Some warning messages, for performance reasons separated here.
+%\begin{macro}{\MT@curr@list@name}
+%\changes{v1.8}{2005/06/08}{new macro: current list type and name}
+%\changes{v1.9f}{2006/08/03}{fix: \cs{MessageBreak} must not be expanded}
+%\begin{macro}{\MT@set@listname}
+% The type and name of the current list, defined at various places.
+% \begin{macrocode}
+\def\MT@set@listname{%
+ \edef\MT@curr@list@name{\@nameuse{MT@abbr@\MT@feat} list\noexpand\MessageBreak
+ `\@nameuse{MT@\MT@feat @c@name}'}%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@warn@ascii}
+% For `other' characters \textgreater\ 127, we issue a warning (\pkg{inputenc}
+% probably hasn't been loaded), since correspondence with the slot numbers
+% would be purely coincidental.
+% \begin{macrocode}
+\def\MT@warn@ascii{%
+ \MT@warning@nl{Character `\the\MT@toks' (= \MT@char@)
+ is outside of ASCII range.\MessageBreak
+ You must load the `inputenc' package before using\MessageBreak
+ 8-bit characters in \MT@curr@list@name}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@warn@number@too@large}
+% Number too large.
+% \begin{macrocode}
+\def\MT@warn@number@too@large#1{%
+ \MT@warning@nl{%
+ Number #1 in encoding `\MT@encoding' too large!\MessageBreak
+ Ignoring it in \MT@curr@list@name}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@warn@rest}
+% Not all of the string has been parsed.
+% \begin{macrocode}
+\def\MT@warn@rest{%
+ \MT@warning@nl{%
+ Unknown slot number of character\MessageBreak`\the\MT@toks'%
+ \MT@warn@maybe@inputenc\MessageBreak
+ in font encoding `\MT@encoding'.\MessageBreak
+ Make sure it's a single character\MessageBreak
+ (or a number) in \MT@curr@list@name}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@warn@unknown}
+% No idea what went wrong.
+% \begin{macrocode}
+\def\MT@warn@unknown{%
+ \MT@warning@nl{%
+ Unknown slot number of character\MessageBreak`\the\MT@toks'%
+ \MT@warn@maybe@inputenc\MessageBreak
+ in font encoding `\MT@encoding' in \MT@curr@list@name}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@warn@maybe@inputenc}
+% In case an input encoding had been requested.
+% \begin{macrocode}
+\def\MT@warn@maybe@inputenc{%
+ \MT@ifdefined@n@T
+ {MT@\MT@feat @\MT@cat @\csname MT@\MT@feat @\MT@cat @name\endcsname @inputenc}%
+ { (input encoding `\@nameuse
+ {MT@\MT@feat @\MT@cat @\csname MT@\MT@feat @\MT@cat @name\endcsname @inputenc}')}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsubsection{Hook into \LaTeX's font selection}\label{sssec:impl.hook}
+%
+% We append \cs{MT@setupfont} to \cmd\pickup@font, which is called by \LaTeX\
+% every time a font is selected. We then check whether we've already seen this
+% font, and if not, set it up for micro-typography.
+% This ensures that we will catch all fonts, and that we will not set up fonts
+% more than once. The whole package really hangs on this command.
+%
+% In contrast to the \pkg{pdfcprot} package, it is not necessary to declare in
+% advance which fonts should benefit from micro-typographic treatment. Also,
+% only those fonts that are actually being used will be set up.
+%
+% For my reference:
+%\begin{itemize}
+% \item \cmd\pickup@font\ is called by \cmd\selectfont, \cmd\wrong@fontshape,
+% or \\ \cmd\getanddefine@fonts\ (for math).
+% \item \cmd\pickup@font\ calls \cmd\define@newfont.
+% \item \cmd\define@newfont\ may call (inside a group!)
+% \begin{itemize}
+% \item \cmd\wrong@fontshape, which in turn will call \cmd\pickup@font,
+% and thus \\ \cmd\define@newfont\ again, or
+% \item \cmd\extract@font.
+% \end{itemize}
+% \item \cmd\get@external@font\ is called by \cmd\extract@font, by itself,
+% and by the substitution macros.
+%\end{itemize}
+%
+%\iffalse
+%\changes{v1.2}{2004/10/02}{check for packages that might load fonts}
+%\changes{v1.4}{2004/11/04}{no need to check for packages that might load fonts anymore}
+%\fi
+%\changes{v1.4}{2004/11/04}{use \cmd\pickup@font\ instead of \cmd\define@newfont\
+% as the hook for \cs{MT@setupfont}}
+% Up to version 1.3 of this package, we were using \cmd\define@newfont\ as the
+% hook, which is only called for \emph{new} fonts, and therefore seemed the
+% natural choice. However, this meant that we had to take special care to catch
+% all fonts: we additionally had to set up the default font, the error font (if
+% it wasn't the default font), we had to check for some packages that might
+% have been loaded before \microtype\ and were loading fonts, \eg,
+% \pkg{jurabib}, \pkg{ledmac}, \pkg{pifont} (loaded by \pkg{hyperref}),
+% \pkg{tipa}, and probably many more. Furthermore, we had to include a hack for
+% the \pkg{IEEEtran} class which loads all fonts in the class file itself (to
+% fine tune inter-word spacing), and the \pkg{memoir} class, too. To cut this
+% short: it seemed to get out of hand, and I decided that it would be better to
+% use \cmd\pickup@font\ and decide for ourselves whether we've already seen
+% that font. I hope the overhead isn't too large.
+%\changes{v1.8}{2005/05/15}{if font substitution has occurred, set up the
+% substitute font, not the selected one}
+%\changes{v1.9}{2005/10/03}{allow context-specific font setup}
+%\begin{macro}{\MT@font@list}
+%\begin{macro}{\MT@font}
+% We use a comma separated list.
+% \begin{macrocode}
+\let\MT@font@list\@empty
+\let\MT@font\@empty
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+% All this is done at the beginning of the document.
+% It doesn't work for plain, of course, which doesn't have \cmd\pickup@font.
+% \begin{macrocode}
+%</package>
+%<plain>\MT@requires@latex2{
+\MT@addto@setup{%
+% \end{macrocode}
+%\changes{v2.1}{2007/01/15}{compatibility with \pkg{CJK}: also check for its definition}
+%\changes{v2.3b}{2008/05/26}{compatibility with \pkg{CJKutf8}: also check for its definition}
+%\begin{macro}{\MT@orig@pickupfont}
+% \microtype\ also works with \pkg{CJK} in the sense that nothing will break
+% when both packages are used at the same time. However, since \pkg{CJK} has
+% its own way of encoding, it is currently not possible to create
+% character-specific settings. That is, the only feature available with
+% \pkg{CJK} fonts is expansion.
+% (Tracking doesn't really work for other reasons.)
+%\todo{fix tracking with \pkg{CJK}, if worth the trouble}^^A
+% Like us, \pkg{CJK} redefines \cmd\pickup@font.
+% \begin{macrocode}
+ \@ifpackageloaded{CJK}{%
+ \@ifpackagelater{CJK}{2006/10/17}% 4.7.0
+ {\def\MT@orig@pickupfont{\CJK@ifundefined\CJK@plane}}%
+ {\def\MT@orig@pickupfont{\@ifundefined{CJK@plane}}}%
+ \g@addto@macro\MT@orig@pickupfont
+ {{\expandafter\ifx\font@name\relax\define@newfont\fi}}%
+% \end{macrocode}
+% \pkg{CJKutf8} redefines \cmd\pickup@font\ once more (recent versions, in
+% <PDF> mode, as determined by \pkg{ifpdf}, which \pkg{CJKutf8} loads).
+% \begin{macrocode}
+ \@ifpackageloaded{CJKutf8}%
+ {\@ifpackagelater{CJKutf8}{2008/05/22}% 4.8.0
+ {\ifpdf\expandafter\@secondoftwo\else\expandafter\@firstoftwo\fi}%
+ {\@firstoftwo}}%
+ {\@firstoftwo}%
+ {\g@addto@macro\MT@orig@pickupfont{%
+ {\expandafter\ifx\csname\curr@fontshape/\f@size/\CJK@plane\endcsname\relax
+ \define@newfont\else\xdef\font@name{%
+ \csname \curr@fontshape/\f@size/\CJK@plane\endcsname}\fi}}}%
+ {\g@addto@macro\MT@orig@pickupfont{%
+ {\expandafter\ifx\csname \curr@fontshape/\f@size/\CJK@plane\endcsname\relax
+ \define@newfont\def\CJK@temp{v}%
+ \ifx\CJK@temp\CJK@plane
+ \expandafter\ifx\csname CJK@cmap@\f@family\CJK@plane\endcsname\relax
+ \else\csname CJK@cmap@\f@family\CJK@plane\endcsname\fi
+ \else \CJK@addcmap\CJK@plane \fi
+ \else\xdef\font@name{%
+ \csname \curr@fontshape/\f@size/\CJK@plane\endcsname}\fi}}}%
+ }{%
+ \def\MT@orig@pickupfont{\expandafter\ifx\font@name\relax\define@newfont\fi}%
+ }%
+% \end{macrocode}
+% Check whether \cmd\pickup@font\ is defined as expected.
+% The warning issued by \cmd{\CheckCommand*} would be a bit too generic.
+% \begin{macrocode}
+ \ifx\pickup@font\MT@orig@pickupfont \else
+ \MT@warning@nl{%
+ Command \string\pickup@font\space is not defined as expected.%
+ \MessageBreak Patching it anyway. Some things may break%
+%<*package>
+ .\MessageBreak Double-check whether micro-typography is indeed%
+ \MessageBreak applied to the document.%
+ \MessageBreak (Hint: Turn on `verbose' mode)%
+%</package>
+ }%
+ \fi
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\pickup@font}
+% Then we append our stuff. Everything is done inside a group.
+%\changes{v2.2}{2007/04/15}{\letterspace: setup inside group}
+% \begin{macrocode}
+ \g@addto@macro\pickup@font{\begingroup}%
+% \end{macrocode}
+% If the \pkg{trace} package is loaded, we turn off tracing of \microtype's
+% setup, which is extremely noisy.
+%\changes{v1.9e}{2006/05/25}{no tracing with \pkg{trace} package}
+% \begin{macrocode}
+ \MT@with@package@T{trace}{\g@addto@macro\pickup@font{\conditionally@traceoff}}%
+ \g@addto@macro\pickup@font{%
+ \escapechar\m@ne
+%<*package>
+%<debug> \global\MT@inannottrue
+%<debug> \MT@glet\MT@pdf@annot\@empty
+%<debug> \MT@addto@annot{(line \number\inputlineno)}%
+% \end{macrocode}
+% If \cs{MT@font} is empty, no substitution has taken place, hence
+% \cmd\font@name\ is correct. Otherwise, if they are different,
+% \cmd\font@name\ does not describe the font actually used. This test will
+% catch first order substitutions, like |bx| to |b|, but it will still fail if
+% the substituting font is itself substituted.
+% \begin{macrocode}
+ \MT@let@cn\MT@font{MT@subst@\expandafter\string\font@name}%
+ \ifx\MT@font\relax
+ \let\MT@font\font@name
+ \else
+ \ifx\MT@font\font@name \else
+%<debug> \MT@addto@annot{= substituted with \MT@@font}%
+ \MT@register@subst@font
+ \fi
+ \fi
+ \MT@setupfont
+%</package>
+%<letterspace> \MT@tracking
+ \endgroup
+ }%
+%<*package>
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@pickupfont}
+% Remember the patched command for later.
+% \begin{macrocode}
+ \let\MT@pickupfont\pickup@font
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\do@subst@correction}
+% Additionally, we hook into \cmd\do@subst@correction, which is called if
+% a substitution has taken place, to record the name of the ersatz font.
+% Unfortunately, this will only work for one-level substitutions.
+%\changes{v2.3}{2007/08/05}{remember substitute font for all times
+% (reported by \contributor Stephan Hennig <stephanhennig\at arcor.de>)}
+% ^^A MID: <46ab4fbb$0$31632$9b4e6d93@newsspool3.arcor-online.net>
+% We have to remember the substitute for the rest of the document, not just for
+% the first time it is called, since we need it every time a font is
+% letterspaced.
+% \begin{macrocode}
+ \g@addto@macro\do@subst@correction
+ {\edef\MT@font{\csname\curr@fontshape/\f@size\endcsname}%
+ \MT@glet@nc{MT@subst@\expandafter\string\font@name}\MT@font}%
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\add@accent}
+%\changes{v1.8}{2005/06/14}{fix: disable micro-typographic setup inside \cmd\add@accent\
+% (reported by \contributor Stephan Hennig <stephanhennig\at arcor.de>)}
+% ^^A MID: <42adb0e3$0$27784$9b4e6d93@newsread2.arcor-online.net>
+%\begin{macro}{\MT@orig@add@accent}
+% Inside \cmd\add@accent, we have to disable \microtype's setup, since the
+% grouping in the patched \cmd\pickup@font\ would break the accent if
+% different fonts are used for the base character and the accent. Fortunately,
+% \LaTeX\ takes care that the fonts used for the \cmd\accent\ are already set
+% up, so that we cannot be overlooking them.
+% \begin{macrocode}
+ \let\MT@orig@add@accent\add@accent
+ \def\add@accent#1#2{%
+ \let\pickup@font\MT@orig@pickupfont
+ \MT@orig@add@accent{#1}{#2}%
+ \let\pickup@font\MT@pickupfont
+ }%
+%</package>
+}
+%<plain>}\relax
+%<*package>
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+% Consequently (if all goes well), we are the last ones to change these
+% commands, therefore there is no need to check whether our definition has
+% survived.
+%\changes{v1.6}{2004/12/29}{test whether \cmd\pickup@font\ has changed}
+%\changes{v1.9a}{2005/11/21}{remove superfluous test whether \cmd\pickup@font\ has changed}
+%
+%\begin{macro}{\MT@check@font}
+% Check whether we've already seen the current font.
+% \begin{macrocode}
+\def\MT@check@font{\MT@exp@one@n\MT@in@clist\MT@font\MT@font@list}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@register@subst@font}
+% Register the substituted font.
+% \begin{macrocode}
+\def\MT@register@subst@font{\xdef\MT@font@list{\MT@font@list\font@name,}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@register@font}
+% Register the current font.
+% \begin{macrocode}
+\def\MT@register@font{\xdef\MT@font@list{\MT@font@list\MT@font,}}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsubsection{Context-sensitive setup}
+%
+% Here are the variants for context-sensitive setup.
+%\begin{macro}{\MT@active@features}
+% The activated features are stored in this command.
+% \begin{macrocode}
+\let\MT@active@features\@empty
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@check@font@cx}
+% Every feature has its own list of fonts that have already been dealt with. If
+% the font needn't be set up for a feature, we temporarily disable the
+% corresponding setup command.
+%\changes{v1.9a}{2005/11/14}{optimise context-sensitive setup}
+% This should be more efficient than book-keeping the fonts in lists associated
+% with the combination of contexts, as we've done it before.
+% \begin{macrocode}
+\def\MT@check@font@cx{%
+ \MT@if@true
+ \MT@map@clist@c\MT@active@features{%
+ \expandafter\MT@exp@one@n\expandafter\MT@in@clist\expandafter\MT@font
+ \csname MT@##1@\csname MT@##1@context\endcsname font@list\endcsname
+ \ifMT@inlist@
+ \MT@let@nc{MT@\@nameuse{MT@abbr@##1}}\relax
+ \else
+ \MT@if@false
+ \fi
+ }%
+ \ifMT@if@ \MT@inlist@true \else \MT@inlist@false \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@register@subst@font@cx}
+% Add the substituted font to each feature list.
+%\todo{remove from other lists?}
+% \begin{macrocode}
+\def\MT@register@subst@font@cx{%
+ \MT@map@clist@c\MT@active@features{%
+ \MT@exp@cs\MT@xadd
+ {MT@##1@\csname MT@##1@context\endcsname font@list}%
+ {\font@name,}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@register@font@cx}
+% For each feature, add the current font to the list, unless we didn't set it
+% up.
+% \begin{macrocode}
+\def\MT@register@font@cx{%
+ \MT@map@clist@c\MT@active@features{%
+ \MT@exp@cs\ifx{MT@\@nameuse{MT@abbr@##1}}\relax\else
+ \MT@exp@cs\MT@xadd
+ {MT@##1@\csname MT@##1@context\endcsname font@list}%
+ {\MT@font,}%
+ \def\@tempa{##1}%
+ \MT@exp@cs\MT@map@tlist@c{MT@##1@doc@contexts}\MT@maybe@rem@from@list
+ \fi
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@maybe@rem@from@list}
+% Recurse through all context font lists of the document and remove the font,
+% unless it's the current context.
+% \begin{macrocode}
+\def\MT@maybe@rem@from@list#1{%
+ \MT@ifstreq{\@tempa/#1}{\@tempa/\csname MT@\@tempa @context\endcsname}\relax{%
+ \expandafter\MT@exp@one@n\expandafter\MT@rem@from@clist\expandafter
+ \MT@font \csname MT@\@tempa @#1font@list\endcsname
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\microtypecontext}
+%\changes{v1.9}{2005/10/03}{new command: change setup context in the document}
+%\changes{v2.3}{2007/08/05}{made robust (reported by \contributor Stephan Hennig <stephanhennig\at arcor.de>)}
+% ^^A MID: <46ab4fbb$0$31632$9b4e6d93@newsspool3.arcor-online.net>
+% The user may change the context, so that different setups are possible. This
+% is especially useful for multi-lingual documents.
+%
+% Inside the preamble, it shouldn't actually do anything but remember it for
+% later.
+% \begin{macrocode}
+\def\microtypecontext#1{\MT@addto@setup{\microtypecontext{#1}}}
+\MT@addto@setup{%
+ \DeclareRobustCommand\microtypecontext[1]{%
+ \MT@setup@contexts
+ \let\MT@reset@context\relax
+ \setkeys{MTC}{#1}%
+ \selectfont
+ \MT@reset@context
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\textmicrotypecontext}
+%\changes{v2.2}{2007/07/03}{new command: wrapper around \cs{microtypecontext}}
+% This is just a wrapper around \cs{microtypecontext}.
+% \begin{macrocode}
+\DeclareRobustCommand\textmicrotypecontext[2]{{\microtypecontext{#1}#2}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@reset@context}
+%\changes{v1.9f}{2006/08/03}{only reset context if it has actually been changed}
+%\begin{macro}{\MT@reset@context@}
+% We have to reset the font at the end of the group, provided there actually was
+% a change.
+% \begin{macrocode}
+\def\MT@reset@context@{%
+ \MT@vinfo{<<< Resetting contexts\on@line
+%<debug> \MessageBreak= \MT@pr@context/\MT@ex@context
+%<debug> /\MT@tr@context/\MT@kn@context/\MT@sp@context
+ }%
+ \selectfont
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@setup@contexts}
+% The first time \cs{microtypecontext} is called, we initialise the context
+% lists and redefine the commands used in \cmd\pickup@font.
+% \begin{macrocode}
+\def\MT@setup@contexts{%
+ \MT@map@clist@c\MT@active@features
+ {\MT@glet@nc{MT@##1@@font@list}\MT@font@list}%
+ \MT@glet\MT@check@font\MT@check@font@cx
+ \MT@glet\MT@register@font\MT@register@font@cx
+ \MT@glet\MT@register@subst@font\MT@register@subst@font@cx
+ \MT@glet\MT@setup@contexts\relax
+}
+% \end{macrocode}
+%\end{macro}
+% Define context keys.
+% \begin{macrocode}
+\MT@map@clist@c\MT@features@long{%
+ \define@key{MTC}{#1}[]{%
+ \edef\@tempb{\@nameuse{MT@rbba@#1}}%
+ \MT@exp@one@n\MT@in@clist\@tempb\MT@active@features
+ \ifMT@inlist@
+% \end{macrocode}
+% Using an empty context is only asking for trouble, therefore we choose the
+% `|@|' instead (hoping for the \LaTeX\ users' natural awe of this character).
+% \begin{macrocode}
+ \MT@ifempty{##1}{\def\MT@val{@}}{\def\MT@val{##1}}%
+ \MT@exp@cs\ifx{MT@\@tempb @context}\MT@val
+%<debug>\MT@dinfo{1}{>>> no change of #1 context: `\MT@val'}%
+ \else
+ \MT@vinfo{>>> Changing #1 context to `\MT@val'\MessageBreak\on@line
+%<debug> \space(previous: `\@nameuse{MT@\@tempb @context}')%
+ }%
+ \def\MT@reset@context{\aftergroup\MT@reset@context@}%
+% \end{macrocode}
+% The next time we see the font, we have to reset \emph{all} factors.
+% \begin{macrocode}
+ \MT@glet@nn{MT@reset@\@tempb @codes}{MT@reset@\@tempb @codes@}%
+% \end{macrocode}
+% We must also keep track of all contexts in the document.
+% \begin{macrocode}
+ \expandafter\MT@exp@one@n\expandafter\MT@in@tlist\expandafter
+ \MT@val \csname MT@\@tempb @doc@contexts\endcsname
+ \ifMT@inlist@ \else
+ \MT@exp@cs\MT@xadd{MT@\@tempb @doc@contexts}{{\MT@val}}%
+%<debug> \MT@dinfo{1}{||| added #1 context: \@nameuse{MT@\@tempb @doc@contexts}}%
+ \fi
+ \MT@edef@n{MT@\@tempb @context}{\MT@val}%
+ \fi
+ \fi
+ }%
+}
+% \end{macrocode}
+%\begin{macro}{\MT@pr@context}
+%\begin{macro}{\MT@ex@context}
+%\begin{macro}{\MT@tr@context}
+%\begin{macro}{\MT@sp@context}
+%\begin{macro}{\MT@kn@context}
+%\begin{macro}{\MT@pr@doc@contexts}
+%\begin{macro}{\MT@ex@doc@contexts}
+%\begin{macro}{\MT@tr@doc@contexts}
+%\begin{macro}{\MT@sp@doc@contexts}
+%\begin{macro}{\MT@kn@doc@contexts}
+%\begin{macro}{\MT@extra@context}
+% Initialise the contexts.
+% \begin{macrocode}
+\MT@exp@one@n\MT@map@clist@n{\MT@features,nl}{%
+ \MT@def@n{MT@#1@context}{@}%
+ \MT@def@n{MT@#1@doc@contexts}{{@}}%
+}
+\let\MT@extra@context\@empty
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%
+%\subsection{Configuration}
+%
+%\subsubsection{Font sets}
+%\todo{allow for \texttt{load}ing and extending another set; or using more than one set?}
+%
+%\begin{macro}{\DeclareMicrotypeSet}
+%\begin{macro}{\DeclareMicrotypeSet*}
+% Calling this macro will create a comma list for every font attribute of the
+% form: |\MT|\meta{feature}|list@|\meta{attribute}|@|\meta{set name}. If the
+% optional argument is empty, lists for all available features will be created.
+%
+% The third argument must be a list of |key=value| pairs. If a font attribute
+% is not specified, we define the corresponding list to \cmd\relax, so that it
+% does not constitute a constraint.
+% \begin{macrocode}
+\def\DeclareMicrotypeSet{%
+ \@ifstar
+ \MT@DeclareSetAndUseIt
+ \MT@DeclareSet
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@DeclareSet}
+%\changes{v1.1}{2004/09/15}{remove spaces around first argument}
+% \begin{macrocode}
+\newcommand\MT@DeclareSet[3][]{%
+ \KV@@sp@def\@tempa{#1}%
+ \MT@ifempty\@tempa{%
+ \MT@map@clist@c\MT@features{{\MT@declare@sets{##1}{#2}{#3}}}%
+ }{%
+ \MT@map@clist@c\@tempa{{%
+ \KV@@sp@def\@tempa{##1}%
+ \MT@ifempty\@tempa\relax{%
+ \MT@is@feature{set declaration `#2'}{%
+ \MT@exp@one@n\MT@declare@sets
+ {\csname MT@rbba@\@tempa\endcsname}{#2}{#3}%
+ }%
+ }%
+ }}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@DeclareSetAndUseIt}
+% \begin{macrocode}
+\newcommand\MT@DeclareSetAndUseIt[3][]{%
+ \MT@DeclareSet[#1]{#2}{#3}%
+ \UseMicrotypeSet[#1]{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@curr@set@name}
+% We need to remember the name of the set currently being declared.
+% \begin{macrocode}
+\let\MT@curr@set@name\@empty
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@declare@sets}
+% Define the current set name and parse the keys.
+%\changes{v1.1}{2004/09/20}{remove spaces around set name}
+%\changes{v1.8}{2005/05/15}{warning when redefining a set}
+%\changes{v2.0}{2006/10/16}{fix: empty size list when redefining set}
+%\todo{share one set between features}
+% \begin{macrocode}
+\def\MT@declare@sets#1#2#3{%
+ \KV@@sp@def\MT@curr@set@name{#2}%
+ \MT@ifdefined@n@T{MT@#1@set@@\MT@curr@set@name}{%
+ \MT@warning{Redefining \@nameuse{MT@abbr@#1} set `\MT@curr@set@name'}%
+ \MT@glet@nc{MT@#1list@size@\MT@curr@set@name}\@empty
+ }%
+ \MT@glet@nc{MT@#1@set@@\MT@curr@set@name}\@empty
+%<debug>\MT@dinfo{1}{declaring \@nameuse{MT@abbr@#1} set `\MT@curr@set@name'}%
+ \setkeys{MT@#1@set}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@define@set@key@}
+% \meta{\#1} = font axis, \meta{\#2} = feature.
+%\changes{v1.8}{2005/04/16}{use comma lists instead of token lists}
+%\changes{v1.9a}{2005/11/21}{don't expand variables immediately
+% (requested by \contributor Georg Verweyen <verweyen\at gmail.com>)}
+% ^^A MID: <437a522d$0$7419$9b4e6d93@newsread4.arcor-online.net>
+% \begin{macrocode}
+\def\MT@define@set@key@#1#2{%
+ \define@key{MT@#2@set}{#1}[]{%
+ \MT@glet@nc{MT@#2list@#1@\MT@curr@set@name}\@empty
+ \MT@map@clist@n{##1}{%
+ \KV@@sp@def\MT@val{####1}%
+ \MT@get@highlevel{#1}%
+% \end{macrocode}
+% We do not add the expanded value to the list~\dots
+% \begin{macrocode}
+ \MT@exp@two@n\g@addto@macro
+ {\csname MT@#2list@#1@\MT@curr@set@name\expandafter\endcsname}%
+ {\MT@val,}%
+ }%
+% \end{macrocode}
+% \dots~but keep in mind that the list has to be expanded at the end of the
+% preamble.
+% \begin{macrocode}
+ \expandafter\g@addto@macro\expandafter\MT@font@sets
+ \csname MT@#2list@#1@\MT@curr@set@name\endcsname
+%<debug>\MT@dinfo@nl{1}{-- #1: \@nameuse{MT@#2list@#1@\MT@curr@set@name}}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@get@highlevel}
+% Saying, for instance, `|family=rm*|' or `|shape=bf*|' will expand to
+% \cmd\rmdefault\ resp. \cmd\bfdefault.
+% \begin{macrocode}
+\def\MT@get@highlevel#1{%
+ \expandafter\MT@test@ast\MT@val*\@nil\relax{%
+% \end{macrocode}
+% And `|family = *|' will become \cmd\familydefault.
+% \begin{macrocode}
+ \MT@ifempty\@tempa{\def\@tempa{#1}}\relax
+ \edef\MT@val{\expandafter\noexpand\csname \@tempa default\endcsname}%
+% \end{macrocode}
+% In contrast to earlier version, these values will not be expanded immediately
+% but at the end of the preamble.
+%\changes{v1.2}{2004/09/26}{check whether defaults have changed}
+%\changes{v1.5}{2004/12/02}{don't test defaults if called after begin document}
+%\changes{v1.9a}{2005/11/21}{no longer check whether defaults have changed}
+% \begin{macrocode}
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@test@ast}
+% It the last character is an asterisk, execute the second argument, otherwise
+% the first one.
+%\changes{v1.7}{2005/03/10}{make it simpler}
+% \begin{macrocode}
+\def\MT@test@ast#1*#2\@nil{%
+ \def\@tempa{#1}%
+ \MT@ifempty{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@font@sets}
+%\begin{macro}{\MT@fix@font@set}
+% Fully expand the font specification and fix catcodes for all font sets.
+% \begin{macrocode}
+\let\MT@font@sets\@empty
+\def\MT@fix@font@set#1{%
+ \xdef#1{#1}%
+ \global\@onelevel@sanitize#1%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@define@set@key@size}
+% |size| requires special treatment.
+% \begin{macrocode}
+\def\MT@define@set@key@size#1{%
+ \define@key{MT@#1@set}{size}[]{%
+ \MT@map@clist@n{##1}{%
+ \KV@@sp@def\MT@val{####1}%
+ \expandafter\MT@get@range\MT@val--\@nil
+ \ifx\MT@val\relax \else
+ \MT@exp@cs\MT@xadd
+ {MT@#1list@size@\MT@curr@set@name}%
+ {{{\MT@lower}{\MT@upper}\relax}}%
+ \fi
+ }%
+%<debug>\MT@dinfo@nl{1}{-- size: \@nameuse{MT@#1list@size@\MT@curr@set@name}}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\changes{v1.7}{2005/03/11}{allow specification of size ranges
+% (suggested by \contributor Andreas B\"uhmann <andreas.buehmann\at web.de>)}
+% ^^A private mail, 2005/03/10
+% Font sizes may also be specified as ranges. This has been requested by Andreas
+% B\"uhmann, who has also offered valuable help in implementing this. Now, it
+% is for instance possible to set up different lists for fonts with optical
+% sizes. (The MinionPro project is trying to do this for the OpenType version
+% of Adobe's Minion. See \url{http://developer.berlios.de/projects/minionpro/}.)
+%
+%\begin{macro}{\MT@get@range}
+%\begin{macro}{\MT@upper}
+%\begin{macro}{\MT@lower}
+% Ranges will be stored as triplets of |{|\meta{lower bound}|}|\allowbreak
+% |{|\meta{upper bound}|}|\allowbreak|{|\meta{list name}|}|.
+% For simple sizes, the upper boundary is \textminus1.
+% \begin{macrocode}
+\def\MT@get@range#1-#2-#3\@nil{%
+ \MT@ifempty{#1}{%
+ \MT@ifempty{#2}{%
+ \let\MT@val\relax
+ }{%
+ \def\MT@lower{0}%
+ \def\MT@val{#2}%
+ \MT@get@size
+ \edef\MT@upper{\MT@val}%
+ }%
+ }{%
+ \def\MT@val{#1}%
+ \MT@get@size
+ \ifx\MT@val\relax \else
+ \edef\MT@lower{\MT@val}%
+ \MT@ifempty{#2}{%
+ \MT@ifempty{#3}%
+ {\def\MT@upper{-1}}%
+% \end{macrocode}
+% 2048\,pt is \TeX's maximum font size.
+% \begin{macrocode}
+ {\def\MT@upper{2048}}%
+ }{%
+ \def\MT@val{#2}%
+ \MT@get@size
+ \ifx\MT@val\relax \else
+ \MT@ifdim\MT@lower>\MT@val{%
+ \MT@error{%
+ Invalid size range (\MT@lower\space > \MT@val) in font set
+ `\MT@curr@set@name'.\MessageBreak Swapping sizes}{}%
+ \edef\MT@upper{\MT@lower}%
+ \edef\MT@lower{\MT@val}%
+ }{%
+ \edef\MT@upper{\MT@val}%
+ }%
+ \MT@ifdim\MT@lower=\MT@upper
+ {\def\MT@upper{-1}}%
+ \relax
+ \fi
+ }%
+ \fi
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@get@size}
+% Translate a size selection command and normalise it.
+% \begin{macrocode}
+\def\MT@get@size{%
+% \end{macrocode}
+% A single star would mean \cs{sizedefault}, which doesn't exist, so we define
+% it to be \cmd\normalsize.
+% \begin{macrocode}
+ \if*\MT@val\relax
+ \def\@tempa{\normalsize}%
+ \else
+ \MT@let@cn\@tempa{\MT@val}%
+ \fi
+ \ifx\@tempa\relax \else
+% \end{macrocode}
+% The \pkg{relsize} solution of parsing \cmd\@setfontsize\ does not work with the
+% <AMS> classes, among others. I hope my hijacking doesn't do any harm.
+%\changes{v1.2}{2004/09/26}{hijack \cmd\set@fontsize\ instead of \cmd\@setfontsize}
+% We redefine \cmd\set@fontsize, and not \cmd\@setfontsize\ because some classes
+% might define the size selection commands by simply using \cmd\fontsize\
+% (\eg, the \pkg{a0poster} class).
+%\changes{v2.3b}{2008/03/07}{grouping}
+% \begin{macrocode}
+ \begingroup
+ \def\set@fontsize##1##2##3##4\@nil{\endgroup\def\MT@val{##2}}%
+ \@tempa\@nil
+ \fi
+% \end{macrocode}
+% Test whether we finally got a number or dimension so that we can strip the
+% `|pt|' (\cmd\@defaultunits\ and \cmd\strip@pt\ are kernel macros).
+%\changes{v1.2}{2004/09/27}{additional magic to catch some errors}
+% \begin{macrocode}
+ \MT@ifdimen\MT@val{%
+ \@defaultunits\@tempdima\MT@val pt\relax\@nnil
+ \edef\MT@val{\strip@pt\@tempdima}%
+ }{%
+ \MT@warning{Could not parse font size `\MT@val'\MessageBreak
+ in font set `\MT@curr@set@name'}%
+ \let\MT@val\relax
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\changes{v1.9}{2005/07/13}{\cs{DeclareMicrotypeSet}: new key: \texttt{font}}
+%\begin{macro}{\MT@define@set@key@font}
+%\changes{v2.3}{2007/11/20}{\texttt{font}: single asterisk means normal font}
+% \begin{macrocode}
+\def\MT@define@set@key@font#1{%
+ \define@key{MT@#1@set}{font}[]{%
+ \MT@glet@nc{MT@#1list@font@\MT@curr@set@name}\@empty
+ \MT@map@clist@n{##1}{%
+ \KV@@sp@def\MT@val{####1}%
+ \MT@ifstreq\MT@val*{\def\MT@val{*/*/*/*/*}}\relax
+ \expandafter\MT@get@font\MT@val/////\@nil
+ \MT@exp@two@n\g@addto@macro
+ {\csname MT@#1list@font@\MT@curr@set@name\expandafter\endcsname}%
+ {\MT@val,}%
+ }%
+ \expandafter\g@addto@macro\expandafter\MT@font@sets
+ \csname MT@#1list@font@\MT@curr@set@name\endcsname
+%<debug>\MT@dinfo@nl{1}{-- font: \@nameuse{MT@#1list@font@\MT@curr@set@name}}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@get@font}
+% Translate any asterisks.
+% \begin{macrocode}
+\def\MT@get@font#1/#2/#3/#4/#5/#6\@nil{%
+ \MT@get@font@{#1}{#2}{#3}{#4}{#5}{0}%
+ \ifx\MT@val\relax\def\MT@val{0}\fi
+ \expandafter\g@addto@macro\expandafter\@tempb\expandafter{\MT@val}%
+ \let\MT@val\@tempb
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@get@font@}
+% Helper macro, also used by \cs{MT@get@font@and@size}.
+% \begin{macrocode}
+\def\MT@get@font@#1#2#3#4#5#6{%
+ \let\@tempb\@empty
+ \def\MT@temp{#1/#2/#3/#4/#5}%
+ \MT@get@axis{encoding}{#1}%
+ \MT@get@axis{family} {#2}%
+ \MT@get@axis{series} {#3}%
+ \MT@get@axis{shape} {#4}%
+ \ifnum#6>\z@\edef\@tempb{\@tempb*}\fi
+ \MT@ifempty{#5}{%
+ \MT@warn@axis@empty{size}{\string\normalsize}%
+ \def\MT@val{*}%
+ }{%
+ \def\MT@val{#5}%
+ }%
+ \MT@get@size
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@get@axis}
+% \begin{macrocode}
+\def\MT@get@axis#1#2{%
+ \def\MT@val{#2}%
+ \MT@get@highlevel{#1}%
+ \MT@ifempty\MT@val{%
+ \MT@warn@axis@empty{#1}{\csname #1default\endcsname}%
+ \expandafter\def\expandafter\MT@val\expandafter{\csname #1default\endcsname}%
+ }\relax
+ \expandafter\g@addto@macro\expandafter\@tempb\expandafter{\MT@val/}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@warn@axis@empty}
+% \begin{macrocode}
+\def\MT@warn@axis@empty#1#2{%
+ \MT@warning{#1 axis is empty in font specification\MessageBreak
+ `\MT@temp'. Using `#2' instead}%
+}
+% \end{macrocode}
+%\end{macro}
+% We can finally assemble all pieces to define \cs{DeclareMicrotypeSet}'s
+% keys.
+% They are also used for \cs{DisableLigatures}.
+% \begin{macrocode}
+\MT@exp@one@n\MT@map@clist@n{\MT@features,nl}{%
+ \MT@define@set@key@{encoding}{#1}%
+ \MT@define@set@key@{family} {#1}%
+ \MT@define@set@key@{series} {#1}%
+ \MT@define@set@key@{shape} {#1}%
+ \MT@define@set@key@size {#1}%
+ \MT@define@set@key@font {#1}%
+}
+% \end{macrocode}
+%\begin{macro}{\UseMicrotypeSet}
+% To use a particular set we simply redefine |MT@|\meta{feature}|@setname|.
+% If the optional argument is empty, set names for all features will be
+% redefined.
+%\changes{v1.1}{2004/09/20}{remove spaces around first argument}
+% \begin{macrocode}
+\renewcommand*\UseMicrotypeSet[2][]{%
+ \KV@@sp@def\@tempa{#1}%
+ \MT@ifempty\@tempa{%
+ \MT@map@clist@c\MT@features{{\MT@use@set{##1}{#2}}}%
+ }{%
+ \MT@map@clist@c\@tempa{{%
+ \KV@@sp@def\@tempa{##1}%
+ \MT@ifempty\@tempa\relax{%
+ \MT@is@feature{activation of set `#2'}{%
+ \MT@exp@one@n\MT@use@set
+ {\csname MT@rbba@\@tempa\endcsname}{#2}%
+ }%
+ }%
+ }}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@pr@setname}
+%\begin{macro}{\MT@ex@setname}
+%\begin{macro}{\MT@tr@setname}
+%\begin{macro}{\MT@sp@setname}
+%\begin{macro}{\MT@kn@setname}
+%\begin{macro}{\MT@use@set}
+% Only use sets that have been declared.
+%\changes{v1.1}{2004/09/20}{remove spaces around set name}
+%\changes{v1.4b}{2004/11/25}{don't use undeclared font sets}
+%\changes{v1.6}{2005/01/19}{retain current set if new set is undeclared}
+%\changes{v1.8}{2005/05/15}{fix: remove braces in first line}
+% \begin{macrocode}
+\def\MT@use@set#1#2{%
+ \KV@@sp@def\@tempa{#2}%
+ \MT@ifdefined@n@TF{MT@#1@set@@\@tempa}{%
+ \MT@xdef@n{MT@#1@setname}{\@tempa}%
+ }{%
+ \MT@ifdefined@n@TF{MT@#1@setname}\relax{%
+ \MT@xdef@n{MT@#1@setname}{\@nameuse{MT@default@#1@set}}%
+ }%
+ \MT@error{%
+ The \@nameuse{MT@abbr@#1} set `\@tempa' is undeclared.\MessageBreak
+ Using set `\@nameuse{MT@#1@setname}' instead}{}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\DeclareMicrotypeSetDefault}
+%\changes{v1.8}{2005/05/15}{new command: set default font set}
+% This command can be used in the main configuration file to declare the
+% default font set, in case no set is specified in the package options.
+% \begin{macrocode}
+\renewcommand*\DeclareMicrotypeSetDefault[2][]{%
+ \KV@@sp@def\@tempa{#1}%
+ \MT@ifempty\@tempa{%
+ \MT@map@clist@c\MT@features{{\MT@set@default@set{##1}{#2}}}%
+ }{%
+ \MT@map@clist@c\@tempa{{%
+ \KV@@sp@def\@tempa{##1}%
+ \MT@ifempty\@tempa\relax{%
+ \MT@is@feature{declaration of default set `#2'}{%
+ \MT@exp@one@n\MT@set@default@set
+ {\csname MT@rbba@\@tempa\endcsname}{#2}%
+ }%
+ }%
+ }}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@default@pr@set}
+%\begin{macro}{\MT@default@ex@set}
+%\begin{macro}{\MT@default@tr@set}
+%\begin{macro}{\MT@default@sp@set}
+%\begin{macro}{\MT@default@kn@set}
+%\begin{macro}{\MT@set@default@set}
+% \begin{macrocode}
+\def\MT@set@default@set#1#2{%
+ \KV@@sp@def\@tempa{#2}%
+ \MT@ifdefined@n@TF{MT@#1@set@@\@tempa}{%
+%<debug>\MT@dinfo{1}{declaring default \@nameuse{MT@abbr@#1} set `\@tempa'}%
+ \MT@xdef@n{MT@default@#1@set}{\@tempa}%
+ }{%
+ \MT@error{%
+ The \@nameuse{MT@abbr@#1} set `\@tempa' is not declared.\MessageBreak
+ Cannot make it the default set. Using set\MessageBreak `all' instead}{}%
+ \MT@xdef@n{MT@default@#1@set}{all}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%
+%\subsubsection{Variants and aliases}
+%
+%\begin{macro}{\DeclareMicrotypeVariants}
+%\changes{v2.2}{2007/02/04}{new command}
+%\begin{macro}{\MT@variants}
+% Specify suffixes for variants (see \file{fontname/variants.map}).
+% The starred version appends to the list.
+% \begin{macrocode}
+\let\MT@variants\@empty
+\def\DeclareMicrotypeVariants{%
+ \@ifstar
+ \MT@DeclareVariants
+ {\let\MT@variants\@empty\MT@DeclareVariants}%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@DeclareVariants}
+% \begin{macrocode}
+\def\MT@DeclareVariants#1{%
+ \MT@map@clist@n{#1}{%
+ \KV@@sp@def\@tempa{##1}%
+ \@onelevel@sanitize\@tempa
+ \xdef\MT@variants{\MT@variants{\@tempa}}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\DeclareMicrotypeAlias}
+% This can be used to set an alias name for a font, so that the file and the
+% settings for the aliased font will be loaded.
+%\changes{v1.5}{2004/12/03}{remove spaces around arguments}
+%\changes{v1.8}{2005/05/09}{warning when overriding an alias font}
+% \begin{macrocode}
+\renewcommand*\DeclareMicrotypeAlias[2]{%
+ \KV@@sp@def\@tempa{#1}%
+ \KV@@sp@def\@tempb{#2}%
+ \@onelevel@sanitize\@tempb
+ \MT@ifdefined@n@T{MT@\@tempa @alias}{%
+ \MT@warning{Alias font family `\@tempb' will override
+ alias `\@nameuse{MT@\@tempa @alias}'\MessageBreak
+ for font family `\@tempa'}}%
+ \MT@xdef@n{MT@\@tempa @alias}{\@tempb}%
+% \end{macrocode}
+% If we encounter this command while a font is being set up, we also set the
+% alias for the current font so that if \cs{DeclareMicrotypeAlias} has been
+% issued inside a configuration file, the configuration file for the alias font
+% will be loaded, too.
+%\changes{v1.7}{2005/03/23}{may also be used inside configuration files}
+% \begin{macrocode}
+ \MT@ifdefined@c@T\MT@family{%
+%<debug>\MT@dinfo{1}{Activating alias font `\@tempb' for `\MT@family'}%
+ \MT@glet\MT@familyalias\@tempb
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\LoadMicrotypeFile}
+%\changes{v1.7}{2005/03/22}{new command (suggested by
+% \contributor Andreas B\"uhmann <andreas.buehmann\at web.de>)}
+% ^^A private mail, 2005/03/21
+% May be used to load a configuration file manually.
+% \begin{macrocode}
+\def\LoadMicrotypeFile#1{%
+ \KV@@sp@def\@tempa{#1}%
+ \@onelevel@sanitize\@tempa
+ \MT@exp@one@n\MT@in@clist\@tempa\MT@file@list
+ \ifMT@inlist@
+ \MT@vinfo{... Configuration file mt-\@tempa.cfg already loaded}%
+ \else
+ \MT@xadd\MT@file@list{\@tempa,}%
+ \MT@begin@catcodes
+ \InputIfFileExists{mt-\@tempa.cfg}{%
+ \edef\MT@curr@file{mt-\@tempa.cfg}%
+ \MT@vinfo{... Loading configuration file \MT@curr@file}%
+ }{%
+ \MT@warning{... Configuration file mt-\@tempa.cfg\MessageBreak
+ does not exist}%
+ }%
+ \MT@end@catcodes
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsubsection{Disabling ligatures}
+%
+%\begin{macro}{\DisableLigatures}
+%\changes{v1.9}{2005/07/11}{new command: disable ligatures (requires \pdftex\ 1.30)}
+%\changes{v2.2}{2007/01/22}{new optional argument: disable selected ligatures only}
+%\begin{macro}{\MT@DisableLigatures}
+%\begin{macro}{\MT@nl@setname}
+%\begin{macro}{\MT@nl@ligatures}
+% This is really simple now: we can re-use the set definitions of
+% \cs{DeclareMicrotypeSet}; there can only be one set, which we'll call
+% `|no ligatures|'.
+%
+% The optional argument may be used to disable selected ligatures only.
+% \begin{macrocode}
+\MT@requires@pdftex5{
+\def\DisableLigatures{%
+ \MT@begin@catcodes
+ \MT@DisableLigatures
+}
+\newcommand*\MT@DisableLigatures[2][]{%
+ \MT@ifempty{#1}\relax{\gdef\MT@nl@ligatures{#1}}%
+ \xdef\MT@active@features{\MT@active@features,nl}%
+ \global\MT@noligaturestrue
+ \MT@declare@sets{nl}{no ligatures}{#2}%
+ \gdef\MT@nl@setname{no ligatures}%
+ \MT@end@catcodes
+}
+}{
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+% If \pdftex\ is too old, we throw an error.
+% \begin{macrocode}
+\renewcommand*\DisableLigatures[2][]{%
+ \MT@error{Disabling ligatures of a font is only possible\MessageBreak
+ with pdftex version 1.30 or newer.\MessageBreak
+ Ignoring \string\DisableLigatures}{Upgrade pdftex.}%
+}
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsubsection{Interaction with \pkg{babel}}
+%
+%\begin{macro}{\DeclareMicrotypeBabelHook}
+% Declare the context that should be loaded when a \pkg{babel} language
+% is selected. The command will not check whether a previous declaration will
+% be overwritten.
+%\changes{v2.0}{2005/10/04}{(beta:1) new command: interaction with \pkg{babel}}
+% \begin{macrocode}
+\def\DeclareMicrotypeBabelHook#1#2{%
+ \MT@map@clist@n{#1}{%
+ \KV@@sp@def\@tempa{##1}%
+ \MT@gdef@n{MT@babel@\@tempa}{#2}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\subsubsection{Fine tuning}
+%
+% The commands \cs{SetExpansion} and \cs{SetProtrusion} provide an interface for
+% setting the character protrusion resp. expansion factors for a set of fonts.
+%
+%\begin{macro}{\SetProtrusion}
+%\changes{v1.9}{2005/07/13}{(et al.) new key: \texttt{font}}
+%\changes{v1.9d}{2006/02/23}{(et al.) split keys of optional and mandatory argument}
+%\changes{v1.9d}{2006/02/23}{(et al.) optimise: unify keys for mandatory argument}
+%\changes{v1.9e}{2006/07/26}{(et al.) new key: \texttt{inputenc}}
+%\changes{v1.9f}{2006/08/10}{(et al.) set catcodes before parsing optional argument}
+% This macro accepts three arguments: [options,] set of font attributes and
+% list of character protrusion factors.
+%
+% A new macro called |\MT@pr@c@|\meta{name} will be defined to be \meta{\#3}
+% (\ie, the list of characters, not expanded).
+% \begin{macrocode}
+\def\SetProtrusion{%
+ \MT@begin@catcodes
+ \MT@SetProtrusion
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@SetProtrusion}
+%\begin{macro}{\MT@pr@c@name}
+%\begin{macro}{\MT@extra@context}
+%\begin{macro}{\MT@permutelist}
+% We want the catcodes to be correct even if this is called in the preamble.
+% \begin{macrocode}
+\newcommand*\MT@SetProtrusion[3][]{%
+ \let\MT@extra@context\@empty
+% \end{macrocode}
+% Parse the optional first argument. We first have to know the name before we
+% can deal with the extra options.
+% \begin{macrocode}
+ \MT@set@named@keys{MT@pr@c}{#1}%
+%<debug>\MT@dinfo{1}{creating protrusion list `\MT@pr@c@name'}%
+ \def\MT@permutelist{pr@c}%
+ \setkeys{MT@cfg}{#2}%
+% \end{macrocode}
+% We have parsed the second argument, and can now define macros for all
+% permutations of the font attributes to point to |\MT@pr@c@|\meta{name},~\dots
+% \begin{macrocode}
+ \MT@permute
+% \end{macrocode}
+% \dots~which we can now define to be \meta{\#3}.
+% Here, as elsewhere, we have to make the definitions global, since they will
+% occur inside a group.
+% \begin{macrocode}
+ \MT@gdef@n{MT@pr@c@\MT@pr@c@name}{#3}%
+ \MT@end@catcodes
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\SetExpansion}
+%\changes{v1.4}{2004/11/10}{fix: specifying extra options does no
+% longer require to give a \texttt{name}, too}
+%\changes{v1.9e}{2006/07/26}{new key: \texttt{inputenc}}
+% \cs{SetExpansion} only differs in that it allows some extra options
+% (|stretch|, |shrink|, |step|, |auto|).
+% \begin{macrocode}
+\def\SetExpansion{%
+ \MT@begin@catcodes
+ \MT@SetExpansion
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@SetExpansion}
+%\begin{macro}{\MT@ex@c@name}
+%\begin{macro}{\MT@extra@context}
+%\begin{macro}{\MT@permutelist}
+% \begin{macrocode}
+\newcommand*\MT@SetExpansion[3][]{%
+ \let\MT@extra@context\@empty
+ \MT@set@named@keys{MT@ex@c}{#1}%
+ \MT@ifdefined@n@T{MT@ex@c@\MT@ex@c@name @factor}{%
+ \ifnum\csname MT@ex@c@\MT@ex@c@name @factor\endcsname > \@m
+ \MT@warning@nl{Expansion factor \number\@nameuse{MT@ex@c@\MT@ex@c@name @factor}
+ too large in list\MessageBreak `\MT@ex@c@name'. Setting it to the
+ maximum of 1000}%
+ \MT@glet@nc{MT@ex@c@\MT@ex@c@name @factor}\@m
+ \fi
+ }%
+%<debug>\MT@dinfo{1}{creating expansion list `\MT@ex@c@name'}%
+ \def\MT@permutelist{ex@c}%
+ \setkeys{MT@cfg}{#2}%
+ \MT@permute
+ \MT@gdef@n{MT@ex@c@\MT@ex@c@name}{#3}%
+ \MT@end@catcodes
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\SetTracking}
+%\changes{v2.0}{2006/12/28}{new command: tracking}
+%\changes{v2.2}{2007/02/23}{third argument may be empty}
+%\changes{v2.2}{2007/02/23}{new key `\texttt{no ligatures}' to disable
+% ligatures of letterspaced fonts}
+%\changes{v2.2}{2007/06/16}{new keys `\texttt{spacing}' and `\texttt{outer spacing}'
+% to adjust interword spacing
+% (suggested by \contributor Steven~E. Harris <seh\at panix.com>)}
+% ^^A private mail, 2007/06/15
+% \begin{macrocode}
+\def\SetTracking{%
+ \MT@begin@catcodes
+ \MT@SetTracking
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@SetTracking}
+% Third argument may be empty.
+%\changes{v2.3}{2007/11/20}{sanity check for value}
+% \begin{macrocode}
+\newcommand*\MT@SetTracking[3][]{%
+ \let\MT@extra@context\@empty
+ \MT@set@named@keys{MT@tr@c}{#1}%
+%<debug>\MT@dinfo{1}{creating tracking list `\MT@tr@c@name'}%
+ \def\MT@permutelist{tr@c}%
+ \setkeys{MT@cfg}{#2}%
+ \MT@permute
+ \KV@@sp@def\@tempa{#3}%
+ \MT@ifempty\@tempa\relax{%
+ \MT@ifint\@tempa
+ {\MT@xdef@n{MT@tr@c@\MT@tr@c@name}{\@tempa}}%
+ {\MT@warning{Value `\@tempa' is not a number in\MessageBreak
+ tracking set `\MT@curr@set@name'}}}%
+ \MT@end@catcodes
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\SetExtraSpacing}
+%\changes{v2.0}{2005/09/28}{(beta:1) new command: adjustment of interword spacing}
+% \begin{macrocode}
+\def\SetExtraSpacing{%
+ \MT@begin@catcodes
+ \MT@SetExtraSpacing
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@SetExtraSpacing}
+%\begin{macro}{\MT@sp@c@name}
+%\begin{macro}{\MT@extra@context}
+%\begin{macro}{\MT@permutelist}
+% \begin{macrocode}
+\newcommand*\MT@SetExtraSpacing[3][]{%
+ \let\MT@extra@context\@empty
+ \MT@set@named@keys{MT@sp@c}{#1}%
+%<debug>\MT@dinfo{1}{creating spacing list `\MT@sp@c@name'}%
+ \def\MT@permutelist{sp@c}%
+ \setkeys{MT@cfg}{#2}%
+ \MT@permute
+ \MT@gdef@n{MT@sp@c@\MT@sp@c@name}{#3}%
+ \MT@end@catcodes
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\SetExtraKerning}
+%\changes{v2.0}{2005/09/28}{(beta:1) new command: additional kerning}
+% \begin{macrocode}
+\def\SetExtraKerning{%
+ \MT@begin@catcodes
+ \MT@SetExtraKerning
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@SetExtraKerning}
+%\begin{macro}{\MT@kn@c@name}
+%\begin{macro}{\MT@extra@context}
+%\begin{macro}{\MT@permutelist}
+% \begin{macrocode}
+\newcommand*\MT@SetExtraKerning[3][]{%
+ \let\MT@extra@context\@empty
+ \MT@set@named@keys{MT@kn@c}{#1}%
+%<debug>\MT@dinfo{1}{creating kerning list `\MT@kn@c@name'}%
+ \def\MT@permutelist{kn@c}%
+ \setkeys{MT@cfg}{#2}%
+ \MT@permute
+ \MT@gdef@n{MT@kn@c@\MT@kn@c@name}{#3}%
+ \MT@end@catcodes
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@set@named@keys}
+%\changes{v1.9f}{2006/08/10}{new macro: set name first, simplify parsing of
+% optional argument}
+%\begin{macro}{\MT@options}
+% We first set the name (if specified), then remove it from the list, and set
+% the remaining keys.
+% \begin{macrocode}
+\def\MT@set@named@keys#1#2{%
+ \def\x##1name=##2,##3\@nil{%
+ \setkeys{#1}{name=##2}%
+ \gdef\MT@options{##1##3}%
+ \MT@rem@from@clist{name=}\MT@options
+ }%
+ \x#2,name=,\@nil
+ \@expandtwoargs\setkeys{#1}\MT@options
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@define@code@key}
+% Define the keys for the configuration lists (which are setting the codes, in
+% \pdftex\ speak).
+% \begin{macrocode}
+\def\MT@define@code@key#1#2{%
+ \define@key{MT@#2}{#1}[]{%
+ \@tempcnta=\@ne
+ \MT@map@clist@n{##1}{%
+ \KV@@sp@def\MT@val{####1}%
+% \end{macrocode}
+% Here, too, we allow for something like `|bf*|'. It will be expanded
+% immediately.
+% \begin{macrocode}
+ \MT@get@highlevel{#1}%
+ \MT@edef@n{MT@temp#1\the\@tempcnta}{\MT@val}%
+ \advance\@tempcnta \@ne
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@define@code@key@size}
+%\changes{v1.9c}{2006/01/25}{fix: embrace \cs{MT@tempsize} in \cmd\csname\
+% (bug introduced in v1.9b)}
+% \cs{MT@tempsize} must be in a \cmd\csname, so that it is at least
+% \cmd\relax, not undefined.
+% \begin{macrocode}
+\def\MT@define@code@key@size#1{%
+ \define@key{MT@#1}{size}[]{%
+ \MT@map@clist@n{##1}{%
+ \KV@@sp@def\MT@val{####1}%
+ \expandafter\MT@get@range\MT@val--\@nil
+ \ifx\MT@val\relax \else
+ \MT@exp@cs\MT@xadd{MT@tempsize}%
+ {{{\MT@lower}{\MT@upper}{\MT@curr@set@name}}}%
+ \fi
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@define@code@key@font}
+%\changes{v1.9c}{2006/01/25}{fix: context was ignored}
+% \begin{macrocode}
+\def\MT@define@code@key@font#1{%
+ \define@key{MT@#1}{font}[]{%
+ \MT@map@clist@n{##1}{%
+ \KV@@sp@def\MT@val{####1}%
+ \MT@ifstreq\MT@val*{\def\MT@val{*/*/*/*/*}}\relax
+ \expandafter\MT@get@font@and@size\MT@val/////\@nil
+ \MT@xdef@n{MT@\MT@permutelist @\@tempb\MT@extra@context}%
+ {\csname MT@\MT@permutelist @name\endcsname}%
+%<debug>\MT@dinfo@nl{1}{initialising: use list for font \@tempb=\MT@val
+%<debug> \ifx\MT@extra@context\@empty\else\MessageBreak
+%<debug> (context: \MT@extra@context)\fi}%
+ \MT@exp@cs\MT@xaddb
+ {MT@\MT@permutelist @\@tempb\MT@extra@context @sizes}%
+ {{{\MT@val}{\m@ne}{\MT@curr@set@name}}}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@get@font@and@size}
+% Translate any asterisks and split off the size.
+% \begin{macrocode}
+\def\MT@get@font@and@size#1/#2/#3/#4/#5/#6\@nil{%
+ \MT@get@font@{#1}{#2}{#3}{#4}{#5}{1}%
+}
+% \end{macrocode}
+%\end{macro}
+% \begin{macrocode}
+\MT@define@code@key{encoding}{cfg}
+\MT@define@code@key{family} {cfg}
+\MT@define@code@key{series} {cfg}
+\MT@define@code@key{shape} {cfg}
+\MT@define@code@key@size {cfg}
+\MT@define@code@key@font {cfg}
+% \end{macrocode}
+%\begin{macro}{\MT@define@opt@key}
+% \begin{macrocode}
+\def\MT@define@opt@key#1#2{%
+ \define@key{MT@#1@c}{#2}[]{\MT@ifempty{##1}\relax{%
+ \MT@xdef@n{MT@#1@c@\MT@curr@set@name @#2}{##1}}}%
+}
+% \end{macrocode}
+%\end{macro}
+% The options in the optional first argument.
+% \begin{macrocode}
+\MT@map@clist@c\MT@features{%
+% \end{macrocode}
+%\changes{v1.9a}{2005/11/21}{`\meta{file name}\texttt{/}\meta{line number}' as default list name}
+% Use file name and line number as the list name if the user didn't bother
+% to invent one.
+%\changes{v1.3}{2004/10/27}{fix: specifying \texttt{load} option does no
+% longer require to give a \texttt{name}, too}
+%\changes{v2.2}{2007/01/28}{simplify key declarations}
+% \begin{macrocode}
+ \define@key{MT@#1@c}{name}[]{%
+ \MT@ifempty{##1}{%
+ \MT@edef@n{MT@#1@c@name}{\MT@curr@file/\the\inputlineno}%
+ }{%
+ \MT@edef@n{MT@#1@c@name}{##1}%
+ \MT@ifdefined@n@T{MT@#1@c@\csname MT@#1@c@name\endcsname}{%
+ \MT@warning{Redefining \@nameuse{MT@abbr@#1} list `\@nameuse{MT@#1@c@name}'}%
+ }%
+ }%
+ \MT@let@cn\MT@curr@set@name{MT@#1@c@name}%
+ }%
+ \MT@define@opt@key{#1}{load}%
+ \MT@define@opt@key{#1}{factor}%
+ \MT@define@opt@key{#1}{preset}%
+ \MT@define@opt@key{#1}{inputenc}%
+% \end{macrocode}
+% Only one context is allowed. This might change in the future.
+% \begin{macrocode}
+ \define@key{MT@#1@c}{context}[]{\MT@ifempty{##1}\relax{\def\MT@extra@context{##1}}}%
+}
+% \end{macrocode}
+% Automatically enable font copying if we find a protrusion or expansion context.
+% After the preamble, check whether font copying is enabled.
+% For older \pdftex\ versions, disallow.
+% Also disable for \luatex.
+% \begin{macrocode}
+\MT@requires@pdftex7{
+%<*lua>
+ \MT@requires@luatex{
+ \define@key{MT@ex@c}{context}[]{%
+ \MT@error{Expansion contexts currently don't work with luatex.\MessageBreak
+ Ignoring `context' key\on@line}%
+ {Use pdftex instead.}%
+ }
+ }{
+%</lua>
+ \define@key{MT@ex@c}{context}[]{%
+ \MT@ifempty{#1}\relax{%
+ \MT@glet\MT@copy@font\MT@copy@font@
+ \def\MT@extra@context{#1}%
+ }%
+ }
+ \MT@addto@setup{%
+ \define@key{MT@ex@c}{context}[]{%
+ \ifx\MT@copy@font\MT@copy@font@
+ \MT@ifempty{#1}\relax{\def\MT@extra@context{#1}}%
+ \else
+ \MT@error{\MT@MT\space isn't set up for expansion contexts.\MessageBreak
+ Ignoring `context' key\on@line}%
+ {Either move the settings inside the preamble,\MessageBreak
+ or load the package with the `copyfonts' option.}%
+ \fi
+ }%
+ }
+% \end{macrocode}
+% Protrusion contexts \emph{may} also work without copying the font, so we
+% don't issue an error but only a warning. The problem is that \pdftex\ only
+% allows one set of protrusion factors for a given font within one paragraph
+% (those that are in effect at the end of the paragraph will be in effect for
+% the whole paragraph). When different fonts are loaded -- like in the example
+% with the footnote markers -- we don't need to copy the fonts.
+% \begin{macrocode}
+ \define@key{MT@pr@c}{context}[]{%
+ \MT@ifempty{#1}\relax{%
+ \MT@glet\MT@copy@font\MT@copy@font@
+ \def\MT@extra@context{#1}%
+ }%
+ }
+ \MT@addto@setup{%
+ \define@key{MT@pr@c}{context}[]{%
+ \MT@ifempty{#1}\relax{\def\MT@extra@context{#1}}%
+ \ifx\MT@copy@font\MT@copy@font@\else
+ \MT@warning@nl{If protrusion contexts don't work as expected,
+ \MessageBreak load the package with the `copyfonts' option}%
+ \fi
+ }%
+ }
+%<lua> }
+}{
+ \define@key{MT@ex@c}{context}[]{%
+ \MT@error{Expansion contexts only work with pdftex 1.40.4\MessageBreak
+ or later. Ignoring `context' key\on@line}%
+ {Upgrade pdftex.}%
+ }
+}
+% \end{macrocode}
+%\begin{macro}{\MT@warn@nodim}
+% \begin{macrocode}
+\def\MT@warn@nodim#1{%
+ \MT@warning{`\@tempa' is not a dimension.\MessageBreak
+ Ignoring it and setting values relative to\MessageBreak #1}%
+}
+% \end{macrocode}
+%\end{macro}
+%\changes{v1.8}{2005/04/14}{\cs{SetProtrusion}: new key: \texttt{unit}}
+%\changes{v1.9}{2005/09/28}{\cs{SetProtrusion}: value `\texttt{relative}' renamed
+% to `\texttt{character}' for key \texttt{unit}}
+%\changes{v2.0}{2006/09/30}{option `\opt{unit}', \cs{SetProtrusion}:
+% deprecate value `\texttt{relative}' completely}
+% Protrusion codes may be relative to character width, or to any dimension.
+%\todo{new key for unit: \texttt{dimen} (for \texttt{kerning}, especially)}
+% \begin{macrocode}
+\define@key{MT@pr@c}{unit}[character]{%
+ \MT@glet@nc{MT@pr@c@\MT@curr@set@name @unit}\@empty
+ \def\@tempa{#1}%
+ \MT@ifstreq\@tempa{character}\relax{%
+% \end{macrocode}
+% Test whether it's a dimension, but do not translate it into its final
+% form here, since it may be font-specific.
+% \begin{macrocode}
+ \MT@ifdimen\@tempa
+ {\MT@glet@nc{MT@pr@c@\MT@curr@set@name @unit}\@tempa}%
+ {\MT@warn@nodim{character widths}}%
+ }%
+}
+% \end{macrocode}
+% Tracking may only be relative to a dimension.
+% \begin{macrocode}
+\define@key{MT@tr@c}{unit}[1em]{%
+ \MT@glet@nc{MT@tr@c@\MT@curr@set@name @unit}\@empty
+ \def\@tempa{#1}%
+ \MT@ifdimen\@tempa
+ {\MT@glet@nc{MT@tr@c@\MT@curr@set@name @unit}\@tempa}%
+ {\MT@warn@nodim{1em}%
+ \MT@gdef@n{MT@tr@c@\MT@curr@set@name @unit}{1em}}%
+}
+% \end{macrocode}
+% Spacing and kerning codes may additionally be relative to space dimensions.
+% \begin{macrocode}
+\MT@map@clist@n{sp,kn}{%
+ \define@key{MT@#1@c}{unit}[space]{%
+ \MT@glet@nc{MT@#1@c@\MT@curr@set@name @unit}\@empty
+ \def\@tempa{##1}%
+ \MT@ifstreq\@tempa{character}\relax{%
+ \MT@glet@nc{MT@#1@c@\MT@curr@set@name @unit}\m@ne
+ \MT@ifstreq\@tempa{space}\relax{%
+ \MT@ifdimen\@tempa
+ {\MT@glet@nc{MT@#1@c@\MT@curr@set@name @unit}\@tempa}%
+ {\MT@warn@nodim{width of space}}%
+ }%
+ }%
+ }%
+}
+% \end{macrocode}
+% The first argument to \cs{SetExpansion} accepts some more options.
+% \begin{macrocode}
+\MT@map@clist@n{stretch,shrink,step}{%
+ \define@key{MT@ex@c}{#1}[]{%
+ \MT@ifempty{##1}\relax{%
+ \MT@ifint{##1}{%
+% \end{macrocode}
+% A space terminates the number.
+% \begin{macrocode}
+ \MT@gdef@n{MT@ex@c@\MT@curr@set@name @#1}{##1 }%
+ }{%
+ \MT@warning{%
+ Value `##1' for option `#1' is not a number.\MessageBreak
+ Ignoring it}%
+ }%
+ }%
+ }%
+}
+\define@key{MT@ex@c}{auto}[true]{%
+ \def\@tempa{#1}%
+ \csname if\@tempa\endcsname
+% \end{macrocode}
+% Don't use |autoexpand| for \pdftex\ version older than 1.20.
+%\changes{v1.7}{2005/03/07}{fix: remove space after \texttt{autoexpand}}
+%\changes{v1.7}{2005/03/07}{disallow automatic expansion if \pdftex\ too old}
+% \begin{macrocode}
+ \MT@requires@pdftex4{%
+ \MT@gdef@n{MT@ex@c@\MT@curr@set@name @auto}{autoexpand}%
+ }{%
+ \MT@warning{pdftex too old for automatic font expansion}%
+ }
+ \else
+ \MT@requires@pdftex4{%
+ \MT@glet@nc{MT@ex@c@\MT@curr@set@name @auto}\@empty
+ }\relax
+ \fi
+}
+% \end{macrocode}
+% Tracking: Interword spacing and outer kerning.
+% The variant with space in case \cs{SetTracking} is called inside an argument
+% (\eg, to \cmd\IfFileExists).
+% \begin{macrocode}
+\MT@define@opt@key{tr}{spacing}
+\MT@define@opt@key{tr}{outerspacing}
+\MT@define@opt@key{tr}{outerkerning}
+% \end{macrocode}
+% Which ligatures should be disabled?
+% \begin{macrocode}
+\define@key{MT@tr@c}{noligatures}[]%
+ {\MT@xdef@n{MT@tr@c@\MT@curr@set@name @noligatures}{#1}}
+\define@key{MT@tr@c}{outer spacing}[]{\setkeys{MT@tr@c}{outerspacing={#1}}}
+\define@key{MT@tr@c}{outer kerning}[]{\setkeys{MT@tr@c}{outerkerning={#1}}}
+\define@key{MT@tr@c}{no ligatures}[]{\setkeys{MT@tr@c}{noligatures={#1}}}
+% \end{macrocode}
+%
+%\subsubsection{Character inheritance}
+%
+%\begin{macro}{\DeclareCharacterInheritance}
+%\changes{v1.1}{2004/09/15}{new command: possibility to specify character inheritance}
+%\changes{v1.9d}{2006/02/09}{fix: empty context}
+%\changes{v1.9e}{2006/07/26}{new key `\texttt{inputenc}' to set the input encoding}
+% This macro may be used in the configuration files to declare characters that
+% should inherit protrusion resp. expansion values from other characters. Thus,
+% there is no need to define all accented characters (\eg, |\`a|, |\'a|,
+% |\^a|, |\~a|, |\"a|, |\r{a}|, |\k{a}|, |\u{a}|), which will make the
+% configuration files look much nicer and easier to maintain. If a single
+% character of an inheritance list should have a different value, one can
+% simply override it.
+%\begin{macro}{\MT@inh@feat}
+% The optional argument may be used to restrict the list to some features,
+%\begin{macro}{\MT@extra@inputenc}
+% and to specify an input encoding.
+% \begin{macrocode}
+\renewcommand*\DeclareCharacterInheritance[1][]{%
+ \let\MT@extra@context\@empty
+ \let\MT@extra@inputenc\@undefined
+ \let\MT@inh@feat\@empty
+ \setkeys{MT@inh@}{#1}%
+ \MT@begin@catcodes
+ \MT@set@inh@list
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@set@inh@list}
+% Safe category codes.
+% \begin{macrocode}
+\def\MT@set@inh@list#1#2{%
+ \MT@ifempty\MT@inh@feat{%
+ \MT@map@clist@c\MT@features{{\MT@declare@char@inh{##1}{#1}{#2}}}%
+ }{%
+ \MT@map@clist@c\MT@inh@feat{{%
+ \KV@@sp@def\@tempa{##1}%
+ \MT@ifempty\@tempa\relax{%
+ \MT@exp@one@n\MT@declare@char@inh
+ {\csname MT@rbba@\@tempa\endcsname}{#1}{#2}%
+ }%
+ }}%
+ }%
+ \MT@end@catcodes
+}
+% \end{macrocode}
+%\changes{v1.9f}{2006/08/09}{fix: forgotten comma in the features list}
+%\end{macro}
+% The keys for the optional argument.
+% \begin{macrocode}
+\MT@map@clist@c\MT@features@long{%
+ \define@key{MT@inh@}{#1}[]{\edef\MT@inh@feat{\MT@inh@feat#1,}}}
+\define@key{MT@inh@}{inputenc}{\def\MT@extra@inputenc{#1}}
+% \end{macrocode}
+%\begin{macro}{\MT@declare@char@inh}
+%\todo{share one list between features}
+% The lists cannot be given a name by the user.
+% \begin{macrocode}
+\def\MT@declare@char@inh#1#2#3{%
+ \MT@edef@n{MT@#1@inh@name}%
+ {\MT@curr@file/\the\inputlineno (\@nameuse{MT@abbr@#1})}%
+ \MT@let@cn\MT@curr@set@name{MT@#1@inh@name}%
+ \MT@ifdefined@c@T\MT@extra@inputenc{%
+ \MT@xdef@n{MT@#1@inh@\MT@curr@set@name @inputenc}{\MT@extra@inputenc}}%
+%<debug>\MT@dinfo{1}{creating inheritance list `\@nameuse{MT@#1@inh@name}'}%
+ \MT@gdef@n{MT@#1@inh@\csname MT@#1@inh@name\endcsname}{#3}%
+ \def\MT@permutelist{#1@inh}%
+ \setkeys{MT@inh}{#2}%
+ \MT@permute
+}
+% \end{macrocode}
+%\end{macro}
+% Parse the second argument. \cs{DeclareCharacterInheritance} may also be set
+% up for various combinations.
+% \begin{macrocode}
+\define@key{MT@inh}{encoding}[]{%
+ \def\MT@val{#1}%
+ \expandafter\MT@encoding@check\MT@val,\@nil
+ \MT@get@highlevel{encoding}%
+ \MT@edef@n{MT@tempencoding1}{\MT@val}%
+}
+% \end{macrocode}
+%\begin{macro}{\MT@encoding@check}
+%\changes{v1.2}{2004/09/29}{check whether only one encoding specified}
+% But we only allow \emph{one} encoding.
+% \begin{macrocode}
+\def\MT@encoding@check#1,#2\@nil{%
+ \MT@ifempty{#2}\relax{%
+ \edef\MT@val{#1}%
+ \MT@warning{You may only specify one encoding for character\MessageBreak
+ inheritance lists. Ignoring encoding(s) #2}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+% For the rest, we can reuse the key setup from the configuration lists
+% (|\Set...|).
+% \begin{macrocode}
+\MT@define@code@key{family}{inh}
+\MT@define@code@key{series}{inh}
+\MT@define@code@key{shape} {inh}
+\MT@define@code@key@size {inh}
+\MT@define@code@key@font {inh}
+% \end{macrocode}
+%\begin{macro}{\MT@inh@do}
+% Now parse the third argument, the inheritance lists. We define the commands
+% |\MT@inh@|\meta{name}|@|\meta{slot}|@|, containing the inheriting characters.
+% They will also be translated to slot numbers here, to save some time. The
+% following will be executed only once, namely the first time this inheritance
+% list is encountered (in |\MT@set@|\meta{feature}|@codes|).
+% \begin{macrocode}
+\def\MT@inh@do#1,{%
+ \ifx\relax#1\@empty \else
+ \MT@inh@split #1==\relax
+ \expandafter\MT@inh@do
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@inh@split}
+% Only gather the inheriting characters here. Their codes will actually be set
+% in |\MT@set@|\meta{feature}|@codes|.
+% \begin{macrocode}
+\def\MT@inh@split#1=#2=#3\relax{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\@empty \else
+ \MT@get@slot
+ \ifnum\MT@char > \m@ne
+ \let\MT@val\MT@char
+ \MT@map@clist@n{#2}{%
+ \def\@tempa{##1}%
+ \ifx\@tempa\@empty \else
+ \MT@get@slot
+ \ifnum\MT@char > \m@ne
+ \MT@exp@cs\MT@xadd{MT@inh@\MT@listname @\MT@val @}{{\MT@char}}%
+ \fi
+ \fi
+ }%
+%<debug>\MT@dinfo@nl{2}{children of #1 (\MT@val):
+%<debug> \@nameuse{MT@inh@\MT@listname @\MT@val @}}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsubsection{Permutation}
+%
+%\begin{macro}{\MT@permute}
+%\changes{v1.1}{2004/09/15}{don't use sets for empty encoding}
+%\begin{macro}{\MT@permute@}
+%\begin{macro}{\MT@permute@@}
+%\begin{macro}{\MT@permute@@@}
+%\begin{macro}{\MT@permute@@@@}
+% Calling \cs{MT@permute} will define commands for all permutations
+% of the specified font attributes of the form
+% |\MT@|\meta{list type}|@/|\allowbreak
+% \meta{encoding}|/|\allowbreak
+% \meta{family}|/|\allowbreak
+% \meta{series}|/|\allowbreak
+% \meta{shape}|/|\allowbreak
+% \meta{|\textbar*|}
+% to be the expansion of |\MT@|\meta{list type}|@name|, \ie, the name of the
+% currently defined list. Size ranges are held in a separate macro called
+% |\MT@|\meta{list type}|@/|\allowbreak\meta{font axes}|@sizes|, which in turn
+% contains the respective \meta{list name}s attached to the ranges.
+% \begin{macrocode}
+\def\MT@permute{%
+ \let\MT@cnt@encoding\@ne
+ \MT@permute@
+% \end{macrocode}
+% Undefine commands for the next round.
+% \begin{macrocode}
+ \MT@map@tlist@n{{encoding}{family}{series}{shape}}\MT@permute@reset
+ \MT@glet\MT@tempsize\@undefined
+}
+\def\MT@permute@{%
+ \let\MT@cnt@family\@ne
+ \MT@permute@@
+ \MT@increment\MT@cnt@encoding
+ \MT@ifdefined@n@T{MT@tempencoding\MT@cnt@encoding}%
+ \MT@permute@
+}
+\def\MT@permute@@{%
+ \let\MT@cnt@series\@ne
+ \MT@permute@@@
+ \MT@increment\MT@cnt@family
+ \MT@ifdefined@n@T{MT@tempfamily\MT@cnt@family}%
+ \MT@permute@@
+}
+\def\MT@permute@@@{%
+ \let\MT@cnt@shape\@ne
+ \MT@permute@@@@
+ \MT@increment\MT@cnt@series
+ \MT@ifdefined@n@T{MT@tempseries\MT@cnt@series}%
+ \MT@permute@@@
+}
+\def\MT@permute@@@@{%
+ \MT@permute@@@@@
+ \MT@increment\MT@cnt@shape
+ \MT@ifdefined@n@T{MT@tempshape\MT@cnt@shape}%
+ \MT@permute@@@@
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@permute@@@@@}
+%\changes{v1.9a}{2005/12/05}{don't define permutations for unused encodings}
+% In order to save some memory, we can ignore unused encodings (inside the
+% document).
+% \begin{macrocode}
+\def\MT@permute@@@@@{%
+ \MT@permute@define{encoding}%
+ \ifMT@document
+ \ifx\MT@tempencoding\@empty \else
+ \MT@ifdefined@n@TF{T@\MT@tempencoding}\relax
+ {\expandafter\expandafter\expandafter\@gobble}%
+ \fi
+ \fi
+ \MT@permute@@@@@@
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@permute@@@@@@}
+% \begin{macrocode}
+\def\MT@permute@@@@@@{%
+ \MT@permute@define{family}%
+ \MT@permute@define{series}%
+ \MT@permute@define{shape}%
+ \edef\@tempa{\MT@tempencoding
+ /\MT@tempfamily
+ /\MT@tempseries
+ /\MT@tempshape
+ /\MT@ifdefined@c@T\MT@tempsize *}%
+% \end{macrocode}
+%\changes{v1.2}{2004/09/29}{more sanity checks for \cs{SetProtrusion} and
+% \cs{SetExpansion}}
+% Some sanity checks: an encoding must be specified (unless nothing else is).
+% \begin{macrocode}
+ \MT@ifstreq\@tempa{////}\relax{%
+ \ifx\MT@tempencoding\@empty
+ \MT@warning{%
+ You have to specify an encoding for\MessageBreak
+ \@nameuse{MT@abbr@\MT@permutelist} list
+ `\@nameuse{MT@\MT@permutelist @name}'.\MessageBreak
+ Ignoring it}%
+ \else
+ \MT@ifdefined@c@TF\MT@tempsize{%
+% \end{macrocode}
+% Add the list of ranges to the beginning of the current combination, after
+% checking for conflicts.
+%\changes{v1.8}{2005/04/20}{add ranges to the beginning of the lists}
+% \begin{macrocode}
+ \MT@ifdefined@n@T{MT@\MT@permutelist @\@tempa\MT@extra@context @sizes}{%
+ \MT@map@tlist@c\MT@tempsize\MT@check@rlist
+ }%
+ \MT@exp@cs\MT@xaddb
+ {MT@\MT@permutelist @\@tempa\MT@extra@context @sizes}%
+ \MT@tempsize
+%<debug>\MT@dinfo@nl{1}{initialising: use list for font \@tempa,\MessageBreak
+%<debug> sizes: \csname MT@\MT@permutelist @\@tempa\MT@extra@context
+%<debug> @sizes\endcsname}%
+ }{%
+% \end{macrocode}
+% Only one list can apply to a given combination.
+% \begin{macrocode}
+ \MT@ifdefined@n@T{MT@\MT@permutelist @\@tempa\MT@extra@context}{%
+ \MT@warning{\@nameuse{MT@abbr@\MT@permutelist} list
+ `\@nameuse{MT@\MT@permutelist @name}' will override list\MessageBreak
+ `\@nameuse{MT@\MT@permutelist @\@tempa\MT@extra@context}'
+ for font `\@tempa'}%
+ }%
+%<debug>\MT@dinfo@nl{1}{initialising: use list for font \@tempa
+%<debug> \ifx\MT@extra@context\@empty\else\MessageBreak
+%<debug> (context: \MT@extra@context)\fi}%
+ }%
+ \MT@xdef@n{MT@\MT@permutelist @\@tempa\MT@extra@context}%
+ {\csname MT@\MT@permutelist @name\endcsname}%
+ \fi
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@permute@define}
+% Define the commands.
+% \begin{macrocode}
+\def\MT@permute@define#1{%
+ \@tempcnta=\csname MT@cnt@#1\endcsname\relax
+ \MT@ifdefined@n@TF{MT@temp#1\the\@tempcnta}%
+ {\MT@edef@n{MT@temp#1}{\csname MT@temp#1\the\@tempcnta\endcsname}}%
+ {\MT@let@nc{MT@temp#1}\@empty}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@permute@reset}
+% Reset the commands.
+% \begin{macrocode}
+\def\MT@permute@reset#1{%
+ \@tempcnta=\@ne
+ \MT@loop
+ \MT@let@nc{MT@temp#1\the\@tempcnta}\@undefined
+ \advance\@tempcnta\@ne
+ \MT@ifdefined@n@TF{MT@temp#1\the\@tempcnta}%
+ \iftrue
+ \iffalse
+ \MT@repeat
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@check@rlist}
+%\changes{v1.8}{2005/04/20}{made recursive}
+% For every new range item in \cs{MT@tempsize}, check whether it overlaps with
+% ranges in the existing list.
+% \begin{macrocode}
+\def\MT@check@rlist#1{\expandafter\MT@check@rlist@ #1}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@check@rlist@}
+% Define the current new range and~\dots
+% \begin{macrocode}
+\def\MT@check@rlist@#1#2#3{%
+ \def\@tempb{#1}%
+ \def\@tempc{#2}%
+ \MT@if@false
+ \MT@exp@cs\MT@map@tlist@c
+ {MT@\MT@permutelist @\@tempa\MT@extra@context @sizes}%
+ \MT@check@range
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@check@range}
+% \dots~recurse through the list of existing ranges.
+% \begin{macrocode}
+\def\MT@check@range#1{\expandafter\MT@check@range@ #1}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@check@range@}
+% \cmd\@tempb\ and \cmd\@tempc\ are lower resp. upper bound of the new range,
+% \meta{\#2} and \meta{\#3} those of the existing range.
+% \begin{macrocode}
+\def\MT@check@range@#1#2#3{%
+ \MT@ifdim{#2}=\m@ne{%
+ \MT@ifdim\@tempc=\m@ne{%
+% \end{macrocode}
+%\begin{itemize}
+% \item Both items are simple sizes.
+% \begin{macrocode}
+ \MT@ifdim\@tempb={#1}\MT@if@true\relax
+ }{%
+% \end{macrocode}
+% \item Item in list is a simple size, new item is a range.
+% \begin{macrocode}
+ \MT@ifdim\@tempb>{#1}\relax{%
+ \MT@ifdim\@tempc>{#1}{%
+ \MT@if@true
+ \edef\@tempb{#1 (with range: \@tempb\space to \@tempc)}%
+ }\relax
+ }%
+ }%
+ }{%
+ \MT@ifdim\@tempc=\m@ne{%
+% \end{macrocode}
+% \item Item in list is a range, new item is a simple size.
+% \begin{macrocode}
+ \MT@ifdim\@tempb<{#2}{%
+ \MT@ifdim\@tempb<{#1}\relax\MT@if@true
+ }\relax
+ }{%
+% \end{macrocode}
+% \item Both items are ranges.
+% \begin{macrocode}
+ \MT@ifdim\@tempb<{#2}{%
+ \MT@ifdim\@tempc>{#1}{%
+ \MT@if@true
+ \edef\@tempb{#1 to #2 (with range: \@tempb\space to \@tempc)}%
+ }\relax
+ }\relax
+ }%
+ }%
+ \ifMT@if@
+ \MT@warning{\@nameuse{MT@abbr@\MT@permutelist} list
+ `\@nameuse{MT@\MT@permutelist @name}' will override\MessageBreak
+ list `#3' for font \@tempa,\MessageBreak size \@tempb}%
+% \end{macrocode}
+% If we've already found a conflict with this item, we can skip the rest of the
+% list.
+% \begin{macrocode}
+ \expandafter\MT@tlist@break
+ \fi
+}
+% \end{macrocode}
+%\end{itemize}
+%\end{macro}
+%
+%\subsection{Package options}
+%
+%\subsubsection{Declaring the options}
+%
+%\begin{macro}{\ifMT@opt@expansion}
+%\begin{macro}{\ifMT@opt@auto}
+%\begin{macro}{\ifMT@opt@DVI}
+% Keep track of whether the user explicitly set these options.
+% \begin{macrocode}
+\newif\ifMT@opt@expansion
+\newif\ifMT@opt@auto
+\newif\ifMT@opt@DVI
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@optwarn@admissible}
+% Some warnings.
+% \begin{macrocode}
+\def\MT@optwarn@admissible#1#2{%
+ \MT@warning@nl{`#1' is not an admissible value for option\MessageBreak
+ `#2'. Assuming `false'}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@optwarn@nan}
+% \begin{macrocode}
+%</package>
+%<plain>\MT@requires@latex1{
+\def\MT@optwarn@nan#1#2{%
+ \MT@warning@nl{Value `#1' for option `#2' is not a\MessageBreak number.
+ Using default value of \number\@nameuse{MT@#2@default}}%
+}
+%<plain>}\relax
+%<*package>
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@opt@def@set}
+% \begin{macrocode}
+\def\MT@opt@def@set#1{%
+ \MT@ifdefined@n@TF{MT@\@tempb @set@@\MT@val}{%
+ \MT@xdef@n{MT@\@tempb @setname}{\MT@val}%
+ }{%
+ \MT@xdef@n{MT@\@tempb @setname}{\@nameuse{MT@default@\@tempb @set}}%
+ \MT@warning@nl{The #1 set `\MT@val' is undeclared.\MessageBreak
+ Using set `\@nameuse{MT@\@tempb @setname}' instead}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+% \opt{expansion} and \opt{protrusion} may be |true|, |false|, |compatibility|,
+% |nocompatibility| and/or a \meta{set name}.
+%\changes{v1.9}{2005/10/06}{fix: use \texttt{true} as the default value}
+% \begin{macrocode}
+\MT@map@clist@n{protrusion,expansion}{%
+ \define@key{MT}{#1}[true]{%
+ \csname MT@opt@#1true\endcsname
+ \MT@map@clist@n{##1}{%
+ \KV@@sp@def\MT@val{####1}%
+ \MT@ifempty\MT@val\relax{%
+ \csname MT@#1true\endcsname
+ \edef\@tempb{\csname MT@rbba@#1\endcsname}%
+ \MT@ifstreq\MT@val{true}\relax
+ {%
+ \MT@ifstreq\MT@val{false}{%
+ \csname MT@#1false\endcsname
+ }{%
+ \MT@ifstreq\MT@val{compatibility}{%
+ \MT@let@nc{MT@\@tempb @level}\@ne
+ }{%
+ \MT@ifstreq\MT@val{nocompatibility}{%
+ \MT@let@nc{MT@\@tempb @level}\tw@
+ }{%
+% \end{macrocode}
+% If everything failed, it should be a set name.
+% \begin{macrocode}
+ \MT@opt@def@set{#1}%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+}
+% \end{macrocode}
+% \opt{activate} is a shortcut for \opt{protrusion} and \opt{expansion}.
+%\changes{v1.9e}{2006/07/18}{fix: default value for \opt{activate}: \texttt{true}}
+%\todo{add \opt{spacing} to \opt{activate}, when the feature has stabilised in \pdftex?}
+% \begin{macrocode}
+\define@key{MT}{activate}[true]{%
+ \setkeys{MT}{protrusion={#1}}%
+ \setkeys{MT}{expansion={#1}}%
+}
+% \end{macrocode}
+% \opt{spacing}, \opt{kerning} and \opt{tracking} do not have a compatibility level.
+% \begin{macrocode}
+\MT@map@clist@n{spacing,kerning,tracking}{%
+ \define@key{MT}{#1}[true]{%
+ \MT@map@clist@n{##1}{%
+ \KV@@sp@def\MT@val{####1}%
+ \MT@ifempty\MT@val\relax{%
+ \csname MT@#1true\endcsname
+ \MT@ifstreq\MT@val{true}\relax
+ {%
+ \MT@ifstreq\MT@val{false}{%
+ \csname MT@#1false\endcsname
+ }{%
+ \edef\@tempb{\csname MT@rbba@#1\endcsname}%
+ \MT@opt@def@set{#1}%
+ }%
+ }%
+ }%
+ }%
+ }%
+}
+% \end{macrocode}
+%\changes{v1.5}{2004/12/02}{new option: \opt{selected}, by default false
+% (suggested by \contributor \thanh{} <hanthethanh\at gmx.net>)}
+% ^^A private mail, 2004/11/30
+%\changes{v2.0}{2005/10/04}{(beta:1) new option: \opt{babel}, by default false
+% (language-dependent setup suggested by \contributor Ulrich Dirr <ud\at art-satz.de>)}
+% ^^A private mail, 2005/08/27
+%\begin{macro}{\MT@def@bool@opt}
+% The |true|/|false| options:
+% \opt{draft}, \opt{final} (may be inherited from the class options),
+% \opt{auto},
+% \opt{selected},
+% \opt{babel},
+% \opt{DVIoutput},
+% \opt{defersetup},
+% \opt{copyfonts}.
+% \begin{macrocode}
+\def\MT@def@bool@opt#1#2{%
+ \define@key{MT}{#1}[true]{%
+ \def\@tempa{##1}%
+ \MT@ifstreq\@tempa{true}\relax{%
+ \MT@ifstreq\@tempa{false}\relax{%
+ \MT@optwarn@admissible{##1}{#1}%
+ \def\@tempa{false}%
+ }%
+ }%
+ #2%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+% Boolean options that only set the switch.
+% \begin{macrocode}
+\MT@map@clist@n{draft,selected,babel}{%
+ \MT@def@bool@opt{#1}{\csname MT@#1\@tempa\endcsname}}
+\MT@def@bool@opt{auto}{\csname MT@auto\@tempa\endcsname \MT@opt@autotrue}
+% \end{macrocode}
+% The \opt{DVIoutput} option will change \cmd\pdfoutput\ immediately to minimise
+% the risk of confusing other packages.
+% \begin{macrocode}
+\MT@def@bool@opt{DVIoutput}{%
+ \csname if\@tempa\endcsname
+ \ifnum\pdfoutput>\z@ \MT@opt@DVItrue \fi
+ \pdfoutput\z@
+ \else
+ \ifnum\pdfoutput<\@ne \MT@opt@DVItrue \fi
+ \pdfoutput\@ne
+ \fi
+}
+% \end{macrocode}
+%\changes{v1.9a}{2005/11/21}{new option: \opt{defersetup}, by default true}
+% Setting the \opt{defersetup} option to false will restore the old behaviour,
+% where the setup took place at the time when the package was loaded. This is
+% undocumented, since I would like to learn about the cases where this is
+% necessary.
+%
+% The only problem with the new deferred setup I can think of is when a box
+% is being constructed inside the preamble and this box contains a font that is
+% not loaded before the box is being used.
+% \begin{macrocode}
+\MT@def@bool@opt{defersetup}{%
+ \csname if\@tempa\endcsname \else
+ \AtEndOfPackage{%
+ \MT@setup@
+ \let\MT@setup@\@empty
+ \let\MT@addto@setup\@firstofone
+ }%
+ \fi
+}
+% \end{macrocode}
+% \opt{copyfonts} will copy all fonts before setting them up. This allows
+% protrusion and expansion with different parameters.
+%\changes{v2.2}{2007/07/03}{new option: \opt{copyfonts}}
+% This options is also \emph{undocumented} in the hope that we can always find
+% out automatically whether it's required.
+% \begin{macrocode}
+\MT@requires@pdftex7{
+%<*lua>
+ \MT@requires@luatex{
+ \MT@def@bool@opt{copyfonts}{%
+ \csname if\@tempa\endcsname
+ \MT@error{The `copyfonts' option doesn't work with luatex}
+ {Use pdftex instead.}%
+ \fi
+ }
+ }{
+%</lua>
+ \MT@def@bool@opt{copyfonts}{%
+ \csname if\@tempa\endcsname
+ \MT@glet\MT@copy@font\MT@copy@font@
+ \else
+ \MT@glet\MT@copy@font\relax
+ \fi
+ }
+%<lua> }
+}{
+ \MT@def@bool@opt{copyfonts}{%
+ \csname if\@tempa\endcsname
+ \MT@error{The pdftex version you are using is too old\MessageBreak
+ to use the `copyfonts' option}{Upgrade pdftex.}%
+ \fi
+ }
+}
+% \end{macrocode}
+% \opt{final} is the opposite to \opt{draft}.
+%\changes{v1.4a}{2004/11/16}{new option: \opt{final}}
+% \begin{macrocode}
+\MT@def@bool@opt{final}{%
+ \csname if\@tempa\endcsname
+ \MT@draftfalse
+ \else
+ \MT@drafttrue
+ \fi
+}
+% \end{macrocode}
+% For \opt{verbose} output, we redefine \cs{MT@vinfo}.
+%\changes{v2.3}{2007/11/05}{turned some warnings into errors}
+% \begin{macrocode}
+\define@key{MT}{verbose}[true]{%
+ \let\MT@vinfo\MT@info@nl
+ \def\@tempa{#1}%
+ \MT@ifstreq\@tempa{true}\relax{%
+% \end{macrocode}
+%\changes{v1.7}{2005/03/16}{new value for \opt{verbose} option: \texttt{errors}}
+% Take problems seriously.
+% \begin{macrocode}
+ \MT@ifstreq\@tempa{errors}{%
+ \let\MT@warning \MT@warn@err
+ \let\MT@warning@nl\MT@warn@err
+ }{%
+ \let\MT@vinfo\@gobble
+% \end{macrocode}
+%\changes{v2.3}{2007/11/05}{new value for \opt{verbose} option: \texttt{silent}
+% (suggested by \contributor Karl Berry <karl\at freefriends.org>)}
+% ^^A private mail, 2007/11/05
+% Cast warnings to the winds.
+% \begin{macrocode}
+ \MT@ifstreq\@tempa{silent}{%
+ \let\MT@warning \MT@info
+ \let\MT@warning@nl\MT@info@nl
+ }{%
+ \MT@ifstreq\@tempa{false}\relax{\MT@optwarn@admissible{#1}{verbose}}%
+ }%
+ }%
+ }%
+}
+% \end{macrocode}
+%\changes{v1.5}{2004/12/02}{defaults: \opt{step}: 4
+% (suggested by \contributor \thanh{} <hanthethanh\at gmx.net>)}
+% ^^A private mail, 2004/11/30
+%\changes{v1.6}{2004/12/18}{new option: \opt{factor}, by default 1000}
+%\changes{v2.0}{2005/09/21}{(beta:1) new option: \opt{letterspace}, by default 100}
+%^^A\changes{v2.0}{2007/01/05}{option `\texttt{letterspacing}' renamed to `\opt{letterspace}'}
+% Options with numerical keys:
+% \opt{factor},
+% \opt{stretch},
+% \opt{shrink},
+% \opt{step},
+% \opt{letterspace}.
+% \begin{macrocode}
+%</package>
+%<plain>\MT@requires@latex1{
+\MT@map@clist@n{%
+%<package> stretch,shrink,step,%
+ letterspace}{%
+ \define@key{MT}{#1}[\csname MT@#1@default\endcsname]{%
+ \def\@tempa{##1 }%
+% \end{macrocode}
+% No nonsense in \cs{MT@factor} et al.?
+%\changes{v1.6}{2005/01/06}{test whether numeric options receive a number}
+% A space terminates the number.
+% \begin{macrocode}
+ \MT@ifint\@tempa
+ {\MT@edef@n{MT@#1}{\@tempa}}%
+ {\MT@optwarn@nan{##1}{#1}}%
+ }%
+}
+%<plain>}\relax
+%<*package>
+% \end{macrocode}
+% \opt{factor} will define the protrusion factor only.
+% \begin{macrocode}
+\define@key{MT}{factor}[\MT@factor@default]{%
+ \def\@tempa{#1 }%
+ \MT@ifint\@tempa
+ {\edef\MT@pr@factor{\@tempa}}
+ {\MT@optwarn@nan{#1}{factor}}%
+}
+% \end{macrocode}
+% Unit for protrusion codes.
+%\changes{v1.8}{2005/04/14}{new option: \opt{unit}, by default \texttt{character}}
+%\changes{v1.9}{2005/09/28}{option \opt{unit}: rename value \texttt{relative} to \texttt{character}}
+% \begin{macrocode}
+\define@key{MT}{unit}[character]{%
+ \def\@tempa{#1}%
+ \MT@ifstreq\@tempa{character}\relax{%
+ \MT@ifdimen\@tempa
+ {\let\MT@pr@unit\@tempa}%
+ {\MT@warning@nl{`\@tempa' is not a dimension.\MessageBreak
+ Ignoring it and setting values relative to\MessageBreak
+ character widths}}%
+ }%
+}
+% \end{macrocode}
+%
+% \subsubsection{Reading the configuration file}
+%
+% The package should just work if called without any options. Therefore,
+% expansion will be switched off by default if output is <DVI>, since it isn't
+% likely that expanded fonts are available. (This grows more important as
+% modern \TeX\ systems have switched to the \pdftex\ engine even for <DVI>
+% output, so that the user might not even be aware of the fact that she's
+% running \pdftex.)
+% \begin{macrocode}
+\MT@protrusiontrue
+\ifnum\pdfoutput<\@ne \else
+% \end{macrocode}
+% Also, we only enable expansion by default if \pdftex\ can expand the fonts
+% automatically.
+%\changes{v1.6}{2004/12/23}{defaults: turn off expansion for old \pdftex\ versions}
+% \begin{macrocode}
+ \MT@requires@pdftex4{
+ \MT@expansiontrue
+ \MT@autotrue
+ }\relax
+\fi
+% \end{macrocode}
+% The main configuration file will be loaded before processing the package
+% options.
+%\changes{v1.8}{2005/05/15}{new option: \opt{config} to load a different main
+% configuration file}
+%\begin{macro}{\MT@config@file}
+%\begin{macro}{\MT@get@config}
+% However, the \opt{config} option must of course be evaluated beforehand.
+% We also have to define a no-op for the regular option processing later.
+% \begin{macrocode}
+\define@key{MT}{config}[]{\relax}
+\def\MT@get@config#1config=#2,#3\@nil{%
+ \MT@ifempty{#2}%
+ {\def\MT@config@file{\MT@MT.cfg}}%
+ {\def\MT@config@file{#2.cfg}}%
+}
+\expandafter\expandafter\expandafter\MT@get@config
+ \csname opt@\@currname.\@currext\endcsname,config=,\@nil
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\changes{v1.4b}{2004/11/25}{fix: set catcodes before reading global configuration file
+% (reported by \contributor Christoph Bier <christoph.bier\at web.de>)}
+% ^^A MID: <30k2tqF30v483U1@uni-berlin.de>
+% Load the file.
+% \begin{macrocode}
+\IfFileExists{\MT@config@file}{%
+ \MT@info@nl{Loading configuration file \MT@config@file}%
+ \MT@begin@catcodes
+ \let\MT@begin@catcodes\relax
+ \let\MT@end@catcodes\relax
+ \let\MT@curr@file\MT@config@file
+ \input{\MT@config@file}%
+ \endgroup
+}{\MT@warning@nl{%
+ Could not find configuration file `\MT@config@file'!\MessageBreak
+ This will almost certainly cause undesired results.\MessageBreak
+ Please fix your installation}%
+}
+% \end{macrocode}
+%\begin{macro}{\MT@check@active@set}
+% We have to make sure that font sets are active. If the user didn't activate
+% any, we use those sets declared by \cs{DeclareMicrotypeSetDefault} (this
+% is done at the end of the preamble).
+% \begin{macrocode}
+\def\MT@check@active@set#1{%
+ \MT@ifdefined@n@TF{MT@#1@setname}{%
+ \MT@info@nl{Using \@nameuse{MT@abbr@#1} set `\@nameuse{MT@#1@setname}'}%
+ }{%
+ \MT@ifdefined@n@TF{MT@default@#1@set}{%
+ \MT@glet@nn{MT@#1@setname}{MT@default@#1@set}%
+ \MT@info@nl{Using default \@nameuse{MT@abbr@#1} set `\@nameuse{MT@#1@setname}'}%
+ }{%
+% \end{macrocode}
+% If no default font set has been declared in the main configuration file,
+% we use the (empty, non-existent) set `|@|',
+%\changes{v2.3d}{2008/11/24}{warning for missing default sets}
+% and issue a warning.
+% \begin{macrocode}
+ \MT@gdef@n{MT@#1@setname}{@}%
+ \MT@warning@nl{No \@nameuse{MT@abbr@#1} set chosen, no default set declared.
+ \MessageBreak Using empty set}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsubsection{Hook for other packages}\label{sub:hook}
+%
+% {\let\special@index\index\SpecialIndex@{\Microtype@Hook}{\encapchar usage}}
+%\begin{macro}{\Microtype@Hook}
+%\changes{v1.7}{2005/03/22}{new command for font package authors}
+% This hook may be used by font package authors, \eg, to declare alias fonts. If
+% it is defined, it will be executed here, \ie, after the main configuration
+% file has been loaded, and before the package options are evaluated.
+%
+% This hook was needed in versions prior to 1.9a to overcome the situation that
+% (1)~the \microtype\ package should be loaded after all font defaults have
+% been set up (hence, using \cmd\@ifpackageloaded\ in the font package was not
+% viable), and (2)~checking \cmd\AtBeginDocument\ could be too late, since
+% fonts might already have been loaded, and consequently set up, in the
+% preamble. With the new deferred setup, one could live without this command,
+% however, it remains here since it's simpler than testing whether the package
+% was loaded both in the preamble as well as at the beginning of the document
+% (which is what one would have to do).
+%
+% Package authors should check whether the command is already defined so that
+% existing definitions by other packages aren't overwritten. Example:
+%\begin{verbatim}
+%\def\MinionPro@MT@Hook{\DeclareMicrotypeAlias{MinionPro-LF}{MinionPro}}
+%\@ifpackageloaded{microtype}
+% \MinionPro@MT@Hook
+% {\@ifundefined{Microtype@Hook}
+% {\let\Microtype@Hook\MinionPro@MT@Hook}
+% {\g@addto@macro\Microtype@Hook{\MinionPro@MT@Hook}}}
+%\end{verbatim}
+% \cs{MicroType@Hook} with a capital |T| (which only existed in version 1.7) is
+% provided for compatibility reasons. At some point in the future, it will no
+% longer be available, hence it should not be used.
+% \begin{macrocode}
+\MT@ifdefined@c@T\MicroType@Hook{\MT@warning{%
+ Command \string\MicroType@Hook\space is deprecated.\MessageBreak
+ Use \string\Microtype@Hook\space instead}\MicroType@Hook}
+\MT@ifdefined@c@T\Microtype@Hook\Microtype@Hook
+% \end{macrocode}
+%\end{macro}
+%
+%\subsubsection{Changing options later}
+%
+%\begin{macro}{\microtypesetup}
+%\changes{v1.4}{2004/11/04}{fix: set the correct levels, and remember them;
+% warning when enabling an option disabled in package options}
+%\changes{v1.7}{2005/02/17}{fix: warning also when setting to \texttt{(no)compatibility}}
+%\changes{v1.9a}{2005/11/21}{inside the preamble, accepts all package options}
+%\changes{v2.3d}{2009/03/05}{select font after setup}
+%\begin{macro}{\MT@define@optionX}
+% Inside the preamble, \cs{microtypesetup} accepts the same options as the
+% package (unless \opt{defersetup}|=false|).
+% In the document body, it accepts the options:
+% |protrusion|, |expansion|, |activate|, |tracking|, |spacing| and |kerning|.
+% Specifying font sets is not allowed.
+% \begin{macrocode}
+\def\microtypesetup{\setkeys{MT}}
+\MT@addto@setup{\def\microtypesetup#1{\setkeys{MTX}{#1}\selectfont}}
+\def\MT@define@optionX#1#2{%
+ \define@key{MTX}{#1}[true]{%
+ \edef\@tempb{\csname MT@rbba@#1\endcsname}%
+ \MT@map@clist@n{##1}{%
+ \KV@@sp@def\MT@val{####1}%
+ \MT@ifempty\MT@val\relax{%
+ \@tempcnta=\m@ne
+ \MT@ifstreq\MT@val{true}{%
+% \end{macrocode}
+% Enabling micro-typography in the middle of the document is not allowed if it
+% has been disabled in the package options since fonts might already have been
+% loaded and hence wouldn't be set up.
+% \begin{macrocode}
+ \MT@checksetup{#1}{%
+ \@tempcnta=\csname MT@\@tempb @level\endcsname
+ \MT@vinfo{Enabling #1
+ (level \number\csname MT@\@tempb @level\endcsname)\on@line}%
+ }%
+ }{%
+ \MT@ifstreq\MT@val{false}{%
+ \@tempcnta=\z@
+ \MT@vinfo{Disabling #1\on@line}%
+ }{%
+ \MT@ifstreq\MT@val{compatibility}{%
+ \MT@checksetup{#1}{%
+ \@tempcnta=\@ne
+ \MT@let@nc{MT@\@tempb @level}\@ne
+ \MT@vinfo{Setting #1 to level 1\on@line}%
+ }%
+ }{%
+ \MT@ifstreq\MT@val{nocompatibility}{%
+ \MT@checksetup{#1}{%
+ \@tempcnta=\tw@
+ \MT@let@nc{MT@\@tempb @level}\tw@
+ \MT@vinfo{Setting #1 to level 2\on@line}%
+ }%
+ }{\MT@error{Value `\MT@val' for key `#1' not recognised}
+ {Use any of `true', `false', `compatibility' or
+ `nocompatibility'.}%
+ }%
+ }%
+ }%
+ }%
+ \ifnum\@tempcnta>\m@ne
+ #2\@tempcnta\relax
+ \fi
+ }%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{\MT@checksetup}
+% Test whether the feature wasn't disabled in the package options.
+% \begin{macrocode}
+\def\MT@checksetup#1{%
+ \csname ifMT@#1\endcsname
+ \expandafter\@firstofone
+ \else
+ \MT@error{You cannot enable #1 if it was disabled\MessageBreak
+ in the package options}{Load microtype with #1 enabled.}%
+ \expandafter\@gobble
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+% \begin{macrocode}
+\MT@define@optionX{protrusion}\pdfprotrudechars
+\MT@define@optionX{expansion}\pdfadjustspacing
+% \end{macrocode}
+%\begin{macro}{\MT@define@optionX@}
+% The same for |tracking|, |spacing| and |kerning|, which do not have a
+% |compatibility| level.
+% \begin{macrocode}
+\MT@requires@pdftex6{
+%<lua> \MT@requires@luatex\@firstofone{
+ \def\MT@define@optionX@#1#2{%
+ \define@key{MTX}{#1}[true]{%
+ \MT@map@clist@n{##1}{%
+ \KV@@sp@def\MT@val{####1}%
+ \MT@ifempty\MT@val\relax{%
+ \@tempcnta=\m@ne
+ \MT@ifstreq\MT@val{true}{%
+ \MT@checksetup{#1}{%
+ \@tempcnta=\@ne
+ \MT@vinfo{Enabling #1\on@line}%
+ }%
+ }{%
+ \MT@ifstreq\MT@val{false}{%
+ \@tempcnta=\z@
+ \MT@vinfo{Disabling #1\on@line}%
+ }{\MT@error{Value `\MT@val' for key `#1' not recognised}
+ {Use either `true' or `false'}%
+ }%
+ }%
+ \ifnum\@tempcnta>\m@ne
+ #2\relax
+ \fi
+ }%
+ }%
+ }%
+ }
+% \end{macrocode}
+%\end{macro}
+% We cannot simply let \cs{MT@tracking} relax, since this may select the already
+% letterspaced font instance.
+% \begin{macrocode}
+ \MT@define@optionX@{tracking}{\ifnum\@tempcnta=\z@ \let\MT@tracking\MT@set@tr@zero
+ \else \let\MT@tracking\MT@tracking@ \fi}
+ \MT@define@optionX@{spacing}{\pdfadjustinterwordglue\@tempcnta}
+ \MT@define@optionX@{kerning}{\pdfprependkern\@tempcnta
+ \pdfappendkern \@tempcnta}
+ \@gobble
+%<lua> }
+}\@firstofone
+% \end{macrocode}
+% Disable for older \pdftex\ versions and for \luatex.
+% \begin{macrocode}
+{\define@key{MTX}{tracking}[true]{\MT@warning{Ignoring tracking setup}}
+ \define@key{MTX}{kerning}[true]{\MT@warning{Ignoring kerning setup}}
+ \define@key{MTX}{spacing}[true]{\MT@warning{Ignoring spacing setup}}
+}
+\define@key{MTX}{activate}[true]{%
+ \setkeys{MTX}{protrusion={#1}}%
+ \setkeys{MTX}{expansion={#1}}%
+}
+% \end{macrocode}
+%\begin{macro}{\MT@saved@setupfont}
+% Disable everything -- may be used as a work-around in case setting up fonts
+% doesn't work in certain environments. \emph{(Undocumented.)}
+% \begin{macrocode}
+\let\MT@saved@setupfont\MT@setupfont
+% \end{macrocode}
+%\end{macro}
+% \begin{macrocode}
+\define@key{MTX}{disable}[]{%
+ \MT@info{Inactivate `\MT@MT' package}%
+ \let\MT@setupfont\relax
+}
+\define@key{MTX}{enable}[]{%
+ \MT@info{Reactivate `\MT@MT' package}%
+ \let\MT@setupfont\MT@saved@setupfont
+}
+%</package>
+% \end{macrocode}
+%
+%\subsubsection{Processing the options}\label{sssec:impl.options}
+%
+%\begin{macro}{\MT@ProcessOptionsWithKV}
+% Parse options.
+% \begin{macrocode}
+%<plain>\MT@requires@latex1{
+\def\MT@ProcessOptionsWithKV#1{%
+ \let\@tempc\relax
+ \let\MT@temp\@empty
+%<plain> \MT@requires@latex2{
+ \MT@map@clist@c\@classoptionslist{%
+ \def\CurrentOption{##1}%
+ \MT@ifdefined@n@T{KV@#1@\expandafter\MT@getkey\CurrentOption=\@nil}{%
+ \edef\MT@temp{\MT@temp,\CurrentOption,}%
+ \@expandtwoargs\@removeelement\CurrentOption
+ \@unusedoptionlist\@unusedoptionlist
+ }%
+ }%
+ \edef\MT@temp{\noexpand\setkeys{#1}%
+ {\MT@temp\@ptionlist{\@currname.\@currext}}}%
+% \end{macrocode}
+% \pkg{eplain} can handle package options.
+% \begin{macrocode}
+%<*plain>
+ }{\edef\MT@temp{\noexpand\setkeys{#1}%
+ {\csname usepkg@options@\usepkg@pkg\endcsname}}}
+%</plain>
+ \MT@temp
+ \MT@clear@options
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@getkey}
+% For |key=val| in class options.
+%\changes{v2.3a}{2008/02/09}{fix: \texttt{key\quotechar=val} in class options list}
+% \begin{macrocode}
+\def\MT@getkey#1=#2\@nil{#1}
+% \end{macrocode}
+%\end{macro}
+% \begin{macrocode}
+\MT@ProcessOptionsWithKV{MT}
+%<plain>}\relax
+%<*package>
+% \end{macrocode}
+% Now we can take the appropriate actions. We also tell the log file which
+% options the user has chosen (in case it's interested).
+% \begin{macrocode}
+\MT@addto@setup{%
+\ifMT@draft
+% \end{macrocode}
+% We disable most of what we've just defined in the \arabic{CodelineNo} lines
+% above if we are running in draft mode.
+%\changes{v1.7}{2005/02/06}{warning when running in draft mode}
+% \begin{macrocode}
+ \MT@warning@nl{`draft' option active.\MessageBreak
+ Disabling all micro-typographic extensions.\MessageBreak
+ This might lead to different line and page breaks}%
+ \let\MT@setupfont\relax
+ \renewcommand*\LoadMicrotypeFile[1]{}%
+ \renewcommand*\microtypesetup[1]{}%
+ \renewcommand*\microtypecontext[1]{}%
+ \renewcommand*\lsstyle{}%
+\else
+% \end{macrocode}
+% For <DVI> output, the user must have explicitly passed the \opt{expansion}
+% option to the package.
+%\changes{v1.5}{2004/12/02}{defaults: turn off expansion for <DVI> output}
+% \begin{macrocode}
+ \ifnum\pdfoutput<\@ne
+ \ifMT@opt@expansion \else
+ \MT@expansionfalse
+ \fi
+ \fi
+% \end{macrocode}
+% \pdftex\ can create <DVI> output, too. However, both the <DVI> viewer and
+% |dvips| need to find actual fonts. Therefore, expansion will only work if the
+% fonts for different degrees of expansion are readily available.
+%
+%\changes{v1.4b}{2004/11/19}{new message if \cmd\pdfoutput\ is changed}
+% Some packages depend on the value of \cmd\pdfoutput\ and will get confused if
+% it is changed after they have been loaded. These packages are, among others:
+% \pkg{color}, \pkg{graphics}, \pkg{hyperref}, \pkg{crop}, \pkg{contour},
+% \pkg{pstricks} and, as a matter of course, \pkg{ifpdf}. Instead of testing
+% for each package (that's not our job), we only say that it was \microtype\
+% that changed it. This must be sufficient!
+% \begin{macrocode}
+ \MT@info@nl{Generating \ifnum\pdfoutput<\@ne DVI \else PDF \fi output%
+ \ifMT@opt@DVI\space (changed by \MT@MT)\fi}%
+% \end{macrocode}
+% Working on font copies?
+% \begin{macrocode}
+ \ifx\MT@copy@font\relax\else \MT@info@nl{Using font copies for contexts}\fi
+% \end{macrocode}
+% Fix the font sets.
+% \begin{macrocode}
+ \MT@map@tlist@c\MT@font@sets\MT@fix@font@set
+% \end{macrocode}
+% Protrusion.
+% \begin{macrocode}
+ \ifMT@protrusion
+ \edef\MT@active@features{\MT@active@features,pr}%
+ \pdfprotrudechars\MT@pr@level
+ \MT@info@nl{Character protrusion enabled (level \number\MT@pr@level)%
+ \ifnum\MT@pr@factor=\MT@factor@default \else,\MessageBreak
+ factor: \number\MT@pr@factor\fi
+ \ifx\MT@pr@unit\@empty \else,\MessageBreak unit: \MT@pr@unit\fi}%
+ \MT@check@active@set{pr}%
+ \else
+ \let\MT@protrusion\relax
+ \MT@info@nl{No character protrusion}%
+ \fi
+% \end{macrocode}
+% Expansion.
+% \begin{macrocode}
+ \ifMT@expansion
+% \end{macrocode}
+% Set up the values for font expansion: if \opt{stretch} has not been specified, we
+% take the default value of 20.
+% \begin{macrocode}
+ \ifnum\MT@stretch=\m@ne
+ \let\MT@stretch\MT@stretch@default
+ \fi
+% \end{macrocode}
+% If \opt{shrink} has not been specified, it will inherit the value from \opt{stretch}.
+% \begin{macrocode}
+ \ifnum\MT@shrink=\m@ne
+ \let\MT@shrink\MT@stretch
+ \fi
+% \end{macrocode}
+%\changes{v2.3d}{2008/11/19}{default \texttt{step}: 1 for \pdftex\ versions $\geq$ 1.40}
+% If \opt{step} has not been specified, we will just set it to 1 for recent
+% \pdftex\ versions. My tests did not show much difference neither in
+% compilation time (within the margin of error) nor in file size (less than
+% 1\% difference for \file{microtype.pdf} with |step=1| compared to |step=5|).
+%\changes{v1.5}{2004/12/02}{defaults: calculate \opt{step} as
+% min(\texttt{stretch},\texttt{shrink})/5}
+% With older versions, we set it to min(\opt{stretch},\opt{shrink})/5,
+% rounded off, minimum value 1.
+%\changes{v1.9}{2005/07/08}{warning if user requested zero \opt{step}}
+% \begin{macrocode}
+ \MT@requires@pdftex6{\def\MT@step{1 }}{%
+ \ifnum\MT@step=\m@ne
+ \ifnum\MT@stretch>\MT@shrink
+ \ifnum\MT@shrink=\z@
+ \@tempcnta=\MT@stretch
+ \else
+ \@tempcnta=\MT@shrink
+ \fi
+ \else
+ \ifnum\MT@stretch=\z@
+ \@tempcnta=\MT@shrink
+ \else
+ \@tempcnta=\MT@stretch
+ \fi
+ \fi
+ \divide\@tempcnta 5\relax
+ \else
+ \@tempcnta=\MT@step
+ \ifnum\@tempcnta=\z@
+ \MT@warning@nl{The expansion step cannot be set to zero.\MessageBreak
+ Setting it to one}
+ \fi
+ \fi
+ \ifnum\@tempcnta=\z@ \@tempcnta=\@ne \fi
+ \edef\MT@step{\number\@tempcnta\space}}%
+% \end{macrocode}
+%\begin{macro}{\MT@auto}
+% Automatic expansion of the font? This new feature of \pdftex\ 1.20 makes the
+% \textit{\fontfamily{pzc}\selectfont hz}~programme really usable.
+% It must be either `|autoexpand|' or empty (or `|1000|' for older versions of
+% \pdftex).
+% \begin{macrocode}
+ \let\MT@auto\@empty
+ \ifMT@auto
+ \MT@requires@pdftex4{%
+% \end{macrocode}
+%\end{macro}
+% We turn off automatic expansion if output mode is <DVI>.
+%\changes{v1.5}{2004/12/02}{disable automatic expansion for <DVI> output}
+% \begin{macrocode}
+ \ifnum\pdfoutput<\@ne
+ \ifMT@opt@auto
+ \MT@error{%
+ Automatic font expansion only works for PDF output.\MessageBreak
+ However, you are creating a DVI file}
+ {If you have created expanded fonts instances, remove `auto' from%
+ \MessageBreak the package options. Otherwise, you have to switch
+ off expansion\MessageBreak completely.}%
+ \fi
+ \MT@autofalse
+ \else
+ \def\MT@auto{autoexpand}%
+ \fi
+% \end{macrocode}
+% Also, if \pdftex\ is too old.
+%\changes{v1.1}{2004/09/13}{issue an error instead of a warning, when \pdftex\
+% version is too old for \texttt{autoexpand}}
+%\changes{v1.6}{2004/12/23}{disable automatic expansion for old \pdftex\ versions}
+% \begin{macrocode}
+ }{%
+ \MT@error{%
+ The pdftex version you are using is too old for\MessageBreak
+ automatic font expansion}%
+ {If you have created expanded fonts instances, remove `auto' from\MessageBreak
+ the package options. Otherwise, you have to switch off expansion\MessageBreak
+ completely, or upgrade pdftex to version 1.20 or newer.}%
+ \MT@autofalse
+ \def\MT@auto{1000 }%
+ }%
+ \else
+% \end{macrocode}
+% No automatic expansion.
+% \begin{macrocode}
+ \MT@requires@pdftex4\relax{%
+ \def\MT@auto{1000 }%
+ }%
+ \fi
+% \end{macrocode}
+% Choose the appropriate macro for selected expansion.
+% \begin{macrocode}
+ \ifMT@selected
+ \let\MT@set@ex@codes\MT@set@ex@codes@s
+ \else
+ \let\MT@set@ex@codes\MT@set@ex@codes@n
+ \fi
+% \end{macrocode}
+% Filter out |stretch=0,shrink=0|, since it would result in a \pdftex\ error.
+%\changes{v1.9}{2005/07/08}{disable expansion if both \opt{step} and \opt{shrink} are zero}
+% \begin{macrocode}
+ \ifnum\MT@stretch=\z@
+ \ifnum\MT@shrink=\z@
+ \MT@warning@nl{%
+ Both the stretch and shrink limit are set to zero.\MessageBreak
+ Disabling font expansion}%
+ \MT@expansionfalse
+ \fi
+ \fi
+ \fi
+ \ifMT@expansion
+ \edef\MT@active@features{\MT@active@features,ex}%
+ \pdfadjustspacing\MT@ex@level
+ \MT@info@nl{\ifMT@auto A\else Non-a\fi utomatic font expansion enabled
+ (level \number\MT@ex@level),\MessageBreak
+ stretch: \number\MT@stretch, shrink: \number\MT@shrink,
+ step: \number\MT@step, \ifMT@selected\else non-\fi selected}%
+% \end{macrocode}
+%\changes{v2.2}{2007/01/28}{warning if \opt{stretch} or \opt{shrink} aren't multiples of \opt{step}}
+%\begin{macro}{\MT@check@step}
+% Check whether \opt{stretch} and \opt{shrink} are multiples of \opt{step}.
+% \begin{macrocode}
+ \def\MT@check@step#1{%
+ \@tempcnta=\csname MT@#1\endcsname
+ \divide\@tempcnta \MT@step
+ \multiply\@tempcnta \MT@step
+ \ifnum\@tempcnta=\csname MT@#1\endcsname\else
+ \MT@warning@nl{The #1 amount is not a multiple of step.\MessageBreak
+ The effective maximum #1 is \the\@tempcnta\space
+ (step \number\MT@step)}%
+ \fi
+ }%
+ \MT@check@step{stretch}%
+ \MT@check@step{shrink}%
+ \MT@check@active@set{ex}%
+% \end{macrocode}
+%\end{macro}
+%\changes{v1.7}{2005/03/02}{modify \cmd\showhyphens}
+% Inside \cmd\showhyphens, font expansion should be disabled.
+% \begin{macrocode}
+ \CheckCommand*\showhyphens[1]{\setbox0\vbox{%
+ \color@begingroup\everypar{}\parfillskip\z@skip
+ \hsize\maxdimen\normalfont\pretolerance\m@ne\tolerance\m@ne
+ \hbadness\z@\showboxdepth\z@\ #1\color@endgroup}}%
+% \end{macrocode}
+%\begin{macro}{\showhyphens}
+% I wonder why it's defined globally (in \file{ltfssbas.dtx})?
+% \begin{macrocode}
+ \gdef\showhyphens#1{\setbox0\vbox{%
+ \color@begingroup\pdfadjustspacing\z@\everypar{}\parfillskip\z@skip
+ \hsize\maxdimen\normalfont\pretolerance\m@ne\tolerance\m@ne
+ \hbadness\z@\showboxdepth\z@\ #1\color@endgroup}}%
+% \end{macrocode}
+%\end{macro}
+% \begin{macrocode}
+ \else
+ \let\MT@expansion\relax
+ \MT@info@nl{No font expansion}%
+ \fi
+}
+\MT@requires@pdftex6{
+% \end{macrocode}
+%\begin{macro}{\MT@warn@lua}
+% Switch off the features that don't work with \luatex.
+% \begin{macrocode}
+%<*lua>
+ \def\MT@warn@lua#1{%
+ \MT@error{The `#1' feature doesn't currently work\MessageBreak with luatex}
+ {Use pdftex instead.}%
+ \csname MT@#1false\endcsname
+ \MT@let@nc{MT@#1}\relax
+ }
+%</lua>
+% \end{macrocode}
+%\end{macro}
+% \begin{macrocode}
+%</package>
+ \MT@addto@setup{%
+%<*package>
+% \end{macrocode}
+% Tracking, spacing and kerning.
+% \begin{macrocode}
+ \ifMT@tracking
+%<lua> \MT@requires@luatex{\MT@warn@lua{tracking}}{%
+ \edef\MT@active@features{\MT@active@features,tr}%
+ \MT@info@nl{Tracking enabled}%
+ \MT@check@active@set{tr}%
+% \end{macrocode}
+% Enable protrusion for compensation at the line edges.
+%\changes{v2.3}{2007/07/27}{enable protrusion when tracking is enabled}
+% \begin{macrocode}
+ \ifMT@protrusion\else\pdfprotrudechars\@ne\fi
+%<lua> }%
+ \else
+ \let\MT@tracking\relax
+ \MT@info@nl{No tracking}%
+ \fi
+ \ifMT@spacing
+%<lua> \MT@requires@luatex{\MT@warn@lua{spacing}}{%
+ \edef\MT@active@features{\MT@active@features,sp}%
+ \pdfadjustinterwordglue\@ne
+ \MT@info@nl{Adjustment of interword spacing enabled}%
+ \MT@check@active@set{sp}%
+%<lua> }%
+ \else
+ \let\MT@spacing\relax
+ \MT@info@nl{No adjustment of interword spacing}%
+ \fi
+ \ifMT@kerning
+%<lua> \MT@requires@luatex{\MT@warn@lua{kerning}}{%
+ \edef\MT@active@features{\MT@active@features,kn}%
+ \pdfprependkern\@ne
+ \pdfappendkern\@ne
+ \MT@info@nl{Adjustment of character kerning enabled}%
+ \MT@check@active@set{kn}%
+%<lua> }%
+ \else
+ \let\MT@kerning\relax
+ \MT@info@nl{No adjustment of character kerning}%
+ \fi
+%</package>
+% \end{macrocode}
+%\begin{macro}{\MT@warn@tracking@DVI}
+%\changes{v2.2}{2007/02/11}{warning when letterspacing in DVI mode}
+% We issue a warning, when letterspacing in <DVI> mode, since it will probably
+% not work. We also switch on protrusion if it isn't already, to compensate for
+% the letterspacing kerns.
+% \begin{macrocode}
+ \ifnum\pdfoutput<\@ne
+ \def\MT@warn@tracking@DVI{%
+ \MT@warning@nl{%
+ You are using tracking/letterspacing in DVI mode.\MessageBreak
+ This will probably not work, unless the post-\MessageBreak
+ processing program (dvips, dvipdfm(x), ...) is\MessageBreak
+ able to create the virtual fonts on the fly}%
+ \MT@glet\MT@warn@tracking@DVI\relax
+ }%
+ \else
+ \def\MT@warn@tracking@DVI{%
+ \ifnum\pdfprotrudechars<\@ne \global\pdfprotrudechars\@ne \fi
+ \MT@glet\MT@warn@tracking@DVI\relax
+ }%
+ \fi
+% \end{macrocode}
+%\end{macro}
+% \begin{macrocode}
+ \ifnum\MT@letterspace=\m@ne
+ \let\MT@letterspace\MT@letterspace@default
+ \else
+ \MT@ls@too@large\MT@letterspace
+ \fi
+ }%
+% \end{macrocode}
+% If \pdftex\ is too old, we disable tracking, spacing and kerning,
+%\changes{v2.3a}{2008/02/16}{error messages if \pdftex\ is too old for extensions}
+% and throw an error message.
+% \begin{macrocode}
+%<*package>
+}{
+ \MT@addto@setup{%
+ \ifMT@tracking
+ \MT@error{Tracking only works with pdftex version 1.40\MessageBreak
+ or newer. Switching it off}{Upgrade pdftex.}%
+ \else
+ \MT@info@nl{No tracking (pdftex too old)}%
+ \fi
+ \ifMT@spacing
+ \MT@error{Adjustment of interword spacing only works with\MessageBreak
+ pdftex version 1.40 or newer. Switching it off}{Upgrade pdftex.}%
+ \else
+ \MT@info@nl{No adjustment of interword spacing (pdftex too old)}%
+ \fi
+ \ifMT@kerning
+ \MT@error{Character kerning only works with\MessageBreak
+ pdftex version 1.40 or newer. Switching it off}{Upgrade pdftex.}%
+ \else
+ \MT@info@nl{No adjustment of character kerning (pdftex too old)}%
+ \fi
+ }
+}
+% \end{macrocode}
+% \cs{DisableLigatures} is only admissible in the preamble, therefore we can
+% now disable the corresponding macro, if it was never called.
+%\changes{v2.0}{2006/12/14}{maybe disable \cs{MT@noligatures} after the preamble}
+% \begin{macrocode}
+\MT@requires@pdftex5{
+ \MT@addto@setup{%
+ \ifMT@noligatures \else
+ \let\MT@noligatures\relax
+ \fi
+ }
+}\relax
+% \end{macrocode}
+% Remove the leading comma in \cs{MT@active@features}, and set the
+% document switch to true.
+% \begin{macrocode}
+\MT@addto@setup{%
+ \ifx\MT@active@features\@empty \else
+ \edef\MT@active@features{\expandafter\@gobble\MT@active@features}%
+ \fi
+ \MT@documenttrue
+}
+% \end{macrocode}
+%\begin{macro}{\MT@set@babel@context}
+% Interaction with \pkg{babel}.
+% \begin{macrocode}
+\def\MT@set@babel@context#1{%
+ \MT@ifdefined@n@TF{MT@babel@#1}{%
+ \MT@vinfo{*** Changing to language context `#1'\MessageBreak\on@line}%
+ \expandafter\MT@exp@one@n\expandafter\microtypecontext
+ \csname MT@babel@#1\endcsname
+ }{%
+ \microtypecontext{protrusion=,expansion=,spacing=,kerning=}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\MT@shorthandoff}
+% Active characters can only be switched off if \pkg{babel} isn't loaded after
+% \microtype.
+% \begin{macrocode}
+\@ifpackageloaded{babel}{
+ \def\MT@shorthandoff#1#2{%
+ \MT@info@nl{Switching off #1 babel's active characters (#2)}%
+ \shorthandoff{#2}}
+}{
+ \def\MT@shorthandoff#1#2{%
+ \MT@error{You must load `babel' before `\MT@MT'}
+ {Otherwise, `\MT@MT' cannot switch off #1 babel's\MessageBreak
+ active characters.}}
+}
+% \end{macrocode}
+%\end{macro}
+% We patch the language switching commands to enable language-dependent setup.
+% \begin{macrocode}
+\MT@addto@setup{%
+ \ifMT@babel
+ \@ifpackageloaded{babel}{%
+ \MT@info@nl{Redefining babel's language switching commands}%
+ \let\MT@orig@select@language\select@language
+ \def\select@language#1{%
+ \MT@orig@select@language{#1}%
+ \MT@set@babel@context{#1}%
+ }%
+ \let\MT@orig@foreign@language\foreign@language
+ \def\foreign@language#1{%
+ \MT@orig@foreign@language{#1}%
+ \MT@set@babel@context{#1}%
+ }%
+ \ifMT@kerning
+% \end{macrocode}
+%\todo{make switching off of babel's shorthands configurable}
+% Disable French \pkg{babel}'s active characters.
+%\changes{v2.0}{2006/10/10}{(beta:8) option `\opt{babel}': fix: switch off French
+% \pkg{babel}'s shorthands properly
+% (reported by \contributor Daniel Flipo <daniel.flipo\at univ-lille1.fr>)}
+% ^^A private mail, 2006/10/09
+% \begin{macrocode}
+ \MT@if@false
+ \MT@with@babel@and@T{french} \MT@if@true
+ \MT@with@babel@and@T{frenchb} \MT@if@true
+ \MT@with@babel@and@T{francais}\MT@if@true
+ \MT@with@babel@and@T{canadien}\MT@if@true
+ \MT@with@babel@and@T{acadian} \MT@if@true
+ \ifMT@if@\MT@shorthandoff{French}{:;!?}\fi
+% \end{macrocode}
+% Disable Turkish \pkg{babel}'s active characters.
+%\changes{v2.0}{2006/10/10}{(beta:8) option `\opt{babel}': switch off Turkish \pkg{babel}'s shorthands}
+%\changes{v2.3}{2007/10/03}{fix: really switch off Turkish shorthands}
+% \begin{macrocode}
+ \MT@if@false
+ \MT@with@babel@and@T{turkish} \MT@if@true
+ \ifMT@if@\MT@shorthandoff{Turkish}{:!=}\fi
+ \fi
+% \end{macrocode}
+% In case \pkg{babel} was loaded before \microtype:
+% \begin{macrocode}
+ \MT@set@babel@context\languagename
+ }{%
+ \MT@warning@nl{You did not load the babel package.\MessageBreak
+ The `babel' option won't have any effect}%
+ }%
+ \fi
+}
+% \end{macrocode}
+% Now we close the \cs{fi} from \cs{ifMT@draft}.
+% \begin{macrocode}
+\MT@addto@setup{\fi
+% \end{macrocode}
+% Set up the current font, most likely the normal font. This has to come after
+% all of the setup (including anything from the preamble) has been dealt with.
+% \begin{macrocode}
+ \selectfont}
+% \end{macrocode}
+%\begin{macro}{\MT@curr@file}
+% This is the current file (hopefully with the correct extension).
+% \begin{macrocode}
+\edef\MT@curr@file{\jobname.tex}
+% \end{macrocode}
+%\end{macro}
+% Finally, execute the setup macro at the end of the preamble, and empty it
+% (the \pkg{combine} class calls it repeatedly).
+%\changes{v2.3d}{2009/02/05}{move setup to the very end
+% (for \contributor Colin Rourke <gt\at msp.warwick.ac.uk>)}
+% ^^A private mail, 2009/02/03
+% \begin{macrocode}
+%</package>
+%<plain>\MT@requires@latex1{
+\AtBeginDocument{\MT@setup@ \MT@glet\MT@setup@\@empty}
+%<plain>}\relax
+% \end{macrocode}
+% Warning if \cmd\nonfrenchspacing\ is active, since space factors will be
+% ignored with \cmd\pdfadjustinterwordglue\,|>|\,0. Why 1500? Because some
+% packages redefine \cmd\frenchspacing.\footnote{
+% Cf. the \texttt{c.t.t.} thread `\cmd\frenchspacing\ with <AMS> packages
+% and babel', started by Philipp Lehman on 16~August 2005,
+% <MID>:~\nolinkurl{ddtbaj$rob$1@online.de}}
+% This has to be checked after the setup has taken place. There still will be a
+% false warning if \pkg{babel} is loaded after \microtype\ (without the
+% \opt{babel} option).
+% \begin{macrocode}
+%<*package>
+\MT@requires@pdftex6{
+ \AtBeginDocument{%
+ \ifMT@spacing
+ \ifMT@babel \else
+ \ifnum\sfcode`\. > 1500
+ \MT@ifstreq\MT@sp@context{nonfrench}\relax{%
+ \MT@warning@nl{%
+ \string\nonfrenchspacing\space is active. Adjustment of\MessageBreak
+ interword spacing will disable it. You might want\MessageBreak
+ to add `\@backslashchar\MT@MT context{spacing=nonfrench}'\MessageBreak
+ to your preamble}%
+ }%
+ \fi
+ \fi
+ \fi
+ }
+}\relax
+%</package>
+% \end{macrocode}
+% Restore catcodes.
+% \begin{macrocode}
+\MT@restore@catcodes
+% \end{macrocode}
+% That was that.
+% \begin{macrocode}
+%</package|letterspace>
+% \end{macrocode}
+%
+% ^^A -------------------------------------------------------------------------
+%\NoIndexing ^^A from now on, don't bother indexing
+%
+%\section{Configuration files}
+%\changes{v1.6}{2005/01/24}{restructure \file{dtx} file}
+%
+% Let's now write the font configuration files.
+% \begin{macrocode}
+%<*config>
+
+% \end{macrocode}
+%\subsection{Font sets}
+%\GeneralChanges{Font sets}
+%
+% We first declare some sets in the main configuration file.
+%
+% \begin{macrocode}
+%<*m-t>
+%%% -----------------------------------------------------------------------
+%%% FONT SETS
+
+\DeclareMicrotypeSet{all}
+ { }
+
+% \end{macrocode}
+%\changes{v1.2}{2004/10/02}{new: \texttt{allmath} and \texttt{basicmath}}
+%\changes{v1.8}{2005/05/25}{add <U> encoding to \texttt{allmath}}
+%\changes{v1.9}{2005/08/17}{add <OT4> encoding to text sets}
+%\changes{v1.9}{2005/08/17}{add <T5> encoding to text sets}
+%\changes{v1.9d}{2006/04/20}{add <QX> encoding to text sets}
+%\changes{v2.3e}{2009/10/28}{add <T2A> encoding}
+% \begin{macrocode}
+\DeclareMicrotypeSet{allmath}
+ { encoding = {OT1,T1,T2A,LY1,OT4,QX,T5,TS1,OML,OMS,U} }
+
+\DeclareMicrotypeSet{alltext}
+ { encoding = {OT1,T1,T2A,LY1,OT4,QX,T5,TS1} }
+
+% \end{macrocode}
+%\changes{v1.9d}{2006/02/22}{\texttt{md*} instead of \texttt{m} series in basic sets}
+% \begin{macrocode}
+\DeclareMicrotypeSet{basicmath}
+ { encoding = {OT1,T1,T2A,LY1,OT4,QX,T5,OML,OMS},
+ family = {rm*,sf*},
+ series = {md*},
+ size = {normalsize,footnotesize,small,large}
+ }
+
+\DeclareMicrotypeSet{basictext}
+ { encoding = {OT1,T1,T2A,LY1,OT4,QX,T5},
+ family = {rm*,sf*},
+ series = {md*},
+ size = {normalsize,footnotesize,small,large}
+ }
+
+% \end{macrocode}
+%\changes{v2.0}{2006/12/28}{add \texttt{smallcaps} set}
+%\changes{v2.3e}{2009/06/01}{\texttt{sc*} instead of \texttt{sc} in \texttt{smallcaps} set}
+% \begin{macrocode}
+\DeclareMicrotypeSet{smallcaps}
+ { encoding = {OT1,T1,T2A,LY1,OT4,QX,T5,TS1},
+ shape = {sc*}
+ }
+
+% \end{macrocode}
+%\changes{v2.0}{2006/12/21}{add \texttt{footnotesize} and \texttt{scriptsize} sets}
+% \begin{macrocode}
+\DeclareMicrotypeSet{footnotesize}
+ { encoding = {OT1,T1,T2A,LY1,OT4,QX,T5,TS1},
+ size = {-small}
+ }
+
+\DeclareMicrotypeSet{scriptsize}
+ { encoding = {OT1,T1,T2A,LY1,OT4,QX,T5,TS1},
+ size = {-footnotesize}
+ }
+
+\DeclareMicrotypeSet{normalfont}
+ { font = */*/*/*/* }
+
+% \end{macrocode}
+% The default sets.
+%\changes{v2.2}{2007/04/15}{default set for tracking: \texttt{smallcaps}}
+% \begin{macrocode}
+%%% -----------------------------------------------------------------------
+%%% DEFAULT SETS
+
+\DeclareMicrotypeSetDefault[protrusion]{alltext}
+\DeclareMicrotypeSetDefault[expansion] {basictext}
+\DeclareMicrotypeSetDefault[spacing] {basictext}
+\DeclareMicrotypeSetDefault[kerning] {alltext}
+\DeclareMicrotypeSetDefault[tracking] {smallcaps}
+
+% \end{macrocode}
+%
+%\subsection{Font variants and aliases}
+%
+% \begin{macrocode}
+%%% -----------------------------------------------------------------------
+%%% FONT VARIANTS AND ALIASES
+
+% \end{macrocode}
+% These are the variants I happen to be using (expert encoding, oldstyle
+% numerals, swashes, alternative, display, inferior and superior numerals):
+% \begin{macrocode}
+\DeclareMicrotypeVariants{x,j,w,a,d,0,1}
+
+% \end{macrocode}
+% Other candidates: |2|~(proportional digits), |e|~(engraved), |f|~(Fraktur),
+% |g|~(small text), |h|~(shadow), |l|~(outline), |n|~(informal),
+% |p|~(ornaments), |r|~(roman), |s|~(sans serif), |t|~(typewriter).
+% I've omitted them since they seem hardly be used and/or they are actually
+% more than a variant, \ie, they shouldn't share a file.
+%
+%\bigskip\noindent
+% Fonts that are `the same': The Latin Modern fonts, the virtual fonts from the
+% \pkg{ae} and \pkg{zefonts}, and the \pkg{eco} and \pkg{hfoldsty} packages
+% (oldstyle numerals) all inherit the (basic) settings from Computer Modern
+% Roman. Some of them are in part overwritten later.
+%\changes{v1.2}{2004/10/03}{declare \texttt{cmor} as an alias of \texttt{cmr}}
+%\changes{v1.3}{2004/10/22}{declare \texttt{aer}, \texttt{zer} and \texttt{hfor}
+% as aliases of \texttt{cmr}}
+% \begin{macrocode}
+\DeclareMicrotypeAlias{lmr} {cmr} % lmodern
+\DeclareMicrotypeAlias{aer} {cmr} % ae
+\DeclareMicrotypeAlias{zer} {cmr} % zefonts
+\DeclareMicrotypeAlias{cmor}{cmr} % eco
+\DeclareMicrotypeAlias{hfor}{cmr} % hfoldsty
+% \end{macrocode}
+% The packages \pkg{pxfonts} and \pkg{txfonts} fonts inherit Palatino and Times
+% settings respectively,
+%\changes{v1.8}{2005/04/19}{declare \texttt{pxr} and \texttt{txr}
+% as aliases of \texttt{ppl} resp. \texttt{ptm}}
+% also the \TeX\ Gyre fonts Pagella and Termes (formerly: \pkg{qfonts}).
+%\changes{v1.9}{2005/08/16}{declare \texttt{qpl} and \texttt{qtm} (\pkg{qfonts}, \TeX\ Gyre)
+% as aliases of \texttt{ppl} resp. \texttt{ptm}}
+% \begin{macrocode}
+\DeclareMicrotypeAlias{pxr} {ppl} % pxfonts
+\DeclareMicrotypeAlias{qpl} {ppl} % TeX Gyre Pagella (formerly: qfonts/QuasiPalatino)
+% \end{macrocode}
+% The `<FPL> Neu' fonts, a `re-implementation' of Palatino.
+%\changes{v2.2}{2007/05/27}{declare <FPL> Neu as an alias of Palatino}
+% \begin{macrocode}
+\DeclareMicrotypeAlias{fp9x}{pplx} % FPL Neu
+\DeclareMicrotypeAlias{fp9j}{pplj} % "
+\DeclareMicrotypeAlias{txr} {ptm} % txfonts
+\DeclareMicrotypeAlias{qtm} {ptm} % TeX Gyre Termes (formerly: qfonts/QuasiTimes)
+% \end{macrocode}
+%\todo{check Times variants}
+% More Times variants, to be checked: |pns|, |mns| (TimesNewRomanPS); |mnt|
+% (Times\-NewRomanMT, TimesNRSevenMT), |mtm| (TimesSmallTextMT); |pte|
+% (TimesEuropa); |ptt| (TimesTen); TimesEighteen; TimesModernEF.
+%
+% The \pkg{eulervm} package virtually extends the Euler fonts.
+%\changes{v1.9e}{2006/07/28}{declare \texttt{zeur} and \texttt{zeus} (\pkg{eulervm})
+% as aliases of \texttt{eur} resp. \texttt{eus} (\pkg{euler})}
+% \begin{macrocode}
+\DeclareMicrotypeAlias{zeur}{eur} % Euler VM
+\DeclareMicrotypeAlias{zeus}{eus} % "
+% \end{macrocode}
+% MicroPress's Charter version (\pkg{chmath}).
+%\changes{v2.2}{2007/06/08}{declare \texttt{chr} (\pkg{chmath}) as an alias of Charter
+% (reported by \contributor Geoff Vallis <gkv\at Princeton.EDU>)}
+% ^^A private mail, 2007/06/07
+% \begin{macrocode}
+\DeclareMicrotypeAlias{chr} {bch} % CH Math
+% \end{macrocode}
+% The \pkg{mathdesign} package provides math fonts matching Bitstream Charter
+%\changes{v1.9a}{2005/10/31}{declare \texttt{mdbch} (\pkg{mathdesign})
+% as an alias of Charter}
+% and <URW> Garamond.
+% \begin{macrocode}
+\DeclareMicrotypeAlias{mdbch}{bch} % mathdesign/Charter
+\DeclareMicrotypeAlias{mdugm}{ugm} % mathdesign/URW Garamond
+% \end{macrocode}
+% <URW> Letter Gothic is similar enough to Bitstream Letter Gothic to share the
+% configuration.
+% \begin{macrocode}
+\DeclareMicrotypeAlias{ulg} {blg} % URW LetterGothic -> Bitstream LetterGothic12Pitch
+% \end{macrocode}
+% Euro symbol fonts, to save some files.
+% \begin{macrocode}
+\DeclareMicrotypeAlias{zpeus} {zpeu} % Adobe Euro sans -> serif
+\DeclareMicrotypeAlias{eurosans}{zpeu} % Adobe Euro sans -> serif
+\DeclareMicrotypeAlias{euroitcs}{euroitc} % ITC Euro sans -> serif
+
+% \end{macrocode}
+%
+%\subsection{Interaction with \pkg{babel}}
+%
+% Contexts that are to be set when switching to a language.
+% \begin{macrocode}
+%%% -----------------------------------------------------------------------
+%%% INTERACTION WITH THE `babel' PACKAGE
+
+\DeclareMicrotypeBabelHook
+ {english,UKenglish,british,USenglish,american}
+ {kerning=, spacing=nonfrench}
+
+\DeclareMicrotypeBabelHook
+ {french,francais,acadian,canadien}
+ {kerning=french, spacing=}
+
+\DeclareMicrotypeBabelHook
+ {turkish}
+ {kerning=turkish, spacing=}
+
+% \end{macrocode}
+%\GeneralChanges*
+%
+% \subsection{Note on admissible characters}
+%
+% All printable <ASCII> characters are allowed in the settings, with the
+% following exceptions (on the left hand side, the replacements on the right):
+%
+%\begin{tabbing}
+% |\|\quad\=:\quad\=\cmd\textbackslash \\
+% |{| \>:\> \cmd\textbraceleft \\
+% |}| \>:\> \cmd\textbraceright \\
+% |^| \>:\> \cmd\textasciicircum \\
+% |%| \>:\> \cmd\% \\
+% |#| \>:\> \cmd\#
+%\end{tabbing}
+%
+%\noindent
+% Comma and equal sign must be guarded with braces (`|{,}|', `|{=}|') to keep
+% \pkg{keyval} happy.
+%
+% Character commands are allowed as far as they have been defined in the proper
+% \LaTeX\ way, that is, when they have been assigned a slot in the font
+% encoding with \cmd\DeclareTextSymbol\ or \cmd\DeclareTextComposite.
+% Characters defined via \cmd\chardef\ are also possible.
+%
+% Ligatures and \cmd\mathchardef ed symbols have to be specified numerically.
+% Of course, numerical identification is possible in any other case, too.
+%
+%\changes{v1.1}{2004/09/14}{remove 8-bit characters from the configuration files
+% (suggested by \contributor Harald Harders <h.harders\at tu-bs.de>)}
+% ^^A private mail, 2004/09/13
+% 8-bit characters are also admissible, provided they have been declared in the
+% input encoding file. They should, however, only be used in private
+% configuration files, where the proper input encoding is guaranteed, or else in
+% combination with the `|inputenc|' key.
+%
+%\subsection{Character inheritance}
+%\GeneralChanges{Inheritance}
+%
+% First the lists of inheriting characters. We only declare those characters
+% that are the same on \emph{both} sides, \ie, not \OE\ for O.
+% \begin{macrocode}
+%</m-t>
+%<*m-t|zpeu|mvs>
+%%% -----------------------------------------------------------------------
+%%% CHARACTER INHERITANCE
+
+%</m-t|zpeu|mvs>
+%<*m-t>
+% \end{macrocode}
+%
+%\subsubsection{<OT1>}
+% Glyphs that should possibly inherit settings on one side only:
+% |012|~(`fi' ligature), |013|~(`fl'), |014|~(`ffi'), |015|~(`ffl'),
+% \AE, \ae, \OE, \oe.
+% \begin{macrocode}
+\DeclareCharacterInheritance
+ { encoding = OT1 }
+ { f = {011}, % ff
+ i = {\i},
+ j = {\j},
+ O = {\O},
+ o = {\o}
+ }
+
+% \end{macrocode}
+%
+%\subsubsection{<T1>}
+% Candidates here: |028|~(`fi'), |029|~(`fl'), |030|~(`ffi'), |031|~(`ffl'),
+% |156| (`\IJ'~ligature, since \LaTeX\ 2005/12/01 accessible as |\IJ|),
+% |188|~(`\ij', |\ij|), \AE, \ae, \OE, \oe.
+%\changes{v1.5}{2004/12/11}{remove \cmd\ss\ from <T1> list, add \cmd\DJ}
+%\changes{v1.8}{2005/04/26}{remove \cmd\DJ\ from <T1> list (it's the same as \cmd\DH)}
+% \begin{macrocode}
+\DeclareCharacterInheritance
+ { encoding = T1 }
+ { A = {\`A,\'A,\^A,\~A,\"A,\r A,\k A,\u A},
+ a = {\`a,\'a,\^a,\~a,\"a,\r a,\k a,\u a},
+ C = {\'C,\c C,\v C},
+ c = {\'c,\c c,\v c},
+ D = {\v D,\DH},
+ d = {\v d,\dj},
+ E = {\`E,\'E,\^E,\"E,\k E,\v E},
+ e = {\`e,\'e,\^e,\"e,\k e,\v e},
+ f = {027}, % ff
+ G = {\u G},
+ g = {\u g},
+ I = {\`I,\'I,\^I,\"I,\.I},
+ i = {\`i,\'i,\^i,\"i,\i},
+ j = {\j},
+ L = {\L,\'L,\v L},
+ l = {\l,\'l,\v l},
+ N = {\'N,\~N,\v N},
+ n = {\'n,\~n,\v n},
+ O = {\O,\`O,\'O,\^O,\~O,\"O,\H O},
+ o = {\o,\`o,\'o,\^o,\~o,\"o,\H o},
+ R = {\'R,\v R},
+ r = {\'r,\v r},
+ S = {\'S,\c S,\v S,\SS},
+ s = {\'s,\c s,\v s},
+ T = {\c T,\v T},
+ t = {\c t,\v t},
+ U = {\`U,\'U,\^U,\"U,\H U,\r U},
+ u = {\`u,\'u,\^u,\"u,\H u,\r u},
+ Y = {\'Y,\"Y},
+ y = {\'y,\"y},
+ Z = {\'Z,\.Z,\v Z},
+ z = {\'z,\.z,\v z}
+% \end{macrocode}
+%\changes{v2.2}{2007/02/04}{remove `\texttt{-}' $\rightarrow$ `\texttt{127}'}
+% The `soft hyphen' often has reduced right side bearing so that it may already
+% be protruded, hence no inheritance.
+% \begin{macrocode}
+% - = {127},
+ }
+
+% \end{macrocode}
+%
+%\subsubsection{<LY1>}
+% More characters: |008|~(`fl'), |012|~(`fi'), |014|~(`ffi'), |015|~(`ffl'),
+% \AE, \ae, \OE, \oe.
+% \begin{macrocode}
+\DeclareCharacterInheritance
+ { encoding = LY1 }
+ { A = {\`A,\'A,\^A,\~A,\"A,\r A},
+ a = {\`a,\'a,\^a,\~a,\"a,\r a},
+ C = {\c C},
+ c = {\c c},
+ D = {\DH},
+ E = {\`E,\'E,\^E,\"E},
+ e = {\`e,\'e,\^e,\"e},
+ f = {011}, % ff
+ I = {\`I,\'I,\^I,\"I},
+ i = {\`i,\'i,\^i,\"i,\i},
+ L = {\L},
+ l = {\l},
+ N = {\~N},
+ n = {\~n},
+ O = {\`O,\'O,\^O,\~O,\"O,\O},
+ o = {\`o,\'o,\^o,\~o,\"o,\o},
+ S = {\v S},
+ s = {\v s},
+ U = {\`U,\'U,\^U,\"U},
+ u = {\`u,\'u,\^u,\"u},
+ Y = {\'Y,\"Y},
+ y = {\'y,\"y},
+ Z = {\v Z},
+ z = {\v z}
+ }
+
+% \end{macrocode}
+%
+%\subsubsection{<OT4>}
+%\changes{v1.9}{2005/08/16}{add list for <OT4>}
+% The Polish <OT1> extension. More interesting characters here:
+% |009|~(`fk'), |012|~(`fi'), |013|~(`fl'), |014|~(`ffi'), |015|~(`ffl'),
+% \AE, \ae, \OE, \oe.
+% \begin{macrocode}
+\DeclareCharacterInheritance
+ { encoding = OT4 }
+ { A = {\k A},
+ a = {\k a},
+ C = {\'C},
+ c = {\'c},
+ E = {\k E},
+ e = {\k e},
+ f = {011}, % ff
+ i = {\i},
+ j = {\j},
+ L = {\L},
+ l = {\l},
+ N = {\'N},
+ n = {\'n},
+ O = {\O,\'O},
+ o = {\o,\'o},
+ S = {\'S},
+ s = {\'s},
+ Z = {\'Z,\.Z},
+ z = {\'z,\.z}
+ }
+
+% \end{macrocode}
+%
+%\subsubsection{<QX>}
+%\changes{v1.9d}{2006/04/20}{add list for <QX> encoding (contributed by
+% \contributor Maciej Eder <maciej_eder\at poczta.onet.pl>)}
+% ^^A private mail, 2006/04/19
+% The Central European <QX> encoding.\footnote{
+% Contributed by \contributor Maciej Eder <maciej_eder\at poczta.onet.pl>.}
+% Ligatures: |009|~(`fk'), |012|~(`fi'), |013|~(`fl'), |014|~(`ffi'),
+% |015|~(`ffl'), \AE, \ae, \OE, \oe.
+% \begin{macrocode}
+\DeclareCharacterInheritance
+ { encoding = QX }
+ { A = {\`A,\'A,\^A,\~A,\"A,\k A,\AA},
+ a = {\`a,\'a,\^a,\~a,\"a,\k a,\aa},
+ C = {\'C,\c C},
+ c = {\'c,\c c},
+ D = {\DH},
+ E = {\`E,\'E,\^E,\"E,\k E},
+ e = {\`e,\'e,\^e,\"e,\k e},
+ f = {011}, % ff
+ I = {\`I,\'I,\^I,\"I,\k I},
+ i = {\`i,\'i,\^i,\"i,\k i,\i},
+ j = {\j},
+ L = {\L},
+ l = {\l},
+ N = {\'N,\~N},
+ n = {\'n,\~n},
+ O = {\O,\`O,\'O,\^O,\~O,\"O},
+ o = {\o,\`o,\'o,\^o,\~o,\"o},
+% \end{macrocode}
+%\changes{v2.3c}{2008/09/01}{add \cmd\textcommabelow[\texttt{STst}] to <QX> encoding
+% (reported by \contributor Vasile Gaburici <vgaburici\at gmail.com>)}
+% ^^A private mail, 2008/09/01, and
+% ^^A http://tug.org/pipermail/tex-live/2008-September/017385.html
+% The Rumanian \cmd\textcommabelow\ accents are actually replacements for the
+% \cmd\c\ variants, which had previously (and erroneously\footnote{
+% Cf. \url{http://tug.org/pipermail/tex-live/2008-August/017204.html}})
+% been included in <QX> encoding. They are still kept for backwards
+% compatibility.
+%\iffalse
+% If \cmd\textcommabelow\ is undefined, it will be silently ignored.
+% This is due to a quirk in \cs{\MT@map@clist@}.
+%\todo{fix \cs{\MT@map@clist@}?}
+%\fi
+% \begin{macrocode}
+ S = {\'S,\c S,\textcommabelow S,\v S},
+ s = {\'s,\c s,\textcommabelow s,\v s},
+ T = {\c T,\textcommabelow T},
+ t = {\c t,\textcommabelow t},
+ U = {\`U,\'U,\^U,\"U,\k U},
+ u = {\`u,\'u,\^u,\"u,\k u},
+ Y = {\'Y,\"Y},
+ y = {\'y,\"y},
+ Z = {\'Z,\.Z,\v Z},
+ z = {\'z,\.z,\v z},
+ . = \textellipsis
+ }
+
+% \end{macrocode}
+%
+%\subsubsection{<T5>}
+%\changes{v1.9}{2005/08/17}{add list for <T5> (requested by
+% \contributor \thanh{} <hanthethanh\at gmail.com>)}
+% ^^A private email, 2005/08/16
+% The Vietnamese encoding <T5>. It is so crowded with accented and double-accented
+% characters that there is no room for any ligatures.
+% \begin{macrocode}
+\DeclareCharacterInheritance
+ { encoding = T5 }
+ { A = {\`A,\'A,\~A,\h A,\d A,\^A,\u A,
+ \`\Acircumflex,\'\Acircumflex,\~\Acircumflex,\h\Acircumflex,\d\Acircumflex,
+ \`\Abreve,\'\Abreve,\~\Abreve,\h\Abreve,\d\Abreve},
+ a = {\`a,\'a,\~a,\h a,\d a,\^a,\u a,
+ \`\acircumflex,\'\acircumflex,\~\acircumflex,\h\acircumflex,\d\acircumflex,
+ \`\abreve,\'\abreve,\~\abreve,\h\abreve,\d\abreve},
+ D = {\DJ},
+ d = {\dj},
+ E = {\`E,\'E,\~E,\h E,\d E,\^E,
+ \`\Ecircumflex,\'\Ecircumflex,\~\Ecircumflex,\h\Ecircumflex,\d\Ecircumflex},
+ e = {\`e,\'e,\~e,\h e,\d e,\^e,
+ \`\ecircumflex,\'\ecircumflex,\~\ecircumflex,\h\ecircumflex,\d\ecircumflex},
+ I = {\`I,\'I,\~I,\h I,\d I},
+ i = {\`i,\'i,\~i,\h i,\d i,\i},
+ O = {\`O,\'O,\~O,\h O,\d O,\^O,\horn O,
+ \`\Ocircumflex,\'\Ocircumflex,\~\Ocircumflex,\h\Ocircumflex,\d\Ocircumflex,
+ \`\Ohorn,\'\Ohorn,\~\Ohorn,\h\Ohorn,\d\Ohorn},
+ o = {\`o,\'o,\~o,\h o,\d o,\^o,\horn o,
+ \`\ocircumflex,\'\ocircumflex,\~\ocircumflex,\h\ocircumflex,\d\ocircumflex,
+ \`\ohorn,\'\ohorn,\~\ohorn,\h\ohorn,\d\ohorn},
+ U = {\`U,\'U,\~U,\h U,\d U,\horn U,
+ \`\Uhorn,\'\Uhorn,\~\Uhorn,\h\Uhorn,\d\Uhorn},
+ u = {\`u,\'u,\~u,\h u,\d u,\horn u,
+ \`\uhorn,\'\uhorn,\~\uhorn,\h\uhorn,\d\uhorn},
+ Y = {\`Y,\'Y,\~Y,\h Y,\d Y},
+ y = {\`y,\'y,\~y,\h y,\d y}
+ }
+
+%</m-t>
+% \end{macrocode}
+%
+%\subsubsection{Euro symbols}
+% Make Euro symbols settings simpler.
+% \begin{macrocode}
+%<*zpeu>
+\DeclareCharacterInheritance
+ { encoding = U,
+ family = {zpeu,zpeus,eurosans} }
+ { E = 128 }
+
+%</zpeu>
+%<*mvs>
+\DeclareCharacterInheritance
+ { encoding = OT1,
+ family = mvs }
+ { 164 = {099,100,101} } % \EURhv,\EURcr,\EURtm
+
+% \end{macrocode}
+% Since 2006/05/11 (that is, one week after I've added these settings, after the
+% package had been dormant for six years), \pkg{marvosym}'s encoding is
+% (correctly) <U> instead of <OT1>.
+%\changes{v1.9e}{2006/07/05}{adapt to \pkg{marvosym}'s changed encoding}
+% \begin{macrocode}
+\DeclareCharacterInheritance
+ { encoding = U,
+ family = mvs }
+ { 164 = {099,100,101} }
+
+%</mvs>
+% \end{macrocode}
+%
+%\subsection{Tracking}
+%\GeneralChanges{Tracking}
+%
+%\changes{v2.2}{2007/02/23}{add ligatures that are to be disabled}
+% By default, we only disable the `f*' ligatures, for those fonts that have
+% any. Thus, ligatures and especially kerning for all other characters will be
+% retained.
+% \begin{macrocode}
+%<*m-t>
+%%% -----------------------------------------------------------------------
+%%% TRACKING/LETTERSPACING
+
+\SetTracking
+ [ name = default,
+ no ligatures = {f} ]
+ { encoding = {OT1,T1,T2A,LY1,OT4,QX} }
+ { }
+
+% \end{macrocode}
+%
+%\subsection{Font expansion}
+%\GeneralChanges{Expansion}
+%
+% These are \thanh's original expansion settings. They are used for all fonts
+% (until somebody shows mercy and creates font-specific settings).
+% \begin{macrocode}
+%%% -----------------------------------------------------------------------
+%%% EXPANSION
+
+\SetExpansion
+ [ name = default ]
+ { encoding = {OT1,OT4,QX,T1,LY1} }
+ {
+ A = 500, a = 700,
+ \AE = 500, \ae = 700,
+ B = 700, b = 700,
+ C = 700, c = 700,
+ D = 500, d = 700,
+ E = 700, e = 700,
+ F = 700,
+ G = 500, g = 700,
+ H = 700, h = 700,
+ K = 700, k = 700,
+ M = 700, m = 700,
+ N = 700, n = 700,
+ O = 500, o = 700,
+ \OE = 500, \oe = 700,
+ P = 700, p = 700,
+ Q = 500, q = 700,
+ R = 700,
+ S = 700, s = 700,
+ U = 700, u = 700,
+ W = 700, w = 700,
+ Z = 700, z = 700,
+ 2 = 700,
+ 3 = 700,
+ 6 = 700,
+ 8 = 700,
+ 9 = 700
+ }
+
+% \end{macrocode}
+% Settings for Cyrillic <T2A> encoding.\footnote{Contributed by
+% \contributor Karl Karlsson <karl-karlsson\at yandex.ru>.}
+%\changes{v2.3e}{2009/10/28}{settings for <T2A> encoding
+% (contributed by \contributor Karl Karlsson <karl-karlsson\at yandex.ru>)}
+% \begin{macrocode}
+\SetExpansion
+ [ name = T2A ]
+ { encoding = T2A }
+ {
+ A = 500, a = 700,
+ B = 700, b = 700,
+ C = 700, c = 700,
+ D = 500, d = 700,
+ E = 700, e = 700,
+ F = 700,
+ G = 500, g = 700,
+ H = 700, h = 700,
+ K = 700, k = 700,
+ M = 700, m = 700,
+ N = 700, n = 700,
+ O = 500, o = 700,
+ P = 700, p = 700,
+ Q = 500, q = 700,
+ R = 700,
+ S = 700, s = 700,
+ U = 700, u = 700,
+ W = 700, w = 700,
+ Z = 700, z = 700,
+ 2 = 700,
+ 3 = 700,
+ 6 = 700,
+ 8 = 700,
+ 9 = 700,
+ \CYRA = 500, \cyra = 700,
+ \CYRB = 700, \cyrb = 700,
+ \CYRV = 700, \cyrv = 700,
+ \CYRG = 700, \cyrg = 700,
+ \CYRD = 700, \cyrd = 700,
+ \CYRE = 700, \cyre = 700,
+ \CYRZH = 700, \cyrzh = 700,
+ \CYRZ = 700, \cyrz = 700,
+ \CYRI = 700, \cyri = 700,
+ \CYRISHRT = 700, \cyrishrt = 700,
+ \CYRK = 700, \cyrk = 700,
+ \CYRL = 700, \cyrl = 700,
+ \CYRM = 700, \cyrm = 700,
+ \CYRN = 700, \cyrn = 700,
+ \CYRO = 500, \cyro = 700,
+ \CYRP = 700, \cyrp = 700,
+ \CYRR = 700, \cyrr = 700,
+ \CYRS = 700, \cyrs = 700,
+ \CYRT = 700, \cyrt = 700,
+ \CYRU = 700, \cyru = 700,
+ \CYRF = 700, \cyrf = 700,
+ \CYRH = 700, \cyrh = 700,
+ \CYRC = 700, \cyrc = 700,
+ \CYRCH = 700, \cyrch = 700,
+ \CYRSH = 700, \cyrsh = 700,
+ \CYRSHCH = 700, \cyrshch = 700,
+ \CYRHRDSN = 700, \cyrhrdsn = 700,
+ \CYRERY = 700, \cyrery = 700,
+ \CYRSFTSN = 700, \cyrsftsn = 700,
+ \CYREREV = 700, \cyrerev = 700,
+ \CYRYU = 700, \cyryu = 700,
+ \CYRYA = 700, \cyrya = 700
+ }
+
+% \end{macrocode}
+% <T5> encoding does not contain \cmd\AE, \cmd\ae, \cmd\OE\ and \cmd\oe.
+% \begin{macrocode}
+\SetExpansion
+ [ name = T5 ]
+ { encoding = T5 }
+ {
+ A = 500, a = 700,
+ B = 700, b = 700,
+ C = 700, c = 700,
+ D = 500, d = 700,
+ E = 700, e = 700,
+ F = 700,
+ G = 500, g = 700,
+ H = 700, h = 700,
+ K = 700, k = 700,
+ M = 700, m = 700,
+ N = 700, n = 700,
+ O = 500, o = 700,
+ P = 700, p = 700,
+ Q = 500, q = 700,
+ R = 700,
+ S = 700, s = 700,
+ U = 700, u = 700,
+ W = 700, w = 700,
+ Z = 700, z = 700,
+ 2 = 700,
+ 3 = 700,
+ 6 = 700,
+ 8 = 700,
+ 9 = 700
+ }
+
+%</m-t>
+% \end{macrocode}
+%
+%\subsection{Character protrusion}
+%\GeneralChanges{Protrusion}
+%
+%\changes{v1.1}{2004/09/14}{add factors for some more characters}
+%\changes{v1.4b}{2004/11/19}{harmonise dashes in upshape and italic
+% (\texttt{cmr}, \texttt{pad}, \texttt{ppl})}
+%\changes{v1.9}{2005/08/16}{settings for <OT4> encoding (Computer Modern Roman,
+% Palatino, Times)}
+%\changes{v1.9}{2005/08/17}{settings for <T5> encoded Computer Modern Roman}
+%\changes{v1.9a}{2005/12/02}{settings for <T5> encoded Charter}
+%
+% \begin{macrocode}
+%%% -----------------------------------------------------------------------
+%%% PROTRUSION
+
+% \end{macrocode}
+% For future historians, \thanh's original settings (from \file{protcode.tex},
+% converted to \microtype\ notation).
+%\begin{verbatim}
+%\SetProtrusion
+% [ name = thanh ]
+% { encoding = OT1 }
+% {
+% A = {50,50},
+% F = { ,50},
+% J = {50, },
+% K = { ,50},
+% L = { ,50},
+% T = {50,50},
+% V = {50,50},
+% W = {50,50},
+% X = {50,50},
+% Y = {50,50},
+% k = { ,50},
+% r = { ,50},
+% t = { ,50},
+% v = {50,50},
+% w = {50,50},
+% x = {50,50},
+% y = {50,50},
+% . = { ,700}, {,}= { ,700},
+% : = { ,500}, ; = { ,500},
+% ! = { ,200}, ? = { ,200},
+% ( = {50, }, ) = { ,50},
+% - = { ,700},
+% \textendash = { ,300}, \textemdash = { ,200},
+% \textquoteleft = {700, }, \textquoteright = { ,700},
+% \textquotedblleft = {500, }, \textquotedblright = { ,500}
+% }
+%\end{verbatim}
+%
+%\subsubsection{Normal}
+%
+% The default settings always use the most moderate value.
+%
+% \begin{macrocode}
+%<*cfg-t>
+\SetProtrusion
+%<m-t> [ name = default ]
+% \end{macrocode}
+% We also create configuration files for the fonts
+%\begin{itemize}
+% \item Bitstream Charter (<NFSS> code |bch|)
+%\changes{v1.5}{2004/11/28}{settings for Bitstream Charter}
+% \begin{macrocode}
+%<bch> [ name = bch-default ]
+% \end{macrocode}
+% \item Bitstream Letter Gothic (|blg|)
+%\changes{v2.2}{2007/03/03}{settings for Bitstream Letter Gothic}
+% \begin{macrocode}
+%<blg> [ name = blg-default ]
+% \end{macrocode}
+% \item Computer Modern Roman (|cmr|)
+% \begin{macrocode}
+%<cmr> [ name = cmr-default ]
+% \end{macrocode}
+% \item Adobe Garamond (|pad|, |padx|, |padj|)
+% \begin{macrocode}
+%<pad> [ name = pad-default ]
+% \end{macrocode}
+% \item Minion\footnote{Contributed by \contributor Harald Harders <h.harders\at tu-bs.de>
+% and \contributor Karl Karlsson <karl-karlsson\at yandex.ru>.}
+% (|pmnx|, |pmnj|)
+%\changes{v1.1}{2004/09/14}{settings for Adobe Minion (contributed by
+% \contributor Harald Harders <h.harders\at tu-bs.de>)}
+% ^^A private mail, 2004/09/14
+% \begin{macrocode}
+%<pmn> [ name = pmnj-default ]
+% \end{macrocode}
+% \item Palatino (|ppl|, |pplx|, |pplj|)
+% \begin{macrocode}
+%<ppl> [ name = ppl-default ]
+% \end{macrocode}
+% \item Times (|ptm|, |ptmx|, |ptmj|)
+% \begin{macrocode}
+%<ptm> [ name = ptm-default ]
+% \end{macrocode}
+% \item <URW> Garamond (|ugm|)
+%\changes{v1.9c}{2006/01/26}{settings for <URW> Garamond}
+%\end{itemize}
+% \begin{macrocode}
+%<ugm> [ name = ugm-default ]
+%<m-t|cmr|pmn> { }
+%<bch|blg|pad|ugm> { encoding = OT1,
+%<ppl|ptm> { encoding = {OT1,OT4},
+%<bch> family = bch }
+%<blg> family = blg }
+%<pad> family = {pad,padx,padj} }
+%<ppl> family = {ppl,pplx,pplj} }
+%<ptm> family = {ptm,ptmx,ptmj} }
+%<ugm> family = ugm }
+ {
+%<m-t|bch|blg|cmr|pad|pmn|ppl|ptm> A = {50,50},
+%<ugm> A = {50,100},
+%<pad|ptm> \AE = {50, },
+%<ugm> \AE = {150,50},
+%<ugm> B = { ,50},
+%<bch|pad|pmn|ugm> C = {50, },
+%<bch|pad|pmn> D = { ,50},
+%<ugm> D = { ,70},
+%<ugm> E = { ,50},
+%<m-t|bch|cmr|pad|pmn|ptm> F = { ,50},
+%<ugm> F = { ,70},
+%<bch|pad|pmn> G = {50, },
+%<ugm> G = {50,50},
+%<blg> I = {150,150},
+%<m-t|cmr|pad|pmn|ppl|ptm|ugm> J = {50, },
+%<bch|blg> J = {100, },
+%<!blg> K = { ,50},
+%<blg> K = {50, },
+%<m-t|bch|cmr|pad|pmn|ppl> L = { ,50},
+%<blg> L = { ,150},
+%<ptm> L = { ,80},
+%<ugm> L = { ,120},
+%<bch|pad|pmn|ugm> O = {50,50},
+%<pad> \OE = {50, },
+%<ugm> \OE = {50,50},
+%<blg> P = { ,100},
+%<ugm> P = { ,50},
+%<bch|pad|pmn> Q = {50,70},
+%<ugm> Q = {50,50},
+%<bch> R = { ,50},
+%<ugm> R = { ,70},
+%<m-t|bch|cmr|pad|pmn|ppl|ptm> T = {50,50},
+%<blg> T = {100,100},
+%<ugm> T = {70,70},
+%<m-t|bch|cmr|pad|pmn|ppl|ptm> V = {50,50},
+%<blg|ugm> V = {70,70},
+%<m-t|bch|cmr|pad|pmn|ppl|ptm> W = {50,50},
+%<ugm> W = {70,70},
+%<m-t|bch|cmr|pad|pmn|ppl|ptm> X = {50,50},
+%<ugm> X = {50,70},
+%<m-t|bch|cmr|pad|pmn|ppl> Y = {50,50},
+%<blg|ptm|ugm> Y = {80,80},
+%<ugm> Z = {50,50},
+%<blg> f = {150,100},
+%<blg> i = {150,150},
+%<blg> j = {100,100},
+%<m-t|bch|cmr|pad|pmn|ppl|ptm> k = { ,50},
+%<ugm> k = { ,70},
+%<blg> l = {150,150},
+%<pmn> l = { ,-50},
+%<pad|ppl> p = {50,50},
+%<ugm> p = { ,50},
+%<pad|ppl> q = {50, },
+%<!blg> r = { ,50},
+%<blg> r = {100, 80},
+%<cmr|pad|pmn> t = { ,70},
+%<bch> t = { ,50},
+%<blg> t = {150, 80},
+%<ugm> t = { ,100},
+%<m-t|bch|cmr|pad|pmn|ppl|ptm> v = {50,50},
+%<blg> v = {100,100},
+%<ugm> v = {50,70},
+%<m-t|bch|cmr|pad|pmn|ppl|ptm> w = {50,50},
+%<ugm> w = {50,70},
+%<!blg> x = {50,50},
+%<blg> x = {100,100},
+%<m-t|bch|pad|pmn> y = { ,50},
+%<blg> y = { 50,100},
+%<cmr|ppl|ptm> y = {50,70},
+%<ugm> y = { ,70},
+% \end{macrocode}
+%\changes{v1.6}{2005/01/11}{improve settings for numbers
+% (pointed out by \contributor Peter Muthesius <newsname\at gmx.de>)}
+% ^^A MID: <34b1h7F48s44tU1@individual.net>
+% \begin{macrocode}
+%<cmr> 0 = { ,50},
+%<m-t> 1 = {50,50},
+%<bch|blg|pad|ptm|ugm> 1 = {150,150},
+%<cmr> 1 = {100,200},
+%<pmn> 1 = { ,50},
+%<ppl> 1 = {100,100},
+%<bch|cmr|pad|ugm> 2 = {50,50},
+%<blg> 2 = { ,100},
+%<bch|pmn> 3 = {50, },
+%<cmr|pad|ugm> 3 = {50,50},
+%<blg> 3 = {100, },
+%<m-t|pad> 4 = {50,50},
+%<bch> 4 = {100,50},
+%<blg> 4 = {100, },
+%<cmr|ugm> 4 = {70,70},
+%<pmn> 4 = {50, },
+%<ptm> 4 = {70, },
+%<cmr> 5 = { ,50},
+%<pad> 5 = {50,50},
+%<bch> 6 = {50, },
+%<cmr> 6 = { ,50},
+%<pad> 6 = {50,50},
+%<m-t> 7 = {50,50},
+%<bch|pad|pmn|ugm> 7 = {50,80},
+%<blg> 7 = {100,100},
+%<cmr|ptm> 7 = {50,100},
+%<ppl> 7 = { ,50},
+%<cmr> 8 = { ,50},
+%<bch|pad> 9 = {50,50},
+%<cmr> 9 = { ,50},
+%<m-t|cmr|pad|pmn|ppl|ptm|ugm> . = { ,700},
+%<bch> . = { ,600},
+%<blg> . = {400,500},
+%<!blg> {,}= { ,500},
+%<blg> {,}= {300,400},
+%<m-t|cmr|pad|pmn|ppl|ptm|ugm> : = { ,500},
+%<bch> : = { ,400},
+%<blg> : = {300,400},
+%<m-t|bch|pad|pmn|ptm> ; = { ,300},
+%<blg> ; = {200,300},
+%<cmr|ppl> ; = { ,500},
+%<ugm> ; = { ,400},
+%<!blg> ! = { ,100},
+%<blg> ! = {200,200},
+%<m-t|pad|pmn|ptm> ? = { ,100},
+%<bch|cmr|ppl|ugm> ? = { ,200},
+%<blg> ? = {150,150},
+%<pmn> " = {300,300},
+%<m-t|bch|cmr|pad|pmn|ppl> @ = {50,50},
+%<ptm> @ = {100,100},
+%<m-t|bch|blg|cmr|pad|pmn|ppl|ptm> ~ = {200,250},
+%<ugm> ~ = {300,350},
+%<pad|ppl|ptm> & = {50,100},
+%<ugm> & = { ,100},
+%<m-t|cmr|pad|pmn> \% = {50,50},
+%<bch> \% = { ,50},
+%<ppl|ptm> \% = {100,100},
+%<ugm> \% = {50,100},
+%<blg> \# = {100,100},
+%<m-t|ppl|ptm|ugm> * = {200,200},
+%<bch|pmn> * = {200,300},
+%<blg> * = {150,200},
+%<cmr|pad> * = {300,300},
+%<m-t|cmr|ppl|ptm> + = {250,250},
+%<bch> + = {150,250},
+%<pad> + = {300,300},
+%<blg|pmn> + = {150,200},
+%<ugm> + = {250,300},
+%<blg|ugm> {=}= {200,200},
+%<m-t|pad|pmn|ptm> ( = {100, }, ) = { ,200},
+%<bch|ugm> ( = {200, }, ) = { ,200},
+%<cmr|blg> ( = {300, }, ) = { ,300},
+%<ppl> ( = {100, }, ) = { ,300},
+%<bch|pmn> [ = {100, }, ] = { ,100},
+%<blg> [ = {300,100}, ] = { ,300},
+% \end{macrocode}
+%\changes{v1.7}{2005/03/15}{fix: remove \textbackslash\ from <OT1>,
+% add \cmd\textbackslash\ to <T1> encoding}
+% \begin{macrocode}
+%<m-t|pad|pmn|ptm> / = {100,200},
+%<bch> / = { ,200},
+%<blg> / = {300,300},
+%<cmr|ppl> / = {200,300},
+%<ugm> / = {100,300},
+%<m-t|ptm> - = {500,500},
+%<bch|cmr|ppl> - = {400,500},
+%<blg> - = {300,400},
+%<pad> - = {300,500},
+%<pmn> - = {200,400},
+%<ugm> - = {500,600},
+%<blg> < = {200,100}, > = {100,200},
+%<blg> _ = {150,250},
+%<blg> | = {250,250},
+%<m-t|pmn> \textendash = {200,200}, \textemdash = {150,150},
+%<bch> \textendash = {200,300}, \textemdash = {150,250},
+%<cmr> \textendash = {400,300}, \textemdash = {300,200},
+%<pad|ppl|ptm> \textendash = {300,300}, \textemdash = {200,200},
+%<ugm> \textendash = {250,300}, \textemdash = {250,250},
+% \end{macrocode}
+% Why settings for left \emph{and} right quotes? Because in some languages they
+% might be used like that (see the \pkg{csquotes} package for examples).
+% \begin{macrocode}
+%<m-t|bch|pmn> \textquoteleft = {300,400}, \textquoteright = {300,400},
+%<blg> \textquoteleft = {400,600}, \textquoteright = {400,600},
+%<cmr> \textquoteleft = {500,700}, \textquoteright = {500,600},
+%<pad|ppl> \textquoteleft = {500,700}, \textquoteright = {500,700},
+%<ptm> \textquoteleft = {500,500}, \textquoteright = {300,500},
+%<ugm> \textquoteleft = {300,600}, \textquoteright = {300,600},
+%<m-t|bch|pmn> \textquotedblleft = {300,300}, \textquotedblright = {300,300}
+%<blg> \textquotedblright = {300,400}
+%<cmr> \textquotedblleft = {500,300}, \textquotedblright = {200,600}
+%<pad|ppl|ptm> \textquotedblleft = {300,400}, \textquotedblright = {300,400}
+%<ugm> \textquotedblleft = {400,400}, \textquotedblright = {400,400}
+ }
+
+% \end{macrocode}
+% Greek uppercase letters are in <OT1> encoding only.
+%\changes{v1.9}{2005/07/10}{fix: remove uppercase Greek letters from <T1> encoded <CMR>}
+% \begin{macrocode}
+%<*m-t|cmr|pmn>
+\SetProtrusion
+%<m-t> [ name = OT1-default,
+%<cmr> [ name = cmr-OT1,
+%<pmn> [ name = pmnj-OT1,
+%<m-t> load = default ]
+%<cmr> load = cmr-default ]
+%<pmn> load = pmnj-default ]
+%<m-t> { encoding = OT1 }
+%<cmr> { encoding = {OT1,OT4},
+%<pmn> { encoding = OT1,
+%<cmr> family = cmr }
+%<pmn> family = pmnj }
+ {
+%<m-t|cmr> \AE = {50, },
+%<pmn> \OE = {50, }
+%<*cmr>
+ "00 = { ,150}, % \Gamma
+ "01 = {100,100}, % \Delta
+ "02 = { 50, 50}, % \Theta
+ "03 = {100,100}, % \Lambda
+ "06 = { 50, 50}, % \Sigma
+ "07 = {100,100}, % \Upsilon
+ "08 = { 50, 50}, % \Phi
+ "09 = { 50, 50} % \Psi
+% \end{macrocode}
+% Remaining slots can be found in the source file.
+%\iffalse ^^A ... namely, here:
+% "04 = { , }, % \Xi
+% "05 = { , }, % \Pi
+% "0A = { , }, % \Omega
+%\fi
+% \begin{macrocode}
+%</cmr>
+ }
+
+%</m-t|cmr|pmn>
+% \end{macrocode}
+% <T1> and <LY1> encodings contain some more characters. The default list
+% will be loaded first.
+%\changes{v1.9a}{2005/11/07}{fix: remove `\texttt{\_}' from <OT1> encoding}
+% \begin{macrocode}
+\SetProtrusion
+%<m-t> [ name = T1-default,
+%<bch> [ name = bch-T1,
+%<blg> [ name = blg-T1,
+%<cmr> [ name = cmr-T1,
+%<pad> [ name = pad-T1,
+%<pmn> [ name = pmnj-T1,
+%<ppl> [ name = ppl-T1,
+%<ptm> [ name = ptm-T1,
+%<ugm> [ name = ugm-T1,
+%<m-t> load = default ]
+%<bch> load = bch-default ]
+%<blg> load = blg-default ]
+%<cmr> load = cmr-default ]
+%<pad> load = pad-default ]
+%<pmn> load = pmnj-default ]
+%<ppl> load = ppl-default ]
+%<ptm> load = ptm-default ]
+%<ugm> load = ugm-default ]
+%<m-t> { encoding = {T1,LY1} }
+%<bch|cmr|pad|pmn|ppl> { encoding = {T1,LY1},
+%<blg|ptm|ugm> { encoding = {T1},
+%<bch> family = bch }
+%<blg> family = blg }
+%<cmr> family = cmr }
+%<pad> family = {pad,padx,padj} }
+%<pmn> family = pmnj }
+%<ppl> family = {ppl,pplx,pplj} }
+%<ptm> family = {ptm,ptmx,ptmj} }
+%<ugm> family = ugm }
+ {
+%<m-t|cmr> \AE = {50, },
+%<bch|pmn> \OE = {50, },
+%<pmn> \TH = { ,50},
+%<blg> \v L = { ,250},
+%<blg> \v d = { ,250},
+%<blg> \v l = { ,250},
+%<blg> \v t = { ,250},
+%<blg> 127 = {300,400},
+%<blg> 156 = {100, }, % IJ
+%<blg> 188 = { 80, 80}, % ij
+%<m-t|bch|pad|pmn|ppl|ptm> _ = {100,100},
+%<cmr> _ = {200,200},
+%<ugm> _ = {100,200},
+%<m-t|pad|pmn|ptm> \textbackslash = {100,200},
+%<bch> \textbackslash = {150,200},
+%<blg> \textbackslash = {250,300},
+%<cmr|ppl> \textbackslash = {200,300},
+%<ugm> \textbackslash = {100,300},
+%<ugm> \textbar = {200,200},
+%<blg> \textendash = {300,300}, \textemdash = {150,150},
+%<blg> \textquotedbl = {300,400}, \textquotedblleft = {300,400},
+%<cmr> \textquotedbl = {300,300}, \textquotedblleft = {200,600},
+% \end{macrocode}
+%\changes{v1.4}{2004/10/30}{tweak quote characters for \texttt{cmr}
+% variants (<OT1>, <T1>, \texttt{lmr})}
+% The <EC> fonts do something weird: they insert an implicit kern between quote
+% and boundary character. Therefore, we must override the settings from <OT1>.
+% \begin{macrocode}
+%<m-t|cmr|pad|ppl|ptm|ugm> \quotesinglbase = {400,400}, \quotedblbase = {400,400},
+%<blg> \quotesinglbase = {400,400}, \quotedblbase = {300,400},
+%<bch|pmn> \quotesinglbase = {400,400}, \quotedblbase = {300,300},
+%<m-t|bch|pmn> \guilsinglleft = {400,300}, \guilsinglright = {300,400},
+%<blg> \guilsinglleft = {300,500}, \guilsinglright = {300,500},
+%<cmr|pad|ppl|ptm> \guilsinglleft = {400,400}, \guilsinglright = {300,500},
+%<ugm> \guilsinglleft = {400,400}, \guilsinglright = {300,600},
+%<m-t> \guillemotleft = {200,200}, \guillemotright = {200,200},
+%<cmr> \guillemotleft = {300,200}, \guillemotright = {100,400},
+%<bch|pmn> \guillemotleft = {200,200}, \guillemotright = {150,300},
+%<blg|pad|ppl|ptm> \guillemotleft = {300,300}, \guillemotright = {200,400},
+%<ugm> \guillemotleft = {300,400}, \guillemotright = {300,400},
+%<m-t|bch|cmr|pad|pmn|ppl|ugm> \textexclamdown = {100, }, \textquestiondown = {100, },
+%<blg> \textexclamdown = {200, }, \textquestiondown = {100, },
+%<ptm> \textexclamdown = {200, }, \textquestiondown = {200, },
+%<m-t|cmr|pad|ppl|ptm|ugm> \textbraceleft = {400,200}, \textbraceright = {200,400},
+%<bch|blg|pmn> \textbraceleft = {200, }, \textbraceright = { ,300},
+%<m-t|bch|cmr|pad|ppl|ptm|ugm> \textless = {200,100}, \textgreater = {100,200}
+%<pmn> \textless = {100, }, \textgreater = { ,100},
+%<pmn> \textvisiblespace = {100,100} % not in LY1
+% \end{macrocode}
+%\iffalse
+% \dh = { , },
+% \th = { , },
+% \NG = { , },
+% \ng = { , },
+% \textasciicircum = { , },
+% \textsterling = { , }, % also in TS1
+% \textsection = { , }, % also in TS1
+%\fi
+% \begin{macrocode}
+ }
+
+% \end{macrocode}
+% The \pkg{lmodern} fonts used to restore the original settings from <OT1>
+% fonts. Now, they require even other settings, though.
+%\changes{v2.3a}{2008/02/19}{adjust <LMR> quotation marks again}
+% \begin{macrocode}
+%<*cmr>
+\SetProtrusion
+ [ name = lmr-T1,
+ load = cmr-T1 ]
+ { encoding = {T1,LY1},
+ family = lmr }
+ {
+ \textquotedblleft = {300,400}, \textquotedblright = {300,400}
+ }
+
+%</cmr>
+% \end{macrocode}
+% Settings for the <T2A> encoding (generic, Computer Modern Roman, and Minion).\footnote{Contributed by
+% \contributor Karl Karlsson <karl-karlsson\at yandex.ru>.}
+%\changes{v2.3e}{2009/10/28}{settings for <T2A> encoding (contributed by
+% \contributor Karl Karlsson <karl-karlsson\at yandex.ru>)}
+% ^^A private mail, 2009/10/21
+%\changes{v2.4}{2009/11/15}{settings for <T2A> encoded Minion (contributed by
+% \contributor Karl Karlsson <karl-karlsson\at yandex.ru>)}
+% ^^A private mail, 2009/11/14
+% \begin{macrocode}
+%<*m-t|cmr|pmn>
+\SetProtrusion
+%<m-t> [ name = T2A-default,
+%<cmr> [ name = cmr-T2A,
+%<pmn> [ name = pmnj-T2A,
+%<m-t> load = default ]
+%<cmr> load = cmr-default ]
+%<pmn> load = pmnj-default ]
+ { encoding = T2A,
+%<m-t> }
+%<cmr> family = cmr }
+%<pmn> family = pmnj }
+ {
+ \CYRA = {50,50},
+ \CYRG = { ,50},
+ \CYRK = { ,50},
+ \CYRT = {50,50},
+ \CYRH = {50,50},
+ \CYRU = {50,50},
+%<pmn> \CYRS = {50, },
+%<pmn> \CYRO = {50,50},
+ \cyrk = { ,50},
+ \cyrg = { ,50},
+ \cyrh = {50,50},
+%<m-t|pmn> \cyru = {50,50},
+%<cmr> \cyru = {50,70},
+%<m-t> _ = {100,100},
+%<cmr> _ = {200,200},
+%<m-t> \textbackslash = {100,200}, \quotedblbase = {400,400},
+%<cmr> \textbackslash = {200,300}, \quotedblbase = {400,400},
+%<pmn> \textbackslash = {100,200}, \quotedblbase = {300,300},
+%<cmr> \textquotedbl = {300,300}, \textquotedblleft = {200,600},
+%<m-t> \guillemotleft = {200,200}, \guillemotright = {200,200},
+%<cmr> \guillemotleft = {300,200}, \guillemotright = {100,400},
+%<pmn> \guillemotleft = {200,200}, \guillemotright = {150,300},
+%<m-t|cmr> \textbraceleft = {400,200}, \textbraceright = {200,400},
+%<pmn> \textbraceleft = {200, }, \textbraceright = { ,300},
+%<m-t|cmr> \textless = {200,100}, \textgreater = {100,200}
+%<pmn> \textless = {100, }, \textgreater = { ,100}
+ }
+
+%</m-t|cmr|pmn>
+% \end{macrocode}
+% Settings for the <QX> encoding (generic and Times).\footnote{Contributed by
+% \contributor Maciej Eder <maciej_eder\at poczta.onet.pl>.}
+%\changes{v1.9d}{2006/04/20}{settings for <QX> encoding (contributed by
+% \contributor Maciej Eder <maciej_eder\at poczta.onet.pl>)}
+% ^^A private mail, 2006/04/19
+% It also includes some glyphs otherwise in <TS1>.
+% \begin{macrocode}
+%<*m-t|ptm>
+\SetProtrusion
+%<m-t> [ name = QX-default,
+%<ptm> [ name = ptm-QX,
+%<m-t> load = default ]
+%<ptm> load = ptm-default ]
+%<m-t> { encoding = QX }
+%<ptm> { encoding = QX,
+%<ptm> family = {ptm,ptmx,ptmj} }
+ {
+ \AE = {50, },
+%<ptm> * = {200,200},
+ {=} = {100,100},
+ \textunderscore = {100,100},
+ \textbackslash = {100,200},
+ \quotedblbase = {400,400},
+%<m-t> \guillemotleft = {200,200}, \guillemotright = {200,200},
+%<ptm> \guillemotleft = {300,300}, \guillemotright = {200,400},
+ \textexclamdown = {100, }, \textquestiondown = {100, },
+%<m-t> \textbraceleft = {400,200}, \textbraceright = {200,400},
+%<ptm> \textbraceleft = {200,200}, \textbraceright = {200,300},
+ \textless = {200,100}, \textgreater = {100,200},
+ \textminus = {200,200}, \textdegree = {300,300},
+%<m-t> \copyright = {100,100}, \textregistered = {100,100}
+%<ptm> \copyright = {100,150}, \textregistered = {100,150},
+%<ptm> \textxgeq = { ,100}, \textxleq = {100, },
+%<ptm> \textalpha = { , 50}, \textDelta = { 70, 70},
+%<ptm> \textpi = { 50, 80}, \textSigma = { , 70},
+%<ptm> \textmu = { , 80}, \texteuro = { 50, 50},
+%<ptm> \textellipsis = {150,200}, \textasciitilde = { 80, 80},
+%<ptm> \textapprox = { 50, 50}, \textinfty = {100,100},
+%<ptm> \textdagger = {150,150}, \textdaggerdbl = {100,100},
+%<ptm> \textdiv = { 50,150}, \textsection = { 80, 80},
+%<ptm> \texttimes = {100,150}, \textpm = { 50, 80},
+%<ptm> \textbullet = {150,150}, \textperiodcentered = {300,300},
+%<ptm> \textquotesingle = {500,500}, \textquotedbl = {300,300},
+%<ptm> \textperthousand = { ,50}
+ }
+
+%</m-t|ptm>
+% \end{macrocode}
+% <T5> is based on <OT1>; it shares some but not all extra characters of <T1>.
+% All accented characters are already taken care of by the inheritance list.
+% \begin{macrocode}
+%<*cmr|bch>
+\SetProtrusion
+%<cmr> [ name = cmr-T5,
+%<cmr> load = cmr-default ]
+%<bch> [ name = bch-T5,
+%<bch> load = bch-default ]
+ { encoding = T5,
+%<cmr> family = cmr }
+%<bch> family = bch }
+ {
+%<bch> _ = {100,100},
+%<bch> \textbackslash = {150,200},
+%<cmr> \textbackslash = {200,300},
+%<cmr> \textquotedblleft = {200,600},
+%<cmr> \textquotedbl = {300,300},
+%<bch> \quotesinglbase = {400,400}, \quotedblbase = {300,300},
+%<cmr> \quotesinglbase = {400,400}, \quotedblbase = {400,400},
+%<bch> \guilsinglleft = {400,300}, \guilsinglright = {300,400},
+%<cmr> \guilsinglleft = {400,400}, \guilsinglright = {300,500},
+%<bch> \guillemotleft = {200,200}, \guillemotright = {150,300},
+%<cmr> \guillemotleft = {300,200}, \guillemotright = {100,400},
+%<bch> \textbraceleft = {200, }, \textbraceright = { ,300},
+%<cmr> \textbraceleft = {400,200}, \textbraceright = {200,400},
+ \textless = {200,100}, \textgreater = {100,200}
+ }
+
+%</cmr|bch>
+% \end{macrocode}
+% Minion with lining numbers.
+% \begin{macrocode}
+%<*pmn>
+\SetProtrusion
+ [ name = pmnx-OT1,
+ load = pmnj-default ]
+ { encoding = OT1,
+ family = pmnx }
+ {
+ 1 = {230,180}
+ }
+
+\SetProtrusion
+ [ name = pmnx-T1,
+ load = pmnj-T1 ]
+ { encoding = {T1,LY1},
+ family = pmnx }
+ {
+ 1 = {230,180}
+ }
+
+\SetProtrusion
+ [ name = pmnx-T2A,
+ load = pmnj-T2A ]
+ { encoding = {T2A},
+ family = pmnx }
+ {
+ 1 = {230,180}
+ }
+
+%</pmn>
+% \end{macrocode}
+% Times is the default font for <LY1>, therefore we provide settings for the
+% additional characters in this encoding, too.
+%\changes{v1.8}{2005/04/26}{add <LY1> characters for Times}
+% \begin{macrocode}
+%<*ptm>
+ \SetProtrusion
+ [ name = ptm-LY1,
+ load = ptm-T1 ]
+ { encoding = LY1,
+ family = {ptm,ptmx,ptmj} }
+ {
+ _ = {100,100},
+ \texttrademark = {100,100},
+ \textregistered = {100,100},
+ \textcopyright = {100,100},
+ \textdegree = {300,300},
+ \textminus = {200,200},
+ \textellipsis = {150,200},
+% \texteuro = { , }, % ?
+ \textcent = {100,100},
+ \textquotesingle = {500,500},
+ \textflorin = { 50, 70},
+ \textdagger = {150,150},
+ \textdaggerdbl = {100,100},
+ \textperthousand = { , 50},
+ \textbullet = {150,150},
+ \textonesuperior = {100,100},
+ \texttwosuperior = { 50, 50},
+ \textthreesuperior = { 50, 50},
+ \textperiodcentered = {300,300},
+ \textplusminus = { 50, 80},
+ \textmultiply = {100,100},
+ \textdivide = { 50,150}
+% \end{macrocode}
+% Remaining slots in the source file.
+%\iffalse
+% \textbrokenbar = { , },
+% \textyen = { , },
+% \textfractionsolidus = { , },
+% \textordfeminine = { , },
+% \textordmasculine = { , },
+% \textmu = { , },
+% \textparagraph = { , },
+% \textonequarter = { , },
+% \textonehalf = { , },
+% \textthreequarters = { , },
+%\fi
+% \begin{macrocode}
+ }
+
+%</ptm>
+% \end{macrocode}
+%
+%\subsubsection{Italics}
+%
+% To find default settings for italic is difficult, since the character shapes
+% and their behaviour at the beginning or end of line may be wildly different
+% for different fonts. Therefore, we leave the letters away, and only set up the
+% punctuation characters.
+%\changes{v1.4b}{2004/11/22}{slanted like italics}
+%\changes{v1.6}{2004/12/26}{add italic uppercase Greek letters}
+% \begin{macrocode}
+\SetProtrusion
+%<m-t> [ name = OT1-it ]
+%<bch> [ name = bch-it ]
+%<blg> [ name = blg-it,
+%<blg> load = blg-default ]
+%<cmr> [ name = cmr-it ]
+%<pad> [ name = pad-it ]
+%<pmn> [ name = pmnj-it ]
+%<ppl> [ name = ppl-it ]
+%<ptm> [ name = ptm-it ]
+%<ugm> [ name = ugm-it ]
+%<m-t|bch|blg|pad|ugm> { encoding = OT1,
+%<ppl|ptm> { encoding = {OT1,OT4},
+%<bch> family = bch,
+%<blg> family = blg,
+%<pad> family = {pad,padx,padj},
+%<ppl> family = {ppl,pplx,pplj},
+%<ptm> family = {ptm,ptmx,ptmj},
+%<ugm> family = ugm,
+%<m-t|bch|pad|ppl|ptm> shape = {it,sl} }
+%<blg|ugm> shape = it }
+%<cmr|pmn> { }
+ {
+%<cmr|ptm> A = {100,50},
+%<pad|pmn> A = {50, },
+%<ugm> A = { ,150},
+%<ppl> A = {50,50},
+%<ptm> \AE = {100, },
+%<pad|ppl> \AE = {50, },
+%<cmr|pad|ppl|ptm> B = {50, },
+%<pmn> B = {20,-50},
+%<bch|ppl|ptm|ugm> C = {50, },
+%<cmr|pad> C = {100, },
+%<pmn> C = {50,-50},
+%<cmr|pad|ppl|ptm> D = {50,50},
+%<pmn> D = {20, },
+%<cmr|pad|ppl|ptm> E = {50, },
+%<pmn> E = {20,-50},
+%<cmr|pad|ptm> F = {100, },
+%<pmn> F = {10, },
+%<ppl> F = {50, },
+%<bch|ppl|ptm|ugm> G = {50, },
+%<cmr|pad> G = {100, },
+%<pmn> G = {50,-50},
+%<cmr|pad|ppl|ptm> H = {50, },
+%<cmr|pad|ptm> I = {50, },
+%<pmn> I = {20,-50},
+%<cmr|ptm> J = {100, },
+%<pad> J = {50, },
+%<pmn> J = {20, },
+%<cmr|pad|ppl|ptm> K = {50, },
+%<pmn> K = {20, },
+%<cmr|pad|ppl|ptm> L = {50, },
+%<pmn> L = {20,50},
+%<ugm> L = { ,100},
+%<cmr|ptm> M = {50, },
+%<pmn> M = { ,-30},
+%<cmr|ptm> N = {50, },
+%<pmn> N = { ,-30},
+%<bch|pmn|ppl|ptm> O = {50, },
+%<cmr|pad> O = {100, },
+%<ugm> O = {70,50},
+%<ppl|ptm> \OE = {50, },
+%<pad> \OE = {100, },
+%<cmr|pad|ppl|ptm> P = {50, },
+%<pmn> P = {20,-50},
+%<bch|pmn|ppl|ptm> Q = {50, },
+%<cmr|pad> Q = {100, },
+%<ugm> Q = {70,50},
+%<cmr|pad|ppl|ptm> R = {50, },
+%<pmn> R = {20, },
+%<bch|cmr|pad|ppl|ptm> S = {50, },
+%<pmn> S = {20,-30},
+%<bch|cmr|pad|ppl|ptm> $ = {50, },
+%<pmn> $ = {20,-30},
+%<bch|pmn|ugm> T = {70, },
+%<cmr|pad|ppl|ptm> T = {100, },
+%<cmr|pad|ppl|ptm> U = {50, },
+%<pmn> U = {50,-50},
+%<cmr|pad|pmn|ugm> V = {100, },
+%<ppl|ptm> V = {100,50},
+%<cmr|pad|pmn|ugm> W = {100, },
+%<ppl> W = {50, },
+%<ptm> W = {100,50},
+%<cmr|ppl|ptm> X = {50, },
+%<cmr|ptm> Y = {100, },
+%<pmn> Y = {50, },
+%<ppl> Y = {100,50},
+%<pmn> Z = { ,-50},
+%<pmn> d = { ,-50},
+%<pad|pmn> f = { ,-100},
+%<pmn> i = { ,-30},
+%<pmn> j = { ,-30},
+%<pmn> l = { ,-100},
+%<bch> o = {50,50},
+%<bch> p = { ,50},
+%<pmn> p = {-50, },
+%<bch> q = {50, },
+%<pmn> r = { ,50},
+%<bch> t = { ,50},
+%<pmn|ugm> v = {50, },
+%<bch> w = { ,50},
+%<pmn|ugm> w = {50, },
+%<bch> y = { ,50},
+%<cmr> 0 = {100, },
+%<bch|ptm> 1 = {150,100},
+%<cmr> 1 = {200,50},
+%<pad> 1 = {150, },
+%<pmn> 1 = {50, },
+%<ppl> 1 = {100, },
+%<ugm> 1 = {150,150},
+%<cmr> 2 = {100,-100},
+%<pad|ppl|ptm> 2 = {50, },
+%<pmn> 2 = {-50, },
+%<bch> 3 = {50, },
+%<cmr> 3 = {100,-100},
+%<pmn> 3 = {-100, },
+%<ptm> 3 = {100,50},
+%<bch> 4 = {100, },
+%<cmr|pad> 4 = {150, },
+%<ppl|ptm> 4 = {50, },
+%<cmr> 5 = {100, },
+%<ptm> 5 = {50, },
+%<bch> 6 = {50, },
+%<cmr> 6 = {100, },
+%<bch|pad|ptm> 7 = {100, },
+%<cmr> 7 = {200,-150},
+%<pmn> 7 = {20, },
+%<ppl> 7 = {50, },
+%<cmr> 8 = {50,-50},
+%<cmr> 9 = {100,-100},
+%<m-t|cmr|pad|pmn|ppl> . = { ,500},
+%<blg> . = {400,600},
+%<bch|ptm|ugm> . = { ,700},
+%<blg> {,}= {300,500},
+%<m-t|cmr|pad|pmn|ppl> {,}= { ,500},
+%<bch|ugm> {,}= { ,600},
+%<ptm> {,}= { ,700},
+%<m-t|cmr|pad|ppl> : = { ,300},
+%<bch|ugm> : = { ,400},
+%<pmn> : = { ,200},
+%<ptm> : = { ,500},
+%<m-t|cmr|pad|ppl> ; = { ,300},
+%<bch|ugm> ; = { ,400},
+%<pmn> ; = { ,200},
+%<ptm> ; = { ,500},
+%<ptm> ! = { ,100},
+%<bch> ? = { ,200},
+%<ptm> ? = { ,100},
+%<ppl> ? = { ,300},
+%<pmn> " = {400,200},
+%<m-t|pad|pmn|ppl|ptm> & = {50,50},
+%<bch> & = { ,80},
+%<cmr> & = {100,50},
+%<ugm> & = {50,100},
+%<m-t|cmr|pad|pmn> \% = {100, },
+%<bch> \% = {50,50},
+%<ppl|ptm> \% = {100,100},
+%<ugm> \% = {100,50},
+%<m-t|pmn|ppl> * = {200,200},
+%<bch> * = {300,200},
+%<cmr> * = {400,100},
+%<pad> * = {500,100},
+%<ptm|ugm> * = {400,200},
+%<m-t|cmr|pmn|ppl> + = {150,200},
+%<bch|ugm> + = {250,250},
+%<pad|ptm> + = {250,200},
+%<m-t|pad|pmn|ppl> @ = {50,50},
+%<bch> @ = {80,50},
+%<cmr> @ = {200,50},
+%<ptm> @ = {150,150},
+%<m-t|bch|ugm> ~ = {150,150},
+%<cmr|pad|pmn|ppl|ptm> ~ = {200,150},
+%<ugm> {=}= {200,200},
+%<!blg> ( = {200, }, ) = { ,200},
+%<m-t|cmr|pad|ppl|ptm|ugm> / = {100,200},
+%<bch> / = { ,150},
+%<pmn> / = {100,150},
+%<m-t> - = {300,300},
+%<bch|pad> - = {300,400},
+%<pmn> - = {200,300},
+%<cmr> - = {500,300},
+%<ppl> - = {300,500},
+%<ptm> - = {500,500},
+%<ugm> - = {400,700},
+%<blg> _ = {0,300},
+%<m-t|pmn> \textendash = {200,200}, \textemdash = {150,150},
+%<bch> \textendash = {200,300}, \textemdash = {150,200},
+%<cmr> \textendash = {500,300}, \textemdash = {400,200},
+%<pad|ppl|ptm|ugm> \textendash = {300,300}, \textemdash = {200,200},
+%<m-t|bch|pmn|ugm> \textquoteleft = {400,200}, \textquoteright = {400,200},
+%<blg> \textquoteleft = {400,400}, \textquoteright = {400,400},
+%<cmr|pad> \textquoteleft = {800,200}, \textquoteright = {800,200},
+%<ppl> \textquoteleft = {700,400}, \textquoteright = {700,400},
+%<ptm> \textquoteleft = {800,500}, \textquoteright = {800,500},
+%<m-t|bch|pmn> \textquotedblleft = {400,200}, \textquotedblright = {400,200}
+%<blg> \textquotedblright = {300,300}
+%<cmr> \textquotedblleft = {700,100}, \textquotedblright = {500,300}
+%<pad> \textquotedblleft = {700,200}, \textquotedblright = {700,200}
+%<ppl> \textquotedblleft = {500,300}, \textquotedblright = {500,300}
+%<ptm> \textquotedblleft = {700,400}, \textquotedblright = {700,400}
+%<ugm> \textquotedblleft = {600,200}, \textquotedblright = {600,200}
+ }
+
+%<*cmr|pmn>
+\SetProtrusion
+%<cmr> [ name = cmr-it-OT1,
+%<pmn> [ name = pmnj-it-OT1,
+%<cmr> load = cmr-it ]
+%<pmn> load = pmnj-it ]
+%<cmr> { encoding = {OT1,OT4},
+%<pmn> { encoding = OT1,
+%<cmr> family = cmr,
+%<pmn> family = pmnj,
+%<cmr> shape = it }
+%<pmn> shape = {it,sl} }
+ {
+%<cmr> \AE = {100, },
+%<pmn> \AE = { ,-50},
+%<cmr> \OE = {100, },
+%<pmn> \OE = {50, }
+%<*cmr>
+ "00 = {200,150}, % \Gamma
+ "01 = {150,100}, % \Delta
+ "02 = {150, 50}, % \Theta
+ "03 = {150, 50}, % \Lambda
+ "04 = {100,100}, % \Xi
+ "05 = {100,100}, % \Pi
+ "06 = {100, 50}, % \Sigma
+ "07 = {200,150}, % \Upsilon
+ "08 = {150, 50}, % \Phi
+ "09 = {150,100}, % \Psi
+ "0A = { 50, 50} % \Omega
+%</cmr>
+ }
+
+%</cmr|pmn>
+\SetProtrusion
+%<m-t> [ name = T1-it-default,
+%<bch> [ name = bch-it-T1,
+%<blg> [ name = blg-it-T1,
+%<cmr> [ name = cmr-it-T1,
+%<pad> [ name = pad-it-T1,
+%<pmn> [ name = pmnj-it-T1,
+%<ppl> [ name = ppl-it-T1,
+%<ptm> [ name = ptm-it-T1,
+%<ugm> [ name = ugm-it-T1,
+%<m-t> load = OT1-it ]
+%<bch> load = bch-it ]
+%<blg> load = blg-T1 ]
+%<cmr> load = cmr-it ]
+%<pmn> load = pmnj-it ]
+%<pad> load = pad-it ]
+%<ppl> load = ppl-it ]
+%<ptm> load = ptm-it ]
+%<ugm> load = ugm-it ]
+%<m-t|bch|cmr|pad|pmn|ppl> { encoding = {T1,LY1},
+%<blg|ptm|ugm> { encoding = T1,
+%<bch> family = bch,
+%<blg> family = blg,
+%<cmr> family = cmr,
+%<pmn> family = pmnj,
+%<pad> family = {pad,padx,padj},
+%<ppl> family = {ppl,pplx,pplj},
+%<ptm> family = {ptm,ptmx,ptmj},
+%<ugm> family = ugm,
+%<m-t|bch|pad|pmn|ppl|ptm> shape = {it,sl} }
+%<blg|cmr|ugm> shape = it }
+ {
+%<m-t|bch|pmn> _ = { ,100},
+%<blg> _ = {0,300},
+%<cmr|ugm> _ = {100,200},
+%<pad|ppl|ptm> _ = {100,100},
+%<blg> . = {400,600},
+%<blg> {,}= {300,500},
+%<cmr> \AE = {100, },
+%<pmn> \AE = { ,-50},
+%<bch|pmn> \OE = { 50, },
+%<cmr> \OE = {100, },
+%<pmn> 031 = { ,-100}, % ffl
+%<cmr|ptm> 156 = {100, }, % IJ
+%<pad> 156 = {50, }, % IJ
+%<pmn> 156 = {20, }, % IJ
+%<pmn> 188 = { ,-30}, % ij
+%<pmn> \v t = { ,100},
+%<m-t|pad|ppl|ptm> \textbackslash = {100,200},
+%<cmr|ugm> \textbackslash = {300,300},
+%<bch> \textbackslash = {150,150},
+%<pmn> \textbackslash = {100,150},
+%<ugm> \textbar = {200,200},
+%<cmr> \textquotedblleft = {500,300},
+%<blg> \textquoteleft = {400,400}, \textquoteright = {400,400},
+%<blg> \textquotedbl = {300,300}, \textquotedblleft = {300,300},
+%<blg> \textquotedblright = {300,300}, \quotedblbase = {200,600},
+%<m-t|ptm> \quotesinglbase = {300,700}, \quotedblbase = {400,500},
+%<cmr> \quotesinglbase = {300,700}, \quotedblbase = {200,600},
+%<bch|pmn> \quotesinglbase = {200,500}, \quotedblbase = {150,500},
+%<pad|ppl> \quotesinglbase = {500,500}, \quotedblbase = {400,400},
+%<ugm> \quotesinglbase = {300,700}, \quotedblbase = {300,500},
+%<m-t|ppl|ptm> \guilsinglleft = {400,400}, \guilsinglright = {300,500},
+%<bch|pmn> \guilsinglleft = {300,400}, \guilsinglright = {200,500},
+%<cmr> \guilsinglleft = {500,300}, \guilsinglright = {400,400},
+%<pad> \guilsinglleft = {500,400}, \guilsinglright = {300,500},
+%<ugm> \guilsinglleft = {400,400}, \guilsinglright = {300,600},
+%<m-t|ppl> \guillemotleft = {300,300}, \guillemotright = {300,300},
+%<bch|pmn> \guillemotleft = {200,300}, \guillemotright = {150,400},
+%<cmr> \guillemotleft = {400,100}, \guillemotright = {200,300},
+%<pad> \guillemotleft = {300,300}, \guillemotright = {200,400},
+%<ptm> \guillemotleft = {300,400}, \guillemotright = {200,400},
+%<ugm> \guillemotleft = {300,400}, \guillemotright = {300,400},
+%<m-t|pad|ppl|ugm> \textexclamdown = {100, }, \textquestiondown = {200, },
+%<cmr|ptm> \textexclamdown = {200, }, \textquestiondown = {200, },
+%<pmn> \textexclamdown = {-50, }, \textquestiondown = {-50, },
+%<m-t|ppl|ugm> \textbraceleft = {200,100}, \textbraceright = {200,200},
+%<bch|pmn> \textbraceleft = {200, }, \textbraceright = { ,200},
+%<cmr|pad|ptm> \textbraceleft = {400,100}, \textbraceright = {200,200},
+%<bch|pmn> \textless = {100, }, \textgreater = { ,100},
+%<cmr|pad|ppl|ptm> \textless = {300,100}, \textgreater = {200,100}
+%<pmn> \textvisiblespace = {100,100}
+ }
+
+%<*m-t|cmr|pmn>
+\SetProtrusion
+%<m-t> [ name = T2A-it-default,
+%<cmr> [ name = cmr-it-T2A,
+%<pmn> [ name = pmnj-it-T2A,
+%<m-t> load = OT1-it ]
+%<cmr> load = cmr-it ]
+%<pmn> load = pmnj-it ]
+ { encoding = T2A,
+%<cmr> family = cmr,
+%<pmn> family = pmnj,
+%<m-t|pmn> shape = {it,sl} }
+%<cmr> shape = it }
+ {
+%<cmr> \CYRA = {100,50},
+%<pmn> \CYRA = {50, },
+%<cmr> \CYRB = {50, },
+%<cmr> \CYRV = {50, },
+%<pmn> \CYRV = {20,-50},
+%<cmr> \CYRG = {100, },
+%<pmn> \CYRG = {10, },
+%<cmr> \CYRD = {50, },
+%<cmr> \CYRE = {50, },
+%<pmn> \CYRE = {20,-50},
+%<cmr> \CYRZH = {50, },
+%<cmr> \CYRZ = {50, },
+%<pmn> \CYRZ = {20,-50},
+%<cmr> \CYRI = {50, },
+%<pmn> \CYRI = { ,-30},
+%<cmr> \CYRISHRT = {50, },
+%<cmr> \CYRK = {50, },
+%<pmn> \CYRK = {20, },
+%<cmr> \CYRL = {50, },
+%<cmr> \CYRM = {50, },
+%<pmn> \CYRM = { ,-30},
+%<cmr> \CYRN = {50, },
+%<cmr> \CYRO = {100, },
+%<pmn> \CYRO = {50, },
+%<cmr> \CYRP = {50, },
+%<cmr> \CYRR = {50, },
+%<pmn> \CYRR = {20,-50},
+%<cmr> \CYRS = {100, },
+%<pmn> \CYRS = {50, },
+%<cmr> \CYRT = {100, },
+%<pmn> \CYRT = {70, },
+%<cmr> \CYRU = {100, },
+%<pmn> \CYRU = {50, },
+%<cmr> \CYRF = {100, },
+%<cmr> \CYRH = {50, },
+%<cmr> \CYRC = {50, },
+%<cmr> \CYRCH = {100, },
+%<cmr> \CYRSH = {50, },
+%<cmr> \CYRSHCH = {50, },
+%<cmr> \CYRHRDSN = {100, },
+%<cmr> \CYRERY = {50, },
+%<cmr> \CYRSFTSN = {50, },
+%<cmr> \CYREREV = {50, },
+%<cmr> \CYRYU = {50, },
+%<cmr> \CYRYA = {50, },
+%<pmn> \CYRYA = { ,20},
+%<pmn> \cyrr = {-50, },
+%<m-t|pmn> _ = { ,100},
+%<cmr> _ = {100,200},
+%<pmn> 031 = { ,-100}, % ffl
+%<pmn> \v t = { ,100},
+%<m-t> \textbackslash = {100,200}, \quotedblbase = {400,500},
+%<cmr> \textbackslash = {300,300}, \quotedblbase = {200,600},
+%<pmn> \textbackslash = {100,150}, \quotedblbase = {150,500},
+%<m-t> \guillemotleft = {300,300}, \guillemotright = {300,300},
+%<cmr> \guillemotleft = {400,100}, \guillemotright = {200,300},
+%<pmn> \guillemotleft = {200,300}, \guillemotright = {150,400},
+%<m-t> \textbraceleft = {200,100}, \textbraceright = {200,200},
+%<cmr> \textbraceleft = {400,100}, \textbraceright = {200,200},
+%<pmn> \textbraceleft = {200, }, \textbraceright = { ,200},
+%<cmr> \textquotedblleft = {500,300},
+%<cmr> \textless = {300,100}, \textgreater = {200,100}
+%<pmn> \textless = {100, }, \textgreater = { ,100}
+ }
+
+%</m-t|cmr|pmn>
+%<*m-t|ptm>
+\SetProtrusion
+%<m-t> [ name = QX-it-default,
+%<ptm> [ name = ptm-it-QX,
+%<m-t> load = OT1-it ]
+%<ptm> load = ptm-it ]
+ { encoding = {QX},
+%<ptm> family = {ptm,ptmx,ptmj},
+ shape = {it,sl} }
+ {
+%<ptm> 009 = { , 50}, % fk
+ {=} = {100,100},
+%<m-t> \textunderscore = {100,100},
+%<ptm> \textunderscore = {100,150},
+ \textbackslash = {100,200},
+ \quotedblbase = {300,400},
+%<m-t> \guillemotleft = {300,300}, \guillemotright = {300,300},
+%<ptm> \guillemotleft = {200,400}, \guillemotright = {200,400},
+ \textexclamdown = {200, }, \textquestiondown = {200, },
+ \textbraceleft = {200,100}, \textbraceright = {200,200},
+ \textless = {100,100}, \textgreater = {100,100},
+ \textminus = {200,200}, \textdegree = {300,150},
+%<m-t> \copyright = {100,100}, \textregistered = {100,100}
+%<ptm> \textregistered = {100,150}, \copyright = {100,150},
+%<ptm> \textDelta = { 70, }, \textdelta = { , 50},
+%<ptm> \textpi = { 50, 80}, \textmu = { , 80},
+%<ptm> \texteuro = {200, }, \textellipsis = {100,200},
+%<ptm> \textquoteleft = {500,400}, \textquoteright = {500,400},
+%<ptm> \textquotedblleft = {500,300}, \textquotedblright = {400,400},
+%<ptm> \textapprox = { 50, 50}, \textinfty = {100,100},
+%<ptm> \textdagger = {150,150}, \textdaggerdbl = {100,100},
+%<ptm> \textdiv = {150,150}, \textasciitilde = { 80, 80},
+%<ptm> \texttimes = {100,150}, \textpm = { 50, 80},
+%<ptm> \textbullet = {300,100}, \textperiodcentered = {300,300},
+%<ptm> \textquotesingle = {500,500}, \textquotedbl = {300,300},
+%<ptm> \textperthousand = { ,50}
+ }
+
+%</m-t|ptm>
+%<*cmr|bch>
+\SetProtrusion
+%<cmr> [ name = cmr-it-T5,
+%<cmr> load = cmr-it ]
+%<bch> [ name = bch-it-T5,
+%<bch> load = bch-it ]
+ { encoding = T5,
+%<bch> family = bch,
+%<cmr> family = cmr,
+ shape = it }
+ {
+%<bch> _ = { ,100},
+%<cmr> _ = {100,200},
+%<bch> \textbackslash = {150,150},
+%<cmr> \textbackslash = {300,300},
+%<bch> \quotesinglbase = {200,500}, \quotedblbase = {150,500},
+%<cmr> \quotesinglbase = {300,700}, \quotedblbase = {200,600},
+%<bch> \guilsinglleft = {300,400}, \guilsinglright = {200,500},
+%<cmr> \guilsinglleft = {500,300}, \guilsinglright = {400,400},
+%<bch> \guillemotleft = {200,300}, \guillemotright = {150,400},
+%<cmr> \guillemotleft = {400,100}, \guillemotright = {200,300},
+%<bch> \textbraceleft = {200, }, \textbraceright = { ,200},
+%<cmr> \textbraceleft = {400,100}, \textbraceright = {200,200},
+%<bch> \textless = {100, }, \textgreater = { ,100}
+%<cmr> \textless = {300,100}, \textgreater = {200,100}
+ }
+
+%</cmr|bch>
+% \end{macrocode}
+%\changes{v1.8}{2005/06/01}{verified settings for slanted Computer Modern Roman}
+% Slanted is very similar to italic.
+% \begin{macrocode}
+%<*cmr>
+\SetProtrusion
+ [ name = cmr-sl,
+ load = cmr-it-OT1 ]
+ { encoding = {OT1,OT4},
+ family = cmr,
+ shape = sl }
+ {
+ L = { ,50},
+ f = { ,-50},
+ - = {300, },
+ \textendash = {400, }, \textemdash = {300, }
+ }
+
+\SetProtrusion
+ [ name = cmr-sl-T1,
+ load = cmr-it-T1 ]
+ { encoding = {T1,LY1},
+ family = cmr,
+ shape = sl }
+ {
+ L = { ,50},
+ f = { ,-50},
+ - = {300, },
+ \textendash = {400, }, \textemdash = {300, }
+ }
+
+\SetProtrusion
+ [ name = cmr-sl-T2A,
+ load = cmr-it-T2A ]
+ { encoding = T2A,
+ family = cmr,
+ shape = sl }
+ {
+ L = { ,50},
+ f = { ,-50},
+ - = {300, },
+ \textendash = {400, }, \textemdash = {300, }
+ }
+
+\SetProtrusion
+ [ name = cmr-sl-T5,
+ load = cmr-it-T5 ]
+ { encoding = T5,
+ family = cmr,
+ shape = sl }
+ {
+ L = { ,50},
+ f = { ,-50},
+ - = {300, },
+ \textendash = {400, }, \textemdash = {300, }
+ }
+
+\SetProtrusion
+ [ name = lmr-it-T1,
+ load = cmr-it-T1 ]
+ { encoding = {T1,LY1},
+ family = lmr,
+ shape = {it,sl} }
+ {
+ \textquotedblleft = { ,200}, \textquotedblright = { ,200},
+ \quotesinglbase = { ,400}, \quotedblbase = { ,500}
+ }
+
+% \end{macrocode}
+% Oldstyle numerals are slightly different.
+% \begin{macrocode}
+\SetProtrusion
+ [ name = cmr(oldstyle)-it,
+ load = cmr-it-T1 ]
+ { encoding = T1,
+ family = {hfor,cmor},
+ shape = {it,sl} }
+ {
+ 1 = {250, 50},
+ 2 = {150,-100},
+ 3 = {100,-50},
+ 4 = {150,150},
+ 6 = {200, },
+ 7 = {200, 50},
+ 8 = {150,-50},
+ 9 = {100, 50}
+ }
+
+%</cmr>
+%<*pmn>
+\SetProtrusion
+ [ name = pmnx-it,
+ load = pmnj-it ]
+ { encoding = OT1,
+ family = pmnx,
+ shape = {it,sl} }
+ {
+ 1 = {100,150}
+ }
+
+\SetProtrusion
+ [ name = pmnx-it-T1,
+ load = pmnj-it-T1 ]
+ { encoding = {T1,LY1},
+ family = pmnx,
+ shape = {it,sl} }
+ {
+ 1 = {100,150}
+ }
+
+\SetProtrusion
+ [ name = pmnx-it-T2A,
+ load = pmnj-it-T2A ]
+ { encoding = {T2A},
+ family = pmnx,
+ shape = {it,sl} }
+ {
+ 1 = {100,150}
+ }
+
+%</pmn>
+%<*ptm>
+\SetProtrusion
+ [ name = ptm-it-LY1,
+ load = ptm-it-T1 ]
+ { encoding = {LY1},
+ family = {ptm,ptmx,ptmj},
+ shape = {it,sl} }
+ {
+ _ = {100,100},
+ \texttrademark = {100,100},
+ \textregistered = {100,100},
+ \textcopyright = {100,100},
+ \textdegree = {300,100},
+ \textminus = {200,200},
+ \textellipsis = {100,200},
+% \texteuro = { , }, % ?
+ \textcent = {100,100},
+ \textquotesingle = {500, },
+ \textflorin = {100, 70},
+ \textdagger = {150,150},
+ \textdaggerdbl = {100,100},
+ \textbullet = {150,150},
+ \textonesuperior = {150,100},
+ \texttwosuperior = {150, 50},
+ \textthreesuperior = {150, 50},
+ \textparagraph = {100, },
+ \textperiodcentered = {500,300},
+ \textonequarter = { 50, },
+ \textonehalf = { 50, },
+ \textplusminus = {100,100},
+ \textmultiply = {150,150},
+ \textdivide = {150,150}
+ }
+
+%</ptm>
+% \end{macrocode}
+%
+%\subsubsection{Small caps}
+%
+% Small caps should inherit the values from their big brothers. Since values are
+% relative to character width, we don't need to adjust them any further (but
+% we have to reset some characters).
+% \begin{macrocode}
+%<*!(blg|ugm)>
+\SetProtrusion
+%<m-t> [ name = OT1-sc,
+%<bch> [ name = bch-sc,
+%<cmr> [ name = cmr-sc-OT1,
+%<pad> [ name = pad-sc,
+%<pmn> [ name = pmnj-sc,
+%<ppl> [ name = ppl-sc,
+%<ptm> [ name = ptm-sc,
+%<m-t> load = default ]
+%<bch> load = bch-default ]
+%<cmr> load = cmr-OT1 ]
+%<pad> load = pad-default ]
+%<pmn> load = pmnj-default ]
+%<ppl> load = ppl-default ]
+%<ptm> load = ptm-default ]
+%<m-t|bch|pad|pmn> { encoding = OT1,
+%<cmr|ppl|ptm> { encoding = {OT1,OT4},
+%<bch> family = bch,
+%<cmr> family = cmr,
+%<pad> family = {pad,padx,padj},
+%<pmn> family = pmnj,
+%<ppl> family = {ppl,pplx,pplj},
+%<ptm> family = {ptm,ptmx,ptmj},
+ shape = sc }
+ {
+ a = {50,50},
+%<cmr|pad|ppl|ptm> \ae = {50, },
+%<bch|pmn> c = {50, },
+%<bch|pad|pmn> d = { ,50},
+%<m-t|bch|cmr|pad|pmn|ptm> f = { ,50},
+%<bch|pad|pmn> g = {50, },
+%<m-t|cmr|pad|pmn|ppl|ptm> j = {50, },
+%<bch> j = {100, },
+%<m-t|bch|cmr|pad|pmn|ppl> l = { ,50},
+%<ptm> l = { ,80},
+%<m-t|bch|cmr|pad|pmn|ppl> 013 = { ,50}, % fl
+%<ptm> 013 = { ,80}, % fl
+%<bch|pad|pmn> o = {50,50},
+%<pad|pmn> \oe = {50, },
+%<ppl> p = { 0, 0},
+%<bch|pad|pmn> q = {50,70},
+%<ppl> q = { 0, },
+%<m-t|cmr|pad|pmn|ppl|ptm> r = { , 0},
+ t = {50,50},
+%<m-t|bch|cmr|pad|pmn|ppl> y = {50,50}
+%<ptm> y = {80,80}
+ }
+
+\SetProtrusion
+%<m-t> [ name = T1-sc,
+%<bch> [ name = bch-sc-T1,
+%<cmr> [ name = cmr-sc-T1,
+%<pad> [ name = pad-sc-T1,
+%<pmn> [ name = pmnj-sc-T1,
+%<ppl> [ name = ppl-sc-T1,
+%<ptm> [ name = ptm-sc-T1,
+%<m-t> load = T1-default ]
+%<bch> load = bch-T1 ]
+%<cmr> load = cmr-T1 ]
+%<pad> load = pad-T1 ]
+%<pmn> load = pmnj-T1 ]
+%<ppl> load = ppl-T1 ]
+%<ptm> load = ptm-T1 ]
+ { encoding = {T1,LY1},
+%<bch> family = bch,
+%<cmr> family = cmr,
+%<pad> family = {pad,padx,padj},
+%<pmn> family = pmnj,
+%<ppl> family = {ppl,pplx,pplj},
+%<ptm> family = {ptm,ptmx,ptmj},
+ shape = sc }
+ {
+ a = {50,50},
+%<cmr|pad|ppl|ptm> \ae = {50, },
+%<bch|pmn> c = {50, },
+%<bch|pad|pmn> d = { ,50},
+%<m-t|bch|cmr|pad|pmn|ptm> f = { ,50},
+%<bch|pad|pmn> g = {50, },
+%<m-t|cmr|pad|pmn|ppl|ptm> j = {50, },
+%<bch> j = {100, },
+%<m-t|bch|cmr|pad|pmn|ppl> l = { ,50},
+%<ptm> l = { ,80},
+%<m-t|bch|cmr|pad|pmn|ppl> 029 = { ,50}, % fl
+%<ptm> 029 = { ,80}, % fl
+%<bch|pad|pmn> o = {50,50},
+%<bch|pad|pmn> \oe = {50, },
+%<ppl> p = { 0, 0},
+%<bch|pad|pmn> q = {50,70},
+%<ppl> q = { 0, },
+%<m-t|cmr|pad|pmn|ppl|ptm> r = { , 0},
+ t = {50,50},
+%<m-t|bch|cmr|pad|pmn|ppl> y = {50,50}
+%<ptm> y = {80,80}
+ }
+
+%</!(blg|ugm)>
+%<*m-t|cmr>
+\SetProtrusion
+%<m-t> [ name = T2A-sc,
+%<cmr> [ name = cmr-sc-T2A,
+%<m-t> load = T2A-default ]
+%<cmr> load = cmr-T2A ]
+ { encoding = T2A,
+%<cmr> family = cmr,
+ shape = sc }
+ {
+ \cyra = {50,50},
+ \cyrg = { ,50},
+ \cyrt = {50,50},
+ \cyry = { ,50}
+ }
+
+%</m-t|cmr>
+%<*m-t>
+\SetProtrusion
+ [ name = QX-sc,
+ load = QX-default ]
+ { encoding = QX,
+ shape = sc }
+ {
+ a = {50,50},
+ f = { ,50},
+ j = {50, },
+ l = { ,50},
+ 013 = { ,50}, % fl
+ r = { , 0},
+ t = {50,50},
+ y = {50,50}
+ }
+
+%</m-t>
+%<*cmr|bch>
+\SetProtrusion
+%<bch> [ name = bch-sc-T5,
+%<bch> load = bch-T5 ]
+%<cmr> [ name = cmr-sc-T5,
+%<cmr> load = cmr-T5 ]
+ { encoding = T5,
+%<bch> family = bch,
+%<cmr> family = cmr,
+ shape = sc }
+ {
+ a = {50,50},
+%<bch> c = {50, },
+%<bch> d = { ,50},
+ f = { ,50},
+%<bch> g = {50, },
+%<bch> j = {100, },
+%<cmr> j = {50, },
+ l = { ,50},
+%<bch> o = {50,50},
+%<bch> q = { 0, },
+%<cmr> r = { , 0},
+ t = {50,50},
+ y = {50,50}
+ }
+
+%</cmr|bch>
+%<*pmn>
+\SetProtrusion
+ [ name = pmnx-sc,
+ load = pmnj-sc ]
+ { encoding = OT1,
+ family = pmnx,
+ shape = sc }
+ {
+ 1 = {230,180}
+ }
+
+\SetProtrusion
+ [ name = pmnx-sc-T1,
+ load = pmnj-sc-T1 ]
+ { encoding = {T1,LY1},
+ family = pmnx,
+ shape = sc }
+ {
+ 1 = {230,180}
+ }
+
+% \end{macrocode}
+%
+%\subsubsection{Italic small caps}
+% Minion provides real small caps in italics.
+% The \pkg{slantsc} package calls them |scit|, Philipp Lehman's
+% \pkg{fontinstallationguide} suggests |si|.
+% \begin{macrocode}
+\SetProtrusion
+ [ name = pmnj-scit,
+ load = pmnj-it ]
+ { encoding = OT1,
+ family = pmnj,
+ shape = {scit,si} }
+ {
+ a = {50, },
+ \ae = { ,-50},
+ b = {20,-50},
+ c = {50,-50},
+ d = {20, 0},
+ e = {20,-50},
+ f = {10, 0},
+ 012 = {10,-50}, % fi
+ 013 = {10,-50}, % fl
+ 014 = {10,-50}, % ffi
+ 015 = {10,-50}, % ffl
+ g = {50,-50},
+ i = {20,-50},
+ j = {20, 0},
+ k = {20, },
+ l = {20,50},
+ m = { ,-30},
+ n = { ,-30},
+ o = {50, },
+ \oe = {50,-50},
+ p = {20,-50},
+ q = {50, },
+ r = {20, 0},
+ s = {20,-30},
+ t = {70, },
+ u = {50,-50},
+ v = {100, },
+ w = {100, },
+ y = {50, },
+ z = { ,-50}
+ }
+
+\SetProtrusion
+ [ name = pmnj-scit-T1,
+ load = pmnj-it-T1 ]
+ { encoding = {T1,LY1},
+ family = pmnj,
+ shape = {scit,si} }
+ {
+ a = {50, },
+ \ae = { ,-50},
+ b = {20,-50},
+ c = {50,-50},
+ d = {20, 0},
+ e = {20,-50},
+ f = {10, 0},
+ 028 = {10,-50}, % fi
+ 029 = {10,-50}, % fl
+ 030 = {10,-50}, % ffi
+ 031 = {10,-50}, % ffl
+ g = {50,-50},
+ i = {20,-50},
+ 188 = {20, 0}, % ij
+ j = {20, 0},
+ k = {20, },
+ l = {20,50},
+ m = { ,-30},
+ n = { ,-30},
+ o = {50, },
+ \oe = {50,-50},
+ p = {20,-50},
+ q = {50, },
+ r = {20, 0},
+ s = {20,-30},
+ t = {70, },
+ u = {50,-50},
+ v = {100, },
+ w = {100, },
+ y = {50, },
+ z = { ,-50}
+ }
+
+\SetProtrusion
+ [ name = pmnx-scit,
+ load = pmnj-scit ]
+ { encoding = OT1,
+ family = pmnx,
+ shape = {scit,si} }
+ {
+ 1 = {100,150}
+ }
+
+\SetProtrusion
+ [ name = pmnx-scit-T1,
+ load = pmnj-scit-T1 ]
+ { encoding = {T1,LY1},
+ family = pmnx,
+ shape = {scit,si} }
+ {
+ 1 = {100,150}
+ }
+
+%</pmn>
+% \end{macrocode}
+%
+%\subsubsection{Text companion}
+%
+% Finally the <TS1> encoding.
+% Still quite incomplete for Times and especially Palatino. Anybody?
+%\changes{v1.2}{2004/09/28}{add settings for Computer Modern Roman and
+% Adobe Garamond in <TS1> encoding}
+% \begin{macrocode}
+\SetProtrusion
+%<m-t> [ name = textcomp ]
+%<bch> [ name = bch-textcomp ]
+%<blg> [ name = blg-textcomp ]
+%<cmr> [ name = cmr-textcomp ]
+%<pad> [ name = pad-textcomp ]
+%<pmn> [ name = pmn-textcomp ]
+%<ppl> [ name = ppl-textcomp ]
+%<ptm> [ name = ptm-textcomp ]
+%<ugm> [ name = ugm-textcomp ]
+%<m-t> { encoding = TS1 }
+%<!m-t> { encoding = TS1,
+%<bch> family = bch }
+%<blg> family = blg }
+%<cmr> family = cmr }
+%<pad> family = {pad,padx,padj} }
+%<pmn> family = {pmnx,pmnj} }
+%<ppl> family = {ppl,pplx,pplj} }
+%<ptm> family = {ptm,ptmx,ptmj} }
+%<ugm> family = ugm }
+ {
+%<blg> \textquotestraightbase = {400,500},
+%<cmr> \textquotestraightbase = {300,300},
+%<pad|pmn> \textquotestraightbase = {400,400},
+%<blg> \textquotestraightdblbase = {300,400},
+%<cmr|pmn> \textquotestraightdblbase = {300,300},
+%<pad> \textquotestraightdblbase = {400,400},
+%<bch|cmr|pad|pmn|ugm> \texttwelveudash = {200,200},
+%<bch|cmr|pad|pmn> \textthreequartersemdash = {150,150},
+%<ugm> \textthreequartersemdash = {200,200},
+%<blg> \textquotesingle = {500,600},
+%<cmr|pmn> \textquotesingle = {300,400},
+%<pad> \textquotesingle = {400,500},
+%<ptm> \textquotesingle = {500,500},
+%<ugm> \textquotesingle = {300,500},
+%<bch|cmr|pmn> \textasteriskcentered = {200,300},
+%<blg> \textasteriskcentered = {150,200},
+%<pad> \textasteriskcentered = {300,300},
+%<ugm> \textasteriskcentered = {100,200},
+%<pmn> \textfractionsolidus = {-200,-200},
+%<cmr> \textoneoldstyle = {100,100},
+%<pmn> \textoneoldstyle = { , 50},
+%<cmr> \textthreeoldstyle = { , 50},
+%<pad|pmn> \textthreeoldstyle = { 50, },
+%<cmr> \textfouroldstyle = { 50, 50},
+%<pad|pmn> \textfouroldstyle = { 50, },
+%<cmr|pad|pmn> \textsevenoldstyle = { 50, 80},
+%<cmr> \textlangle = {400, },
+%<cmr> \textrangle = { ,400},
+%<m-t|bch|pmn|ptm> \textminus = {200,200},
+%<cmr|pad|ppl> \textminus = {300,300},
+%<blg|ugm> \textminus = {250,300},
+%<bch|pad|pmn> \textlbrackdbl = {100, },
+%<blg> \textlbrackdbl = {200, },
+%<bch|pad|pmn> \textrbrackdbl = { ,100},
+%<blg> \textrbrackdbl = { ,200},
+%<pmn> \textasciigrave = {200,500},
+%<bch|blg|cmr|pad|pmn> \texttildelow = {200,250},
+%<pmn> \textasciibreve = {300,400},
+%<pmn> \textasciicaron = {300,400},
+%<pmn> \textacutedbl = {200,300},
+%<pmn> \textgravedbl = {150,300},
+%<bch|pmn|ugm> \textdagger = { 80, 80},
+%<blg> \textdagger = {200,200},
+%<cmr|pad> \textdagger = {100,100},
+%<ptm> \textdagger = {150,150},
+%<blg> \textdaggerdbl = {150,150},
+%<cmr|pad|pmn> \textdaggerdbl = { 80, 80},
+%<ptm> \textdaggerdbl = {100,100},
+%<bch> \textbardbl = {100,100},
+%<blg|ugm> \textbardbl = {150,150},
+%<bch> \textbullet = {200,200},
+%<blg> \textbullet = {400,500},
+%<cmr|pad|pmn> \textbullet = { ,100},
+%<ptm> \textbullet = {150,150},
+%<ugm> \textbullet = { 50,100},
+%<bch|cmr|pmn> \textcelsius = { 50, },
+%<pad> \textcelsius = { 80, },
+%<bch> \textflorin = { 50, 50},
+%<blg> \textflorin = {100,100},
+%<pad|ugm> \textflorin = { ,100},
+%<pmn> \textflorin = { 50,100},
+%<ptm> \textflorin = { 50, 70},
+%<cmr> \textcolonmonetary = { , 50},
+%<pad|pmn> \textcolonmonetary = { 50, },
+%<pmn> \textinterrobang = { ,100},
+%<pmn> \textinterrobangdown = {100, },
+%<m-t|pad|ptm> \texttrademark = {100,100},
+%<bch> \texttrademark = {150,150},
+%<blg|cmr|ppl> \texttrademark = {200,200},
+%<pmn> \texttrademark = { 50, 50},
+%<ugm> \texttrademark = {100,150},
+%<bch|ugm> \textcent = { 50, },
+%<ptm> \textcent = {100,100},
+%<bch> \textsterling = { 50, },
+%<ugm> \textsterling = { , 50},
+%<bch> \textbrokenbar = {200,200},
+%<blg> \textbrokenbar = {250,250},
+%<ugm> \textbrokenbar = {200,300},
+%<pmn> \textasciidieresis = {300,400},
+%<m-t|bch|cmr|pad|ptm|ugm> \textcopyright = {100,100},
+%<pmn> \textcopyright = {100,150},
+%<ppl> \textcopyright = {200,200},
+%<bch|cmr|ugm> \textordfeminine = {100,200},
+%<pad|pmn> \textordfeminine = {200,200},
+%<bch|cmr|pad|pmn|ugm> \textlnot = {200, },
+%<blg> \textlnot = {200,100},
+%<m-t|bch|cmr|pad|ptm|ugm> \textregistered = {100,100},
+%<pmn> \textregistered = { 50,150},
+%<ppl> \textregistered = {200,200},
+%<pmn> \textasciimacron = {150,200},
+%<m-t|ppl|ptm> \textdegree = {300,300},
+%<bch> \textdegree = {150,200},
+%<blg|ugm> \textdegree = {200,200},
+%<cmr|pad> \textdegree = {400,400},
+%<pmn> \textdegree = {150,400},
+%<bch|cmr|pad|pmn|ugm> \textpm = {150,200},
+%<blg> \textpm = {100,100},
+%<ptm> \textpm = { 50, 80},
+%<bch|blg|ugm> \texttwosuperior = {100,200},
+%<cmr> \texttwosuperior = { 50,100},
+%<pad|pmn> \texttwosuperior = {200,200},
+%<ptm> \texttwosuperior = { 50, 50},
+%<bch|blg|ugm> \textthreesuperior = {100,200},
+%<cmr> \textthreesuperior = { 50,100},
+%<pad|pmn> \textthreesuperior = {200,200},
+%<ptm> \textthreesuperior = { 50, 50},
+%<pmn> \textasciiacute = {300,400},
+%<bch|ugm> \textmu = { ,100},
+%<bch|pad|pmn> \textparagraph = { ,100},
+%<bch|cmr|pad|pmn> \textperiodcentered = {300,400},
+%<blg> \textperiodcentered = {400,500},
+%<ptm> \textperiodcentered = {300,300},
+%<ugm> \textperiodcentered = {200,500},
+%<bch|blg|ugm> \textonesuperior = {200,300},
+%<cmr|pad|pmn> \textonesuperior = {200,200},
+%<ptm> \textonesuperior = {100,100},
+%<bch|pad|pmn|ugm> \textordmasculine = {200,200},
+%<blg|cmr> \textordmasculine = {100,200},
+%<bch|cmr|pmn> \texteuro = {100, },
+%<pad> \texteuro = { 50,100},
+%<bch> \texttimes = {200,200},
+%<blg|ptm> \texttimes = {100,100},
+%<cmr> \texttimes = {150,250},
+%<pad> \texttimes = {100,150},
+%<pmn> \texttimes = { 70,100},
+%<ugm> \texttimes = {200,300},
+%<bch|pad|pmn> \textdiv = {150,200}
+%<blg> \textdiv = {100,100}
+%<cmr> \textdiv = {150,250}
+%<ptm> \textdiv = { 50,100},
+%<ugm> \textdiv = {200,300},
+%<ptm> \textperthousand = { ,50}
+%<ugm> \textsection = { ,100},
+%<ugm> \textonehalf = { 50,100},
+%<ugm> \textonequarter = { 50,100},
+%<ugm> \textthreequarters = { 50,100},
+%<ugm> \textsurd = { ,100}
+% \end{macrocode}
+% Remaining slots in the source file.
+%\iffalse
+% \textyen = { , },
+% \texttwooldstyle = { , },
+% \textfiveoldstyle = { , },
+% \textsixoldstyle = { , },
+% \texteightoldstyle = { , },
+% \textnineoldstyle = { , },
+% \textleftarrow = { , },
+% \textrightarrow = { , },
+% \textblank = { , },
+% \textdollar = { , },
+% \textdblhyphen = { , },
+% \textdblhyphenchar = { , },
+% \textohm = { , },
+% \textmho = { , },
+% \textbigcircle = { , },
+% \textuparrow = { , },
+% \textdownarrow = { , },
+% \textborn = { , },
+% \textdied = { , },
+% \textmarried = { , },
+% \textdivorced = { , },
+% \textleaf = { , },
+% \textmusicalnote = { , },
+% \textdollaroldstyle = { , },
+% \textcentoldstyle = { , },
+% \textwon = { , },
+% \textnaira = { , },
+% \textguarani = { , },
+% \textpeso = { , },
+% \textlira = { , },
+% \textrecipe = { , },
+% \textdong = { , },
+% \textpertenthousand = { , },
+% \textpilcrow = { , },
+% \textbaht = { , },
+% \textnumero = { , },
+% \textdiscount = { , },
+% \textestimated = { , },
+% \textopenbullet = { , },
+% \textservicemark = { , },
+% \textlquill = { , },
+% \textrquill = { , },
+% \textcopyleft = { , },
+% \textcircledP = { , },
+% \textreferencemark = { , },
+%\fi
+% \begin{macrocode}
+ }
+
+%<*cmr|pad|pmn|ugm>
+\SetProtrusion
+%<cmr> [ name = cmr-textcomp-it ]
+%<pad> [ name = pad-textcomp-it ]
+%<pmn> [ name = pmn-textcomp-it ]
+%<ugm> [ name = ugm-textcomp-it ]
+ { encoding = TS1,
+%<cmr> family = cmr,
+%<pad> family = {pad,padx,padj},
+%<pmn> family = {pmnx,pmnj},
+%<ugm> family = ugm,
+%<!ugm> shape = {it,sl} }
+%<ugm> shape = it }
+ {
+%<cmr> \textquotestraightbase = {300,600},
+%<pad|pmn> \textquotestraightbase = {400,400},
+%<cmr> \textquotestraightdblbase = {300,600},
+%<pad> \textquotestraightdblbase = {300,400},
+%<pmn> \textquotestraightdblbase = {300,300},
+ \texttwelveudash = {200,200},
+%<cmr|pad|pmn> \textthreequartersemdash = {150,150},
+%<ugm> \textthreequartersemdash = {200,200},
+%<cmr> \textquotesingle = {600,300},
+%<pad> \textquotesingle = {800,100},
+%<pmn> \textquotesingle = {300,200},
+%<ugm> \textquotesingle = {500,500},
+%<cmr> \textasteriskcentered = {300,200},
+%<pad> \textasteriskcentered = {500,100},
+%<pmn> \textasteriskcentered = {200,300},
+%<ugm> \textasteriskcentered = {300,150},
+%<pmn> \textfractionsolidus = {-200,-200},
+%<cmr> \textoneoldstyle = {100, 50},
+%<pad> \textoneoldstyle = {100, },
+%<pmn> \textoneoldstyle = { 50, },
+%<pad> \texttwooldstyle = { 50, },
+%<pmn> \texttwooldstyle = {-50, },
+%<cmr> \textthreeoldstyle = {100, 50},
+%<pmn> \textthreeoldstyle = {-100, },
+%<cmr> \textfouroldstyle = { 50, 50},
+%<pad> \textfouroldstyle = { 50,100},
+%<cmr> \textsevenoldstyle = { 50, 80},
+%<pad> \textsevenoldstyle = { 50, },
+%<pmn> \textsevenoldstyle = { 20, },
+%<cmr> \textlangle = {400, },
+%<cmr> \textrangle = { ,400},
+%<cmr|pad> \textminus = {300,300},
+%<pmn> \textminus = {200,200},
+%<ugm> \textminus = {250,300},
+%<pad|pmn> \textlbrackdbl = {100, },
+%<pad|pmn> \textrbrackdbl = { ,100},
+%<pmn> \textasciigrave = {300,300},
+%<cmr|pad|pmn> \texttildelow = {200,250},
+%<pmn> \textasciibreve = {300,300},
+%<pmn> \textasciicaron = {300,300},
+%<pmn> \textacutedbl = {200,300},
+%<pmn> \textgravedbl = {150,300},
+%<cmr> \textdagger = {100,100},
+%<pad> \textdagger = {200,100},
+%<pmn> \textdagger = { 80, 50},
+%<ugm> \textdagger = { 80, 80},
+%<cmr|pad> \textdaggerdbl = { 80, 80},
+%<pmn> \textdaggerdbl = { 80, 50},
+%<ugm> \textbardbl = {150,150},
+%<cmr> \textbullet = {200,100},
+%<pad> \textbullet = {300, },
+%<pmn> \textbullet = { 30, 70},
+%<ugm> \textbullet = { 50,100},
+%<cmr> \textcelsius = {100, },
+%<pad> \textcelsius = {200, },
+%<pmn> \textcelsius = { 50,-50},
+%<pad> \textflorin = {100, },
+%<pmn> \textflorin = { 50,100},
+%<ugm> \textflorin = { ,100},
+%<cmr> \textcolonmonetary = {150, },
+%<pad> \textcolonmonetary = {100, },
+%<pmn> \textcolonmonetary = { 50,-50},
+%<cmr|pad> \texttrademark = {200, },
+%<pmn> \texttrademark = { 50,100},
+%<ugm> \texttrademark = {150, 50},
+%<ugm> \textcent = { 50, },
+%<ugm> \textsterling = { , 50},
+%<ugm> \textbrokenbar = {200,300},
+%<pmn> \textasciidieresis = {300,200},
+%<cmr> \textcopyright = {100, },
+%<pad> \textcopyright = {200,100},
+%<pmn> \textcopyright = {100,150},
+%<ugm> \textcopyright = {300, },
+%<cmr> \textordfeminine = {100,100},
+%<pmn> \textordfeminine = {200,200},
+%<ugm> \textordfeminine = {100,200},
+%<cmr|pad> \textlnot = {300, },
+%<pmn|ugm> \textlnot = {200, },
+%<cmr> \textregistered = {100, },
+%<pad> \textregistered = {200,100},
+%<pmn> \textregistered = { 50,150},
+%<ugm> \textregistered = {300, },
+%<pmn> \textasciimacron = {150,200},
+%<cmr|pad> \textdegree = {500,100},
+%<pmn> \textdegree = {150,150},
+%<ugm> \textdegree = {300,200},
+%<cmr> \textpm = {150,100},
+%<pad> \textpm = {200,150},
+%<pmn|ugm> \textpm = {150,200},
+%<cmr> \textonesuperior = {400, },
+%<pad> \textonesuperior = {300,100},
+%<pmn> \textonesuperior = {200,100},
+%<ugm> \textonesuperior = {300,300},
+%<cmr> \texttwosuperior = {400, },
+%<pad> \texttwosuperior = {300, },
+%<pmn> \texttwosuperior = {200,100},
+%<ugm> \texttwosuperior = {300,200},
+%<cmr> \textthreesuperior = {400, },
+%<pad> \textthreesuperior = {300, },
+%<pmn> \textthreesuperior = {200,100},
+%<ugm> \textthreesuperior = {300,200},
+%<ugm> \textmu = { ,100},
+%<pmn> \textasciiacute = {300,200},
+%<cmr> \textparagraph = {200, },
+%<pmn> \textparagraph = { ,100},
+%<cmr> \textperiodcentered = {500,500},
+%<pad|pmn|ugm> \textperiodcentered = {300,400},
+%<cmr> \textordmasculine = {100,100},
+%<pmn> \textordmasculine = {200,200},
+%<ugm> \textordmasculine = {300,200},
+%<cmr> \texteuro = {200, },
+%<pad> \texteuro = {100, },
+%<pmn> \texteuro = {100,-50},
+%<cmr> \texttimes = {200,200},
+%<pad> \texttimes = {200,100},
+%<pmn> \texttimes = { 70,100},
+%<ugm> \texttimes = {200,300},
+%<cmr|pad> \textdiv = {200,200}
+%<pmn> \textdiv = {150,200}
+%<ugm> \textdiv = {200,300},
+%<ugm> \textsection = { ,200},
+%<ugm> \textonehalf = { 50,100},
+%<ugm> \textonequarter = { 50,100},
+%<ugm> \textthreequarters = { 50,100},
+%<ugm> \textsurd = { ,100}
+ }
+
+%</cmr|pad|pmn|ugm>
+% \end{macrocode}
+%
+%\subsubsection{Computer Modern math}
+%
+% Now to the math symbols for Computer Modern Roman. Definitions have been
+% extracted from \file{fontmath.ltx}.
+%\changes{v1.2}{2004/10/02}{add settings for Computer Modern Roman math symbols}
+% I did not spend too much time fiddling with these settings, so they can surely
+% be improved.
+%
+% The math font `|operators|' (also used for the \cmd\mathrm\ and
+% \cmd\mathbf\ alphabets) is |OT1/cmr|, which we've already set up above.
+% It's declared as:
+%\begin{verbatim}
+%\DeclareSymbolFont{operators} {OT1}{cmr}{m} {n}
+%\SetSymbolFont{operators}{bold}{OT1}{cmr}{bx}{n}
+%\end{verbatim}
+%
+% \cmd\mathit\ (|OT1/cmr/m/it|) is also already set up.
+%
+% There are (for the moment) no settings for \cmd\mathsf\ and \cmd\mathtt.
+%
+% Math font `|letters|' (also used as \cmd\mathnormal) is declared as:
+%\begin{verbatim}
+%\DeclareSymbolFont{letters} {OML}{cmm}{m}{it}
+%\SetSymbolFont{letters} {bold}{OML}{cmm}{b}{it}
+%\end{verbatim}
+%\changes{v1.6}{2004/12/26}{tune <CMR> math letters (<OML> encoding)}
+% \begin{macrocode}
+%<*cmr>
+\SetProtrusion
+ [ name = cmr-math-letters ]
+ { encoding = OML,
+ family = cmm,
+ series = {m,b},
+ shape = it }
+ {
+ A = {100, 50}, % \mathnormal
+ B = { 50, },
+ C = { 50, },
+ D = { 50, 50},
+ E = { 50, },
+ F = {100, 50},
+ G = { 50, 50},
+ H = { 50, 50},
+ I = { 50, 50},
+ J = {150, 50},
+ K = { 50,100},
+ L = { 50, 50},
+ M = { 50, },
+ N = { 50, },
+ O = { 50, },
+ P = { 50, },
+ Q = { 50, 50},
+ R = { 50, },
+ S = { 50, },
+ T = { 50,100},
+ U = { 50, 50},
+ V = {100,100},
+ W = { 50,100},
+ X = { 50,100},
+ Y = {100,100},
+ f = {100,100},
+ h = { ,100},
+ i = { , 50},
+ j = { , 50},
+ k = { , 50},
+ r = { , 50},
+ v = { , 50},
+ w = { , 50},
+ x = { , 50},
+ "0B = { 50,100}, % \alpha
+ "0C = { 50, 50}, % \beta
+ "0D = {200,150}, % \gamma
+ "0E = { 50, 50}, % \delta
+ "0F = { 50, 50}, % \epsilon
+ "10 = { 50,150}, % \zeta
+ "12 = { 50, }, % \theta
+ "13 = { ,100}, % \iota
+ "14 = { ,100}, % \kappa
+ "15 = {100, 50}, % \lambda
+ "16 = { , 50}, % \mu
+ "17 = { , 50}, % \nu
+ "18 = { , 50}, % \xi
+ "19 = { 50,100}, % \pi
+ "1A = { 50, 50}, % \rho
+ "1B = { ,150}, % \sigma
+ "1C = { 50,150}, % \tau
+ "1D = { 50, 50}, % \upsilon
+ "1F = { 50,100}, % \chi
+ "20 = { 50, 50}, % \psi
+ "21 = { , 50}, % \omega
+ "22 = { , 50}, % \varepsilon
+ "23 = { , 50}, % \vartheta
+ "24 = { , 50}, % \varpi
+ "25 = {100, }, % \varrho
+ "26 = {100,100}, % \varsigma
+ "27 = { 50, 50}, % \varphi
+ "28 = {100,100}, % \leftharpoonup
+ "29 = {100,100}, % \leftharpoondown
+ "2A = {100,100}, % \rightharpoonup
+ "2B = {100,100}, % \rightharpoondown
+ "2C = {300,200}, % \lhook
+ "2D = {200,300}, % \rhook
+ "2E = { ,100}, % \triangleright
+ "2F = {100, }, % \triangleleft
+ "3A = { ,500}, % ., \ldotp
+ "3B = { ,500}, % ,
+ "3C = {200,100}, % <
+ "3D = {300,400}, % /
+ "3E = {100,200}, % >
+ "3F = {200,200}, % \star
+ "5B = { ,100}, % \flat
+ "5E = {200,200}, % \smile
+ "5F = {200,200}, % \frown
+ "7C = {100, }, % \jmath
+ "7D = { ,100} % \wp
+% \end{macrocode}
+% Remaining slots in the source file.
+%\iffalse
+% "11 = { , }, % \eta
+% "1E = { , }, % \phi
+% "40 = { , }, % \partial
+% "5C = { , }, % \natural
+% "5D = { , }, % \sharp
+% "60 = { , }, % \ell
+% "7B = { , }, % \imath
+%\fi
+% \begin{macrocode}
+ }
+
+% \end{macrocode}
+% Math font `|symbols|' (also used for the \cmd\mathcal\ alphabet) is declared
+% as:
+%\begin{verbatim}
+%\DeclareSymbolFont{symbols} {OMS}{cmsy}{m}{n}
+%\SetSymbolFont{symbols} {bold}{OMS}{cmsy}{b}{n}
+%\end{verbatim}
+% \begin{macrocode}
+\SetProtrusion
+ [ name = cmr-math-symbols ]
+ { encoding = OMS,
+ family = cmsy,
+ series = {m,b},
+ shape = n }
+ {
+ A = {150, 50}, % \mathcal
+ C = { ,100},
+ D = { , 50},
+ F = { 50,150},
+ I = { ,100},
+ J = {100,150},
+ K = { ,100},
+ L = {100, },
+ M = { 50, 50},
+ N = { 50,100},
+ P = { , 50},
+ Q = { 50, },
+ R = { , 50},
+ T = { 50,150},
+ V = { 50, 50},
+ W = { , 50},
+ X = {100,100},
+ Y = {100, },
+ Z = {100,150},
+ "00 = {300,300}, % -
+ "01 = { ,700}, % \cdot, \cdotp
+ "02 = {150,250}, % \times
+ "03 = {150,250}, % *, \ast
+ "04 = {200,300}, % \div
+ "05 = {150,250}, % \diamond
+ "06 = {200,200}, % \pm
+ "07 = {200,200}, % \mp
+ "08 = {100,100}, % \oplus
+ "09 = {100,100}, % \ominus
+ "0A = {100,100}, % \otimes
+ "0B = {100,100}, % \oslash
+ "0C = {100,100}, % \odot
+ "0D = {100,100}, % \bigcirc
+ "0E = {100,100}, % \circ
+ "0F = {100,100}, % \bullet
+ "10 = {100,100}, % \asymp
+ "11 = {100,100}, % \equiv
+ "12 = {200,100}, % \subseteq
+ "13 = {100,200}, % \supseteq
+ "14 = {200,100}, % \leq
+ "15 = {100,200}, % \geq
+ "16 = {200,100}, % \preceq
+ "17 = {100,200}, % \succeq
+ "18 = {200,200}, % \sim
+ "19 = {150,150}, % \approx
+ "1A = {200,100}, % \subset
+ "1B = {100,200}, % \supset
+ "1C = {200,100}, % \ll
+ "1D = {100,200}, % \gg
+ "1E = {300,100}, % \prec
+ "1F = {100,300}, % \succ
+ "20 = {100,200}, % \leftarrow
+ "21 = {200,100}, % \rightarrow
+ "22 = {100,100}, % \uparrow
+ "23 = {100,100}, % \downarrow
+ "24 = {100,100}, % \leftrightarrow
+ "25 = {100,100}, % \nearrow
+ "26 = {100,100}, % \searrow
+ "27 = {100,100}, % \simeq
+ "28 = {100,100}, % \Leftarrow
+ "29 = {100,100}, % \Rightarrow
+ "2A = {100,100}, % \Uparrow
+ "2B = {100,100}, % \Downarrow
+ "2C = {100,100}, % \Leftrightarrow
+ "2D = {100,100}, % \nwarrow
+ "2E = {100,100}, % \swarrow
+ "2F = { ,100}, % \propto
+ "30 = { ,400}, % \prime
+ "31 = {100,100}, % \infty
+ "32 = {150,100}, % \in
+ "33 = {100,150}, % \ni
+ "34 = {100,100}, % \triangle, \bigtriangleup
+ "35 = {100,100}, % \bigtriangledown
+ "38 = { ,100}, % \forall
+ "39 = {100, }, % \exists
+ "3A = {200, }, % \neg
+ "3E = {200,200}, % \top
+ "3F = {200,200}, % \bot, \perp
+ "5E = {100,200}, % \wedge
+ "5F = {100,200}, % \vee
+ "60 = { ,300}, % \vdash
+ "61 = {300, }, % \dashv
+ "62 = {100,100}, % \lfloor
+ "63 = {100,100}, % \rfloor
+ "64 = {100,100}, % \lceil
+ "65 = {100,100}, % \rceil
+ "66 = {150, }, % \lbrace
+ "67 = { ,150}, % \rbrace
+ "68 = {400, }, % \langle
+ "69 = { ,400}, % \rangle
+ "6C = {100,100}, % \updownarrow
+ "6D = {100,100}, % \Updownarrow
+ "6E = {100,300}, % \, \backslash, \setminus
+ "72 = {100,100}, % \nabla
+ "79 = {200,200}, % \dagger
+ "7A = {100,100}, % \ddagger
+ "7B = {100, }, % \mathparagraph
+ "7C = {100,100}, % \clubsuit
+ "7D = {100,100}, % \diamondsuit
+ "7E = {100,100}, % \heartsuit
+ "7F = {100,100} % \spadesuit
+% \end{macrocode}
+% Remaining slots in the source file.
+%\iffalse
+% "36 = { , }, % \not
+% "37 = { , }, % \mapstochar
+% "3B = { , }, % \emptyset
+% "3C = { , }, % \Re
+% "3D = { , }, % \Im
+% "40 = { , }, % \aleph
+% "5B = { , }, % \cup
+% "5C = { , }, % \cap
+% "5D = { , }, % \uplus
+% "6A = { , }, % \arrowvert, \mid, \vert, |
+% "6B = { , }, % \Arrowvert, \parallel, \Vert
+% "6F = { , }, % \wr
+% "70 = { , }, % \sqrtsign
+% "71 = { , }, % \amalg
+% "73 = { , }, % \smallint
+% "74 = { , }, % \sqcup
+% "75 = { , }, % \sqcap
+% "76 = { , }, % \sqsubseteq
+% "77 = { , }, % \sqsupseteq
+% "78 = { , }, % \mathsection
+%\fi
+% \begin{macrocode}
+ }
+
+% \end{macrocode}
+% We don't bother about `|largesymbols|', since it will only be used in display
+% math, where protrusion doesn't work anyway. It's declared as:
+%\begin{verbatim}
+%\DeclareSymbolFont{largesymbols}{OMX}{cmex}{m}{n}
+%\end{verbatim}
+%\iffalse
+%\SetProtrusion
+% [ name = cmr-math-largesymbols ]
+% { encoding = OMX,
+% family = cmex }
+% {
+% "00 % (
+% "01 % )
+% "02 % [
+% "03 % ]
+% "04 % \lfloor
+% "05 % \rfloor
+% "06 % \lceil
+% "07 % \rceil
+% "08 % \lbrace
+% "09 % \rbrace
+% "0A % <, \langle
+% "0B % >, \rangle
+% "0C % \vert, |
+% "0D % \Vert
+% "0E % /
+% "0F % \backslash
+% "3A % \lgroup
+% "3B % \rgroup
+% "3C % \arrowvert
+% "3D % \Arrowvert
+% "3E % \bracevert
+% "3F % \updownarrow
+% "40 % \lmoustache
+% "41 % \rmoustache
+% "46 % \bigsqcup
+% "48 % \ointop
+% "4A % \bigodot
+% "4C % \bigoplus
+% "4E % \bigotimes
+% "50 % \sum
+% "51 % \prod
+% "52 % \intop
+% "53 % \bigcup
+% "54 % \bigcap
+% "55 % \biguplus
+% "56 % \bigwedge
+% "57 % \bigvee
+% "60 % \coprod
+% "70 % \sqrtsign
+% "77 % \Updownarrow
+% "78 % \uparrow
+% "79 % \downarrow
+% "7A % \braceld, \lmoustache
+% "7B % \bracerd, \rmoustache
+% "7C % \bracelu
+% "7D % \braceru
+% "7E % \Uparrow
+% "7F % \Downarrow
+% }
+%\fi
+% \begin{macrocode}
+%</cmr>
+%</cfg-t>
+% \end{macrocode}
+%
+% \subsubsection{<AMS> symbols}
+%
+% Settings for the <AMS> math fonts (\pkg{amssymb}).
+%\changes{v1.8}{2005/06/01}{settings for <AMS> math fonts}
+%\changes{v1.9d}{2006/02/04}{tweak <AMS> settings}
+% \begin{macrocode}
+%<*cfg-u>
+% \end{macrocode}
+% Symbol font `a'.
+% \begin{macrocode}
+%<*msa>
+\SetProtrusion
+ [ name = AMS-a ]
+ { encoding = U,
+ family = msa }
+ {
+ "05 = {150,250}, % \centerdot
+ "06 = {100,100}, % \lozenge
+ "07 = { 50, 50}, % \blacklozenge
+ "08 = { 50, 50}, % \circlearrowright
+ "09 = { 50, 50}, % \circlearrowleft
+ "0A = {100,100}, % \rightleftharpoons
+ "0B = {100,100}, % \leftrightharpoons
+ "0D = {-50,200}, % \Vdash
+ "0E = {-50,200}, % \Vvdash
+ "0F = {-70,150}, % \vDash
+ "10 = {100,150}, % \twoheadrightarrow
+ "11 = {100,150}, % \twoheadleftarrow
+ "12 = { 50,100}, % \leftleftarrows
+ "13 = { 50, 80}, % \rightrightarrows
+ "14 = {120,120}, % \upuparrows
+ "15 = {120,120}, % \downdownarrows
+ "16 = {200,200}, % \upharpoonright
+ "17 = {200,200}, % \downharpoonright
+ "18 = {200,200}, % \upharpoonleft
+ "19 = {200,200}, % \downharpoonleft
+ "1A = { 80,100}, % \rightarrowtail
+ "1B = { 80,100}, % \leftarrowtail
+ "1C = { 50, 50}, % \leftrightarrows
+ "1D = { 50, 50}, % \rightleftarrows
+ "1E = {250, }, % \Lsh
+ "1F = { ,250}, % \Rsh
+ "20 = {100,100}, % \rightsquigarrow
+ "21 = {100,100}, % \leftrightsquigarrow
+ "22 = {100, 50}, % \looparrowleft
+ "23 = { 50,100}, % \looparrowright
+ "24 = { 50, 80}, % \circeq
+ "25 = { ,100}, % \succsim
+ "26 = { ,100}, % \gtrsim
+ "27 = { ,100}, % \gtrapprox
+ "28 = {150, 50}, % \multimap
+ "2B = {100,150}, % \doteqdot
+ "2C = {100,150}, % \triangleq
+ "2D = {100, 50}, % \precsim
+ "2E = {100, 50}, % \lesssim
+ "2F = { 50, 50}, % \lessapprox
+ "30 = {100, 50}, % \eqslantless
+ "31 = { 50, 50}, % \eqslantgtr
+ "32 = {100, 50}, % \curlyeqprec
+ "33 = { 50,100}, % \curlyeqsucc
+ "34 = {100, 50}, % \preccurlyeq
+ "36 = { 50, }, % \leqslant
+ "38 = { , 50}, % \backprime
+ "39 = {250,250}, % \dabar@ : the dash bar in \dash(left,right)arrow
+ "3C = { 50,100}, % \succcurlyeq
+ "3E = { , 50}, % \geqslant
+ "40 = { , 50}, % \sqsubset
+ "41 = { 50, }, % \sqsupset
+ "42 = { ,150}, % \vartriangleright, \rhd
+ "43 = {150, }, % \vartriangleleft, \lhd
+ "44 = { ,100}, % \trianglerighteq, \unrhd
+ "45 = {100, }, % \trianglelefteq, \unlhd
+ "46 = {100,100}, % \bigstar
+ "48 = { 50, 50}, % \blacktriangledown
+ "49 = { ,100}, % \blacktriangleright
+ "4A = {100, }, % \blacktriangleleft
+ "4B = { ,150}, % \dashrightarrow (the arrow)
+ "4C = {150, }, % \dashleftarrow
+ "4D = { 50, 50}, % \vartriangle
+ "4E = { 50, 50}, % \blacktriangle
+ "4F = { 50, 50}, % \triangledown
+ "50 = { 50, 50}, % \eqcirc
+ "56 = { ,150}, % \Rrightarrow
+ "57 = {150, }, % \Lleftarrow
+ "58 = {100,300}, % \checkmark
+ "5C = { 50, 50}, % \angle
+ "5D = { 50, 50}, % \measuredangle
+ "5E = { 50, 50}, % \sphericalangle
+ "5F = { , 50}, % \varpropto
+ "60 = {100,100}, % \smallsmile
+ "61 = {100,100}, % \smallfrown
+ "62 = { 50, }, % \Subset
+ "63 = { , 50}, % \Supset
+ "66 = {150,150}, % \curlywedge
+ "67 = {150,150}, % \curlyvee
+ "68 = { 50,150}, % \leftthreetimes
+ "69 = {100, 50}, % \rightthreetimes
+ "6C = { 50, 50}, % \bumpeq
+ "6D = { 50, 50}, % \Bumpeq
+ "6E = {100, }, % \lll
+ "6F = { ,100}, % \ggg
+ "70 = { 50,100}, % \ulcorner
+ "71 = {100, 50}, % \urcorner
+ "75 = {150,200}, % \dotplus
+ "76 = { 50,100}, % \backsim
+ "78 = { 50,100}, % \llcorner
+ "79 = {100, 50}, % \lrcorner
+ "7C = {100,100}, % \intercal
+ "7D = { 50, 50}, % \circledcirc
+ "7E = { 50, 50}, % \circledast
+ "7F = { 50, 50} % \circleddash
+% \end{macrocode}
+% Remaining slots in the source file.
+%\iffalse
+% "00 = { , }, % \boxdot
+% "01 = { , }, % \boxplus
+% "02 = { , }, % \boxtimes
+% "03 = { , }, % \square
+% "04 = { , }, % \blacksquare
+% "0C = { , }, % \boxminus
+% "29 = { , }, % \therefore
+% "2A = { , }, % \because
+% "35 = { , }, % \leqq
+% "37 = { , }, % \lessgtr
+% "3A = { , }, % \risingdotseq
+% "3B = { , }, % \fallingdotseq
+% "3D = { , }, % \geqq
+% "3F = { , }, % \gtrless
+% "47 = { , }, % \between
+% "51 = { , }, % \lesseqgtr
+% "52 = { , }, % \gtreqless
+% "53 = { , }, % \lesseqqgtr
+% "54 = { , }, % \gtreqqless
+% "55 = { , }, % \yen
+% "59 = { , }, % \veebar
+% "5A = { , }, % \barwedge
+% "5B = { , }, % \doublebarwedge
+% "64 = { , }, % \Cup
+% "65 = { , }, % \Cap
+% "6A = { , }, % \subseteqq
+% "6B = { , }, % \supseteqq
+% "72 = { , }, % \circledR
+% "73 = { , }, % \circledS
+% "74 = { , }, % \pitchfork
+% "77 = { , }, % \backsimeq
+% "7A = { , }, % \maltese
+% "7B = { , }, % \complement
+%\fi
+% \begin{macrocode}
+ }
+
+%</msa>
+% \end{macrocode}
+% Symbol font `b'.
+% \begin{macrocode}
+%<*msb>
+\SetProtrusion
+ [ name = AMS-b ]
+ { encoding = U,
+ family = msb }
+ {
+ A = { 50, 50}, % \mathbb
+ C = { 50, 50},
+ G = { , 50},
+ L = { , 50},
+ P = { , 50},
+ R = { , 50},
+ T = { , 50},
+ V = { 50, 50},
+ X = { 50, 50},
+ Y = { 50, 50},
+ "00 = { 50, 50}, % \lvertneqq
+ "01 = { 50, 50}, % \gvertneqq
+ "02 = { 50, 50}, % \nleq
+ "03 = { 50, 50}, % \ngeq
+ "04 = {100, 50}, % \nless
+ "05 = { 50,150}, % \ngtr
+ "06 = {100, 50}, % \nprec
+ "07 = { 50,150}, % \nsucc
+ "08 = { 50, 50}, % \lneqq
+ "09 = { 50, 50}, % \gneqq
+ "0A = {100,100}, % \nleqslant
+ "0B = {100,100}, % \ngeqslant
+ "0C = {100, 50}, % \lneq
+ "0D = { 50,100}, % \gneq
+ "0E = {100, 50}, % \npreceq
+ "0F = { 50,100}, % \nsucceq
+ "10 = { 50, }, % \precnsim
+ "11 = { 50, 50}, % \succnsim
+ "12 = { 50, 50}, % \lnsim
+ "13 = { 50, 50}, % \gnsim
+ "14 = { 50, 50}, % \nleqq
+ "15 = { 50, 50}, % \ngeqq
+ "16 = { 50, 50}, % \precneqq
+ "17 = { 50, 50}, % \succneqq
+ "18 = { 50, 50}, % \precnapprox
+ "19 = { 50, 50}, % \succnapprox
+ "1A = { 50, 50}, % \lnapprox
+ "1B = { 50, 50}, % \gnapprox
+ "1C = {150,200}, % \nsim
+ "1D = { 50, 50}, % \ncong
+ "1E = {100,150}, % \diagup
+ "1F = {100,150}, % \diagdown
+ "20 = {100, 50}, % \varsubsetneq
+ "21 = { 50,100}, % \varsupsetneq
+ "22 = {100, 50}, % \nsubseteqq
+ "23 = { 50,100}, % \nsupseteqq
+ "24 = {100, 50}, % \subsetneqq
+ "25 = { 50,100}, % \supsetneqq
+ "26 = {100, 50}, % \varsubsetneqq
+ "27 = { 50,100}, % \varsupsetneqq
+ "28 = {100, 50}, % \subsetneq
+ "29 = { 50,100}, % \supsetneq
+ "2A = {100, 50}, % \nsubseteq
+ "2B = { 50,100}, % \nsupseteq
+ "2C = { 50,100}, % \nparallel
+ "2D = {100,150}, % \nmid
+ "2E = {150,150}, % \nshortmid
+ "2F = {100,100}, % \nshortparallel
+ "30 = { ,150}, % \nvdash
+ "31 = { ,150}, % \nVdash
+ "32 = { ,100}, % \nvDash
+ "33 = { ,100}, % \nVDash
+ "34 = { ,100}, % \ntrianglerighteq
+ "35 = {100, }, % \ntrianglelefteq
+ "36 = {100, }, % \ntriangleleft
+ "37 = { ,100}, % \ntriangleright
+ "38 = {100,200}, % \nleftarrow
+ "39 = {100,200}, % \nrightarrow
+ "3A = {100,100}, % \nLeftarrow
+ "3B = { 50,100}, % \nRightarrow
+ "3C = {100,100}, % \nLeftrightarrow
+ "3D = {100,200}, % \nleftrightarrow
+ "3E = { 50, 50}, % \divideontimes
+ "3F = { 50, 50}, % \varnothing
+ "60 = {200, }, % \Finv
+ "61 = { , 50}, % \Game
+ "68 = {100,100}, % \eqsim
+ "69 = { 50, }, % \beth
+ "6A = { 50, }, % \gimel
+ "6B = {150, }, % \daleth
+ "6C = {200, }, % \lessdot
+ "6D = { ,200}, % \gtrdot
+ "6E = {100,200}, % \ltimes
+ "6F = {150,100}, % \rtimes
+ "70 = { 50,100}, % \shortmid
+ "71 = { 50, 50}, % \shortparallel
+ "72 = {200,300}, % \smallsetminus
+ "73 = {100,200}, % \thicksim
+ "74 = { 50,100}, % \thickapprox
+ "75 = { 50, 50}, % \approxeq
+ "76 = { 50,100}, % \succapprox
+ "77 = { 50, 50}, % \precapprox
+ "78 = {100,100}, % \curvearrowleft
+ "79 = { 50,150}, % \curvearrowright
+ "7A = { 50,200}, % \digamma
+ "7B = {100, 50}, % \varkappa
+ "7F = {200, } % \backepsilon
+% \end{macrocode}
+% Remaining slots in the source file.
+%\iffalse
+% "40 = { , }, % \nexists
+% "66 = { , }, % \mho
+% "67 = { , }, % \eth
+% "7C = { , }, % \Bbbk
+% "7D = { , }, % \hslash
+% "7E = { , }, % \hbar
+%\fi
+% \begin{macrocode}
+ }
+
+%</msb>
+% \end{macrocode}
+% \subsubsection{Euler}
+%
+% Euler Roman font (package \pkg{euler}).
+%\changes{v1.9e}{2006/07/28}{settings for Euler Roman font}
+% \begin{macrocode}
+%<*eur>
+\SetProtrusion
+ [ name = euler ]
+ { encoding = U,
+ family = eur }
+ {
+ "01 = {100,100},
+ "03 = {100,150},
+ "06 = { ,100},
+ "07 = {100,150},
+ "08 = {100,100},
+ "0A = {100,100},
+ "0B = { , 50},
+ "0C = { ,100},
+ "0D = {100,100},
+ "0E = { ,100},
+ "0F = {100,100},
+ "10 = {100,100},
+ "13 = { ,100},
+ "14 = { ,100},
+ "15 = { , 50},
+ "16 = { , 50},
+ "17 = { 50,100},
+ "18 = { 50,100},
+ "1A = { , 50},
+ "1B = { , 50},
+ "1C = { 50,100},
+ "1D = { 50,100},
+ "1E = { 50,100},
+ "1F = { 50,100},
+ "20 = { , 50},
+ "21 = { , 50},
+ "22 = { 50,100},
+ "24 = { , 50},
+ "27 = { 50,100},
+ 1 = {100,100},
+ 7 = { 50,100},
+ "3A = {300,500},
+ "3B = {200,400},
+ "3C = {200,100},
+ "3D = {200,200},
+ "3E = {100,200},
+ A = { ,100},
+ D = { , 50},
+ J = { 50, },
+ K = { , 50},
+ L = { , 50},
+ Q = { , 50},
+ T = { 50, },
+ X = { 50, 50},
+ Y = { 50, },
+ h = { , 50},
+ k = { , 50}
+ }
+
+% \end{macrocode}
+% Extended by the \pkg{eulervm} package.
+%\changes{v1.9f}{2006/07/31}{fix: \texttt{euler-vm} did not load \texttt{euler} settings}
+% \begin{macrocode}
+\SetProtrusion
+ [ name = euler-vm,
+ load = euler ]
+ { encoding = U,
+ family = zeur }
+ {
+ "28 = {100,200},
+ "29 = {100,200},
+ "2A = {100,150},
+ "2B = {100,150},
+ "2C = {200,300},
+ "2D = {200,300},
+ "2E = { ,100},
+ "2F = {100, },
+ "3F = {150,150},
+ "5B = { ,100},
+ "5E = {100,100},
+ "5F = {100,100},
+ "80 = { , 50},
+ "81 = {200,250},
+ "82 = {100,200}
+ }
+
+%</eur>
+% \end{macrocode}
+% Euler Script font (\pkg{eucal}).
+% \begin{macrocode}
+%<*eus>
+\SetProtrusion
+ [ name = euscript ]
+ { encoding = U,
+ family = eus }
+ {
+ A = {100,100},
+ B = { 50,100},
+ C = { 50, 50},
+ D = { 50,100},
+ E = { 50,100},
+ F = { 50, },
+ G = { 50, },
+ H = { ,100},
+ K = { , 50},
+ L = { ,150},
+ M = { , 50},
+ N = { , 50},
+ O = { 50, 50},
+ P = { 50, 50},
+ T = { ,100},
+ U = { , 50},
+ V = { 50, 50},
+ W = { 50, 50},
+ X = { 50, 50},
+ Y = { 50, },
+ Z = { 50,100},
+ "00 = {250,250},
+ "18 = {200,200},
+ "3A = {200,150},
+ "40 = { ,100},
+ "5E = {100,100},
+ "5F = {100,100},
+ "66 = { 50, },
+ "67 = { , 50},
+ "6E = {200,200}
+ }
+
+\SetProtrusion
+ [ name = euscript-vm,
+ load = euscript ]
+ { encoding = U,
+ family = zeus }
+ {
+ "01 = {600,600},
+ "02 = {200,200},
+ "03 = {200,200},
+ "04 = {200,200},
+ "05 = {150,150},
+ "06 = {200,200},
+ "07 = {200,200},
+ "08 = {100,100},
+ "09 = {100,100},
+ "0A = {100,100},
+ "0B = {100,100},
+ "0C = {100,100},
+ "0D = {100,100},
+ "0E = {150,150},
+ "0F = {100,100},
+ "10 = {150,150},
+ "11 = {100,100},
+ "12 = {150,100},
+ "13 = {100,150},
+ "14 = {150,100},
+ "15 = {100,150},
+ "16 = {200,100},
+ "17 = {100,200},
+ "19 = {150,150},
+ "1A = {150,100},
+ "1B = {100,150},
+ "1C = {100,100},
+ "1D = {100,100},
+ "1E = {250,100},
+ "1F = {100,250},
+ "20 = {150,200},
+ "21 = {150,200},
+ "22 = {150,150},
+ "23 = {150,150},
+ "24 = {100,200},
+ "25 = {150,150},
+ "26 = {150,150},
+ "27 = {100,100},
+ "28 = {100,100},
+ "29 = {100,150},
+ "2A = {100,100},
+ "2B = {100,100},
+ "2C = {100,100},
+ "2D = {150,150},
+ "2E = {150,150},
+ "2F = {100,100},
+ "30 = {100,100},
+ "31 = {100,100},
+ "32 = {100,100},
+ "33 = {100,100},
+ "34 = {100,100},
+ "35 = {100,100},
+ "3E = {150,150},
+ "3F = {150,150},
+ "60 = { ,200},
+ "61 = {200, },
+ "62 = {100,100},
+ "63 = {100,100},
+ "64 = {100,100},
+ "65 = {100,100},
+ "68 = {300, },
+ "69 = { ,300},
+ "6C = {100,100},
+ "6D = {100,100},
+ "6F = {100,100},
+ "72 = {100,100},
+ "73 = {200,100},
+ "76 = { ,100},
+ "77 = {100, },
+ "78 = { 50, 50},
+ "79 = {100,100},
+ "7A = {100,100},
+ "7D = {150,150},
+ "7E = {100,100},
+ "A8 = {100,100},
+ "A9 = {100,100},
+ "AB = {200,200},
+ "BA = { ,200},
+ "BB = { ,200},
+ "BD = {200,200},
+ "DE = {200,200}
+ }
+
+%</eus>
+% \end{macrocode}
+% Euler Fraktur font (\pkg{eufrak}).
+%\changes{v1.9e}{2006/07/28}{complete settings for Euler Fraktur and Script fonts}
+% \begin{macrocode}
+%<*euf>
+\SetProtrusion
+ [ name = mathfrak ]
+ { encoding = U,
+ family = euf }
+ {
+ A = { , 50},
+ B = { , 50},
+ C = { 50, 50},
+ D = { , 80},
+ E = { 50, },
+ G = { , 50},
+ L = { , 80},
+ O = { , 50},
+ T = { , 80},
+ X = { 80, 50},
+ Z = { 80, 50},
+ b = { , 50},
+ c = { , 50},
+ k = { , 50},
+ p = { , 50},
+ q = { 50, },
+ v = { , 50},
+ w = { , 50},
+ x = { , 50},
+ 1 = {100,100},
+ 2 = { 80, 80},
+ 3 = { 80, 50},
+ 4 = { 80, 50},
+ 7 = { 50, 50},
+ "12 = {500,500},
+ "13 = {500,500},
+ ! = { ,200},
+ ' = {200,300},
+ ( = {200, },
+ ) = { ,200},
+ * = {200,200},
+ + = {200,250},
+ - = {200,200},
+ {,} = {300,300},
+ . = {400,400},
+ {=} = {200,200},
+ : = { ,200},
+ ; = { ,200},
+ ] = { ,200}
+ }
+
+%</euf>
+%</cfg-u>
+% \end{macrocode}
+%\subsubsection{Euro symbols}
+%\changes{v1.9d}{2006/05/04}{settings for Euro symbols (Adobe, <ITC>, \pkg{marvosym})}
+%\changes{v1.9e}{2006/07/05}{fix: forgotten comma in \file{mt-mvs.cfg};
+% adapt to \pkg{marvosym}'s changed encoding}
+% Settings for various Euro symbols (Adobe Euro fonts (packages \pkg{eurosans},
+% \pkg{europs}), <ITC> Euro fonts (package \pkg{euroitc}) and \pkg{marvosym}\footnote{
+% Of course, there are many more symbols in this font. Feel free to contribute
+% protrusion settings!}).
+% \begin{macrocode}
+%<*cfg-e>
+\SetProtrusion
+%<zpeu|euroitc> { encoding = U,
+%<mvs> { encoding = {OT1,U},
+%<zpeu> family = zpeu }
+%<euroitc> family = {euroitc,euroitcs} }
+%<mvs> family = mvs }
+ {
+%<zpeu> E = {50, }
+%<euroitc> E = {100,50}
+%<mvs> 164 = {50,50}, % \EUR
+%<mvs> 068 = {50,-100} % \EURdig
+ }
+
+%<*zpeu|euroitc>
+\SetProtrusion
+ { encoding = U,
+%<zpeu> family = zpeu,
+%<euroitc> family = {euroitc,euroitcs},
+ shape = it* }
+ {
+%<zpeu> E = {100,-50}
+%<euroitc> E = {100,}
+ }
+
+%</zpeu|euroitc>
+%<*zpeu>
+\SetProtrusion
+ { encoding = U,
+ family = {zpeus,eurosans} }
+ {
+ E = {100,50}
+ }
+
+\SetProtrusion
+ { encoding = U,
+ family = {zpeus,eurosans},
+ shape = it* }
+ {
+ E = {200, }
+ }
+
+%</zpeu>
+%</cfg-e>
+% \end{macrocode}
+%
+%\subsection{Interword spacing}\label{sub:conf-spacing}
+%\GeneralChanges{Spacing}
+%
+% Default unit is space.
+%
+% \begin{macrocode}
+%<*m-t>
+%%% -----------------------------------------------------------------------
+%%% INTERWORD SPACING
+
+\SetExtraSpacing
+ [ name = default ]
+ { encoding = {OT1,T1,LY1,OT4,QX,T5} }
+ {
+% \end{macrocode}
+% These settings are only a first approximation. The following reasoning is from
+% a mail from \contributor Ulrich Dirr <ud\at art-satz.de>^^A private mail, 2005/06/14
+%\ifpdf\IfFileExists{justification.jpg}{^^A
+% , who also provided the sample in figure~\ref{fig:example-spacing}^^A
+%\changes{v2.2}{2007/04/05}{add sample}^^A
+% \begin{figure}
+% \caption{^^A
+% Example for interword spacing (from Siemoneit 1989).
+% ^^A Manfred Siemoneit, Typographisches Gestalten.
+% ^^A Regeln und Tips f\"ur die richtige Gestaltung von Drucksachen,
+% ^^A Bielefeld 1989
+% The numbers indicate the preference\slash order when the interword space
+% needs to be shrunk.}
+% \label{fig:example-spacing}
+% \includegraphics[width=.6\textwidth]{justification.jpg}
+% \end{figure}^^A
+%}\relax\fi.
+% I do not claim to have coped with the task.
+%\todo{fix settings}
+%
+%\begin{quote}
+% `The idea is -- analog to the tables for expansion and protrusion -- to
+% have tables for optical reduction\slash expansion of spaces in dependence of the
+% actual character so that the distance between words is optically equal.
+%
+% When reducing distances the (weighting) order is:
+%\begin{itemize}
+% \item after commas
+% \begin{macrocode}
+ {,} = { ,-500,500},
+% \end{macrocode}
+% \item in front of capitals which have optical more room on their left
+% side, \eg, `A', `J', `T', `V', `W', and `Y'
+% [this is not yet possible -- RS]
+% \item in front of capitals which have circle/oval shapes on their left
+% side, \eg, `C', `G', `O', and `Q'
+% [ditto -- RS]
+% \item after `r' (because of the bigger optical room on the righthand side)
+% \begin{macrocode}
+ r = { ,-300,300},
+% \end{macrocode}
+% \item\relax [before or] after lowercase characters with ascenders
+% \begin{macrocode}
+ b = { ,-200,200},
+ d = { ,-200,200},
+ f = { ,-200,200},
+ h = { ,-200,200},
+ k = { ,-200,200},
+ l = { ,-200,200},
+ t = { ,-200,200},
+% \end{macrocode}
+% \item\relax [before or] after lowercase characters with x-height plus descender
+% with additional optical space, \eg, `v', or `w'
+% \begin{macrocode}
+ c = { ,-100,100},
+ p = { ,-100,100},
+ v = { ,-100,100},
+ w = { ,-100,100},
+ z = { ,-100,100},
+ x = { ,-100,100},
+ y = { ,-100,100},
+% \end{macrocode}
+% \item\relax [before or] after lowercase characters with x-height plus descender
+% without additional optical space
+% \begin{macrocode}
+ i = { , 50, -50},
+ m = { , 50, -50},
+ n = { , 50, -50},
+ u = { , 50, -50},
+% \end{macrocode}
+% \item after colon and semicolon
+% \begin{macrocode}
+ : = { ,200,-200},
+ ; = { ,200,-200},
+% \end{macrocode}
+% \item after punctuation which ends a sentence, \eg, period, exclamation
+% mark, question mark
+% \begin{macrocode}
+ . = { ,250,-250},
+ ! = { ,250,-250},
+ ? = { ,250,-250}
+% \end{macrocode}
+%\end{itemize}
+% The order has to be reversed when enlarging is needed.'
+%\end{quote}
+% \begin{macrocode}
+ }
+
+% \end{macrocode}
+% Questions are:
+%\begin{itemize}
+% \item Is the result really better?
+% \item Is it overdone? (Try with a |factor| \textless\ 1000.)
+% \item Should the first parameter also be used? (Probably.)
+% \item What about quotation marks, parentheses etc.?
+%\end{itemize}
+%
+% Furthermore, there seems to be a \pdftex\ bug with spacing in combination
+% with a non-zero \cmd\spaceskip\
+% (reported by \contributor Axel Berger <Axel_Berger\at b.maus.de>):
+% ^^A dctt, `myheadings, markboth', 2008/10/06, MID: <200810062134.a58193@b.maus.de>
+%\todo{report \pdftex\ bug}
+%\begin{verbatim}
+%\parfillskip0pt
+%\rightskip0pt plus 1em
+%\spaceskip\fontdimen2\font
+% test test\par
+%\pdfadjustinterwordglue2
+%\stbscode\font`t=-50
+% test test
+%\bye
+%\end{verbatim}
+% Some more characters in <T2A>.\footnote{Contributed by
+% \contributor Karl Karlsson <karl-karlsson\at yandex.ru>.}
+%\changes{v2.3e}{2009/10/28}{settings for <T2A> encoding (contributed by
+% \contributor Karl Karlsson <karl-karlsson\at yandex.ru>)}
+% ^^A private mail, 2009/10/21
+% \begin{macrocode}
+%<*m-t>
+\SetExtraSpacing
+ [ name = T2A,
+ load = default ]
+ { encoding = T2A,
+ family = cmr }
+ {
+ \cyrg = { ,-300,300},
+ \cyrb = { ,-200,200},
+ \cyrk = { ,-200,200},
+ \cyrs = { ,-100,100},
+ \cyrr = { ,-100,100},
+ \cyrh = { ,-100,100},
+ \cyru = { ,-100,100},
+ \cyrt = { , 50, -50},
+ \cyrp = { , 50, -50},
+ \cyri = { , 50, -50},
+ \cyrishrt = { , 50, -50},
+ }
+
+%</m-t>
+% \end{macrocode}
+%
+% \subsubsection{Nonfrenchspacing}
+% The following settings simulate \cmd\nonfrenchspacing\ (since space factors
+% will be ignored when spacing adjustment is in effect). They may be used for
+% English contexts.
+%
+% From the \TeX book:
+%\begin{quote}
+% `If the
+% space factor $f$ is different from 1000, the interword glue is computed as
+% follows: Take the normal space glue for the current font, and add the
+% extra space if $f\ge2000$.
+% [\,\dots]
+% Then the stretch component is multiplied by $f/1000$, while the shrink
+% component is multiplied by $1000/f$.'
+%\end{quote}
+% The `extra space' (\fontdim7) for Computer Modern Roman is a third of
+% \fontdim2, \ie, 333.
+% \begin{macrocode}
+\SetExtraSpacing
+ [ name = nonfrench-cmr,
+ load = default,
+ context = nonfrench ]
+ { encoding = {OT1,T1,LY1,OT4,QX,T5},
+ family = cmr }
+ {
+% \end{macrocode}
+% \file{latex.ltx} has:
+%\begin{verbatim}[morekeywords={[1]{\nonfrenchspacing}}]
+%\def\nonfrenchspacing{
+% \sfcode`\. 3000
+% \sfcode`\? 3000
+% \sfcode`\! 3000
+%\end{verbatim}
+% \begin{macrocode}
+ . = {333,2000,-667},
+ ? = {333,2000,-667},
+ ! = {333,2000,-667},
+% \end{macrocode}
+%\begin{verbatim}
+% \sfcode`\: 2000
+%\end{verbatim}
+% \begin{macrocode}
+ : = {333,1000,-500},
+% \end{macrocode}
+%\begin{verbatim}
+% \sfcode`\; 1500
+%\end{verbatim}
+% \begin{macrocode}
+ ; = { , 500,-333},
+% \end{macrocode}
+%\begin{verbatim}
+% \sfcode`\, 1250
+%\end{verbatim}
+% \begin{macrocode}
+ {,}= { , 250,-200}
+% \end{macrocode}
+%\begin{verbatim}
+%}
+%\end{verbatim}
+% \begin{macrocode}
+ }
+
+% \end{macrocode}
+% \pkg{fontinst}, however, which is also used to create the \pkg{PSNFSS} font
+% metrics, sets \fontdim7 to 240 by default. Therefore, the fallback settings
+% use this value for the first component.
+% \begin{macrocode}
+\SetExtraSpacing
+ [ name = nonfrench-default,
+ load = default,
+ context = nonfrench ]
+ { encoding = {OT1,T1,LY1,OT4,QX,T5} }
+ {
+ . = {240,2000,-667},
+ ? = {240,2000,-667},
+ ! = {240,2000,-667},
+ : = {240,1000,-500},
+ ; = { , 500,-333},
+ {,}= { , 250,-200}
+ }
+
+% \end{macrocode}
+%
+% \subsection{Additional kerning}
+%\GeneralChanges{Kerning}
+%
+% Default unit is 1\,em.
+%
+% \begin{macrocode}
+%%% -----------------------------------------------------------------------
+%%% ADDITIONAL KERNING
+
+% \end{macrocode}
+% A dummy list to be loaded when no context is active.
+% \begin{macrocode}
+\SetExtraKerning
+ [ name = empty ]
+ { encoding = {OT1,T1,T2A,LY1,OT4,QX,T5,TS1} }
+ { }
+
+% \end{macrocode}
+%
+%\subsubsection{French}
+%
+% The ratio of \fontdim2 to \fontdim6 varies for different fonts, so that
+% either the kerning of the colon (which should be a space, \ie, \fontdim2) or
+% that of the other punctuation characters (\TeX's \cmd\thinspace, \ie, one
+% sixth of \fontdim6) may be inaccurate, depending on which |unit| we choose
+% (|space| or |1em|). For Times, for example, a thin space would be 665. I
+% don't know whether French typography really wants a thin space, or rather (as
+% it happens to turn out with <CMR>) half a space.
+% (Wikipedia\footnote{\url{http://fr.wikipedia.org/wiki/Espace_typographique}, 5 July 2007.}
+% claims it should be a quarter of an em, which seems too much to me; then
+% again, it also says that this \emph{was} a thin space in French typography.)
+% \begin{macrocode}
+\SetExtraKerning
+ [ name = french-default,
+ context = french,
+ unit = space ]
+ { encoding = {OT1,T1,LY1} }
+ {
+ : = {1000,}, % = \fontdimen2
+ ; = {500, }, % ~ \thinspace
+ ! = {500, },
+ ? = {500, }
+ }
+
+% \end{macrocode}
+% These settings have the disadvantage that a word following a left guillemet
+% will not be hyphenated. This might be fixed in \pdftex.
+% \begin{macrocode}
+\SetExtraKerning
+ [ name = french-guillemets,
+ context = french-guillemets,
+ load = french-default,
+ unit = space ]
+ { encoding = {T1,LY1} }
+ {
+ \guillemotleft = { ,800}, % = 0.8\fontdimen2
+ \guillemotright = {800, }
+ }
+
+\SetExtraKerning
+ [ name = french-guillemets-OT1,
+ context = french-guillemets,
+ load = french-default,
+ unit = space ]
+ { encoding = OT1 }
+ { }
+
+% \end{macrocode}
+%
+%\subsubsection{Turkish}
+%
+% \begin{macrocode}
+\SetExtraKerning
+ [ name = turkish,
+ context = turkish ]
+ { encoding = {OT1,T1,LY1} }
+ {
+ : = {167, }, % = \thinspace
+ ! = {167, },
+ {=} = {167, }
+ }
+
+%</m-t>
+%</config>
+% \end{macrocode}
+%^^A\changes{v2.0}{2006/12/28}{remove \texttt{letterspacing} settings}
+%\GeneralChanges*
+%
+%\section{Auxiliary file for micro fine tuning}
+%
+% This file can be used to test protrusion and expansion settings.
+% \begin{macrocode}
+%<*test>
+\documentclass{article}
+
+%% Here you can specify the font you want to test, using
+%% the commands \fontfamily, \fontseries and \fontshape.
+%% Make sure to end all lines with a comment character!
+\newcommand*\TestFont{%
+ \fontfamily{ppl}%
+%% \fontseries{b}%
+%% \fontshape{it}% sc, sl
+}
+
+\usepackage{ifthen}
+\usepackage[T1]{fontenc}
+\usepackage[latin1]{inputenc}
+\usepackage[verbose,expansion=alltext,stretch=50]{microtype}
+
+\pagestyle{empty}
+\setlength{\parindent}{0pt}
+\newcommand*\crulefill{\cleaders\hbox{$\mkern-2mu\smash-\mkern-2mu$}\hfill}
+\newcommand*\testprotrusion[2][]{%
+ \ifthenelse{\equal{#1}{r}}{}{#2}%
+ lorem ipsum dolor sit amet,
+ \ifthenelse{\equal{#1}{r}}{\crulefill}{\leftarrowfill} #2
+ \ifthenelse{\equal{#1}{l}}{\crulefill}{\rightarrowfill}
+ you know the rest%
+ \ifthenelse{\equal{#1}{l}}{}{#2}%
+ \linebreak
+ {\fontencoding{\encodingdefault}%
+ \fontseries{\seriesdefault}%
+ \fontshape{\shapedefault}%
+ \selectfont
+ Here is the beginning of a line, \dotfill and here is its end}\linebreak
+}
+\newcommand*\showTestFont{\expandafter\stripprefix\meaning\TestFont}
+\def\stripprefix#1>{}
+\newcount\charcount
+\begin{document}
+
+\microtypesetup{expansion=false}
+
+{\centering The font in this document is called by:\\
+ \texttt{\showTestFont}\par}\bigskip
+
+\TestFont\selectfont
+ This line intentionally left empty\linebreak
+%% A -- Z
+\charcount=65
+\loop
+ \testprotrusion{\char\charcount}
+ \advance\charcount 1
+ \ifnum\charcount < 91 \repeat
+%% a -- z
+\charcount=97
+\loop
+ \testprotrusion{\char\charcount}
+ \advance\charcount 1
+ \ifnum\charcount < 123 \repeat
+%% 0 -- 9
+\charcount=48
+\loop
+ \testprotrusion{\char\charcount}
+ \advance\charcount 1
+ \ifnum\charcount < 58 \repeat
+%%
+ \testprotrusion[r]{,}
+ \testprotrusion[r]{.}
+ \testprotrusion[r]{;}
+ \testprotrusion[r]{:}
+ \testprotrusion[r]{?}
+ \testprotrusion[r]{!}
+ \testprotrusion[l]{\textexclamdown}
+ \testprotrusion[l]{\textquestiondown}
+ \testprotrusion[r]{)}
+ \testprotrusion[l]{(}
+ \testprotrusion{/}
+ \testprotrusion{\char`\\}
+ \testprotrusion{-}
+ \testprotrusion{\textendash}
+ \testprotrusion{\textemdash}
+ \testprotrusion{\textquoteleft}
+ \testprotrusion{\textquoteright}
+ \testprotrusion{\textquotedblleft}
+ \testprotrusion{\textquotedblright}
+ \testprotrusion{\quotesinglbase}
+ \testprotrusion{\quotedblbase}
+ \testprotrusion{\guilsinglleft}
+ \testprotrusion{\guilsinglright}
+ \testprotrusion{\guillemotleft}
+ \testprotrusion{\guillemotright}
+
+\newpage
+The following displays the current font stretched by 5\%,
+normal, and shrunk by 5\%:
+
+\bigskip
+\newlength{\MTln}
+\newcommand*\teststring
+ {ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789}
+\settowidth{\MTln}{\teststring}
+\microtypesetup{expansion=true}
+
+\parbox{1.05\MTln}{\teststring\linebreak\\
+ \teststring}\par\bigskip
+\parbox{0.95\MTln}{\teststring}
+
+\end{document}
+%</test>
+% \end{macrocode}
+% Needless to say that things may always be improved. For suggestions, mail to
+% \mailtoRS.
+%
+% ^^A -------------------------------------------------------------------------
+%\makeatother
+%
+% \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 \~}
+%
+% \CheckSum{9578}
+%
+% \Finale
+%
+\endinput
+%
diff --git a/Master/texmf-dist/doc/latex/microtype-de/microtype-DE.pdf b/Master/texmf-dist/doc/latex/microtype-de/microtype-DE.pdf
new file mode 100644
index 00000000000..16ca1155ef7
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/microtype-de/microtype-DE.pdf
Binary files differ
diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check
index a6ab029357b..3e32d8fcd56 100755
--- a/Master/tlpkg/bin/tlpkg-ctan-check
+++ b/Master/tlpkg/bin/tlpkg-ctan-check
@@ -239,7 +239,7 @@ my @TLP_working = qw(
metafont-beginners metago metalogo metaobj metaplot metatex metauml
method metre
mfnfss mfpic mfpic4ode mftinc mh mhchem
- mhequ microtype midnight midpage mil3 miller
+ mhequ microtype microtype-de midnight midpage mil3 miller
minibox minipage-marginpar miniplot minitoc
minted minutes
mkgrkindex mkjobtexmf mkpattern
diff --git a/Master/tlpkg/libexec/ctan2tds b/Master/tlpkg/libexec/ctan2tds
index 06fc53c3f01..388ccc90726 100755
--- a/Master/tlpkg/libexec/ctan2tds
+++ b/Master/tlpkg/libexec/ctan2tds
@@ -1525,50 +1525,51 @@ $standardsource='\.(c|drv|dtx|fea|fdd|ins|sfd)$|configure.*|install-sh';
'FAQ-en', 'NULL',
'ae', '\.mtx|\.etx|\.tex|clean|go|install|makepl',
'amsldoc-vn', 'NULL',
- 'apl', ".*", # just get everything, seems simplest
- 'arabxetex', 'NULL', # keep dtx with others, why not
+ 'apl', ".*", # get everything, simplest
+ 'arabxetex', 'NULL', # dtx with others, why not
'bbold', $standardsource . '|fonttabl.sty',
- 'biber', '.*', # get everything, lots to do in post
+ 'biber', '.*', # keep all, lots to do in post
'bigints', 'NULL',
'blacklettert1', '\.dtx|\.ins|\.pl|Makefile',
- 'booktabs-de', 'NULL', # keep together
+ 'booktabs-de', 'NULL', # keep together
'carlisle', '\.dtx|\.ins|ltxtable\.tex',
'chemarrow', '\.mp|\.vfb',
'concmath-fonts', 'NULL',
'crossword', $standardsource . '|AcrossLite',
'epsf', 'NULL',
'epslatex-fr', 'NULL',
- 'epspdf', 'NULL', # leave .install
- 'eskdx', 'NULL', # leave makefiles
- 'eurosym', 'NULL', # leave makefiles, etc.
+ 'epspdf', 'NULL', # leave .install
+ 'eskdx', 'NULL', # leave makefiles
+ 'eurosym', 'NULL', # leave makefiles, etc.
'export', '\.l|' . $standardsource,
'feynmf', 'feynmf\.pl|' . $standardsource,
- 'findhyph', 'NULL', # leave makefile
+ 'findhyph', 'NULL', # leave makefile
'fmtcount', 'fmtcount.perl|' . $standardsource,
'fpl', 'Add|\.pe|\.ps' . $standardsource,
- 'geometry-de', 'NULL', # keep together
+ 'geometry-de', 'NULL', # keep together
'grverb', '\.vpl|' . $standardsource,
'hyper', '\.pl|' . $standardsource,
'hyphenex', '.*',
- 'impatient', 'NULL', # doc package
- 'intro-scientific', 'NULL', # doc package
- 'js-misc', 'NULL', # no gain in splitting up
+ 'impatient', 'NULL', # doc package
+ 'intro-scientific', 'NULL', # doc package
+ 'js-misc', 'NULL', # no gain in splitting up
'kpfonts', '\.zip',
- 'latex-doc-ptr', 'NULL', # doc package
- 'latex2e-help-texinfo','NULL', # doc package
- 'latex2man', 'NULL', # leave Makefile
- 'latexdiff', 'NULL', # leave Makefile
+ 'latex-doc-ptr', 'NULL', # doc package
+ 'latex2e-help-texinfo','NULL', # doc package
+ 'latex2man', 'NULL', # leave Makefile
+ 'latexdiff', 'NULL', # leave Makefile
'lua-alt-getopt', 'NULL',
'mff', '\.mfj|\.bat|\.diz',
+ 'microtype-de', 'NULL', # doc package
'mkjobtexmf', 'Makefile.in|' . $standardsource,
'mpman-ru', 'NULL', # doc package
'ot2cyr', '\.afm|\.etx|' . $standardsource,
'patch', '\.doc',
'pdfx', 'rvdtx\.sty|' . $standardsource,
- 'pgfplots', 'NULL', # keep manual.install.tex in doc/
+ 'pgfplots', 'NULL', # manual.install.tex in doc/
'rcs', 'rcs.el|src|' . $standardsource,
- 'thailatex', 'NULL', # no gain in splitting up
- 'tkz-orm', 'NULL', # no gain in splitting up
+ 'thailatex', 'NULL', # no gain in splitting up
+ 'tkz-orm', 'NULL', # no gain in splitting up
'xlop', 'manual.sty|' . $standardsource,
);
diff --git a/Master/tlpkg/tlpsrc/collection-langgerman.tlpsrc b/Master/tlpkg/tlpsrc/collection-langgerman.tlpsrc
index efaee579060..5ce1deeacfe 100644
--- a/Master/tlpkg/tlpsrc/collection-langgerman.tlpsrc
+++ b/Master/tlpkg/tlpsrc/collection-langgerman.tlpsrc
@@ -10,6 +10,7 @@ depend german
depend germbib
depend germkorr
depend kalender
+depend microtype-de
depend r_und_s
depend umlaute
depend hyphen-german
diff --git a/Master/tlpkg/tlpsrc/microtype-de.tlpsrc b/Master/tlpkg/tlpsrc/microtype-de.tlpsrc
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlpsrc/microtype-de.tlpsrc