%% %% This is file `microtype.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% microtype.dtx (with options: `package,lua') %% %% ------------------------------------------------------------------------ %% %% The `microtype' package %% An interface to the micro-typographic extensions of pdfTeX %% Copyright (c) 2004--2010 R Schlicht %% %% 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. %% %% ------------------------------------------------------------------------ %% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage {microtype} [2010/01/10 v2.4 Micro-typography with pdfTeX (RS)] \def\MT@MT {microtype} \let\MT@restore@catcodes\@empty \def\MT@fix@catcode#1#2{% \edef\MT@restore@catcodes{% \MT@restore@catcodes \catcode#1 \the\catcode#1\relax }% \catcode#1 #2\relax } \MT@fix@catcode{17}{14}% ^^Q (comment) \MT@fix@catcode{24} {9}% ^^X (ignore) \MT@fix@catcode{33}{12}% ! \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}% > \MT@fix@catcode{63}{12}% ? \MT@fix@catcode{94} {7}% ^ (superscript) \MT@fix@catcode{96}{12}% ` \MT@fix@catcode{124}{12}% | \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}{% \newcommand*\lsstyle{} \newcommand\textls[2][]{} \def\textls#1#{} \newcommand*\lslig[1]{#1} } \def\DeclareMicrotypeSet#1#{\@gobbletwo} \def\DeclareMicrotypeVariants#1#{\@gobble} \@onlypreamble\DeclareMicrotypeSet \@onlypreamble\UseMicrotypeSet \@onlypreamble\DeclareMicrotypeSetDefault \@onlypreamble\DisableLigatures \@onlypreamble\DeclareMicrotypeVariants \@onlypreamble\DeclareMicrotypeBabelHook \def\MT@old@cmd#1#2{% \newcommand*#1{\MT@warning{% \string#1 is deprecated. Please use\MessageBreak \string#2 instead}% \let #1#2#2}} \MT@old@cmd\DeclareMicroTypeAlias\DeclareMicrotypeAlias \MT@old@cmd\DeclareMicroTypeSet \DeclareMicrotypeSet \MT@old@cmd\UseMicroTypeSet \UseMicrotypeSet \MT@old@cmd\LoadMicroTypeFile \LoadMicrotypeFile \def\MT@warning{\PackageWarning\MT@MT} \def\MT@warning@nl#1{\MT@warning{#1\@gobble}} \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.}} \def\MT@pdftex@no{0} \ifx\normalpdftexversion\@undefined \else \let\pdftexversion \normalpdftexversion \let\pdftexrevision\normalpdftexrevision \let\pdfoutput \normalpdfoutput \fi \ifx\pdftexversion\@undefined \else \ifx\pdftexversion\relax \else \def\MT@pdftex@no{7} \ifnum\pdftexversion = 140 \ifnum\pdftexrevision < 4 \def\MT@pdftex@no{6} \fi \else \ifnum\pdftexversion < 140 \def\MT@pdftex@no{5} \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 \fi \fi \fi \def\MT@clear@options{% \AtEndOfPackage{\let\@unprocessedoptions\relax}% \let\CurrentOption\@empty } \ifnum\MT@pdftex@no < 2 \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 0.14f% .\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 \RequirePackage{keyval}[1997/11/10] \newtoks\MT@toks \newif\ifMT@if@ \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 \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 \let\MT@pr@unit\@empty \let\MT@sp@unit\m@ne \def\MT@kn@unit{1em} \let\MT@stretch\m@ne \let\MT@shrink \m@ne \let\MT@step \m@ne \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 \def\MT@tr@min{-\@m} \let\MT@tr@max\@m \def\MT@factor@default{1000 } \def\MT@stretch@default{20 } \def\MT@shrink@default{20 } \def\MT@step@default{4 } \let\MT@letterspace\m@ne \def\MT@letterspace@default{100} \newif\ifMT@document \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 \def\MT@requires@pdftex#1{% \ifnum\MT@pdftex@no<#1 \expandafter\@secondoftwo\else\expandafter\@firstoftwo\fi } \let\MT@requires@luatex\@secondoftwo \ifx\directlua\@undefined \else \ifx\directlua\relax \else \let\MT@requires@luatex\@firstoftwo \fi \fi \MT@requires@luatex{ \ifnum\luatexversion<36 \def\MT@lua{\directlua0} \else \def\MT@lua{\directlua} \fi \MT@lua{ if (luatextra and luatextra.use_module) then luatextra.use_module("microtype") else dofile(kpse.find_file("microtype.lua")) end} }\relax \def\MT@glet{\global\let} \def\MT@exp@cs#1#2{\expandafter#1\csname#2\endcsname} \def\MT@exp@gcs#1#2{\begingroup\expandafter\endgroup\expandafter#1\csname#2\endcsname} \def\MT@def@n{\MT@exp@cs\def} \def\MT@gdef@n{\MT@exp@gcs\gdef} \def\MT@edef@n{\MT@exp@cs\edef} \def\MT@xdef@n{\MT@exp@gcs\xdef} \def\MT@let@nc{\MT@exp@cs\let} \def\MT@glet@nc{\MT@exp@gcs\MT@glet} \def\MT@let@cn#1#2{\expandafter\let\expandafter#1\csname #2\endcsname} \def\MT@let@nn{\MT@exp@cs\MT@let@cn} \def\MT@glet@nn{\MT@exp@gcs{\global\expandafter\MT@let@cn}} \def\MT@@font{\expandafter\string\MT@font} \def\MT@exp@one@n#1#2{\expandafter#1\expandafter{#2}} \def\MT@exp@two@c#1{\expandafter\expandafter\expandafter#1\expandafter} \def\MT@exp@two@n#1#2#3{% \expandafter\expandafter\expandafter #1\expandafter\expandafter\expandafter {\expandafter#2\expandafter}\expandafter{#3}} \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 } \def\MT@ifdefined@c@TF#1{% ^^X \ifdefined#1\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi ^^Q \ifx#1\@undefined ^^Q \expandafter\@secondoftwo\else\expandafter\@firstoftwo\fi } \def\MT@ifdefined@n@T#1{% ^^X \ifcsname#1\endcsname\expandafter\@firstofone\else\expandafter\@gobble\fi ^^Q \begingroup\MT@exp@two@c\endgroup\ifx\csname #1\endcsname\relax ^^Q \expandafter\@gobble\else\expandafter\@firstofone\fi } \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 } \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 } \begingroup \catcode`\%=12 \catcode`\&=14 \gdef\MT@ifempty#1{& \if %#1%& \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi } \endgroup \MT@requires@pdftex6{ \MT@requires@luatex{ \def\MT@ifint#1{\csname\MT@lua{microtype.ifint([[#1]])}\endcsname} }{ \def\MT@ifint#1{% \ifcase\pdfmatch{^-*[0-9]+ *$}{#1}\relax \expandafter\@secondoftwo \else \expandafter\@firstoftwo \fi } } }{ \def\MT@ifint#1{% \if!\ifnum9<1#1!\else?\fi \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi } } \MT@requires@pdftex6{ \MT@requires@luatex{ \def\MT@ifdimen#1{\csname\MT@lua{microtype.ifdimen([[#1]])}\endcsname} }{ \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 } } }{ \def\MT@ifdimen#1{% \setbox\z@=\hbox{% \MT@count=1#1\relax \ifnum\MT@count=\@ne \aftergroup\@secondoftwo \else \aftergroup\@firstoftwo \fi }% } } \def\MT@ifdim#1#2#3{% \ifdim #1\p@ #2 #3\p@ \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi } \MT@requires@pdftex5{ \MT@requires@luatex{ \def\MT@ifstreq#1#2{\csname\MT@lua{microtype.ifstreq([[#1]],[[#2]])}\endcsname} }{ \def\MT@ifstreq#1#2{% \ifcase\pdfstrcmp{#1}{#2}\relax \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi } } }{ \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 } } \def\MT@xadd#1#2{% \ifx#1\relax \xdef#1{#2}% \else \xdef#1{#1#2}% \fi } \def\MT@xaddb#1#2{% \ifx#1\relax \xdef#1{#2}% \else \xdef#1{#2#1}% \fi } \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{} \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} \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 } \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}% } \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 } \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 } \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 \def\MT@while@num#1#2#3{% \@tempcnta#1\relax \MT@loop #3% \advance\@tempcnta \@ne \ifnum\@tempcnta < #2\MT@repeat } \def\MT@do@font{\MT@while@num\z@\@cclvi} \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}% } \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 } \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} \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} \def\MT@features{pr,ex,sp,kn,tr} \def\MT@features@long{protrusion,expansion,spacing,kerning,tracking} \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 } \@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 \let\MT@setup@\@empty \def\MT@addto@setup{\g@addto@macro\MT@setup@} \def\MT@with@package@T#1{\@ifpackageloaded{#1}\@firstofone\@gobble} \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 } \MT@let@nc{ver@letterspace.sty}\@empty \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 } } \def\MT@restore@p@h{\chardef\%`\% \chardef\#`\# } \def\MT@setupfont@hook{% \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 \MT@with@package@T{csquotes}{% \@ifpackagelater{csquotes}{2005/05/11}\@disablequotes\relax}% \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 } \MT@addto@setup{% \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 \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}% }% }% \MT@if@false \MT@with@package@T{hyperref}{% \pdfstringdefDisableCommands{% \let\pickup@font\MT@orig@pickupfont \let\textmicrotypecontext\@secondoftwo \let\microtypecontext\@gobble \def\lsstyle{\pdfstringdefWarn\lsstyle}% \def\textls#1#{\pdfstringdefWarn\textls}% }% \MT@if@true }% \MT@with@package@T{tex4ht}\MT@if@true \ifMT@if@\g@addto@macro\MT@setupfont@hook\MT@restore@p@h\fi \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}% }% \g@addto@macro\MT@setupfont@hook{% \catcode`\\\z@ \let\lst@ProcessLetter\@empty }% }% \MT@with@package@T{soul}{% \soulregister\lsstyle 0% \soulregister\textls 1% }% \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}% }% }% } \expandafter\ifx\the\font\nullfont\normalfont\fi \def\MT@setupfont{\MT@setupfont@hook} \MT@requires@pdftex7 {\g@addto@macro\MT@setupfont\MT@copy@font}\relax \g@addto@macro\MT@setupfont{% \MT@exp@two@c\MT@split@name\string\MT@font/\@nil \MT@exp@one@n\MT@find@file\MT@family \ifx\MT@familyalias\@empty \else \MT@exp@one@n\MT@find@file\MT@familyalias\fi } \MT@requires@pdftex6 {\g@addto@macro\MT@setupfont\MT@tracking}\relax \g@addto@macro\MT@setupfont{% \MT@check@font \ifMT@inlist@ \else \MT@vinfo{Setting up font `\MT@@font'\on@line}% \MT@protrusion \MT@expansion } \MT@requires@pdftex6 {\g@addto@macro\MT@setupfont{\MT@spacing\MT@kerning}}\relax \MT@requires@pdftex5 {\g@addto@macro\MT@setupfont\MT@noligatures}\relax \g@addto@macro\MT@setupfont{% \MT@register@font \fi } \let\MT@copy@font\relax \MT@requires@pdftex7{ \def\MT@copy@font@{% \xdef\MT@font@copy{\csname\MT@@font/\MT@pr@context/\MT@ex@context\endcsname}% \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 \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 \let\font@name\MT@font@copy \aftergroup\let\aftergroup\font@name\aftergroup\MT@font@copy } \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 \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}% \MT@ifdefined@n@TF{MT@\MT@family @alias}% {\MT@let@cn\MT@familyalias{MT@\MT@family @alias}}% {\let\MT@familyalias\@empty}% } \newif\ifMT@do \def\MT@maybe@do#1{% \csname ifMT@\csname MT@abbr@#1\endcsname\endcsname \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 \def\MT@feat{#1}% \csname MT@set@#1@codes\endcsname \else \MT@vinfo{... No \@nameuse{MT@abbr@#1}}% \fi } \def\MT@checklist@#1#2{% \MT@ifdefined@n@T {MT@#2list@#1@\@tempa}{% \expandafter\MT@exp@one@n\expandafter\MT@in@clist \csname MT@#1\expandafter\endcsname \csname MT@#2list@#1@\@tempa\endcsname \ifMT@inlist@ \MT@dotrue \else \MT@dofalse \expandafter\MT@clist@break \fi }% } \def\MT@checklist@family#1{% \MT@ifdefined@n@T {MT@#1list@family@\@tempa}{% \MT@exp@two@n\MT@in@clist \MT@family{\csname MT@#1list@family@\@tempa\endcsname}% \ifMT@inlist@ \MT@dotrue \else \MT@dofalse \ifx\MT@familyalias\@empty \else \MT@exp@two@n\MT@in@clist \MT@familyalias{\csname MT@#1list@family@\@tempa\endcsname}% \ifMT@inlist@ \MT@dotrue \fi \fi \fi \ifMT@do \else \expandafter\MT@clist@break \fi }% } \def\MT@checklist@size#1{% \MT@ifdefined@n@T {MT@#1list@size@\@tempa}{% \MT@exp@cs\MT@in@rlist{MT@#1list@size@\@tempa}% \ifMT@inlist@ \MT@dotrue \else \MT@dofalse \expandafter\MT@clist@break \fi }% } \def\MT@checklist@font#1{% \MT@ifdefined@n@T {MT@#1list@font@\@tempa}{% \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@ \expandafter\MT@clist@break \else \MT@dofalse \fi }% } \def\MT@protrusion{\MT@maybe@do{pr}} \def\MT@set@pr@codes{% \MT@if@list@exists{% \MT@get@font@dimen@six{% \MT@get@opt \MT@reset@pr@codes \MT@get@inh@list \MT@set@inputenc{c}% \MT@load@list\MT@pr@c@name \MT@set@listname \MT@let@cn\@tempc{MT@pr@c@\MT@pr@c@name}% \expandafter\MT@set@codes\@tempc,\relax,}% }\MT@reset@pr@codes } \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 } \def\MT@set@all@pr#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 } \def\MT@reset@pr@codes@{\MT@set@all@pr\z@\z@} \let\MT@reset@pr@codes\relax \def\MT@the@pr@code{\@tempcntb} \MT@requires@pdftex6{ \def\MT@the@pr@code@tr{% \numexpr\@tempcntb+\MT@letterspace@/2\relax } }\relax \def\MT@set@codes#1,{% \ifx\relax#1\@empty\else \MT@split@codes #1==\relax \expandafter\MT@set@codes \fi } \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 } \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 }% \def\@tempb{#2}% \MT@ifempty\@tempb\relax{% \MT@scale@to@em \rpcode\MT@font\MT@char=\MT@the@pr@code }% \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 }% }% } \MT@requires@pdftex3{ \def\MT@scale@to@em{% \@tempcntb=\MT@count\relax \MT@scale\@tempcntb \@tempb \MT@dimen@six \ifnum\@tempcntb=\z@ \else \MT@scale@factor \fi } \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 } \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 }{ \def\MT@scale@to@em{% \MT@count=\@tempb\relax \ifnum\MT@count=\z@ \else \MT@scale@factor \fi } \def\MT@get@charwd{\MT@count=\MT@dimen@six} } \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 } \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}% } \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 } \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 } \def\MT@get@opt{% \MT@set@listname \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}% }% \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}% }% \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 \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 }% } \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 } \def\MT@set@inputenc#1{% \def\MT@cat{#1}% \edef\@tempa{MT@\MT@feat @#1@\csname MT@\MT@feat @#1@name\endcsname @inputenc}% \MT@ifdefined@n@T\@tempa\MT@set@inputenc@ } \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}% }% }% } \def\MT@load@inputenc{% \MT@cfg@catcodes \inputencoding{\@nameuse{\@tempa}}% } \def\MT@set@pr@heirs#1{% \lpcode\MT@font#1=\lpcode\MT@font\MT@char \rpcode\MT@font#1=\rpcode\MT@font\MT@char } \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 } \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}% } \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}% } \def\MT@expansion{\MT@maybe@do{ex}} \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 } \newif\ifMT@nonselected \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 } \let\MT@set@ex@codes\MT@set@ex@codes@n \def\MT@expandfont{% \pdffontexpand\MT@font \MT@stretch@ \MT@shrink@ \MT@step@ \MT@auto@\relax } \def\MT@set@all@ex#1{% \MT@do@font{\efcode\MT@font\@tempcnta=#1\relax}% } \def\MT@reset@ef@codes@{\MT@set@all@ex\MT@ex@factor@} \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@ } \def\MT@ex@split@val#1\relax{% \@tempcntb=#1\relax \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 \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 }% }% } \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 } \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 }% } \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}% }% } \def\MT@set@ex@heirs#1{% \efcode\MT@font#1=\efcode\MT@font\MT@char } \def\MT@preset@ex{% \@tempcntb=\csname MT@ex@c@\MT@ex@c@name @preset\endcsname\relax \MT@scale@factor \MT@set@all@ex\@tempcntb } \MT@requires@pdftex6{ \def\MT@spacing{\MT@maybe@do{sp}} \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 } \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 }% \def\@tempb{#2}% \MT@ifempty\@tempb\relax{% \MT@get@space@unit3% \MT@scale@to@em \stbscode\MT@font\MT@char=\@tempcntb }% \def\@tempb{#3}% \MT@ifempty\@tempb\relax{% \MT@get@space@unit4% \MT@scale@to@em \shbscode\MT@font\MT@char=\@tempcntb }% \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 }% }% } \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 } \def\MT@set@all@sp#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 \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 \MT@requires@pdftex6{ \def\MT@kerning{\MT@maybe@do{kn}} \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 } \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 }% \def\@tempb{#2}% \MT@ifempty\@tempb\relax{% \MT@get@space@unit2% \MT@scale@to@em \knaccode\MT@font\MT@char=\@tempcntb }% \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 }% }% } \def\MT@set@kn@heirs#1{% \knbccode\MT@font#1=\knbccode\MT@font\MT@char \knaccode\MT@font#1=\knaccode\MT@font\MT@char } \def\MT@set@all@kn#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 \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 \MT@requires@pdftex6{ \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 } \let\MT@tracking \MT@tracking@ \def\MT@set@tr@codes{% \MT@vinfo{Tracking font `\MT@@font'\on@line}% \MT@get@font@dimen@six{% \MT@if@list@exists \MT@get@tr@opt \relax \MT@ifdefined@c@TF\MT@letterspace@\relax{\let\MT@letterspace@\MT@letterspace}% \ifnum\MT@letterspace@=\z@ \MT@set@tr@zero \else \MT@vinfo{... Tracking by \number\MT@letterspace@}% \MT@warn@tracking@DVI \xdef\MT@lsfont{\csname\expandafter\string\font@name /\number\MT@letterspace@ ls\endcsname}% \expandafter\ifx\MT@lsfont\relax \MT@get@ls@basefont \global\expandafter\letterspacefont\MT@lsfont\font@name\MT@letterspace@ \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,% \MT@ifdefined@c@TF\MT@tr@okern{\let\@tempa\MT@tr@okern}{\def\@tempa{*,*}}% \expandafter\MT@tr@set@okern\@tempa,% \MT@ifdefined@c@T\MT@tr@ligatures\MT@tr@noligatures \MT@do@font{\lpcode\MT@lsfont\@tempcnta=\numexpr\MT@letterspace@/2\relax \rpcode\MT@lsfont\@tempcnta=\numexpr\MT@letterspace@/2\relax}% \let\MT@the@pr@code\MT@the@pr@code@tr \fi \aftergroup\MT@set@lsfont \let\MT@font\MT@lsfont \xdef\MT@set@curr@ls{\def\noexpand\MT@curr@ls{\MT@letterspace@}}% \aftergroup\MT@set@curr@ls \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 \ifx\MT@ls@adjust\@empty \MT@outer@kern=-\dimexpr\MT@letterspace@ sp * \fontdimen6\font@name/2000\relax \MT@ls@outer@k \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 \fi \xdef\MT@set@curr@ok{\MT@outer@kern=\the\MT@outer@kern\relax}% \aftergroup\aftergroup\aftergroup\MT@ls@aftergroup \fi }% } \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}}} \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}% \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 }% }% \MT@get@tr@opt@{spacing} {ispace}% \MT@get@tr@opt@{outerspacing}{ospace}% \MT@get@tr@opt@{outerkerning}{okern}% \MT@get@tr@opt@{noligatures} {ligatures}% } \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}}% } \def\MT@set@lsfont{\MT@exp@two@c\let\font@name\MT@lsfont} \DeclareRobustCommand\lsstyle{% \not@math@alphabet\lsstyle\textls \def\MT@feat{tr}% \let\MT@tracking\MT@set@tr@codes \selectfont } \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}}% } \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 \MT@exp@two@c\let\font@name\MT@ls@basefont \fi } \def\MT@set@lsbasefont{\MT@exp@two@c\let\font@name\MT@ls@basefont} \def\MT@set@tr@zero{% \xdef\MT@ls@basefont{\csname\expandafter\string\font@name @base\endcsname}% \expandafter\ifx\MT@ls@basefont\relax \else \aftergroup\MT@set@lsbasefont \fi } \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 } } \newskip\MT@outer@space \def\MT@tr@set@space#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 } \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 }% }% } \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 \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 }% } \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@ \unskip \hskip\MT@outer@space\relax \let\MT@ls@outer@k\relax \else \ifdim\lastskip=% \ifnum\spacefactor<2000 \spaceskip \else \ifdim\xspaceskip=\z@ \dimexpr\spaceskip+\fontdimen7\font@name\relax \else \xspaceskip \fi \fi \unskip \hskip\MT@outer@space\relax \let\MT@ls@outer@k\relax \fi \fi \fi \fi } \def\MT@tr@outer@r{% \futurelet\MT@tr@outer@next\MT@tr@outer@r@ } \def\MT@tr@outer@r@{% \def\MT@temp*{}% \ifmmode \else \ifnum\currentgrouptype=10 \else \def\MT@temp*##1{\ifhmode\hskip\MT@outer@space \fi}% \ifcat\egroup\noexpand\MT@tr@outer@next \ifhmode\unkern\fi\egroup \MT@set@curr@ok \MT@set@curr@os \def\MT@temp*{\afterassignment\MT@tr@outer@r\let\MT@temp=}% \else \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 \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 \fi}% \else \ifx~\MT@tr@outer@next \def\MT@temp*~{\nobreak\hskip\MT@outer@space }% \else \ifx\ \MT@tr@outer@next \else \ifx\space\MT@tr@outer@next \else \ifx\@xobeysp\MT@tr@outer@next \else \def\MT@temp*{\ifdim\MT@outer@kern=\z@\else\MT@ls@outer@k \fi}% \let\MT@tr@outer@next\relax \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \MT@temp*% } \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@ } }{ \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 } } \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 \DeclareRobustCommand\textls{% \@ifstar{\let\MT@ls@adjust@\MT@ls@adjust@empty\MT@textls}% {\let\MT@ls@adjust@\MT@ls@adjust@relax\MT@textls}% } \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 } \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@ } \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 } \newdimen\MT@outer@kern \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 } \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}}% } \def\MT@ls@outer@k{\ifhmode\kern\MT@outer@kern\relax\fi} \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 } \def\MT@noligatures@#1#2{% \MT@ifdefined@c@TF#2{% \MT@ifdefined@c@TF\tagcode{% \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 \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 }% } \let\MT@file@list\@empty \def\MT@find@file#1{% \MT@in@clist{#1}\MT@file@list \ifMT@inlist@ \else \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 } \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 } \def\MT@begin@catcodes{% \begingroup \MT@cfg@catcodes } \let\MT@end@catcodes\endgroup \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 } \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}% } \def\MT@get@listname#1{% \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 } \def\MT@try@order{% {1111}{1110}{1101}{1100}{1011}{1010}{1001}{1000}% {0111}{0110}{0101}{0100}{0011}{0010}{0001}{0000}% } \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}% \MT@ifdefined@n@TF{MT@\@tempb @\@tempa}{% \MT@next@listname@#4% }{% \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}% \MT@ifdefined@n@T{MT@\@tempb @\@tempa}{% \MT@next@listname@#4% }% \fi \fi }% } \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 } \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 }{% \MT@let@nc{MT@\MT@feat @c@name}\@empty \ifMT@nonselected \MT@vinfo{... Applying non-selected expansion (no list)}% \else \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 }% } \def\MT@get@inh@list{% \let\MT@context\@empty \MT@get@listname{\MT@feat @inh}% \MT@ifdefined@c@TF\MT@listname{% \MT@edef@n{MT@\MT@feat @inh@name}{\MT@listname}% \MT@let@cn\@tempc{MT@\MT@feat @inh@\MT@listname}% \ifx\@tempc\@empty \else \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 }% } \def\MT@get@slot{% \escapechar`\\ \let\MT@char@\m@ne \MT@noresttrue \MT@toks=\expandafter{\@tempa}% \expandafter\MT@is@letter\@tempa\relax\relax \ifnum\MT@char@ < \z@ \MT@exp@two@c\MT@is@active\string\@tempa\@nil \MT@ifdefined@n@TF{\MT@encoding\MT@detokenize@c\@tempa}% \MT@is@symbol {\expandafter\MT@is@composite\@tempa\relax\relax}% \ifnum\MT@char@ < \z@ \expandafter\MT@exp@two@c\expandafter\MT@is@char\expandafter \meaning\expandafter\@tempa\MT@charstring\relax\relax\relax \fi \fi \let\MT@char\MT@char@ \ifnum\MT@char < \z@ \MT@warn@unknown \else \ifMT@norest \else \MT@warn@rest \let\MT@char\m@ne \fi \fi \escapechar\m@ne } \newif\ifMT@norest \def\MT@is@letter#1#2\relax{% \ifcat a\noexpand#1\relax \edef\MT@char@{\number`#1}% \ifx\\#2\\% \else \MT@norestfalse \fi \else \ifcat !\noexpand#1\relax \edef\MT@char@{\number`#1}% \ifx\\#2\\% \ifnum\MT@char@ > 127 \MT@warn@ascii \fi \else \MT@norestfalse \expandafter\MT@is@number#1#2\relax\relax \fi \fi \fi } \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 \else \if#1'\relax \def\MT@char@{\number#1#2#3}% \else \MT@ifint{#1#2#3}{% \def\MT@char@{\number#1#2#3}% }\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 } \def\MT@is@active#1#2\@nil{% \ifnum\catcode`#1 = \active \begingroup \set@display@protect \let\IeC\@firstofone \let\@inpenc@undefined@\MT@undefined@char \def\UTFviii@defined##1{\ifx ##1\relax \MT@undefined@char{utf8}\else\expandafter ##1\fi}% \MT@ifdefined@c@T\PrerenderUnicode {\PrerenderUnicode{\@tempa}\let\unicode@charfilter\@firstofone}% \edef\x{\endgroup \def\noexpand\@tempa{\@tempa}% \MT@toks={\the\MT@toks\space(= \@tempa)}% }% \x \fi } \def\MT@undefined@char#1{undefined in input encoding ``#1''} \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@ \expandafter\expandafter\expandafter\MT@is@letter\MT@char\relax\relax \fi } \begingroup \catcode`\/=\z@ /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 /fi }% }% } /x \def\MT@is@composite#1#2\relax{% \ifx\\#2\\\else \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 } \def\MT@set@listname{% \edef\MT@curr@list@name{\@nameuse{MT@abbr@\MT@feat} list\noexpand\MessageBreak `\@nameuse{MT@\MT@feat @c@name}'}% } \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}% } \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}% } \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}% } \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}% } \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}')}% } \let\MT@font@list\@empty \let\MT@font\@empty \MT@addto@setup{% \@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}}% \@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}% }% \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% .\MessageBreak Double-check whether micro-typography is indeed% \MessageBreak applied to the document.% \MessageBreak (Hint: Turn on `verbose' mode)% }% \fi \g@addto@macro\pickup@font{\begingroup}% \MT@with@package@T{trace}{\g@addto@macro\pickup@font{\conditionally@traceoff}}% \g@addto@macro\pickup@font{% \escapechar\m@ne \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 \MT@register@subst@font \fi \fi \MT@setupfont \endgroup }% \let\MT@pickupfont\pickup@font \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}% \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 }% } \def\MT@check@font{\MT@exp@one@n\MT@in@clist\MT@font\MT@font@list} \def\MT@register@subst@font{\xdef\MT@font@list{\MT@font@list\font@name,}} \def\MT@register@font{\xdef\MT@font@list{\MT@font@list\MT@font,}} \let\MT@active@features\@empty \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 } \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,}% }% } \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 }% } \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 }% } \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 }% } \DeclareRobustCommand\textmicrotypecontext[2]{{\microtypecontext{#1}#2}} \def\MT@reset@context@{% \MT@vinfo{<<< Resetting contexts\on@line }% \selectfont } \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 } \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@ \MT@ifempty{##1}{\def\MT@val{@}}{\def\MT@val{##1}}% \MT@exp@cs\ifx{MT@\@tempb @context}\MT@val \else \MT@vinfo{>>> Changing #1 context to `\MT@val'\MessageBreak\on@line }% \def\MT@reset@context{\aftergroup\MT@reset@context@}% \MT@glet@nn{MT@reset@\@tempb @codes}{MT@reset@\@tempb @codes@}% \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}}% \fi \MT@edef@n{MT@\@tempb @context}{\MT@val}% \fi \fi }% } \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 \def\DeclareMicrotypeSet{% \@ifstar \MT@DeclareSetAndUseIt \MT@DeclareSet } \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}% }% }% }}% }% } \newcommand\MT@DeclareSetAndUseIt[3][]{% \MT@DeclareSet[#1]{#2}{#3}% \UseMicrotypeSet[#1]{#2}% } \let\MT@curr@set@name\@empty \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 \setkeys{MT@#1@set}{#3}% } \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}% \MT@exp@two@n\g@addto@macro {\csname MT@#2list@#1@\MT@curr@set@name\expandafter\endcsname}% {\MT@val,}% }% \expandafter\g@addto@macro\expandafter\MT@font@sets \csname MT@#2list@#1@\MT@curr@set@name\endcsname }% } \def\MT@get@highlevel#1{% \expandafter\MT@test@ast\MT@val*\@nil\relax{% \MT@ifempty\@tempa{\def\@tempa{#1}}\relax \edef\MT@val{\expandafter\noexpand\csname \@tempa default\endcsname}% }% } \def\MT@test@ast#1*#2\@nil{% \def\@tempa{#1}% \MT@ifempty{#2}% } \let\MT@font@sets\@empty \def\MT@fix@font@set#1{% \xdef#1{#1}% \global\@onelevel@sanitize#1% } \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 }% }% } \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}}% {\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 }% } \def\MT@get@size{% \if*\MT@val\relax \def\@tempa{\normalsize}% \else \MT@let@cn\@tempa{\MT@val}% \fi \ifx\@tempa\relax \else \begingroup \def\set@fontsize##1##2##3##4\@nil{\endgroup\def\MT@val{##2}}% \@tempa\@nil \fi \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 }% } \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 }% } \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 } \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 } \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/}% } \def\MT@warn@axis@empty#1#2{% \MT@warning{#1 axis is empty in font specification\MessageBreak `\MT@temp'. Using `#2' instead}% } \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}% } \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}% }% }% }}% }% } \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}{}% }% } \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}% }% }% }}% }% } \def\MT@set@default@set#1#2{% \KV@@sp@def\@tempa{#2}% \MT@ifdefined@n@TF{MT@#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}% }% } \let\MT@variants\@empty \def\DeclareMicrotypeVariants{% \@ifstar \MT@DeclareVariants {\let\MT@variants\@empty\MT@DeclareVariants}% } \def\MT@DeclareVariants#1{% \MT@map@clist@n{#1}{% \KV@@sp@def\@tempa{##1}% \@onelevel@sanitize\@tempa \xdef\MT@variants{\MT@variants{\@tempa}}% }% } \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}% \MT@ifdefined@c@T\MT@family{% \MT@glet\MT@familyalias\@tempb }% } \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 } \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 } }{ \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.}% } } \def\DeclareMicrotypeBabelHook#1#2{% \MT@map@clist@n{#1}{% \KV@@sp@def\@tempa{##1}% \MT@gdef@n{MT@babel@\@tempa}{#2}% }% } \def\SetProtrusion{% \MT@begin@catcodes \MT@SetProtrusion } \newcommand*\MT@SetProtrusion[3][]{% \let\MT@extra@context\@empty \MT@set@named@keys{MT@pr@c}{#1}% \def\MT@permutelist{pr@c}% \setkeys{MT@cfg}{#2}% \MT@permute \MT@gdef@n{MT@pr@c@\MT@pr@c@name}{#3}% \MT@end@catcodes } \def\SetExpansion{% \MT@begin@catcodes \MT@SetExpansion } \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 }% \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 } \def\SetTracking{% \MT@begin@catcodes \MT@SetTracking } \newcommand*\MT@SetTracking[3][]{% \let\MT@extra@context\@empty \MT@set@named@keys{MT@tr@c}{#1}% \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 } \def\SetExtraSpacing{% \MT@begin@catcodes \MT@SetExtraSpacing } \newcommand*\MT@SetExtraSpacing[3][]{% \let\MT@extra@context\@empty \MT@set@named@keys{MT@sp@c}{#1}% \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 } \def\SetExtraKerning{% \MT@begin@catcodes \MT@SetExtraKerning } \newcommand*\MT@SetExtraKerning[3][]{% \let\MT@extra@context\@empty \MT@set@named@keys{MT@kn@c}{#1}% \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 } \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 } \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}% \MT@get@highlevel{#1}% \MT@edef@n{MT@temp#1\the\@tempcnta}{\MT@val}% \advance\@tempcnta \@ne }% }% } \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 }% }% } \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}% \MT@exp@cs\MT@xaddb {MT@\MT@permutelist @\@tempb\MT@extra@context @sizes}% {{{\MT@val}{\m@ne}{\MT@curr@set@name}}}% }% }% } \def\MT@get@font@and@size#1/#2/#3/#4/#5/#6\@nil{% \MT@get@font@{#1}{#2}{#3}{#4}{#5}{1}% } \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} \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}}}% } \MT@map@clist@c\MT@features{% \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}% \define@key{MT@#1@c}{context}[]{\MT@ifempty{##1}\relax{\def\MT@extra@context{##1}}}% } \MT@requires@pdftex7{ \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.}% } }{ \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 }% } \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 }% } } }{ \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.}% } } \def\MT@warn@nodim#1{% \MT@warning{`\@tempa' is not a dimension.\MessageBreak Ignoring it and setting values relative to\MessageBreak #1}% } \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{% \MT@ifdimen\@tempa {\MT@glet@nc{MT@pr@c@\MT@curr@set@name @unit}\@tempa}% {\MT@warn@nodim{character widths}}% }% } \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}}% } \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}}% }% }% }% } \MT@map@clist@n{stretch,shrink,step}{% \define@key{MT@ex@c}{#1}[]{% \MT@ifempty{##1}\relax{% \MT@ifint{##1}{% \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 \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 } \MT@define@opt@key{tr}{spacing} \MT@define@opt@key{tr}{outerspacing} \MT@define@opt@key{tr}{outerkerning} \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}}} \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 } \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 } \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}} \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}}% \MT@gdef@n{MT@#1@inh@\csname MT@#1@inh@name\endcsname}{#3}% \def\MT@permutelist{#1@inh}% \setkeys{MT@inh}{#2}% \MT@permute } \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}% } \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}% }% } \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} \def\MT@inh@do#1,{% \ifx\relax#1\@empty \else \MT@inh@split #1==\relax \expandafter\MT@inh@do \fi } \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 }% \fi \fi } \def\MT@permute{% \let\MT@cnt@encoding\@ne \MT@permute@ \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@@@@ } \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@@@@@@ } \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 *}% \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{% \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 }{% \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'}% }% }% \MT@xdef@n{MT@\MT@permutelist @\@tempa\MT@extra@context}% {\csname MT@\MT@permutelist @name\endcsname}% \fi }% } \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}% } \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 } \def\MT@check@rlist#1{\expandafter\MT@check@rlist@ #1} \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 } \def\MT@check@range#1{\expandafter\MT@check@range@ #1} \def\MT@check@range@#1#2#3{% \MT@ifdim{#2}=\m@ne{% \MT@ifdim\@tempc=\m@ne{% \MT@ifdim\@tempb={#1}\MT@if@true\relax }{% \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{% \MT@ifdim\@tempb<{#2}{% \MT@ifdim\@tempb<{#1}\relax\MT@if@true }\relax }{% \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}% \expandafter\MT@tlist@break \fi } \newif\ifMT@opt@expansion \newif\ifMT@opt@auto \newif\ifMT@opt@DVI \def\MT@optwarn@admissible#1#2{% \MT@warning@nl{`#1' is not an admissible value for option\MessageBreak `#2'. Assuming `false'}% } \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}}% } \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}% }% } \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@ }{% \MT@opt@def@set{#1}% }% }% }% }% }% }% }% } \define@key{MT}{activate}[true]{% \setkeys{MT}{protrusion={#1}}% \setkeys{MT}{expansion={#1}}% } \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}% }% }% }% }% }% } \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% }% } \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} \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 } \MT@def@bool@opt{defersetup}{% \csname if\@tempa\endcsname \else \AtEndOfPackage{% \MT@setup@ \let\MT@setup@\@empty \let\MT@addto@setup\@firstofone }% \fi } \MT@requires@pdftex7{ \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 } }{ \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 } } }{ \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 } } \MT@def@bool@opt{final}{% \csname if\@tempa\endcsname \MT@draftfalse \else \MT@drafttrue \fi } \define@key{MT}{verbose}[true]{% \let\MT@vinfo\MT@info@nl \def\@tempa{#1}% \MT@ifstreq\@tempa{true}\relax{% \MT@ifstreq\@tempa{errors}{% \let\MT@warning \MT@warn@err \let\MT@warning@nl\MT@warn@err }{% \let\MT@vinfo\@gobble \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}}% }% }% }% } \MT@map@clist@n{% stretch,shrink,step,% letterspace}{% \define@key{MT}{#1}[\csname MT@#1@default\endcsname]{% \def\@tempa{##1 }% \MT@ifint\@tempa {\MT@edef@n{MT@#1}{\@tempa}}% {\MT@optwarn@nan{##1}{#1}}% }% } \define@key{MT}{factor}[\MT@factor@default]{% \def\@tempa{#1 }% \MT@ifint\@tempa {\edef\MT@pr@factor{\@tempa}} {\MT@optwarn@nan{#1}{factor}}% } \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}}% }% } \MT@protrusiontrue \ifnum\pdfoutput<\@ne \else \MT@requires@pdftex4{ \MT@expansiontrue \MT@autotrue }\relax \fi \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 \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}% } \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}'}% }{% \MT@gdef@n{MT@#1@setname}{@}% \MT@warning@nl{No \@nameuse{MT@abbr@#1} set chosen, no default set declared. \MessageBreak Using empty set}% }% }% } \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 \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}{% \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 }% }% }% } \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 } \MT@define@optionX{protrusion}\pdfprotrudechars \MT@define@optionX{expansion}\pdfadjustspacing \MT@requires@pdftex6{ \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 }% }% }% } \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 } }\@firstofone {\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}}% } \let\MT@saved@setupfont\MT@setupfont \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 } \def\MT@ProcessOptionsWithKV#1{% \let\@tempc\relax \let\MT@temp\@empty \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}}}% \MT@temp \MT@clear@options } \def\MT@getkey#1=#2\@nil{#1} \MT@ProcessOptionsWithKV{MT} \MT@addto@setup{% \ifMT@draft \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 \ifnum\pdfoutput<\@ne \ifMT@opt@expansion \else \MT@expansionfalse \fi \fi \MT@info@nl{Generating \ifnum\pdfoutput<\@ne DVI \else PDF \fi output% \ifMT@opt@DVI\space (changed by \MT@MT)\fi}% \ifx\MT@copy@font\relax\else \MT@info@nl{Using font copies for contexts}\fi \MT@map@tlist@c\MT@font@sets\MT@fix@font@set \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 \ifMT@expansion \ifnum\MT@stretch=\m@ne \let\MT@stretch\MT@stretch@default \fi \ifnum\MT@shrink=\m@ne \let\MT@shrink\MT@stretch \fi \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}}% \let\MT@auto\@empty \ifMT@auto \MT@requires@pdftex4{% \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 }{% \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 \MT@requires@pdftex4\relax{% \def\MT@auto{1000 }% }% \fi \ifMT@selected \let\MT@set@ex@codes\MT@set@ex@codes@s \else \let\MT@set@ex@codes\MT@set@ex@codes@n \fi \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}% \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}% \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}}% \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}}% \else \let\MT@expansion\relax \MT@info@nl{No font expansion}% \fi } \MT@requires@pdftex6{ \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 } \MT@addto@setup{% \ifMT@tracking \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}% \ifMT@protrusion\else\pdfprotrudechars\@ne\fi }% \else \let\MT@tracking\relax \MT@info@nl{No tracking}% \fi \ifMT@spacing \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}% }% \else \let\MT@spacing\relax \MT@info@nl{No adjustment of interword spacing}% \fi \ifMT@kerning \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}% }% \else \let\MT@kerning\relax \MT@info@nl{No adjustment of character kerning}% \fi \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 \ifnum\MT@letterspace=\m@ne \let\MT@letterspace\MT@letterspace@default \else \MT@ls@too@large\MT@letterspace \fi }% }{ \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 } } \MT@requires@pdftex5{ \MT@addto@setup{% \ifMT@noligatures \else \let\MT@noligatures\relax \fi } }\relax \MT@addto@setup{% \ifx\MT@active@features\@empty \else \edef\MT@active@features{\expandafter\@gobble\MT@active@features}% \fi \MT@documenttrue } \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=}% }% } \@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.}} } \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 \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 \MT@if@false \MT@with@babel@and@T{turkish} \MT@if@true \ifMT@if@\MT@shorthandoff{Turkish}{:!=}\fi \fi \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 } \MT@addto@setup{\fi \selectfont} \edef\MT@curr@file{\jobname.tex} \AtBeginDocument{\MT@setup@ \MT@glet\MT@setup@\@empty} \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 \MT@restore@catcodes \endinput %% %% End of file `microtype.sty'.