2
%% This is file `microtype.sty',
3
%% generated with the docstrip utility.
5
%% The original source files were:
7
%% microtype.dtx (with options: `package')
9
%% -----------------------------------------------------------------------
10
%% The `microtype' package
11
%% An interface to the micro-typographic extensions of pdfTeX
12
%% Copyright (c) 2004, 2005 R Schlicht <w.m.l@gmx.net>
14
%% This work may be distributed and/or modified under the conditions of
15
%% the LaTeX Project Public License, either version 1.3 of this license or
16
%% (at your option) any later version. The latest version of this license
17
%% is in: http://www.latex-project.org/lppl.txt, and version 1.3 or later
18
%% is part of all distributions of LaTeX version 2003/12/01 or later.
20
%% This work has the LPPL maintenance status `author-maintained'.
22
%% This work consists of the files microtype.dtx and microtype.ins and the
23
%% derived file microtype.sty.
25
%% -----------------------------------------------------------------------
27
\NeedsTeXFormat{LaTeX2e}
28
\ProvidesPackage{microtype}
29
[2005/10/28 v1.9 Micro-typography with pdfTeX (RS)]
30
\newcommand*\DeclareMicrotypeSet[3][]{}
31
\newcommand*\UseMicrotypeSet[2][]{}
32
\newcommand*\DeclareMicrotypeSetDefault[2][]{}
33
\newcommand*\DeclareMicrotypeAlias[2]{}
34
\newcommand*\SetProtrusion[3][]{}
35
\newcommand*\SetExpansion[3][]{}
36
\newcommand*\DisableLigatures[1]{}
37
\newcommand*\DeclareCharacterInheritance[3][]{}
38
\newcommand*\LoadMicrotypeFile[1]{}
39
\newcommand*\microtypesetup[1]{}
40
\newcommand*\microtypecontext[1]{}
41
\def\DeclareMicrotypeSet{%
43
{\@ifnextchar[\MT@DeclareSet{\MT@DeclareSet[]}}%
44
{\@ifnextchar[\MT@DeclareSet{\MT@DeclareSet[]}}%
46
\def\MT@DeclareSet[#1]#2#3{}
47
\@onlypreamble{\DeclareMicrotypeSet}
48
\@onlypreamble{\UseMicrotypeSet}
49
\@onlypreamble{\DisableLigatures}
51
\MT@warning{\string#1 is deprecated. Please use\MessageBreak
54
\newcommand*\DeclareMicroTypeSet{%
55
\MT@old@cmd\DeclareMicroTypeSet
57
\newcommand*\UseMicroTypeSet{%
58
\MT@old@cmd\UseMicroTypeSet
60
\newcommand*\DeclareMicroTypeAlias{%
61
\MT@old@cmd\DeclareMicroTypeAlias
62
\DeclareMicrotypeAlias}
63
\newcommand*\LoadMicroTypeFile{%
64
\MT@old@cmd\LoadMicroTypeFile
66
\def\MT@error{\PackageError{microtype}}
67
\def\MT@warning{\PackageWarning{microtype}}
68
\def\MT@warning@nl#1{\MT@warning{#1\@gobble}}
69
\def\MT@warn@err#1{\MT@error{#1}{%
70
This error message appears because you loaded the `microtype'\MessageBreak
71
package with the option `verbose=errors'. Consult the documentation\MessageBreak
72
in microtype.(pdf,dvi) to find out what went wrong.}}
73
\def\MT@info{\PackageInfo{microtype}}
74
\def\MT@info@nl#1{\MT@info{#1\@gobble}}
77
\ifx\normalpdftexversion\@undefined \else
78
\let\pdftexversion \normalpdftexversion
79
\let\pdftexrevision\normalpdftexrevision
80
\let\pdfoutput \normalpdfoutput
82
\ifx\pdftexversion\@undefined \else
83
\ifx\pdftexversion\relax \else
85
\ifnum\pdftexversion < 130
87
\ifnum\pdftexversion < 120
88
\let\MT@pdftex@no\thr@@
89
\ifnum\pdftexversion = 14
90
\ifnum \expandafter`\pdftexrevision < `h
92
\ifnum \expandafter`\pdftexrevision < `f
97
\ifnum\pdftexversion < 14
105
\ifnum\MT@pdftex@no<\tw@
106
\AtEndOfPackage{\let\@unprocessedoptions\relax}%
107
\let\CurrentOption\@empty
110
You don't seem to be using pdftex.\MessageBreak
112
You are using a pdftex version older than 0.14f.\MessageBreak
113
microtype won't work with such antiquated versions.\MessageBreak
114
Please install a newer version of pdftex.\MessageBreak
116
All micro-typographic features will be disabled}
132
\def\MT@restore@catcodes#1{%
134
\noexpand\catcode`\noexpand#1\the\catcode`#1\relax
135
\expandafter\MT@restore@catcodes
138
\edef\MT@restore@catcodes{%
139
\MT@restore@catcodes\^\-\=\*\,\/\`\'\"\|\relax
142
\AtEndOfPackage{\MT@restore@catcodes}
143
\RequirePackage{keyval}[1997/11/10]
145
\newif\ifMT@protrusion
146
\newif\ifMT@expansion
149
\newif\ifMT@noligatures
150
\newif\ifMT@DVIoutput
154
\let\MT@pr@unit\@empty
164
\def\MT@factor@default{1000 }
165
\def\MT@stretch@default{20 }
166
\def\MT@shrink@default{20 }
167
\def\MT@step@default{4 }
168
\def\MT@pdfcprot@error{%
169
\MT@error{Detected the `pdfcprot' package!\MessageBreak
170
`microtype' and `pdfcprot' may not be used together}{%
171
The `pdfcprot' package provides an interface to character protrusion.\MessageBreak
172
So does the `microtype' package. Using both packages at the same\MessageBreak
173
time will almost certainly lead to undesired results. Have your choice!}%
174
\let\MT@pdfcprot@error\relax
176
\@ifpackageloaded{pdfcprot}\MT@pdfcprot@error\relax
177
\def\MT@ledmac@setup{%
179
\ifnum\MT@pdftex@no > 4
180
\MT@ifdefined@c\l@dunhbox@line{%
181
\MT@info@nl{Patching ledmac to enable character protrusion}%
182
\newdimen\MT@led@kern
183
\let\MT@led@unhbox@line\l@dunhbox@line
184
\renewcommand*{\l@dunhbox@line}[1]{%
186
\MT@led@kern=\rightmarginkern##1%
187
\kern\leftmarginkern##1%
188
\MT@led@unhbox@line##1%
194
Character protrusion in paragraphs with line\MessageBreak
195
numbering will only work if you update ledmac}%
199
The pdftex version you are using does not allow\MessageBreak
200
character protrusion in paragraphs with line\MessageBreak
201
numbering by the `ledmac' package.\MessageBreak
202
Upgrade pdftex to version 1.30 or later}%
206
\def\MT@setupfont@hook{%
207
\@ifpackagewith{babel}{spanish}{%
208
\MT@ifdefined@c\percentsign
209
{\let\%\percentsign}\relax
211
\@ifpackageloaded{csquotes}{%
212
\@ifpackagelater{csquotes}{2005/05/11}\@disablequotes\relax
214
\@ifpackageloaded{hyperref}{%
220
\@ifpackageloaded{pdfcprot}\MT@pdfcprot@error\relax
221
\@ifpackageloaded{ledmac}\MT@ledmac@setup\relax
222
\let\MT@setupfont@hook\@empty
223
\@ifpackagewith{babel}{spanish}{%
224
\g@addto@macro\MT@setupfont@hook{%
225
\MT@ifdefined@c\percentsign
226
{\let\%\percentsign}\relax}%
228
\@ifpackageloaded{csquotes}{%
229
\@ifpackagelater{csquotes}{2005/05/11}{%
230
\g@addto@macro\MT@setupfont@hook\@disablequotes
233
Should you receive warnings about unknown slot\MessageBreak
234
numbers, try upgrading the `csquotes' package}%
237
\@ifpackageloaded{hyperref}{%
238
\g@addto@macro\MT@setupfont@hook{%
242
\pdfstringdefDisableCommands{%
243
\let\pickup@font\MT@orig@pickupfont
247
\expandafter\ifx\the\font\nullfont\normalfont\fi
249
\ifx\eTeXversion\@undefined \else
250
\ifx\eTeXversion\relax \else
251
\ifnum\eTeXversion>\z@
256
\def\MT@def@n#1{\expandafter\def\csname #1\endcsname}
257
\def\MT@edef@n#1{\expandafter\edef\csname #1\endcsname}
258
\def\MT@let@nc#1{\expandafter\let\csname #1\endcsname}
259
\def\MT@let@cn#1#2{\expandafter\let\expandafter#1\csname #2\endcsname}
260
\def\MT@let@nn#1{\expandafter\MT@let@cn\csname #1\endcsname}
261
\def\MT@exp@string{\expandafter\string}
262
\def\MT@exp@one@n#1#2{\expandafter#1\expandafter{#2}}
263
\def\MT@exp@two@c#1{\expandafter\expandafter\expandafter#1\expandafter}
264
\def\MT@exp@two@n#1#2#3{\expandafter\expandafter\expandafter
265
#1\expandafter\expandafter\expandafter
266
{\expandafter#2\expandafter}\expandafter{#3}}
267
\def\MT@hop@fi#1\fi{\fi#1}
268
\def\MT@hop@else@fi#1\else#2\fi{\fi#1}
269
\ifcase\MT@etex@no \MT@hop@else@fi{%
270
\def\MT@ifdefined@c#1{%
272
\expandafter\@secondoftwo
274
\expandafter\@firstoftwo
277
\def\MT@ifdefined@n#1{%
278
\begingroup\MT@exp@two@c\endgroup
279
\ifx\csname #1\endcsname\relax
280
\expandafter\@secondoftwo
282
\expandafter\@firstoftwo
286
\def\MT@ifdefined@c#1{%
288
\expandafter\@firstoftwo
290
\expandafter\@secondoftwo
293
\def\MT@ifdefined@n#1{%
294
\ifcsname#1\endcsname
295
\expandafter\@firstoftwo
297
\expandafter\@secondoftwo
306
\expandafter\@firstoftwo
308
\expandafter\@secondoftwo
313
\if!\ifnum9<1#1!\else?\fi
314
\expandafter\@firstoftwo
316
\expandafter\@secondoftwo
323
\aftergroup\@secondoftwo
325
\aftergroup\@firstoftwo
330
\expandafter\@firstoftwo
332
\expandafter\@secondoftwo
337
\expandafter\@firstoftwo
339
\expandafter\@secondoftwo
344
\expandafter\@firstoftwo
346
\expandafter\@secondoftwo
349
\def\MT@ifstreq#1#2{%
353
\expandafter\@firstoftwo
355
\expandafter\@secondoftwo
372
\def\MT@map@clist@n#1#2{%
374
\def\MT@clist@function##1{#2}%
375
\expandafter\MT@map@clist@
376
\expandafter#1,\@nil,\@nnil,%
379
\def\MT@map@clist@c#1{\expandafter\MT@map@clist@n\expandafter{#1}}
380
\def\MT@map@clist@#1,{%
384
\MT@clist@function{#1}%
385
\expandafter\MT@map@clist@
388
\def\MT@clist@break#1\@nnil,{\fi}
389
\def\MT@map@tlist@n#1#2{%
390
\MT@map@tlist@#2#1\@nnil
392
\def\MT@map@tlist@c#1#2{%
393
\expandafter\MT@map@tlist@
394
\expandafter#2#1\@nnil
396
\def\MT@map@tlist@#1#2{%
399
\expandafter\MT@map@tlist@
403
\def\MT@tlist@break#1\@nnil{\fi}
405
\def\MT@in@clist#1#2{%
407
\def\x##1#1,##2\@nnil{%
412
\expandafter\x#2,#1,\@nnil
414
\def\MT@rem@from@list#1#2{%
415
\def\x##1#1,##2\@nnil{%
417
\def\x####1,#1,####2\@nnil{%
423
\expandafter\x#2,#1,\@nnil
425
\def\MT@in@tlist#1#2{%
428
\MT@map@tlist@c#2\MT@in@tlist@
430
\def\MT@in@tlist@#1{%
434
\expandafter\MT@tlist@break
439
\MT@map@tlist@c#1\MT@in@rlist@
441
\def\MT@in@rlist@#1{%
442
\expandafter\MT@in@rlist@@#1%
444
\def\MT@in@rlist@@#1#2#3{%
450
\MT@iflt\MT@size{#1}\relax{%
451
\MT@iflt\MT@size{#2}%
457
\def\MT@size@name{#3}%
458
\expandafter\MT@tlist@break
461
\def\MT@loop#1\MT@repeat{%
462
\def\MT@iterate{#1\relax\expandafter\MT@iterate\fi}%
464
\let\MT@iterate\relax
467
\def\MT@while@num#1#2{\MT@loop #2\ifnum#1\MT@repeat}
470
\def\MT@increment#1{%
472
\advance\MT@count \@ne
473
\edef#1{\number\MT@count}%
476
\def\MT@increment#1{%
477
\edef#1{\number\numexpr #1 + 1\relax}%
481
\def\MT@scale#1#2#3{%
482
\multiply #1 #2\relax
483
\ifnum #3 = \z@ \else
488
\def\MT@scale#1#2#3{%
490
#1=\numexpr #1 * #2\relax
492
#1=\numexpr #1 * #2 / #3\relax
496
\def\MT@remove@spaces#1{\expandafter\KV@@sp@def\expandafter#1\expandafter{#1}}
497
\let\MT@make@string\@onelevel@sanitize
498
\def\MT@abbr@pr{protrusion}
499
\def\MT@abbr@ex{expansion}
500
\def\MT@abbr@pr@c{protrusion codes}
501
\def\MT@abbr@ex@c{expansion codes}
502
\def\MT@abbr@pr@inh{protrusion inheritance}
503
\def\MT@abbr@ex@inh{expansion inheritance}
504
\def\MT@abbr@nl{noligatures}
505
\def\MT@rbba@protrusion{pr}
506
\def\MT@rbba@expansion{ex}
508
\ifx\MT@vinfo\MT@info@nl
509
\MT@info{Setting up font `\MT@exp@string\MT@font'}\fi
511
\MT@exp@two@c\MT@split@name\string\MT@font\@nil
512
\MT@exp@one@n\MT@find@file\MT@family
513
\ifx\MT@familyalias\@empty \else
514
\MT@exp@one@n\MT@find@file\MT@familyalias\fi
515
\ifx\f@encoding\cf@encoding\else\@@enc@update\fi
520
\def\MT@split@name#1/#2/#3/#4/#5\@nil{%
521
\def\MT@encoding{#1}%
526
\MT@ifdefined@n{MT@\MT@family @alias}%
527
{\MT@let@cn\MT@familyalias{MT@\MT@family @alias}}%
528
{\let\MT@familyalias\@empty}%
532
\expandafter\csname ifMT@\csname MT@abbr@#1\endcsname\endcsname
534
\MT@map@clist@n{font,encoding,family,series,shape,size}{%
535
\MT@ifdefined@n{MT@checklist@##1}%
536
{\csname MT@checklist@##1\endcsname}%
537
{\MT@checklist@{##1}}%
545
\csname MT@set@#1@codes\endcsname
547
\MT@vinfo{... No \@nameuse{MT@abbr@#1}}%
550
\def\MT@checklist@#1#2{%
551
\edef\@tempa{\csname MT@#2@setname\endcsname}%
552
\MT@ifdefined@n{MT@#2list@#1@\@tempa}{%
553
\expandafter\expandafter\expandafter
554
\MT@in@clist\expandafter\expandafter\expandafter
555
{\csname MT@#1\expandafter\endcsname\expandafter}%
556
\csname MT@#2list@#1@\@tempa\endcsname
561
\expandafter\MT@clist@break
566
\def\MT@checklist@font#1{%
567
\edef\@tempa{\csname MT@#1@setname\endcsname}%
568
\MT@ifdefined@n{MT@#1list@font@\@tempa}{%
569
\MT@exp@two@n\MT@in@clist
570
\MT@font{\csname MT@#1list@font@\@tempa\endcsname}%
572
\expandafter\MT@clist@break
579
\def\MT@checklist@family#1{%
580
\edef\@tempa{\csname MT@#1@setname\endcsname}%
581
\MT@ifdefined@n{MT@#1list@family@\@tempa}{%
582
\MT@exp@two@n\MT@in@clist
583
\MT@family{\csname MT@#1list@family@\@tempa\endcsname}%
588
\ifx\MT@familyalias\@empty \else
589
\MT@exp@two@n\MT@in@clist
590
\MT@familyalias{\csname MT@#1list@family@\@tempa\endcsname}%
597
\expandafter\MT@clist@break
602
\def\MT@checklist@size#1{%
603
\edef\@tempa{\csname MT@#1@setname\endcsname}%
604
\MT@ifdefined@n{MT@#1list@size@\@tempa}{%
605
\expandafter\MT@in@rlist
606
\csname MT@#1list@size@\@tempa\endcsname
611
\expandafter\MT@clist@break
616
\def\MT@protrusion{\MT@maybe@do{pr}}
617
\def\MT@set@pr@codes{%
623
\MT@load@list{\MT@pr@c@name}%
624
\edef\MT@curr@list@name{protrusion list `\MT@pr@c@name'}%
625
\MT@let@cn\@tempc{MT@pr@c@\MT@pr@c@name}%
626
\expandafter\MT@pr@do\@tempc,\relax,%
629
\def\MT@set@all@pr#1#2{%
631
\MT@while@num{\@tempcnta < \@cclvi}{%
632
\lpcode\MT@font\@tempcnta=#1\relax
633
\rpcode\MT@font\@tempcnta=#2\relax
634
\advance\@tempcnta \@ne
637
\def\MT@reset@pr@codes@{\MT@set@all@pr\z@\z@}
638
\let\MT@reset@pr@codes\relax
639
\def\MT@get@dimen@six{%
640
\ifnum\fontdimen6\MT@font=\z@
642
Font `\MT@exp@string\MT@font' does not specify its\MessageBreak
643
\@backslashchar fontdimen 6 (width of an `em')! Therefore,\MessageBreak
644
\@nameuse{MT@abbr@\MT@feat} will not work with this font}%
645
\expandafter\MT@gobble@settings
647
\edef\MT@dimen@six{\number\fontdimen6\MT@font}%
650
\def\MT@gobble@settings#1\@tempc,\relax,{}
652
\ifx\relax#1\@empty\else
653
\MT@pr@split #1==\relax
654
\expandafter\MT@pr@do
657
\def\MT@pr@split#1=#2=#3\relax{%
659
\ifx\@tempa\@empty \else
661
\ifnum\MT@char > \m@ne
663
\MT@pr@split@val#2\relax
667
\def\MT@pr@split@val#1,#2\relax{%
669
\MT@ifempty\@tempb\relax{%
671
\lpcode\MT@font\MT@char=\@tempcntb
674
\MT@ifempty\@tempb\relax{%
676
\rpcode\MT@font\MT@char=\@tempcntb
678
\MT@ifdefined@c\MT@pr@inh@name{%
679
\MT@ifdefined@n{MT@inh@\MT@pr@inh@name @\MT@char @}{%
680
\expandafter\MT@map@tlist@c
681
\csname MT@inh@\MT@pr@inh@name @\MT@char @\endcsname
686
\ifnum\MT@pdftex@no > \tw@
687
\def\MT@scale@to@em{%
688
\@tempcntb=\MT@count\relax
689
\MT@scale\@tempcntb \@tempb \MT@dimen@six
690
\ifnum\@tempcntb=\z@ \else
696
\setbox\z@=\hbox{\MT@font \char\MT@char}%
697
\MT@count=\wd\z@\relax
698
\ifnum\MT@count=\z@ \MT@warn@missing@char \fi
702
\MT@count=\number\fontcharwd\MT@font\MT@char\relax
703
\ifnum\MT@count=\z@ \MT@warn@missing@char \fi
707
\def\MT@scale@to@em{%
708
\MT@count=\@tempb\relax
709
\ifnum\MT@count=\z@ \else
713
\def\MT@get@charwd{\MT@count=\MT@dimen@six}
715
\def\MT@get@font@dimen#1{%
716
\MT@count=\number\fontdimen#1\MT@font
718
\ifcase\MT@etex@no \MT@hop@else@fi{%
719
\def\MT@warn@missing@char{%
721
Character `\the\mt@toks' has a width of 0pt\MessageBreak
722
(it's probably missing) in font `\MT@exp@string\MT@font'.\MessageBreak
723
It cannot be protruded}%
726
\def\MT@warn@missing@char{%
727
\MT@warning@nl{Character `\the\mt@toks'
728
\iffontchar\MT@font\MT@char has a width of 0pt \else is missing \fi
729
in font\MessageBreak `\MT@exp@string\MT@font'. It cannot be protruded}%
732
\def\MT@scale@factor{%
733
\ifnum\csname MT@\MT@feat @factor@\endcsname=\@m \else
734
\expandafter\MT@scale\expandafter
735
\@tempcntb \csname MT@\MT@feat @factor@\endcsname \@m
737
\ifnum\@tempcntb > \csname MT@\MT@feat @max\endcsname\relax
738
\@tempcnta=\csname MT@\MT@feat @max\endcsname
739
\MT@warn@code@too@large
741
\ifnum\@tempcntb<\csname MT@\MT@feat @min\endcsname\relax
742
\@tempcnta=\csname MT@\MT@feat @min\endcsname
743
\MT@warn@code@too@large
747
\def\MT@warn@code@too@large{%
748
\ifnum\csname MT@\MT@feat @factor@\endcsname=\@m \else
749
\expandafter\MT@scale\expandafter\@tempcnta\expandafter\@m
750
\csname MT@\MT@feat @factor@\endcsname
752
\MT@scale\@tempcnta \MT@dimen@six \MT@count
753
\MT@warning@nl{The \@nameuse{MT@abbr@\MT@feat} code \@tempb\space
754
is too large for character\MessageBreak
755
`\the\mt@toks' in \MT@curr@list@name.\MessageBreak
756
Setting it to the maximum of \number\@tempcnta}%
757
\@tempcntb=\@tempcnta
760
\MT@ifdefined@n{MT@\MT@feat @c@\csname MT@\MT@feat @c@name\endcsname @factor}{%
761
\MT@let@nn{MT@\MT@feat @factor@}
762
{MT@\MT@feat @c@\csname MT@\MT@feat @c@name\endcsname @factor}%
763
\MT@vinfo{... : Multiplying \@nameuse{MT@abbr@\MT@feat} codes by
764
\number\csname MT@\MT@feat @factor@\endcsname/1000}%
766
\MT@let@nn{MT@\MT@feat @factor@}{MT@\MT@feat @factor}%
768
\MT@ifdefined@n{MT@\MT@feat @c@\csname MT@\MT@feat @c@name\endcsname @unit}{%
769
\MT@let@nn{MT@\MT@feat @unit@}%
770
{MT@\MT@feat @c@\csname MT@\MT@feat @c@name\endcsname @unit}%
771
\expandafter\ifx\csname MT@\MT@feat @unit@\endcsname\@empty
772
\MT@vinfo{... : Setting \@nameuse{MT@abbr@\MT@feat} codes
773
relative to character widths}%
775
\expandafter\ifx\csname MT@\MT@feat @unit@\endcsname\m@ne
776
\MT@vinfo{... : Setting \@nameuse{MT@abbr@\MT@feat} codes
777
relative to width of space}%
781
\MT@let@nn{MT@\MT@feat @unit@}{MT@\MT@feat @unit}%
783
\let\MT@get@char@unit\relax
784
\let\MT@get@space@unit\@gobble
785
\expandafter\ifx\csname MT@\MT@feat @unit@\endcsname\@empty
786
\let\MT@get@char@unit\MT@get@charwd
788
\expandafter\ifx\csname MT@\MT@feat @unit@\endcsname\m@ne
789
\let\MT@get@space@unit\MT@get@font@dimen
791
\expandafter\MT@get@unit\csname MT@\MT@feat @unit@\endcsname
794
\MT@ifdefined@n{MT@\MT@feat @c@\csname MT@\MT@feat @c@name\endcsname @preset}{%
795
\csname MT@preset@\MT@feat\endcsname
799
\expandafter\MT@get@unit@#1 e!\@nil
800
\ifx\x\@empty\else\let#1\x\fi
801
\@defaultunits\@tempdima#1 pt\relax\@nnil
804
Cannot set \@nameuse{MT@abbr@\MT@feat} factors relative to zero\MessageBreak
805
width. Setting factors of list `\@nameuse{MT@\MT@feat @c@name}'\MessageBreak
806
relative to character widths instead}%
808
\let\MT@get@char@unit\MT@get@charwd
810
\MT@vinfo{... : Setting \@nameuse{MT@abbr@\MT@feat} factors relative
812
\MT@count=\number\@tempdima\relax
815
\def\MT@get@unit@#1e#2#3\@nil{%
816
\ifx\\#3\\\let\x\@empty \else
818
\edef\x{#1\fontdimen6\MT@font}%
821
\edef\x{#1\fontdimen5\MT@font}%
826
\def\MT@set@pr@heirs#1{%
827
\lpcode\MT@font#1=\lpcode\MT@font\MT@char
828
\rpcode\MT@font#1=\rpcode\MT@font\MT@char
831
\expandafter\expandafter\expandafter\MT@preset@pr@
832
\csname MT@pr@c@\MT@pr@c@name @preset\endcsname\@nil
834
\def\MT@preset@pr@#1,#2\@nil{%
835
\ifx\MT@pr@unit@\@empty
837
Cannot preset characters relative to their widths\MessageBreak
838
for protrusion list `\MT@pr@c@name'. Presetting them\MessageBreak
839
relative to 1em instead}%
840
\let\MT@preset@aux\MT@preset@aux@factor
842
\let\MT@preset@aux\MT@preset@aux@space
844
\MT@preset@aux{#1}\@tempa
845
\MT@preset@aux{#2}\@tempb
846
\MT@set@all@pr\@tempa\@tempb
848
\def\MT@preset@aux@factor#1#2{%
851
\edef#2{\number\@tempcntb}%
853
\def\MT@preset@aux@space#1#2{%
855
\MT@get@space@unit\tw@
857
\edef#2{\number\@tempcntb}%
859
\def\MT@expansion{\MT@maybe@do{ex}}
860
\def\MT@set@ex@codes@s{%
865
\MT@load@list{\MT@ex@c@name}%
866
\edef\MT@curr@list@name{expansion list `\MT@ex@c@name'}%
867
\MT@let@cn\@tempc{MT@ex@c@\MT@ex@c@name}%
868
\expandafter\MT@ex@do\@tempc,\relax,%
869
\pdffontexpand\MT@font \MT@stretch@ \MT@shrink@ \MT@step@ \MT@auto@\relax
872
\newif\ifMT@nonselected
873
\def\MT@set@ex@codes@n{%
878
\let\MT@stretch@\MT@stretch
879
\let\MT@shrink@\MT@shrink
880
\let\MT@step@\MT@step
881
\let\MT@auto@\MT@auto
882
\let\MT@ex@factor@\MT@ex@factor
885
\pdffontexpand\MT@font \MT@stretch@ \MT@shrink@ \MT@step@ \MT@auto@\relax
888
\let\MT@set@ex@codes\MT@set@ex@codes@n
889
\def\MT@set@all@ex#1{%
891
\MT@while@num{\@tempcnta < \@cclvi}{%
892
\efcode\MT@font\@tempcnta=#1\relax
893
\advance\@tempcnta \@ne
896
\def\MT@reset@ef@codes@{\MT@set@all@ex\MT@ex@factor@}
897
\ifnum\MT@pdftex@no < 4
898
\let\MT@reset@ef@codes\MT@reset@ef@codes@
900
\def\MT@reset@ef@codes{%
901
\ifnum\MT@ex@factor@=\@m \else
907
\ifx\relax#1\@empty \else
908
\MT@ex@split #1==\relax
909
\expandafter\MT@ex@do
912
\def\MT@ex@split#1=#2=#3\relax{%
914
\ifx\@tempa\@empty \else
916
\ifnum\MT@char > \m@ne
918
\ifnum\MT@ex@factor@=\@m \else
919
\MT@scale\@tempcntb \MT@ex@factor@ \@m
921
\ifnum\@tempcntb > \MT@ex@max
922
\MT@warn@ex@too@large\MT@ex@max
924
\ifnum\@tempcntb < \MT@ex@min
925
\MT@warn@ex@too@large\MT@ex@min
928
\efcode\MT@font\MT@char=\@tempcntb
929
\MT@ifdefined@c\MT@ex@inh@name{%
930
\MT@ifdefined@n{MT@inh@\MT@ex@inh@name @\MT@char @}{%
931
\expandafter\MT@map@tlist@c
932
\csname MT@inh@\MT@ex@inh@name @\MT@char @\endcsname
939
\def\MT@warn@ex@too@large#1{%
940
\MT@warning@nl{Expansion factor
941
\number\@tempcntb\space too large for character\MessageBreak
942
`\the\mt@toks' in \MT@curr@list@name.\MessageBreak
943
Setting it to the maximum of \number#1}%
947
\MT@ifdefined@n{MT@ex@c@\MT@ex@c@name @factor}{%
948
\MT@let@cn\MT@ex@factor@{MT@ex@c@\MT@ex@c@name @factor}%
949
\MT@vinfo{... : Multiplying expansion factors by \number\MT@ex@factor@/1000}%
951
\let\MT@ex@factor@\MT@ex@factor
953
\MT@ifdefined@n{MT@ex@c@\MT@ex@c@name @stretch}{%
954
\MT@let@cn\MT@stretch@{MT@ex@c@\MT@ex@c@name @stretch}%
955
\MT@vinfo{... : Setting stretch limit to \number\MT@stretch@}%
957
\let\MT@stretch@\MT@stretch
959
\MT@ifdefined@n{MT@ex@c@\MT@ex@c@name @shrink}{%
960
\MT@let@cn\MT@shrink@{MT@ex@c@\MT@ex@c@name @shrink}%
961
\MT@vinfo{... : Setting shrink limit to \number\MT@shrink@}%
963
\let\MT@shrink@\MT@shrink
965
\MT@ifdefined@n{MT@ex@c@\MT@ex@c@name @step}{%
966
\MT@let@cn\MT@step@{MT@ex@c@\MT@ex@c@name @step}%
967
\MT@vinfo{... : Setting expansion step to \number\MT@step@}%
969
\let\MT@step@\MT@step
971
\MT@ifdefined@n{MT@ex@c@\MT@ex@c@name @auto}{%
972
\MT@let@cn\MT@auto@{MT@ex@c@\MT@ex@c@name @auto}%
973
\def\@tempa{autoexpand}%
974
\MT@vinfo{... : \ifx\@tempa\MT@auto@ En\else Dis\fi
975
abling automatic expansion}%
977
\let\MT@auto@\MT@auto
980
\def\MT@set@ex@heirs#1{%
981
\efcode\MT@font#1=\efcode\MT@font\MT@char
984
\@tempcntb=\csname MT@ex@c@\MT@ex@c@name @preset\endcsname\relax
986
\MT@set@all@ex\@tempcntb
988
\ifnum\MT@pdftex@no < 5 \MT@hop@else@fi{%
989
\let\MT@noligatures\relax
991
\def\MT@noligatures{%
992
\csname ifMT@\MT@abbr@nl\endcsname
994
\MT@map@clist@n{font,encoding,family,series,shape,size}{%
995
\MT@ifdefined@n{MT@checklist@##1}%
996
{\csname MT@checklist@##1\endcsname}%
997
{\MT@checklist@{##1}}%
1004
\pdfnoligatures\MT@font
1005
\MT@vinfo{... Disabling ligatures}%
1009
\def\MT@load@list#1{%
1011
\MT@let@cn\@tempb{MT@\MT@feat @c@\@tempa load}%
1012
\MT@ifstreq\@tempa\@tempb{%
1013
\MT@warning{\@nameuse{MT@abbr@\MT@feat} list `\@tempa' cannot load itself}%
1015
\ifx\@tempb\relax \else
1016
\MT@ifdefined@n{MT@\MT@feat @c@\@tempb}{%
1017
\MT@vinfo{... : First loading \@nameuse{MT@abbr@\MT@feat} list `\@tempb'}%
1019
\MT@load@list{\@tempb}%
1021
\edef\MT@curr@list@name{\@nameuse{MT@abbr@\MT@feat} list `\@tempb'}%
1022
\MT@let@cn\@tempc{MT@\MT@feat @c@\@tempb}%
1023
\expandafter\csname MT@\MT@feat @do\expandafter\endcsname\@tempc,\relax,%
1025
\MT@warning{\@nameuse{MT@abbr@\MT@feat} list `\@tempb' undefined.
1026
Cannot load\MessageBreak it from list `\@tempa'}%
1031
\let\MT@file@list\@empty
1032
\def\MT@find@file#1{%
1033
\MT@in@clist{#1}\MT@file@list
1036
\let\MT@begin@catcodes\relax
1037
\let\MT@end@catcodes\relax
1038
\InputIfFileExists{mt-#1.cfg}{%
1039
\MT@vinfo{... Loading configuration file mt-#1.cfg}%
1040
\MT@xadd\MT@file@list{#1,}%
1042
\expandafter\MT@get@basefamily#1\relax\relax\relax
1043
\MT@exp@one@n\MT@in@clist\@tempa\MT@file@list
1045
\InputIfFileExists{mt-\@tempa.cfg}{%
1046
\MT@vinfo{... Loading configuration file mt-\@tempa.cfg}%
1047
\MT@xadd\MT@file@list{\@tempa,#1,}%
1049
\MT@vinfo{... No configuration file mt-#1.cfg}%
1050
\MT@xadd\MT@file@list{#1,}%
1057
\def\MT@begin@catcodes{%
1070
{\!\"\$\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\[\]\_\`\|\~}%
1072
\def\MT@remove@spaces##1{}%
1075
\let\MT@end@catcodes\endgroup
1076
\def\MT@get@basefamily#1#2#3#4\relax{%
1077
\ifx#2\relax \def\@tempa{#1}\else
1078
\ifx#3\relax \def\@tempa{#1#2}\else
1079
\def\@tempa{#1#2#3}%
1080
\ifx\relax#4\relax \else
1081
\MT@ifstreq{#4}{\string x}\relax{%
1082
\MT@ifstreq{#4}{\string j}\relax{%
1083
\MT@ifstreq{#4}{\string w}\relax{%
1084
\def\@tempa{#1#2#3#4}}}}\fi\fi\fi
1086
\def\MT@get@listname#1{%
1087
\let\MT@listname\@undefined
1089
\MT@map@tlist@c\MT@try@order\MT@get@listname@
1091
\def\MT@get@listname@#1{%
1092
\expandafter\MT@next@listname#1%
1093
\ifx\MT@listname\@undefined \else
1094
\expandafter\MT@tlist@break
1098
{1111}{1110}{1101}{1100}{1011}{1010}{1001}{1000}%
1099
{0111}{0110}{0101}{0100}{0011}{0010}{0001}{0000}%
1101
\def\MT@next@listname#1#2#3#4{%
1102
\edef\@tempa{\MT@encoding
1103
/\ifnum#1=\@ne \MT@family\fi
1104
/\ifnum#2=\@ne \MT@series\fi
1105
/\ifnum#3=\@ne \MT@shape\fi
1108
\MT@ifdefined@n{MT@\@tempb @\@tempa}{%
1109
\MT@next@listname@#4%
1112
\ifx\MT@familyalias\@empty \else
1113
\edef\@tempa{\MT@encoding
1115
/\ifnum#2=\@ne \MT@series\fi
1116
/\ifnum#3=\@ne \MT@shape\fi
1119
\MT@ifdefined@n{MT@\@tempb @\@tempa}{%
1120
\MT@next@listname@#4%
1126
\def\MT@next@listname@#1{%
1128
\expandafter\MT@in@rlist\csname MT@\@tempb @\@tempa @sizes\endcsname
1130
\let\MT@listname\MT@size@name
1133
\MT@let@cn\MT@listname{MT@\@tempb @\@tempa}%
1136
\def\MT@if@list@exists{%
1137
\expandafter\let\expandafter\MT@context\csname MT@\MT@feat @context\endcsname
1138
\MT@get@listname{\MT@feat @c}%
1139
\MT@ifdefined@c\MT@listname{%
1140
\MT@edef@n{MT@\MT@feat @c@name}{\MT@listname}%
1142
\MT@vinfo{... Applying non-selected expansion (list `\MT@ex@c@name')}%
1144
\MT@vinfo{... Loading \@nameuse{MT@abbr@\MT@feat} list
1145
`\@nameuse{MT@\MT@feat @c@name}'}%
1149
\MT@let@nc{MT@\MT@feat @c@name}\@empty
1151
\MT@vinfo{... Applying non-selected expansion}%
1153
\MT@warning{I cannot find a \@nameuse{MT@abbr@\MT@feat} list
1154
for font\MessageBreak`\MT@exp@string\MT@font'%
1155
\ifx\MT@context\@empty\else\space(context: `\MT@context')\fi.
1156
Switching off\MessageBreak\@nameuse{MT@abbr@\MT@feat} for this font}%
1161
\def\MT@get@inh@list{%
1162
\let\MT@context\@empty
1163
\MT@get@listname{\MT@feat @inh}%
1164
\MT@ifdefined@c\MT@listname{%
1165
\MT@edef@n{MT@\MT@feat @inh@name}{\MT@listname}%
1166
\MT@let@cn\@tempc{MT@\MT@feat @inh@\csname MT@\MT@feat @inh@name\endcsname}%
1167
\ifx\@tempc\@empty \else
1168
\MT@let@cn\MT@inh@name{MT@\MT@feat @inh@name}%
1169
\def\MT@curr@list@name{inheritance list}%
1170
\expandafter\MT@inh@do\@tempc,\relax,%
1171
\global\MT@let@nc{MT@\MT@feat @inh@\csname MT@\MT@feat @inh@name\endcsname}\@empty
1174
\MT@let@nc{MT@\MT@feat @inh@name}\@undefined
1181
\mt@toks=\expandafter\expandafter\expandafter{\expandafter\string\@tempa}%
1182
\edef\MT@char{\expandafter\meaning\@tempa}%
1183
\expandafter\MT@is@letter\@tempa\relax\relax
1184
\ifnum\Mt@char < \z@
1185
\MT@exp@two@c\MT@is@active\string\@tempa\@nil
1186
\MT@ifdefined@n{\MT@encoding\MT@detokenize\@tempa}%
1189
\expandafter\MT@is@composite\@tempa\relax\relax
1191
\ifnum\Mt@char < \z@
1192
\MT@exp@two@c\MT@is@char\MT@char\MT@charstring\relax\relax\relax
1195
\let\MT@char\Mt@char
1196
\ifnum\MT@char < \z@
1207
\def\MT@testrest#1#2{%
1208
\MT@ifstreq{#1}{#2}\relax\MT@norestfalse
1210
\def\MT@is@letter#1#2\relax{%
1211
\ifcat a\noexpand#1\relax
1212
\edef\Mt@char{\number`#1}%
1218
\ifcat 1\noexpand#1\relax
1219
\edef\Mt@char{\number`#1}%
1221
\ifnum\Mt@char>127 \Mt@warn@ascii \fi
1224
\expandafter\MT@is@number#1#2\relax\relax
1229
\def\MT@is@number#1#2#3\relax{%
1230
\ifx\relax#3\relax \else
1231
\ifx\relax#2\relax \else
1234
\def\x{\uppercase{\edef\Mt@char{\number#1#2#3}}}\x
1237
\def\Mt@char{\number#1#2#3}%
1239
\MT@ifnumber{#1#2#3}{%
1240
\def\Mt@char{\number#1#2#3}%
1244
\ifnum\Mt@char > \@cclv
1245
\MT@warn@number@too@large{\noexpand#1\noexpand#2\noexpand#3}%
1251
\def\MT@is@active#1#2\@nil{%
1253
\ifnum\catcode`#1 = \active
1255
\set@display@protect
1257
\def\@inpenc@undefined@##1{undefined^^J%
1258
(microtype)\@spaces\@spaces\@spaces\@spaces
1259
in input encoding ``##1''}%
1261
\def\noexpand\@tempa{\@tempa}%
1262
\mt@toks={\the\mt@toks\space (= \@tempa)}%
1264
\expandafter\endgroup\x
1269
\edef\@tempa{\expandafter
1271
\MT@encoding\expandafter
1274
\expandafter\MT@exp@two@c\expandafter\MT@is@char\expandafter
1275
\meaning\expandafter\@tempa\MT@charstring\relax\relax\relax
1276
\ifnum\Mt@char < \z@
1277
\expandafter\MT@is@letter\@tempa\relax\relax
1282
/MT@map@tlist@n{/\/C/H/A/R}/@makeother
1285
/def/MT@charstring{\CHAR"}%
1286
/def/MT@is@char##1\CHAR"##2##3##4/relax{%
1289
/edef/Mt@char{/number"##2}%
1290
/MT@testrest/MT@charstring{##3##4}%
1292
/edef/Mt@char{/number"##2##3}%
1293
/MT@testrest/MT@charstring{##4}%
1299
/expandafter/endgroup/x
1300
\def\MT@is@composite#1#2\relax{%
1302
\edef\@tempa{\expandafter
1304
\string\csname\MT@encoding\endcsname
1308
\expandafter\MT@is@letter\@tempa\relax\relax
1312
\def\MT@detokenize#1{\MT@exp@two@c\zap@space\strip@prefix\meaning#1 \@empty}
1314
\def\MT@detokenize#1{\detokenize
1315
\expandafter\expandafter\expandafter{\expandafter\string#1}}
1317
\let\MT@curr@list@name\@empty
1318
\def\Mt@warn@ascii{%
1319
\MT@warning@nl{Character `\the\mt@toks' (= \Mt@char)
1320
is outside of ASCII range.\MessageBreak
1321
You must load the `inputenc' package before using\MessageBreak
1322
8-bit characters in \MT@curr@list@name}%
1324
\def\MT@warn@number@too@large#1{%
1326
Number #1 in encoding `\MT@encoding' too large!\MessageBreak
1327
Ignoring it in \MT@curr@list@name}%
1329
\def\MT@warn@unknown@i{%
1331
Unknown slot number of character `\the\mt@toks' in\MessageBreak
1332
font encoding `\MT@encoding'. Make sure it's a single\MessageBreak
1333
character (or a number) in \MT@curr@list@name}%
1335
\def\MT@warn@unknown{%
1337
Unknown slot number of character `\the\mt@toks' in\MessageBreak
1338
font encoding `\MT@encoding' in \MT@curr@list@name}%
1341
\g@addto@macro\do@subst@correction{%
1342
\xdef\MT@font{\csname \curr@fontshape/\f@size\endcsname}%
1344
\def\MT@orig@pickupfont{\expandafter\ifx\font@name\relax\define@newfont\fi}
1345
\ifx\pickup@font\MT@orig@pickupfont \else
1347
Command \string\pickup@font\space is not defined as expected.\MessageBreak
1348
Double-check whether micro-typography is indeed\MessageBreak
1349
applied to the document.\MessageBreak (Hint: Turn on `verbose' mode)%
1352
\g@addto@macro\pickup@font{%
1356
\let\MT@font\font@name
1358
\ifx\MT@font\font@name \else
1359
\expandafter\MT@xadd
1360
\csname MT@\MT@curr@contexts font@list\endcsname{\font@name,}%
1363
\expandafter\MT@exp@one@n\expandafter\MT@in@clist\expandafter\MT@font
1364
\csname MT@\MT@curr@contexts font@list\endcsname
1367
\expandafter\MT@xadd\csname MT@\MT@curr@contexts font@list\endcsname{\MT@font,}%
1368
\MT@map@tlist@c\MT@doc@contexts\MT@rem@from@lists
1371
\global\let\MT@font\@empty
1373
\def\MT@rem@from@lists#1{%
1374
\MT@ifstreq{#1}\MT@curr@contexts\relax{%
1375
\expandafter\MT@exp@one@n\expandafter\MT@rem@from@list
1376
\expandafter\MT@font\csname MT@#1font@list\endcsname
1379
\let\MT@pickupfont\pickup@font
1380
\let\MT@add@accent\add@accent
1381
\def\add@accent#1#2{%
1382
\let\pickup@font\MT@orig@pickupfont
1383
\MT@add@accent{#1}{#2}%
1384
\let\pickup@font\MT@pickupfont
1387
\ifx\MT@pickupfont\pickup@font \else
1389
Another package has overwritten the definition\MessageBreak
1390
of \string\pickup@font. I might not be able to\MessageBreak
1391
apply any micro-typography. Please find the\MessageBreak
1392
culprit, and load it before the microtype package
1394
The microtype package attaches the micro-typographic setup to\MessageBreak
1395
\string\pickup@font. If the other package has simply overwritten this\MessageBreak
1396
command, nothing will work. If, on the other hand, it has changed\MessageBreak
1397
the command in a cautious way, everything may be fine.\MessageBreak
1398
In either case, please send a report to <w.m.l@gmx.net>.
1402
\def\DeclareMicrotypeSet{%
1404
{\@ifnextchar[\MT@DeclareSetAndUseIt
1405
{\MT@DeclareSetAndUseIt[]}}%
1406
{\@ifnextchar[\MT@DeclareSet
1407
{\MT@DeclareSet[]}}%
1409
\def\MT@DeclareSet[#1]{%
1410
\MT@DeclareSet@{#1}%
1412
\def\MT@DeclareSetAndUseIt[#1]#2#3{%
1413
\MT@DeclareSet@{#1}{#2}{#3}%
1414
\UseMicrotypeSet[#1]{#2}%
1416
\def\MT@DeclareSet@#1#2#3{%
1417
\KV@@sp@def\@tempa{#1}%
1418
\MT@ifempty\@tempa{%
1419
\MT@declare@sets{pr}{#2}{#3}%
1420
\MT@declare@sets{ex}{#2}{#3}%
1422
\MT@map@clist@c\@tempa{%
1423
{\KV@@sp@def\@tempa{##1}%
1424
\MT@ifempty\@tempa\relax{%
1425
\MT@exp@one@n\MT@declare@sets
1426
{\csname MT@rbba@\@tempa\endcsname}{#2}{#3}}}%
1430
\let\MT@curr@set@name\@empty
1431
\def\MT@declare@sets#1#2#3{%
1432
\KV@@sp@def\MT@curr@set@name{#2}%
1433
\MT@ifdefined@n{MT@#1@set@@\MT@curr@set@name}{%
1434
\MT@warning{Redefining set `\MT@curr@set@name'}%
1436
\global\MT@let@nc{MT@#1@set@@\MT@curr@set@name}\@empty
1437
\setkeys{MT@#1@set}{#3}%
1439
\def\MT@define@set@keys#1{%
1440
\MT@define@set@key@{encoding}{#1}%
1441
\MT@define@set@key@{family}{#1}%
1442
\MT@define@set@key@{series}{#1}%
1443
\MT@define@set@key@{shape}{#1}%
1444
\MT@define@set@key@size{#1}%
1445
\MT@define@set@key@font{#1}%
1447
\def\MT@define@set@key@#1#2{%
1448
\csname MT@#2list@#1@\MT@curr@set@name\endcsname
1449
\define@key{MT@#2@set}{#1}[]{%
1450
\global\MT@let@nc{MT@#2list@#1@\MT@curr@set@name}\@empty
1451
\MT@map@clist@n{##1}{%
1452
\KV@@sp@def\MT@val{####1}%
1453
\MT@get@highlevel{#1}%
1454
\MT@make@string\MT@val
1455
\expandafter\MT@xadd
1456
\csname MT@#2list@#1@\MT@curr@set@name\endcsname{\MT@val,}%
1460
\def\MT@get@highlevel#1{%
1461
\expandafter\MT@test@ast\MT@val*\@nil{%
1462
\MT@ifempty\@tempa{\def\@tempa{#1}}\relax
1463
\edef\MT@val{\csname \@tempa default\endcsname}%
1464
\ifx\@nodocument\relax \else
1466
\csname MT@check@\MT@curr@set@name @\@tempa\endcsname\@empty
1468
\global\MT@edef@n{MT@\MT@curr@set@name @\@tempa @default}{\MT@val}%
1469
\edef\x{{\MT@curr@set@name}{\@tempa}}%
1470
\MT@exp@one@n\AtBeginDocument{%
1471
\expandafter\MT@check@default\x
1473
\global\MT@let@nc{MT@check@\MT@curr@set@name @\@tempa}\@empty
1478
\def\MT@test@ast#1*#2\@nil{%
1484
\def\MT@check@default#1#2{%
1485
\MT@let@cn\@tempa{MT@#1@#2@default}%
1486
\edef\@tempb{\csname #2default\endcsname}%
1487
\ifx\@tempa\@tempb \else
1489
\expandafter\noexpand\csname #2default\endcsname
1490
has changed (`\@tempa' <> `\@tempb')!\MessageBreak
1491
This might affect the `#1' font set.\MessageBreak
1492
Please make all relevant font changes *before*\MessageBreak
1493
loading the `microtype' package}%
1496
\def\MT@define@set@key@size#1{%
1497
\define@key{MT@#1@set}{size}[]{%
1498
\MT@map@clist@n{##1}{%
1499
\KV@@sp@def\MT@val{####1}%
1500
\expandafter\MT@get@range\MT@val--\@nil
1501
\ifx\MT@val\relax \else
1502
\expandafter\MT@xadd
1503
\csname MT@#1list@size@\MT@curr@set@name\endcsname
1504
{{{\MT@lower}{\MT@upper}\relax}}%
1509
\def\MT@get@range#1-#2-#3\@nil{%
1517
\edef\MT@upper{\MT@val}%
1522
\ifx\MT@val\relax \else
1523
\edef\MT@lower{\MT@val}%
1528
\def\MT@upper{2048}%
1533
\ifx\MT@val\relax \else
1534
\MT@ifgt\MT@lower\MT@val{%
1536
Invalid size range (\MT@lower\space > \MT@val) in font set
1537
`\MT@curr@set@name'.\MessageBreak Swapping sizes}%
1538
\edef\MT@upper{\MT@lower}%
1539
\edef\MT@lower{\MT@val}%
1541
\edef\MT@upper{\MT@val}%
1543
\MT@ifeq\MT@lower\MT@upper{%
1553
\def\@tempa{\normalsize}%
1555
\MT@let@cn\@tempa{\MT@val}%
1557
\ifx\@tempa\relax \else
1559
\def\set@fontsize##1##2##3##4\@nil{\gdef\MT@val{##2}}%
1563
\MT@ifdimen\MT@val{%
1564
\@defaultunits\@tempdima\MT@val pt\relax\@nnil
1565
\edef\MT@val{\strip@pt\@tempdima}%
1567
\MT@warning{Could not parse font size `\MT@val'\MessageBreak
1568
in font set `\MT@curr@set@name'}%
1572
\def\MT@define@set@key@font#1{%
1573
\define@key{MT@#1@set}{font}[]{%
1574
\MT@map@clist@n{##1}{%
1575
\KV@@sp@def\MT@val{####1}%
1576
\expandafter\MT@get@font\MT@val/////\@nil
1577
\expandafter\MT@xadd
1578
\csname MT@#1list@font@\MT@curr@set@name\endcsname
1579
{\csname\MT@val\endcsname,}%
1583
\def\MT@get@font#1/#2/#3/#4/#5/#6\@nil{%
1584
\MT@ifempty{#1#2#3#4#5}\relax{%
1586
\def\MT@temp{#1/#2/#3/#4/#5}%
1587
\MT@get@axis{encoding}{#1}%
1588
\MT@get@axis{family}{#2}%
1589
\MT@get@axis{series}{#3}%
1590
\MT@get@axis{shape}{#4}%
1592
\MT@warning{size axis is empty in font specification\MessageBreak
1593
`\MT@temp'. Using \string\normalsize\space instead}%
1599
\ifx\MT@val\relax\def\MT@val{0}\fi
1600
\edef\MT@val{\expandafter\@gobble\@tempb/\MT@val}%
1603
\def\MT@get@axis#1#2{%
1605
\MT@get@highlevel{#1}%
1606
\MT@ifempty\MT@val{%
1607
\MT@warning{#1 axis is empty in font specification\MessageBreak
1608
`\MT@temp'. Using `\csname #1default\endcsname' instead}%
1609
\edef\@tempb{\@tempb/\csname #1default\endcsname}%
1611
\edef\@tempb{\@tempb/\MT@val}%
1614
\MT@define@set@keys{pr}
1615
\MT@define@set@keys{ex}
1616
\MT@define@set@keys{nl}
1617
\renewcommand*\UseMicrotypeSet[2][]{%
1618
\KV@@sp@def\@tempa{#1}%
1619
\MT@ifempty\@tempa{%
1620
\MT@use@set{pr}{#2}%
1621
\MT@use@set{ex}{#2}%
1623
\MT@map@clist@c\@tempa{%
1624
{\KV@@sp@def\@tempa{##1}%
1625
\MT@ifempty\@tempa\relax{%
1626
\MT@exp@one@n\MT@use@set{\csname MT@rbba@\@tempa\endcsname}{#2}}}%
1630
\def\MT@use@set#1#2{%
1631
\KV@@sp@def\@tempa{#2}%
1632
\MT@ifdefined@n{MT@#1@set@@\@tempa}{%
1633
\global\MT@edef@n{MT@#1@setname}{\@tempa}%
1634
\MT@info{Using \@nameuse{MT@abbr@#1} set `\@tempa'}%
1636
\MT@ifdefined@n{MT@#1@setname}\relax{%
1637
\global\MT@edef@n{MT@#1@setname}{\@nameuse{MT@default@#1@set}}%
1640
The \@nameuse{MT@abbr@#1} set `\@tempa' is undeclared.\MessageBreak
1641
Using set `\@nameuse{MT@#1@setname}' instead}%
1644
\renewcommand*\DeclareMicrotypeSetDefault[2][]{%
1645
\KV@@sp@def\@tempa{#1}%
1646
\MT@ifempty\@tempa{%
1647
\MT@set@default@set{pr}{#2}%
1648
\MT@set@default@set{ex}{#2}%
1650
\MT@map@clist@c\@tempa{%
1651
{\KV@@sp@def\@tempa{##1}%
1652
\MT@ifempty\@tempa\relax{%
1653
\MT@exp@one@n\MT@set@default@set
1654
{\csname MT@rbba@\@tempa\endcsname}{#2}}}%
1658
\def\MT@set@default@set#1#2{%
1659
\KV@@sp@def\@tempa{#2}%
1660
\MT@ifdefined@n{MT@#1@set@@\@tempa}{%
1661
\global\MT@edef@n{MT@default@#1@set}{\@tempa}%
1664
The \@nameuse{MT@abbr@#1} set `\@tempa' is not declared.\MessageBreak
1665
Cannot make it the default set. Using set\MessageBreak `all' instead}%
1666
\global\MT@edef@n{MT@default@#1@set}{all}%
1669
\renewcommand*\DeclareMicrotypeAlias[2]{%
1670
\KV@@sp@def\@tempa{#1}%
1671
\KV@@sp@def\@tempb{#2}%
1672
\MT@make@string\@tempb
1673
\MT@ifdefined@n{MT@\@tempa @alias}{%
1674
\MT@warning{Alias font family `\@tempb' will override
1675
alias `\@nameuse{MT@\@tempa @alias}'\MessageBreak
1676
for font family `\@tempa'}}\relax
1677
\global\MT@edef@n{MT@\@tempa @alias}{\@tempb}%
1678
\MT@ifdefined@c\MT@family{%
1679
\global\let\MT@familyalias\@tempb
1682
\def\LoadMicrotypeFile#1{%
1683
\KV@@sp@def\@tempa{#1}%
1684
\MT@make@string\@tempa
1685
\MT@exp@one@n\MT@in@clist\@tempa\MT@file@list
1687
\MT@vinfo{... Configuration file mt-\@tempa.cfg already loaded}%
1689
\MT@xadd\MT@file@list{\@tempa,}%
1691
\InputIfFileExists{mt-\@tempa.cfg}{%
1692
\MT@vinfo{... Loading configuration file mt-\@tempa.cfg}%
1694
\MT@warning{... Configuration file mt-\@tempa.cfg\MessageBreak
1700
\ifnum\MT@pdftex@no > 4
1701
\renewcommand*\DisableLigatures[1]{%
1703
\MT@declare@sets{nl}{no ligatures}{#1}%
1704
\gdef\MT@nl@setname{no ligatures}%
1707
\renewcommand*\DisableLigatures[1]{%
1708
\MT@warning{Disabling ligatures of a font is only possible\MessageBreak
1709
with pdftex version 1.30 or later.\MessageBreak
1710
Ignoring \string\DisableLigatures}%
1711
\let\DisableLigatures\@gobble
1714
\renewcommand*\SetProtrusion[2][]{%
1715
\let\MT@pr@c@name\@undefined
1716
\let\MT@load\@undefined
1717
\let\MT@extra@factor\@undefined
1718
\let\MT@extra@unit\@undefined
1719
\let\MT@extra@preset\@undefined
1720
\let\MT@extra@context\@empty
1721
\setkeys{MT@pr@c}{#1}%
1722
\MT@get@codes@name{pr}%
1724
\def\MT@permutelist{pr@c}%
1725
\setkeys{MT@pr@c}{#2}%
1730
\def\MT@set@pr@list#1{%
1731
\global\MT@def@n{MT@pr@c@\MT@pr@c@name}{#1}%
1734
\renewcommand*\SetExpansion[2][]{%
1735
\let\MT@ex@c@name\@undefined
1736
\let\MT@load\@undefined
1737
\let\MT@extra@factor\@undefined
1738
\let\MT@extra@stretch\@undefined
1739
\let\MT@extra@shrink\@undefined
1740
\let\MT@extra@step\@undefined
1741
\let\MT@extra@auto\@undefined
1742
\let\MT@extra@preset\@undefined
1743
\let\MT@extra@context\@empty
1744
\setkeys{MT@ex@c}{#1}%
1745
\MT@get@codes@name{ex}%
1747
\def\MT@permutelist{ex@c}%
1748
\setkeys{MT@ex@c}{#2}%
1753
\def\MT@set@ex@list#1{%
1754
\global\MT@def@n{MT@ex@c@\MT@ex@c@name}{#1}%
1757
\def\MT@get@codes@name#1{%
1758
\MT@ifdefined@n{MT@#1@c@name}{%
1759
\MT@ifdefined@n{MT@#1@c@\csname MT@#1@c@name\endcsname}{%
1760
\MT@warning{Redefining list `\@nameuse{MT@#1@c@name}'}%
1764
\MT@while@num{\@tempcnta > \z@}{%
1765
\MT@ifdefined@n{MT@#1@c@#1-\romannumeral\@tempcnta}{%
1766
\advance \@tempcnta \@ne
1768
\MT@edef@n{MT@#1@c@name}{#1-\romannumeral\@tempcnta}%
1773
\MT@let@cn\MT@curr@set@name{MT@#1@c@name}%
1774
\MT@ifdefined@c\MT@load{%
1775
\global\MT@let@nc{MT@#1@c@\MT@curr@set@name load}\MT@load
1778
\def\MT@set@pr@opt{%
1779
\MT@set@opt@{pr}{factor}%
1780
\MT@set@opt@{pr}{unit}%
1781
\MT@set@opt@{pr}{preset}%
1783
\def\MT@set@ex@opt{%
1784
\MT@ifdefined@c\MT@extra@factor{%
1785
\ifnum\MT@extra@factor>\@m
1786
\MT@warning@nl{Expansion factor \number\MT@extra@factor\space too
1787
large in list\MessageBreak `\MT@ex@c@name'. Setting it to the
1789
\let\MT@extra@factor\@m
1791
\global\MT@let@nc{MT@ex@c@\MT@ex@c@name @factor}\MT@extra@factor
1793
\MT@set@opt@{ex}{stretch}%
1794
\MT@set@opt@{ex}{shrink}%
1795
\MT@set@opt@{ex}{step}%
1796
\MT@set@opt@{ex}{auto}%
1797
\MT@set@opt@{ex}{preset}%
1799
\def\MT@set@opt@#1#2{%
1800
\MT@ifdefined@n{MT@extra@#2}{%
1801
\global\MT@let@nn{MT@#1@c@\csname MT@#1@c@name\endcsname @#2}{MT@extra@#2}%
1804
\def\MT@define@code@key#1#2{%
1805
\define@key{MT@#2}{#1}[]{%
1807
\MT@map@clist@n{##1}{%
1808
\KV@@sp@def\MT@val{####1}%
1809
\MT@get@highlevel{#1}%
1810
\MT@edef@n{MT@temp#1\romannumeral\@tempcnta}{\MT@val}%
1811
\advance\@tempcnta \@ne
1815
\def\MT@define@code@key@size#1{%
1816
\define@key{MT@#1}{size}[]{%
1817
\MT@map@clist@n{##1}{%
1818
\KV@@sp@def\MT@val{####1}%
1819
\expandafter\MT@get@range\MT@val--\@nil
1820
\ifx\MT@val\relax \else
1821
\expandafter\MT@xadd
1822
\csname MT@tempsize\endcsname
1823
{{{\MT@lower}{\MT@upper}{\csname MT@#1@name\endcsname}}}%
1828
\def\MT@define@code@key@font#1{%
1829
\define@key{MT@#1}{font}[]{%
1830
\MT@map@clist@n{##1}{%
1831
\KV@@sp@def\MT@val{####1}%
1832
\expandafter\MT@get@font@and@size\MT@val/////\@nil
1833
\global\MT@edef@n{MT@\MT@permutelist @\@tempb}%
1834
{\csname MT@\MT@permutelist @name\endcsname}%
1835
\expandafter\MT@xaddb
1836
\csname MT@\MT@permutelist @\@tempb @sizes\endcsname
1837
{{{\MT@val}{\m@ne}{\csname MT@#1@name\endcsname}}}%
1841
\def\MT@get@font@and@size#1/#2/#3/#4/#5/#6\@nil{%
1842
\MT@ifempty{#1#2#3#4#5}\relax{%
1844
\def\MT@temp{#1/#2/#3/#4/#5}%
1845
\MT@get@axis{encoding}{#1}%
1846
\MT@get@axis{family}{#2}%
1847
\MT@get@axis{series}{#3}%
1848
\MT@get@axis{shape}{#4}%
1849
\edef\@tempb{\expandafter\@gobble\@tempb/*}%
1851
\MT@warning{size axis is empty in font specification\MessageBreak
1852
`\MT@temp'. Using \string\normalsize\space instead}%
1860
\def\MT@declare@codes#1{%
1861
\define@key{MT@#1@c}{name}[]{%
1862
\MT@ifempty{##1}\relax{%
1863
\MT@def@n{MT@#1@c@name}{##1}%
1866
\define@key{MT@#1@c}{load}[]{%
1867
\MT@ifempty{##1}\relax{%
1871
\define@key{MT@#1@c}{factor}[]{%
1872
\MT@ifempty{##1}\relax{%
1873
\def\MT@extra@factor{##1 }%
1876
\MT@define@code@key{encoding}{#1@c}%
1877
\MT@define@code@key{family}{#1@c}%
1878
\MT@define@code@key{series}{#1@c}%
1879
\MT@define@code@key{shape}{#1@c}%
1880
\MT@define@code@key@size{#1@c}%
1881
\MT@define@code@key@font{#1@c}%
1882
\define@key{MT@#1@c}{preset}[]{%
1883
\MT@ifempty{##1}\relax{%
1884
\def\MT@extra@preset{##1}%
1887
\define@key{MT@#1@c}{context}[]{%
1888
\MT@ifempty{##1}\relax{%
1889
\def\MT@extra@context{##1}%
1893
\MT@declare@codes{pr}
1894
\MT@declare@codes{ex}
1895
\define@key{MT@pr@c}{unit}[character]{%
1896
\let\MT@extra@unit\@empty
1897
\KV@@sp@def\@tempa{#1}%
1898
\MT@ifstreq\@tempa{relative}{%
1899
\MT@warning{Value `relative' for key `unit' is deprecated.\MessageBreak
1900
Use `unit=character' instead. For now, I'll do it\MessageBreak
1902
\def\@tempa{character}%
1904
\MT@ifstreq\@tempa{character}\relax{%
1905
\MT@ifdimen\@tempa{%
1906
\let\MT@extra@unit\@tempa
1908
\MT@warning{`\@tempa' is not a dimension.\MessageBreak
1909
Ignoring it and setting values relative to\MessageBreak
1914
\def\MT@define@ex@c@key#1{%
1915
\define@key{MT@ex@c}{#1}[]{%
1916
\MT@ifempty{##1}\relax{%
1918
\MT@def@n{MT@extra@#1}{##1 }%
1921
Value `##1' for option `#1' is not a number.\MessageBreak
1927
\MT@define@ex@c@key{stretch}
1928
\MT@define@ex@c@key{shrink}
1929
\MT@define@ex@c@key{step}
1930
\define@key{MT@ex@c}{auto}[true]{%
1931
\KV@@sp@def\@tempa{#1}%
1932
\csname if\@tempa\endcsname
1933
\ifnum\MT@pdftex@no > \thr@@
1934
\def\MT@extra@auto{autoexpand}%
1936
\MT@warning{pdfTeX too old for automatic font expansion}%
1939
\ifnum\MT@pdftex@no > \thr@@
1940
\let\MT@extra@auto\@empty
1944
\renewcommand*\DeclareCharacterInheritance[1][]{%
1945
\KV@@sp@def\@tempa{#1}%
1949
\def\MT@set@inh@list#1#2{%
1950
\MT@ifempty\@tempa{%
1951
\MT@declare@char@inh{pr}{#1}{#2}%
1952
\MT@declare@char@inh{ex}{#1}{#2}%
1954
\MT@map@clist@c\@tempa{%
1955
{\KV@@sp@def\@tempa{##1}%
1956
\MT@ifempty\@tempa\relax{%
1957
\MT@exp@one@n\MT@declare@char@inh
1958
{\csname MT@rbba@\@tempa\endcsname}{#1}{#2}}}%
1963
\def\MT@declare@char@inh#1#2#3{%
1964
\MT@let@nc{MT@#1@inh@name}\@undefined
1965
\MT@get@inh@name{#1}%
1966
\global\MT@def@n{MT@#1@inh@\csname MT@#1@inh@name\endcsname}{#3}%
1967
\def\MT@permutelist{#1@inh}%
1968
\setkeys{MT@#1@inh}{#2}%
1971
\def\MT@get@inh@name#1{%
1973
\MT@while@num{\@tempcnta > \z@}{%
1974
\MT@ifdefined@n{MT@#1@inh@#1-inh-\romannumeral\@tempcnta}{%
1975
\advance \@tempcnta \@ne
1977
\MT@edef@n{MT@#1@inh@name}{#1-inh-\romannumeral\@tempcnta}%
1982
\def\MT@define@inh@key@encoding#1{%
1983
\define@key{MT@#1}{encoding}[]{%
1985
\expandafter\MT@encoding@check\MT@val,\@nil
1986
\MT@get@highlevel{encoding}%
1987
\MT@edef@n{MT@tempencoding\romannumeral1}{\MT@val}%
1990
\def\MT@encoding@check#1,#2\@nil{%
1991
\MT@ifempty{#2}\relax{%
1993
\MT@warning{You may only specify one encoding for character\MessageBreak
1994
inheritance lists. Ignoring encoding(s) #2}%
1997
\def\MT@define@inh@keys#1{%
1998
\MT@define@inh@key@encoding{#1@inh}%
1999
\MT@define@code@key{family}{#1@inh}%
2000
\MT@define@code@key{series}{#1@inh}%
2001
\MT@define@code@key{shape}{#1@inh}%
2002
\MT@define@code@key@size{#1@inh}%
2003
\MT@define@code@key@font{#1@inh}%
2005
\MT@define@inh@keys{pr}
2006
\MT@define@inh@keys{ex}
2008
\ifx\relax#1\@empty \else
2009
\MT@inh@split #1==\relax
2010
\expandafter\MT@inh@do
2013
\def\MT@inh@split#1=#2=#3\relax{%
2015
\ifx\@tempa\@empty \else
2017
\ifnum\MT@char > \m@ne
2019
\MT@map@clist@n{#2}{%
2021
\ifx\@tempa\@empty \else
2023
\ifnum\MT@char > \m@ne
2024
\expandafter\MT@xadd
2025
\csname MT@inh@\MT@inh@name @\MT@val @\endcsname
2034
\let\MT@cnt@encoding\@ne
2039
\let\MT@cnt@family\@ne
2041
\MT@increment\MT@cnt@encoding
2042
\MT@ifdefined@n{MT@tempencoding\romannumeral\MT@cnt@encoding}%
2047
\let\MT@cnt@series\@ne
2049
\MT@increment\MT@cnt@family
2050
\MT@ifdefined@n{MT@tempfamily\romannumeral\MT@cnt@family}%
2054
\def\MT@permute@@@{%
2055
\let\MT@cnt@shape\@ne
2057
\MT@increment\MT@cnt@series
2058
\MT@ifdefined@n{MT@tempseries\romannumeral\MT@cnt@series}%
2062
\def\MT@permute@@@@{%
2064
\MT@increment\MT@cnt@shape
2065
\MT@ifdefined@n{MT@tempshape\romannumeral\MT@cnt@shape}%
2069
\def\MT@permute@@@@@{%
2070
\MT@permute@define{encoding}%
2071
\MT@permute@define{family}%
2072
\MT@permute@define{series}%
2073
\MT@permute@define{shape}%
2074
\edef\@tempa{\MT@tempencoding
2078
/\MT@ifdefined@c\MT@tempsize *\@empty}%
2080
\ifx\@tempa\@tempb \else
2081
\ifx\MT@tempencoding\@empty
2083
You have to specify an encoding for\MessageBreak
2084
\@nameuse{MT@abbr@\MT@permutelist} list
2085
`\@nameuse{MT@\MT@permutelist @name}'.\MessageBreak
2088
\MT@ifdefined@c\MT@tempsize{%
2089
\MT@ifdefined@n{MT@\MT@permutelist @\@tempa\MT@extra@context @sizes}{%
2094
\expandafter\MT@xaddb
2095
\csname MT@\MT@permutelist @\@tempa\MT@extra@context @sizes\endcsname
2098
\MT@ifdefined@n{MT@\MT@permutelist @\@tempa\MT@extra@context}{%
2099
\MT@warning{\@nameuse{MT@abbr@\MT@permutelist} list
2100
`\@nameuse{MT@\MT@permutelist @name}' will override list\MessageBreak
2101
`\@nameuse{MT@\MT@permutelist @\@tempa\MT@extra@context}' for font `\@tempa'}%
2104
\global\MT@edef@n{MT@\MT@permutelist @\@tempa\MT@extra@context}%
2105
{\csname MT@\MT@permutelist @name\endcsname}%
2109
\def\MT@permute@define#1{%
2110
\expandafter\@tempcnta=\csname MT@cnt@#1\endcsname\relax
2111
\MT@ifdefined@n{MT@temp#1\romannumeral\@tempcnta}%
2112
{\MT@edef@n{MT@temp#1}{\csname MT@temp#1\romannumeral\@tempcnta\endcsname}}%
2113
{\MT@let@nc{MT@temp#1}\@empty}%
2115
\def\MT@permute@reset{%
2116
\MT@permute@reset@{encoding}%
2117
\MT@permute@reset@{family}%
2118
\MT@permute@reset@{series}%
2119
\MT@permute@reset@{shape}%
2120
\let\MT@tempsize\@undefined
2122
\def\MT@permute@reset@#1{%
2125
\MT@let@nc{MT@temp#1\romannumeral\@tempcnta}\@undefined
2126
\advance\@tempcnta\@ne
2127
\MT@ifdefined@n{MT@temp#1\romannumeral\@tempcnta}%
2132
\def\MT@check@rlist#1{%
2133
\expandafter\MT@check@rlist@#1%
2135
\def\MT@check@rlist@#1#2#3{%
2139
\expandafter\MT@map@tlist@c
2140
\csname MT@\MT@permutelist @\@tempa\MT@extra@context @sizes\endcsname
2143
\def\MT@check@range#1{%
2144
\expandafter\MT@check@range@#1%
2146
\def\MT@check@range@#1#2#3{%
2148
\MT@ifeq\@tempc\m@ne{%
2149
\MT@ifeq\@tempb{#1}\@tempswatrue\relax
2151
\MT@ifgt\@tempb{#1}\relax{%
2152
\MT@ifgt\@tempc{#1}{%
2154
\edef\@tempb{#1 (with range: \@tempb\space to \@tempc)}%
2159
\MT@ifeq\@tempc\m@ne{%
2160
\MT@iflt\@tempb{#2}{%
2161
\MT@iflt\@tempb{#1}\relax\@tempswatrue
2164
\MT@iflt\@tempb{#2}{%
2165
\MT@ifgt\@tempc{#1}{%
2167
\edef\@tempb{#1 to #2 (with range: \@tempb\space to \@tempc)}%
2173
\MT@warning{\@nameuse{MT@abbr@\MT@permutelist} list
2174
`\@nameuse{MT@\MT@permutelist @name}' will override\MessageBreak
2175
list `#3' for font \@tempa,\MessageBreak size \@tempb}%
2176
\expandafter\MT@tlist@break
2179
\def\microtypesetup{\setkeys{MTX}}
2180
\def\MT@define@optionX#1#2{%
2181
\define@key{MTX}{#1}[true]{%
2182
\KV@@sp@def\@tempb{#1}%
2183
\MT@map@clist@n{##1}{%
2184
\KV@@sp@def\MT@val{####1}%
2185
\edef\@tempb{\csname MT@rbba@\@tempb\endcsname}%
2186
\MT@ifempty\MT@val\relax{%
2188
\MT@ifstreq\MT@val{true}{%
2189
\MT@checksetup\@tempb{%
2190
\expandafter\@tempcnta=\csname MT@\@tempb @level\endcsname
2191
\MT@info{Enabling #1
2192
(level \number\csname MT@\@tempb @level\endcsname)}%
2195
\MT@ifstreq\MT@val{false}{%
2197
\MT@info{Disabling #1}%
2199
\MT@ifstreq\MT@val{compatibility}{%
2200
\MT@checksetup\@tempb{%
2202
\MT@let@nc{MT@\@tempb @level}\@ne
2203
\MT@info{Setting #1 to level 1}%
2206
\MT@ifstreq\MT@val{nocompatibility}{%
2207
\MT@checksetup\@tempb{%
2209
\MT@let@nc{MT@\@tempb @level}\tw@
2210
\MT@info{Setting #1 to level 2}%
2214
Value `\MT@val' for key `#1' not recognized.\MessageBreak
2215
Use any of `true', `false', `compatibility' or\MessageBreak
2221
\ifnum\@tempcnta>\m@ne
2228
\def\MT@checksetup#1{%
2229
\expandafter\csname ifMT@\csname MT@abbr@#1\endcsname\endcsname
2230
\expandafter\@firstofone
2233
You cannot enable \@nameuse{MT@abbr@#1} if it was disabled\MessageBreak
2234
in the package options,}%
2235
\expandafter\@gobble
2238
\MT@define@optionX{protrusion}\pdfprotrudechars
2239
\MT@define@optionX{expansion}\pdfadjustspacing
2240
\define@key{MTX}{activate}[]{%
2241
\setkeys{MTX}{protrusion={#1}}%
2242
\setkeys{MTX}{expansion={#1}}%
2244
\def\microtypecontext#1{%
2246
\edef\MT@curr@contexts{\MT@pr@context|%
2250
\MT@exp@one@n\MT@in@tlist\MT@curr@contexts\MT@doc@contexts
2252
\MT@xadd\MT@doc@contexts{{\MT@curr@contexts}}%
2255
\aftergroup\MT@reset@context
2257
\def\MT@reset@context{%
2258
\MT@vinfo{Resetting contexts on line \the\inputlineno}%
2261
\def\MT@define@context#1{%
2262
\define@key{MTC}{#1}[]{%
2263
\KV@@sp@def\@tempb{#1}%
2264
\edef\@tempb{\@nameuse{MT@rbba@\@tempb}}%
2265
\KV@@sp@def\MT@val{##1}%
2266
\MT@vinfo{--- Changing #1 context to `\MT@val'}%
2267
\MT@edef@n{MT@\@tempb @context}{\MT@val}%
2268
\MT@ifempty\MT@val\relax{%
2269
\global\MT@let@nn{MT@reset@\@tempb @codes}{MT@reset@\@tempb @codes@}%
2273
\MT@define@context{protrusion}
2274
\MT@define@context{expansion}
2275
\let\MT@pr@context\@empty
2276
\let\MT@ex@context\@empty
2277
\def\MT@curr@contexts{|||}
2278
\def\MT@doc@contexts{{|||}}
2279
\let\MT@extra@context\@empty
2280
\def\MT@gobblethree#1#2#3{}
2281
\let\MT@saved@setupfont\MT@setupfont
2282
\define@key{MTX}{disable}[]{%
2283
\MT@info{Inactivate microtype package}%
2284
\let\MT@setupfont\MT@gobblethree
2286
\define@key{MTX}{enable}[]{%
2287
\MT@info{Reactivate microtype package}%
2288
\let\MT@setupfont\MT@saved@setupfont
2290
\newif\ifMT@opt@expansion
2291
\newif\ifMT@opt@auto
2292
\def\MT@define@option#1{%
2293
\define@key{MT}{#1}[true]{%
2294
\csname MT@opt@#1true\endcsname
2295
\MT@map@clist@n{##1}{%
2296
\KV@@sp@def\MT@val{####1}%
2297
\MT@ifempty\MT@val\relax{%
2298
\csname MT@#1true\endcsname
2299
\edef\@tempb{\csname MT@rbba@#1\endcsname}%
2300
\MT@ifstreq\MT@val{true}\relax
2302
\MT@ifstreq\MT@val{false}{%
2303
\csname MT@#1false\endcsname
2305
\MT@ifstreq\MT@val{compatibility}{%
2306
\MT@let@nc{MT@\@tempb @level}\@ne
2308
\MT@ifstreq\MT@val{nocompatibility}{%
2309
\MT@let@nc{MT@\@tempb @level}\tw@
2311
\MT@ifdefined@n{MT@\@tempb @set@@\MT@val}{%
2312
\global\MT@edef@n{MT@\@tempb @setname}{\MT@val}%
2314
\global\MT@edef@n{MT@\@tempb @setname}%
2315
{\@nameuse{MT@default@\@tempb @set}}%
2317
The #1 set `\MT@val' is undeclared.\MessageBreak
2318
Using set `\@nameuse{MT@\@tempb @setname}' instead}%
2328
\MT@define@option{protrusion}
2329
\MT@define@option{expansion}
2330
\define@key{MT}{activate}[]{%
2331
\setkeys{MT}{protrusion={#1}}%
2332
\setkeys{MT}{expansion={#1}}%
2334
\def\MT@def@bool@opt#1{%
2335
\define@key{MT}{#1}[]{%
2337
{\def\@tempa{true}}%
2339
\MT@ifstreq\@tempa{true}\relax{%
2340
\MT@ifstreq\@tempa{false}\relax{%
2342
`##1' is not an admissible value for option\MessageBreak
2343
`#1'. Assuming `false'}%
2347
\csname MT@#1\@tempa\endcsname
2350
\MT@map@tlist@n{{draft}{DVIoutput}{auto}{selected}%
2352
\define@key{MT}{final}[]{%
2355
{\def\@tempa{true}}%
2357
\MT@ifstreq\@tempa{true}\relax{%
2358
\MT@ifstreq\@tempa{false}%
2362
`#1' is not an admissible value for option\MessageBreak
2363
`final'. Assuming `true'}%
2368
\define@key{MT}{verbose}[]{%
2369
\let\MT@vinfo\MT@info@nl
2371
{\def\@tempa{true}}%
2373
\MT@ifstreq\@tempa{true}\relax{%
2374
\MT@ifstreq\@tempa{errors}{%
2375
\let\MT@warning\MT@warn@err
2376
\let\MT@warning@nl\MT@warn@err
2378
\let\MT@vinfo\@gobble
2379
\MT@ifstreq\@tempa{false}\relax{%
2381
`#1' is not an admissible value for option\MessageBreak
2382
`verbose'. Assuming `false'}%
2387
\def\MT@def@num@opt#1{%
2388
\define@key{MT}{#1}[]{%
2390
{\MT@let@cn\@tempa{MT@#1@default}}%
2391
{\def\@tempa{##1 }}%
2392
\MT@ifnumber\@tempa{%
2393
\MT@edef@n{MT@#1}{\@tempa}%
2395
Value `##1' for option `#1' is not a number.\MessageBreak
2396
Using default value of \number\@nameuse{MT@#1@default}}%
2400
\MT@map@tlist@n{{stretch}{shrink}{step}%
2402
\define@key{MT}{factor}[]{%
2404
{\let\@tempa\MT@factor@default}%
2406
\MT@ifnumber\@tempa{%
2407
\MT@edef@n{MT@pr@factor}{\@tempa}%
2409
Value `#1' for option `factor' is not a number.\MessageBreak
2410
Using default value of \number\MT@factor@default}%
2413
\define@key{MT}{unit}[]{%
2415
{\def\@tempa{character}}%
2416
{\KV@@sp@def\@tempa{#1}}%
2417
\MT@ifstreq\@tempa{relative}{%
2418
\MT@warning{Value `relative' for option `unit' is deprecated.\MessageBreak
2419
Use `unit=character' instead. For now, I'll do it\MessageBreak
2421
\def\@tempa{character}%
2423
\MT@ifstreq\@tempa{character}\relax{%
2424
\MT@ifdimen\@tempa{%
2425
\let\MT@pr@unit\@tempa
2427
\MT@warning@nl{`\@tempa' is not a dimension. Ignoring it and\MessageBreak
2428
setting values relative to character widths}%
2433
\ifnum\pdfoutput=\z@ \else
2434
\ifnum\MT@pdftex@no > \thr@@
2439
\define@key{MT}{config}[]{\relax}
2440
\def\MT@get@config#1config=#2,#3\@nil{%
2442
{\def\MT@config@file{microtype.cfg}}%
2443
{\KV@@sp@def\MT@config@file{#2.cfg}}%
2445
\expandafter\expandafter\expandafter\MT@get@config
2446
\csname opt@\@currname.\@currext\endcsname,config=,\@nil
2447
\IfFileExists{\MT@config@file}{%
2448
\MT@info@nl{Loading configuration file \MT@config@file}%
2450
\let\MT@begin@catcodes\relax
2451
\let\MT@end@catcodes\relax
2452
\input{\MT@config@file}%
2456
Could not find configuration file `\MT@config@file'!\MessageBreak
2457
This will almost certainly cause undesired results.\MessageBreak
2458
Please fix your installation}%
2460
\MT@ifdefined@c\MT@default@pr@set\relax{\gdef\MT@default@pr@set{all}}
2461
\MT@ifdefined@c\MT@default@ex@set\relax{\gdef\MT@default@ex@set{all}}
2462
\renewcommand*\DeclareMicrotypeSetDefault[2][]{%
2464
The command \string\DeclareMicrotypeSetDefault\space may only\MessageBreak
2465
be used inside the main configuration file.\MessageBreak
2468
\MT@ifdefined@c\MicroType@Hook{%
2470
Command \string\MicroType@Hook\space is deprecated.\MessageBreak
2471
Use \string\Microtype@Hook\space instead}\MicroType@Hook}\relax
2472
\MT@ifdefined@c\Microtype@Hook\Microtype@Hook\relax
2473
\def\MT@ProcessOptionsWithKV#1{%
2475
\let\KVo@tempa\@empty
2476
\MT@map@clist@c\@classoptionslist{%
2477
\def\CurrentOption{##1}%
2478
\MT@ifdefined@n{KV@#1@\CurrentOption}{%
2479
\edef\KVo@tempa{\KVo@tempa,\CurrentOption,}%
2480
\@expandtwoargs\@removeelement\CurrentOption
2481
\@unusedoptionlist\@unusedoptionlist
2485
\noexpand\setkeys{#1}{%
2486
\KVo@tempa\@ptionlist{\@currname.\@currext}%
2490
\AtEndOfPackage{\let\@unprocessedoptions\relax}%
2491
\let\CurrentOption\@empty
2493
\MT@ProcessOptionsWithKV{MT}
2495
\ifnum\pdfoutput=\z@
2496
\MT@info@nl{Generating DVI output}
2499
\MT@info@nl{Changing output mode to DVI}
2500
\ifMT@opt@expansion \else
2505
\MT@info@nl{Generating \ifnum\pdfoutput=\z@ DVI \else PDF \fi output}
2508
\MT@warning@nl{`draft' option active.\MessageBreak
2509
Disabling all micro-typographic extensions.\MessageBreak
2510
This might lead to different line and page breaks}
2513
\let\MT@setupfont\relax
2514
\def\DeclareMicrotypeSet{%
2516
{\@ifnextchar[\MT@DeclareSet{\MT@DeclareSet[]}}%
2517
{\@ifnextchar[\MT@DeclareSet{\MT@DeclareSet[]}}%
2519
\def\MT@DeclareSet[#1]#2#3{}
2520
\renewcommand*\UseMicrotypeSet[2][]{}
2521
\renewcommand*\SetProtrusion[3][]{}
2522
\renewcommand*\SetExpansion[3][]{}
2523
\renewcommand*\DeclareCharacterInheritance[3][]{}
2524
\renewcommand*\DeclareMicrotypeAlias[2]{}
2525
\renewcommand*\LoadMicrotypeFile[1]{}
2526
\renewcommand*\microtypesetup[1]{}
2527
\renewcommand*\microtypecontext[1]{}
2532
\pdfprotrudechars\MT@pr@level
2533
\MT@info@nl{Character protrusion enabled (level \number\MT@pr@level)%
2534
\ifnum\MT@pr@factor=\MT@factor@default \else,\MessageBreak
2535
factor: \number\MT@pr@factor\fi
2536
\ifx\MT@pr@unit\@empty \else,\MessageBreak unit: \MT@pr@unit\fi}
2537
\MT@ifdefined@c\MT@pr@setname{%
2538
\MT@info@nl{Using protrusion set `\MT@pr@setname'}%
2540
\global\let\MT@pr@setname\MT@default@pr@set
2541
\MT@info@nl{Using default protrusion set `\MT@pr@setname'}%
2544
\let\MT@protrusion\relax
2545
\MT@info@nl{No character protrusion}
2548
\ifnum\MT@stretch=\m@ne
2549
\let\MT@stretch\MT@stretch@default
2551
\ifnum\MT@shrink=\m@ne
2552
\ifnum\MT@stretch>\z@
2553
\let\MT@shrink\MT@stretch
2555
\let\MT@shrink\MT@shrink@default
2558
\ifnum\MT@step=\m@ne
2559
\ifnum\MT@stretch>\MT@shrink
2560
\ifnum\MT@shrink=\z@
2561
\@tempcnta=\MT@stretch
2563
\@tempcnta=\MT@shrink
2566
\ifnum\MT@stretch=\z@
2567
\@tempcnta=\MT@shrink
2569
\@tempcnta=\MT@stretch
2572
\divide\@tempcnta 5\relax
2575
\ifnum\@tempcnta=\z@
2576
\MT@warning@nl{The expansion step cannot be set to zero.\MessageBreak
2580
\ifnum\@tempcnta=\z@ \@tempcnta=\@ne \fi
2581
\edef\MT@step{\number\@tempcnta\space}
2584
\ifnum\MT@pdftex@no > \thr@@
2585
\ifnum\pdfoutput=\z@
2588
Automatic font expansion only works for PDF output.\MessageBreak
2589
However, you are creating a DVI file. I will switch\MessageBreak
2590
automatic font expansion off and hope that expanded\MessageBreak
2591
fonts are available}
2595
\def\MT@auto{autoexpand}
2600
The pdftex you are using is too old for automatic\MessageBreak
2601
font expansion. I will switch it off and hope that\MessageBreak
2602
expanded fonts are available on your system.\MessageBreak
2603
Install pdftex version 1.20 or newer}
2609
\ifnum\MT@pdftex@no < 4
2614
\let\MT@set@ex@codes\MT@set@ex@codes@s
2616
\let\MT@set@ex@codes\MT@set@ex@codes@n
2618
\ifnum\MT@stretch=\z@
2619
\ifnum\MT@shrink=\z@
2621
Both the stretch and shrink limit are set to zero.\MessageBreak
2622
Disabling font expansion}
2628
\pdfadjustspacing\MT@ex@level
2629
\MT@info@nl{\ifMT@auto Automatic f\else F\fi ont expansion enabled
2630
(level \number\MT@ex@level),\MessageBreak
2631
stretch: \number\MT@stretch, shrink: \number\MT@shrink,
2632
step: \number\MT@step, \ifMT@selected\else non-\fi selected}
2633
\MT@ifdefined@c\MT@ex@setname{%
2634
\MT@info@nl{Using expansion set `\MT@ex@setname'}%
2636
\global\let\MT@ex@setname\MT@default@ex@set
2637
\MT@info@nl{Using default expansion set `\MT@ex@setname'}%
2639
\CheckCommand*{\showhyphens}[1]{%
2640
\setbox0\vbox{\color@begingroup\everypar{}\parfillskip\z@skip
2641
\hsize\maxdimen\normalfont\pretolerance\m@ne\tolerance\m@ne
2642
\hbadness\z@\showboxdepth\z@\ #1\color@endgroup}}
2643
\gdef\showhyphens#1{%
2646
\pdfadjustspacing\z@
2648
\parfillskip\z@skip\hsize\maxdimen
2650
\pretolerance\m@ne\tolerance\m@ne\hbadness\z@\showboxdepth\z@\ #1%
2653
\let\MT@expansion\relax
2654
\MT@info@nl{No font expansion}
2658
%% End of file `microtype.sty'.