% \iffalse meta-comment % % Copyright 1993 1994 1995 1996 1997 % The LaTeX3 Project and any individual authors listed elsewhere % in this file. % % For further copyright information, and conditions for modification % and distribution, see the file legal.txt, and any other copyright % notices in this file. % % This file is part of the LaTeX2e system. % ---------------------------------------- % This system is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. % % For error reports concerning UNCHANGED versions of this file no % more than one year old, see bugs.txt. % % Please do not request updates from us directly. Primary % distribution is through the CTAN archives. % % % IMPORTANT COPYRIGHT NOTICE: % % You are NOT ALLOWED to distribute this file alone. % % You are allowed to distribute this file under the condition that it % is distributed together with all the files listed in manifest.txt. % % If you receive only some of these files from someone, complain! % % % Permission is granted to copy this file to another file with a % clearly different name and to customize the declarations in that % copy to serve the needs of your installation, provided that you % comply with the conditions in the file legal.txt. % % However, NO PERMISSION is granted to produce or to distribute a % modified version of this file under its original name. % % You are NOT ALLOWED to change this file. % % % % \fi % \iffalse %%% From File: ltoutenc.dtx %\ProvidesFile{ot1enc.def} %\ProvidesFile{t1enc.def} %\ProvidesFile{omsenc.def} %\ProvidesFile{omlenc.def} %\NeedsTeXFormat{LaTeX2e} %\ProvidesPackage{fontenc} % [1996/11/25 v1.8f % Standard LaTeX file] % Standard LaTeX package] % %<*driver> % \fi \ProvidesFile{ltoutenc.dtx} [1996/11/25 v1.8f LaTeX Kernel (font encodings)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltoutenc.dtx} \title{\filename} \date{\filedate} \author{% Johannes Braams\and David Carlisle\and Alan Jeffrey\and Frank Mittelbach\and Chris Rowley\and Rainer Sch\"opf} \begin{document} \maketitle \DocInput{\filename} \end{document} % % \fi % % \CheckSum{1226} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z % Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z % Digits \0\1\2\3\4\5\6\7\8\9 % Exclamation \! Double quote \" Hash (number) \# % Dollar \$ Percent \% Ampersand \& % Acute accent \' Left paren \( Right paren \) % Asterisk \* Plus \+ Comma \, % Minus \- Point \. Solidus \/ % Colon \: Semicolon \; Less than \< % Equals \= Greater than \> Question mark \? % Commercial at \@ Left bracket \[ Backslash \\ % Right bracket \] Circumflex \^ Underscore \_ % Grave accent \` Left brace \{ Vertical bar \| % Right brace \} Tilde \~} % % \changes{v1.7r}{1995/11/28}{doc fixes} % \changes{v1.7h}{1995/04/21}{Added \cs{null} \cs{k} latex/1274} % \changes{v1.7f}{1994/12/14}{Added braces to \cs{copyright} so it % works unbraced in subscripts.} % \changes{v1.7f}{1994/12/14}{Added check for math mode in % \cs{@changed@cmd}.} % \changes{v1.7f}{1994/12/14}{Commented out \cs{textasciicircum}, % \cs{textasciitilde}, \cs{textbackslash}, \cs{textbar}, % \cs{textgreater}, \cs{texthyphenchar}, \cs{texthyphen} and % \cs{textless} to save memory.} % \changes{v1.7e}{1994/12/10}{Added documentation for the OML encoding.} % \changes{v1.7e}{1994/12/10}{Replaced width with \cs{@width} and % ditto height in vrules.} % \changes{v1.7d}{1994/12/08}{Added \cs{null} and \cs{sh@ft} to \cs{b} % and \cs{d}.} % \changes{v1.7c}{1994/12/05}{Added braces to \cs{textcircled}.} % \changes{v1.7b}{1994/12/02}{Fixed a bug with \cs{a}.} % \changes{v1.7a}{1994/11/30}{Added new code for encoding-specific % commands. These now expand in the mouth, which means that % ligaturing and kerning can happen.} % \changes{v1.6i}{1994/11/22}{Fixed empty accents. Again.} % \changes{v1.6i}{1994/11/22}{Corrected \cs{dots} so that there's no % kerning in monowidth fonts.} % \changes{v1.6i}{1994/11/22}{Corrected typo with % \cs{mathunderscore}.} % \changes{v1.6h}{1994/11/17}{(DPC) \cs{@tempa} to \cs{reserved@a}} % \changes{v1.6d}{1994/11/02}{Wrapped lines longer than 70 characters.} % \changes{v1.6d}{1994/10/30}{Added math commands.} % \changes{v1.6d}{1994/10/30}{Added OML encoding.} % \changes{v1.6d}{1994/10/30}{Added \cs{textcircled}.} % \changes{v1.6d}{1994/10/30}{Added \cs{DeclareTextCompositeCommand}.} % \changes{v1.6c}{1994/10/29}{Renamed \cs{P}, \cs{S}, \cs{dag} and % \cs{ddag} to \cs{textparagraph}, \cs{textsection}, % \cs{textdagger} and \cs{textdaggerdbl}.} % \changes{v1.6b}{1994/10/27}{Removed the enc.def files} % \changes{v1.6a}{1994/10/25}{Added \cs{ProvideTextCommand}, % \cs{UseTextSymbol}, % \cs{UseTextAccent}, % \cs{DeclareTextSymbolDefault}, % \cs{DeclareTextAccentDefault}, % \cs{DeclareTextCommandDefault}, and % \cs{ProvideTextCommandDefault}.} % \changes{v1.5m}{1994/10/18}{Added new definitions of \cs{patterns} % and \cs{hyphenation}.} % \changes{v1.5l}{1994/10/07}{Moved the ogonek accent.} % \changes{v1.5k}{1994/05/18}{Removed braces from \cs{pounds} and % \cs{dollar}.} % \changes{v1.5k}{1994/05/18}{Replaced \cs{defaultencoding} with % \cs{encodingdefault}.} % \changes{v1.5k}{1994/05/18}{Made dotted-i produce `i'.} % \changes{v1.5j}{1994/05/17}{Added braces to \cs{pounds} so it works % as a subscript.} % \changes{v1.5i}{1994/05/16}{Fixed a bug with \cs{d}.} % \changes{v1.5h}{1994/05/16}{Added \cs{NG}, \cs{ng}, \cs{TH}, % \cs{th}, \cs{DH}, \cs{dh}, \cs{DJ} and \cs{dj}.} % \changes{v1.5h}{1994/05/16}{Added \cs{r} (ring accent) and \cs{k} % (ogonek) accents.} % \changes{v1.5h}{1994/05/16}{Removed \cs{P} from the OT1 definitions % file.} % \changes{v1.5h}{1994/05/16}{Fixed a bug with \cs{pounds}.} % \changes{v1.5g}{1994/05/16}{Made fontenc.sty use the new mixed-case % encoding files.} % \changes{v1.5f}{1994/05/16}{Revert code so that the encoding % given is used in \cs{DeclareTextCommand} (FMi)} % \changes{v1.5f}{1994/05/16}{enc files now have uc encoding name % parts (FMi)} % \changes{v1.5e}{1994/05/14}{Replaced \cs{ENC@cmd} by \cs{ENC-cmd}.} % \changes{v1.5d}{1994/05/14}{Rewrote \cs{DeclareTextCommand} to define % its argument to use the current encoding by default, rather than % the encoding provided to \cs{DeclareTextCommand}.} % \changes{v1.5d}{1994/05/14}{Tidied up the documentation.} % \changes{v1.5c}{1994/05/14}{Added the fontenc package.} % \changes{v1.5c}{1994/05/14}{Fixed a bug which caused an infinite loop % if \cs{f@encoding} was incorrectly set.} % \changes{v1.5c}{1994/05/14}{Moved fontsmpl to its own dtx file.} % \changes{v1.5b}{1994/05/13}{Added \cmd\{, \cmd\} and \cmd\$.} % \changes{v1.5b}{1994/05/13} % {Replaces \cs{space} by `~' in \cs{csname}.} % \changes{v1.5b}{1994/05/13}{Renamed \cs{DeclareProtectedCommand} to % \cs{DeclareRobustCommand}.} % \changes{v1.5a}{1994/05/11}{Renamed the commands again. Made the % encoding part of the command syntax. Added the % \cs{DeclareTextCommand} interface. Used % \cs{DeclareProtectedCommand}.} % \changes{v1.4a}{1994/05/01}{Renamed the commands, removed the % \cs{EncodingSpecific} command. Turned all slots into decimal. % Added \cs{a}.} % \changes{v1.3d}{1993/12/18}{Some T1 stuff had drifted into the OT1 % file.} % \changes{v1.3c}{1993/12/18}{A new syntax, separating % accent-definitions from encoing-specific definitions, and % allowing encoding-specific \cs{chardef}, \cs{let}, etc.} % \changes{v1.3b}{1993/12/18}{Corrected typos.} % \changes{v1.3a}{1993/12/18}{Replaced OT3 by XXX} % \changes{v1.3}{1993/12/17}{Added \cs{EncodingSpecificAccent}, % \cs{EncodingSpecificAccentedLetter} and % \cs{EncodingSpecificCommand}.} % \changes{v1.2b}{1993/12/13}{Corrected file name in driver code.} % \changes{v1.2a}{1993/12/11}{Corrected for t1enc, math.} % \changes{v1.2}{1993/12/10}{Added source code for t1enc.sty.} % \changes{v1.1}{1993/12/07}{Made all character numbers decimal.} % \changes{v1.1}{1993/12/07}{Removed a lot of equal signs and the % like.} % % \section{Font encodings} % % This section of the kernel contains commands for declaring % encoding-specific % commands, such as accents. It also contains the code for the % |OMLenc.def|, % |OMSenc.def|, |T1enc.def| and |OT1enc.def| files, which define % the |OLM|, % |OMS|, |T1| and |OT1| encodings, and the |fontenc| package % for selecting encodings. % % The |fontenc| package has options for encodings, of which the % last option is the default encoding. For example, to use the % |OT2|, |OT3| and |T1| encodings, with |T1| as the default, you % say: %\begin{verbatim} % \usepackage[OT2,OT3,T1]{fontenc} %\end{verbatim} % The syntax for declaring encoding-specific commands is: % \begin{quote} % |\DeclareTextCommand{|^^A % \meta{command}|}{|^^A % \meta{encoding}|}|\\\hspace*{\fill}|[|^^A % \meta{number}|][|^^A % \meta{default}|]{|^^A % \meta{commands}|}| % \end{quote} % This command is like |\newcommand|, except that it defines a % command which is specific to one encoding. The resulting command % is always robust, even if its definition is fragile. For example, % the definition of |\l| in the |OT1| encoding is: %\begin{verbatim} % \DeclareTextCommand{\l}{OT1}{{\@xxxii l}} %\end{verbatim} % |\DeclareTextCommand| takes the same optional arguments as % |\newcommand|. % \begin{quote} % |\ProvideTextCommand{|^^A % \meta{command}|}{|^^A % \meta{encoding}|}|\\\hspace*{\fill}|[|^^A % \meta{number}|][|^^A % \meta{default}|]{|^^A % \meta{commands}|}| % \end{quote} % This acts like |\DeclareTextCommand|, but does nothing if the % command is already defined. % \begin{quote} % |\DeclareTextSymbol{|^^A % \meta{command}|}{|^^A % \meta{encoding}|}{|^^A % \meta{slot}|}| % \end{quote} % This command defines a text symbol, with a particular slot in that % encoding. The commands: %\begin{verbatim} % \DeclareTextSymbol{\ss}{OT1}{25} % \DeclareTextCommand{\ss}{OT1}{{\char25}} %\end{verbatim} % have the same effect, but the |\DeclareTextSymbol| is faster. % \begin{quote} % |\DeclareTextAccent{|^^A % \meta{command}|}{|^^A % \meta{encoding}|}{|^^A % \meta{slot}|}| % \end{quote} % \changes{v1.8e}{1996/11/23} % {Corrected description} % This command declares a text accent. The commands: %\begin{verbatim} % \DeclareTextAccent{\"}{OT1}{127} % \DeclareTextCommand{\"}{OT1}[1]{{\add@accent {127}#1}} %\end{verbatim} % have the same effect. % \changes{v1.8c}{1996/10/27} % {Corrected syntax descriptions} % \begin{quote} % |\DeclareTextComposite{|^^A % \meta{command}|}|\\\hspace*{\fill}|{|^^A % \meta{encoding}|}{|^^A % \meta{argument}|}{|^^A % \meta{slot}|}| % \end{quote} % This command declares a composite letter, for example in the |T1| % encoding |\'{a}| is slot 225, which is declared by: %\begin{verbatim} % \DeclareTextComposite{\'}{T1}{a}{225} %\end{verbatim} % \changes{v1.8e}{1996/11/23} % {Corrected description} % The \emph{command} will normally have been declared with % |\DeclareTextAccent|, or as a one-argument |\DeclareTextCommand|. % % |\DeclareTextComposite| is the most common example of using % the more general declaration % |\DeclareTextCompositeCommand|, which can define a composite % to be an arbitrary piece of text. % \begin{quote} % |\DeclareTextCompositeCommand{|^^A % \meta{command}|}|\\\hspace*{\fill}|{|^^A % \meta{encoding}|}{|^^A % \meta{argument}|}{|^^A % \meta{text}|}| % \end{quote} % For example, in the OT1 encoding \r A has a hand-crafted % defintion this is declared as follows %\begin{verbatim} % \DeclareTextCompositeCommand{\r}{OT1}{A} % {\leavevmode\setbox\z@\hbox{h}\dimen@\ht\z@\advance\dimen@-1ex% % \rlap{\raise.67\dimen@\hbox{\char23}}A} %\end{verbatim} % \changes{v1.8e}{1996/11/23} % {Corrected description} % The \emph{command} will normally have been declared with % |\DeclareTextAccent|, or as a one-argument |\DeclareTextCommand|. % % The commands defined using the above commands can be used in two % ways. Normally they are used by just calling the command in the % appropriate encoding, for example |\ss|. However, sometimes you % may wish to use a command in an encoding where it is not defined. % If the command has no arguments, then you can use it in another % encoding by calling |\UseTextSymbol|: % \begin{quote} % |\UseTextSymbol{|^^A % \meta{encoding}|}{|^^A % \meta{command}|}| % \end{quote} % For example, |\UseTextSymbol{\ss}{OT1}| has the same effect as: %\begin{verbatim} % {\fontencoding{OT1}\selectfont\ss} %\end{verbatim} % If the command has one argument then you can use it in another % encoding by calling % |\UseTextAccent|: % \begin{quote} % |\UseTextAccent{|^^A % \meta{encoding}|}{|^^A % \meta{command}|}{|^^A % \meta{text}|}| % \end{quote} % For example, if the current encoding is |OT2| then % |\UseTextAccent{OT1}{\'}{a}| has the same effect as: %\begin{verbatim} % {\fontencoding{OT1}\selectfont\'{\fontencoding{OT2}\selectfont a}} %\end{verbatim} % \changes{v1.8e}{1996/11/23} % {Extended description} % You can also declare a default definition for a text command, which % will be used if the current encoding has no appropriate definition. % Such use will also set the definition for this command in the % current encoding to equal this default definition; this makes % subsequent uses of the command much faster. % \begin{quote} % |\DeclareTextCommandDefault{|^^A % \meta{command}|}{|^^A % \meta{definition}|}| % \end{quote} % For example, the default definition of the command % |\textonequarter| (which produces the fraction $\frac14$) is % built using math mode: %\begin{verbatim} % \DeclareTextCommandDefault{\textonequarter}{$\frac14$} %\end{verbatim} % There is a matching |\Provide| command which will not override an % existing default definition: % \begin{quote} % |\ProvideTextCommandDefault{|^^A % \meta{command}|}{|^^A % \meta{definition}|}| % \end{quote} % The most common use for these commands is to use symbols from % other encodings, so there are some optimizations provided: % \begin{quote} % |\DeclareTextSymbolDefault{|^^A % \meta{command}|}|^^A % \meta{encoding}|}|\\ % |\DeclareTextAccentDefault{|^^A % \meta{command}|}|^^A % \meta{encoding}|}| % \end{quote} % are short for: % \begin{quote} % |\DeclareTextCommandDefault{|^^A % \meta{command}|}|\\\hspace*{\fill}^^A % |{\UseTextSymbol{|^^A % \meta{encoding}|}{|\meta{command}|}}| \\ % |\DeclareTextCommandDefault[1]{|^^A % \meta{command}|}|\\\hspace*{\fill}^^A % |{\UseTextAccent{|^^A % \meta{encoding}|}{|\meta{command}|}{#1}}| % \end{quote} % For example, to make |OT1| the default encoding for |\ss| and % |\'| you say: %\begin{verbatim} % \DeclareTextSymbolDefault{\ss}{OT1} % \DeclareTextAccentDefault{\'}{OT1} %\end{verbatim} % Note that you can use these commands on any zero- or one-argument % commands declared with |\DeclareText*| or |\ProvideText*|, not % just those defined using |\DeclareTextSymbol| or % |\DeclareTextAccent|. % % \StopEventually{} % % \subsection{Docstrip modules} % % This |.dtx| file is be used to generate several related files % containing font encoding definitions. The mutually exculsive % docstrip options are: % \begin{center} % \begin{tabular}{lp{10cm}} % |T1| & generates |T1enc.def| for the Cork encoding, \\ % |OT1| & generates |OT1enc.def| for Knuth's CM encoding, \\ % |OMS| & generates |OMSenc.def| for Knuth's % math symbol encoding, \\ % |OML| & generates |OMLenc.def| for Knuth's % math letters encoding, \\ % |package| & generates |fontenc.sty| for % selecting encodings, \\ % |2ekernel| & for the kernel commands.\\ % |autoload| & for the `autoload' kernel commands.\\ % |autoerr| & for autoerr.sty error message autoload file % \end{tabular} % \end{center} % \changes{1.0d}{1993/07/17}{changed \cs{catcoding} @} % \changes{1.0f}{1993/08/13}{Protected against active @ sign.} % \changes{1.0g}{1993/08/16}{Needs space after \cs{string}} % \changes{1.1}{1993/12/07}{Protected all special characters with % \cs{string}.} % \changes{1.3}{1993/12/17}{Removed the catcode hackery, since the file % is only read as a package in the preamble, and removed all the % messages on the screen, which just confuse users. Replaced them % by the appropriate \cs{ProvidesPackage} commands. Added XXXenc.} % \changes{1.3b}{1993/12/18} % {Fixed typos with \cs{ProvidesPackage} lines. % Added the \cs{NeedsTeXFormat} line. Added the last argument to % \cs{DeclareEncoding}. Moved the use of the encodings to after their % declaration. } % \changes{1.4a}{1994/04/29}{Removed Rokicki's OT1 variant encoding. % Moved the driver to the top.} % \changes{1.5a}{1994/05/11}{Made T1 and OT1 generate packages rather % than def files. Renamed the `package' module to `teststy'.} % \changes{1.5d}{1994/05/14}{Moved the driver to the top.} % % \subsection{Definitions for the kernel} % % \subsubsection{Declaration commands} % % \changes{1.3}{1993/12/17}{Added this section} % \changes{1.3c}{1993/12/18}{Split \cs{EncodingSpecificAccent} up into % \cs{EncodingSpecific} and \cs{DeclareAccent}.} % \changes{1.4a}{1994/04/29}{Removed \cs{EncodingSpecific}. Renamed % all the commands. Added \cs{DeclareTextGlyph} and % \cs{UndeclareTextCommand}.} % \changes{v1.5a}{1994/05/11}{Reimplemented \cs{DeclareTextCommand} % using \cs{@changed@cmd} and \cs{DeclareProtectedCommand}.} % \changes{v1.5c}{1994/05/14}{Fixed a bug which caused an infinite loop % if \cs{f@encoding} was incorrectly set.} % \changes{v1.5d}{1994/05/14}{Rewrote \cs{DeclareTextCommand} to define % its argument to use the current encoding by default, rather than % the encoding provided to \cs{DeclareTextCommand}.} % \changes{v1.6a}{1994/10/25}{Added the \cs{Provide} commands, % and the default definitions.} % % This section contains definitions for commands such as accents which % depend on the current encoding. These commands will usually be kept % in |.def| files, for example |OT1enc.def| contains the definitions % for the |OT1| encoding. % \begin{macrocode} %<*2ekernel|autoload> \message{font encodings,} % \end{macrocode} % % \changes{v1.5d}{1994/10/27}{Rewrote \cs{DeclareTextSymbol} to define % its argument to use the current encoding by default, to fit with % \cs{DeclareTextCommand}.} % % \changes{v1.7a}{1994/11/30}{Redefined \cs{@changed@cmd} to expand in % the mouth.} % \changes{v1.7a}{1994/11/30}{Removed \cs{@changed@x@mouth} since % \cs{@changed@x} now expands in the mouth.} % % \changes{v1.7r}{1995/11/28}{Renamed \cs{@changed@x@err} to % \cs{TextSymbolUnavailable}.} % \changes{v1.7r}{1995/11/28}{Added math mode checks to text commands.} % % \begin{macro}{\DeclareTextCommand} % \begin{macro}{\ProvideTextCommand} % \begin{macro}{\DeclareTextSymbol} % \begin{macro}{\@dec@text@cmd} % \begin{macro}{\@changed@cmd} % \begin{macro}{\@changed@x} % \begin{macro}{\TextSymbolUnavailable} % \begin{macro}{\@inmathwarn} % If you say: %\begin{verbatim} % \DeclareTextCommand{\foo}{T1}... %\end{verbatim} % then |\foo| is defined to be |\T1-cmd \foo \T1\foo|, % where |\T1\foo| is \emph{one} control sequence, not two! % We then call |\newcommand| to define |\T1\foo|. % \begin{macrocode} \def\DeclareTextCommand{% \@dec@text@cmd\newcommand} % \end{macrocode} % % \begin{macrocode} \def\ProvideTextCommand{% \@dec@text@cmd\providecommand} % \end{macrocode} % % \begin{macrocode} \def\DeclareTextSymbol#1#2#3{% \@dec@text@cmd\chardef#1{#2}#3\relax} % \end{macrocode} % % \begin{macrocode} \def\@dec@text@cmd#1#2#3{% \expandafter\def\expandafter#2% \expandafter{% \csname#3-cmd\expandafter\endcsname \expandafter#2% \csname#3\string#2\endcsname }% \let\@ifdefinable\@rc@ifdefinable \expandafter#1\csname#3\string#2\endcsname} % \end{macrocode} % The declarations are only available before |\begin{document}|. % \changes{v1.7h}{1995/05/21}{Added several \cs{@onlypreamble}} % \changes{v1.7k}{1995/06/05}{Removed \cs{protected@cmd} and replaced % with explicit \cs{noexpand}.} % \begin{macrocode} \@onlypreamble\DeclareTextCommand \@onlypreamble\DeclareTextSymbol % \end{macrocode} % The sneaky bit in all this is what |\T1-cmd \foo \T1\foo| does. % There's five possibilities, depending on the current values of % |\protect|, |\cf@encoding| and |\ifmmode|: % \begin{itemize} % \item If |\protect| is |\@typeset@protect| and |\cf@encoding| is % |T1|, then we execute |\T1\foo|. This should be the normal % behaviour, and is optimized for speed. % \item If |\protect| is |\@typeset@protect|, |\cf@encoding| is % (say) |OT1|, and |\OT1\foo| is defined, then we execute % |\OT1\foo|. % \item If |\protect| is |\@typeset@protect|, |\cf@encoding| is % (say) |OT1|, we're in text mode, % and |\OT1\foo| is undefined, then we define % |\OT1\foo| to be the default value of |\foo|, and execute % |\OT1\foo|. % \item If |\protect| is |\@typeset@protect|, |\cf@encoding| is % (say) |OT1|, we're in math mode, % and |\OT1\foo| is undefined, then we execute the default value % of |\foo|. (This is necessary so that things like % |$X_\copyright$| work properly.) % \item If |\protect| is not |\@typeset@protect| then we execute % |\noexpand\foo|. For example, if we are writing to a file, % then this results in |\foo| being written. If we are in a % |\mark|, then |\foo| will be put in the mark---since |\foo| is % robust, it will then survive all the things which may happen % to it whilst it's a |\mark|. % \end{itemize} % So after all that, we will either execute the appropriate % definition of |\foo| for the current encoding, or we will execute % |\noexpand\foo|. % % The default value of |\foo| is |\?\foo| if it is defined, and an % error message otherwise. % % When the encoding is changed from |T1| to |OT1|, |\T1-cmd| is % defined to be |\@changed@cmd| and |\OT1-cmd| is defined to be % |\@current@cmd|. This means that the test for what the current % encoding is can be performed quickly. % \begin{macrocode} \def\@current@cmd#1{% \ifx\protect\@typeset@protect \@inmathwarn#1% \else \noexpand#1\expandafter\@gobble \fi} % \end{macrocode} % % \begin{macrocode} \def\@changed@cmd#1#2{% \ifx\protect\@typeset@protect \@inmathwarn#1% \expandafter\ifx\csname\cf@encoding\string#1\endcsname\relax \expandafter\ifx\csname ?\string#1\endcsname\relax \expandafter\def\csname ?\string#1\endcsname{% \TextSymbolUnavailable#1% }% \fi \global\expandafter\let \csname\cf@encoding \string#1\expandafter\endcsname \csname ?\string#1\endcsname \fi \csname\cf@encoding\string#1% \expandafter\endcsname \else \noexpand#1% \fi} % \end{macrocode} % \changes{v1.7m}{1995/10/09}{Autoload error} % \changes{v1.7v}{1995/12/05}{Changed \cs{TextSymbolUnavailable} text} % \begin{macrocode} % %<*2ekernel|autoerr> \gdef\TextSymbolUnavailable#1{% \@latex@error{% Command \protect#1 unavailable in encoding \cf@encoding% }\@eha} % %\gdef\TextSymbolUnavailable{\@autoerr\TextSymbolUnavailable} %<*2ekernel|autoload> % \end{macrocode} % The command |\@inmathwarn| produces a warning message if we are % currently in math mode. Note that since this command is used % inside text commands, it can't call |\relax| before the % |\ifmmode|. This means that it is possible for the warning to % fail to be issued at the beginning of a row of an halign whose % template enters math mode. This is probably a bad feature, but % there's not much that can be done about it, since adding a |\relax| % would break ligatures and kerning between text symbols. % % A more efficient solution would be to make |\@inmathwarn| and % |\@inmatherr| equal to |\@empty| and |\relax| by default, and % to have % |\everymath| reset them to their usual definitions. This is left % for future investigation (for example it may break some third % party code). % \begin{macrocode} \def\@inmathwarn#1{% \ifmmode \@latex@warning{Command \protect#1 invalid in math mode}% \fi} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \changes{v1.7k}{1995/06/05}{Allowed \cs{ProvideTextCommandDefault} % after the preamble.} % % \begin{macro}{\DeclareTextCommandDefault} % \begin{macro}{\ProvideTextCommandDefault} % These define commands with encoding |?|. % % Note that |\DeclareTextCommandDefault| can only be used in the % preamble, but that the |\Provide| version is allowed in inputenc % |.def| files, so is allowed anywhere. % \begin{macrocode} \def\DeclareTextCommandDefault#1{% \DeclareTextCommand#1?} % \end{macrocode} % % \begin{macrocode} \def\ProvideTextCommandDefault#1{% \ProvideTextCommand#1?} % \end{macrocode} % % \begin{macrocode} \@onlypreamble\DeclareTextCommandDefault %\@onlypreamble\ProvideTextCommandDefault % \end{macrocode} % They require |\?-cmd| to be initialized as |\@changed@cmd|. % \begin{macrocode} \expandafter\let\csname?-cmd\endcsname\@changed@cmd % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\DeclareTextAccent} % \changes{v1.5a}{1994/05/11} % {Reimplemented using \cs{DeclareTextCommand}.} % \changes{v1.7z}{1996/05/23} % {Reimplemented using \cs{add@accent} to save space latex/2133} % This is just a disguise for defining a \TeX~|\accent| command. % \begin{macrocode} \def\DeclareTextAccent#1#2#3{% \DeclareTextCommand#1{#2}{\add@accent{#3}}} % \end{macrocode} % % \begin{macrocode} \@onlypreamble\DeclareTextAccent % \end{macrocode} % \end{macro} % % \changes{v1.7a}{1994/11/30}{Rewrote \cs{@text@composite} so it % allows an empty argument, or an argument containing lots of % commands.} % % \begin{macro}{\add@accent} % \changes{v1.7z}{1996/05/23} % {macro added. latex/2133} % To save space this code is shared between all text accents that are % set using the |\accent| primitive. % The argument is pre-set in a box so that any % font loading that is needed is already done within the box. % This is needed because font-loading involves grouping and that would % prevent the accent mechanism form working so that the accent would % not be positioned over the argument. % Declarations that change the font should be allowed (only low-level % ones are at present) inside the argument of an accent command, % but not size changes, as they involve |\setbox| operations which % also inhibit the mechanism of the |\accent| primitive. % % Note that the whole process is within a group. % \begin{macrocode} \def\add@accent#1#2{{% \setbox\@tempboxa\hbox{#2}% \accent#1 #2}} % \end{macrocode} % \end{macro} % % % \begin{macro}{\DeclareTextCompositeCommand} % \changes{v1.7z}{1996/05/23} % {Modified to cope with new \cs{add@accent} command: required % removal of check for one argument-command} % \begin{macro}{\DeclareTextComposite} % \changes{v1.7l}{1995/06/09}{Rewrote \cs{DeclareTextComposite} to % define the composite as a no-argument command rather than a % two-argument command.} % \begin{macro}{\@text@composite} % \begin{macro}{\@text@composite@x} % \begin{macro}{\@strip@args} % \changes{v1.8c}{1996/10/27} % {Removed macro} % Another amusing game to play with |\expandafter|, |\csname|, and % |\string|. When you say % |\DeclareTextCompositeCommand{\foo}{T1}{a}{bar}|, we look to see % if the expansion of |\T1\foo| begins with |\@text@composite|, and % if it doesn't, we redefine |\T1\foo| to be: %\begin{verbatim} % #1 -> \@text@composite \T1\foo #1\@empty \@text@composite {...} %\end{verbatim} % where |...| is the % previous definition of |\T1\foo|. Finally, we define |\\T1\foo-a| % to expand to |bar|. % \begin{macrocode} \def\DeclareTextCompositeCommand#1#2#3#4{% \expandafter\let\expandafter\reserved@a\csname#2\string#1\endcsname \expandafter\expandafter\expandafter\ifx \expandafter\@car\reserved@a\relax\relax\@nil \@text@composite \else \edef\reserved@b##1{% \def\expandafter\noexpand \csname#2\string#1\endcsname####1{% \noexpand\@text@composite \expandafter\noexpand\csname#2\string#1\endcsname ####1\noexpand\@empty\noexpand\@text@composite {##1}}}% \expandafter\reserved@b\expandafter{\reserved@a{##1}}% \fi \expandafter\def\csname\expandafter\string\csname #2\endcsname\string#1-\string#3\endcsname{#4}} % \end{macrocode} % % \begin{macrocode} \@onlypreamble\DeclareTextCompositeCommand % \end{macrocode} % This all works because: %\begin{verbatim} % \@text@composite \T1\foo A\@empty \@text@composite {...} %\end{verbatim} % expands to % |\\T1\foo-A| if |\\T1\foo-A| has been defined, and |{...}| % otherwise. % % Note that |\@text@composite| grabs the first token of the % argument and puts just that in the % csname. This is so that |\'{\textit{e}}| will work---it checks % whether |\\T1\'-\textit| is defined (which presumbaly it isn't) % and so expands to |{\accent 1 \textit{e}}|. % % This trick won't always work, for example |\'{{\itshape e}}| will % expand to (with spaces added for clarity): %\begin{verbatim} % \csname \string \T1\' - \string {\itshape e} \@empty \endcsname %\end{verbatim} % which will die pretty horribly. Unfortunately there's not much % can be done about this if we're going to use |\csname| lookups as a % fast way of accessing composites. % % This has an unfortunate `malfeature' though, which is that in % the T1 encoding, |\'{aa}| produces \'a. This is not the expected % behaviour, and should perhaps be fixed if the fix doesn't affect % performance too badly. % % Finally, it's worth noting that the |\@empty| is used in % |\@text@composite| so that accents will work even when the % argument is empty. If you say |\'{}| then this looks up % |\\T1\'-\@empty|, which ought to be |\relax|, and so all is well. % If we didn't include the |\@empty|, then |\'{}| would expand to: %\begin{verbatim} % \csname \string \T1\' - \string \endcsname %\end{verbatim} % so the |\endcsname| would be |\string|'ed and the whole of the % rest of the document would be put inside the |\csname|. This % would not be good. % \begin{macrocode} \def\@text@composite#1#2#3\@text@composite{% \expandafter\@text@composite@x \csname\string#1-\string#2\endcsname} % \end{macrocode} % % \changes{v1.7z}{1996/05/23} % {\cs{expandafter} added to match other changes for latex/2133} % The |\expandafter| is added so that less chaos ensues from the % misuse of this code with commands that take several arguments. % \begin{macrocode} \def\@text@composite@x#1#2{% \ifx#1\relax \expandafter#2% \else #1% \fi} % \end{macrocode} % The command |\DeclareTextComposite| uses % |\DeclareTextCompositeCommand| to declare a command which % expands out to a single glyph. % \changes{v1.8a}{1996/07/19} % {Use char 0 not @ as carrier for \cs{lowercase} /2197} % \begin{macrocode} \catcode\z@=11\relax % \end{macrocode} % % \begin{macrocode} \def\DeclareTextComposite#1#2#3#4{% \def\reserved@a{\DeclareTextCompositeCommand#1{#2}{#3}}% \bgroup \lccode\z@#4% \lowercase{% \egroup \reserved@a ^^@}} % \end{macrocode} % % \begin{macrocode} \catcode\z@=15\relax % \end{macrocode} % % \begin{macrocode} \@onlypreamble\DeclareTextComposite % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\UseTextSymbol} % \changes{v1.7p}{1995/11/17}{Support \cs{@wrong@font@char} latex/1676} % \changes{v1.7q}{1995/11/18}{Modify message slightly} % \begin{macro}{\UseTextAccent} % \begin{macro}{\@use@text@encoding} % These fragile commands access glyphs from different encodings. % They use grotty low-level calls to the font selection scheme for % speed, and in order to make sure that |\UseTextSymbol| doesn't % do anything which you're not allowed to do between an |\accent| % and its glyph. % \begin{macrocode} \def\UseTextSymbol#1#2{% \def\@wrong@font@char{\MessageBreak for \noexpand\symbol`\string#2'}% \let\@curr@enc\cf@encoding \@use@text@encoding{#1}% #2% \let\@wrong@font@char\@empty \@use@text@encoding\@curr@enc} % \end{macrocode} % % \changes{v1.7z}{1996/05/23} % {\cs{selectfont} removed (fossil code) latex/2133} % \begin{macrocode} \def\UseTextAccent#1#2#3{% \let\@curr@enc\cf@encoding \@use@text@encoding{#1}% #2{\@use@text@encoding\@curr@enc#3}% \@use@text@encoding\@curr@enc} % \end{macrocode} % % \begin{macrocode} \def\@use@text@encoding#1{% \edef\f@encoding{#1}% \xdef\font@name{% \csname\curr@fontshape/\f@size\endcsname}% \pickup@font \font@name \@@enc@update} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\DeclareTextSymbolDefault} % \begin{macro}{\DeclareTextAccentDefault} % Some syntactic sugar. Again, these should probably be optimized % for speed. % \begin{macrocode} \def\DeclareTextSymbolDefault#1#2{% \DeclareTextCommandDefault#1{\UseTextSymbol{#2}#1}} % \end{macrocode} % % \begin{macrocode} \def\DeclareTextAccentDefault#1#2{% \DeclareTextCommandDefault#1{\UseTextAccent{#2}#1}} % \end{macrocode} % % \begin{macrocode} \@onlypreamble\DeclareTextSymbolDefault \@onlypreamble\DeclareTextAccentDefault % \end{macrocode} % \end{macro} % \end{macro} % % \subsubsection{Hyphenation} % % \changes{v1.5l}{1994/10/18}{Added new definitions of \cs{patterns} % and \cs{hyphenation}.} % \changes{v1.6g}{1994/11/05}{Added setting of \cs{@typeset@protect} % to \cs{patterns} and \cs{hyphenation}.} % \changes{v1.6g}{1994/11/30}{Removed new definitions of \cs{patterns} % and \cs{hyphenation}, since encoding-specific commands now expand % in the mouth.} % % \begin{macro}{\patterns} % \begin{macro}{\@@patterns} % \begin{macro}{\hyphenation} % \begin{macro}{\@@hyphenation} % We redefine |\patterns| and |\hyphenation| to allow the use of % commands declared with |\DeclareText*| to be used inside them. % \begin{macrocode} %\let\@@patterns\patterns %\let\@@hyphenation\hyphenation %\def\patterns{% % \bgroup % \let\protect\@empty % \let\@typeset@protect\@empty % \let\@changed@x\@changed@x@mouth % \afterassignment\egroup % \@@patterns %} %\def\hyphenation{% % \bgroup % \let\protect\@empty % \let\@typeset@protect\@empty % \let\@changed@x\@changed@x@mouth % \afterassignment\egroup % \@@hyphenation %} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \subsubsection{Miscellania} % % \changes{1.4a}{1994/05/01}{Added the \cs{a} command.} % \changes{1.7a}{1994/11/30}{Redefined \cs{a} for the new scheme.} % \changes{1.7b}{1994/12/02}{Redefined \cs{a} properly.} % \changes{1.7g}{1995/03/03}{Corrected an error in documentation % referring to the tabular rather than the tabbing % environment.} % \changes{v1.7n}{1995/11/02}{Changed internal name \cs{a} to % \cs{@tabacckludge} to protect against redefinition by malicicous % users.} % % \begin{macro}{\a} % The |\a| command is used to access the accent commands even when % they have been redefined (for example by the |tabbing| % environment). Its internal name is |\@tabacckludge|. % \begin{macrocode} \def\@tabacckludge#1{\expandafter\@changed@cmd\csname#1\endcsname\relax} \let\a=\@tabacckludge % \end{macrocode} % \end{macro} % % \changes{v1.6a}{1994/10/25}{Added the files OT1enc.def, T1enc.def and % OMSenc.def.} % \changes{v1.6b}{1994/10/27}{Removed the files OT1enc.def, T1enc.def % and OMSenc.def.} % % \subsubsection{Default encodings} % % We define the default encodings for most commands to be either OT1 % or OMS. % % The naming conventions in the kernel are not what we would use if we % were starting from scratch\dots % Those defined by DEK (like |\ae| and |\ss|) or by the \TeX{} Users % Group Technical Working Group on multi-lingual typesetting (like % |\th| and |\ng|) have short names. Those which were added to the % kernel in 1993 and early 1994 are named after their Adobe glyph % names (like |\guillemotleft| and |\quotedblbase|). Unfortunately, % this naming scheme won't work for all glyphs, since some names (like % |\space|) are already used, and some (like |\endash|) are very % likely to be defined by users. So we're now using the naming scheme % of |\text| followed by the Adobe name, (like |\textendash| and % |\textsterling|). Except that some glyphs don't have Adobe names, % so we're using the names used by fontinst for those (like % |\textcompwordmark|). Sigh. % % \changes{v1.6a}{1994/10/25}{Added the defaults.} % \changes{v1.6b}{1994/10/27}{Added more defaults for OT1.} % \changes{v1.6c}{1994/10/29}{Added commands like \cs{dots} for use in % text and math.} % % Some accents from OT1: % \begin{macrocode} \DeclareTextAccentDefault{\"}{OT1} \DeclareTextAccentDefault{\'}{OT1} \DeclareTextAccentDefault{\.}{OT1} \DeclareTextAccentDefault{\=}{OT1} \DeclareTextAccentDefault{\H}{OT1} \DeclareTextAccentDefault{\^}{OT1} \DeclareTextAccentDefault{\`}{OT1} \DeclareTextAccentDefault{\b}{OT1} \DeclareTextAccentDefault{\c}{OT1} \DeclareTextAccentDefault{\d}{OT1} \DeclareTextAccentDefault{\r}{OT1} \DeclareTextAccentDefault{\u}{OT1} \DeclareTextAccentDefault{\v}{OT1} \DeclareTextAccentDefault{\~}{OT1} % \end{macrocode} % Some symbols from OT1: % \changes{v1.8c}{1996/10/27} % {Removed \cs{aa} and \cs{AA}} % \begin{macrocode} %\DeclareTextSymbolDefault{\AA}{OT1} \DeclareTextSymbolDefault{\AE}{OT1} \DeclareTextSymbolDefault{\L}{OT1} \DeclareTextSymbolDefault{\OE}{OT1} \DeclareTextSymbolDefault{\O}{OT1} %\DeclareTextSymbolDefault{\aa}{OT1} \DeclareTextSymbolDefault{\ae}{OT1} \DeclareTextSymbolDefault{\i}{OT1} \DeclareTextSymbolDefault{\j}{OT1} \DeclareTextSymbolDefault{\l}{OT1} \DeclareTextSymbolDefault{\oe}{OT1} \DeclareTextSymbolDefault{\o}{OT1} \DeclareTextSymbolDefault{\ss}{OT1} \DeclareTextSymbolDefault{\textdollar}{OT1} \DeclareTextSymbolDefault{\textemdash}{OT1} \DeclareTextSymbolDefault{\textendash}{OT1} \DeclareTextSymbolDefault{\textexclamdown}{OT1} %\DeclareTextSymbolDefault{\texthyphenchar}{OT1} %\DeclareTextSymbolDefault{\texthyphen}{OT1} \DeclareTextSymbolDefault{\textquestiondown}{OT1} \DeclareTextSymbolDefault{\textquotedblleft}{OT1} \DeclareTextSymbolDefault{\textquotedblright}{OT1} \DeclareTextSymbolDefault{\textquoteleft}{OT1} \DeclareTextSymbolDefault{\textquoteright}{OT1} \DeclareTextSymbolDefault{\textsterling}{OT1} % \end{macrocode} % Some symbols from OMS: % \changes{v1.7t}{1995/11/29}{Added \cs{textbackslash} and % \cs{textbar}.} % \changes{v1.8c}{1996/10/27} % {Added \cs{textasteriskcentered}} % \begin{macrocode} \DeclareTextSymbolDefault{\textasteriskcentered}{OMS} \DeclareTextSymbolDefault{\textbackslash}{OMS} \DeclareTextSymbolDefault{\textbar}{OMS} \DeclareTextSymbolDefault{\textbraceleft}{OMS} \DeclareTextSymbolDefault{\textbraceright}{OMS} \DeclareTextSymbolDefault{\textbullet}{OMS} \DeclareTextSymbolDefault{\textdaggerdbl}{OMS} \DeclareTextSymbolDefault{\textdagger}{OMS} \DeclareTextSymbolDefault{\textparagraph}{OMS} \DeclareTextSymbolDefault{\textperiodcentered}{OMS} \DeclareTextSymbolDefault{\textsection}{OMS} \DeclareTextAccentDefault{\textcircled}{OMS} % \end{macrocode} % % \changes{v1.6d}{1994/10/30}{Added OML encoding.} % \changes{v1.6d}{1994/10/30}{Made \cs{textless} and \cs{textgreater} % come from OML.} % \changes{v1.6d}{1994/10/30}{Added \cs{t}.} % \changes{v1.7k}{1995/06/05}{Commented out \cs{textless} and % \cs{textgreater}.} % % Some symbols from OML: % \changes{v1.7t}{1995/11/29}{Added \cs{textless} and % \cs{textgreater}.} % \begin{macrocode} \DeclareTextSymbolDefault{\textless}{OML} \DeclareTextSymbolDefault{\textgreater}{OML} \DeclareTextAccentDefault{\t}{OML} % \end{macrocode} % % \changes{v1.6d}{1994/10/30}{Added \cs{textcircled}.} % \changes{v1.6d}{1994/10/30}{Rewrote \cs{copyright} to use % \cs{textcircled}.} % \changes{v1.6d}{1994/10/30}{Removed \cs{textregistered}.} % \changes{v1.7k}{1995/06/05}{Save some tokens in % \cs{textvisiblespace} and \cs{textunderscore}.} % \changes{v1.7t}{1995/11/29}{Added \cs{textasciicircum}, % \cs{textasciitilde}, \cs{textregistered} and \cs{texttrademark}.} % \changes{v1.7u}{1995/12/01}{Made \cs{SS} a Default, rather than % having the default point to the OT1 definition.} % \changes{v1.7w}{1995/12/11}{Modify \cs{copyright}} % % Some defaults we can fake: For historical reasons |\copyright| % needs |{}| around the definition. The interface for defining this % will CHANGE, but currently use |\expandafter| to add braces at % the appropriate points. % \begin{macrocode} \DeclareTextCommandDefault{\copyright}{\textcircled{c}} \expandafter\def\expandafter \copyright\expandafter{\expandafter{\copyright}} % \end{macrocode} % % \begin{macrocode} \DeclareTextCommandDefault{\textasciicircum}{\^{}} \DeclareTextCommandDefault{\textasciitilde}{\~{}} \DeclareTextCommandDefault{\textcompwordmark}{\kern\z@} \DeclareTextCommandDefault{\textunderscore}{% \leavevmode\mathunderscore} % \end{macrocode} % % \begin{macrocode} \DeclareTextCommandDefault{\textvisiblespace}{% \mbox{\kern.06em\vrule \@height.3ex}% \vbox{\hrule \@width.3em}% \hbox{\vrule \@height.3ex}} % \end{macrocode} % % \begin{macrocode} \DeclareTextCommandDefault{\textellipsis}{% .\kern\fontdimen3\font .\kern\fontdimen3\font .\kern\fontdimen3\font} % \end{macrocode} % % \begin{macrocode} \DeclareTextCommandDefault{\textregistered}{\textcircled{\textsc r}} \DeclareTextCommandDefault{\texttrademark}{\textsuperscript{TM}} \DeclareTextCommandDefault{\SS}{SS} % \end{macrocode} % % \subsubsection{Math material} % % \changes{v1.6f}{1994/11/04}{Added \cmd\_.} % % Some commands can be used in both text and math mode: % \begin{macrocode} \DeclareRobustCommand{\$}{\ifmmode\mathdollar\else\textdollar\fi} \DeclareRobustCommand{\{}{\ifmmode\lbrace\else\textbraceleft\fi} \DeclareRobustCommand{\}}{\ifmmode\rbrace\else\textbraceright\fi} \DeclareRobustCommand{\P}{\ifmmode\mathparagraph\else\textparagraph\fi} \DeclareRobustCommand{\S}{\ifmmode\mathsection\else\textsection\fi} \DeclareRobustCommand{\dag}{\ifmmode{\dagger}\else\textdagger\fi} \DeclareRobustCommand{\ddag}{\ifmmode{\ddagger}\else\textdaggerdbl\fi} \DeclareRobustCommand{\_}{% \ifmmode\mathunderscore\else\textunderscore\fi} % \end{macrocode} % % \begin{macrocode} \DeclareRobustCommand{\pounds}{% \ifmmode\mathsterling\else\textsterling\fi} % \end{macrocode} % % \begin{macrocode} \DeclareRobustCommand{\dots}{% \ifmmode\mathellipsis\else\textellipsis\fi} % \end{macrocode} % % \begin{macrocode} \let\ldots\dots % % \end{macrocode} % % \changes{v1.6d}{1994/10/30}{Moved math commands here from ltmath.} % \changes{v1.6f}{1994/11/04}{Added \cs{mathunderscore}.} % \changes{v1.7k}{1995/06/05}{Moved math commands to fontdef.dtx.} % % % \changes{1.4a}{1994/05/01}{Added the \cs{SaveAtCatcode} and % \cs{RestoreAtCatcode} commands.} % % \changes{1.5a}{1994/05/12}{Removed the \cs{SaveAtCatcode} and % \cs{RestoreAtCatcode} commands.} % % \subsection{The fontenc package} % % \changes{v1.5c}{1994/05/14}{Added the fontenc package} % \changes{v1.5g}{1994/05/16}{Removed the lowercasing of the filename.} % \changes{v1.7a}{1994/11/30}{Always load the enc.def file, so that % the default encoding for the commands will change.} % \changes{v1.7x}{1996/05/18}{Produce error if encoding not found. % pr/2054} % \changes{v1.7y}{1996/05/21}{Corrected error message (CAR)} % \changes{v1.8d}{1996/11/18} % {(DPC) lowercase external file names. internal/1044}% % This package allows authors to specify which encodings they will use. % For each encoding |FOO|, the package looks to see if the encoding % |FOO| has already been declared. If it hasn't, the file |fooenc.def| % is loaded. The default encoding is set to be |FOO|. % % \begin{macrocode} %<*package> \DeclareOption*{% \let\encodingdefault\CurrentOption \edef\reserved@f{% \lowercase{\def\noexpand\reserved@f{\CurrentOption enc.def}}}% \reserved@f \InputIfFileExists\reserved@f {}{\PackageError{fontenc}% {Encoding file `\reserved@f' not found.% \MessageBreak You might have misspelt the name of the encoding}% {Necessary code for this encoding was not loaded.\MessageBreak Thus calling the encoding later on will produce further error messages.}}% \let\reserved@f\relax} % \end{macrocode} % % \begin{macrocode} \ProcessOptions* % \end{macrocode} % % \begin{macrocode} \fontencoding\encodingdefault\selectfont % % \end{macrocode} % % \subsection{Definitions for the OT1 encoding} % % \changes{1.3}{1993/12/17}{Removed all the hackery for use in % \cs{DeclareFontEncoding}, and redid everything using % \cs{DeclareTextFoo}.} % \changes{1.3b}{1993/12/18}{Replaced the missing last argument to % \cs{DeclareFontEncoding}.} % \changes{1.3c}{1993/12/18}{Rewrote for the new syntax of % \cs{EncodingSpecific}.} % \changes{1.4a}{1994/05/01}{Rewrote for the new syntax.} % \changes{1.5a}{1994/05/12}{Rewrote for the new syntax.} % \changes{1.5h}{1994/05/16}{\cs{pounds} was still using u rather than % ui shape.} % \changes{1.6b}{1994/10/27}{Added: % \cs{textemdash} % \cs{textendash} % \cs{textexclamdown} % \cs{texthyphenchar} % \cs{texthyphen} % \cs{textquestiondown} % \cs{textquotedblleft} % \cs{textquotedblright} % \cs{textquoteleft} % \cs{textquoteright} % } % % The definitions for the `\TeX{} text' (OT1) encoding. % % Declare the encoding. %<*OT1> % \begin{macrocode} \DeclareFontEncoding{OT1}{}{} % \end{macrocode} % Declare the accents. % \begin{macrocode} \DeclareTextAccent{\"}{OT1}{127} \DeclareTextAccent{\'}{OT1}{19} \DeclareTextAccent{\.}{OT1}{95} \DeclareTextAccent{\=}{OT1}{22} \DeclareTextAccent{\^}{OT1}{94} \DeclareTextAccent{\`}{OT1}{18} \DeclareTextAccent{\~}{OT1}{126} \DeclareTextAccent{\H}{OT1}{125} \DeclareTextAccent{\u}{OT1}{21} \DeclareTextAccent{\v}{OT1}{20} \DeclareTextAccent{\r}{OT1}{23} % \end{macrocode} % Some accents have to be built by hand: % \changes{v1.7j}{1995/05/21}{Updated some plain macros} % \changes{v1.7o}{1995/11/07}{Added \cs{leavevmode} at start of % \cs{c}, otherwise the output routine might be invoked within the % macro.} % \begin{macrocode} \DeclareTextCommand{\b}{OT1}[1] {{\o@lign{\relax#1\crcr\hidewidth\sh@ft{29}% \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}}} \DeclareTextCommand{\c}{OT1}[1] {\leavevmode\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent24 #1% \else{\ooalign{\unhbox\z@\crcr\hidewidth\char24\hidewidth}}\fi} \DeclareTextCommand{\d}{OT1}[1] {{\o@lign{\relax#1\crcr\hidewidth\sh@ft{10}.\hidewidth}}} % \end{macrocode} % Declare the text symbols. % \begin{macrocode} \DeclareTextSymbol{\AE}{OT1}{29} \DeclareTextSymbol{\OE}{OT1}{30} \DeclareTextSymbol{\O}{OT1}{31} \DeclareTextSymbol{\ae}{OT1}{26} \DeclareTextSymbol{\i}{OT1}{16} \DeclareTextSymbol{\j}{OT1}{17} \DeclareTextSymbol{\oe}{OT1}{27} \DeclareTextSymbol{\o}{OT1}{28} \DeclareTextSymbol{\ss}{OT1}{25} \DeclareTextSymbol{\textemdash}{OT1}{124} \DeclareTextSymbol{\textendash}{OT1}{123} \DeclareTextSymbol{\textexclamdown}{OT1}{60} %\DeclareTextSymbol{\texthyphenchar}{OT1}{`\-} %\DeclareTextSymbol{\texthyphen}{OT1}{`\-} \DeclareTextSymbol{\textquestiondown}{OT1}{62} \DeclareTextSymbol{\textquotedblleft}{OT1}{92} \DeclareTextSymbol{\textquotedblright}{OT1}{`\"} \DeclareTextSymbol{\textquoteleft}{OT1}{`\`} \DeclareTextSymbol{\textquoteright}{OT1}{`\'} % \end{macrocode} % Some symbols which are faked from others: % \changes{v1.7o}{1995/11/07}{Changed \cs{char}32 to \cs{@xxxii} (two % tokens less).} % \changes{v1.7o}{1995/11/07}{Replaced octal number 27 by decimal % number 23 to protect against the quote character being active.} % \changes{v1.7o}{1995/11/07}{Replaced some 0's by \cs{z@} (faster).} % \changes{v1.8c}{1996/10/27} % {Removed \cs{aa} and \cs{AA}} % \begin{macrocode} % \DeclareTextCommand{\aa}{OT1} % {{\accent23a}} \DeclareTextCommand{\L}{OT1} {\leavevmode\setbox\z@\hbox{L}\hb@xt@\wd\z@{\hss\@xxxii L}} \DeclareTextCommand{\l}{OT1} {{\@xxxii l}} % \DeclareTextCommand{\AA}{OT1} % {\leavevmode\setbox\z@\hbox{h}\dimen@\ht\z@\advance\dimen@-1ex% % \rlap{\raise.67\dimen@\hbox{\char23}}A} % \end{macrocode} % In the OT1 encoding \r A has a hand-crafted defintion, so we % have here the first recorded explicit use of % |\DeclareTextCompositeCommand|. % \changes{v1.8c}{1996/10/27} % {Added \cs{r} A} % \begin{macrocode} \DeclareTextCompositeCommand{\r}{OT1}{A} {\leavevmode\setbox\z@\hbox{h}\dimen@\ht\z@\advance\dimen@-1ex% \rlap{\raise.67\dimen@\hbox{\char23}}A} % \end{macrocode} % In the OT1 encoding, \pounds~and \$ share a slot. % \begin{macrocode} \DeclareTextCommand{\textdollar}{OT1}{{% \ifdim \fontdimen\@ne\font >\z@ \slshape \else \upshape \fi \char`\$}} % \end{macrocode} % % \begin{macrocode} \DeclareTextCommand{\textsterling}{OT1}{{% \ifdim \fontdimen\@ne\font >\z@ \itshape \else \fontshape{ui}\selectfont \fi \char`\$}} % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \subsection{Definitions for the T1 encoding} % % \changes{1.3}{1993/12/17}{Removed all the hackery for use in % \cs{DeclareFontEncoding}, and redid everything using % \cs{DeclareTextFoo}.} % \changes{1.3b}{1993/12/18}{Replaced the missing last argument to % \cs{DeclareFontEncoding}.} % \changes{1.3c}{1993/12/18}{Rewrote for the new syntax of % \cs{EncodingSpecific}.} % \changes{1.4a}{1994/05/01}{Rewrote for the new syntax.} % \changes{1.5a}{1994/05/12}{Rewrote for the new syntax.} % \changes{1.6a}{1994/10/25}{Added \cs{textdollar}, % \cs{textlbrace}, \cs{textrbrace}, \cs{textsterling}, % \cs{textunderline}.} % \changes{1.6a}{1994/10/25}{Removed % \cs{textlbrace}, \cs{textrbrace}, \cs{textunderline} to give them % their proper names.} % \changes{1.6b}{1994/10/27}{Added % \cs{textasciicircum} % \cs{textasciitilde} % \cs{textbackslash} % \cs{textbar} % \cs{textbraceleft} % \cs{textbraceright} % \cs{textcompwordmark} % \cs{textemdash} % \cs{textendash} % \cs{textexclamdown} % \cs{textgreater} % \cs{texthyphenchar} % \cs{texthyphen} % \cs{textless} % \cs{textquestiondown} % \cs{textquotedblleft} % \cs{textquotedblright} % \cs{textquotedbl} % \cs{textquoteleft} % \cs{textquoteright} % \cs{textunderscore} % \cs{textvisiblespace} % } % % The definitions for the `Extended \TeX{} text' (T1) encoding. % % Declare the encoding. % \begin{macrocode} %<*T1> \DeclareFontEncoding{T1}{}{} % \end{macrocode} % Declare the accents. % \begin{macrocode} \DeclareTextAccent{\`}{T1}{0} \DeclareTextAccent{\'}{T1}{1} \DeclareTextAccent{\^}{T1}{2} \DeclareTextAccent{\~}{T1}{3} \DeclareTextAccent{\"}{T1}{4} \DeclareTextAccent{\H}{T1}{5} \DeclareTextAccent{\r}{T1}{6} \DeclareTextAccent{\v}{T1}{7} \DeclareTextAccent{\u}{T1}{8} \DeclareTextAccent{\=}{T1}{9} \DeclareTextAccent{\.}{T1}{10} % \end{macrocode} % Some accents have to be built by hand: % \begin{macrocode} \DeclareTextCommand{\b}{T1}[1] {{\o@lign{\relax#1\crcr\hidewidth\sh@ft{29}% \vbox to.2ex{\hbox{\char9}\vss}\hidewidth}}} \DeclareTextCommand{\c}{T1}[1] {\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent11 #1% \else{\ooalign{\hidewidth\char11\hidewidth \crcr\unhbox\z@}}\fi} \DeclareTextCommand{\d}{T1}[1] {{\o@lign{\relax#1\crcr\hidewidth\sh@ft{10}.\hidewidth}}} \DeclareTextCommand{\k}{T1}[1] {\oalign{\null#1\crcr\hidewidth\char12}} % \end{macrocode} % Declare the text symbols. % \changes{v1.7t}{1995/11/29}{Added \cs{textasciicircum}, % \cs{textasciitilde}, \cs{textbackslash}, \cs{textbar}, % \cs{textgreater} and \cs{textless}.} % \changes{v1.8c}{1996/10/27} % {Removed \cs{aa} and \cs{AA}} % \begin{macrocode} %\DeclareTextSymbol{\AA}{T1}{197} \DeclareTextSymbol{\AE}{T1}{198} \DeclareTextSymbol{\DH}{T1}{208} \DeclareTextSymbol{\DJ}{T1}{208} \DeclareTextSymbol{\L}{T1}{138} \DeclareTextSymbol{\NG}{T1}{141} \DeclareTextSymbol{\OE}{T1}{215} \DeclareTextSymbol{\O}{T1}{216} \DeclareTextSymbol{\SS}{T1}{223} \DeclareTextSymbol{\TH}{T1}{222} %\DeclareTextSymbol{\aa}{T1}{229} \DeclareTextSymbol{\ae}{T1}{230} \DeclareTextSymbol{\dh}{T1}{240} \DeclareTextSymbol{\dj}{T1}{158} \DeclareTextSymbol{\guillemotleft}{T1}{19} \DeclareTextSymbol{\guillemotright}{T1}{20} \DeclareTextSymbol{\guilsinglleft}{T1}{14} \DeclareTextSymbol{\guilsinglright}{T1}{15} \DeclareTextSymbol{\i}{T1}{25} \DeclareTextSymbol{\j}{T1}{26} \DeclareTextSymbol{\l}{T1}{170} \DeclareTextSymbol{\ng}{T1}{173} \DeclareTextSymbol{\oe}{T1}{247} \DeclareTextSymbol{\o}{T1}{248} \DeclareTextSymbol{\quotedblbase}{T1}{18} \DeclareTextSymbol{\quotesinglbase}{T1}{13} \DeclareTextSymbol{\ss}{T1}{255} \DeclareTextSymbol{\textasciicircum}{T1}{`\^} \DeclareTextSymbol{\textasciitilde}{T1}{`\~} \DeclareTextSymbol{\textbackslash}{T1}{`\\} \DeclareTextSymbol{\textbar}{T1}{`\|} \DeclareTextSymbol{\textbraceleft}{T1}{`\{} \DeclareTextSymbol{\textbraceright}{T1}{`\}} \DeclareTextSymbol{\textcompwordmark}{T1}{23} \DeclareTextSymbol{\textdollar}{T1}{`\$} \DeclareTextSymbol{\textemdash}{T1}{22} \DeclareTextSymbol{\textendash}{T1}{21} \DeclareTextSymbol{\textexclamdown}{T1}{189} \DeclareTextSymbol{\textgreater}{T1}{`\>} %\DeclareTextSymbol{\texthyphenchar}{T1}{127} %\DeclareTextSymbol{\texthyphen}{T1}{`\-} \DeclareTextSymbol{\textless}{T1}{`\<} \DeclareTextSymbol{\textquestiondown}{T1}{190} \DeclareTextSymbol{\textquotedblleft}{T1}{16} \DeclareTextSymbol{\textquotedblright}{T1}{17} \DeclareTextSymbol{\textquotedbl}{T1}{`\"} \DeclareTextSymbol{\textquoteleft}{T1}{`\`} \DeclareTextSymbol{\textquoteright}{T1}{`\'} \DeclareTextSymbol{\textsection}{T1}{159} \DeclareTextSymbol{\textsterling}{T1}{191} \DeclareTextSymbol{\textunderscore}{T1}{95} \DeclareTextSymbol{\textvisiblespace}{T1}{32} \DeclareTextSymbol{\th}{T1}{254} % \end{macrocode} % Declare the composites. % \begin{macrocode} \DeclareTextComposite{\.}{T1}{i}{`\i} \DeclareTextComposite{\u}{T1}{A}{128} \DeclareTextComposite{\k}{T1}{A}{129} \DeclareTextComposite{\'}{T1}{C}{130} \DeclareTextComposite{\v}{T1}{C}{131} \DeclareTextComposite{\v}{T1}{D}{132} \DeclareTextComposite{\v}{T1}{E}{133} \DeclareTextComposite{\k}{T1}{E}{134} \DeclareTextComposite{\u}{T1}{G}{135} \DeclareTextComposite{\'}{T1}{L}{136} \DeclareTextComposite{\v}{T1}{L}{137} \DeclareTextComposite{\'}{T1}{N}{139} \DeclareTextComposite{\v}{T1}{N}{140} \DeclareTextComposite{\H}{T1}{O}{142} \DeclareTextComposite{\'}{T1}{R}{143} \DeclareTextComposite{\v}{T1}{R}{144} \DeclareTextComposite{\'}{T1}{S}{145} \DeclareTextComposite{\v}{T1}{S}{146} \DeclareTextComposite{\c}{T1}{S}{147} \DeclareTextComposite{\v}{T1}{T}{148} \DeclareTextComposite{\c}{T1}{T}{149} \DeclareTextComposite{\H}{T1}{U}{150} \DeclareTextComposite{\r}{T1}{U}{151} \DeclareTextComposite{\"}{T1}{Y}{152} \DeclareTextComposite{\'}{T1}{Z}{153} \DeclareTextComposite{\v}{T1}{Z}{154} \DeclareTextComposite{\.}{T1}{Z}{155} \DeclareTextComposite{\.}{T1}{I}{157} \DeclareTextComposite{\u}{T1}{a}{160} \DeclareTextComposite{\k}{T1}{a}{161} \DeclareTextComposite{\'}{T1}{c}{162} \DeclareTextComposite{\v}{T1}{c}{163} \DeclareTextComposite{\v}{T1}{d}{164} \DeclareTextComposite{\v}{T1}{e}{165} \DeclareTextComposite{\k}{T1}{e}{166} \DeclareTextComposite{\u}{T1}{g}{167} \DeclareTextComposite{\'}{T1}{l}{168} \DeclareTextComposite{\v}{T1}{l}{169} \DeclareTextComposite{\'}{T1}{n}{171} \DeclareTextComposite{\v}{T1}{n}{172} \DeclareTextComposite{\H}{T1}{o}{174} \DeclareTextComposite{\'}{T1}{r}{175} \DeclareTextComposite{\v}{T1}{r}{176} \DeclareTextComposite{\'}{T1}{s}{177} \DeclareTextComposite{\v}{T1}{s}{178} \DeclareTextComposite{\c}{T1}{s}{179} \DeclareTextComposite{\v}{T1}{t}{180} \DeclareTextComposite{\c}{T1}{t}{181} \DeclareTextComposite{\H}{T1}{u}{182} \DeclareTextComposite{\r}{T1}{u}{183} \DeclareTextComposite{\"}{T1}{y}{184} \DeclareTextComposite{\'}{T1}{z}{185} \DeclareTextComposite{\v}{T1}{z}{186} \DeclareTextComposite{\.}{T1}{z}{187} \DeclareTextComposite{\`}{T1}{A}{192} \DeclareTextComposite{\'}{T1}{A}{193} \DeclareTextComposite{\^}{T1}{A}{194} \DeclareTextComposite{\~}{T1}{A}{195} \DeclareTextComposite{\"}{T1}{A}{196} \DeclareTextComposite{\r}{T1}{A}{197} \DeclareTextComposite{\c}{T1}{C}{199} \DeclareTextComposite{\`}{T1}{E}{200} \DeclareTextComposite{\'}{T1}{E}{201} \DeclareTextComposite{\^}{T1}{E}{202} \DeclareTextComposite{\"}{T1}{E}{203} \DeclareTextComposite{\`}{T1}{I}{204} \DeclareTextComposite{\'}{T1}{I}{205} \DeclareTextComposite{\^}{T1}{I}{206} \DeclareTextComposite{\"}{T1}{I}{207} \DeclareTextComposite{\~}{T1}{N}{209} \DeclareTextComposite{\`}{T1}{O}{210} \DeclareTextComposite{\'}{T1}{O}{211} \DeclareTextComposite{\^}{T1}{O}{212} \DeclareTextComposite{\~}{T1}{O}{213} \DeclareTextComposite{\"}{T1}{O}{214} \DeclareTextComposite{\`}{T1}{U}{217} \DeclareTextComposite{\'}{T1}{U}{218} \DeclareTextComposite{\^}{T1}{U}{219} \DeclareTextComposite{\"}{T1}{U}{220} \DeclareTextComposite{\'}{T1}{Y}{221} \DeclareTextComposite{\`}{T1}{a}{224} \DeclareTextComposite{\'}{T1}{a}{225} \DeclareTextComposite{\^}{T1}{a}{226} \DeclareTextComposite{\~}{T1}{a}{227} \DeclareTextComposite{\"}{T1}{a}{228} \DeclareTextComposite{\r}{T1}{a}{229} \DeclareTextComposite{\c}{T1}{c}{231} \DeclareTextComposite{\`}{T1}{e}{232} \DeclareTextComposite{\'}{T1}{e}{233} \DeclareTextComposite{\^}{T1}{e}{234} \DeclareTextComposite{\"}{T1}{e}{235} \DeclareTextComposite{\`}{T1}{i}{236} \DeclareTextComposite{\`}{T1}{\i}{236} \DeclareTextComposite{\'}{T1}{i}{237} \DeclareTextComposite{\'}{T1}{\i}{237} \DeclareTextComposite{\^}{T1}{i}{238} \DeclareTextComposite{\^}{T1}{\i}{238} \DeclareTextComposite{\"}{T1}{i}{239} \DeclareTextComposite{\"}{T1}{\i}{239} \DeclareTextComposite{\~}{T1}{n}{241} \DeclareTextComposite{\`}{T1}{o}{242} \DeclareTextComposite{\'}{T1}{o}{243} \DeclareTextComposite{\^}{T1}{o}{244} \DeclareTextComposite{\~}{T1}{o}{245} \DeclareTextComposite{\"}{T1}{o}{246} \DeclareTextComposite{\`}{T1}{u}{249} \DeclareTextComposite{\'}{T1}{u}{250} \DeclareTextComposite{\^}{T1}{u}{251} \DeclareTextComposite{\"}{T1}{u}{252} \DeclareTextComposite{\'}{T1}{y}{253} % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \changes{1.4a}{1994/05/01}{Removed the uc/lc table settings, since % the T1 uc/lc table is now the default.} % % \subsection{Definitions for the OMS encoding} % % \changes{v1.6a}{1994/10/25}{Added the OMS encoding.} % \changes{v1.6b}{1994/10/27}{Renamed \cs{textlbrace} to % \cs{textbraceleft} and \cs{textrbrace} to \cs{textbraceright}.} % \changes{v1.6b}{1994/10/27}{Added \cs{textbackslash}.} % \changes{v1.6d}{1994/10/30}{Added \cs{textcircled}.} % % The definitions for the `\TeX{} math symbol' (OMS) encoding. Even % though this is meant to be a math font, it includes some of the % standard \LaTeX{} text symbols. % % Declare the encoding. % \begin{macrocode} %<*OMS> \DeclareFontEncoding{OMS}{}{} % \end{macrocode} % Declare the symbols. % \changes{v1.7t}{1995/11/29}{Added \cs{textbackslash} and % \cs{textbar}.} % \changes{v1.8c}{1996/10/27} % {Added \cs{textasteriskcentered}} % \begin{macrocode} \DeclareTextSymbol{\textasteriskcentered}{OMS}{"03} \DeclareTextSymbol{\textbackslash}{OMS}{"6E} \DeclareTextSymbol{\textbar}{OMS}{"6A} \DeclareTextSymbol{\textbraceleft}{OMS}{"66} \DeclareTextSymbol{\textbraceright}{OMS}{"67} \DeclareTextSymbol{\textbullet}{OMS}{"0F} \DeclareTextSymbol{\textdaggerdbl}{OMS}{"7A} \DeclareTextSymbol{\textdagger}{OMS}{"79} \DeclareTextSymbol{\textparagraph}{OMS}{"7B} \DeclareTextSymbol{\textperiodcentered}{OMS}{"01} \DeclareTextSymbol{\textsection}{OMS}{"78} \DeclareTextCommand{\textcircled}{OMS}[1]{{% \ooalign{% \hfil \raise .07ex\hbox {\upshape#1}\hfil \crcr \char"0D }% }} % % \end{macrocode} % % \subsection{Definitions for the OML encoding} % % \changes{v1.6d}{1994/10/30}{Added the OML encoding.} % % The definitions for the `\TeX{} math italic' (OML) encoding. Even % though this is meant to be a math font, it includes some of the % standard \LaTeX{} text symbols. % % Declare the encoding. % \begin{macrocode} %<*OML> \DeclareFontEncoding{OML}{}{} % \end{macrocode} % Declare the symbols. % \changes{v1.7t}{1995/11/29}{Added \cs{textless} and % \cs{textgreater}.} % \begin{macrocode} \DeclareTextSymbol{\textless}{OML}{`\<} \DeclareTextSymbol{\textgreater}{OML}{`\>} \DeclareTextAccent{\t}{OML}{"7F} % % \end{macrocode} % % \changes{1.3}{1993/12/17}{Made Rokicki's encoding a proper encoding % scheme rather than a variant of OT1.} % \changes{1.3b}{1993/12/18}{Replaced the missing last argument to % \cs{DeclareFontEncoding}.} % \changes{1.3c}{1993/12/18}{Rewrote for the new syntax of % \cs{EncodingSpecific}.} % \changes{1.4a}{1994/05/01}{Removed Rokicki's encoding.} % % % \Finale % \endinput