zip the unpacked directory below distrib
[latex2e.git] / base / ltoutenc.dtx
bloba35ac2baa4ec91e06dcda519c6c56f9bb5784141
1 % \iffalse meta-comment
3 % Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009
4 % The LaTeX3 Project and any individual authors listed elsewhere
5 % in this file. 
6
7 % This file is part of the LaTeX base system.
8 % -------------------------------------------
9
10 % It may be distributed and/or modified under the
11 % conditions of the LaTeX Project Public License, either version 1.3c
12 % of this license or (at your option) any later version.
13 % The latest version of this license is in
14 %    http://www.latex-project.org/lppl.txt
15 % and version 1.3c or later is part of all distributions of LaTeX 
16 % version 2005/12/01 or later.
17
18 % This file has the LPPL maintenance status "maintained".
19
20 % The list of all files belonging to the LaTeX base distribution is
21 % given in the file `manifest.txt'. See also `legal.txt' for additional
22 % information.
23
24 % The list of derived (unpacked) files belonging to the distribution 
25 % and covered by LPPL is defined by the unpacking scripts (with 
26 % extension .ins) which are part of the distribution.
27
28 % \fi
29 % \iffalse
30 %%% From File: ltoutenc.dtx
31 %\NeedsTeXFormat{LaTeX2e}[2000/06/01]
32 %<OT1>\ProvidesFile{ot1enc.def}
33 %<T1>\ProvidesFile{t1enc.def}
34 %<OMS>\ProvidesFile{omsenc.def}
35 %<OML>\ProvidesFile{omlenc.def}
36 %<OT4>\ProvidesFile{ot4enc.def}
37 %<TS1>\ProvidesFile{ts1enc.def}[2001/06/05 v3.0e (jk/car/fm)
38 %<package>\ProvidesPackage{fontenc}
39 %<TS1sty>\ProvidesPackage{textcomp}
40 %<OT1|T1|OMS|OML|OT4|package|TS1sty> [2005/09/27 v1.99g
41 %<OT1|T1|OMS|OML|OT4|TS1>         Standard LaTeX file]
42 %<package|TS1sty>                 Standard LaTeX package]
44 %<*driver>
45 % \fi
46 \ProvidesFile{ltoutenc.dtx}
47              [2009/11/04 v1.99l LaTeX Kernel (font encodings)]
48 % \iffalse
49 \documentclass{ltxdoc}
50 \GetFileInfo{ltoutenc.dtx}
51 \title{\filename}
52 \date{\filedate}
53 \author{%
54   Johannes Braams\and
55   David Carlisle\and
56   Alan Jeffrey\and
57   Frank Mittelbach\and
58   Chris Rowley\and
59   Rainer Sch\"opf}
60 \usepackage{textcomp}
61 \begin{document}
62    \maketitle
63    \DocInput{\filename}
64 \end{document}
65 %</driver>
66 % \fi
68 % \CheckSum{2802}
70 % \CharacterTable
71 %  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
72 %   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
73 %   Digits        \0\1\2\3\4\5\6\7\8\9
74 %   Exclamation   \!     Double quote  \"     Hash (number) \#
75 %   Dollar        \$     Percent       \%     Ampersand     \&
76 %   Acute accent  \'     Left paren    \(     Right paren   \)
77 %   Asterisk      \*     Plus          \+     Comma         \,
78 %   Minus         \-     Point         \.     Solidus       \/
79 %   Colon         \:     Semicolon     \;     Less than     \<
80 %   Equals        \=     Greater than  \>     Question mark \?
81 %   Commercial at \@     Left bracket  \[     Backslash     \\
82 %   Right bracket \]     Circumflex    \^     Underscore    \_
83 %   Grave accent  \`     Left brace    \{     Vertical bar  \|
84 %   Right brace   \}     Tilde         \~}
86
87 % \changes{v1.99e}{2004/02/13}{Documentation fixes: typos}
88 % \changes{v1.9k}{1998/01/12}{Added \cs{ProvidesPackage}
89 %    for textcomp.sty}
90 % \changes{v1.9i}{1997/12/19}{Documentation corrections.}
91 % \changes{v1.9h}{1997/12/17}{Documentation changes and additions.}
92 % \changes{v1.9h}{1997/12/17}{Added textcomp.sty.}
93 % \changes{v1.9f}{1997/08/29}{Added OT4 encoding,
94 %    provided by Marcin Woli\'nski.}
95 % \changes{v1.7r}{1995/11/28}{doc fixes}
96 % \changes{v1.7h}{1995/04/21}{Added \cs{null} \cs{k}  latex/1274}
97 % \changes{v1.7f}{1994/12/14}{Added braces to \cs{copyright} so it
98 %    works unbraced in subscripts.} 
99 % \changes{v1.7f}{1994/12/14}{Added check for math mode in
100 %    \cs{@changed@cmd}.} 
101 % \changes{v1.7f}{1994/12/14}{Commented out \cs{textasciicircum},
102 %    \cs{textasciitilde}, \cs{textbackslash}, \cs{textbar},
103 %    \cs{textgreater}, \cs{texthyphenchar}, \cs{texthyphen} and
104 %    \cs{textless} to save memory.}
105 % \changes{v1.7e}{1994/12/10}{Added documentation for the OML encoding.}
106 % \changes{v1.7e}{1994/12/10}{Replaced width with \cs{@width} and
107 %    ditto height in vrules.}
108 % \changes{v1.7d}{1994/12/08}{Added \cs{null} and \cs{sh@ft} to \cs{b}
109 %    and \cs{d}.}
110 % \changes{v1.7c}{1994/12/05}{Added braces to \cs{textcircled}.}
111 % \changes{v1.7b}{1994/12/02}{Fixed a bug with \cs{a}.}
112 % \changes{v1.7a}{1994/11/30}{Added new code for encoding-specific
113 %    commands.  These now expand in the mouth, which means that
114 %    ligaturing and kerning can happen.}
115 % \changes{v1.6i}{1994/11/22}{Fixed empty accents.  Again.}
116 % \changes{v1.6i}{1994/11/22}{Corrected \cs{dots} so that there's no
117 %    kerning in monowidth fonts.}
118 % \changes{v1.6i}{1994/11/22}{Corrected typo with
119 %    \cs{mathunderscore}.} 
120 % \changes{v1.6h}{1994/11/17}{(DPC) \cs{@tempa} to \cs{reserved@a}}
121 % \changes{v1.6d}{1994/11/02}{Wrapped lines longer than 70 characters.}
122 % \changes{v1.6d}{1994/10/30}{Added math commands.}
123 % \changes{v1.6d}{1994/10/30}{Added OML encoding.}
124 % \changes{v1.6d}{1994/10/30}{Added \cs{textcircled}.}
125 % \changes{v1.6d}{1994/10/30}{Added \cs{DeclareTextCompositeCommand}.}
126 % \changes{v1.6c}{1994/10/29}{Renamed \cs{P}, \cs{S}, \cs{dag} and 
127 %    \cs{ddag} to \cs{textparagraph}, \cs{textsection},
128 %    \cs{textdagger} and \cs{textdaggerdbl}.}
129 % \changes{v1.6b}{1994/10/27}{Removed the enc.def files}
130 % \changes{v1.6a}{1994/10/25}{Added \cs{ProvideTextCommand},
131 %    \cs{UseTextSymbol},
132 %    \cs{UseTextAccent},
133 %    \cs{DeclareTextSymbolDefault},
134 %    \cs{DeclareTextAccentDefault},
135 %    \cs{DeclareTextCommandDefault}, and
136 %    \cs{ProvideTextCommandDefault}.}
137 % \changes{v1.5m}{1994/10/18}{Added new definitions of \cs{patterns}
138 %    and \cs{hyphenation}.}
139 % \changes{v1.5l}{1994/10/07}{Moved the ogonek accent.}
140 % \changes{v1.5k}{1994/05/18}{Removed braces from \cs{pounds} and
141 %    \cs{dollar}.}
142 % \changes{v1.5k}{1994/05/18}{Replaced \cs{defaultencoding} with
143 %    \cs{encodingdefault}.}
144 % \changes{v1.5k}{1994/05/18}{Made dotted-i produce `i'.}
145 % \changes{v1.5j}{1994/05/17}{Added braces to \cs{pounds} so it works
146 %    as a subscript.}
147 % \changes{v1.5i}{1994/05/16}{Fixed a bug with \cs{d}.}
148 % \changes{v1.5h}{1994/05/16}{Added \cs{NG}, \cs{ng}, \cs{TH},
149 %    \cs{th}, \cs{DH}, \cs{dh}, \cs{DJ} and \cs{dj}.}
150 % \changes{v1.5h}{1994/05/16}{Added \cs{r} (ring accent) and \cs{k}
151 %    (ogonek) accents.}
152 % \changes{v1.5h}{1994/05/16}{Removed \cs{P} from the OT1 definitions
153 %    file.}
154 % \changes{v1.5h}{1994/05/16}{Fixed a bug with \cs{pounds}.}
155 % \changes{v1.5g}{1994/05/16}{Made fontenc.sty use the new mixed-case
156 %    encoding files.}
157 % \changes{v1.5f}{1994/05/16}{Revert code so that the encoding
158 %                    given is used in \cs{DeclareTextCommand} (FMi)}
159 % \changes{v1.5f}{1994/05/16}{enc files now have uc encoding name
160 %                             parts (FMi)}
161 % \changes{v1.5e}{1994/05/14}{Replaced \cs{ENC@cmd} by \cs{ENC-cmd}.}
162 % \changes{v1.5d}{1994/05/14}{Rewrote \cs{DeclareTextCommand} to define
163 %    its argument to use the current encoding by default, rather than
164 %    the encoding provided to \cs{DeclareTextCommand}.}
165 % \changes{v1.5d}{1994/05/14}{Tidied up the documentation.}
166 % \changes{v1.5c}{1994/05/14}{Added the fontenc package.}
167 % \changes{v1.5c}{1994/05/14}{Fixed a bug which caused an infinite loop
168 %    if \cs{f@encoding} was incorrectly set.}
169 % \changes{v1.5c}{1994/05/14}{Moved fontsmpl to its own dtx file.}
170 % \changes{v1.5b}{1994/05/13}{Added \cmd\{, \cmd\} and \cmd\$.}
171 % \changes{v1.5b}{1994/05/13}
172 %    {Replaces \cs{space} by `~' in \cs{csname}.}
173 % \changes{v1.5b}{1994/05/13}{Renamed \cs{DeclareProtectedCommand} to
174 %    \cs{DeclareRobustCommand}.}
175 % \changes{v1.5a}{1994/05/11}{Renamed the commands again.  Made the
176 %    encoding part of the command syntax.  Added the
177 %    \cs{DeclareTextCommand} interface.  Used
178 %    \cs{DeclareProtectedCommand}.}
179 % \changes{v1.4a}{1994/05/01}{Renamed the commands, removed the
180 %    \cs{EncodingSpecific} command.  Turned all slots into decimal.
181 %    Added \cs{a}.}
182 % \changes{v1.4a}{1994/05/01}{Removed Rokicki's encoding.}
183 % \changes{v1.3d}{1993/12/18}{Some T1 stuff had drifted into the OT1
184 %    file.}
185 % \changes{v1.3c}{1993/12/18}{A new syntax, separating
186 %    accent-definitions from encoing-specific definitions, and
187 %    allowing encoding-specific \cs{chardef}, \cs{let}, etc.}
188 % \changes{v1.3c}{1993/12/18}{Rewrote for the new syntax of
189 %    \cs{EncodingSpecific}.}
190 % \changes{v1.3b}{1993/12/18}{Corrected typos.}
191 % \changes{v1.3b}{1993/12/18}{Replaced the missing last argument to
192 %    \cs{DeclareFontEncoding}.}
193 % \changes{v1.3a}{1993/12/18}{Replaced OT3 by XXX}
194 % \changes{v1.3}{1993/12/17}{Added \cs{EncodingSpecificAccent},
195 %   \cs{EncodingSpecificAccentedLetter} and
196 %   \cs{EncodingSpecificCommand}.}
197 % \changes{v1.3}{1993/12/17}{Made Rokicki's encoding a proper encoding
198 %    scheme rather than a variant of OT1.}
199 % \changes{v1.2b}{1993/12/13}{Corrected file name in driver code.}
200 % \changes{v1.2a}{1993/12/11}{Corrected for t1enc, math.}
201 % \changes{v1.2}{1993/12/10}{Added source code for t1enc.sty.}
202 % \changes{v1.1}{1993/12/07}{Made all character numbers decimal.}
203 % \changes{v1.1}{1993/12/07}{Removed a lot of equal signs and the 
204 %   like.}
207 % \section{Font encodings}
209 %    This section of the kernel contains commands for declaring
210 %    encoding-specific
211 %    commands, such as accents.  It also contains the code for some of
212 %    the encoding files, including |omlenc.def|,
213 %    |omsenc.def|, |t1enc.def| and |ot1enc.def| files, which define
214 %    the |OLM|,
215 %    |OMS|, |T1| and |OT1| encodings, and the |fontenc| package
216 %    for selecting encodings.
218 %    The |fontenc| package has options for encodings, of which the
219 %    last option is the default encoding.  For example, to use the
220 %    |OT2|, |OT3| and |T1| encodings, with |T1| as the default, you
221 %    say: 
222 %\begin{verbatim}
223 %    \usepackage[OT2,OT3,T1]{fontenc}
224 %\end{verbatim}
225 %    The standard kernel set-up loads font encoding files and selects
226 %    an encoding as follows.
227 %\begin{verbatim}
228 %    \input {omlenc.def}
229 %    \input  {t1enc.def}
230 %    \input {ot1enc.def}
231 %    \input {omsenc.def}
232 %    \fontencoding{OT1}
233 %\end{verbatim}
234 %    Note that the files in the standard |inputenc| package depend on
235 %    this behaviour of the kernel.
236 %    
237 %    The syntax for declaring encoding-specific commands is:
238 %    \begin{quote}
239 %      |\DeclareTextCommand{|^^A
240 %         \meta{command}|}{|^^A
241 %         \meta{encoding}|}|\\\hspace*{\fill}|[|^^A
242 %         \meta{number}|][|^^A
243 %         \meta{default}|]{|^^A
244 %         \meta{commands}|}|
245 %    \end{quote}
246 %    This command is like |\newcommand|, except that it defines a
247 %    command which is specific to one encoding.  The resulting command
248 %    is always robust, even if its definition is fragile.  For example,
249 %    the definition of |\l| in the |OT1| encoding is:
250 %\begin{verbatim}
251 %    \DeclareTextCommand{\l}{OT1}{{\@xxxii l}}
252 %\end{verbatim}
253 %    |\DeclareTextCommand| takes the same optional arguments as
254 %    |\newcommand|.
255 %    \begin{quote}
256 %      |\ProvideTextCommand{|^^A
257 %         \meta{command}|}{|^^A
258 %         \meta{encoding}|}|\\\hspace*{\fill}|[|^^A
259 %         \meta{number}|][|^^A
260 %         \meta{default}|]{|^^A
261 %         \meta{commands}|}|
262 %    \end{quote}
263 %    This acts like |\DeclareTextCommand|, but does nothing if the 
264 %    command is already defined.
265 %    \begin{quote}
266 %      |\DeclareTextSymbol{|^^A
267 %         \meta{command}|}{|^^A
268 %         \meta{encoding}|}{|^^A
269 %         \meta{slot}|}|
270 %    \end{quote}
271 %    This command defines a text symbol, with a particular slot in that
272 %    encoding.  The commands:
273 % \changes{v1.9h}{1997/12/17}{Example corrected, braces removed.}
274 %\begin{verbatim}
275 %    \DeclareTextSymbol{\ss}{OT1}{25}
276 %    \DeclareTextCommand{\ss}{OT1}{\char25 }
277 %\end{verbatim}
278 %    have the same effect, but the |\DeclareTextSymbol| is faster.
279 %    \begin{quote}
280 %      |\DeclareTextAccent{|^^A
281 %         \meta{command}|}{|^^A
282 %         \meta{encoding}|}{|^^A
283 %         \meta{slot}|}|
284 %    \end{quote}
285 % \changes{v1.8e}{1996/11/23}{Corrected description}
286 % \changes{v1.9k}{1997/12/31}{Further correction}
287 %    This command declares a text accent.  The commands:
288 %\begin{verbatim}
289 %    \DeclareTextAccent{\"}{OT1}{127}
290 %    \DeclareTextCommand{\"}{OT1}{\add@accent {127}}
291 %\end{verbatim}
292 %    have the same effect.
293 % \changes{v1.8c}{1996/10/27}
294 %      {Corrected syntax descriptions}
295 %    \begin{quote}
296 %      |\DeclareTextComposite{|^^A
297 %          \meta{command}|}|\\\hspace*{\fill}|{|^^A
298 %         \meta{encoding}|}{|^^A
299 %         \meta{argument}|}{|^^A
300 %             \meta{slot}|}|
301 %    \end{quote}
302 %    This command declares a composite letter, for example in the |T1|
303 %    encoding |\'{a}| is slot 225, which is declared by:
304 %\begin{verbatim}
305 %    \DeclareTextComposite{\'}{T1}{a}{225}
306 %\end{verbatim}
307 % \changes{v1.8e}{1996/11/23}
308 %      {Corrected description}
309 %    The \emph{command} will normally have been declared with
310 %    |\DeclareTextAccent|, or as a one-argument |\DeclareTextCommand|.
312 %    |\DeclareTextComposite| is the most common example of using 
313 %    the more general declaration
314 %    |\DeclareTextCompositeCommand|, which can define a composite 
315 %    to be an arbitrary piece of text.
316 %    \begin{quote}
317 %      |\DeclareTextCompositeCommand{|^^A
318 %          \meta{command}|}|\\\hspace*{\fill}|{|^^A
319 %         \meta{encoding}|}{|^^A
320 %         \meta{argument}|}{|^^A
321 %             \meta{text}|}|
322 %    \end{quote}
323 %    For example, in the OT1 encoding \r A has a hand-crafted
324 %    defintion this is declared as follows
325 %\begin{verbatim}
326 %    \DeclareTextCompositeCommand{\r}{OT1}{A}
327 %     {\leavevmode\setbox\z@\hbox{!}\dimen@\ht\z@\advance\dimen@-1ex%
328 %      \rlap{\raise.67\dimen@\hbox{\char23}}A} 
329 %\end{verbatim}
330 % \changes{v1.8e}{1996/11/23}
331 %      {Corrected description}
332 %    The \emph{command} will normally have been declared with
333 %    |\DeclareTextAccent|, or as a one-argument |\DeclareTextCommand|.
335 %    The commands defined using the above declarations can be used in
336 %    two ways.
337 %    Normally they are used by just calling the command in the 
338 %    appropriate encoding, for example |\ss|.  However, sometimes you
339 %    may wish to use a command in an encoding where it is not defined.
340 %    If the command has no arguments, then you can use it in another 
341 %    encoding by calling |\UseTextSymbol|:
342 %    \begin{quote}
343 %      |\UseTextSymbol{|^^A
344 %         \meta{encoding}|}{|^^A
345 %         \meta{command}|}|
346 %    \end{quote}
348 % \task{?}{Document the problems of these commands, see pr/3160}
349 % \changes{v1.9e}{1997/08/05}{Corrected order of arguments in
350 %          \cs{UseTextSymbol} example.}
351 %    For example, |\UseTextSymbol{OT1}{\ss}| has the same effect as: 
352 %\begin{verbatim}
353 %    {\fontencoding{OT1}\selectfont\ss}
354 %\end{verbatim}
355 %    If the command has one argument then you can use it in another
356 %    encoding by calling  
357 %    |\UseTextAccent|: 
358 %    \begin{quote}
359 %      |\UseTextAccent{|^^A
360 %         \meta{encoding}|}{|^^A
361 %         \meta{command}|}{|^^A
362 %         \meta{text}|}|
363 %    \end{quote}
364 %    For example, if the current encoding is |OT2| then 
365 %    |\UseTextAccent{OT1}{\'}{a}| has the same effect as:
366 %\begin{verbatim}
367 %    {\fontencoding{OT1}\selectfont\'{\fontencoding{OT2}\selectfont a}}
368 %\end{verbatim}
369 % \changes{v1.8e}{1996/11/23}
370 %      {Extended description}
371 %    You can also declare a default definition for a text command, which
372 %    will be used if the current encoding has no appropriate definition.
373 %    Such use will also set the definition for this command in the
374 %    current encoding to equal this default definition; this makes
375 %    subsequent uses of the command much faster.
376 %    \begin{quote}
377 %      |\DeclareTextCommandDefault{|^^A
378 %         \meta{command}|}{|^^A
379 %         \meta{definition}|}|
380 %    \end{quote}
381 %    For example, the default definition of the command
382 %    |\textonequarter| (which produces the fraction $\frac14$) could be
383 %    built using math mode: 
384 %\begin{verbatim}
385 %    \DeclareTextCommandDefault{\textonequarter}{\ensuremath {\frac14}}
386 %\end{verbatim}
387 %    There is a matching |\Provide| command which will not override an 
388 %    existing default definition: 
389 %    \begin{quote}
390 %      |\ProvideTextCommandDefault{|^^A
391 %         \meta{command}|}{|^^A
392 %         \meta{definition}|}|
393 %    \end{quote}
394 %    The most common use for these commands is to use symbols from
395 %    other encodings, so there are some optimizations provided:
396 %    \begin{quote}
397 %      |\DeclareTextSymbolDefault{|^^A
398 %         \meta{command}|}|^^A
399 %         \meta{encoding}|}|\\
400 %      |\DeclareTextAccentDefault{|^^A
401 %         \meta{command}|}|^^A
402 %         \meta{encoding}|}|
403 %    \end{quote}
404 %    are short for:
405 %    \begin{quote}
406 %      |\DeclareTextCommandDefault{|^^A
407 %         \meta{command}|}|\\\hspace*{\fill}^^A
408 %         |{\UseTextSymbol{|^^A
409 %         \meta{encoding}|}{|\meta{command}|}}| \\
410 %      |\DeclareTextCommandDefault[1]{|^^A
411 %         \meta{command}|}|\\\hspace*{\fill}^^A
412 %         |{\UseTextAccent{|^^A
413 %         \meta{encoding}|}{|\meta{command}|}{#1}}| 
414 %    \end{quote}
415 %    For example, to make |OT1| the default encoding for |\ss| and
416 %    |\'| you say:
417 %\begin{verbatim}
418 %    \DeclareTextSymbolDefault{\ss}{OT1}
419 %    \DeclareTextAccentDefault{\'}{OT1}
420 %\end{verbatim}
421 %    Note that you can use these commands on any zero- or one-argument 
422 %    commands declared with |\DeclareText*| or |\ProvideText*|, not
423 %    just those defined using |\DeclareTextSymbol| or
424 %    |\DeclareTextAccent|. 
426 % \subsection{Removing encoding-specific commands}
427 %    \label{sec:removeencspec}
429 % \changes{v1.9o}{1998/03/20}{Documentation added for pr/2783}
431 % In some cases encoding definitions are given to provide some limited
432 % support since nothing better is available, for example, the definition
433 % for |\textdollar| in \texttt{OT1} is a hack since \$ and \pounds{}
434 % actually share the same slot in this encoding. Thus if such a glyph
435 % becomes available in a different encoding (e.g., \texttt{TS1}) one
436 % would like to get rid of the flacky one and make the default
437 % definition point to the new encoding. In such a case defining
438 %\begin{verbatim}
439 %   \DeclareTextSymbol{\textdollar}{TS1}{36}
440 %   \DeclareTextSymbolDefault{\textdollar}{TS1}
441 %\end{verbatim}
442 % is not enough since if typesetting in \texttt{OT1} \LaTeX{} will
443 % still find the encoding specific-definition for \texttt{OT1} and
444 % therefore ignore the new default.
445 % Therefore to ensure that in this case the \texttt{TS1} version is
446 % used  we have to remove the \texttt{OT1} declaration:
447 %\begin{verbatim}
448 %   \UndeclareTextCommand{\textdollar}{OT1}
449 %\end{verbatim}
451 % Since the \$ sign is a proper glyph in the \texttt{T1} encoding there
452 % is no point removing its definition and forcing \LaTeX{} to pick up
453 % the \texttt{TS1} version if typesetting in this encoding.
454 % However, assume you want to use the variant dollar sign,
455 % i.e., \textdollaroldstyle{}
456 % for your dollars. In that case you have to get rid of the \texttt{T1}
457 % declaration as well, e.g., the following would do that for you:
458 %\begin{verbatim}
459 %   \UndeclareTextCommand{\textdollar}{OT1}
460 %   \UndeclareTextCommand{\textdollar} {T1}
461 %   \DeclareTextCommandDefault{\textdollar}
462 %                             {\UseTextSymbol{TS1}\textdollaroldstyle}
463 %\end{verbatim}
465 % \subsection{The order of declarations}\label{sec:orderofdecls}
467 % \changes{v1.9o}{1998/03/20}{Documentation added about order of decls}
469 % If an encoding-specific command is defined for more than one encoding,
470 % then it will execute fastest in the encoding in which it was defined
471 % last since its top-level definition will be set up to execute in that
472 % encoding without any overhead.
474 % For this reason the file \texttt{fonttext.ltx} currently first loads
475 % the definitions for the \texttt{T1} encoding and then those for the
476 % \texttt{OT1} encoding so that typesetting in \texttt{OT1} is optimized
477 % since that is (still) the default. However, when \texttt{T1} is
478 % explicitly requested (via |\usepackage[T1]{fontenc}|) the
479 % top-level definitions are automatically changed to favour
480 % \texttt{T1} since its declarations are reloaded in the process.
482 % For the same reason default declarations should never come last since
483 % they are implemented as a special encoding themselves (with the
484 % name |?|).
485 % Specifying them last would simply mean to make those encoding-specific 
486 % commands equally inefficient in all encodings. Therefore the
487 % \texttt{textcomp} package, for example, first sets up all defaults
488 % to point to \texttt{TS1} and then declares the commands in the
489 % \texttt{TS1} encoding.
492 % \StopEventually{}
494 % \subsection{Docstrip modules}
496 %    This |.dtx| file is be used to generate several related files
497 %    containing font encoding definitions. The mutually exclusive 
498 %    docstrip options are listed here.
499 %    \begin{center}
500 %    \begin{tabular}{lp{10cm}}
501 %      |T1|       & generates |t1enc.def| for the Cork encoding. \\
502 %      |TS1|      & generates |ts1enc.def| for the Text Companion
503 %                   encoding. \\
504 %      |TS1sty|   & generates |textcomp.sty|, package that sets up use
505 %                   of the Text Companion encoding. \\
506 %      |OT1|      & generates |ot1enc.def| for Knuth's CM encoding. \\
507 %      |OMS|      & generates |omsenc.def| for Knuth's 
508 %                   math symbol encoding. \\
509 %      |OML|      & generates |omlenc.def| for Knuth's 
510 %                   math letters encoding. \\
511 %      |OT4|      & generates |ot4enc.def| for the Polish extension to
512 %                   the OT1 encoding, created by B.~Jackowski and
513 %                   M.~Ry\'cko for use with the Polish version of
514 %                   Computer Modern and Computer Concrete.\\
515 %      |package|  & generates |fontenc.sty| for 
516 %                   selecting encodings. \\
517 %      |2ekernel| & for the kernel commands.\\
518 %      |autoload| & for the `autoload' kernel commands.\\
519 %      |autoerr|  & for the autoerr.sty error message autoload file.
520 %    \end{tabular}
521 %    \end{center}
522 % \changes{1.0d}{1993/07/17}{changed \cs{catcoding} @}
523 % \changes{1.0f}{1993/08/13}{Protected against active @ sign.}
524 % \changes{1.0g}{1993/08/16}{Needs space after \cs{string}}
525 % \changes{1.1}{1993/12/07}{Protected all special characters with
526 %                          \cs{string}.}
527 % \changes{1.3}{1993/12/17}{Removed the catcode hackery, since the file
528 %    is only read as a package in the preamble, and removed all the
529 %    messages on the screen, which just confuse users.  Replaced them
530 %    by the appropriate \cs{ProvidesPackage} commands. Added XXXenc.}
531 % \changes{1.3b}{1993/12/18}
532 %   {Fixed typos with \cs{ProvidesPackage} lines.
533 %    Added the \cs{NeedsTeXFormat} line.  Added the last argument to
534 %    \cs{DeclareEncoding}. Moved the use of the encodings to after their
535 %    declaration. }
536 % \changes{1.4a}{1994/04/29}{Removed Rokicki's OT1 variant encoding.
537 %    Moved the driver to the top.}
538 % \changes{1.5a}{1994/05/11}{Made T1 and OT1 generate packages rather
539 %    than def files.  Renamed the `package' module to `teststy'.}
540 % \changes{1.5d}{1994/05/14}{Moved the driver to the top.}
542 % \subsection{Definitions for the kernel}
544 % \subsubsection{Declaration commands}
546 % \changes{1.3}{1993/12/17}{Added this section}
547 % \changes{1.3c}{1993/12/18}{Split \cs{EncodingSpecificAccent} up into
548 %    \cs{EncodingSpecific} and \cs{DeclareAccent}.}
549 % \changes{1.4a}{1994/04/29}{Removed \cs{EncodingSpecific}.  Renamed
550 %    all the commands.  Added \cs{DeclareTextGlyph} and
551 %    \cs{UndeclareTextCommand}.}
552 % \changes{v1.5a}{1994/05/11}{Reimplemented \cs{DeclareTextCommand}
553 %    using \cs{@changed@cmd} and \cs{DeclareProtectedCommand}.}
554 % \changes{v1.5c}{1994/05/14}{Fixed a bug which caused an infinite loop
555 %    if \cs{f@encoding} was incorrectly set.}
556 % \changes{v1.5d}{1994/05/14}{Rewrote \cs{DeclareTextCommand} to define
557 %    its argument to use the current encoding by default, rather than
558 %    the encoding provided to \cs{DeclareTextCommand}.}
559 % \changes{v1.6a}{1994/10/25}{Added the \cs{Provide} commands,
560 %    and the default definitions.}
562 % This section contains definitions for commands such as accents which
563 % depend on the current encoding.  These commands will usually be kept
564 % in |.def| files, for example |ot1enc.def| contains the definitions
565 % for the |OT1| encoding.
566 %    \begin{macrocode}
567 %<*2ekernel|autoload>
568 \message{font encodings,}
569 %    \end{macrocode}
571 % \changes{v1.5d}{1994/10/27}{Rewrote \cs{DeclareTextSymbol} to define
572 %    its argument to use the current encoding by default, to fit with 
573 %    \cs{DeclareTextCommand}.}
575 % \changes{v1.7a}{1994/11/30}{Redefined \cs{@changed@cmd} to expand in
576 %    the mouth.}
577 % \changes{v1.7a}{1994/11/30}{Removed \cs{@changed@x@mouth} since
578 %    \cs{@changed@x} now expands in the mouth.}
580 % \changes{v1.7r}{1995/11/28}{Renamed \cs{@changed@x@err} to
581 %    \cs{TextSymbolUnavailable}.}
582 % \changes{v1.7r}{1995/11/28}{Added math mode checks to text commands.}
583 % Far too many macros in one block here!
584 % \begin{macro}{\DeclareTextCommand}
585 % \begin{macro}{\ProvideTextCommand}
586 % \begin{macro}{\DeclareTextSymbol}
587 % \begin{macro}{\@dec@text@cmd}
588 % \begin{macro}{\chardef@text@cmd}
589 % \begin{macro}{\@changed@cmd}
590 % \begin{macro}{\@changed@x}
591 % \begin{macro}{\TextSymbolUnavailable}
592 % \begin{macro}{\@inmathwarn}
593 %    If you say:
594 %\begin{verbatim}
595 %    \DeclareTextCommand{\foo}{T1}...
596 %\end{verbatim}
597 %    then |\foo| is defined to be |\T1-cmd \foo \T1\foo|,
598 %    where |\T1\foo| is \emph{one} control sequence, not two!
599 %    We then call |\newcommand| to define |\T1\foo|.
600 %    \begin{macrocode}
601 \def\DeclareTextCommand{%
602    \@dec@text@cmd\newcommand}
603 %    \end{macrocode}
605 %    \begin{macrocode}
606 \def\ProvideTextCommand{%
607    \@dec@text@cmd\providecommand}
608 %    \end{macrocode}
610 %    \begin{macrocode}
611 \def\@dec@text@cmd#1#2#3{%
612    \expandafter\def\expandafter#2%
613       \expandafter{%
614          \csname#3-cmd\expandafter\endcsname
615          \expandafter#2%
616          \csname#3\string#2\endcsname
617       }%
618    \let\@ifdefinable\@rc@ifdefinable
619    \expandafter#1\csname#3\string#2\endcsname}
620 %    \end{macrocode}
621 % \changes{v1.99d}{2004/02/06}{New command added to fix
622 %     severe bug: pr/3563}
623 %    This command was introduced to fix a major bug
624 %    in |\@dec@text@cmd| without changing that command itself.
625 %    This was thought to be necessary because it is defined
626 %    in more than one package. (Perhaps the more serious bug is to put
627 %    complex low-level commands like this in packages?)
629 %    The problem it solves is that whereas both |\newcommand| and
630 %    |\providecommand| (used just above) both handle the 
631 %    resetting of |\@ifdefinable| (following its disabling in
632 %    |\@dec@text@cmd|), the primitive |\chardef| neither needs the
633 %    disabling, nor does the resetting.
635 %    \begin{macrocode}
636 \def\chardef@text@cmd{%
637    \let\@ifdefinable\@@ifdefinable
638    \chardef
639   }
640 \def\DeclareTextSymbol#1#2#3{%
641    \@dec@text@cmd\chardef@text@cmd#1{#2}#3\relax
642   }
643 %    \end{macrocode}
645 %    The declarations are only available before |\begin{document}|.
646 % \changes{v1.7h}{1995/05/21}{Added several \cs{@onlypreamble}}
647 % \changes{v1.7k}{1995/06/05}{Removed \cs{protected@cmd} and replaced
648 %    with explicit \cs{noexpand}.}
649 %    \begin{macrocode}
650 \@onlypreamble\DeclareTextCommand
651 \@onlypreamble\DeclareTextSymbol
652 %    \end{macrocode}
653 %    The sneaky bit in all this is what |\T1-cmd \foo \T1\foo| does.  
654 %    There are five possibilities, depending on the current values of
655 %    |\protect|, |\cf@encoding| and |\ifmmode|:
656 %    \begin{itemize}
657 %    \item If |\protect| is |\@typeset@protect| and |\cf@encoding| is
658 %       |T1|, then we execute |\T1\foo|.  This should be the normal
659 %       behaviour, and is optimized for speed.
660 %    \item If |\protect| is |\@typeset@protect|, |\cf@encoding| is
661 %       (say) |OT1|, and |\OT1\foo| is defined, then we execute
662 %       |\OT1\foo|. 
663 %    \item If |\protect| is |\@typeset@protect|, |\cf@encoding| is
664 %       (say) |OT1|, we're in text mode,
665 %       and |\OT1\foo| is undefined, then we define
666 %       |\OT1\foo| to be the default value of |\foo|, and execute
667 %       |\OT1\foo|. 
668 %    \item If |\protect| is |\@typeset@protect|, |\cf@encoding| is
669 %       (say) |OT1|, we're in math mode,
670 %       and |\OT1\foo| is undefined, then we execute the default value
671 %       of |\foo|.  (This is necessary so that things like
672 %       |$X_\copyright$| work properly.)
673 %    \item If |\protect| is not |\@typeset@protect| then we execute
674 %       |\noexpand\foo|.  For example, if we are writing to a file,
675 %       then this results in |\foo| being written.  If we are in a
676 %       |\mark|, then |\foo| will be put in the mark---since |\foo| is
677 %       robust, it will then survive all the things which may happen
678 %       to it whilst it's a |\mark|.
679 %    \end{itemize}
680 %    So after all that, we will either execute the appropriate
681 %    definition of |\foo| for the current encoding, or we will execute
682 %    |\noexpand\foo|.
684 %    The default value of |\foo| is |\?\foo| if it is defined, and an
685 %    error message otherwise.
687 %    When the encoding is changed from |T1| to |OT1|, |\T1-cmd| is
688 %    defined to be |\@changed@cmd| and |\OT1-cmd| is defined to be
689 %    |\@current@cmd|.  This means that the test for what the current
690 %    encoding is can be performed quickly.
691 %    \begin{macrocode}
692 \def\@current@cmd#1{%
693    \ifx\protect\@typeset@protect
694       \@inmathwarn#1%
695    \else
696       \noexpand#1\expandafter\@gobble
697    \fi}
698 %    \end{macrocode}
700 %    \begin{macrocode}
701 \def\@changed@cmd#1#2{%
702    \ifx\protect\@typeset@protect
703       \@inmathwarn#1%
704       \expandafter\ifx\csname\cf@encoding\string#1\endcsname\relax
705          \expandafter\ifx\csname ?\string#1\endcsname\relax
706             \expandafter\def\csname ?\string#1\endcsname{%
707                \TextSymbolUnavailable#1%
708             }%
709          \fi
710          \global\expandafter\let
711                \csname\cf@encoding \string#1\expandafter\endcsname
712                \csname ?\string#1\endcsname
713       \fi
714       \csname\cf@encoding\string#1%
715          \expandafter\endcsname
716    \else
717       \noexpand#1%
718    \fi}
719 %    \end{macrocode}
720 % \changes{v1.7m}{1995/10/09}{Autoload error}
721 % \changes{v1.7v}{1995/12/05}{Changed \cs{TextSymbolUnavailable} text}
722 %    \begin{macrocode}
723 %</2ekernel|autoload>
724 %<*2ekernel|autoerr>
725 \gdef\TextSymbolUnavailable#1{%
726    \@latex@error{%
727       Command \protect#1 unavailable in encoding \cf@encoding%
728    }\@eha}
729 %</2ekernel|autoerr>
730 %<autoload>\gdef\TextSymbolUnavailable{\@autoerr\TextSymbolUnavailable}
731 %<*2ekernel|autoload>
732 %    \end{macrocode}
733 %    The command |\@inmathwarn| produces a warning message if we are
734 %    currently in math mode.  Note that since this command is used
735 %    inside text commands, it can't call |\relax| before the
736 %    |\ifmmode|.  This means that it is possible for the warning to
737 %    fail to be issued at the beginning of a row of an halign whose
738 %    template enters math mode.  This is probably a bad feature, but
739 %    there's not much that can be done about it, since adding a |\relax|
740 %    would break ligatures and kerning between text symbols.
742 %    A more efficient solution would be to make |\@inmathwarn| and
743 %    |\@inmatherr| equal to |\@empty| and |\relax| by default, and 
744 %    to have
745 %    |\everymath| reset them to their usual definitions.  This is left
746 %    for future investigation (for example it may break some third
747 %    party code).
748 %    \begin{macrocode}
749 \def\@inmathwarn#1{%
750    \ifmmode 
751       \@latex@warning{Command \protect#1 invalid in math mode}%
752    \fi}
753 %    \end{macrocode}
754 % \end{macro}
755 % \end{macro}
756 % \end{macro}
757 % \end{macro}
758 % \end{macro}
759 % \end{macro}
760 % \end{macro}
761 % \end{macro}
762 % \end{macro}
764 % \changes{v1.7k}{1995/06/05}{Allowed \cs{ProvideTextCommandDefault}
765 %    after the preamble.} 
767 % \begin{macro}{\DeclareTextCommandDefault}
768 % \begin{macro}{\ProvideTextCommandDefault}
769 %    These define commands with encoding |?|.
771 %    Note that |\DeclareTextCommandDefault| can only be used in the
772 %    preamble, but that the |\Provide| version is allowed in inputenc
773 %    |.def| files, so is allowed anywhere.
774 %    \begin{macrocode}
775 \def\DeclareTextCommandDefault#1{%
776    \DeclareTextCommand#1?}
777 %    \end{macrocode}
779 %    \begin{macrocode}
780 \def\ProvideTextCommandDefault#1{%
781    \ProvideTextCommand#1?}
782 %    \end{macrocode}
784 %    \begin{macrocode}
785 \@onlypreamble\DeclareTextCommandDefault
786 %\@onlypreamble\ProvideTextCommandDefault
787 %    \end{macrocode}
788 %    They require |\?-cmd| to be initialized as |\@changed@cmd|.
789 %    \begin{macrocode}
790 \expandafter\let\csname?-cmd\endcsname\@changed@cmd
791 %    \end{macrocode}
792 % \end{macro}
793 % \end{macro}
795 % \begin{macro}{\DeclareTextAccent}
796 % \changes{v1.5a}{1994/05/11}
797 %      {Reimplemented using \cs{DeclareTextCommand}.}
798 % \changes{v1.7z}{1996/05/23}
799 %      {Reimplemented using \cs{add@accent} to save space latex/2133}
800 %    This is just a disguise for defining a \TeX~|\accent| command.
801 %    \begin{macrocode}
802 \def\DeclareTextAccent#1#2#3{%
803    \DeclareTextCommand#1{#2}{\add@accent{#3}}}
804 %    \end{macrocode}
806 %    \begin{macrocode}
807 \@onlypreamble\DeclareTextAccent
808 %    \end{macrocode}
809 % \end{macro}
811 % \changes{v1.7a}{1994/11/30}{Rewrote \cs{@text@composite} so it
812 %    allows an empty argument, or an argument containing lots of
813 %    commands.}  
815 %  \begin{macro}{\add@accent}
816 % \changes{v1.7z}{1996/05/23}{macro added. latex/2133}
817 % \changes{v1.91}{2000/08/30}{Rearranged but no change to final code,
818 %    CAR (pr/3160)}
819 % To save space this code is shared between all text accents that are
820 % set using the |\accent| primitive.
821 % The argument is pre-set in a box so that any
822 % font loading that is needed is already done within the box.
823 % This is needed because font-loading involves grouping and that would
824 % prevent the accent mechanism from working so that the accent would
825 % not be positioned over the argument.
826 % Declarations that change the font should be allowed (only low-level
827 % ones are at present) inside the argument of an accent command,
828 % but not size changes, as they involve |\setbox| operations which
829 % also inhibit the mechanism of the |\accent| primitive.
831 % Note that the whole process is within a group.
832 % \changes{v1.9y}{2000/01/30}{Use \cs{hmode@bgroup} where applicable
833 %    (pr/3160)}
834 %    For a detailed discussion of this reimplementation and its
835 %    deficiencies, see pr/3160.
836 % \task{?}{Improve this and document its problems, see pr/3160}
837 % \changes{v1.9z}{2000/01/30}{Macro reimplemented (pr/3160)}
838 %    \begin{macrocode}
839 \def\add@accent#1#2{\hmode@bgroup
840 %    \end{macrocode}
841 %    Turn off the group in |\UseTextSymbol| in case this is used
842 %    inside the argument of |\add@accent|.
843 %    \begin{macrocode}
844    \let\hmode@start@before@group\@firstofone
845    \setbox\@tempboxa\hbox{#2%
846 %    \end{macrocode}
847 %    When presetting the argument in a box we record its |\spacefactor|
848 %    for later use after the accent got typeset. This way something like
849 %    |\`A| gets the spacefactor of |A| (i.e., 999) rather than the
850 %    default value of 1000.
851 % \changes{v1.9q}{1998/06/12}
852 %    {Explicitly set \cs{spacefactor} after \cs{accent} (pr/2877)}
853 %    \begin{macrocode}
854       \global\mathchardef\accent@spacefactor\spacefactor}%
855    \accent#1 #2\egroup\spacefactor\accent@spacefactor}
856 %    \end{macrocode}
857 %    Default definition for |\accent@spacefactor| prevents a horrible
858 %    death of the above macro inside an unprotected |\edef|.
859 % \changes{v1.9w}{1999/10/28}{Give \cs{accent@spacefactor} a default
860 %    definition (pr/3084)}
861 %    \begin{macrocode}
862 \let\accent@spacefactor\relax
863 %    \end{macrocode}
864 %  \end{macro}
866 % \begin{macro}{\hmode@bgroup}
867 % \changes{v1.9y}{2000/01/30}{Macro added}
868 %    \begin{macrocode}
869 \def\hmode@bgroup{\leavevmode\bgroup}
870 %    \end{macrocode}
871 %  \end{macro}
874 % \begin{macro}{\DeclareTextCompositeCommand}
875 % \changes{v1.7z}{1996/05/23}
876 %      {Modified to cope with new \cs{add@accent} command: required
877 %      removal of check for one argument-command}
878 % \begin{macro}{\DeclareTextComposite}
879 % \changes{v1.7l}{1995/06/09}{Rewrote \cs{DeclareTextComposite} to
880 %    define the composite as a no-argument command rather than a
881 %    two-argument command.}  
882 % \begin{macro}{\@text@composite}
883 % \begin{macro}{\@text@composite@x}
884 % \begin{macro}{\@strip@args}
885 % \changes{v1.8c}{1996/10/27}
886 %      {Removed macro}
887 %    Another amusing game to play with |\expandafter|, |\csname|, and
888 %    |\string|.  When you say
889 %    |\DeclareTextCompositeCommand{\foo}{T1}{a}{bar}|, we look to see
890 %    if the expansion of |\T1\foo| begins with |\@text@composite|, and
891 %    if it doesn't, we redefine |\T1\foo| to be:
892 %\begin{verbatim}
893 %    #1 -> \@text@composite \T1\foo #1\@empty \@text@composite {...}
894 %\end{verbatim}
895 %    where |...| is the
896 %    previous definition of |\T1\foo|.  Finally, we define |\\T1\foo-a|
897 %    to expand to |bar|.
898 %    \begin{macrocode}
899 \def\DeclareTextCompositeCommand#1#2#3#4{%
900   \expandafter\let\expandafter\reserved@a\csname#2\string#1\endcsname
901   \expandafter\expandafter\expandafter\ifx
902   \expandafter\@car\reserved@a\relax\relax\@nil \@text@composite \else
903       \edef\reserved@b##1{%
904          \def\expandafter\noexpand
905             \csname#2\string#1\endcsname####1{%
906             \noexpand\@text@composite
907                \expandafter\noexpand\csname#2\string#1\endcsname
908                ####1\noexpand\@empty\noexpand\@text@composite
909                {##1}}}%
910       \expandafter\reserved@b\expandafter{\reserved@a{##1}}%
911    \fi
912    \expandafter\def\csname\expandafter\string\csname
913       #2\endcsname\string#1-\string#3\endcsname{#4}}
914 %    \end{macrocode}
916 %    \begin{macrocode}
917 \@onlypreamble\DeclareTextCompositeCommand
918 %    \end{macrocode}
919 %    This all works because:
920 %\begin{verbatim}
921 %    \@text@composite \T1\foo A\@empty \@text@composite {...}
922 %\end{verbatim}
923 %    expands to
924 %    |\\T1\foo-A| if |\\T1\foo-A| has been defined, and |{...}|
925 %    otherwise. 
927 %    Note that |\@text@composite| grabs the first token of the
928 %    argument and puts just that in the 
929 %    csname.  This is so that |\'{\textit{e}}| will work---it checks
930 %    whether |\\T1\'-\textit| is defined (which presumably it isn't)
931 %    and so expands to |{\accent 1 \textit{e}}|.
933 %    This trick won't always work, for example |\'{{\itshape e}}| will
934 %    expand to (with spaces added for clarity):
935 %\begin{verbatim}
936 %    \csname \string \T1\' - \string {\itshape e} \@empty \endcsname
937 %\end{verbatim}
938 %    which will die pretty horribly.  Unfortunately there's not much
939 %    can be done about this if we're going to use |\csname| lookups as a
940 %    fast way of accessing composites.
942 %    This has an unfortunate `misfeature' though, which is that in
943 %    the T1 encoding, |\'{aa}| produces \'a.  This is not the expected
944 %    behaviour, and should perhaps be fixed if the fix doesn't affect
945 %    performance too badly.
947 %    Finally, it's worth noting that the |\@empty| is used in
948 %    |\@text@composite| so that accents will work even when the
949 %    argument is empty.  If you say |\'{}| then this looks up
950 %    |\\T1\'-\@empty|, which ought to be |\relax|, and so all is well.
951 %    If we didn't include the |\@empty|, then |\'{}| would expand to:
952 %\begin{verbatim}
953 %    \csname \string \T1\' - \string \endcsname
954 %\end{verbatim}
955 %    so the |\endcsname| would be |\string|'ed and the whole of the
956 %    rest of the document would be put inside the |\csname|.  This
957 %    would not be good.
958 %    \begin{macrocode}
959 \def\@text@composite#1#2#3\@text@composite{%
960    \expandafter\@text@composite@x
961       \csname\string#1-\string#2\endcsname}
962 %    \end{macrocode}
964 % \changes{v1.7z}{1996/05/23}
965 %      {\cs{expandafter} added to match other changes for latex/2133}
966 % \changes{v1.9r}{1999/01/06}{New impl for latex/2930}
967 % \changes{v1.9s}{1999/01/13}{Simplified solution for latex/2930}
968 %    Originally the |\@text@composite@x| macro had two arguments and if
969 %    |#1| was not |\relax| it was executed, otherwise |#2| was executed.
970 %    All this happened within the |\ifx| code so that neither |#1|
971 %    nor |#2| could have picked up any additional arguments form
972 %    the input stream.
973 %    This has now being changed using the typical |\@firstoftwo| /
974 %    |\@secondoftwo| coding. This way the
975 %    final expansion will happen without any |\else| or |\fi|
976 %    intervening in the case that we need to get a further token
977 %    from the input stream.
978 %    \begin{macrocode}
979 \def\@text@composite@x#1{%
980    \ifx#1\relax
981       \expandafter\@secondoftwo
982    \else
983       \expandafter\@firstoftwo
984    \fi
985    #1}
986 %    \end{macrocode}
987 %    The command |\DeclareTextComposite| uses
988 %    |\DeclareTextCompositeCommand| to declare a command which
989 %    expands out to a single glyph.
990 % \changes{v1.8a}{1996/07/19}
991 %      {Use char 0 not @ as carrier for \cs{lowercase} /2197}
992 %    \begin{macrocode}
993 \catcode\z@=11\relax
994 %    \end{macrocode}
996 %    \begin{macrocode}
997 \def\DeclareTextComposite#1#2#3#4{%
998    \def\reserved@a{\DeclareTextCompositeCommand#1{#2}{#3}}%
999    \bgroup
1000       \lccode\z@#4%
1001       \lowercase{%
1002    \egroup
1003       \reserved@a ^^@}}
1004 %    \end{macrocode}
1006 %    \begin{macrocode}
1007 \catcode\z@=15\relax
1008 %    \end{macrocode}
1010 %    \begin{macrocode}
1011 \@onlypreamble\DeclareTextComposite
1012 %    \end{macrocode}
1013 % \end{macro}
1014 % \end{macro}
1015 % \end{macro}
1016 % \end{macro}
1017 % \end{macro}
1019 % \begin{macro}{\UseTextAccent}
1020 % \begin{macro}{\UseTextSymbol}
1021 % \changes{v1.7p}{1995/11/17}{Support \cs{@wrong@font@char} latex/1676}
1022 % \changes{v1.7q}{1995/11/18}{Modify message slightly}
1023 % \begin{macro}{\@use@text@encoding}
1024 % \changes{v1.91}{2000/08/30}{Rearranged but no change to final code,
1025 %    CAR (pr/3160)}
1026 %    These fragile commands access glyphs from different encodings.
1027 %    They use grotty low-level calls to the font selection scheme for
1028 %    speed, and in order to make sure that |\UseTextSymbol| doesn't
1029 %    do anything which you're not allowed to do between an |\accent|
1030 %    and its glyph.
1031 %    
1032 %    For a detailed discussion of this reimplementation and its
1033 %    deficiencies, see pr/3160.
1034 % \task{?}{Improve this and document its problems, see pr/3160}
1035 % \changes{v1.9z}{2000/01/30}{Macro reimplemented (pr/3160)}
1036 %    \begin{macrocode}
1037 \def\UseTextAccent#1#2#3{%
1038   \hmode@start@before@group
1039    {%
1040 %    \end{macrocode}
1041 %    Turn off the group in |\UseTextSymbol| in case this is used
1042 %    inside the arguments of |\UseTextAccent|.
1043 %    \begin{macrocode}
1044     \let\hmode@start@before@group\@firstofone
1045     \let\@curr@enc\cf@encoding
1046     \@use@text@encoding{#1}%
1047     #2{\@use@text@encoding\@curr@enc#3}%
1048    }}
1049 %    \end{macrocode}
1051 % \changes{v1.9z}{2000/01/30}{Macro reimplemented (pr/3160)}
1052 %    \begin{macrocode}
1053 \def\UseTextSymbol#1#2{%
1054        \hmode@start@before@group
1055        {%
1056           \def\@wrong@font@char{\MessageBreak
1057              for \noexpand\symbol`\string#2'}%
1058           \@use@text@encoding{#1}%
1059           #2%
1060        }%
1061     }
1062 %    \end{macrocode}
1064 %    \begin{macrocode}
1065 \def\@use@text@encoding#1{%
1066    \edef\f@encoding{#1}%
1067    \xdef\font@name{%
1068       \csname\curr@fontshape/\f@size\endcsname}%
1069    \pickup@font
1070    \font@name
1071    \@@enc@update}
1072 %    \end{macrocode}
1073 % \end{macro}
1074 % \end{macro}
1075 % \end{macro}
1077 % \begin{macro}{\hmode@start@before@group}
1078 %    The |\hmode@start@before@group| starts hmode and should be 
1079 %    immediately followed by an explicit |{...}|. Its purpose is to
1080 %    ensure that hmode is started before this group  is opened. Inside
1081 %    |\add@accent| and |\UseTextAccent| it is redefined to remove this
1082 %    group so that it doesn't conflict with the |\accent| primitive.
1084 %    For a detailed discussion see pr/3160.
1085 % \changes{v1.9z}{2000/01/30}{Macro added (pr/3160)}
1086 %    \begin{macrocode}
1087 \let\hmode@start@before@group\leavevmode
1088 %    \end{macrocode}
1089 % \end{macro}
1090 %     
1091 % \begin{macro}{\DeclareTextSymbolDefault}
1092 % \begin{macro}{\DeclareTextAccentDefault}
1093 %    Some syntactic sugar.  Again, these should probably be optimized
1094 %    for speed. 
1095 %    \begin{macrocode}
1096 \def\DeclareTextSymbolDefault#1#2{%
1097    \DeclareTextCommandDefault#1{\UseTextSymbol{#2}#1}}
1098 %    \end{macrocode}
1100 %    \begin{macrocode}
1101 \def\DeclareTextAccentDefault#1#2{%
1102    \DeclareTextCommandDefault#1{\UseTextAccent{#2}#1}}
1103 %    \end{macrocode}
1105 %    \begin{macrocode}
1106 \@onlypreamble\DeclareTextSymbolDefault
1107 \@onlypreamble\DeclareTextAccentDefault
1108 %    \end{macrocode}
1109 % \end{macro}
1110 % \end{macro}
1113 % \begin{macro}{\UndeclareTextCommand}
1114 %    This command safely removes and encoding specific declaration
1115 %    for a given encoding. It is helpful if one intends to use the
1116 %    default definition always and therefore wants to get rid of
1117 %    a declaration for some specific encoding.
1118 % \changes{v1.9o}{1998/03/20}{Macro added for pr/2783}
1119 %    \begin{macrocode}
1120 \def\UndeclareTextCommand#1#2{%
1121 %    \end{macrocode}
1122 %    If there is no declaration for the current encoding do nothing.
1123 %    (This makes a hash table entry but without e\TeX{} we can't do
1124 %    anything about that).
1125 %    \begin{macrocode}
1126   \expandafter\ifx\csname#2\string#1\endcsname\relax
1127   \else
1128 %    \end{macrocode}
1129 %    Else: throw away that declaration.
1130 %    \begin{macrocode}
1131      \global\expandafter\let\csname#2\string#1\endcsname 
1132             \@undefined
1133 %    \end{macrocode}
1134 %    But this is unfortunately not enough, we have to take a look
1135 %    at the top-level definition of the encoding specific command 
1136 %    which for a command |\foo| would look similar to 
1137 %    |\T1-cmd \foo \T1\foo| (three tokens).
1139 %    Of course, instead of |T1| one could see a different encoding name;
1140 %    which one depends the encoding for which |\foo| was declared
1141 %    last. 
1143 %    Now assume we have just removed the declaration for |\foo| in |T1|
1144 %    and the top-level of |\foo| expands to the above. Then we better
1145 %    change that pretty fast otherwise we do get an ``undefined csname
1146 %    error'' when we try to typeset |\foo| within |T1| instead of
1147 %    getting the default definition for |\foo|.
1148 %    And what is the best way to change that top-level definition? Well,
1149 %    the only ``encoding'' we know for sure will still be around is
1150 %    the default encoding denoted by |?|.
1152 %    Thus in case the last token of the top-level expansion
1153 %    is now undefined we change the declaration to look like
1154 %    |\?-cmd \foo \?\foo| which is done by the following
1155 %    (readable?) code:
1156 %    \begin{macrocode}
1157      \expandafter\expandafter\expandafter
1158      \ifx\expandafter\@thirdofthree#1\@undefined
1159        \expandafter\gdef\expandafter#1\expandafter
1160           {\csname ?-cmd\expandafter\endcsname\expandafter
1161            #1\csname?\string#1\endcsname}%
1162      \fi
1163  \fi
1165 %    \end{macrocode}
1167 %    \begin{macrocode}
1168 \@onlypreamble\UndeclareTextCommand
1169 %    \end{macrocode}
1170 % \end{macro}
1173 % \subsubsection{Hyphenation}
1175 % \changes{v1.5l}{1994/10/18}{Added new definitions of \cs{patterns}
1176 %    and \cs{hyphenation}.}
1177 % \changes{v1.6g}{1994/11/05}{Added setting of \cs{@typeset@protect}
1178 %    to \cs{patterns} and \cs{hyphenation}.}
1179 % \changes{v1.6g}{1994/11/30}{Removed new definitions of \cs{patterns}
1180 %    and \cs{hyphenation}, since encoding-specific commands now expand
1181 %    in the mouth.}
1183 % \begin{macro}{\patterns}
1184 % \begin{macro}{\@@patterns}
1185 % \begin{macro}{\hyphenation}
1186 % \begin{macro}{\@@hyphenation}
1187 %    We redefine |\patterns| and |\hyphenation| to allow the use of 
1188 %    commands declared with |\DeclareText*| to be used inside them.
1189 %    \begin{macrocode}
1190 %\let\@@patterns\patterns
1191 %\let\@@hyphenation\hyphenation
1192 %\def\patterns{%
1193 %   \bgroup
1194 %      \let\protect\@empty
1195 %      \let\@typeset@protect\@empty
1196 %      \let\@changed@x\@changed@x@mouth
1197 %   \afterassignment\egroup   
1198 %   \@@patterns
1200 %\def\hyphenation{%
1201 %   \bgroup
1202 %      \let\protect\@empty
1203 %      \let\@typeset@protect\@empty
1204 %      \let\@changed@x\@changed@x@mouth
1205 %   \afterassignment\egroup   
1206 %   \@@hyphenation
1208 %    \end{macrocode}
1209 % \end{macro}
1210 % \end{macro}
1211 % \end{macro}
1212 % \end{macro}
1214 % \subsubsection{Miscellania}
1216 % \changes{1.4a}{1994/05/01}{Added the \cs{a} command.}
1217 % \changes{1.7a}{1994/11/30}{Redefined \cs{a} for the new scheme.}
1218 % \changes{1.7b}{1994/12/02}{Redefined \cs{a} properly.}
1219 % \changes{1.7g}{1995/03/03}{Corrected an error in documentation
1220 %               referring to the tabular rather than the tabbing
1221 %               environment.}
1222 % \changes{v1.7n}{1995/11/02}{Changed internal name \cs{a} to
1223 % \cs{@tabacckludge} to protect against redefinition by malicicous
1224 % users.}
1226 % \begin{macro}{\a}
1227 %    The |\a| command is used to access the accent commands even when
1228 %    they have been redefined (for example by the |tabbing|
1229 %    environment). Its internal name is |\@tabacckludge|.
1231 %    The |\string| within the |\csname| guards against something
1232 %    like |'| being active at the point of use.
1233 % \changes{v1.9r}{1998/09/19}{Added \cs{string} (pr/2878)}
1234 %    \begin{macrocode}
1235 \def\@tabacckludge#1{\expandafter\@changed@cmd
1236                                  \csname\string#1\endcsname\relax}
1237 \let\a=\@tabacckludge
1238 %    \end{macrocode}
1239 % \end{macro}
1241 % \changes{v1.6a}{1994/10/25}{Added the files OT1enc.def, T1enc.def and 
1242 %    OMSenc.def.} 
1243 % \changes{v1.6b}{1994/10/27}{Removed the files OT1enc.def, T1enc.def
1244 %    and OMSenc.def.} 
1246 % \subsubsection{Default encodings}
1248 % We define the default encodings for most commands to be either OT1,
1249 % OML or OMS.  These defaults are in the kernel and therefore
1250 % fonts with these encodings must be available unless these
1251 % defaults are redefined elsewhere.  Recall that the standard kernel
1252 % loads the encoding files for these encodings, and also that for
1253 % the T1 encoding. 
1255 % The naming conventions in the kernel are not what we would use if we 
1256 % were starting from scratch\dots\  
1257 % Those defined by DEK (like |\ae| and |\ss|) or by the \TeX{} Users
1258 % Group Technical Working Group on multi-lingual typesetting (like 
1259 % |\th| and |\ng|) have short names.  Those which were added to the 
1260 % kernel in 1993 and early 1994 are named after their Adobe glyph
1261 % names (like |\guillemotleft| and |\quotedblbase|).  Unfortunately,
1262 % this naming scheme won't work for all glyphs, since some names (like 
1263 % |\space|) are already used, and some (like |\endash|) are very
1264 % likely to be defined by users.  So we're now using the naming scheme
1265 % of |\text| followed by the Adobe name, (like |\textendash| and 
1266 % |\textsterling|).  Except that some glyphs don't have Adobe names,
1267 % so we're using the names used by fontinst for those (like 
1268 % |\textcompwordmark|).  Sigh.
1270 % \changes{v1.6a}{1994/10/25}{Added the defaults.} 
1271 % \changes{v1.6b}{1994/10/27}{Added more defaults for OT1.} 
1272 % \changes{v1.6c}{1994/10/29}{Added commands like \cs{dots} for use in 
1273 %    text and math.} 
1275 % Some accents from OT1:
1276 %    \begin{macrocode}
1277 \DeclareTextAccentDefault{\"}{OT1}
1278 \DeclareTextAccentDefault{\'}{OT1}
1279 \DeclareTextAccentDefault{\.}{OT1}
1280 \DeclareTextAccentDefault{\=}{OT1}
1281 \DeclareTextAccentDefault{\H}{OT1}
1282 \DeclareTextAccentDefault{\^}{OT1}
1283 \DeclareTextAccentDefault{\`}{OT1}
1284 \DeclareTextAccentDefault{\b}{OT1}
1285 \DeclareTextAccentDefault{\c}{OT1}
1286 \DeclareTextAccentDefault{\d}{OT1}
1287 \DeclareTextAccentDefault{\r}{OT1}
1288 \DeclareTextAccentDefault{\u}{OT1}
1289 \DeclareTextAccentDefault{\v}{OT1}
1290 \DeclareTextAccentDefault{\~}{OT1}
1291 %    \end{macrocode}
1292 % Some symbols from OT1:
1293 % \changes{v1.8c}{1996/10/27}
1294 %      {Removed \cs{aa} and \cs{AA}}
1295 %    \begin{macrocode}
1296 %\DeclareTextSymbolDefault{\AA}{OT1}
1297 \DeclareTextSymbolDefault{\AE}{OT1}
1298 \DeclareTextSymbolDefault{\L}{OT1}
1299 \DeclareTextSymbolDefault{\OE}{OT1}
1300 \DeclareTextSymbolDefault{\O}{OT1}
1301 %\DeclareTextSymbolDefault{\aa}{OT1}
1302 \DeclareTextSymbolDefault{\ae}{OT1}
1303 \DeclareTextSymbolDefault{\i}{OT1}
1304 \DeclareTextSymbolDefault{\j}{OT1}
1305 %    \end{macrocode}
1306 % \changes{v1.99h}{2005/11/08}
1307 %      {Added \cs{ij} and \cs{IJ} from babel. (pr/3771)}
1308 %    \begin{macrocode}
1309 \DeclareTextSymbolDefault{\ij}{OT1}
1310 \DeclareTextSymbolDefault{\IJ}{OT1}
1311 %    \end{macrocode}
1312 %    \begin{macrocode}
1313 \DeclareTextSymbolDefault{\l}{OT1}
1314 \DeclareTextSymbolDefault{\oe}{OT1}
1315 \DeclareTextSymbolDefault{\o}{OT1}
1316 \DeclareTextSymbolDefault{\ss}{OT1}
1317 \DeclareTextSymbolDefault{\textdollar}{OT1}
1318 \DeclareTextSymbolDefault{\textemdash}{OT1}
1319 \DeclareTextSymbolDefault{\textendash}{OT1}
1320 \DeclareTextSymbolDefault{\textexclamdown}{OT1}
1321 %\DeclareTextSymbolDefault{\texthyphenchar}{OT1}
1322 %\DeclareTextSymbolDefault{\texthyphen}{OT1}
1323 \DeclareTextSymbolDefault{\textquestiondown}{OT1}
1324 \DeclareTextSymbolDefault{\textquotedblleft}{OT1}
1325 \DeclareTextSymbolDefault{\textquotedblright}{OT1}
1326 \DeclareTextSymbolDefault{\textquoteleft}{OT1}
1327 \DeclareTextSymbolDefault{\textquoteright}{OT1}
1328 \DeclareTextSymbolDefault{\textsterling}{OT1}
1329 %    \end{macrocode}
1330 % Some symbols from OMS:
1331 % \changes{v1.7t}{1995/11/29}{Added \cs{textbackslash} and
1332 %    \cs{textbar}.} 
1333 % \changes{v1.8c}{1996/10/27}
1334 %      {Added \cs{textasteriskcentered}}
1335 % \changes{v1.95}{2002/06/16}{Added default for \cs{textbardbl} (pr/3400)}
1336 %    \begin{macrocode}
1337 \DeclareTextSymbolDefault{\textasteriskcentered}{OMS}
1338 \DeclareTextSymbolDefault{\textbackslash}{OMS}
1339 \DeclareTextSymbolDefault{\textbar}{OMS}
1340 \DeclareTextSymbolDefault{\textbardbl}{OMS}
1341 \DeclareTextSymbolDefault{\textbraceleft}{OMS}
1342 \DeclareTextSymbolDefault{\textbraceright}{OMS}
1343 \DeclareTextSymbolDefault{\textbullet}{OMS}
1344 \DeclareTextSymbolDefault{\textdaggerdbl}{OMS}
1345 \DeclareTextSymbolDefault{\textdagger}{OMS}
1346 \DeclareTextSymbolDefault{\textparagraph}{OMS}
1347 \DeclareTextSymbolDefault{\textperiodcentered}{OMS}
1348 \DeclareTextSymbolDefault{\textsection}{OMS}
1349 \DeclareTextAccentDefault{\textcircled}{OMS}
1350 %    \end{macrocode}
1352 % \changes{v1.6d}{1994/10/30}{Added OML encoding.}
1353 % \changes{v1.6d}{1994/10/30}{Made \cs{textless} and \cs{textgreater} 
1354 %    come from OML.}
1355 % \changes{v1.6d}{1994/10/30}{Added \cs{t}.}
1356 % \changes{v1.7k}{1995/06/05}{Commented out \cs{textless} and
1357 %    \cs{textgreater}.} 
1359 % Some symbols from OML:
1360 % \changes{v1.7t}{1995/11/29}{Added \cs{textless} and
1361 %    \cs{textgreater}.} 
1362 %    \begin{macrocode}
1363 \DeclareTextSymbolDefault{\textless}{OML}
1364 \DeclareTextSymbolDefault{\textgreater}{OML}
1365 \DeclareTextAccentDefault{\t}{OML}
1366 %    \end{macrocode}
1368 % \changes{v1.6d}{1994/10/30}{Added \cs{textcircled}.}
1369 % \changes{v1.6d}{1994/10/30}{Rewrote \cs{copyright} to use
1370 %    \cs{textcircled}.} 
1371 % \changes{v1.6d}{1994/10/30}{Removed \cs{textregistered}.}
1372 % \changes{v1.7k}{1995/06/05}{Save some tokens in
1373 %    \cs{textvisiblespace} and \cs{textunderscore}.}
1374 % \changes{v1.7t}{1995/11/29}{Added \cs{textasciicircum},
1375 %    \cs{textasciitilde}, \cs{textregistered} and \cs{texttrademark}.}
1376 % \changes{v1.7u}{1995/12/01}{Made \cs{SS} a Default, rather than
1377 %    having the default point to the OT1 definition.}
1378 % \changes{v1.7w}{1995/12/11}{Modified \cs{copyright}}
1379 % \changes{v1.9a}{1997/04/30}{Introduced \cs{textcopyright} and modified
1380 %                             \cs{copyright}}
1382 % Some defaults we can fake.
1384 % The interface for defining |\copyright| changed, it used to
1385 % use |\expandafter| to add braces at the appropriate points.
1386 % \begin{macrocode}
1387 \DeclareTextCommandDefault{\textcopyright}{\textcircled{c}}
1388 % \expandafter\def\expandafter
1389 %                 \copyright\expandafter{\expandafter{\copyright}}
1390 %    \end{macrocode}
1392 % \changes{v1.9a}{1997/04/30}{Modified \cs{textunderscore}, removing
1393 %                                    \cs{mathunderscore}}
1394 % \changes{v1.9b}{1997/04/30}{Added \cs{leavevmode} to
1395 %                                   \cs{textunderscore}}
1396 % \changes{v1.9d}{1997/05/07}{Added \cs{leavevmode} to
1397 %                                   \cs{textcompwordmark}}
1398 %    \begin{macrocode}
1399 \DeclareTextCommandDefault{\textasciicircum}{\^{}}
1400 \DeclareTextCommandDefault{\textasciitilde}{\~{}}
1401 \DeclareTextCommandDefault{\textcompwordmark}{\leavevmode\kern\z@}
1402 \DeclareTextCommandDefault{\textunderscore}{%
1403   \leavevmode \kern.06em\vbox{\hrule\@width.3em}}
1404 %    \end{macrocode}
1406 %    \begin{macrocode}
1407 \DeclareTextCommandDefault{\textvisiblespace}{%
1408    \mbox{\kern.06em\vrule \@height.3ex}%
1409    \vbox{\hrule \@width.3em}%
1410    \hbox{\vrule \@height.3ex}}
1411 %    \end{macrocode}
1413 %    Using |\fontdimen3| in the next definition is some sort of a
1414 %    kludge (since it is the interword stretch) but it makes the
1415 %    ellipsis come out right in mono-spaced fonts too (since there it
1416 %    is zero).
1417 %    \begin{macrocode}
1418 \DeclareTextCommandDefault{\textellipsis}{%
1419    .\kern\fontdimen3\font
1420    .\kern\fontdimen3\font
1421    .\kern\fontdimen3\font}
1422 %    \end{macrocode}
1424 % \changes{v1.9a}{1997/04/30}{Changed \cs{textsc} to \cs{scshape}}
1425 % \changes{v1.95}{2002/06/18}{Changed def for \cs{textregistered} to
1426 %    avoid small caps (pr/3420)}
1427 %    \begin{macrocode}
1428 %\DeclareTextCommandDefault{\textregistered}{\textcircled{\scshape r}}
1429 \DeclareTextCommandDefault{\textregistered}{\textcircled{%
1430       \check@mathfonts\fontsize\sf@size\z@\math@fontsfalse\selectfont R}}
1431 \DeclareTextCommandDefault{\texttrademark}{\textsuperscript{TM}}
1432 \DeclareTextCommandDefault{\SS}{SS}
1433 %    \end{macrocode}
1435 % \changes{v1.9n}{1998/03/05}{Added masc/fem ords as in pr/2579}
1436 %    \begin{macrocode}
1437 \DeclareTextCommandDefault{\textordfeminine}{\textsuperscript{a}}
1438 \DeclareTextCommandDefault{\textordmasculine}{\textsuperscript{o}}
1439 %    \end{macrocode}
1440 %    
1441 % \subsubsection{Math material}
1443 %    Some commands can be used in both text and math mode:
1444 %    \begin{macrocode}
1445 \DeclareRobustCommand{\$}{\ifmmode\mathdollar\else\textdollar\fi}
1446 \DeclareRobustCommand{\{}{\ifmmode\lbrace\else\textbraceleft\fi}
1447 \DeclareRobustCommand{\}}{\ifmmode\rbrace\else\textbraceright\fi}
1448 \DeclareRobustCommand{\P}{\ifmmode\mathparagraph\else\textparagraph\fi}
1449 \DeclareRobustCommand{\S}{\ifmmode\mathsection\else\textsection\fi}
1450 \DeclareRobustCommand{\dag}{\ifmmode{\dagger}\else\textdagger\fi}
1451 \DeclareRobustCommand{\ddag}{\ifmmode{\ddagger}\else\textdaggerdbl\fi}
1452 %    \end{macrocode}
1454 % For historical reasons |\copyright|
1455 % needs |{}| around the definition in maths.
1457 % \changes{v1.6f}{1994/11/04}{Added \cmd\_.}
1459 % \changes{v1.9a}{1997/04/30}{Modified \cs{underscore}, removing
1460 %                                    \cs{mathunderscore}}
1461 % \changes{v1.9a}{1997/04/30}{Introduced \cs{textcopyright} and modify
1462 %                             \cs{copyright}}
1463 %    \begin{macrocode}
1464 \DeclareRobustCommand{\_}{%
1465    \ifmmode\nfss@text{\textunderscore}\else\textunderscore\fi}
1466 \DeclareRobustCommand{\copyright}{%
1467    \ifmmode{\nfss@text{\textcopyright}}\else\textcopyright\fi}
1468 \DeclareRobustCommand{\pounds}{%
1469    \ifmmode\mathsterling\else\textsterling\fi}
1470 %    \end{macrocode}
1472 %    \begin{macrocode}
1473 \DeclareRobustCommand{\dots}{%
1474    \ifmmode\mathellipsis\else\textellipsis\fi}
1475 %    \end{macrocode}
1477 %    \begin{macrocode}
1478 \let\ldots\dots
1479 %</2ekernel|autoload>
1480 %    \end{macrocode}
1482 % \changes{v1.6d}{1994/10/30}{Moved math commands here from ltmath.}
1483 % \changes{v1.6f}{1994/11/04}{Added \cs{mathunderscore}.}
1484 % \changes{v1.7k}{1995/06/05}{Moved math commands to fontdef.dtx.}
1487 % \changes{1.4a}{1994/05/01}{Added the \cs{SaveAtCatcode} and
1488 %    \cs{RestoreAtCatcode} commands.}
1490 % \changes{1.5a}{1994/05/12}{Removed the \cs{SaveAtCatcode} and
1491 %    \cs{RestoreAtCatcode} commands.}
1494 % \subsection{Definitions for the OT1 encoding}
1496 % \changes{1.3}{1993/12/17}{Removed all the hackery for use in
1497 %    \cs{DeclareFontEncoding}, and redid everything using
1498 %    \cs{DeclareTextFoo}.}
1499 % \changes{1.3b}{1993/12/18}{Replaced the missing last argument to
1500 %    \cs{DeclareFontEncoding}.}
1501 % \changes{1.3c}{1993/12/18}{Rewrote for the new syntax of
1502 %    \cs{EncodingSpecific}.}
1503 % \changes{1.4a}{1994/05/01}{Rewrote for the new syntax.}
1504 % \changes{1.5a}{1994/05/12}{Rewrote for the new syntax.}
1505 % \changes{1.5h}{1994/05/16}{\cs{pounds} was still using u rather than
1506 %    ui shape.}
1507 % \changes{1.6b}{1994/10/27}{Added:
1508 %   \cs{textemdash}
1509 %   \cs{textendash}
1510 %   \cs{textexclamdown}
1511 %   \cs{texthyphenchar}
1512 %   \cs{texthyphen}
1513 %   \cs{textquestiondown}
1514 %   \cs{textquotedblleft}
1515 %   \cs{textquotedblright}
1516 %   \cs{textquoteleft}
1517 %   \cs{textquoteright}
1518 % }
1520 % The definitions for the `\TeX{} text' (OT1) encoding.
1522 %    Declare the encoding.    
1523 %    \begin{macrocode}
1524 %<*OT1>
1525 \DeclareFontEncoding{OT1}{}{}
1526 %    \end{macrocode}
1527 %    Declare the accents.
1528 %    \begin{macrocode}
1529 \DeclareTextAccent{\"}{OT1}{127}
1530 \DeclareTextAccent{\'}{OT1}{19}
1531 \DeclareTextAccent{\.}{OT1}{95}
1532 \DeclareTextAccent{\=}{OT1}{22}
1533 \DeclareTextAccent{\^}{OT1}{94}
1534 \DeclareTextAccent{\`}{OT1}{18}
1535 \DeclareTextAccent{\~}{OT1}{126}
1536 \DeclareTextAccent{\H}{OT1}{125}
1537 \DeclareTextAccent{\u}{OT1}{21}
1538 \DeclareTextAccent{\v}{OT1}{20}
1539 \DeclareTextAccent{\r}{OT1}{23}
1540 %    \end{macrocode}
1541 %    Some accents have to be built by hand:
1542 %    Note that |\ooalign| and |\o@lign| must be inside a group.
1543 % \changes{v1.7j}{1995/05/21}{Updated some plain macros}
1544 % \changes{v1.7o}{1995/11/07}{Added \cs{leavevmode} at start of
1545 % \cs{c}, otherwise the output routine might be invoked within the
1546 % macro.}
1547 % \changes{v1.9y}{2000/01/30}{Use \cs{hmode@bgroup} where applicable
1548 %    (pr/3160)}
1549 % \changes{v1.99g}{2005/09/27}{Replace \cs{sh@ft} by \cs{ltx@sh@ft}}
1550 %  In these definitions we no longer use the helper function |\sh@ft|
1551 %  from plain.tex since that now has two incompatible definitions.
1552 %    \begin{macrocode}
1553 \DeclareTextCommand{\b}{OT1}[1]
1554    {\hmode@bgroup\o@lign{\relax#1\crcr\hidewidth\ltx@sh@ft{-3ex}%
1555      \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}\egroup}
1556 \DeclareTextCommand{\c}{OT1}[1]
1557    {\leavevmode\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent24 #1%
1558     \else{\ooalign{\unhbox\z@\crcr\hidewidth\char24\hidewidth}}\fi}
1559 \DeclareTextCommand{\d}{OT1}[1]
1560    {\hmode@bgroup
1561     \o@lign{\relax#1\crcr\hidewidth\ltx@sh@ft{-1ex}.\hidewidth}\egroup}
1562 %    \end{macrocode}
1563 %    Declare the text symbols.
1564 %    \begin{macrocode}
1565 \DeclareTextSymbol{\AE}{OT1}{29}
1566 \DeclareTextSymbol{\OE}{OT1}{30}
1567 \DeclareTextSymbol{\O}{OT1}{31}
1568 \DeclareTextSymbol{\ae}{OT1}{26}
1569 \DeclareTextSymbol{\i}{OT1}{16}
1570 \DeclareTextSymbol{\j}{OT1}{17}
1571 \DeclareTextSymbol{\oe}{OT1}{27}
1572 \DeclareTextSymbol{\o}{OT1}{28}
1573 \DeclareTextSymbol{\ss}{OT1}{25}
1574 \DeclareTextSymbol{\textemdash}{OT1}{124}
1575 \DeclareTextSymbol{\textendash}{OT1}{123}
1576 %    \end{macrocode}
1577 %    Using the ligatures helps with OT1 fonts that have
1578 %    |\textexclamdown| and |\textquestiondown| in unusual positions.
1579 % \changes{v1.95}{2002/06/17}{Definition of \cs{textexclamdown} changed (pr/3368)}
1580 % \changes{v1.95}{2002/06/17}{Definition of \cs{textquestiondown} changed (pr/3368)}
1581 %    \begin{macrocode}
1582 %\DeclareTextSymbol{\textexclamdown}{OT1}{60}
1583 %\DeclareTextSymbol{\textquestiondown}{OT1}{62}
1584 \DeclareTextCommand{\textexclamdown}{OT1}{!`}
1585 \DeclareTextCommand{\textquestiondown}{OT1}{?`}
1586 %\DeclareTextSymbol{\texthyphenchar}{OT1}{`\-}
1587 %\DeclareTextSymbol{\texthyphen}{OT1}{`\-}
1588 \DeclareTextSymbol{\textquotedblleft}{OT1}{92}
1589 \DeclareTextSymbol{\textquotedblright}{OT1}{`\"}
1590 \DeclareTextSymbol{\textquoteleft}{OT1}{`\`}
1591 \DeclareTextSymbol{\textquoteright}{OT1}{`\'}
1592 %    \end{macrocode}
1593 %    Some symbols which are faked from others:
1594 % \changes{v1.7o}{1995/11/07}{Changed \cs{char}32 to \cs{@xxxii} (two
1595 % tokens less).}
1596 % \changes{v1.7o}{1995/11/07}{Replaced octal number 27 by decimal
1597 % number 23 to protect against the quote character being active.}
1598 % \changes{v1.7o}{1995/11/07}{Replaced some 0's by \cs{z@} (faster).}
1599 % \changes{v1.8c}{1996/10/27}
1600 %      {Removed \cs{aa} and \cs{AA}}
1601 % \changes{v1.9y}{2000/01/30}{Use \cs{hmode@bgroup} where applicable
1602 %    (pr/3160)}
1603 %    \begin{macrocode}
1604 % \DeclareTextCommand{\aa}{OT1}
1605 %    {{\accent23a}}
1606 \DeclareTextCommand{\L}{OT1}
1607    {\leavevmode\setbox\z@\hbox{L}\hb@xt@\wd\z@{\hss\@xxxii L}}
1608 \DeclareTextCommand{\l}{OT1}
1609    {\hmode@bgroup\@xxxii l\egroup}
1610 % \DeclareTextCommand{\AA}{OT1}
1611 %    {\leavevmode\setbox\z@\hbox{h}\dimen@\ht\z@\advance\dimen@-1ex%
1612 %     \rlap{\raise.67\dimen@\hbox{\char23}}A}
1613 %    \end{macrocode}
1614 %    In the OT1 encoding \r A has a hand-crafted definition, so we
1615 %    have here the first recorded explicit use of
1616 %    |\DeclareTextCompositeCommand|. 
1617 % \changes{v1.8c}{1996/10/27}
1618 %      {Added \cs{r} A}
1619 % \changes{v1.96}{2002/10/28}{% 
1620 %   coding change, to follow bug fix by DEK in plain.tex (pr/3469)}
1621 %    \begin{macrocode}
1622 \DeclareTextCompositeCommand{\r}{OT1}{A}
1623    {\leavevmode\setbox\z@\hbox{!}\dimen@\ht\z@\advance\dimen@-1ex%
1624     \rlap{\raise.67\dimen@\hbox{\char23}}A} 
1625 %    \end{macrocode}
1626 % \changes{v1.99h}{2005/11/08}
1627 %      {Added \cs{ij} and \cs{IJ} from babel. (pr/3771)}
1628 %    The dutch language uses the letter `ij'. It is available in
1629 %    \texttt{T1} encoded fonts, but not in the \texttt{OT1} encoded
1630 %    fonts. Therefor we fake it for the \texttt{OT1} encoding.
1631 %    \begin{macrocode}
1632 \DeclareTextCommand{\ij}{OT1}{%
1633   \nobreak\hskip\z@skip i\kern-0.02em j\nobreak\hskip\z@skip}
1634 \DeclareTextCommand{\IJ}{OT1}{%
1635   \nobreak\hskip\z@skip I\kern-0.02em J\nobreak\hskip\z@skip}
1636 %    \end{macrocode}
1637 %    In the OT1 encoding, \pounds~and \$ share a slot.
1638 % \changes{v1.9y}{2000/01/30}{Use \cs{hmode@bgroup} where applicable
1639 %    (pr/3160)}
1640 %    \begin{macrocode}
1641 \DeclareTextCommand{\textdollar}{OT1}{\hmode@bgroup
1642    \ifdim \fontdimen\@ne\font >\z@
1643       \slshape
1644    \else
1645       \upshape
1646    \fi
1647    \char`\$\egroup}
1648 %    \end{macrocode}
1650 %    \begin{macrocode}
1651 \DeclareTextCommand{\textsterling}{OT1}{\hmode@bgroup
1652    \ifdim \fontdimen\@ne\font >\z@
1653       \itshape
1654    \else
1655       \fontshape{ui}\selectfont
1656    \fi
1657    \char`\$\egroup}
1658 %    \end{macrocode}
1659 %   
1660 %    Here we are adding some more composite commands to the |OT1|
1661 %    encoding.  This makes the use of certain accents with |i|
1662 %    compatible with their use with the |T1| encoding; this
1663 %    enables them to become true \LaTeX{} internal representations. 
1664 %    However, it will make these accents work a little less fast since
1665 %    a check will always be made for the existence of a composite.
1666 %     
1667 % \changes{v1.93}{2001/05/28}{Added composites for compatibility with
1668 %                             T1, pr/3295} 
1669 % \changes{v1.94}{2001/06/05}{Text composite Commands need kludges for
1670 %                               `,' -- see tlb1903.lvt}
1671 %    \begin{macrocode}
1672 \DeclareTextComposite{\.}{OT1}{i}{`\i}   
1673 \DeclareTextComposite{\.}{OT1}{\i}{`\i}   
1674 \DeclareTextCompositeCommand{\`}{OT1}{i}{\@tabacckludge`\i}
1675 \DeclareTextCompositeCommand{\'}{OT1}{i}{\@tabacckludge'\i}
1676 \DeclareTextCompositeCommand{\^}{OT1}{i}{\^\i}
1677 \DeclareTextCompositeCommand{\"}{OT1}{i}{\"\i}
1678 %    \end{macrocode}
1680 %    \begin{macrocode}
1681 %</OT1>
1682 %    \end{macrocode}
1684 % \subsection{Definitions for the T1 encoding}
1686 % \changes{1.3}{1993/12/17}{Removed all the hackery for use in
1687 %    \cs{DeclareFontEncoding}, and redid everything using
1688 %    \cs{DeclareTextFoo}.}
1689 % \changes{1.3b}{1993/12/18}{Replaced the missing last argument to
1690 %    \cs{DeclareFontEncoding}.}
1691 % \changes{1.3c}{1993/12/18}{Rewrote for the new syntax of
1692 %    \cs{EncodingSpecific}.}
1693 % \changes{1.4a}{1994/05/01}{Rewrote for the new syntax.}
1694 % \changes{1.5a}{1994/05/12}{Rewrote for the new syntax.}
1695 % \changes{1.6a}{1994/10/25}{Added \cs{textdollar}, 
1696 %    \cs{textlbrace}, \cs{textrbrace}, \cs{textsterling},
1697 %    \cs{textunderline}.} 
1698 % \changes{1.6a}{1994/10/25}{Removed
1699 %    \cs{textlbrace}, \cs{textrbrace}, \cs{textunderline} to give them 
1700 %    their proper names.}
1701 % \changes{1.6b}{1994/10/27}{Added 
1702 %   \cs{textasciicircum}
1703 %   \cs{textasciitilde}
1704 %   \cs{textbackslash}
1705 %   \cs{textbar}
1706 %   \cs{textbraceleft}
1707 %   \cs{textbraceright}
1708 %   \cs{textcompwordmark}
1709 %   \cs{textemdash}
1710 %   \cs{textendash}
1711 %   \cs{textexclamdown}
1712 %   \cs{textgreater}
1713 %   \cs{texthyphenchar}
1714 %   \cs{texthyphen}
1715 %   \cs{textless}
1716 %   \cs{textquestiondown}
1717 %   \cs{textquotedblleft}
1718 %   \cs{textquotedblright}
1719 %   \cs{textquotedbl}
1720 %   \cs{textquoteleft}
1721 %   \cs{textquoteright}
1722 %   \cs{textunderscore}
1723 %   \cs{textvisiblespace}
1724 % }
1725 % \changes{v1.9h}{1997/12/17}
1726 %    {Added \cs{textperthousand} and \cs{textpertenthousand}}
1728 % The definitions for the `Extended \TeX{} text' (T1) encoding.
1730 %    Declare the encoding.
1731 %    \begin{macrocode}
1732 %<*T1>
1733 \DeclareFontEncoding{T1}{}{}
1734 %    \end{macrocode}
1735 %    Declare the accents.
1736 %    \begin{macrocode}
1737 \DeclareTextAccent{\`}{T1}{0}
1738 \DeclareTextAccent{\'}{T1}{1}
1739 \DeclareTextAccent{\^}{T1}{2}
1740 \DeclareTextAccent{\~}{T1}{3}
1741 \DeclareTextAccent{\"}{T1}{4}
1742 \DeclareTextAccent{\H}{T1}{5}
1743 \DeclareTextAccent{\r}{T1}{6}
1744 \DeclareTextAccent{\v}{T1}{7}
1745 \DeclareTextAccent{\u}{T1}{8}
1746 \DeclareTextAccent{\=}{T1}{9}
1747 \DeclareTextAccent{\.}{T1}{10}
1748 %    \end{macrocode}
1749 %    Some accents have to be built by hand.
1750 %    Note that |\ooalign| and |\o@lign| must be inside a group.
1751 % \changes{v1.9h}{1997/12/17}{As in OT1, Added \cs{leavevmode} at
1752 % start of \cs{c}, otherwise the output routine might be invoked
1753 % within the macro.}
1754 % \changes{v1.9y}{2000/01/30}{Use \cs{hmode@bgroup} where applicable
1755 %    (pr/3160)}
1756 % \changes{v1.95}{2002/06/17}{Corrected \cs{c} for T1 (pr/3442)}
1757 % \changes{v1.99b}{2004/01/03}{Use \cs{ooalign} for \cs{k} (pr/3532)}
1758 % \changes{v1.99b}{2004/01/03}{Added \cs{textogonekcentered} (pr/3532)}
1759 % \changes{v1.99c}{2004/01/04}{More adjustments for ogonek (pr/3532)}
1760 % \changes{v1.99g}{2005/09/27}{Replace \cs{sh@ft} by \cs{ltx@sh@ft}}
1761 %  In these definitions we no longer use the helper function |\sh@ft|
1762 %  from plain.tex since that now has two incompatible definitions.
1763 %    \begin{macrocode}
1764 \DeclareTextCommand{\b}{T1}[1]
1765    {\hmode@bgroup\o@lign{\relax#1\crcr\hidewidth\ltx@sh@ft{-3ex}%
1766      \vbox to.2ex{\hbox{\char9}\vss}\hidewidth}\egroup}
1767 \DeclareTextCommand{\c}{T1}[1]
1768    {\leavevmode\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent11 #1%
1769      \else{\ooalign{\unhbox\z@\crcr
1770         \hidewidth\char11\hidewidth}}\fi}
1771 \DeclareTextCommand{\d}{T1}[1]
1772    {\hmode@bgroup
1773     \o@lign{\relax#1\crcr\hidewidth\ltx@sh@ft{-1ex}.\hidewidth}\egroup}
1774 \DeclareTextCommand{\k}{T1}[1]
1775    {\hmode@bgroup\ooalign{\null#1\crcr\hidewidth\char12}\egroup}
1776 \DeclareTextCommand{\textogonekcentered}{T1}[1]
1777    {\hmode@bgroup\ooalign{\null#1\crcr\hidewidth\char12\hidewidth}\egroup}
1778 %    \end{macrocode}
1779 %    
1780 %    Some symbols are constructed.
1782 % \changes{v1.9h}{1997/12/17}
1783 %    {Added \cs{textperthousand} and \cs{textpertenthousand}}
1784 %    Slot 24 contains a small circle intended for construction of
1785 %    these two glyphs.
1786 %    
1787 %    \begin{macrocode}
1788 \DeclareTextCommand{\textperthousand}{T1}
1789    {\%\char 24 }          % space or `relax as delimiter?
1790 \DeclareTextCommand{\textpertenthousand}{T1}
1791    {\%\char 24\char 24 }  % space or `relax as delimiter?
1792 %    \end{macrocode}
1793 %    
1794 %    Declare the text symbols.
1795 % \changes{v1.7t}{1995/11/29}{Added \cs{textasciicircum},
1796 %    \cs{textasciitilde}, \cs{textbackslash}, \cs{textbar},
1797 %    \cs{textgreater} and \cs{textless}.} 
1798 % \changes{v1.8c}{1996/10/27}
1799 %      {Removed \cs{aa} and \cs{AA}}
1800 % \changes{v1.99h}{2005/11/08}
1801 %      {Added \cs{ij} and \cs{IJ} from babel. (pr/3771)}
1802 %      
1803 %    \begin{macrocode}
1804 %\DeclareTextSymbol{\AA}{T1}{197}
1805 \DeclareTextSymbol{\AE}{T1}{198}
1806 \DeclareTextSymbol{\DH}{T1}{208}
1807 \DeclareTextSymbol{\DJ}{T1}{208}
1808 \DeclareTextSymbol{\L}{T1}{138}
1809 \DeclareTextSymbol{\NG}{T1}{141}
1810 \DeclareTextSymbol{\OE}{T1}{215}
1811 \DeclareTextSymbol{\O}{T1}{216}
1812 \DeclareTextSymbol{\SS}{T1}{223}
1813 \DeclareTextSymbol{\TH}{T1}{222}
1814 %\DeclareTextSymbol{\aa}{T1}{229}
1815 \DeclareTextSymbol{\ae}{T1}{230}
1816 \DeclareTextSymbol{\dh}{T1}{240}
1817 \DeclareTextSymbol{\dj}{T1}{158}
1818 \DeclareTextSymbol{\guillemotleft}{T1}{19}
1819 \DeclareTextSymbol{\guillemotright}{T1}{20}
1820 \DeclareTextSymbol{\guilsinglleft}{T1}{14}
1821 \DeclareTextSymbol{\guilsinglright}{T1}{15}
1822 \DeclareTextSymbol{\i}{T1}{25}
1823 \DeclareTextSymbol{\j}{T1}{26}
1824 \DeclareTextSymbol{\ij}{T1}{188}
1825 \DeclareTextSymbol{\IJ}{T1}{156}
1826 \DeclareTextSymbol{\l}{T1}{170}
1827 \DeclareTextSymbol{\ng}{T1}{173}
1828 \DeclareTextSymbol{\oe}{T1}{247}
1829 \DeclareTextSymbol{\o}{T1}{248}
1830 \DeclareTextSymbol{\quotedblbase}{T1}{18}
1831 \DeclareTextSymbol{\quotesinglbase}{T1}{13}
1832 \DeclareTextSymbol{\ss}{T1}{255}
1833 \DeclareTextSymbol{\textasciicircum}{T1}{`\^}
1834 \DeclareTextSymbol{\textasciitilde}{T1}{`\~}
1835 \DeclareTextSymbol{\textbackslash}{T1}{`\\}
1836 \DeclareTextSymbol{\textbar}{T1}{`\|}
1837 \DeclareTextSymbol{\textbraceleft}{T1}{`\{}
1838 \DeclareTextSymbol{\textbraceright}{T1}{`\}}
1839 \DeclareTextSymbol{\textcompwordmark}{T1}{23}
1840 \DeclareTextSymbol{\textdollar}{T1}{`\$}
1841 \DeclareTextSymbol{\textemdash}{T1}{22}
1842 \DeclareTextSymbol{\textendash}{T1}{21}
1843 \DeclareTextSymbol{\textexclamdown}{T1}{189}
1844 \DeclareTextSymbol{\textgreater}{T1}{`\>}
1845 %\DeclareTextSymbol{\texthyphenchar}{T1}{127}
1846 %\DeclareTextSymbol{\texthyphen}{T1}{`\-}
1847 \DeclareTextSymbol{\textless}{T1}{`\<}
1848 \DeclareTextSymbol{\textquestiondown}{T1}{190}
1849 \DeclareTextSymbol{\textquotedblleft}{T1}{16}
1850 \DeclareTextSymbol{\textquotedblright}{T1}{17}
1851 \DeclareTextSymbol{\textquotedbl}{T1}{`\"}
1852 \DeclareTextSymbol{\textquoteleft}{T1}{`\`}
1853 \DeclareTextSymbol{\textquoteright}{T1}{`\'}
1854 \DeclareTextSymbol{\textsection}{T1}{159}
1855 \DeclareTextSymbol{\textsterling}{T1}{191}
1856 \DeclareTextSymbol{\textunderscore}{T1}{95}
1857 \DeclareTextSymbol{\textvisiblespace}{T1}{32}
1858 \DeclareTextSymbol{\th}{T1}{254}
1859 %    \end{macrocode}
1860 %    Declare the composites.
1861 % \changes{v1.93}{2001/05/28}{Changed the effect of 
1862 %                             \cs{.}\cs{i}, pr/3295}
1863 %    \begin{macrocode}
1864 \DeclareTextComposite{\.}{T1}{i}{`\i}
1865 \DeclareTextComposite{\.}{T1}{\i}{`\i}
1866 %    \end{macrocode}
1867 % \changes{v1.9c}{1997/05/04}{Added `hex index tabs'}
1868 %    "80 = 128
1869 %    \begin{macrocode}
1870 \DeclareTextComposite{\u}{T1}{A}{128}
1871 \DeclareTextComposite{\k}{T1}{A}{129}
1872 \DeclareTextComposite{\'}{T1}{C}{130}
1873 \DeclareTextComposite{\v}{T1}{C}{131}
1874 \DeclareTextComposite{\v}{T1}{D}{132}
1875 \DeclareTextComposite{\v}{T1}{E}{133}
1876 \DeclareTextComposite{\k}{T1}{E}{134}
1877 \DeclareTextComposite{\u}{T1}{G}{135}
1878 %    \end{macrocode}
1879 %    "88 = 136
1880 %    \begin{macrocode}
1881 \DeclareTextComposite{\'}{T1}{L}{136}
1882 \DeclareTextComposite{\v}{T1}{L}{137}
1883 \DeclareTextComposite{\'}{T1}{N}{139}
1884 \DeclareTextComposite{\v}{T1}{N}{140}
1885 \DeclareTextComposite{\H}{T1}{O}{142}
1886 \DeclareTextComposite{\'}{T1}{R}{143}
1887 %    \end{macrocode}
1888 %    "90 = 144
1889 %    \begin{macrocode}
1890 \DeclareTextComposite{\v}{T1}{R}{144}
1891 \DeclareTextComposite{\'}{T1}{S}{145}
1892 \DeclareTextComposite{\v}{T1}{S}{146}
1893 \DeclareTextComposite{\c}{T1}{S}{147}
1894 \DeclareTextComposite{\v}{T1}{T}{148}
1895 \DeclareTextComposite{\c}{T1}{T}{149}
1896 \DeclareTextComposite{\H}{T1}{U}{150}
1897 \DeclareTextComposite{\r}{T1}{U}{151}
1898 %    \end{macrocode}
1899 %    "98 = 152
1900 %    \begin{macrocode}
1901 \DeclareTextComposite{\"}{T1}{Y}{152}
1902 \DeclareTextComposite{\'}{T1}{Z}{153}
1903 \DeclareTextComposite{\v}{T1}{Z}{154}
1904 \DeclareTextComposite{\.}{T1}{Z}{155}
1905 \DeclareTextComposite{\.}{T1}{I}{157}
1906 %    \end{macrocode}
1907 %    "A0 = 160
1908 %    \begin{macrocode}
1909 \DeclareTextComposite{\u}{T1}{a}{160}
1910 \DeclareTextComposite{\k}{T1}{a}{161}
1911 \DeclareTextComposite{\'}{T1}{c}{162}
1912 \DeclareTextComposite{\v}{T1}{c}{163}
1913 \DeclareTextComposite{\v}{T1}{d}{164}
1914 \DeclareTextComposite{\v}{T1}{e}{165}
1915 \DeclareTextComposite{\k}{T1}{e}{166}
1916 \DeclareTextComposite{\u}{T1}{g}{167}
1917 %    \end{macrocode}
1918 %    "A8 = 168
1919 %    \begin{macrocode}
1920 \DeclareTextComposite{\'}{T1}{l}{168}
1921 \DeclareTextComposite{\v}{T1}{l}{169}
1922 \DeclareTextComposite{\'}{T1}{n}{171}
1923 \DeclareTextComposite{\v}{T1}{n}{172}
1924 \DeclareTextComposite{\H}{T1}{o}{174}
1925 \DeclareTextComposite{\'}{T1}{r}{175}
1926 %    \end{macrocode}
1927 %    "B0 = 176
1928 %    \begin{macrocode}
1929 \DeclareTextComposite{\v}{T1}{r}{176}
1930 \DeclareTextComposite{\'}{T1}{s}{177}
1931 \DeclareTextComposite{\v}{T1}{s}{178}
1932 \DeclareTextComposite{\c}{T1}{s}{179}
1933 \DeclareTextComposite{\v}{T1}{t}{180}
1934 \DeclareTextComposite{\c}{T1}{t}{181}
1935 \DeclareTextComposite{\H}{T1}{u}{182}
1936 \DeclareTextComposite{\r}{T1}{u}{183}
1937 %    \end{macrocode}
1938 %    "B8 = 184
1939 %    \begin{macrocode}
1940 \DeclareTextComposite{\"}{T1}{y}{184}
1941 \DeclareTextComposite{\'}{T1}{z}{185}
1942 \DeclareTextComposite{\v}{T1}{z}{186}
1943 \DeclareTextComposite{\.}{T1}{z}{187}
1944 %    \end{macrocode}
1945 %    "C0 = 192
1946 %    \begin{macrocode}
1947 \DeclareTextComposite{\`}{T1}{A}{192}
1948 \DeclareTextComposite{\'}{T1}{A}{193}
1949 \DeclareTextComposite{\^}{T1}{A}{194}
1950 \DeclareTextComposite{\~}{T1}{A}{195}
1951 \DeclareTextComposite{\"}{T1}{A}{196}
1952 \DeclareTextComposite{\r}{T1}{A}{197}
1953 \DeclareTextComposite{\c}{T1}{C}{199}
1954 %    \end{macrocode}
1955 %    "C8 = 200
1956 %    \begin{macrocode}
1957 \DeclareTextComposite{\`}{T1}{E}{200}
1958 \DeclareTextComposite{\'}{T1}{E}{201}
1959 \DeclareTextComposite{\^}{T1}{E}{202}
1960 \DeclareTextComposite{\"}{T1}{E}{203}
1961 \DeclareTextComposite{\`}{T1}{I}{204}
1962 \DeclareTextComposite{\'}{T1}{I}{205}
1963 \DeclareTextComposite{\^}{T1}{I}{206}
1964 \DeclareTextComposite{\"}{T1}{I}{207}
1965 %    \end{macrocode}
1966 %    "D0 = 208
1967 %    \begin{macrocode}
1968 \DeclareTextComposite{\~}{T1}{N}{209}
1969 \DeclareTextComposite{\`}{T1}{O}{210}
1970 \DeclareTextComposite{\'}{T1}{O}{211}
1971 \DeclareTextComposite{\^}{T1}{O}{212}
1972 \DeclareTextComposite{\~}{T1}{O}{213}
1973 \DeclareTextComposite{\"}{T1}{O}{214}
1974 %    \end{macrocode}
1975 %    "D8 = 216
1976 %    \begin{macrocode}
1977 \DeclareTextComposite{\`}{T1}{U}{217}
1978 \DeclareTextComposite{\'}{T1}{U}{218}
1979 \DeclareTextComposite{\^}{T1}{U}{219}
1980 \DeclareTextComposite{\"}{T1}{U}{220}
1981 \DeclareTextComposite{\'}{T1}{Y}{221}
1982 %    \end{macrocode}
1983 %    "E0 = 224
1984 %    \begin{macrocode}
1985 \DeclareTextComposite{\`}{T1}{a}{224}
1986 \DeclareTextComposite{\'}{T1}{a}{225}
1987 \DeclareTextComposite{\^}{T1}{a}{226}
1988 \DeclareTextComposite{\~}{T1}{a}{227}
1989 \DeclareTextComposite{\"}{T1}{a}{228}
1990 \DeclareTextComposite{\r}{T1}{a}{229}
1991 \DeclareTextComposite{\c}{T1}{c}{231}
1992 %    \end{macrocode}
1993 %    "E8 = 232
1994 %    \begin{macrocode}
1995 \DeclareTextComposite{\`}{T1}{e}{232}
1996 \DeclareTextComposite{\'}{T1}{e}{233}
1997 \DeclareTextComposite{\^}{T1}{e}{234}
1998 \DeclareTextComposite{\"}{T1}{e}{235}
1999 \DeclareTextComposite{\`}{T1}{i}{236}
2000 \DeclareTextComposite{\`}{T1}{\i}{236}
2001 \DeclareTextComposite{\'}{T1}{i}{237}
2002 \DeclareTextComposite{\'}{T1}{\i}{237}
2003 \DeclareTextComposite{\^}{T1}{i}{238}
2004 \DeclareTextComposite{\^}{T1}{\i}{238}
2005 \DeclareTextComposite{\"}{T1}{i}{239}
2006 \DeclareTextComposite{\"}{T1}{\i}{239}
2007 %    \end{macrocode}
2008 %    "F0 = 240
2009 %    \begin{macrocode}
2010 \DeclareTextComposite{\~}{T1}{n}{241}
2011 \DeclareTextComposite{\`}{T1}{o}{242}
2012 \DeclareTextComposite{\'}{T1}{o}{243}
2013 \DeclareTextComposite{\^}{T1}{o}{244}
2014 \DeclareTextComposite{\~}{T1}{o}{245}
2015 \DeclareTextComposite{\"}{T1}{o}{246}
2016 %    \end{macrocode}
2017 %    "F8 = 248
2018 %    \begin{macrocode}
2019 \DeclareTextComposite{\`}{T1}{u}{249}
2020 \DeclareTextComposite{\'}{T1}{u}{250}
2021 \DeclareTextComposite{\^}{T1}{u}{251}
2022 \DeclareTextComposite{\"}{T1}{u}{252}
2023 \DeclareTextComposite{\'}{T1}{y}{253}
2024 %    \end{macrocode}
2025 % \changes{v1.99b}{2004/01/03}{Added composites for \cs{k} (pr/3532)}
2026 %    \begin{macrocode}
2027 \DeclareTextCompositeCommand{\k}{T1}{o}{\textogonekcentered{o}}
2028 \DeclareTextCompositeCommand{\k}{T1}{O}{\textogonekcentered{O}}
2029 %    \end{macrocode}
2031 %    \begin{macrocode}
2032 %</T1>
2033 %    \end{macrocode}
2035 % \changes{1.4a}{1994/05/01}{Removed the uc/lc table settings, since
2036 %    the T1 uc/lc table is now the default.}
2038 % \subsection{Definitions for the OMS encoding}
2040 % \changes{v1.6a}{1994/10/25}{Added the OMS encoding.}
2041 % \changes{v1.6b}{1994/10/27}{Renamed \cs{textlbrace} to 
2042 %    \cs{textbraceleft} and \cs{textrbrace} to \cs{textbraceright}.}
2043 % \changes{v1.6b}{1994/10/27}{Added \cs{textbackslash}.}
2044 % \changes{v1.6d}{1994/10/30}{Added \cs{textcircled}.}
2046 % The definitions for the `\TeX{} math symbol' (OMS) encoding.  Even 
2047 % though this is meant to be a math font, it includes some of the
2048 % standard \LaTeX{} text symbols.
2050 %    Declare the encoding.
2051 %    \begin{macrocode}
2052 %<*OMS>
2053 \DeclareFontEncoding{OMS}{}{}
2054 %    \end{macrocode}
2055 %    Declare the symbols.
2056 % \changes{v1.7t}{1995/11/29}{Added \cs{textbackslash} and
2057 %    \cs{textbar}.} 
2058 % \changes{v1.8c}{1996/10/27}
2059 %      {Added \cs{textasteriskcentered}}
2060 % \changes{v1.9y}{2000/01/30}{Use \cs{hmode@bgroup} where applicable
2061 %    (pr/3160)}
2062 % \changes{v1.95}{2002/06/16}{Added \cs{textbardbl} (pr/3400)}
2063 %    \begin{macrocode}
2064 % \changes{v1.99}{2004/02/02}{Added \cs{textbigcircle}}
2065 %    Note that slot 13 has in places been named |\Orb|: please root 
2066 %    out and destroy this impolity wherever you find it!
2067 %    \begin{macrocode}
2068 \DeclareTextSymbol{\textasteriskcentered}{OMS}{3}   % "03
2069 \DeclareTextSymbol{\textbackslash}{OMS}{110}        % "6E
2070 \DeclareTextSymbol{\textbar}{OMS}{106}              % "6A
2071 \DeclareTextSymbol{\textbardbl}{OMS}{107}           % "6B
2072 \DeclareTextSymbol{\textbraceleft}{OMS}{102}        % "66
2073 \DeclareTextSymbol{\textbraceright}{OMS}{103}       % "67
2074 \DeclareTextSymbol{\textbullet}{OMS}{15}            % "0F
2075 \DeclareTextSymbol{\textdaggerdbl}{OMS}{122}        % "7A
2076 \DeclareTextSymbol{\textdagger}{OMS}{121}           % "79
2077 \DeclareTextSymbol{\textparagraph}{OMS}{123}        % "7B
2078 \DeclareTextSymbol{\textperiodcentered}{OMS}{1}     % "01
2079 \DeclareTextSymbol{\textsection}{OMS}{120}          % "78
2080 \DeclareTextSymbol{\textbigcircle}{OMS}{13}         % "0D
2081 \DeclareTextCommand{\textcircled}{OMS}[1]{\hmode@bgroup
2082    \ooalign{%
2083       \hfil \raise .07ex\hbox {\upshape#1}\hfil \crcr 
2084       \char 13 % "0D
2085    }%
2086  \egroup}
2087 %</OMS>
2088 %    \end{macrocode}
2090 % \subsection{Definitions for the OML encoding}
2092 % \changes{v1.6d}{1994/10/30}{Added the OML encoding.}
2094 % The definitions for the `\TeX{} math italic' (OML) encoding.  Even 
2095 % though this is meant to be a math font, it includes some of the
2096 % standard \LaTeX{} text symbols.
2098 %    Declare the encoding.
2099 %    \begin{macrocode}
2100 %<*OML>
2101 \DeclareFontEncoding{OML}{}{}
2102 %    \end{macrocode}
2103 %    Declare the symbols.
2104 % \changes{v1.7t}{1995/11/29}{Added \cs{textless} and
2105 %    \cs{textgreater}.} 
2106 % \changes{v1.9h}{1997/12/17}{Changed to decimal codes.}
2107 % \changes{v1.9m}{1998/01/16}{fixed decimal codes. latex/2734}
2108 %    \begin{macrocode}
2109 \DeclareTextSymbol{\textless}{OML}{`\<}
2110 \DeclareTextSymbol{\textgreater}{OML}{`\>}
2111 \DeclareTextAccent{\t}{OML}{127}  % "7F
2112 %</OML>
2113 %    \end{macrocode}
2115 % \subsection{Definitions for the OT4 encoding}
2117 % These definitions are for the Polish extension to the
2118 % `\TeX\ text' (OT1) encoding.
2119 % This encoding was created by B.~Jackowski and M.~Ry\'cko
2120 % for use with the Polish version of Computer Modern and Computer
2121 % Concrete.  In positions 0--127 it is identical to OT1 but it
2122 % contains some additional characters in the upper half.  The \LaTeX{} 
2123 % support was developed by Mariusz Olko.
2125 % The PL fonts that use it are available as follows:\\
2126 % Metafont sources
2127 % \texttt{ftp://ftp.gust.org.pl/TeX/language/polish/pl-mf.zip};
2129 % Font files
2130 % \texttt{ftp://ftp.gust.org.pl/TeX/language/polish/pl-tfm.zip}.
2132 %    Declare the encoding.
2133 %    \begin{macrocode}
2134 %<*OT4>
2135 \DeclareFontEncoding{OT4}{}{}
2136 \DeclareFontSubstitution{OT4}{cmr}{m}{n}
2137 %    \end{macrocode}
2138 %    Declare the accents.
2139 %    \begin{macrocode}
2140 \DeclareTextAccent{\"}{OT4}{127}
2141 \DeclareTextAccent{\'}{OT4}{19}
2142 \DeclareTextAccent{\.}{OT4}{95}
2143 \DeclareTextAccent{\=}{OT4}{22}
2144 \DeclareTextAccent{\^}{OT4}{94}
2145 \DeclareTextAccent{\`}{OT4}{18}
2146 \DeclareTextAccent{\~}{OT4}{126}
2147 \DeclareTextAccent{\H}{OT4}{125}
2148 \DeclareTextAccent{\u}{OT4}{21}
2149 \DeclareTextAccent{\v}{OT4}{20}
2150 \DeclareTextAccent{\r}{OT4}{23}
2151 %    \end{macrocode}
2152 %    The ogonek accent is available only under a e A \& E.  But we
2153 %    have to provide some definition for \cs{k}. Some other accents
2154 %    have to be built by hand as in OT1:
2155 % \changes{v1.9y}{2000/01/30}{Use \cs{hmode@bgroup} where applicable
2156 %    (pr/3160)}
2157 %    \begin{macrocode}
2158 \DeclareTextCommand{\k}{OT4}[1]{%
2159     \TextSymbolUnavailable{\k{#1}}#1}
2160 %    \end{macrocode}
2161 %  In these definitions we no longer use the helper function |\sh@ft|
2162 %  from plain.tex since that now has two incompatible definitions.
2163 % \changes{v1.99g}{2005/09/27}{Replace \cs{sh@ft} by \cs{ltx@sh@ft}}
2164 %    \begin{macrocode}
2165 \DeclareTextCommand{\b}{OT4}[1]
2166    {\hmode@bgroup\o@lign{\relax#1\crcr\hidewidth\ltx@sh@ft{-3ex}%
2167      \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}\egroup}
2168 \DeclareTextCommand{\c}{OT4}[1]
2169    {\leavevmode\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent24 #1%
2170     \else{\ooalign{\unhbox\z@\crcr\hidewidth\char24\hidewidth}}\fi}
2171 \DeclareTextCommand{\d}{OT4}[1]
2172    {\hmode@bgroup
2173     \o@lign{\relax#1\crcr\hidewidth\ltx@sh@ft{-1ex}.\hidewidth}\egroup}
2174 %    \end{macrocode}
2175 %    Declare the text symbols.
2176 %    \begin{macrocode}
2177 \DeclareTextSymbol{\AE}{OT4}{29}
2178 \DeclareTextSymbol{\OE}{OT4}{30}
2179 \DeclareTextSymbol{\O}{OT4}{31}
2180 \DeclareTextSymbol{\L}{OT4}{138}
2181 \DeclareTextSymbol{\ae}{OT4}{26}
2182 \DeclareTextSymbol{\guillemotleft}{OT4}{174}
2183 \DeclareTextSymbol{\guillemotright}{OT4}{175}
2184 \DeclareTextSymbol{\i}{OT4}{16}
2185 \DeclareTextSymbol{\j}{OT4}{17}
2186 \DeclareTextSymbol{\l}{OT4}{170}
2187 \DeclareTextSymbol{\o}{OT4}{28}
2188 \DeclareTextSymbol{\oe}{OT4}{27}
2189 \DeclareTextSymbol{\quotedblbase}{OT4}{255}
2190 \DeclareTextSymbol{\ss}{OT4}{25}
2191 \DeclareTextSymbol{\textemdash}{OT4}{124}
2192 \DeclareTextSymbol{\textendash}{OT4}{123}
2193 \DeclareTextSymbol{\textexclamdown}{OT4}{60}
2194 %\DeclareTextSymbol{\texthyphenchar}{OT4}{`\-}
2195 %\DeclareTextSymbol{\texthyphen}{OT4}{`\-}
2196 \DeclareTextSymbol{\textquestiondown}{OT4}{62}
2197 \DeclareTextSymbol{\textquotedblleft}{OT4}{92}
2198 \DeclareTextSymbol{\textquotedblright}{OT4}{`\"}
2199 \DeclareTextSymbol{\textquoteleft}{OT4}{`\`}
2200 \DeclareTextSymbol{\textquoteright}{OT4}{`\'}
2201 %    \end{macrocode}
2202 %    Definition for \r A as in OT1:
2203 % \changes{v1.96}{2002/10/28}{% 
2204 %   coding change, to follow bug fix by DEK in plain.tex (pr/3469)}
2205 %    \begin{macrocode}
2206 \DeclareTextCompositeCommand{\r}{OT4}{A}
2207    {\leavevmode\setbox\z@\hbox{!}\dimen@\ht\z@\advance\dimen@-1ex%
2208     \rlap{\raise.67\dimen@\hbox{\char23}}A} 
2209 %    \end{macrocode}
2210 %    In the OT4 encoding, \pounds~and \$ share a slot.
2211 % \changes{v1.9y}{2000/01/30}{Use \cs{hmode@bgroup} where applicable
2212 %    (pr/3160)}
2213 %    \begin{macrocode}
2214 \DeclareTextCommand{\textdollar}{OT4}{\hmode@bgroup
2215    \ifdim \fontdimen\@ne\font >\z@
2216       \slshape
2217    \else
2218       \upshape
2219    \fi
2220    \char`\$\egroup}
2221 \DeclareTextCommand{\textsterling}{OT4}{\hmode@bgroup
2222    \ifdim \fontdimen\@ne\font >\z@
2223       \itshape 
2224    \else 
2225       \fontshape{ui}\selectfont 
2226    \fi 
2227    \char`\$\egroup}
2228 %    \end{macrocode}
2229 %    Declare the composites.
2230 %    \begin{macrocode}
2231 \DeclareTextComposite{\k}{OT4}{A}{129}
2232 \DeclareTextComposite{\'}{OT4}{C}{130}
2233 \DeclareTextComposite{\k}{OT4}{E}{134}
2234 \DeclareTextComposite{\'}{OT4}{N}{139}
2235 \DeclareTextComposite{\'}{OT4}{S}{145}
2236 \DeclareTextComposite{\'}{OT4}{Z}{153}
2237 \DeclareTextComposite{\.}{OT4}{Z}{155}
2238 \DeclareTextComposite{\k}{OT4}{a}{161}
2239 \DeclareTextComposite{\'}{OT4}{c}{162}
2240 \DeclareTextComposite{\k}{OT4}{e}{166}
2241 \DeclareTextComposite{\'}{OT4}{n}{171}
2242 \DeclareTextComposite{\'}{OT4}{s}{177}
2243 \DeclareTextComposite{\'}{OT4}{z}{185}
2244 \DeclareTextComposite{\.}{OT4}{z}{187}
2245 \DeclareTextComposite{\'}{OT4}{O}{211}
2246 \DeclareTextComposite{\'}{OT4}{o}{243}
2247 %</OT4>
2248 %    \end{macrocode}
2251 % \subsection{Definitions for the TS1 encoding}
2253 % \changes{v1.9c}{1997/05/04}{Added TS1 encoding v2.2.beta}
2254 % \changes{v1.9g}{1997/11/23}
2255 %    {Use \cs{textperthousand}, \cs{textpertenthousand} and
2256 %          \cs{textfractionsolidus} not
2257 %         \cs{textpermill}, \cs{textpertenmill} and \cs{textfraction}.
2258 %         /2673 }
2259 % \changes{v1.9h}{1997/12/17}
2260 %     {Removed default settings, see next section.}
2262 %    \begin{macrocode}
2263 %<*TS1>
2264 \DeclareFontEncoding{TS1}{}{}
2265 \DeclareFontSubstitution{TS1}{cmr}{m}{n}
2266 %    \end{macrocode}
2267 %    Some accents have to be built by hand.
2268 %    Note that |\ooalign| and |\o@lign| must be inside a group.
2269 % \changes{v1.9y}{2000/01/30}{Use \cs{hmode@bgroup} where applicable
2270 %    (pr/3160)}
2271 %    \begin{macrocode}
2272 \DeclareTextCommand{\capitalcedilla}{TS1}[1]
2273    {\hmode@bgroup
2274     \ooalign{\null#1\crcr\hidewidth\char11\hidewidth}\egroup}
2275 \DeclareTextCommand{\capitalogonek}{TS1}[1]
2276    {\hmode@bgroup
2277     \ooalign{\null#1\crcr\hidewidth\char12\hidewidth}\egroup}
2278 %    \end{macrocode}
2280 % Accents for capital letters.
2282 % These commands can be used by the end user either directly or through 
2283 % definitions of the type
2284 % \begin{verbatim}
2285 % \DeclareTextCompositeCommand{\'}{T1}{X}{\capitalacute X}
2286 % \end{verbatim}
2287 % None of the latter definitions are provided by default, since they
2288 % are probably rarely used.
2290 %    "00 = 0
2291 %    \begin{macrocode}
2292 \DeclareTextAccent{\capitalgrave}{TS1}{0}
2293 \DeclareTextAccent{\capitalacute}{TS1}{1}
2294 \DeclareTextAccent{\capitalcircumflex}{TS1}{2}
2295 \DeclareTextAccent{\capitaltilde}{TS1}{3}
2296 \DeclareTextAccent{\capitaldieresis}{TS1}{4}
2297 \DeclareTextAccent{\capitalhungarumlaut}{TS1}{5}
2298 \DeclareTextAccent{\capitalring}{TS1}{6}
2299 \DeclareTextAccent{\capitalcaron}{TS1}{7}
2300 %    \end{macrocode}
2301 %    "08 = 8 
2302 %    \begin{macrocode}
2303 \DeclareTextAccent{\capitalbreve}{TS1}{8}
2304 \DeclareTextAccent{\capitalmacron}{TS1}{9}
2305 \DeclareTextAccent{\capitaldotaccent}{TS1}{10}
2306 %    \end{macrocode}
2307 % Tie accents.
2309 % The tie accent was borrowed from the |cmmi| font. The tc fonts
2310 % now provide four tie accents, the first two are done in the
2311 % classical way with assymetric glyphs hanging out of their boxes;
2312 % the new ties are centered in their boxes like all other accents.
2313 % They need a name: please tell us if you know what to call them.
2315 %    " = 
2316 %    \begin{macrocode}
2317 \DeclareTextAccent{\t}{TS1}{26}
2318 \DeclareTextAccent{\capitaltie}{TS1}{27}
2319 \DeclareTextAccent{\newtie}{TS1}{28}
2320 \DeclareTextAccent{\capitalnewtie}{TS1}{29}
2321 %    \end{macrocode}
2323 % Compund word marks.
2325 % The text companion fonts contain two compound word marks of
2326 % different heights, one has |cap_height|, the other |asc_height|.
2328 %    \begin{macrocode}
2329 \DeclareTextSymbol{\textcapitalcompwordmark}{TS1}{23}
2330 \DeclareTextSymbol{\textascendercompwordmark}{TS1}{31}
2331 %    \end{macrocode}
2333 % The text companion symbols.
2335 %    \begin{macrocode}
2336 \DeclareTextSymbol{\textquotestraightbase}{TS1}{13}
2337 %    \end{macrocode}
2338 %    "10 = 16
2339 %    \begin{macrocode}
2340 \DeclareTextSymbol{\textquotestraightdblbase}{TS1}{18}
2341 \DeclareTextSymbol{\texttwelveudash}{TS1}{21}
2342 \DeclareTextSymbol{\textthreequartersemdash}{TS1}{22}
2343 %    \end{macrocode}
2344 %    "18 = 24
2345 %    \begin{macrocode}
2346 \DeclareTextSymbol{\textleftarrow}{TS1}{24}
2347 \DeclareTextSymbol{\textrightarrow}{TS1}{25}
2348 %    \end{macrocode}
2349 %    "20 = 32 
2350 %    \begin{macrocode}
2351 \DeclareTextSymbol{\textblank}{TS1}{32}
2352 \DeclareTextSymbol{\textdollar}{TS1}{36}
2353 \DeclareTextSymbol{\textquotesingle}{TS1}{39}
2354 %    \end{macrocode}
2355 %    "28 = 40 
2356 %    \begin{macrocode}
2357 \DeclareTextSymbol{\textasteriskcentered}{TS1}{42}
2358 %    \end{macrocode}
2359 % Note that '054 is a comma and '056 is a full stop: these make
2360 % numbers using oldstyle digits easier to input.
2361 %    \begin{macrocode}
2362 \DeclareTextSymbol{\textdblhyphen}{TS1}{45}
2363 \DeclareTextSymbol{\textfractionsolidus}{TS1}{47}
2364 %    \end{macrocode}
2366 % Oldstyle digits.
2368 %    "30 = 48 
2369 %    \begin{macrocode}
2370 \DeclareTextSymbol{\textzerooldstyle}{TS1}{48}
2371 \DeclareTextSymbol{\textoneoldstyle}{TS1}{49}
2372 \DeclareTextSymbol{\texttwooldstyle}{TS1}{50}
2373 \DeclareTextSymbol{\textthreeoldstyle}{TS1}{51}
2374 \DeclareTextSymbol{\textfouroldstyle}{TS1}{52}
2375 \DeclareTextSymbol{\textfiveoldstyle}{TS1}{53}
2376 \DeclareTextSymbol{\textsixoldstyle}{TS1}{54}
2377 \DeclareTextSymbol{\textsevenoldstyle}{TS1}{55}
2378 %    \end{macrocode}
2379 %    "38 = 56 
2380 %    \begin{macrocode}
2381 \DeclareTextSymbol{\texteightoldstyle}{TS1}{56}
2382 \DeclareTextSymbol{\textnineoldstyle}{TS1}{57}
2383 %    \end{macrocode}
2385 % More text companion symbols.
2387 %    \begin{macrocode}
2388 \DeclareTextSymbol{\textlangle}{TS1}{60}
2389 \DeclareTextSymbol{\textminus}{TS1}{61}
2390 \DeclareTextSymbol{\textrangle}{TS1}{62}
2391 %    \end{macrocode}
2392 %    "48 = 72
2393 %    \begin{macrocode}
2394 \DeclareTextSymbol{\textmho}{TS1}{77}
2395 %    \end{macrocode}
2397 % \changes{v1.9r}{1999/01/06}{Minor documentation fix.}
2398 % The big circle is here to define the command \cs{textcircled}.
2399 % Formerly it was taken from the |cmsy| font.
2400 % \changes{v1.9h}{1997/12/17}{Changed to decimal codes in \cs{ooalign}.}
2401 % \changes{v1.9k}{1998/01/12}{Adding missing braces and \cs{ushape}.}
2402 % \changes{v1.9y}{2000/01/30}{Use \cs{hmode@bgroup} where applicable
2403 %    (pr/3160)}
2404 %    \begin{macrocode}
2405 \DeclareTextSymbol{\textbigcircle}{TS1}{79}
2406 \DeclareTextCommand{\textcircled}{TS1}[1]{\hmode@bgroup
2407    \ooalign{%
2408       \hfil \raise .07ex\hbox {\upshape#1}\hfil \crcr
2409       \char 79   % '117 = "4F
2410    }%
2411  \egroup}
2412 %    \end{macrocode}
2414 % More text companion symbols.
2416 %    "50 = 80 
2417 %    \begin{macrocode}
2418 \DeclareTextSymbol{\textohm}{TS1}{87}
2419 %    \end{macrocode}
2420 %    "58 = 88 
2421 %    \begin{macrocode}
2422 \DeclareTextSymbol{\textlbrackdbl}{TS1}{91}
2423 \DeclareTextSymbol{\textrbrackdbl}{TS1}{93}
2424 \DeclareTextSymbol{\textuparrow}{TS1}{94}
2425 \DeclareTextSymbol{\textdownarrow}{TS1}{95}
2426 %    \end{macrocode}
2427 %    "60 = 96 
2428 %    \begin{macrocode}
2429 \DeclareTextSymbol{\textasciigrave}{TS1}{96}
2430 \DeclareTextSymbol{\textborn}{TS1}{98}
2431 \DeclareTextSymbol{\textdivorced}{TS1}{99}
2432 \DeclareTextSymbol{\textdied}{TS1}{100}
2433 %    \end{macrocode}
2434 %    "68 = 104 
2435 %    \begin{macrocode}
2436 \DeclareTextSymbol{\textleaf}{TS1}{108}
2437 \DeclareTextSymbol{\textmarried}{TS1}{109}
2438 \DeclareTextSymbol{\textmusicalnote}{TS1}{110}
2439 %    \end{macrocode}
2440 %    "78 = 120 
2441 %    \begin{macrocode}
2442 \DeclareTextSymbol{\texttildelow}{TS1}{126}
2443 %    \end{macrocode}
2445 % This glyph, |\textdblhyphenchar| is hanging, like the hyphenchar of
2446 % the ec fonts.
2448 %    \begin{macrocode}
2449 \DeclareTextSymbol{\textdblhyphenchar}{TS1}{127}
2450 %    \end{macrocode}
2451 %    "80 = 128 
2452 %    \begin{macrocode}
2453 \DeclareTextSymbol{\textasciibreve}{TS1}{128}
2454 \DeclareTextSymbol{\textasciicaron}{TS1}{129}
2455 %    \end{macrocode}
2457 % This next glyph is \emph{not} the same as |\textquotedbl|.
2459 % \changes{v1.9p}{1998/06/12}{Corrected 130 and 131, see pr/2834}
2460 %    \begin{macrocode}
2461 \DeclareTextSymbol{\textacutedbl}{TS1}{130}
2462 \DeclareTextSymbol{\textgravedbl}{TS1}{131} 
2463 \DeclareTextSymbol{\textdagger}{TS1}{132}
2464 \DeclareTextSymbol{\textdaggerdbl}{TS1}{133}
2465 \DeclareTextSymbol{\textbardbl}{TS1}{134}
2466 \DeclareTextSymbol{\textperthousand}{TS1}{135}
2467 %    \end{macrocode}
2468 %    "88 = 136
2469 %    \begin{macrocode}
2470 \DeclareTextSymbol{\textbullet}{TS1}{136}
2471 \DeclareTextSymbol{\textcelsius}{TS1}{137}
2472 \DeclareTextSymbol{\textdollaroldstyle}{TS1}{138}
2473 \DeclareTextSymbol{\textcentoldstyle}{TS1}{139}
2474 \DeclareTextSymbol{\textflorin}{TS1}{140}
2475 \DeclareTextSymbol{\textcolonmonetary}{TS1}{141}
2476 \DeclareTextSymbol{\textwon}{TS1}{142}
2477 \DeclareTextSymbol{\textnaira}{TS1}{143}
2478 %    \end{macrocode}
2479 %    "90 = 144 
2480 %    \begin{macrocode}
2481 \DeclareTextSymbol{\textguarani}{TS1}{144}
2482 \DeclareTextSymbol{\textpeso}{TS1}{145}
2483 \DeclareTextSymbol{\textlira}{TS1}{146}
2484 \DeclareTextSymbol{\textrecipe}{TS1}{147}
2485 \DeclareTextSymbol{\textinterrobang}{TS1}{148}
2486 \DeclareTextSymbol{\textinterrobangdown}{TS1}{149}
2487 \DeclareTextSymbol{\textdong}{TS1}{150}
2488 \DeclareTextSymbol{\texttrademark}{TS1}{151}
2489 %    \end{macrocode}
2490 %    "98 = 152 
2491 %    \begin{macrocode}
2492 \DeclareTextSymbol{\textpertenthousand}{TS1}{152}
2493 \DeclareTextSymbol{\textpilcrow}{TS1}{153}
2494 \DeclareTextSymbol{\textbaht}{TS1}{154}
2495 \DeclareTextSymbol{\textnumero}{TS1}{155}
2496 %    \end{macrocode}
2497 % This next name may change.
2498 % For the following sign we know only a german name, which is 
2499 % abz\"uglich. The meaning is something like ``commercial minus''. 
2500 % An ASCII ersatz is ./. (dot slash dot).
2501 % The temporary English name is |\textdiscount|.
2502 %    \begin{macrocode}
2503 \DeclareTextSymbol{\textdiscount}{TS1}{156}
2504 \DeclareTextSymbol{\textestimated}{TS1}{157}
2505 \DeclareTextSymbol{\textopenbullet}{TS1}{158}
2506 \DeclareTextSymbol{\textservicemark}{TS1}{159}
2507 %    \end{macrocode}
2508 %    "A0 = 160 
2509 %    \begin{macrocode}
2510 \DeclareTextSymbol{\textlquill}{TS1}{160}
2511 \DeclareTextSymbol{\textrquill}{TS1}{161}
2512 \DeclareTextSymbol{\textcent}{TS1}{162}
2513 \DeclareTextSymbol{\textsterling}{TS1}{163}
2514 \DeclareTextSymbol{\textcurrency}{TS1}{164}
2515 \DeclareTextSymbol{\textyen}{TS1}{165}
2516 \DeclareTextSymbol{\textbrokenbar}{TS1}{166}
2517 \DeclareTextSymbol{\textsection}{TS1}{167}
2518 %    \end{macrocode}
2519 %    "A8 = 168
2520 %    \begin{macrocode}
2521 \DeclareTextSymbol{\textasciidieresis}{TS1}{168}
2522 \DeclareTextSymbol{\textcopyright}{TS1}{169}
2523 \DeclareTextSymbol{\textordfeminine}{TS1}{170}
2524 \DeclareTextSymbol{\textcopyleft}{TS1}{171}
2525 \DeclareTextSymbol{\textlnot}{TS1}{172}
2526 %    \end{macrocode}
2528 % The meaning of the circled-P is ``sound recording copyright''.
2530 % \changes{v1.9p}{1998/06/12}{Renamed \cs{textmacron} pr/2840}
2531 %    \begin{macrocode}
2532 \DeclareTextSymbol{\textcircledP}{TS1}{173}
2533 \DeclareTextSymbol{\textregistered}{TS1}{174}
2534 \DeclareTextSymbol{\textasciimacron}{TS1}{175}
2535 %    \end{macrocode}
2536 %    "B0 = 176
2537 %    \begin{macrocode}
2538 \DeclareTextSymbol{\textdegree}{TS1}{176}
2539 \DeclareTextSymbol{\textpm}{TS1}{177}
2540 \DeclareTextSymbol{\texttwosuperior}{TS1}{178}
2541 \DeclareTextSymbol{\textthreesuperior}{TS1}{179}
2542 \DeclareTextSymbol{\textasciiacute}{TS1}{180}
2543 \DeclareTextSymbol{\textmu}{TS1}{181} % micro sign
2544 \DeclareTextSymbol{\textparagraph}{TS1}{182}
2545 \DeclareTextSymbol{\textperiodcentered}{TS1}{183}
2546 %    \end{macrocode}
2547 %    "B8 = 184
2548 %    \begin{macrocode}
2549 \DeclareTextSymbol{\textreferencemark}{TS1}{184}
2550 \DeclareTextSymbol{\textonesuperior}{TS1}{185}
2551 \DeclareTextSymbol{\textordmasculine}{TS1}{186}
2552 \DeclareTextSymbol{\textsurd}{TS1}{187}
2553 \DeclareTextSymbol{\textonequarter}{TS1}{188}
2554 \DeclareTextSymbol{\textonehalf}{TS1}{189}
2555 \DeclareTextSymbol{\textthreequarters}{TS1}{190}
2556 \DeclareTextSymbol{\texteuro}{TS1}{191}
2557 %    \end{macrocode}
2558 %    "E0 = 208
2559 %    \begin{macrocode}
2560 \DeclareTextSymbol{\texttimes}{TS1}{214}
2561 %    \end{macrocode}
2562 %    "F0 = 240
2563 %    \begin{macrocode}
2564 \DeclareTextSymbol{\textdiv}{TS1}{246}
2565 %</TS1>
2566 %    \end{macrocode}
2567 %    
2568 % \section{Package files}
2570 % \changes{v1.9h}{1997/12/17}{Added section.}
2571 % \changes{v1.9h}{1997/12/17}{Added code for textcomp.sty.}
2572 %    This file now also contains some packages that provide access to
2573 %    the more specialised encodings.
2575 % \subsection{The fontenc package}
2577 % \changes{v1.5c}{1994/05/14}{Added the fontenc package}
2578 % \changes{v1.5g}{1994/05/16}{Removed the lowercasing of the filename.}
2579 % \changes{v1.7a}{1994/11/30}{Always load the enc.def file, so that
2580 %    the default encoding for the commands will change.}
2581 % \changes{v1.7x}{1996/05/18}{Produce error if encoding not found. 
2582 %                             pr/2054}
2583 % \changes{v1.7y}{1996/05/21}{Corrected error message (CAR)}
2584 % \changes{v1.8d}{1996/11/18}
2585 %     {(DPC) lowercase external file names. internal/1044}%
2586 % This package allows authors to specify which encodings they will use.
2587 % For each encoding |FOO|, the package looks to see if the encoding
2588 % |FOO| has already been declared.  If it has not, the file |fooenc.def|
2589 % is loaded.  The default encoding is set to be |FOO|.
2591 % In addition the package at the moment contains extra code to extend
2592 % the |\@uclclist| (list of upper/lower case pairs) for encodings that
2593 % involve cyrillic characters. THIS IS A TEMPORARY SOLUTION and will not
2594 % stay this way forever (or so we hope) but right now we are missing a 
2595 % proper interface for this and didn't wanted to rush it.
2596 % \changes{v1.9r}{1999/01/07}{Hackery to temp support cyrillic uc/lc}
2597 % \changes{v1.9t}{1999/02/24}{Corrected hackery cyrillic uc/lc list}
2598 % \changes{v1.9x}{1999/12/08}{Changed \cs{CYRRHOOK} and  \cs{cyrrhook}
2599 %    to\cs{CYRRHK} and  \cs{cyrrhk} as name changed in the cyrillic
2600 %    bundle for naming consistency with other ``hook'' glyphs.}
2601 %    \begin{macrocode}
2602 %<*package>
2603 %    \end{macrocode}
2605 % Here we define a macro that extends the |\@uclclist| if needed and
2606 % aferwards turns itself in a noop.
2607 %    \begin{macrocode}
2608 \def\update@uclc@with@cyrillic{%
2609  \expandafter\def\expandafter\@uclclist\expandafter
2610   {\@uclclist
2611   \cyra\CYRA\cyrabhch\CYRABHCH\cyrabhchdsc\CYRABHCHDSC\cyrabhdze
2612   \CYRABHDZE\cyrabhha\CYRABHHA\cyrae\CYRAE\cyrb\CYRB\cyrbyus
2613   \CYRBYUS\cyrc\CYRC\cyrch\CYRCH\cyrchldsc\CYRCHLDSC\cyrchrdsc
2614   \CYRCHRDSC\cyrchvcrs\CYRCHVCRS\cyrd\CYRD\cyrdelta\CYRDELTA
2615   \cyrdje\CYRDJE\cyrdze\CYRDZE\cyrdzhe\CYRDZHE\cyre\CYRE\cyreps
2616   \CYREPS\cyrerev\CYREREV\cyrery\CYRERY\cyrf\CYRF\cyrfita
2617   \CYRFITA\cyrg\CYRG\cyrgdsc\CYRGDSC\cyrgdschcrs\CYRGDSCHCRS
2618   \cyrghcrs\CYRGHCRS\cyrghk\CYRGHK\cyrgup\CYRGUP\cyrh\CYRH
2619   \cyrhdsc\CYRHDSC\cyrhhcrs\CYRHHCRS\cyrhhk\CYRHHK\cyrhrdsn
2620   \CYRHRDSN\cyri\CYRI\cyrie\CYRIE\cyrii\CYRII\cyrishrt\CYRISHRT
2621   \cyrishrtdsc\CYRISHRTDSC\cyrizh\CYRIZH\cyrje\CYRJE\cyrk\CYRK
2622   \cyrkbeak\CYRKBEAK\cyrkdsc\CYRKDSC\cyrkhcrs\CYRKHCRS\cyrkhk
2623   \CYRKHK\cyrkvcrs\CYRKVCRS\cyrl\CYRL\cyrldsc\CYRLDSC\cyrlhk
2624   \CYRLHK\cyrlje\CYRLJE\cyrm\CYRM\cyrmdsc\CYRMDSC\cyrmhk\CYRMHK
2625   \cyrn\CYRN\cyrndsc\CYRNDSC\cyrng\CYRNG\cyrnhk\CYRNHK\cyrnje
2626   \CYRNJE\cyrnlhk\CYRNLHK\cyro\CYRO\cyrotld\CYROTLD\cyrp\CYRP
2627   \cyrphk\CYRPHK\cyrq\CYRQ\cyrr\CYRR\cyrrdsc\CYRRDSC\cyrrhk
2628   \CYRRHK\cyrrtick\CYRRTICK\cyrs\CYRS\cyrsacrs\CYRSACRS
2629   \cyrschwa\CYRSCHWA\cyrsdsc\CYRSDSC\cyrsemisftsn\CYRSEMISFTSN
2630   \cyrsftsn\CYRSFTSN\cyrsh\CYRSH\cyrshch\CYRSHCH\cyrshha\CYRSHHA
2631   \cyrt\CYRT\cyrtdsc\CYRTDSC\cyrtetse\CYRTETSE\cyrtshe\CYRTSHE
2632   \cyru\CYRU\cyrushrt\CYRUSHRT\cyrv\CYRV\cyrw\CYRW\cyry\CYRY
2633   \cyrya\CYRYA\cyryat\CYRYAT\cyryhcrs\CYRYHCRS\cyryi\CYRYI\cyryo
2634   \CYRYO\cyryu\CYRYU\cyrz\CYRZ\cyrzdsc\CYRZDSC\cyrzh\CYRZH
2635   \cyrzhdsc\CYRZHDSC}%
2636  \let\update@uclc@with@cyrillic\relax
2638 %    \end{macrocode}
2640 % Here we process each option:
2641 %    \begin{macrocode}
2642 \DeclareOption*{%
2643    \let\encodingdefault\CurrentOption
2644    \edef\reserved@f{%
2645      \lowercase{\def\noexpand\reserved@f{\CurrentOption enc.def}}}%
2646    \reserved@f
2647    \InputIfFileExists\reserved@f
2648         {}{\PackageError{fontenc}%
2649          {Encoding file `\reserved@f' not found.%
2650           \MessageBreak
2651            You might have misspelt the name of the encoding}%
2652          {Necessary code for this encoding was not
2653           loaded.\MessageBreak
2654           Thus calling the encoding later on will
2655           produce further error messages.}}%
2656   \let\reserved@f\relax
2657 %    \end{macrocode}
2659 % In case the current encoding is one of a list of known
2660 % cyrillic ones we extend the |\@uclclist|:
2661 %    \begin{macrocode}
2662   \expandafter\in@\expandafter{\CurrentOption}%
2663                               {T2A,T2B,T2C,X2,LCY,OT2}%
2664   \ifin@
2665 %    \end{macrocode}
2667 % But only if it hasn't already been extended. This might happen if
2668 % there are several calls to fontenc loading one of the above
2669 % encodings. If we don't do this check the |\@uclclist| gets
2670 % unnecessarily big, slowing down the processing at runtime.
2671 % \changes{v1.9v}{1999/06/12}{Extend \cs{@uclclist} only once}
2672 %    \begin{macrocode}
2673      \expandafter\in@\expandafter\cyra\expandafter
2674                               {\@uclclist}%
2675      \ifin@
2676      \else
2677        \update@uclc@with@cyrillic
2678      \fi
2679   \fi
2681 %    \end{macrocode}
2683 %    \begin{macrocode}
2684 \ProcessOptions*
2685 %    \end{macrocode}
2687 %    \begin{macrocode}
2688 \fontencoding\encodingdefault\selectfont
2689 %    \end{macrocode}
2691 % To save some space we get rid of the macro extending the
2692 % |\@uclclist| (might have happened already).
2693 %    \begin{macrocode}
2694 \let\update@uclc@with@cyrillic\relax
2695 %    \end{macrocode}
2697 % Finally we pretend that the fontenc package wasn't read in. This 
2698 % allows for using it several times, e.g., in a class file and in the
2699 % preamble (at the cost of not getting any version info). 
2700 % That kind of hackery shows that using a general purpose 
2701 % package just for loading an encoding is not the right kind 
2702 % of interface for setting up encodings --- it will get replaced at 
2703 % some point in the future.
2704 % \changes{v1.9r}{1999/01/07}{Hackery to allow using fontenc several
2705 %    times}
2706 % \changes{v1.9u}{1999/06/10}{Ensure that we also forget old options
2707 %                             (pr/2888)}
2708 %    \begin{macrocode}
2709 \global\expandafter\let\csname ver@fontenc.sty\endcsname\relax    
2710 \global\expandafter\let\csname opt@fontenc.sty\endcsname\relax
2711 \global\let\@ifl@ter@@\@ifl@ter
2712 \def\@ifl@ter#1#2#3#4#5{\global\let\@ifl@ter\@ifl@ter@@}
2713 %</package>
2714 %    \end{macrocode}
2717 % \subsection{The textcomp package}
2719 %    This one is for the |TS1| encoding which contains text symbols
2720 %    for use with the |T1|-encoded text fonts.  It therefore first
2721 %    inputs the file |TS1enc.def| and then sets (or resets) the
2722 %    defaults for the symbols it contains.  The result of this is that
2723 %    when one of these symbols is accessed and the current encoding
2724 %    does not provide it, the symbol will be supplied by a silent,
2725 %    local change to this encoding.
2726 %    
2727 %    \begin{macrocode}
2728 %<*TS1sty>
2729 %    \end{macrocode}
2730 %    Since many PostScript fonts only implement a subset of |TS1| many
2731 %    commands only produce black blobs of ink. To resolve the
2732 %    resulting problems a number of options have been introduced and
2733 %    some code  has been developed to distinguish sub-encodings.
2735 %    The sub-encodings have a numerical id and are defined as follows
2736 %    for \texttt{TS1}:
2737 % \begin{description}
2739 % \item[\#5] those \texttt{TS1} symbols that are also in the ISO-Adobe
2740 %       character set; without \verb=textcurrency=, which is often
2741 %       misused for the Euro.  Older Type1 fonts from the non-\TeX{}
2742 %       world provide only this subset.
2744 % \item[\#4] = \#5 + \verb=\texteuro=.  Most newer fonts provide this.
2746 % \item[\#3] = \#4 + \verb=\textomega=.  Can also be described as
2747 %       $\texttt{TS1} \cap (\texttt{ISO-Adobe} \cup
2748 %       \texttt{MacRoman})$.  (Except for the missing "currency".)
2751 % \item[\#2] = \#3 + \verb=\textestimated= + \verb=\textcurrency=.  Can
2752 %       also be described as $\texttt{TS1} \cap
2753 %       \texttt{Adobe-Western-2}$.  This may be relevant for OpenType
2754 %       fonts, which usually show the Adobe-Western-2 character set.
2756 %    \item[\#1] = \texttt{TS1} without \verb=\textcircled= and \verb=\t=.
2757 %       These two glyphs are often not implemented and if their kernel
2758 %       defaults are changed commands like \verb=\copyright=
2759 %       unnecessarily fail.
2761 %    \item[\#0] = full \texttt{TS1}
2762 % \end{description}
2764 %    And here a summary to go in the transcript file:
2765 %    \begin{macrocode}
2766 \PackageInfo{textcomp}{Sub-encoding information:\MessageBreak
2767     \space\space 5 = only ISO-Adobe without \string\textcurrency\MessageBreak
2768     \space\space 4 = 5 + \string\texteuro\MessageBreak
2769     \space\space 3 = 4 + \string\textohm\MessageBreak
2770     \space\space 2 = 3 + \noexpand\textestimated+ \string\textcurrency\MessageBreak
2771     \space\space 1 = TS1 - \noexpand\textcircled- \string\t\MessageBreak
2772     \space\space 0 = TS1 (full)\MessageBreak
2773     Font families with sub-encoding setting implement\MessageBreak
2774     only a restricted character set as indicated.\MessageBreak 
2775     Family '?' is the default used for unknown fonts.\MessageBreak 
2776     See the documentation for details\@gobble}
2777 %    \end{macrocode}
2779 % \begin{macro}{\DeclareEncodingSubset}
2780 %    An encoding subset to which a font family belongs is declared by
2781 %    |\DeclareEncodingSubset| that take the major encoding as the
2782 %    first argument (e.g., |TS1|), the family name as the second
2783 %    argument (e.g., |cmr|), and the subset encoding id as a third,
2784 %    (e.g., |0| for |cmr|).
2786 %    The default encoding subset to use when nothing is known about
2787 %    the current font family is named |?|.
2788 %    \begin{macrocode}
2789 \def\DeclareEncodingSubset#1#2#3{%
2790    \@ifundefined{#1:#2}%
2791      {\PackageInfo{textcomp}{Setting #2 sub-encoding to #1/#3}}%
2792      {\PackageInfo{textcomp}{Changing #2 sub-encoding to #1/#3}}%
2793    \@namedef{#1:#2}{#3}}
2794 \@onlypreamble\DeclareEncodingSubset
2795 %    \end{macrocode}
2796 % \end{macro}
2797 %    
2799 %  The options for the package are the following:
2800 %    \begin{description}
2801 %    \item[safe] 
2802 %       for unknown font families enables only symbols that are also
2803 %       in the ISO-Adobe character set; without "currency", which is
2804 %       often misused for the Euro.  Older Type1 fonts from the
2805 %       non-TeX world provide only this subset.
2807 %    \item[euro] 
2808 %       enables the ``safe'' symbols plus the |\texteuro|
2809 %       command. Most newer fonts provide this.
2811 %    \item[full] enables all |TS1| commands; useful only with fonts
2812 %       like EC or CM bright.
2814 %    \item[almostfull] 
2815 %       same as ``full'', except that |\textcircled|
2816 %       and |\t| are \emph{not} redefined from their defaults to avoid
2817 %       that commands like |\copyright| suddenly no longer work.
2819 %    \item[force]
2820 %       ignore all subset encoding definitions stored in the package
2821 %       itself or in the configuration file and always use the default
2822 %       subset as specifed by one of the other options (seldom useful,
2823 %       only dangerous).
2824 %    \end{description}
2826 % \begin{macro}{\iftc@forced}
2827 %    Switch used to implement the \texttt{force} option
2828 %    \begin{macrocode}
2829 \newif\iftc@forced   \tc@forcedfalse
2830 %    \end{macrocode}
2831 % \end{macro}
2833 %    This is implemented by defining the default subset:
2834 %    \begin{macrocode}
2835 \DeclareOption{full}{\DeclareEncodingSubset{TS1}{?}{0}}
2836 \DeclareOption{almostfull}{\DeclareEncodingSubset{TS1}{?}{1}}
2837 \DeclareOption{euro}{\DeclareEncodingSubset{TS1}{?}{4}}
2838 \DeclareOption{safe}{\DeclareEncodingSubset{TS1}{?}{5}}
2839 %    \end{macrocode}
2840 %    The default is ``almostfull'' which means that old documents will
2841 %    work except that |\textcircled| and |\t| will use the kernel
2842 %    defaults (with the advantage that this also works if the current
2843 %    font (as often the case) doesn't implement these glyphs.
2845 %    The ``force'' option simply sets the switch to true.
2846 %    \begin{macrocode}
2847 \DeclareOption{force}{\tc@forcedtrue}
2848 %    \end{macrocode}
2850 %    The suggestions to user is to use the ``safe'' option always
2851 %    unless that balks in which case they could switch to
2852 %    ``almostfull'' but then better check their output manually.
2854 %    \begin{macrocode}
2855 \def\tc@errorwarn{\PackageError}
2856 \DeclareOption{warn}{\gdef\tc@errorwarn#1#2#3{\PackageWarning{#1}{#2}}}
2857 %    \end{macrocode}
2858 %    
2859 %    \begin{macrocode}
2860 \ExecuteOptions{almostfull}
2861 \ProcessOptions\relax
2862 %    \end{macrocode}
2864 % \begin{macro}{\CheckEncodingSubset}
2865 %    The command |\CheckEncodingSubset| will check if the current font
2866 %    family has the right encoding subset to typeset a certain
2867 %    command. It takes five arguments as follows:
2868 %    first argument is either |\UseTextSymbol|, |\UseTextAccent|
2869 %    depending on whether or not the symbol is a text symbol or a text
2870 %    accent.
2872 %    The second argument is the encoding from which this symbol should
2873 %    be fetched.
2875 %    The third argument is either a fake accessor command or an error
2876 %    message. the code in that argument (if ever executed) receives
2877 %    two arguments: |#2| and |#5| of |\CheckEncodingSubset|.
2879 %    Argument four is the subset encoding id to test against: if this
2880 %    value is higher than the subset id of the current font family
2881 %    then we typeset the symbol, i.e., execute |#1{#2}#5| otherwise
2882 %    it runs |#3#5|, e.g., to produce an error message or fake the
2883 %    glyph somehow.
2885 %    Argument five is the symbol or accent command that is being
2886 %    checked.
2888 %    For usage examples see definitions below.
2889 %    \begin{macrocode}
2890 \iftc@forced
2891 %    \end{macrocode}
2892 %    If the ``force'' option was given we always use the default for
2893 %    testing against.
2894 %    \begin{macrocode}
2895 \def\CheckEncodingSubset#1#2#3#4#5{%
2896     \ifnum #4>%
2897         0\csname #2:?\endcsname
2898         \relax
2899    \expandafter\@firstoftwo
2900   \else
2901    \expandafter\@secondoftwo
2902  \fi
2903   {#1{#2}}{#3}%
2904   #5%
2906 %    \end{macrocode}
2907 %    In normal circumstances the test is a bit more complicated: first
2908 %    check if there exists a macro
2909 %    |\|\meta{arg2}|:|\meta{current-family} and if so use that value
2910 %    to test against, otherwise use the default to test against.
2911 %    \begin{macrocode}
2912 \else
2913 \def\CheckEncodingSubset#1#2#3#4#5{%
2914     \ifnum #4>%
2915       \expandafter\ifx\csname #2:\f@family\endcsname\relax
2916         0\csname #2:?\endcsname
2917       \else
2918         \csname #2:\f@family\endcsname
2919       \fi
2920    \relax
2921    \expandafter\@firstoftwo
2922   \else
2923    \expandafter\@secondoftwo
2924  \fi
2925   {#1{#2}}{#3}%
2926   #5%
2929 %    \end{macrocode}
2930 % \end{macro}
2932 % \begin{macro}{tc@subst}
2933 %    \begin{macrocode}
2934 \def\tc@subst#1{%
2935    \tc@errorwarn{textcomp}%  % should be latex error if general
2936     {Symbol \string#1 not provided by\MessageBreak
2937      font family \f@family\space
2938      in TS1 encoding.\MessageBreak Default family used instead}\@eha
2939   \bgroup\fontfamily\textcompsubstdefault\selectfont#1\egroup
2941 %    \end{macrocode}
2942 % \end{macro}
2944 % \begin{macro}{\textcompsubstdefault}
2945 %    \begin{macrocode}
2946 \def\textcompsubstdefault{cmr}
2947 %    \end{macrocode}
2948 % \end{macro}
2950 % \begin{macro}{\tc@error}
2951 %    |\tc@error| is going to be used in arg |#3| of
2952 %    |\CheckEncodingSubset| when a symbol is not available in a
2953 %    certain font family. It gets pass the encoding it normally lives
2954 %    in (arg one) and the name of the symbol or accent that has a
2955 %    problem.
2957 %    \begin{macrocode}
2958 % error commands take argument:
2959 % #1 symbol to be used
2960 \def\tc@error#1{%
2961    \PackageError{textcomp}%  % should be latex error if general
2962     {Accent \string#1 not provided by\MessageBreak
2963      font family \f@family\space
2964      in TS1 encoding}\@eha
2966 %    \end{macrocode}
2967 % \end{macro}
2969 %    
2970 % \begin{macro}{\tc@fake@euro}
2971 %    |\tc@fake@euro|  is an example of a ``fake'' definition to use in  arg |#3| of
2972 %    |\CheckEncodingSubset| when a symbol is not available in a
2973 %    certain font family. Here we produce an Euro symbol by combining
2974 %    a ``C'' with a ``=''.
2975 %    \begin{macrocode}
2976 \def\tc@fake@euro#1{%
2977    \leavevmode
2978    \PackageInfo{textcomp}{Faking \noexpand#1for font family
2979                           \f@family\MessageBreak in TS1 encoding}%
2980    \valign{##\cr
2981       \vfil\hbox to 0.07em{\dimen@\f@size\p@
2982                            \math@fontsfalse
2983                            \fontsize{.7\dimen@}\z@\selectfont=\hss}\vfil\cr%
2984       \hbox{C}\crcr
2985    }%
2987 %    \end{macrocode}
2988 % \end{macro}
2989 %    
2990 % \begin{macro}{\tc@check@symbol}
2991 % \begin{macro}{\tc@check@accent}
2992 %    These are two abbreviations that we use below to check symbols
2993 %    and accents in TS1. Only there to save some space, e.g., we can
2994 %    then write
2995 %\begin{verbatim}
2996 %\DeclareTextCommandDefault{\textcurrency}{\tc@check@symbol3\textcurrency}
2997 %\end{verbatim}
2998 %    to ensure that |\textcurrency| is only typeset if the current
2999 %    font has a \texttt{TS1} subset id of less than 3. Otherwise
3000 %    |\tc@error| is called telling the user that for this font family
3001 %    |\textcurreny| is not available.
3002 %    \begin{macrocode}
3003 \def\tc@check@symbol{\CheckEncodingSubset\UseTextSymbol{TS1}\tc@subst}
3004 \def\tc@check@accent{\CheckEncodingSubset\UseTextAccent{TS1}\tc@error}
3005 %    \end{macrocode}
3006 % \end{macro}
3007 % \end{macro}
3009 %    We start with the commands that are ``safe'' and which can be
3010 %    unconditionally set up, first the accents\ldots
3011 %    \begin{macrocode}
3012 \DeclareTextAccentDefault{\capitalcedilla}{TS1}
3013 \DeclareTextAccentDefault{\capitalogonek}{TS1}
3014 \DeclareTextAccentDefault{\capitalgrave}{TS1}
3015 \DeclareTextAccentDefault{\capitalacute}{TS1}
3016 \DeclareTextAccentDefault{\capitalcircumflex}{TS1}
3017 \DeclareTextAccentDefault{\capitaltilde}{TS1}
3018 \DeclareTextAccentDefault{\capitaldieresis}{TS1}
3019 \DeclareTextAccentDefault{\capitalhungarumlaut}{TS1}
3020 \DeclareTextAccentDefault{\capitalring}{TS1}
3021 \DeclareTextAccentDefault{\capitalcaron}{TS1}
3022 \DeclareTextAccentDefault{\capitalbreve}{TS1}
3023 \DeclareTextAccentDefault{\capitalmacron}{TS1}
3024 \DeclareTextAccentDefault{\capitaldotaccent}{TS1}
3025 %    \end{macrocode}
3026 %    \ldots and then the other glyphs.
3027 % \changes{v1.9p}{1998/06/12}{Renamed \cs{textmacron} pr/2840}
3028 %    \begin{macrocode}
3029 \DeclareTextSymbolDefault{\textcapitalcompwordmark}{TS1}
3030 \DeclareTextSymbolDefault{\textascendercompwordmark}{TS1}
3031 \DeclareTextSymbolDefault{\textquotestraightbase}{TS1}
3032 \DeclareTextSymbolDefault{\textquotestraightdblbase}{TS1}
3033 \DeclareTextSymbolDefault{\texttwelveudash}{TS1}
3034 \DeclareTextSymbolDefault{\textthreequartersemdash}{TS1}
3035 \DeclareTextSymbolDefault{\textdollar}{TS1}
3036 \DeclareTextSymbolDefault{\textquotesingle}{TS1}
3037 \DeclareTextSymbolDefault{\textasteriskcentered}{TS1}
3038 \DeclareTextSymbolDefault{\textfractionsolidus}{TS1}
3039 \DeclareTextSymbolDefault{\textminus}{TS1}
3040 \DeclareTextSymbolDefault{\textlbrackdbl}{TS1}
3041 \DeclareTextSymbolDefault{\textrbrackdbl}{TS1}
3042 \DeclareTextSymbolDefault{\textasciigrave}{TS1}
3043 \DeclareTextSymbolDefault{\texttildelow}{TS1}
3044 \DeclareTextSymbolDefault{\textasciibreve}{TS1}
3045 \DeclareTextSymbolDefault{\textasciicaron}{TS1}
3046 \DeclareTextSymbolDefault{\textgravedbl}{TS1}
3047 \DeclareTextSymbolDefault{\textacutedbl}{TS1}
3048 \DeclareTextSymbolDefault{\textdagger}{TS1}
3049 \DeclareTextSymbolDefault{\textdaggerdbl}{TS1}
3050 \DeclareTextSymbolDefault{\textbardbl}{TS1}
3051 \DeclareTextSymbolDefault{\textperthousand}{TS1}
3052 \DeclareTextSymbolDefault{\textbullet}{TS1}
3053 \DeclareTextSymbolDefault{\textcelsius}{TS1}
3054 \DeclareTextSymbolDefault{\textflorin}{TS1}
3055 \DeclareTextSymbolDefault{\texttrademark}{TS1}
3056 \DeclareTextSymbolDefault{\textcent}{TS1}
3057 \DeclareTextSymbolDefault{\textsterling}{TS1}
3058 \DeclareTextSymbolDefault{\textyen}{TS1}
3059 \DeclareTextSymbolDefault{\textbrokenbar}{TS1}
3060 \DeclareTextSymbolDefault{\textsection}{TS1}
3061 \DeclareTextSymbolDefault{\textasciidieresis}{TS1}
3062 \DeclareTextSymbolDefault{\textcopyright}{TS1}
3063 \DeclareTextSymbolDefault{\textordfeminine}{TS1}
3064 \DeclareTextSymbolDefault{\textlnot}{TS1}
3065 \DeclareTextSymbolDefault{\textregistered}{TS1}
3066 \DeclareTextSymbolDefault{\textasciimacron}{TS1}
3067 \DeclareTextSymbolDefault{\textdegree}{TS1}
3068 \DeclareTextSymbolDefault{\textpm}{TS1}
3069 \DeclareTextSymbolDefault{\texttwosuperior}{TS1}
3070 \DeclareTextSymbolDefault{\textthreesuperior}{TS1}
3071 \DeclareTextSymbolDefault{\textasciiacute}{TS1}
3072 \DeclareTextSymbolDefault{\textmu}{TS1}
3073 \DeclareTextSymbolDefault{\textparagraph}{TS1}
3074 \DeclareTextSymbolDefault{\textperiodcentered}{TS1}
3075 \DeclareTextSymbolDefault{\textonesuperior}{TS1}
3076 \DeclareTextSymbolDefault{\textordmasculine}{TS1}
3077 \DeclareTextSymbolDefault{\textonequarter}{TS1}
3078 \DeclareTextSymbolDefault{\textonehalf}{TS1}
3079 \DeclareTextSymbolDefault{\textthreequarters}{TS1}
3080 \DeclareTextSymbolDefault{\texttimes}{TS1}
3081 \DeclareTextSymbolDefault{\textdiv}{TS1}
3082 %    \end{macrocode}
3084 %    The |\texteuro| is only available for subsets with id 4 or
3085 %    less. Otherwise we fake the glyph using |\tc@fake@euro|
3086 %    \begin{macrocode}
3087 \DeclareTextCommandDefault{\texteuro}
3088    {\CheckEncodingSubset\UseTextSymbol{TS1}\tc@fake@euro5\texteuro}
3089 %    \end{macrocode}
3090 %    
3091 %    The |\textohm| is only available for subsets with id 3 or
3092 %    less. Otherwise we produce an error.
3093 %    \begin{macrocode}
3094 \DeclareTextCommandDefault{\textohm}{\tc@check@symbol4\textohm}
3095 %    \end{macrocode}
3096 %    The |\textestimated| and |\textcurrency| are only provided for
3097 %    fonts with subset encoding with id 2 or less.
3098 %    \begin{macrocode}
3099 \DeclareTextCommandDefault{\textestimated}{\tc@check@symbol3\textestimated}
3100 \DeclareTextCommandDefault{\textcurrency}{\tc@check@symbol3\textcurrency}
3101 %    \end{macrocode}
3102 %    Nearly all of the remaining glyphs are provided only with fonts
3103 %    with id 1 or 0, i.e., are essentially complete.
3104 %    \begin{macrocode}
3105 \DeclareTextCommandDefault{\capitaltie}{\tc@check@accent2\capitaltie}
3106 \DeclareTextCommandDefault{\newtie}{\tc@check@accent2\newtie}
3107 \DeclareTextCommandDefault{\capitalnewtie}{\tc@check@accent2\capitalnewtie}
3108 \DeclareTextCommandDefault{\textleftarrow}{\tc@check@symbol2\textleftarrow}
3109 \DeclareTextCommandDefault{\textrightarrow}{\tc@check@symbol2\textrightarrow}
3110 \DeclareTextCommandDefault{\textblank}{\tc@check@symbol2\textblank}
3111 \DeclareTextCommandDefault{\textdblhyphen}{\tc@check@symbol2\textdblhyphen}
3112 \DeclareTextCommandDefault{\textzerooldstyle}{\tc@check@symbol2\textzerooldstyle}
3113 \DeclareTextCommandDefault{\textoneoldstyle}{\tc@check@symbol2\textoneoldstyle}
3114 \DeclareTextCommandDefault{\texttwooldstyle}{\tc@check@symbol2\texttwooldstyle}
3115 \DeclareTextCommandDefault{\textthreeoldstyle}{\tc@check@symbol2\textthreeoldstyle}
3116 \DeclareTextCommandDefault{\textfouroldstyle}{\tc@check@symbol2\textfouroldstyle}
3117 \DeclareTextCommandDefault{\textfiveoldstyle}{\tc@check@symbol2\textfiveoldstyle}
3118 \DeclareTextCommandDefault{\textsixoldstyle}{\tc@check@symbol2\textsixoldstyle}
3119 \DeclareTextCommandDefault{\textsevenoldstyle}{\tc@check@symbol2\textsevenoldstyle}
3120 \DeclareTextCommandDefault{\texteightoldstyle}{\tc@check@symbol2\texteightoldstyle}
3121 \DeclareTextCommandDefault{\textnineoldstyle}{\tc@check@symbol2\textnineoldstyle}
3122 \DeclareTextCommandDefault{\textlangle}{\tc@check@symbol2\textlangle}
3123 \DeclareTextCommandDefault{\textrangle}{\tc@check@symbol2\textrangle}
3124 \DeclareTextCommandDefault{\textmho}{\tc@check@symbol2\textmho}
3125 \DeclareTextCommandDefault{\textbigcircle}{\tc@check@symbol2\textbigcircle}
3126 \DeclareTextCommandDefault{\textuparrow}{\tc@check@symbol2\textuparrow}
3127 \DeclareTextCommandDefault{\textdownarrow}{\tc@check@symbol2\textdownarrow}
3128 \DeclareTextCommandDefault{\textborn}{\tc@check@symbol2\textborn}
3129 \DeclareTextCommandDefault{\textdivorced}{\tc@check@symbol2\textdivorced}
3130 \DeclareTextCommandDefault{\textdied}{\tc@check@symbol2\textdied}
3131 \DeclareTextCommandDefault{\textleaf}{\tc@check@symbol2\textleaf}
3132 \DeclareTextCommandDefault{\textmarried}{\tc@check@symbol2\textmarried}
3133 \DeclareTextCommandDefault{\textmusicalnote}{\tc@check@symbol2\textmusicalnote}
3134 \DeclareTextCommandDefault{\textdblhyphenchar}{\tc@check@symbol2\textdblhyphenchar}
3135 \DeclareTextCommandDefault{\textdollaroldstyle}{\tc@check@symbol2\textdollaroldstyle}
3136 \DeclareTextCommandDefault{\textcentoldstyle}{\tc@check@symbol2\textcentoldstyle}
3137 \DeclareTextCommandDefault{\textcolonmonetary}{\tc@check@symbol2\textcolonmonetary}
3138 \DeclareTextCommandDefault{\textwon}{\tc@check@symbol2\textwon}
3139 \DeclareTextCommandDefault{\textnaira}{\tc@check@symbol2\textnaira}
3140 \DeclareTextCommandDefault{\textguarani}{\tc@check@symbol2\textguarani}
3141 \DeclareTextCommandDefault{\textpeso}{\tc@check@symbol2\textpeso}
3142 \DeclareTextCommandDefault{\textlira}{\tc@check@symbol2\textlira}
3143 \DeclareTextCommandDefault{\textrecipe}{\tc@check@symbol2\textrecipe}
3144 \DeclareTextCommandDefault{\textinterrobang}{\tc@check@symbol2\textinterrobang}
3145 \DeclareTextCommandDefault{\textinterrobangdown}{\tc@check@symbol2\textinterrobangdown}
3146 \DeclareTextCommandDefault{\textdong}{\tc@check@symbol2\textdong}
3147 \DeclareTextCommandDefault{\textpertenthousand}{\tc@check@symbol2\textpertenthousand}
3148 \DeclareTextCommandDefault{\textpilcrow}{\tc@check@symbol2\textpilcrow}
3149 \DeclareTextCommandDefault{\textbaht}{\tc@check@symbol2\textbaht}
3150 \DeclareTextCommandDefault{\textnumero}{\tc@check@symbol2\textnumero}
3151 \DeclareTextCommandDefault{\textdiscount}{\tc@check@symbol2\textdiscount}
3152 \DeclareTextCommandDefault{\textopenbullet}{\tc@check@symbol2\textopenbullet}
3153 \DeclareTextCommandDefault{\textservicemark}{\tc@check@symbol2\textservicemark}
3154 \DeclareTextCommandDefault{\textlquill}{\tc@check@symbol2\textlquill}
3155 \DeclareTextCommandDefault{\textrquill}{\tc@check@symbol2\textrquill}
3156 \DeclareTextCommandDefault{\textcopyleft}{\tc@check@symbol2\textcopyleft}
3157 \DeclareTextCommandDefault{\textcircledP}{\tc@check@symbol2\textcircledP}
3158 \DeclareTextCommandDefault{\textreferencemark}{\tc@check@symbol2\textreferencemark}
3159 \DeclareTextCommandDefault{\textsurd}{\tc@check@symbol2\textsurd}
3160 %    \end{macrocode}
3161 %    The |\textcircled| and |\t| are handled specially, unless the
3162 %    current font has a subset id of 0 (i.e. full \texttt{TS1}) we
3163 %    pick the symbols up from the the math font encodings, i.e., the
3164 %    third argument to |\CheckEncodingSubset| uses |\UseTextAccent| to
3165 %    get them from there.
3166 %    \begin{macrocode}
3167 \DeclareTextCommandDefault{\textcircled}
3168   {\CheckEncodingSubset\UseTextAccent{TS1}{\UseTextAccent{OMS}}1\textcircled}
3169 \DeclareTextCommandDefault{\t}
3170   {\CheckEncodingSubset\UseTextAccent{TS1}{\UseTextAccent{OML}}1\t}
3171 %    \end{macrocode}
3175 %    Finally input the encoding-specific definitions for
3176 %    \texttt{TS1} thus making the top-level definitions
3177 %    optimised for this encoding (and not for the default
3178 %    encoding, see section~\ref{sec:orderofdecls}).
3179 % \changes{v1.9o}{1998/03/20}{Load decls after defaults for speed.}
3180 %    \begin{macrocode}
3181 \input{ts1enc.def}
3182 %    \end{macrocode}
3183 %    Now having the new glyphs available we also want to make sure
3184 %    that they are used. For most cases this will automatically happen
3185 %    but for some glyphs there are inferior definitions already known
3186 %    to \LaTeX{} which will prevent the usage of the \texttt{TS1}
3187 %    versions (see section~\ref{sec:removeencspec} above). So we better
3188 %    get rid of them:
3189 % \changes{v1.9o}{1998/03/20}{Added various \cs{UndeclareTextCommand}
3190 %    declarations for pr/2783}
3191 %    \begin{macrocode}
3192 \UndeclareTextCommand{\textsterling}{OT1}
3193 \UndeclareTextCommand{\textdollar}  {OT1}
3194 %    \end{macrocode}
3195 %    Similar declarations should probably be made for other encodings
3196 %    like \texttt{OT4} if they are in use.
3197 %    \begin{macrocode}
3198 %\UndeclareTextCommand{\textsterling}{OT4}
3199 %\UndeclareTextCommand{\textdollar}  {OT4}
3200 %    \end{macrocode}
3201 %    From the \texttt{T1} encoding there are two candidates for removal:
3202 %    \textperthousand{} and \textpertenthousand{} since these are both
3203 %    constructed from \% followed by a tiny
3204 %    `{\fontencoding{T1}\selectfont \char 24}'
3205 %    rather than being a single glyph. The problem with this
3206 %    approach is that in PostScript fonts this small zero is usually not
3207 %    available resulting in \%\rule{3pt}{3pt} rather than
3208 %    \textperthousand{} while the real glyph (at least for
3209 %    |\textperthousand|) is available in the PostScript version of
3210 %    \texttt{TS1}.  So for the moment we compromise by removing the
3211 %    \texttt{T1} declaration for |\textperthousand| but keeping the one
3212 %    for |\textpertenthousand|. This will have the effect that with
3213 %    Computer Modern fonts everything will come out (although
3214 %    \textperthousand{} and \textpertenthousand{} are not taken from the
3215 %    same physical font) and with PostScript fonts \textperthousand{}
3216 %    will come out correctly while \textpertenthousand{} will most
3217 %    likely look like \%\rule{6pt}{3pt} --- which is probably an
3218 %    improvement over just getting a single `\rule{3pt}{3pt}' to
3219 %    indicate a completely missing glyph, which would happen if we
3220 %    also `undeclared' |\textpertenthousand|.
3221 %    \begin{macrocode}
3222 \UndeclareTextCommand{\textperthousand}{T1}
3223 %\UndeclareTextCommand{\textpertenthousand}{T1}
3224 %    \end{macrocode}
3227 %  \subsubsection{Supporting oldstyle digits}
3229 %    \begin{macrocode}
3230 \DeclareRobustCommand\oldstylenums[1]{%
3231  \begingroup
3232   \ifmmode  
3233    \mathgroup\symletters #1%
3234   \else
3235    \CheckEncodingSubset\@use@text@encoding{TS1}%
3236        {\PackageWarning{textcomp}%
3237           {Oldstyle digits unavailable for
3238            family \f@family.\MessageBreak 
3239            Lining digits used instead}}%
3240        \tw@{#1}%
3241    \fi
3242  \endgroup
3244 %    \end{macrocode}
3246 %  \subsubsection{Subset encoding defaults}
3248 %    For many font families commonly used in the \TeX{} world we
3249 %    provide the subset encoding data here. Users can add additional
3250 %    font families in the file \texttt{textcomp.cfg} if they own other
3251 %    fonts.
3253 %    However, if the option ``forced'' was given then all subset
3254 %    encoding specifications are ignored, so there is no point in
3255 %    setting any of them up:
3256 %    \begin{macrocode}
3257 \iftc@forced \else
3258 %    \end{macrocode}
3260 %    Computer modern based fonts (e.g., CM, CM-Bright, Concrete):
3261 %    \begin{macrocode}
3262 \DeclareEncodingSubset{TS1}{cmr}     {0}
3263 \DeclareEncodingSubset{TS1}{cmss}    {0}
3264 \DeclareEncodingSubset{TS1}{cmtt}    {0}
3265 \DeclareEncodingSubset{TS1}{cmvtt}   {0}
3266 \DeclareEncodingSubset{TS1}{cmbr}    {0}
3267 \DeclareEncodingSubset{TS1}{cmtl}    {0}
3268 \DeclareEncodingSubset{TS1}{ccr}     {0}
3269 %    \end{macrocode}
3270 %    
3271 %    PSNFSS fonts:
3272 %    \begin{macrocode}
3273 \DeclareEncodingSubset{TS1}{ptm}     {4}
3274 \DeclareEncodingSubset{TS1}{pcr}     {4}
3275 \DeclareEncodingSubset{TS1}{phv}     {4}
3276 \DeclareEncodingSubset{TS1}{ppl}     {3}
3277 \DeclareEncodingSubset{TS1}{pag}     {4}
3278 \DeclareEncodingSubset{TS1}{pbk}     {4}
3279 \DeclareEncodingSubset{TS1}{pnc}     {4}
3280 \DeclareEncodingSubset{TS1}{pzc}     {4}
3281 \DeclareEncodingSubset{TS1}{bch}     {4}
3282 \DeclareEncodingSubset{TS1}{put}     {5}
3283 %    \end{macrocode}
3284 %    
3285 %    Other CTAN fonts (probably not complete):
3286 %    \begin{macrocode}
3287 \DeclareEncodingSubset{TS1}{uag}     {5}
3288 \DeclareEncodingSubset{TS1}{ugq}     {5}
3289 \DeclareEncodingSubset{TS1}{ul8}     {4}
3290 \DeclareEncodingSubset{TS1}{ul9}     {4}  % (LuxiSans, one day)
3291 \DeclareEncodingSubset{TS1}{augie}   {5}
3292 \DeclareEncodingSubset{TS1}{dayrom}  {3}
3293 \DeclareEncodingSubset{TS1}{dayroms} {3}
3294 \DeclareEncodingSubset{TS1}{pxr}     {0}
3295 \DeclareEncodingSubset{TS1}{pxss}    {0}
3296 \DeclareEncodingSubset{TS1}{pxtt}    {0}
3297 \DeclareEncodingSubset{TS1}{txr}     {0}
3298 \DeclareEncodingSubset{TS1}{txss}    {0}
3299 \DeclareEncodingSubset{TS1}{txtt}    {0}
3300 %    \end{macrocode}
3302 %    Latin Modern and TeX Gyre:
3303 % \changes{v1.99k}{2009/10/28}{Added Latin Modern and TeX Gyre subsets}
3304 % \changes{v1.99l}{2009/11/04}{Added more Latin Modern and TeX Gyre subsets}
3305 %    \begin{macrocode}
3306 \DeclareEncodingSubset{TS1}{lmr}     {0}
3307 \DeclareEncodingSubset{TS1}{lmdh}    {0}
3308 \DeclareEncodingSubset{TS1}{lmss}    {0}
3309 \DeclareEncodingSubset{TS1}{lmssq}   {0}
3310 \DeclareEncodingSubset{TS1}{lmvtt}   {0}
3311 %    \end{macrocode}
3312 %    
3313 %    \begin{macrocode}
3314 \DeclareEncodingSubset{TS1}{qhv}     {0}
3315 \DeclareEncodingSubset{TS1}{qag}     {0}
3316 \DeclareEncodingSubset{TS1}{qbk}     {0}
3317 \DeclareEncodingSubset{TS1}{qcr}     {0}
3318 \DeclareEncodingSubset{TS1}{qcs}     {0}
3319 \DeclareEncodingSubset{TS1}{qpl}     {0}
3320 \DeclareEncodingSubset{TS1}{qtm}     {0}
3321 \DeclareEncodingSubset{TS1}{qzc}     {0}
3322 \DeclareEncodingSubset{TS1}{qhvc}    {0}
3323 %    \end{macrocode}
3325 %    Fourier-GUTenberg:
3326 %    \begin{macrocode}
3327 \DeclareEncodingSubset{TS1}{futs}    {4}
3328 \DeclareEncodingSubset{TS1}{futx}    {4}
3329 \DeclareEncodingSubset{TS1}{futj}    {4}
3330 %    \end{macrocode}
3331 %    
3332 %  Y\&Y's Lucida Bright
3333 %    \begin{macrocode}
3334 \DeclareEncodingSubset{TS1}{hlh}     {3} 
3335 \DeclareEncodingSubset{TS1}{hls}     {3}
3336 \DeclareEncodingSubset{TS1}{hlst}    {3}
3337 %    \end{macrocode}
3338 %    The remaining settings for Lucida are conservative: the following
3339 %    fonts contain the |\textohm| character but not the |\texteuro|,
3340 %    i.e., belong to neither subset~4 nor subset~3. If you want to
3341 %    use the |\textohm| with these fonts copy these definition to
3342 %    \texttt{textcomp.cfg} and change the subset to~3. However in that
3343 %    case make sure that you do not use the |\texteuro|.
3344 %    \begin{macrocode}
3345 \DeclareEncodingSubset{TS1}{hlct}    {5}
3346 \DeclareEncodingSubset{TS1}{hlx}     {5}
3347 \DeclareEncodingSubset{TS1}{hlce}    {5}
3348 \DeclareEncodingSubset{TS1}{hlcn}    {5}  
3349 \DeclareEncodingSubset{TS1}{hlcw}    {5}
3350 \DeclareEncodingSubset{TS1}{hlcf}    {5}
3351 %    \end{macrocode}
3353 %    Other commercial families\ldots
3354 %    \begin{macrocode}
3355 \DeclareEncodingSubset{TS1}{pplx}    {3}
3356 \DeclareEncodingSubset{TS1}{pplj}    {3}
3357 \DeclareEncodingSubset{TS1}{ptmx}    {4}
3358 \DeclareEncodingSubset{TS1}{ptmj}    {4}
3359 %    \end{macrocode}
3360 %    
3361 %    If the file \texttt{textcomp.cfg} exists it will be loaded at
3362 %    this point. This allows to define further subset encodings for
3363 %    font families not covered by default.
3365 %    \begin{macrocode}
3366 \InputIfFileExists{textcomp.cfg}
3367   {\PackageInfo{textcomp}{Local configuration file used}}{}
3368 %    \end{macrocode}
3369 %    
3370 %    \begin{macrocode}
3372 %</TS1sty>
3373 %    \end{macrocode}
3374 %    
3375 % \Finale
3377 \endinput