~ubuntu-branches/ubuntu/natty/texlive-extra/natty

« back to all changes in this revision

Viewing changes to texmf-dist/tex/latex/microtype/microtype.sty

  • Committer: Bazaar Package Importer
  • Author(s): Norbert Preining
  • Date: 2006-08-04 11:25:31 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20060804112531-vwsxvkvcyjkhf37z
Tags: 2005.dfsg.1-1
* texlive-extra-utils recommends perl-tk for texdoctk (Closes: #368659)
* move fpl and mathpazu to texlive-fonts-recommended (see texlive-base)
* include eulervm 4.0 instead of 3.0a, this version contains a manifest
  file and fixes some bugs (Closes: #361941)
* add lintian override for wrong-name-for-upstream-changelog triggered
  by CHANGES.packaging
* change maintainer to debian-tex-maint@l.d.o

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
%%
2
 
%% This is file `microtype.sty',
3
 
%% generated with the docstrip utility.
4
 
%%
5
 
%% The original source files were:
6
 
%%
7
 
%% microtype.dtx  (with options: `package')
8
 
%% 
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>
13
 
%% 
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.
19
 
%% 
20
 
%% This work has the LPPL maintenance status `author-maintained'.
21
 
%% 
22
 
%% This work consists of the files microtype.dtx and microtype.ins and the
23
 
%% derived file microtype.sty.
24
 
%% 
25
 
%% -----------------------------------------------------------------------
26
 
%% 
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{%
42
 
  \@ifstar
43
 
    {\@ifnextchar[\MT@DeclareSet{\MT@DeclareSet[]}}%
44
 
    {\@ifnextchar[\MT@DeclareSet{\MT@DeclareSet[]}}%
45
 
}
46
 
\def\MT@DeclareSet[#1]#2#3{}
47
 
\@onlypreamble{\DeclareMicrotypeSet}
48
 
\@onlypreamble{\UseMicrotypeSet}
49
 
\@onlypreamble{\DisableLigatures}
50
 
\def\MT@old@cmd#1#2{%
51
 
  \MT@warning{\string#1 is deprecated. Please use\MessageBreak
52
 
              \string#2 instead}%
53
 
  \let#1#2#2}
54
 
\newcommand*\DeclareMicroTypeSet{%
55
 
 \MT@old@cmd\DeclareMicroTypeSet
56
 
            \DeclareMicrotypeSet}
57
 
\newcommand*\UseMicroTypeSet{%
58
 
 \MT@old@cmd\UseMicroTypeSet
59
 
            \UseMicrotypeSet}
60
 
\newcommand*\DeclareMicroTypeAlias{%
61
 
 \MT@old@cmd\DeclareMicroTypeAlias
62
 
            \DeclareMicrotypeAlias}
63
 
\newcommand*\LoadMicroTypeFile{%
64
 
 \MT@old@cmd\LoadMicroTypeFile
65
 
            \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}}
75
 
\let\MT@vinfo\@gobble
76
 
\let\MT@pdftex@no\z@
77
 
\ifx\normalpdftexversion\@undefined \else
78
 
  \let\pdftexversion \normalpdftexversion
79
 
  \let\pdftexrevision\normalpdftexrevision
80
 
  \let\pdfoutput     \normalpdfoutput
81
 
\fi
82
 
\ifx\pdftexversion\@undefined \else
83
 
  \ifx\pdftexversion\relax \else
84
 
    \def\MT@pdftex@no{5}
85
 
    \ifnum\pdftexversion < 130
86
 
      \def\MT@pdftex@no{4}
87
 
      \ifnum\pdftexversion < 120
88
 
        \let\MT@pdftex@no\thr@@
89
 
        \ifnum\pdftexversion = 14
90
 
          \ifnum \expandafter`\pdftexrevision < `h
91
 
            \let\MT@pdftex@no\tw@
92
 
            \ifnum \expandafter`\pdftexrevision < `f
93
 
              \let\MT@pdftex@no\@ne
94
 
            \fi
95
 
          \fi
96
 
        \else
97
 
          \ifnum\pdftexversion < 14
98
 
            \let\MT@pdftex@no\@ne
99
 
          \fi
100
 
        \fi
101
 
      \fi
102
 
    \fi
103
 
  \fi
104
 
\fi
105
 
\ifnum\MT@pdftex@no<\tw@
106
 
  \AtEndOfPackage{\let\@unprocessedoptions\relax}%
107
 
  \let\CurrentOption\@empty
108
 
  \MT@warning@nl{%
109
 
    \ifcase\MT@pdftex@no
110
 
      You don't seem to be using pdftex.\MessageBreak
111
 
    \or
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
115
 
    \fi
116
 
    All micro-typographic features will be disabled}
117
 
  \expandafter
118
 
  \endinput
119
 
\fi
120
 
\def\MT@catcodes{%
121
 
  \catcode`\^7 %
122
 
  \@makeother\-%
123
 
  \@makeother\=%
124
 
  \@makeother\*%
125
 
  \@makeother\,%
126
 
  \@makeother\/%
127
 
  \@makeother\`%
128
 
  \@makeother\'%
129
 
  \@makeother\"%
130
 
  \@makeother\|%
131
 
}
132
 
\def\MT@restore@catcodes#1{%
133
 
  \ifx\relax#1\else
134
 
    \noexpand\catcode`\noexpand#1\the\catcode`#1\relax
135
 
    \expandafter\MT@restore@catcodes
136
 
  \fi
137
 
}
138
 
\edef\MT@restore@catcodes{%
139
 
  \MT@restore@catcodes\^\-\=\*\,\/\`\'\"\|\relax
140
 
}
141
 
\MT@catcodes
142
 
\AtEndOfPackage{\MT@restore@catcodes}
143
 
\RequirePackage{keyval}[1997/11/10]
144
 
\newtoks\mt@toks
145
 
\newif\ifMT@protrusion
146
 
\newif\ifMT@expansion
147
 
\newif\ifMT@auto
148
 
\newif\ifMT@selected
149
 
\newif\ifMT@noligatures
150
 
\newif\ifMT@DVIoutput
151
 
\newif\ifMT@draft
152
 
\let\MT@pr@level\tw@
153
 
\let\MT@pr@factor\@m
154
 
\let\MT@pr@unit\@empty
155
 
\let\MT@ex@level\tw@
156
 
\let\MT@ex@factor\@m
157
 
\let\MT@stretch\m@ne
158
 
\let\MT@shrink \m@ne
159
 
\let\MT@step   \m@ne
160
 
\def\MT@pr@min{-\@m}
161
 
\let\MT@pr@max\@m
162
 
\let\MT@ex@min\z@
163
 
\let\MT@ex@max\@m
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
175
 
}
176
 
\@ifpackageloaded{pdfcprot}\MT@pdfcprot@error\relax
177
 
\def\MT@ledmac@setup{%
178
 
  \ifMT@protrusion
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]{%
185
 
          \ifhbox##1%
186
 
            \MT@led@kern=\rightmarginkern##1%
187
 
            \kern\leftmarginkern##1%
188
 
            \MT@led@unhbox@line##1%
189
 
            \kern\MT@led@kern
190
 
          \fi
191
 
        }%
192
 
      }{%
193
 
        \MT@warning@nl{%
194
 
          Character protrusion in paragraphs with line\MessageBreak
195
 
          numbering will only work if you update ledmac}%
196
 
      }%
197
 
    \else
198
 
      \MT@warning@nl{%
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}%
203
 
    \fi
204
 
  \fi
205
 
}
206
 
\def\MT@setupfont@hook{%
207
 
  \@ifpackagewith{babel}{spanish}{%
208
 
    \MT@ifdefined@c\percentsign
209
 
      {\let\%\percentsign}\relax
210
 
  }\relax
211
 
  \@ifpackageloaded{csquotes}{%
212
 
    \@ifpackagelater{csquotes}{2005/05/11}\@disablequotes\relax
213
 
  }\relax
214
 
  \@ifpackageloaded{hyperref}{%
215
 
    \chardef\%`\%
216
 
    \chardef\#`\#
217
 
  }\relax
218
 
}
219
 
\AtBeginDocument{%
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}%
227
 
  }\relax
228
 
  \@ifpackageloaded{csquotes}{%
229
 
    \@ifpackagelater{csquotes}{2005/05/11}{%
230
 
      \g@addto@macro\MT@setupfont@hook\@disablequotes
231
 
    }{%
232
 
      \MT@warning@nl{%
233
 
        Should you receive warnings about unknown slot\MessageBreak
234
 
        numbers, try upgrading the `csquotes' package}%
235
 
    }%
236
 
  }\relax
237
 
  \@ifpackageloaded{hyperref}{%
238
 
    \g@addto@macro\MT@setupfont@hook{%
239
 
      \chardef\%`\%
240
 
      \chardef\#`\#
241
 
    }%
242
 
    \pdfstringdefDisableCommands{%
243
 
      \let\pickup@font\MT@orig@pickupfont
244
 
    }%
245
 
  }\relax
246
 
}
247
 
\expandafter\ifx\the\font\nullfont\normalfont\fi
248
 
\let\MT@etex@no\z@
249
 
\ifx\eTeXversion\@undefined \else
250
 
  \ifx\eTeXversion\relax \else
251
 
    \ifnum\eTeXversion>\z@
252
 
      \let\MT@etex@no\@ne
253
 
    \fi
254
 
  \fi
255
 
\fi
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{%
271
 
    \ifx#1\@undefined
272
 
      \expandafter\@secondoftwo
273
 
    \else
274
 
      \expandafter\@firstoftwo
275
 
    \fi
276
 
  }
277
 
  \def\MT@ifdefined@n#1{%
278
 
    \begingroup\MT@exp@two@c\endgroup
279
 
    \ifx\csname #1\endcsname\relax
280
 
      \expandafter\@secondoftwo
281
 
    \else
282
 
      \expandafter\@firstoftwo
283
 
    \fi
284
 
  }
285
 
}\else\MT@hop@fi{%
286
 
  \def\MT@ifdefined@c#1{%
287
 
    \ifdefined#1%
288
 
      \expandafter\@firstoftwo
289
 
    \else
290
 
      \expandafter\@secondoftwo
291
 
    \fi
292
 
  }
293
 
  \def\MT@ifdefined@n#1{%
294
 
    \ifcsname#1\endcsname
295
 
      \expandafter\@firstoftwo
296
 
    \else
297
 
      \expandafter\@secondoftwo
298
 
    \fi
299
 
  }
300
 
}\fi
301
 
\begingroup
302
 
\catcode`\%=12
303
 
\catcode`\&=14
304
 
\gdef\MT@ifempty#1{&
305
 
  \if %#1%&
306
 
    \expandafter\@firstoftwo
307
 
  \else
308
 
    \expandafter\@secondoftwo
309
 
  \fi
310
 
}
311
 
\endgroup
312
 
\def\MT@ifnumber#1{%
313
 
  \if!\ifnum9<1#1!\else?\fi
314
 
    \expandafter\@firstoftwo
315
 
  \else
316
 
    \expandafter\@secondoftwo
317
 
  \fi
318
 
}
319
 
\def\MT@ifdimen#1{%
320
 
  \setbox\z@=\hbox{%
321
 
    \MT@count=1#1\relax
322
 
    \ifnum\MT@count=\@ne
323
 
      \aftergroup\@secondoftwo
324
 
    \else
325
 
      \aftergroup\@firstoftwo
326
 
    \fi}%
327
 
}
328
 
\def\MT@ifgt#1#2{%
329
 
  \ifdim #1\p@ > #2\p@
330
 
    \expandafter\@firstoftwo
331
 
  \else
332
 
    \expandafter\@secondoftwo
333
 
  \fi
334
 
}
335
 
\def\MT@iflt#1#2{%
336
 
  \ifdim #1\p@ < #2\p@
337
 
    \expandafter\@firstoftwo
338
 
  \else
339
 
    \expandafter\@secondoftwo
340
 
  \fi
341
 
}
342
 
\def\MT@ifeq#1#2{%
343
 
  \ifdim #1\p@ = #2\p@
344
 
    \expandafter\@firstoftwo
345
 
  \else
346
 
    \expandafter\@secondoftwo
347
 
  \fi
348
 
}
349
 
\def\MT@ifstreq#1#2{%
350
 
  \edef\x{#1}%
351
 
  \edef\y{#2}%
352
 
  \ifx\x\y
353
 
    \expandafter\@firstoftwo
354
 
  \else
355
 
    \expandafter\@secondoftwo
356
 
  \fi
357
 
}
358
 
\def\MT@xadd#1#2{%
359
 
  \ifx#1\relax
360
 
    \xdef#1{#2}%
361
 
  \else
362
 
    \xdef#1{#1#2}%
363
 
  \fi
364
 
}
365
 
\def\MT@xaddb#1#2{%
366
 
  \ifx#1\relax
367
 
    \xdef#1{#2}%
368
 
  \else
369
 
    \xdef#1{#2#1}%
370
 
  \fi
371
 
}
372
 
\def\MT@map@clist@n#1#2{%
373
 
  \ifx\@empty#1\else
374
 
    \def\MT@clist@function##1{#2}%
375
 
    \expandafter\MT@map@clist@
376
 
    \expandafter#1,\@nil,\@nnil,%
377
 
  \fi
378
 
}
379
 
\def\MT@map@clist@c#1{\expandafter\MT@map@clist@n\expandafter{#1}}
380
 
\def\MT@map@clist@#1,{%
381
 
  \ifx\@nil#1%
382
 
    \MT@clist@break
383
 
  \else
384
 
    \MT@clist@function{#1}%
385
 
    \expandafter\MT@map@clist@
386
 
  \fi
387
 
}
388
 
\def\MT@clist@break#1\@nnil,{\fi}
389
 
\def\MT@map@tlist@n#1#2{%
390
 
  \MT@map@tlist@#2#1\@nnil
391
 
}
392
 
\def\MT@map@tlist@c#1#2{%
393
 
  \expandafter\MT@map@tlist@
394
 
  \expandafter#2#1\@nnil
395
 
}
396
 
\def\MT@map@tlist@#1#2{%
397
 
  \ifx\@nnil#2\else
398
 
    #1{#2}%
399
 
    \expandafter\MT@map@tlist@
400
 
    \expandafter#1%
401
 
  \fi
402
 
}
403
 
\def\MT@tlist@break#1\@nnil{\fi}
404
 
\newif\ifMT@inlist@
405
 
\def\MT@in@clist#1#2{%
406
 
  \MT@inlist@false
407
 
  \def\x##1#1,##2\@nnil{%
408
 
    \ifx\\##2\\\else
409
 
      \MT@inlist@true
410
 
    \fi
411
 
  }%
412
 
  \expandafter\x#2,#1,\@nnil
413
 
}
414
 
\def\MT@rem@from@list#1#2{%
415
 
  \def\x##1#1,##2\@nnil{%
416
 
    \ifx\\##2\\\else
417
 
      \def\x####1,#1,####2\@nnil{%
418
 
        \gdef#2{##1####1}%
419
 
      }%
420
 
      \x##2,#1,\@nnil
421
 
    \fi
422
 
  }%
423
 
  \expandafter\x#2,#1,\@nnil
424
 
}
425
 
\def\MT@in@tlist#1#2{%
426
 
  \MT@inlist@false
427
 
  \def\x{#1}%
428
 
  \MT@map@tlist@c#2\MT@in@tlist@
429
 
}
430
 
\def\MT@in@tlist@#1{%
431
 
  \edef\y{#1}%
432
 
  \ifx\x\y
433
 
    \MT@inlist@true
434
 
    \expandafter\MT@tlist@break
435
 
  \fi
436
 
}
437
 
\def\MT@in@rlist#1{%
438
 
  \MT@inlist@false
439
 
  \MT@map@tlist@c#1\MT@in@rlist@
440
 
}
441
 
\def\MT@in@rlist@#1{%
442
 
  \expandafter\MT@in@rlist@@#1%
443
 
}
444
 
\def\MT@in@rlist@@#1#2#3{%
445
 
  \MT@ifeq{#2}\m@ne{%
446
 
    \MT@ifeq{#1}\MT@size
447
 
      \MT@inlist@true
448
 
      \relax
449
 
    }{%
450
 
    \MT@iflt\MT@size{#1}\relax{%
451
 
      \MT@iflt\MT@size{#2}%
452
 
        \MT@inlist@true
453
 
        \relax
454
 
    }%
455
 
  }%
456
 
  \ifMT@inlist@
457
 
    \def\MT@size@name{#3}%
458
 
    \expandafter\MT@tlist@break
459
 
  \fi
460
 
}
461
 
\def\MT@loop#1\MT@repeat{%
462
 
  \def\MT@iterate{#1\relax\expandafter\MT@iterate\fi}%
463
 
  \MT@iterate
464
 
  \let\MT@iterate\relax
465
 
}
466
 
\let\MT@repeat\fi
467
 
\def\MT@while@num#1#2{\MT@loop #2\ifnum#1\MT@repeat}
468
 
\newcount\MT@count
469
 
\ifcase\MT@etex@no
470
 
  \def\MT@increment#1{%
471
 
    \MT@count=#1\relax
472
 
    \advance\MT@count \@ne
473
 
    \edef#1{\number\MT@count}%
474
 
  }
475
 
\else
476
 
  \def\MT@increment#1{%
477
 
    \edef#1{\number\numexpr #1 + 1\relax}%
478
 
  }
479
 
\fi
480
 
\ifcase\MT@etex@no
481
 
  \def\MT@scale#1#2#3{%
482
 
    \multiply #1 #2\relax
483
 
    \ifnum #3 = \z@ \else
484
 
      \divide #1 #3\relax
485
 
    \fi
486
 
  }
487
 
\else
488
 
  \def\MT@scale#1#2#3{%
489
 
    \ifnum #3 = \z@
490
 
      #1=\numexpr #1 * #2\relax
491
 
    \else
492
 
      #1=\numexpr #1 * #2 / #3\relax
493
 
    \fi
494
 
  }
495
 
\fi
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}
507
 
\def\MT@setupfont{%
508
 
  \ifx\MT@vinfo\MT@info@nl
509
 
    \MT@info{Setting up font `\MT@exp@string\MT@font'}\fi
510
 
  \MT@setupfont@hook
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
516
 
  \MT@protrusion
517
 
  \MT@expansion
518
 
  \MT@noligatures
519
 
}
520
 
\def\MT@split@name#1/#2/#3/#4/#5\@nil{%
521
 
  \def\MT@encoding{#1}%
522
 
  \def\MT@family{#2}%
523
 
  \def\MT@series{#3}%
524
 
  \def\MT@shape{#4}%
525
 
  \def\MT@size{#5}%
526
 
  \MT@ifdefined@n{MT@\MT@family @alias}%
527
 
    {\MT@let@cn\MT@familyalias{MT@\MT@family @alias}}%
528
 
    {\let\MT@familyalias\@empty}%
529
 
}
530
 
\newif\ifMT@do
531
 
\def\MT@maybe@do#1{%
532
 
  \expandafter\csname ifMT@\csname MT@abbr@#1\endcsname\endcsname
533
 
    \MT@dotrue
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}}%
538
 
      {#1}%
539
 
    }%
540
 
  \else
541
 
    \MT@dofalse
542
 
  \fi
543
 
  \ifMT@do
544
 
    \def\MT@feat{#1}%
545
 
    \csname MT@set@#1@codes\endcsname
546
 
  \else
547
 
    \MT@vinfo{... No \@nameuse{MT@abbr@#1}}%
548
 
  \fi
549
 
}
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
557
 
    \ifMT@inlist@
558
 
      \MT@dotrue
559
 
    \else
560
 
      \MT@dofalse
561
 
      \expandafter\MT@clist@break
562
 
    \fi
563
 
  }{%
564
 
  }%
565
 
}
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}%
571
 
    \ifMT@inlist@
572
 
      \expandafter\MT@clist@break
573
 
    \else
574
 
      \MT@dofalse
575
 
    \fi
576
 
  }{%
577
 
  }%
578
 
}
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}%
584
 
    \ifMT@inlist@
585
 
      \MT@dotrue
586
 
    \else
587
 
      \MT@dofalse
588
 
      \ifx\MT@familyalias\@empty \else
589
 
        \MT@exp@two@n\MT@in@clist
590
 
            \MT@familyalias{\csname MT@#1list@family@\@tempa\endcsname}%
591
 
        \ifMT@inlist@
592
 
          \MT@dotrue
593
 
        \fi
594
 
      \fi
595
 
    \fi
596
 
    \ifMT@do \else
597
 
      \expandafter\MT@clist@break
598
 
    \fi
599
 
  }{%
600
 
  }%
601
 
}
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
607
 
    \ifMT@inlist@
608
 
      \MT@dotrue
609
 
    \else
610
 
      \MT@dofalse
611
 
      \expandafter\MT@clist@break
612
 
    \fi
613
 
  }{%
614
 
  }%
615
 
}
616
 
\def\MT@protrusion{\MT@maybe@do{pr}}
617
 
\def\MT@set@pr@codes{%
618
 
  \MT@reset@pr@codes
619
 
  \MT@if@list@exists{%
620
 
    \MT@get@dimen@six
621
 
    \MT@get@opt
622
 
    \MT@get@inh@list
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,%
627
 
  }\relax
628
 
}
629
 
\def\MT@set@all@pr#1#2{%
630
 
  \@tempcnta=\z@
631
 
  \MT@while@num{\@tempcnta < \@cclvi}{%
632
 
    \lpcode\MT@font\@tempcnta=#1\relax
633
 
    \rpcode\MT@font\@tempcnta=#2\relax
634
 
    \advance\@tempcnta \@ne
635
 
  }%
636
 
}
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@
641
 
    \MT@warning@nl{%
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
646
 
  \else
647
 
    \edef\MT@dimen@six{\number\fontdimen6\MT@font}%
648
 
  \fi
649
 
}
650
 
\def\MT@gobble@settings#1\@tempc,\relax,{}
651
 
\def\MT@pr@do#1,{%
652
 
  \ifx\relax#1\@empty\else
653
 
    \MT@pr@split #1==\relax
654
 
    \expandafter\MT@pr@do
655
 
  \fi
656
 
}
657
 
\def\MT@pr@split#1=#2=#3\relax{%
658
 
  \def\@tempa{#1}%
659
 
  \ifx\@tempa\@empty \else
660
 
    \MT@get@slot
661
 
    \ifnum\MT@char > \m@ne
662
 
      \MT@get@char@unit
663
 
      \MT@pr@split@val#2\relax
664
 
    \fi
665
 
  \fi
666
 
}
667
 
\def\MT@pr@split@val#1,#2\relax{%
668
 
  \def\@tempb{#1}%
669
 
  \MT@ifempty\@tempb\relax{%
670
 
    \MT@scale@to@em
671
 
    \lpcode\MT@font\MT@char=\@tempcntb
672
 
  }%
673
 
  \def\@tempb{#2}%
674
 
  \MT@ifempty\@tempb\relax{%
675
 
    \MT@scale@to@em
676
 
    \rpcode\MT@font\MT@char=\@tempcntb
677
 
  }%
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
682
 
        \MT@set@pr@heirs
683
 
    }\relax
684
 
  }\relax
685
 
}
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
691
 
      \MT@scale@factor
692
 
    \fi
693
 
  }
694
 
  \ifcase\MT@etex@no
695
 
    \def\MT@get@charwd{%
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
699
 
    }
700
 
  \else
701
 
    \def\MT@get@charwd{%
702
 
      \MT@count=\number\fontcharwd\MT@font\MT@char\relax
703
 
      \ifnum\MT@count=\z@ \MT@warn@missing@char \fi
704
 
    }
705
 
  \fi
706
 
\else
707
 
  \def\MT@scale@to@em{%
708
 
    \MT@count=\@tempb\relax
709
 
    \ifnum\MT@count=\z@ \else
710
 
      \MT@scale@factor
711
 
    \fi
712
 
  }
713
 
  \def\MT@get@charwd{\MT@count=\MT@dimen@six}
714
 
\fi
715
 
\def\MT@get@font@dimen#1{%
716
 
  \MT@count=\number\fontdimen#1\MT@font
717
 
}
718
 
\ifcase\MT@etex@no \MT@hop@else@fi{%
719
 
  \def\MT@warn@missing@char{%
720
 
    \MT@warning@nl{%
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}%
724
 
  }
725
 
}\else\MT@hop@fi{%
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}%
730
 
  }
731
 
}\fi
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
736
 
  \fi
737
 
  \ifnum\@tempcntb > \csname MT@\MT@feat @max\endcsname\relax
738
 
    \@tempcnta=\csname MT@\MT@feat @max\endcsname
739
 
    \MT@warn@code@too@large
740
 
  \else
741
 
    \ifnum\@tempcntb<\csname MT@\MT@feat @min\endcsname\relax
742
 
      \@tempcnta=\csname MT@\MT@feat @min\endcsname
743
 
      \MT@warn@code@too@large
744
 
    \fi
745
 
  \fi
746
 
}
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
751
 
  \fi
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
758
 
}
759
 
\def\MT@get@opt{%
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}%
765
 
  }{%
766
 
    \MT@let@nn{MT@\MT@feat @factor@}{MT@\MT@feat @factor}%
767
 
  }%
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}%
774
 
    \else
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}%
778
 
      \fi
779
 
    \fi
780
 
  }{%
781
 
    \MT@let@nn{MT@\MT@feat @unit@}{MT@\MT@feat @unit}%
782
 
  }%
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
787
 
  \else
788
 
    \expandafter\ifx\csname MT@\MT@feat @unit@\endcsname\m@ne
789
 
      \let\MT@get@space@unit\MT@get@font@dimen
790
 
    \else
791
 
      \expandafter\MT@get@unit\csname MT@\MT@feat @unit@\endcsname
792
 
    \fi
793
 
  \fi
794
 
  \MT@ifdefined@n{MT@\MT@feat @c@\csname MT@\MT@feat @c@name\endcsname @preset}{%
795
 
    \csname MT@preset@\MT@feat\endcsname
796
 
  }\relax
797
 
}
798
 
\def\MT@get@unit#1{%
799
 
  \expandafter\MT@get@unit@#1 e!\@nil
800
 
  \ifx\x\@empty\else\let#1\x\fi
801
 
  \@defaultunits\@tempdima#1 pt\relax\@nnil
802
 
  \ifdim\@tempdima=\z@
803
 
    \MT@warning@nl{%
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}%
807
 
    \let#1\@empty
808
 
    \let\MT@get@char@unit\MT@get@charwd
809
 
  \else
810
 
    \MT@vinfo{... : Setting \@nameuse{MT@abbr@\MT@feat} factors relative
811
 
                    to \the\@tempdima}%
812
 
    \MT@count=\number\@tempdima\relax
813
 
  \fi
814
 
}
815
 
\def\MT@get@unit@#1e#2#3\@nil{%
816
 
  \ifx\\#3\\\let\x\@empty \else
817
 
    \if m#2%
818
 
      \edef\x{#1\fontdimen6\MT@font}%
819
 
    \else
820
 
      \if x#2%
821
 
        \edef\x{#1\fontdimen5\MT@font}%
822
 
      \fi
823
 
    \fi
824
 
  \fi
825
 
}
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
829
 
}
830
 
\def\MT@preset@pr{%
831
 
  \expandafter\expandafter\expandafter\MT@preset@pr@
832
 
    \csname MT@pr@c@\MT@pr@c@name @preset\endcsname\@nil
833
 
}
834
 
\def\MT@preset@pr@#1,#2\@nil{%
835
 
  \ifx\MT@pr@unit@\@empty
836
 
    \MT@warning@nl{%
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
841
 
  \else
842
 
    \let\MT@preset@aux\MT@preset@aux@space
843
 
  \fi
844
 
  \MT@preset@aux{#1}\@tempa
845
 
  \MT@preset@aux{#2}\@tempb
846
 
  \MT@set@all@pr\@tempa\@tempb
847
 
}
848
 
\def\MT@preset@aux@factor#1#2{%
849
 
  \@tempcntb=#1\relax
850
 
  \MT@scale@factor
851
 
  \edef#2{\number\@tempcntb}%
852
 
}
853
 
\def\MT@preset@aux@space#1#2{%
854
 
  \def\@tempb{#1}%
855
 
  \MT@get@space@unit\tw@
856
 
  \MT@scale@to@em
857
 
  \edef#2{\number\@tempcntb}%
858
 
}
859
 
\def\MT@expansion{\MT@maybe@do{ex}}
860
 
\def\MT@set@ex@codes@s{%
861
 
  \MT@if@list@exists{%
862
 
    \MT@get@ex@opt
863
 
    \MT@reset@ef@codes
864
 
    \MT@get@inh@list
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
870
 
  }\relax
871
 
}
872
 
\newif\ifMT@nonselected
873
 
\def\MT@set@ex@codes@n{%
874
 
  \MT@nonselectedtrue
875
 
  \MT@if@list@exists
876
 
    \MT@get@ex@opt
877
 
  {%
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
883
 
  }%
884
 
  \MT@reset@ef@codes
885
 
  \pdffontexpand\MT@font \MT@stretch@ \MT@shrink@ \MT@step@ \MT@auto@\relax
886
 
  \MT@nonselectedfalse
887
 
}
888
 
\let\MT@set@ex@codes\MT@set@ex@codes@n
889
 
\def\MT@set@all@ex#1{%
890
 
  \@tempcnta=\z@
891
 
  \MT@while@num{\@tempcnta < \@cclvi}{%
892
 
    \efcode\MT@font\@tempcnta=#1\relax
893
 
    \advance\@tempcnta \@ne
894
 
  }%
895
 
}
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@
899
 
\else
900
 
  \def\MT@reset@ef@codes{%
901
 
    \ifnum\MT@ex@factor@=\@m \else
902
 
      \MT@reset@ef@codes@
903
 
    \fi
904
 
  }
905
 
\fi
906
 
\def\MT@ex@do#1,{%
907
 
  \ifx\relax#1\@empty \else
908
 
    \MT@ex@split #1==\relax
909
 
    \expandafter\MT@ex@do
910
 
  \fi
911
 
}
912
 
\def\MT@ex@split#1=#2=#3\relax{%
913
 
  \def\@tempa{#1}%
914
 
  \ifx\@tempa\@empty \else
915
 
    \MT@get@slot
916
 
    \ifnum\MT@char > \m@ne
917
 
      \@tempcntb=#2\relax
918
 
      \ifnum\MT@ex@factor@=\@m \else
919
 
        \MT@scale\@tempcntb \MT@ex@factor@ \@m
920
 
      \fi
921
 
      \ifnum\@tempcntb > \MT@ex@max
922
 
        \MT@warn@ex@too@large\MT@ex@max
923
 
      \else
924
 
        \ifnum\@tempcntb < \MT@ex@min
925
 
          \MT@warn@ex@too@large\MT@ex@min
926
 
        \fi
927
 
      \fi
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
933
 
            \MT@set@ex@heirs
934
 
        }\relax
935
 
      }\relax
936
 
    \fi
937
 
  \fi
938
 
}
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}%
944
 
  \@tempcntb=#1\relax
945
 
}
946
 
\def\MT@get@ex@opt{%
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}%
950
 
  }{%
951
 
    \let\MT@ex@factor@\MT@ex@factor
952
 
  }%
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@}%
956
 
  }{%
957
 
    \let\MT@stretch@\MT@stretch
958
 
  }%
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@}%
962
 
  }{%
963
 
    \let\MT@shrink@\MT@shrink
964
 
  }%
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@}%
968
 
  }{%
969
 
    \let\MT@step@\MT@step
970
 
  }%
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}%
976
 
  }{%
977
 
    \let\MT@auto@\MT@auto
978
 
  }%
979
 
}
980
 
\def\MT@set@ex@heirs#1{%
981
 
  \efcode\MT@font#1=\efcode\MT@font\MT@char
982
 
}
983
 
\def\MT@preset@ex{%
984
 
  \@tempcntb=\csname MT@ex@c@\MT@ex@c@name @preset\endcsname\relax
985
 
  \MT@scale@factor
986
 
  \MT@set@all@ex\@tempcntb
987
 
}
988
 
\ifnum\MT@pdftex@no < 5 \MT@hop@else@fi{%
989
 
  \let\MT@noligatures\relax
990
 
}\else\MT@hop@fi{%
991
 
  \def\MT@noligatures{%
992
 
    \csname ifMT@\MT@abbr@nl\endcsname
993
 
      \MT@dotrue
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}}%
998
 
        {nl}%
999
 
      }%
1000
 
    \else
1001
 
      \MT@dofalse
1002
 
    \fi
1003
 
    \ifMT@do
1004
 
      \pdfnoligatures\MT@font
1005
 
      \MT@vinfo{... Disabling ligatures}%
1006
 
    \fi
1007
 
  }
1008
 
}\fi
1009
 
\def\MT@load@list#1{%
1010
 
  \edef\@tempa{#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}%
1014
 
  }{%
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'}%
1018
 
        \begingroup
1019
 
          \MT@load@list{\@tempb}%
1020
 
        \endgroup
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,%
1024
 
      }{%
1025
 
        \MT@warning{\@nameuse{MT@abbr@\MT@feat} list `\@tempb' undefined.
1026
 
                    Cannot load\MessageBreak it from list `\@tempa'}%
1027
 
      }%
1028
 
    \fi
1029
 
  }%
1030
 
}
1031
 
\let\MT@file@list\@empty
1032
 
\def\MT@find@file#1{%
1033
 
  \MT@in@clist{#1}\MT@file@list
1034
 
  \ifMT@inlist@\else
1035
 
    \MT@begin@catcodes
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,}%
1041
 
    }{%
1042
 
      \expandafter\MT@get@basefamily#1\relax\relax\relax
1043
 
      \MT@exp@one@n\MT@in@clist\@tempa\MT@file@list
1044
 
      \ifMT@inlist@\else
1045
 
        \InputIfFileExists{mt-\@tempa.cfg}{%
1046
 
          \MT@vinfo{... Loading configuration file mt-\@tempa.cfg}%
1047
 
          \MT@xadd\MT@file@list{\@tempa,#1,}%
1048
 
        }{%
1049
 
          \MT@vinfo{... No configuration file mt-#1.cfg}%
1050
 
          \MT@xadd\MT@file@list{#1,}%
1051
 
        }%
1052
 
      \fi
1053
 
    }%
1054
 
    \endgroup
1055
 
  \fi
1056
 
}
1057
 
\def\MT@begin@catcodes{%
1058
 
  \begingroup
1059
 
  \makeatletter
1060
 
  \catcode`\^7%
1061
 
  \catcode`\ 9%
1062
 
  \catcode`\^^I9%
1063
 
  \catcode`\^^M9%
1064
 
  \catcode`\\\z@
1065
 
  \catcode`\{\@ne
1066
 
  \catcode`\}\tw@
1067
 
  \catcode`\#6%
1068
 
  \catcode`\%14%
1069
 
  \MT@map@tlist@n
1070
 
    {\!\"\$\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\[\]\_\`\|\~}%
1071
 
    \@makeother
1072
 
  \def\MT@remove@spaces##1{}%
1073
 
  \let\KV@@sp@def\def
1074
 
}
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
1085
 
}
1086
 
\def\MT@get@listname#1{%
1087
 
  \let\MT@listname\@undefined
1088
 
  \def\@tempb{#1}%
1089
 
  \MT@map@tlist@c\MT@try@order\MT@get@listname@
1090
 
}
1091
 
\def\MT@get@listname@#1{%
1092
 
  \expandafter\MT@next@listname#1%
1093
 
  \ifx\MT@listname\@undefined \else
1094
 
    \expandafter\MT@tlist@break
1095
 
  \fi
1096
 
}
1097
 
\def\MT@try@order{%
1098
 
  {1111}{1110}{1101}{1100}{1011}{1010}{1001}{1000}%
1099
 
  {0111}{0110}{0101}{0100}{0011}{0010}{0001}{0000}%
1100
 
}
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
1106
 
               /\ifnum#4=\@ne *\fi
1107
 
               \MT@context}%
1108
 
  \MT@ifdefined@n{MT@\@tempb @\@tempa}{%
1109
 
    \MT@next@listname@#4%
1110
 
  }{%
1111
 
    \ifnum#1=\@ne
1112
 
      \ifx\MT@familyalias\@empty \else
1113
 
        \edef\@tempa{\MT@encoding
1114
 
                    /\MT@familyalias
1115
 
                    /\ifnum#2=\@ne \MT@series\fi
1116
 
                    /\ifnum#3=\@ne \MT@shape\fi
1117
 
                    /\ifnum#4=\@ne *\fi
1118
 
                    \MT@context}%
1119
 
        \MT@ifdefined@n{MT@\@tempb @\@tempa}{%
1120
 
          \MT@next@listname@#4%
1121
 
        }\relax
1122
 
      \fi
1123
 
    \fi
1124
 
  }%
1125
 
}
1126
 
\def\MT@next@listname@#1{%
1127
 
  \ifnum#1=\@ne
1128
 
    \expandafter\MT@in@rlist\csname MT@\@tempb @\@tempa @sizes\endcsname
1129
 
    \ifMT@inlist@
1130
 
      \let\MT@listname\MT@size@name
1131
 
    \fi
1132
 
  \else
1133
 
    \MT@let@cn\MT@listname{MT@\@tempb @\@tempa}%
1134
 
  \fi
1135
 
}
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}%
1141
 
    \ifMT@nonselected
1142
 
      \MT@vinfo{... Applying non-selected expansion (list `\MT@ex@c@name')}%
1143
 
    \else
1144
 
      \MT@vinfo{... Loading \@nameuse{MT@abbr@\MT@feat} list
1145
 
                    `\@nameuse{MT@\MT@feat @c@name}'}%
1146
 
    \fi
1147
 
    \@firstoftwo
1148
 
  }{%
1149
 
    \MT@let@nc{MT@\MT@feat @c@name}\@empty
1150
 
    \ifMT@nonselected
1151
 
      \MT@vinfo{... Applying non-selected expansion}%
1152
 
    \else
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}%
1157
 
     \fi
1158
 
    \@secondoftwo
1159
 
  }%
1160
 
}
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
1172
 
    \fi
1173
 
  }{%
1174
 
    \MT@let@nc{MT@\MT@feat @inh@name}\@undefined
1175
 
  }%
1176
 
}
1177
 
\def\MT@get@slot{%
1178
 
  \escapechar`\\
1179
 
  \let\Mt@char\m@ne
1180
 
  \MT@noresttrue
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}%
1187
 
      \MT@is@symbol
1188
 
    {%
1189
 
      \expandafter\MT@is@composite\@tempa\relax\relax
1190
 
    }%
1191
 
    \ifnum\Mt@char < \z@
1192
 
      \MT@exp@two@c\MT@is@char\MT@char\MT@charstring\relax\relax\relax
1193
 
    \fi
1194
 
  \fi
1195
 
  \let\MT@char\Mt@char
1196
 
  \ifnum\MT@char < \z@
1197
 
    \MT@warn@unknown
1198
 
  \else
1199
 
    \ifMT@norest \else
1200
 
      \MT@warn@unknown@i
1201
 
      \let\MT@char\m@ne
1202
 
    \fi
1203
 
  \fi
1204
 
  \escapechar\m@ne
1205
 
}
1206
 
\newif\ifMT@norest
1207
 
\def\MT@testrest#1#2{%
1208
 
  \MT@ifstreq{#1}{#2}\relax\MT@norestfalse
1209
 
}
1210
 
\def\MT@is@letter#1#2\relax{%
1211
 
  \ifcat a\noexpand#1\relax
1212
 
    \edef\Mt@char{\number`#1}%
1213
 
    \ifx\\#2\\%
1214
 
    \else
1215
 
      \MT@norestfalse
1216
 
    \fi
1217
 
  \else
1218
 
    \ifcat 1\noexpand#1\relax
1219
 
      \edef\Mt@char{\number`#1}%
1220
 
      \ifx\\#2\\%
1221
 
        \ifnum\Mt@char>127 \Mt@warn@ascii \fi
1222
 
      \else
1223
 
        \MT@norestfalse
1224
 
        \expandafter\MT@is@number#1#2\relax\relax
1225
 
      \fi
1226
 
    \fi
1227
 
  \fi
1228
 
}
1229
 
\def\MT@is@number#1#2#3\relax{%
1230
 
  \ifx\relax#3\relax \else
1231
 
    \ifx\relax#2\relax \else
1232
 
      \MT@noresttrue
1233
 
      \if#1"\relax
1234
 
        \def\x{\uppercase{\edef\Mt@char{\number#1#2#3}}}\x
1235
 
      \else
1236
 
        \if#1'\relax
1237
 
          \def\Mt@char{\number#1#2#3}%
1238
 
        \else
1239
 
          \MT@ifnumber{#1#2#3}{%
1240
 
            \def\Mt@char{\number#1#2#3}%
1241
 
          }\MT@norestfalse
1242
 
        \fi
1243
 
      \fi
1244
 
      \ifnum\Mt@char > \@cclv
1245
 
        \MT@warn@number@too@large{\noexpand#1\noexpand#2\noexpand#3}%
1246
 
        \let\Mt@char\m@ne
1247
 
      \fi
1248
 
    \fi
1249
 
  \fi
1250
 
}
1251
 
\def\MT@is@active#1#2\@nil{%
1252
 
  \ifx\\#2\\%
1253
 
    \ifnum\catcode`#1 = \active
1254
 
      \begingroup
1255
 
        \set@display@protect
1256
 
        \def\IeC##1{##1}%
1257
 
        \def\@inpenc@undefined@##1{undefined^^J%
1258
 
          (microtype)\@spaces\@spaces\@spaces\@spaces
1259
 
          in input encoding ``##1''}%
1260
 
        \edef\x{%
1261
 
          \def\noexpand\@tempa{\@tempa}%
1262
 
          \mt@toks={\the\mt@toks\space (= \@tempa)}%
1263
 
        }%
1264
 
      \expandafter\endgroup\x
1265
 
    \fi
1266
 
  \fi
1267
 
}
1268
 
\def\MT@is@symbol{%
1269
 
  \edef\@tempa{\expandafter
1270
 
                 \csname\expandafter
1271
 
                   \MT@encoding\expandafter
1272
 
                   \string\@tempa
1273
 
                 \endcsname}%
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
1278
 
  \fi
1279
 
}
1280
 
\begingroup
1281
 
  \catcode`\/=0
1282
 
  /MT@map@tlist@n{/\/C/H/A/R}/@makeother
1283
 
  /lowercase{%
1284
 
    /def/x{%
1285
 
      /def/MT@charstring{\CHAR"}%
1286
 
      /def/MT@is@char##1\CHAR"##2##3##4/relax{%
1287
 
        /ifx/relax##1/relax
1288
 
          /if##3\/relax
1289
 
            /edef/Mt@char{/number"##2}%
1290
 
            /MT@testrest/MT@charstring{##3##4}%
1291
 
          /else
1292
 
            /edef/Mt@char{/number"##2##3}%
1293
 
            /MT@testrest/MT@charstring{##4}%
1294
 
          /fi
1295
 
        /fi
1296
 
      }%
1297
 
    }%
1298
 
  }
1299
 
/expandafter/endgroup/x
1300
 
\def\MT@is@composite#1#2\relax{%
1301
 
  \ifx\\#2\\\else
1302
 
    \edef\@tempa{\expandafter
1303
 
                   \csname\expandafter
1304
 
                     \string\csname\MT@encoding\endcsname
1305
 
                     \string#1-%
1306
 
                     \string#2%
1307
 
                   \endcsname}%
1308
 
    \expandafter\MT@is@letter\@tempa\relax\relax
1309
 
  \fi
1310
 
}
1311
 
\ifcase\MT@etex@no
1312
 
  \def\MT@detokenize#1{\MT@exp@two@c\zap@space\strip@prefix\meaning#1 \@empty}
1313
 
\else
1314
 
  \def\MT@detokenize#1{\detokenize
1315
 
    \expandafter\expandafter\expandafter{\expandafter\string#1}}
1316
 
\fi
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}%
1323
 
}
1324
 
\def\MT@warn@number@too@large#1{%
1325
 
  \MT@warning@nl{%
1326
 
    Number #1 in encoding `\MT@encoding' too large!\MessageBreak
1327
 
    Ignoring it in \MT@curr@list@name}%
1328
 
}
1329
 
\def\MT@warn@unknown@i{%
1330
 
  \MT@warning@nl{%
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}%
1334
 
}
1335
 
\def\MT@warn@unknown{%
1336
 
  \MT@warning@nl{%
1337
 
    Unknown slot number of character `\the\mt@toks' in\MessageBreak
1338
 
    font encoding `\MT@encoding' in \MT@curr@list@name}%
1339
 
}
1340
 
\let\MT@font\@empty
1341
 
\g@addto@macro\do@subst@correction{%
1342
 
  \xdef\MT@font{\csname \curr@fontshape/\f@size\endcsname}%
1343
 
}
1344
 
\def\MT@orig@pickupfont{\expandafter\ifx\font@name\relax\define@newfont\fi}
1345
 
\ifx\pickup@font\MT@orig@pickupfont \else
1346
 
  \MT@warning@nl{%
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)%
1350
 
  }
1351
 
\fi
1352
 
\g@addto@macro\pickup@font{%
1353
 
  \begingroup
1354
 
    \escapechar\m@ne
1355
 
    \ifx\MT@font\@empty
1356
 
      \let\MT@font\font@name
1357
 
    \else
1358
 
      \ifx\MT@font\font@name \else
1359
 
        \expandafter\MT@xadd
1360
 
            \csname MT@\MT@curr@contexts font@list\endcsname{\font@name,}%
1361
 
      \fi
1362
 
    \fi
1363
 
    \expandafter\MT@exp@one@n\expandafter\MT@in@clist\expandafter\MT@font
1364
 
         \csname MT@\MT@curr@contexts font@list\endcsname
1365
 
    \ifMT@inlist@ \else
1366
 
      \MT@setupfont
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
1369
 
    \fi
1370
 
  \endgroup
1371
 
  \global\let\MT@font\@empty
1372
 
}
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
1377
 
  }%
1378
 
}
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
1385
 
}
1386
 
\AtBeginDocument{%
1387
 
  \ifx\MT@pickupfont\pickup@font \else
1388
 
    \MT@error{%
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
1393
 
    }{%
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>.
1399
 
    }%
1400
 
  \fi
1401
 
}
1402
 
\def\DeclareMicrotypeSet{%
1403
 
  \@ifstar
1404
 
    {\@ifnextchar[\MT@DeclareSetAndUseIt
1405
 
                  {\MT@DeclareSetAndUseIt[]}}%
1406
 
    {\@ifnextchar[\MT@DeclareSet
1407
 
                  {\MT@DeclareSet[]}}%
1408
 
}
1409
 
\def\MT@DeclareSet[#1]{%
1410
 
  \MT@DeclareSet@{#1}%
1411
 
}
1412
 
\def\MT@DeclareSetAndUseIt[#1]#2#3{%
1413
 
  \MT@DeclareSet@{#1}{#2}{#3}%
1414
 
  \UseMicrotypeSet[#1]{#2}%
1415
 
}
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}%
1421
 
  }{%
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}}}%
1427
 
    }%
1428
 
  }%
1429
 
}
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'}%
1435
 
  }\relax
1436
 
  \global\MT@let@nc{MT@#1@set@@\MT@curr@set@name}\@empty
1437
 
  \setkeys{MT@#1@set}{#3}%
1438
 
}
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}%
1446
 
}
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,}%
1457
 
    }%
1458
 
  }%
1459
 
}
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
1465
 
      \expandafter\ifx
1466
 
          \csname MT@check@\MT@curr@set@name @\@tempa\endcsname\@empty
1467
 
      \else
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
1472
 
        }%
1473
 
        \global\MT@let@nc{MT@check@\MT@curr@set@name @\@tempa}\@empty
1474
 
      \fi
1475
 
    \fi
1476
 
  }%
1477
 
}
1478
 
\def\MT@test@ast#1*#2\@nil{%
1479
 
  \def\@tempa{#1}%
1480
 
  \MT@ifempty{#2}%
1481
 
    \@gobble
1482
 
    \@firstofone
1483
 
}
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
1488
 
    \MT@warning@nl{%
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}%
1494
 
  \fi
1495
 
}
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}}%
1505
 
      \fi
1506
 
    }%
1507
 
  }%
1508
 
}
1509
 
\def\MT@get@range#1-#2-#3\@nil{%
1510
 
  \MT@ifempty{#1}{%
1511
 
    \MT@ifempty{#2}{%
1512
 
      \let\MT@val\relax
1513
 
    }{%
1514
 
      \def\MT@lower{0}%
1515
 
      \def\MT@val{#2}%
1516
 
      \MT@get@size
1517
 
      \edef\MT@upper{\MT@val}%
1518
 
    }%
1519
 
  }{%
1520
 
    \def\MT@val{#1}%
1521
 
    \MT@get@size
1522
 
    \ifx\MT@val\relax \else
1523
 
      \edef\MT@lower{\MT@val}%
1524
 
      \MT@ifempty{#2}{%
1525
 
        \MT@ifempty{#3}{%
1526
 
          \def\MT@upper{-1}%
1527
 
        }{%
1528
 
          \def\MT@upper{2048}%
1529
 
        }%
1530
 
      }{%
1531
 
        \def\MT@val{#2}%
1532
 
        \MT@get@size
1533
 
        \ifx\MT@val\relax \else
1534
 
          \MT@ifgt\MT@lower\MT@val{%
1535
 
            \MT@warning{%
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}%
1540
 
          }{%
1541
 
            \edef\MT@upper{\MT@val}%
1542
 
          }%
1543
 
          \MT@ifeq\MT@lower\MT@upper{%
1544
 
            \def\MT@upper{-1}%
1545
 
          }\relax
1546
 
        \fi
1547
 
      }%
1548
 
    \fi
1549
 
  }%
1550
 
}
1551
 
\def\MT@get@size{%
1552
 
  \if*\MT@val\relax
1553
 
    \def\@tempa{\normalsize}%
1554
 
  \else
1555
 
    \MT@let@cn\@tempa{\MT@val}%
1556
 
  \fi
1557
 
  \ifx\@tempa\relax \else
1558
 
    \begingroup
1559
 
      \def\set@fontsize##1##2##3##4\@nil{\gdef\MT@val{##2}}%
1560
 
      \@tempa\@nil
1561
 
    \endgroup
1562
 
  \fi
1563
 
  \MT@ifdimen\MT@val{%
1564
 
    \@defaultunits\@tempdima\MT@val pt\relax\@nnil
1565
 
    \edef\MT@val{\strip@pt\@tempdima}%
1566
 
  }{%
1567
 
    \MT@warning{Could not parse font size `\MT@val'\MessageBreak
1568
 
                in font set `\MT@curr@set@name'}%
1569
 
    \let\MT@val\relax
1570
 
  }%
1571
 
}
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,}%
1580
 
    }%
1581
 
  }%
1582
 
}
1583
 
\def\MT@get@font#1/#2/#3/#4/#5/#6\@nil{%
1584
 
  \MT@ifempty{#1#2#3#4#5}\relax{%
1585
 
    \let\@tempb\@empty
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}%
1591
 
    \MT@ifempty{#5}{%
1592
 
      \MT@warning{size axis is empty in font specification\MessageBreak
1593
 
        `\MT@temp'. Using \string\normalsize\space instead}%
1594
 
      \def\MT@val{*}%
1595
 
    }{%
1596
 
      \def\MT@val{#5}%
1597
 
    }%
1598
 
    \MT@get@size
1599
 
    \ifx\MT@val\relax\def\MT@val{0}\fi
1600
 
    \edef\MT@val{\expandafter\@gobble\@tempb/\MT@val}%
1601
 
  }%
1602
 
}
1603
 
\def\MT@get@axis#1#2{%
1604
 
  \def\MT@val{#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}%
1610
 
  }{%
1611
 
    \edef\@tempb{\@tempb/\MT@val}%
1612
 
  }%
1613
 
}
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}%
1622
 
  }{%
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}}}%
1627
 
    }%
1628
 
  }%
1629
 
}
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'}%
1635
 
  }{%
1636
 
    \MT@ifdefined@n{MT@#1@setname}\relax{%
1637
 
      \global\MT@edef@n{MT@#1@setname}{\@nameuse{MT@default@#1@set}}%
1638
 
    }%
1639
 
    \MT@warning{%
1640
 
      The \@nameuse{MT@abbr@#1} set `\@tempa' is undeclared.\MessageBreak
1641
 
      Using set `\@nameuse{MT@#1@setname}' instead}%
1642
 
  }%
1643
 
}
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}%
1649
 
  }{%
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}}}%
1655
 
    }%
1656
 
  }%
1657
 
}
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}%
1662
 
  }{%
1663
 
    \MT@warning{%
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}%
1667
 
  }%
1668
 
}
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
1680
 
  }\relax
1681
 
}
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
1686
 
  \ifMT@inlist@
1687
 
    \MT@vinfo{... Configuration file mt-\@tempa.cfg already loaded}%
1688
 
  \else
1689
 
    \MT@xadd\MT@file@list{\@tempa,}%
1690
 
    \MT@begin@catcodes
1691
 
    \InputIfFileExists{mt-\@tempa.cfg}{%
1692
 
      \MT@vinfo{... Loading configuration file mt-\@tempa.cfg}%
1693
 
    }{%
1694
 
      \MT@warning{... Configuration file mt-\@tempa.cfg\MessageBreak
1695
 
                      does not exist}%
1696
 
    }%
1697
 
    \MT@end@catcodes
1698
 
  \fi
1699
 
}
1700
 
\ifnum\MT@pdftex@no > 4
1701
 
  \renewcommand*\DisableLigatures[1]{%
1702
 
    \MT@noligaturestrue
1703
 
    \MT@declare@sets{nl}{no ligatures}{#1}%
1704
 
    \gdef\MT@nl@setname{no ligatures}%
1705
 
  }
1706
 
\else
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
1712
 
  }
1713
 
\fi
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}%
1723
 
  \MT@set@pr@opt
1724
 
  \def\MT@permutelist{pr@c}%
1725
 
  \setkeys{MT@pr@c}{#2}%
1726
 
  \MT@permute
1727
 
  \MT@begin@catcodes
1728
 
  \MT@set@pr@list
1729
 
}
1730
 
\def\MT@set@pr@list#1{%
1731
 
  \global\MT@def@n{MT@pr@c@\MT@pr@c@name}{#1}%
1732
 
  \MT@end@catcodes
1733
 
}
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}%
1746
 
  \MT@set@ex@opt
1747
 
  \def\MT@permutelist{ex@c}%
1748
 
  \setkeys{MT@ex@c}{#2}%
1749
 
  \MT@permute
1750
 
  \MT@begin@catcodes
1751
 
  \MT@set@ex@list
1752
 
}
1753
 
\def\MT@set@ex@list#1{%
1754
 
  \global\MT@def@n{MT@ex@c@\MT@ex@c@name}{#1}%
1755
 
  \MT@end@catcodes
1756
 
}
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}'}%
1761
 
    }\relax
1762
 
  }{%
1763
 
    \@tempcnta=\@ne
1764
 
    \MT@while@num{\@tempcnta > \z@}{%
1765
 
      \MT@ifdefined@n{MT@#1@c@#1-\romannumeral\@tempcnta}{%
1766
 
        \advance \@tempcnta \@ne
1767
 
      }{%
1768
 
        \MT@edef@n{MT@#1@c@name}{#1-\romannumeral\@tempcnta}%
1769
 
        \@tempcnta=\z@
1770
 
      }%
1771
 
    }%
1772
 
  }%
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
1776
 
  }\relax
1777
 
}
1778
 
\def\MT@set@pr@opt{%
1779
 
  \MT@set@opt@{pr}{factor}%
1780
 
  \MT@set@opt@{pr}{unit}%
1781
 
  \MT@set@opt@{pr}{preset}%
1782
 
}
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
1788
 
        maximum of 1000}%
1789
 
      \let\MT@extra@factor\@m
1790
 
    \fi
1791
 
    \global\MT@let@nc{MT@ex@c@\MT@ex@c@name @factor}\MT@extra@factor
1792
 
  }\relax
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}%
1798
 
}
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}%
1802
 
  }\relax
1803
 
}
1804
 
\def\MT@define@code@key#1#2{%
1805
 
  \define@key{MT@#2}{#1}[]{%
1806
 
    \@tempcnta=\@ne
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
1812
 
    }%
1813
 
  }%
1814
 
}
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}}}%
1824
 
      \fi
1825
 
    }%
1826
 
  }%
1827
 
}
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}}}%
1838
 
    }%
1839
 
  }%
1840
 
}
1841
 
\def\MT@get@font@and@size#1/#2/#3/#4/#5/#6\@nil{%
1842
 
  \MT@ifempty{#1#2#3#4#5}\relax{%
1843
 
    \let\@tempb\@empty
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/*}%
1850
 
    \MT@ifempty{#5}{%
1851
 
      \MT@warning{size axis is empty in font specification\MessageBreak
1852
 
        `\MT@temp'. Using \string\normalsize\space instead}%
1853
 
      \def\MT@val{*}%
1854
 
    }{%
1855
 
      \def\MT@val{#5}%
1856
 
    }%
1857
 
    \MT@get@size
1858
 
  }%
1859
 
}
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}%
1864
 
    }%
1865
 
  }%
1866
 
  \define@key{MT@#1@c}{load}[]{%
1867
 
    \MT@ifempty{##1}\relax{%
1868
 
      \def\MT@load{##1}%
1869
 
    }%
1870
 
  }%
1871
 
  \define@key{MT@#1@c}{factor}[]{%
1872
 
    \MT@ifempty{##1}\relax{%
1873
 
      \def\MT@extra@factor{##1 }%
1874
 
    }%
1875
 
  }%
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}%
1885
 
    }%
1886
 
  }%
1887
 
  \define@key{MT@#1@c}{context}[]{%
1888
 
    \MT@ifempty{##1}\relax{%
1889
 
      \def\MT@extra@context{##1}%
1890
 
    }%
1891
 
  }%
1892
 
}
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
1901
 
      for you}%
1902
 
    \def\@tempa{character}%
1903
 
  }\relax
1904
 
  \MT@ifstreq\@tempa{character}\relax{%
1905
 
    \MT@ifdimen\@tempa{%
1906
 
      \let\MT@extra@unit\@tempa
1907
 
    }{%
1908
 
      \MT@warning{`\@tempa' is not a dimension.\MessageBreak
1909
 
        Ignoring it and setting values relative to\MessageBreak
1910
 
        character widths}%
1911
 
    }%
1912
 
  }%
1913
 
}
1914
 
\def\MT@define@ex@c@key#1{%
1915
 
  \define@key{MT@ex@c}{#1}[]{%
1916
 
    \MT@ifempty{##1}\relax{%
1917
 
      \MT@ifnumber{##1}{%
1918
 
        \MT@def@n{MT@extra@#1}{##1 }%
1919
 
      }{%
1920
 
        \MT@warning{%
1921
 
          Value `##1' for option `#1' is not a number.\MessageBreak
1922
 
          Ignoring it}%
1923
 
      }%
1924
 
    }%
1925
 
  }%
1926
 
}
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}%
1935
 
    \else
1936
 
      \MT@warning{pdfTeX too old for automatic font expansion}%
1937
 
    \fi
1938
 
  \else
1939
 
    \ifnum\MT@pdftex@no > \thr@@
1940
 
      \let\MT@extra@auto\@empty
1941
 
    \fi
1942
 
  \fi
1943
 
}
1944
 
\renewcommand*\DeclareCharacterInheritance[1][]{%
1945
 
  \KV@@sp@def\@tempa{#1}%
1946
 
  \MT@begin@catcodes
1947
 
  \MT@set@inh@list
1948
 
}
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}%
1953
 
  }{%
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}}}%
1959
 
    }%
1960
 
  }%
1961
 
  \MT@end@catcodes
1962
 
}
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}%
1969
 
  \MT@permute
1970
 
}
1971
 
\def\MT@get@inh@name#1{%
1972
 
  \@tempcnta=\@ne
1973
 
  \MT@while@num{\@tempcnta > \z@}{%
1974
 
    \MT@ifdefined@n{MT@#1@inh@#1-inh-\romannumeral\@tempcnta}{%
1975
 
      \advance \@tempcnta \@ne
1976
 
    }{%
1977
 
      \MT@edef@n{MT@#1@inh@name}{#1-inh-\romannumeral\@tempcnta}%
1978
 
      \@tempcnta=\z@
1979
 
    }%
1980
 
  }%
1981
 
}
1982
 
\def\MT@define@inh@key@encoding#1{%
1983
 
  \define@key{MT@#1}{encoding}[]{%
1984
 
    \def\MT@val{##1}%
1985
 
    \expandafter\MT@encoding@check\MT@val,\@nil
1986
 
    \MT@get@highlevel{encoding}%
1987
 
    \MT@edef@n{MT@tempencoding\romannumeral1}{\MT@val}%
1988
 
  }%
1989
 
}
1990
 
\def\MT@encoding@check#1,#2\@nil{%
1991
 
  \MT@ifempty{#2}\relax{%
1992
 
    \edef\MT@val{#1}%
1993
 
    \MT@warning{You may only specify one encoding for character\MessageBreak
1994
 
                inheritance lists. Ignoring encoding(s) #2}%
1995
 
  }%
1996
 
}
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}%
2004
 
}
2005
 
\MT@define@inh@keys{pr}
2006
 
\MT@define@inh@keys{ex}
2007
 
\def\MT@inh@do#1,{%
2008
 
  \ifx\relax#1\@empty \else
2009
 
    \MT@inh@split #1==\relax
2010
 
    \expandafter\MT@inh@do
2011
 
  \fi
2012
 
}
2013
 
\def\MT@inh@split#1=#2=#3\relax{%
2014
 
  \def\@tempa{#1}%
2015
 
  \ifx\@tempa\@empty \else
2016
 
    \MT@get@slot
2017
 
    \ifnum\MT@char > \m@ne
2018
 
      \let\MT@val\MT@char
2019
 
      \MT@map@clist@n{#2}{%
2020
 
        \def\@tempa{##1}%
2021
 
        \ifx\@tempa\@empty \else
2022
 
          \MT@get@slot
2023
 
          \ifnum\MT@char > \m@ne
2024
 
            \expandafter\MT@xadd
2025
 
              \csname MT@inh@\MT@inh@name @\MT@val @\endcsname
2026
 
              {{\MT@char}}%
2027
 
          \fi
2028
 
        \fi
2029
 
      }%
2030
 
    \fi
2031
 
  \fi
2032
 
}
2033
 
\def\MT@permute{%
2034
 
  \let\MT@cnt@encoding\@ne
2035
 
  \MT@permute@
2036
 
  \MT@permute@reset
2037
 
}
2038
 
\def\MT@permute@{%
2039
 
  \let\MT@cnt@family\@ne
2040
 
  \MT@permute@@
2041
 
  \MT@increment\MT@cnt@encoding
2042
 
  \MT@ifdefined@n{MT@tempencoding\romannumeral\MT@cnt@encoding}%
2043
 
    \MT@permute@
2044
 
    \relax
2045
 
}
2046
 
\def\MT@permute@@{%
2047
 
  \let\MT@cnt@series\@ne
2048
 
  \MT@permute@@@
2049
 
  \MT@increment\MT@cnt@family
2050
 
  \MT@ifdefined@n{MT@tempfamily\romannumeral\MT@cnt@family}%
2051
 
    \MT@permute@@
2052
 
    \relax
2053
 
}
2054
 
\def\MT@permute@@@{%
2055
 
  \let\MT@cnt@shape\@ne
2056
 
  \MT@permute@@@@
2057
 
  \MT@increment\MT@cnt@series
2058
 
  \MT@ifdefined@n{MT@tempseries\romannumeral\MT@cnt@series}%
2059
 
    \MT@permute@@@
2060
 
    \relax
2061
 
}
2062
 
\def\MT@permute@@@@{%
2063
 
  \MT@permute@@@@@
2064
 
  \MT@increment\MT@cnt@shape
2065
 
  \MT@ifdefined@n{MT@tempshape\romannumeral\MT@cnt@shape}%
2066
 
    \MT@permute@@@@
2067
 
    \relax
2068
 
}
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
2075
 
              /\MT@tempfamily
2076
 
              /\MT@tempseries
2077
 
              /\MT@tempshape
2078
 
              /\MT@ifdefined@c\MT@tempsize *\@empty}%
2079
 
  \def\@tempb{////}%
2080
 
  \ifx\@tempa\@tempb \else
2081
 
    \ifx\MT@tempencoding\@empty
2082
 
      \MT@warning{%
2083
 
        You have to specify an encoding for\MessageBreak
2084
 
        \@nameuse{MT@abbr@\MT@permutelist} list
2085
 
        `\@nameuse{MT@\MT@permutelist @name}'.\MessageBreak
2086
 
        Ignoring it}%
2087
 
    \else
2088
 
      \MT@ifdefined@c\MT@tempsize{%
2089
 
        \MT@ifdefined@n{MT@\MT@permutelist @\@tempa\MT@extra@context @sizes}{%
2090
 
          \MT@map@tlist@c
2091
 
            \MT@tempsize
2092
 
            \MT@check@rlist
2093
 
        }\relax
2094
 
        \expandafter\MT@xaddb
2095
 
          \csname MT@\MT@permutelist @\@tempa\MT@extra@context @sizes\endcsname
2096
 
          \MT@tempsize
2097
 
      }{%
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'}%
2102
 
        }\relax
2103
 
      }%
2104
 
      \global\MT@edef@n{MT@\MT@permutelist @\@tempa\MT@extra@context}%
2105
 
          {\csname MT@\MT@permutelist @name\endcsname}%
2106
 
    \fi
2107
 
  \fi
2108
 
}
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}%
2114
 
}
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
2121
 
}
2122
 
\def\MT@permute@reset@#1{%
2123
 
  \@tempcnta=\@ne
2124
 
  \MT@loop
2125
 
    \MT@let@nc{MT@temp#1\romannumeral\@tempcnta}\@undefined
2126
 
    \advance\@tempcnta\@ne
2127
 
    \MT@ifdefined@n{MT@temp#1\romannumeral\@tempcnta}%
2128
 
      \iftrue
2129
 
      \iffalse
2130
 
  \MT@repeat
2131
 
}
2132
 
\def\MT@check@rlist#1{%
2133
 
  \expandafter\MT@check@rlist@#1%
2134
 
}
2135
 
\def\MT@check@rlist@#1#2#3{%
2136
 
  \def\@tempb{#1}%
2137
 
  \def\@tempc{#2}%
2138
 
  \@tempswafalse
2139
 
  \expandafter\MT@map@tlist@c
2140
 
    \csname MT@\MT@permutelist @\@tempa\MT@extra@context @sizes\endcsname
2141
 
    \MT@check@range
2142
 
}
2143
 
\def\MT@check@range#1{%
2144
 
  \expandafter\MT@check@range@#1%
2145
 
}
2146
 
\def\MT@check@range@#1#2#3{%
2147
 
  \MT@ifeq{#2}\m@ne{%
2148
 
    \MT@ifeq\@tempc\m@ne{%
2149
 
      \MT@ifeq\@tempb{#1}\@tempswatrue\relax
2150
 
    }{%
2151
 
      \MT@ifgt\@tempb{#1}\relax{%
2152
 
        \MT@ifgt\@tempc{#1}{%
2153
 
          \@tempswatrue
2154
 
          \edef\@tempb{#1 (with range: \@tempb\space to \@tempc)}%
2155
 
        }\relax
2156
 
      }%
2157
 
    }%
2158
 
  }{%
2159
 
    \MT@ifeq\@tempc\m@ne{%
2160
 
      \MT@iflt\@tempb{#2}{%
2161
 
        \MT@iflt\@tempb{#1}\relax\@tempswatrue
2162
 
      }\relax
2163
 
    }{%
2164
 
      \MT@iflt\@tempb{#2}{%
2165
 
        \MT@ifgt\@tempc{#1}{%
2166
 
          \@tempswatrue
2167
 
          \edef\@tempb{#1 to #2 (with range: \@tempb\space to \@tempc)}%
2168
 
        }\relax
2169
 
      }\relax
2170
 
    }%
2171
 
  }%
2172
 
  \if@tempswa
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
2177
 
  \fi
2178
 
}
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{%
2187
 
        \@tempcnta=\m@ne
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)}%
2193
 
          }%
2194
 
        }{%
2195
 
          \MT@ifstreq\MT@val{false}{%
2196
 
            \@tempcnta=\z@
2197
 
            \MT@info{Disabling #1}%
2198
 
          }{%
2199
 
            \MT@ifstreq\MT@val{compatibility}{%
2200
 
              \MT@checksetup\@tempb{%
2201
 
                \@tempcnta=\@ne
2202
 
                \MT@let@nc{MT@\@tempb @level}\@ne
2203
 
                \MT@info{Setting #1 to level 1}%
2204
 
              }%
2205
 
            }{%
2206
 
              \MT@ifstreq\MT@val{nocompatibility}{%
2207
 
                \MT@checksetup\@tempb{%
2208
 
                  \@tempcnta=\tw@
2209
 
                  \MT@let@nc{MT@\@tempb @level}\tw@
2210
 
                  \MT@info{Setting #1 to level 2}%
2211
 
                }%
2212
 
              }{%
2213
 
                \MT@warning{%
2214
 
                  Value `\MT@val' for key `#1' not recognized.\MessageBreak
2215
 
                  Use any of `true', `false', `compatibility' or\MessageBreak
2216
 
                  `nocompatibility'}%
2217
 
              }%
2218
 
            }%
2219
 
          }%
2220
 
        }%
2221
 
        \ifnum\@tempcnta>\m@ne
2222
 
          #2\@tempcnta\relax
2223
 
        \fi
2224
 
      }%
2225
 
    }%
2226
 
  }%
2227
 
}
2228
 
\def\MT@checksetup#1{%
2229
 
  \expandafter\csname ifMT@\csname MT@abbr@#1\endcsname\endcsname
2230
 
    \expandafter\@firstofone
2231
 
  \else
2232
 
    \MT@warning{%
2233
 
      You cannot enable \@nameuse{MT@abbr@#1} if it was disabled\MessageBreak
2234
 
      in the package options,}%
2235
 
    \expandafter\@gobble
2236
 
  \fi
2237
 
}
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}}%
2243
 
}
2244
 
\def\microtypecontext#1{%
2245
 
  \setkeys{MTC}{#1}%
2246
 
  \edef\MT@curr@contexts{\MT@pr@context|%
2247
 
                         \MT@ex@context|%
2248
 
                         \MT@sp@context|%
2249
 
                         \MT@kn@context}%
2250
 
  \MT@exp@one@n\MT@in@tlist\MT@curr@contexts\MT@doc@contexts
2251
 
  \ifMT@inlist@ \else
2252
 
    \MT@xadd\MT@doc@contexts{{\MT@curr@contexts}}%
2253
 
  \fi
2254
 
  \selectfont
2255
 
  \aftergroup\MT@reset@context
2256
 
}
2257
 
\def\MT@reset@context{%
2258
 
  \MT@vinfo{Resetting contexts on line \the\inputlineno}%
2259
 
  \selectfont
2260
 
}
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@}%
2270
 
    }%
2271
 
  }%
2272
 
}
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
2285
 
}
2286
 
\define@key{MTX}{enable}[]{%
2287
 
  \MT@info{Reactivate microtype package}%
2288
 
  \let\MT@setupfont\MT@saved@setupfont
2289
 
}
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
2301
 
        {%
2302
 
          \MT@ifstreq\MT@val{false}{%
2303
 
            \csname MT@#1false\endcsname
2304
 
          }{%
2305
 
            \MT@ifstreq\MT@val{compatibility}{%
2306
 
              \MT@let@nc{MT@\@tempb @level}\@ne
2307
 
            }{%
2308
 
              \MT@ifstreq\MT@val{nocompatibility}{%
2309
 
                \MT@let@nc{MT@\@tempb @level}\tw@
2310
 
              }{%
2311
 
                \MT@ifdefined@n{MT@\@tempb @set@@\MT@val}{%
2312
 
                  \global\MT@edef@n{MT@\@tempb @setname}{\MT@val}%
2313
 
                }{%
2314
 
                  \global\MT@edef@n{MT@\@tempb @setname}%
2315
 
                    {\@nameuse{MT@default@\@tempb @set}}%
2316
 
                  \MT@warning@nl{%
2317
 
                    The #1 set `\MT@val' is undeclared.\MessageBreak
2318
 
                    Using set `\@nameuse{MT@\@tempb @setname}' instead}%
2319
 
                }%
2320
 
              }%
2321
 
            }%
2322
 
          }%
2323
 
        }%
2324
 
      }%
2325
 
    }%
2326
 
  }%
2327
 
}
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}}%
2333
 
}
2334
 
\def\MT@def@bool@opt#1{%
2335
 
  \define@key{MT}{#1}[]{%
2336
 
    \MT@ifempty{##1}%
2337
 
      {\def\@tempa{true}}%
2338
 
      {\def\@tempa{##1}}%
2339
 
    \MT@ifstreq\@tempa{true}\relax{%
2340
 
      \MT@ifstreq\@tempa{false}\relax{%
2341
 
        \MT@warning@nl{%
2342
 
          `##1' is not an admissible value for option\MessageBreak
2343
 
          `#1'. Assuming `false'}%
2344
 
        \def\@tempa{false}%
2345
 
      }%
2346
 
    }%
2347
 
    \csname MT@#1\@tempa\endcsname
2348
 
  }%
2349
 
}
2350
 
\MT@map@tlist@n{{draft}{DVIoutput}{auto}{selected}%
2351
 
}\MT@def@bool@opt
2352
 
\define@key{MT}{final}[]{%
2353
 
  \MT@draftfalse
2354
 
  \MT@ifempty{#1}%
2355
 
    {\def\@tempa{true}}%
2356
 
    {\def\@tempa{#1}}%
2357
 
  \MT@ifstreq\@tempa{true}\relax{%
2358
 
    \MT@ifstreq\@tempa{false}%
2359
 
      \MT@drafttrue
2360
 
    {%
2361
 
      \MT@warning@nl{%
2362
 
        `#1' is not an admissible value for option\MessageBreak
2363
 
        `final'. Assuming `true'}%
2364
 
      \MT@draftfalse
2365
 
    }%
2366
 
  }%
2367
 
}
2368
 
\define@key{MT}{verbose}[]{%
2369
 
  \let\MT@vinfo\MT@info@nl
2370
 
  \MT@ifempty{#1}%
2371
 
    {\def\@tempa{true}}%
2372
 
    {\def\@tempa{#1}}%
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
2377
 
    }{%
2378
 
      \let\MT@vinfo\@gobble
2379
 
      \MT@ifstreq\@tempa{false}\relax{%
2380
 
        \MT@warning@nl{%
2381
 
          `#1' is not an admissible value for option\MessageBreak
2382
 
          `verbose'. Assuming `false'}%
2383
 
      }%
2384
 
    }%
2385
 
  }%
2386
 
}
2387
 
\def\MT@def@num@opt#1{%
2388
 
  \define@key{MT}{#1}[]{%
2389
 
    \MT@ifempty{##1}%
2390
 
      {\MT@let@cn\@tempa{MT@#1@default}}%
2391
 
      {\def\@tempa{##1 }}%
2392
 
    \MT@ifnumber\@tempa{%
2393
 
      \MT@edef@n{MT@#1}{\@tempa}%
2394
 
    }{\MT@warning@nl{%
2395
 
        Value `##1' for option `#1' is not a number.\MessageBreak
2396
 
        Using default value of \number\@nameuse{MT@#1@default}}%
2397
 
    }%
2398
 
  }%
2399
 
}
2400
 
\MT@map@tlist@n{{stretch}{shrink}{step}%
2401
 
}\MT@def@num@opt
2402
 
\define@key{MT}{factor}[]{%
2403
 
  \MT@ifempty{#1}%
2404
 
    {\let\@tempa\MT@factor@default}%
2405
 
    {\def\@tempa{#1 }}%
2406
 
  \MT@ifnumber\@tempa{%
2407
 
    \MT@edef@n{MT@pr@factor}{\@tempa}%
2408
 
  }{\MT@warning@nl{%
2409
 
      Value `#1' for option `factor' is not a number.\MessageBreak
2410
 
      Using default value of \number\MT@factor@default}%
2411
 
  }%
2412
 
}
2413
 
\define@key{MT}{unit}[]{%
2414
 
  \MT@ifempty{#1}%
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
2420
 
      for you}%
2421
 
    \def\@tempa{character}%
2422
 
  }\relax
2423
 
  \MT@ifstreq\@tempa{character}\relax{%
2424
 
    \MT@ifdimen\@tempa{%
2425
 
      \let\MT@pr@unit\@tempa
2426
 
    }{%
2427
 
      \MT@warning@nl{`\@tempa' is not a dimension. Ignoring it and\MessageBreak
2428
 
                     setting values relative to character widths}%
2429
 
    }%
2430
 
  }%
2431
 
}
2432
 
\MT@protrusiontrue
2433
 
\ifnum\pdfoutput=\z@ \else
2434
 
  \ifnum\MT@pdftex@no > \thr@@
2435
 
    \MT@expansiontrue
2436
 
    \MT@autotrue
2437
 
  \fi
2438
 
\fi
2439
 
\define@key{MT}{config}[]{\relax}
2440
 
\def\MT@get@config#1config=#2,#3\@nil{%
2441
 
  \MT@ifempty{#2}%
2442
 
    {\def\MT@config@file{microtype.cfg}}%
2443
 
    {\KV@@sp@def\MT@config@file{#2.cfg}}%
2444
 
}
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}%
2449
 
  \MT@begin@catcodes
2450
 
  \let\MT@begin@catcodes\relax
2451
 
  \let\MT@end@catcodes\relax
2452
 
  \input{\MT@config@file}%
2453
 
  \endgroup
2454
 
}{%
2455
 
  \MT@warning@nl{%
2456
 
    Could not find configuration file `\MT@config@file'!\MessageBreak
2457
 
    This will almost certainly cause undesired results.\MessageBreak
2458
 
    Please fix your installation}%
2459
 
}
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][]{%
2463
 
  \MT@warning{%
2464
 
    The command \string\DeclareMicrotypeSetDefault\space may only\MessageBreak
2465
 
    be used inside the main configuration file.\MessageBreak
2466
 
    Ignoring it}%
2467
 
}
2468
 
\MT@ifdefined@c\MicroType@Hook{%
2469
 
  \MT@warning@nl{%
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{%
2474
 
  \let\@tempc\relax
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
2482
 
    }\relax
2483
 
  }%
2484
 
  \edef\KVo@tempa{%
2485
 
    \noexpand\setkeys{#1}{%
2486
 
      \KVo@tempa\@ptionlist{\@currname.\@currext}%
2487
 
    }%
2488
 
  }%
2489
 
  \KVo@tempa
2490
 
  \AtEndOfPackage{\let\@unprocessedoptions\relax}%
2491
 
  \let\CurrentOption\@empty
2492
 
}
2493
 
\MT@ProcessOptionsWithKV{MT}
2494
 
\ifMT@DVIoutput
2495
 
  \ifnum\pdfoutput=\z@
2496
 
    \MT@info@nl{Generating DVI output}
2497
 
  \else
2498
 
    \pdfoutput\z@
2499
 
    \MT@info@nl{Changing output mode to DVI}
2500
 
    \ifMT@opt@expansion \else
2501
 
      \MT@expansionfalse
2502
 
    \fi
2503
 
  \fi
2504
 
\else
2505
 
  \MT@info@nl{Generating \ifnum\pdfoutput=\z@ DVI \else PDF \fi output}
2506
 
\fi
2507
 
\ifMT@draft
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}
2511
 
  \MT@protrusionfalse
2512
 
  \MT@expansionfalse
2513
 
  \let\MT@setupfont\relax
2514
 
  \def\DeclareMicrotypeSet{%
2515
 
    \@ifstar
2516
 
      {\@ifnextchar[\MT@DeclareSet{\MT@DeclareSet[]}}%
2517
 
      {\@ifnextchar[\MT@DeclareSet{\MT@DeclareSet[]}}%
2518
 
  }
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]{}
2528
 
  \expandafter
2529
 
  \endinput
2530
 
\fi
2531
 
\ifMT@protrusion
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'}%
2539
 
  }{%
2540
 
    \global\let\MT@pr@setname\MT@default@pr@set
2541
 
    \MT@info@nl{Using default protrusion set `\MT@pr@setname'}%
2542
 
  }
2543
 
\else
2544
 
  \let\MT@protrusion\relax
2545
 
  \MT@info@nl{No character protrusion}
2546
 
\fi
2547
 
\ifMT@expansion
2548
 
  \ifnum\MT@stretch=\m@ne
2549
 
    \let\MT@stretch\MT@stretch@default
2550
 
  \fi
2551
 
  \ifnum\MT@shrink=\m@ne
2552
 
    \ifnum\MT@stretch>\z@
2553
 
      \let\MT@shrink\MT@stretch
2554
 
    \else
2555
 
      \let\MT@shrink\MT@shrink@default
2556
 
    \fi
2557
 
  \fi
2558
 
  \ifnum\MT@step=\m@ne
2559
 
    \ifnum\MT@stretch>\MT@shrink
2560
 
      \ifnum\MT@shrink=\z@
2561
 
        \@tempcnta=\MT@stretch
2562
 
      \else
2563
 
        \@tempcnta=\MT@shrink
2564
 
      \fi
2565
 
    \else
2566
 
      \ifnum\MT@stretch=\z@
2567
 
        \@tempcnta=\MT@shrink
2568
 
      \else
2569
 
        \@tempcnta=\MT@stretch
2570
 
      \fi
2571
 
    \fi
2572
 
    \divide\@tempcnta 5\relax
2573
 
  \else
2574
 
    \@tempcnta=\MT@step
2575
 
    \ifnum\@tempcnta=\z@
2576
 
      \MT@warning@nl{The expansion step cannot be set to zero.\MessageBreak
2577
 
        Setting it to one}
2578
 
    \fi
2579
 
  \fi
2580
 
  \ifnum\@tempcnta=\z@ \@tempcnta=\@ne \fi
2581
 
  \edef\MT@step{\number\@tempcnta\space}
2582
 
  \let\MT@auto\@empty
2583
 
  \ifMT@auto
2584
 
    \ifnum\MT@pdftex@no > \thr@@
2585
 
      \ifnum\pdfoutput=\z@
2586
 
        \ifMT@opt@auto
2587
 
          \MT@warning@nl{%
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}
2592
 
        \fi
2593
 
        \MT@autofalse
2594
 
      \else
2595
 
        \def\MT@auto{autoexpand}
2596
 
      \fi
2597
 
    \else
2598
 
      \ifMT@opt@auto
2599
 
        \MT@warning@nl{%
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}
2604
 
      \fi
2605
 
      \MT@autofalse
2606
 
      \def\MT@auto{1000 }
2607
 
    \fi
2608
 
  \else
2609
 
    \ifnum\MT@pdftex@no < 4
2610
 
      \def\MT@auto{1000 }
2611
 
    \fi
2612
 
  \fi
2613
 
  \ifMT@selected
2614
 
    \let\MT@set@ex@codes\MT@set@ex@codes@s
2615
 
  \else
2616
 
    \let\MT@set@ex@codes\MT@set@ex@codes@n
2617
 
  \fi
2618
 
  \ifnum\MT@stretch=\z@
2619
 
    \ifnum\MT@shrink=\z@
2620
 
      \MT@warning@nl{%
2621
 
        Both the stretch and shrink limit are set to zero.\MessageBreak
2622
 
        Disabling font expansion}
2623
 
      \MT@expansionfalse
2624
 
    \fi
2625
 
  \fi
2626
 
\fi
2627
 
\ifMT@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'}%
2635
 
  }{%
2636
 
    \global\let\MT@ex@setname\MT@default@ex@set
2637
 
    \MT@info@nl{Using default expansion set `\MT@ex@setname'}%
2638
 
  }
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{%
2644
 
    \setbox0\vbox{%
2645
 
      \color@begingroup
2646
 
      \pdfadjustspacing\z@
2647
 
      \everypar{}%
2648
 
      \parfillskip\z@skip\hsize\maxdimen
2649
 
      \normalfont
2650
 
      \pretolerance\m@ne\tolerance\m@ne\hbadness\z@\showboxdepth\z@\ #1%
2651
 
      \color@endgroup}}
2652
 
\else
2653
 
  \let\MT@expansion\relax
2654
 
  \MT@info@nl{No font expansion}
2655
 
\fi
2656
 
\endinput
2657
 
%%
2658
 
%% End of file `microtype.sty'.