% \iffalse meta-comment % % Copyright 1993 1994 1995 1996 1997 1998 1999 % The LaTeX3 Project and any individual authors listed elsewhere % in this file. % % This file is part of the LaTeX2e system. % ---------------------------------------- % % It may be distributed under the terms of the LaTeX Project Public % License, as described in lppl.txt in the base LaTeX distribution. % Either version 1.0 or, at your option, any later version. % % \fi % % \iffalse %%% From File: ltfinal.dtx % %<*driver> % \fi \ProvidesFile{ltfinal.dtx} [1998/05/20 v1.01a LaTeX Kernel (Final Settings)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltfinal.dtx} \title{\filename} \date{\filedate} \author{% Johannes Braams\and David Carlisle\and Alan Jeffrey\and Leslie Lamport\and Frank Mittelbach\and Chris Rowley\and Rainer Sch\"opf} \begin{document} \maketitle \DocInput{ltfinal.dtx} \end{document} % % \fi % % \CheckSum{466} % % \section{Final settings} % This section contains the final settings for \LaTeX. It initialises % some debugging and typesetting parameters, sets the default % |\catcode|s and uc/lc codes, and inputs the hyphenation file. % % \StopEventually{} % % \changes{v0.1a}{1994/03/07}{Initial version, split from latex.dtx} % \changes{v0.1a}{1994/03/07}{Remove oldcomments environment} % \changes{v0.1c}{1994/04/21}{Added comments, set the catcodes of % 128--255.} % \changes{v0.1d}{1994/04/23}{Check that \cs{font@submax} is still zero} % \changes{v0.1e}{1994/05/02}{Set all the catcodes} % \changes{v0.1f}{1994/05/03}{Set the catcode of control-J to be % `other', for use in messages.} % \changes{v0.1g}{1994/05/05}{Added empty errhelp.} % \changes{v0.1h}{1994/05/13}{Added package ot1enc, and defined % \cs{@acci}, \cs{@accii} and \cs{@acciii}.} % \changes{v0.1j}{1994/05/18}{Corrected the lccode for d-bar.} % \changes{v0.1k}{1994/05/19}{Removed \cs{makeat...}} % \changes{v1.0n}{1994/05/31}{Renamed lthyphen.* to lthyphen.*.} % \changes{v1.0o}{1994/11/17} % {\cs{@tempa} to \cs{reserved@a}} % \changes{v1.0p}{1994/12/01} % {Renamed lthyphen.* to hyphen.*.} % \changes{v1.0r}{1995/06/05} % {Added \cs{MakeUppercase} and \cs{MakeLowercase}.} % \changes{v1.0s}{1995/06/06} % {Made \cs{MakeUppercase} and \cs{MakeLowercase} brace their % argument.} % % \subsection{Debugging} % % By default, \LaTeX{} shows statistics: % \begin{macrocode} %<*2ekernel> \tracingstats1 % \end{macrocode} % \changes{v0.1g}{1994/05/05}{Set error help empty.} % Empty the error help message, which may have some rubbish: % \begin{macrocode} \errhelp{} % \end{macrocode} % % % \subsection{Typesetting parameters} % % \begin{macro}{\@lowpenalty} % \begin{macro}{\@medpenalty} % \begin{macro}{\@highpenalty} % These are penalties used internally. % \begin{macrocode} \newcount\@lowpenalty \newcount\@medpenalty \newcount\@highpenalty % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % The default values of the picture and |\fbox| parameters: % \begin{macrocode} \unitlength = 1pt \fboxsep = 3pt \fboxrule = .4pt % \end{macrocode} % The saved value of \TeX's |\maxdepth|: % \begin{macrocode} \@maxdepth = \maxdepth % \end{macrocode} % |\vsize| initialized because a |\clearpage| with |\vsize < \topskip| % causes trouble. % |\@colroom| and |\@colht| also initialized because |\vsize| may be % set to them if a |\clearpage| is done before the |\begin{document}| % % \begin{macrocode} \vsize = 1000pt \@colroom = \vsize \@colht = \vsize % \end{macrocode} % Initialise |\textheight| |\textwidth| and page style, to avoid % internal errors if they are not set by the class. % \changes{v0.1b}{1994/04/18} % {Initialise \cs{textheight}, \cs{textwidth} and page style} % \begin{macrocode} \textheight=.5\maxdimen \textwidth=\textheight \ps@empty % \end{macrocode} % % \subsection{Lccodes for hyphenation} % % \changes{v1.01a}{1998/05/20}{Set up lccodes before loading % hyphenation files: pr/2639} % We set things up so that hypehnation files can assume that the % default (T1) lccodes are in use (at present this also sets up the % uccodes). % We temporarily define |\reserved@a| to apply |\reserved@c| to % all the numbers in the range of its arguments. % \begin{macrocode} \def\reserved@a#1#2{% \@tempcnta#1\relax \@tempcntb#2\relax \reserved@b } \def\reserved@b{% \ifnum\@tempcnta>\@tempcntb\else \reserved@c\@tempcnta \advance\@tempcnta\@ne \expandafter\reserved@b \fi } % \end{macrocode} % Depending on the \TeX{} version, we might not be allowed to do % this for non-ASCII characters. % \changes{v1.0n}{1994/06/09}{For \TeX2, do not set codes for higher % half of character table.} % \begin{macrocode} \def\reserved@c#1{% \count@=#1\advance\count@ by -"20 \uccode#1=\count@ \lccode#1=#1 } \reserved@a{`\a}{`\z} \ifnum\inputlineno=\m@ne\else \reserved@a{"A0}{"BC} \reserved@a{"E0}{"FF} \fi % \end{macrocode} % The upper case characters need their |\uccode| and |\lccode| values % set, and their |\sfcode| set to 999. % \begin{macrocode} \def\reserved@c#1{% \count@=#1\advance\count@ by "20 \uccode#1=#1 \lccode#1=\count@ \sfcode#1=999 } \reserved@a{`\A}{`\Z} \ifnum\inputlineno=\m@ne\else \reserved@a{"80}{"9C} \reserved@a{"C0}{"DF} \fi % \end{macrocode} % Well, it would be nice if that were correct, but unfortunately, the % Cork encoding contains some odd slots whose uccode or lccode isn't % quite what you'd expect. % \begin{macrocode} \uccode`\^^Y=`\I % dotless i \lccode`\^^Y=`\^^Y % dotless i \uccode`\^^Z=`\J % dotless j, ae in OT1 \lccode`\^^Z=`\^^Z % dotless j, ae in OT1 \ifnum\inputlineno=\m@ne\else \lccode`\^^9d=`\i % dotted I \uccode`\^^9d=`\^^9d % dotted I \lccode`\^^9e=`\^^9e % d-bar \uccode`\^^9e=`\^^d0 % d-bar \fi % \end{macrocode} % Finally here is one that helps hyphenation in the OT1 encoding. % \changes{v1.0z}{1996/10/31} % {Added extra \cs{lcode}, hoping it does no harm in T1 (pr/1969)} % \begin{macrocode} \lccode`\^^[=`\^^[ % oe in OT1 % \end{macrocode} % % \subsection{Hyphenation} % % \changes{v0.1a}{1994/03/07}{move code here from lhyphen.dtx} % \changes{v0.1a}{1994/03/07} % {use \cs{InputIfFileExists} not \cs{IfFileExists}} % \changes{v1.0x}{1995/11/01} % {(DPC) Switch meaning of \cs{@addtofilelist} for cfg files}% % The following code will be compiled into the format file. It checks % for the existance of \texttt{hyphen.cfg} in inputs that file if % found. Otherwise it inputs \texttt{hyphen.ltx}. Note that these % are loaded in \emph{before} the |\catcode|s are set, so local % hyphenation files can use 8-bit input. % % We try to load the customized hyphenation description file. % \begin{macrocode} \InputIfFileExists{hyphen.cfg} {\typeout{===========================================^^J% Local configuration file hyphen.cfg used^^J% ===========================================}% \def\@addtofilelist##1{\xdef\@filelist{\@filelist,##1}}% } {\input{hyphen.ltx}} \let\@addtofilelist\@gobble % \end{macrocode} % % % % \subsection{Font loading} % Fonts loaded during the formatting process might already have % changed the |\font@submax| from |0pt| to something higher. % If so, we put out a bold warning. % \changes{v0.1l}{1994/05/20}{Use new font warning commands} % \begin{macrocode} \ifdim \font@submax >\z@ \@font@warning{Size substitutions with differences\MessageBreak up to \font@submax\space have occured.\MessageBreak \MessageBreak Please check the transcript file carefully\MessageBreak and redo the format generation if necessary! \@gobbletwo}% \errhelp{Only stopped, to give you time to read the above message.} \errmessage{} % \end{macrocode} % We reset the macro. Otherwise every user will get a warning on % every job. % \begin{macrocode} \def\font@submax{0pt} \fi % \end{macrocode} % % \subsection{Input encoding} % % We temporarily define |\reserved@a| to apply |\reserved@c| to all the % numbers in the range of its arguments. % \begin{macrocode} \def\reserved@a#1#2{% \@tempcnta#1\relax \@tempcntb#2\relax \reserved@b } \def\reserved@b{% \ifnum\@tempcnta>\@tempcntb\else \reserved@c\@tempcnta \advance\@tempcnta\@ne \expandafter\reserved@b \fi } % \end{macrocode} % \changes{v0.1e}{1994/05/02}{Added setting the special catcodes.} % \changes{v0.1f}{1994/05/02}{Set the catcode of control-J.} % Set the special catcodes (although some of these are useless, since an % error will have occurred if the catcodes have changed). Note that % |^^J| has catcode `other' for use in warning messages. % \begin{macrocode} \catcode`\ =10 \catcode`\#=6 \catcode`\$=3 \catcode`\%=14 \catcode`\&=4 \catcode`\\=0 \catcode`\^=7 \catcode`\_=8 \catcode`\{=1 \catcode`\}=2 \catcode`\~=13 \catcode`\@=11 \catcode`\^^I=10 \catcode`\^^J=12 \catcode`\^^L=13 \catcode`\^^M=5 % \end{macrocode} % \changes{v0.1e}{1994/05/02}{Added setting the `other' catcodes.} % Set the `other' catcodes. % \begin{macrocode} \def\reserved@c#1{\catcode#1=12\relax} \reserved@c{`\!} \reserved@c{`\"} \reserved@a{`\'}{`\?} \reserved@c{`\[} \reserved@c{`\]} \reserved@c{`\`} \reserved@c{`\|} % \end{macrocode} % \changes{v0.1e}{1994/05/02}{Added setting the `letter' catcodes.} % Set the `letter' catcodes. % \begin{macrocode} \def\reserved@c#1{\catcode#1=11\relax} \reserved@a{`\A}{`\Z} \reserved@a{`\a}{`\z} % \end{macrocode} % \changes{v0.1e}{1994/05/02}{Made slot 127 illegal} % \changes{v1.0n}{1994/11/18} % {re-allow slots 127--255} % All the characters in the range 0--31 and 127--255 are illegal, % \emph{except} tab (|^^I|), nl (|^^J|), ff (|^^L|) and cr (|^^M|). % % Now allow 8-bit characters, although their use in this way is % strongly discouraged. See |inputenc.dtx| for a supported mechanism % for 8-bit input. % \begin{macrocode} \def\reserved@c#1{\catcode#1=15\relax} \reserved@a{0}{`\^^H} \reserved@c{`\^^K} \reserved@a{`\^^N}{31} %\ifnum\inputlineno=\m@ne \catcode"7F=15 %\else % \reserved@a{"7F}{"FF} %\fi % \end{macrocode} % % \subsection{Lccodes and uccodes} % % \changes{v1.01a}{1998/05/20}{Set up uc/lccodes after loading % hyphenation files: pr/2639} % We now again set up the default (T1) uc/lccodes. % The lower case characters need their |\uccode| and |\lccode| values % set. Some of this is a repeat of the set-up before loading % hyphenation files. % Depending on the \TeX{} version, we might not be allowed to do % this for non-ASCII characters. % \changes{v1.0n}{1994/06/09}{For \TeX2, do not set codes for higher % half of character table.} % \begin{macrocode} \def\reserved@c#1{% \count@=#1\advance\count@ by -"20 \uccode#1=\count@ \lccode#1=#1 } \reserved@a{`\a}{`\z} \ifnum\inputlineno=\m@ne\else \reserved@a{"A0}{"BC} \reserved@a{"E0}{"FF} \fi % \end{macrocode} % The upper case characters need their |\uccode| and |\lccode| values % set, and their |\sfcode| set to 999. % \begin{macrocode} \def\reserved@c#1{% \count@=#1\advance\count@ by "20 \uccode#1=#1 \lccode#1=\count@ \sfcode#1=999 } \reserved@a{`\A}{`\Z} \ifnum\inputlineno=\m@ne\else \reserved@a{"80}{"9C} \reserved@a{"C0}{"DF} \fi % \end{macrocode} % Well, it would be nice if that were correct, but unfortunately, the % Cork encoding contains some odd slots whose uccode or lccode isn't % quite what you'd expect. % \begin{macrocode} \uccode`\^^Y=`\I % dotless i \lccode`\^^Y=`\^^Y % dotless i \uccode`\^^Z=`\J % dotless j, ae in OT1 \lccode`\^^Z=`\^^Z % dotless j, ae in OT1 \ifnum\inputlineno=\m@ne\else \lccode`\^^9d=`\i % dotted I \uccode`\^^9d=`\^^9d % dotted I \lccode`\^^9e=`\^^9e % d-bar \uccode`\^^9e=`\^^d0 % d-bar \fi % \end{macrocode} % Finally here is one that helps hyphenation in the OT1 encoding. % \changes{v1.0z}{1996/10/31} % {Added extra \cs{lcode}, hoping it does no harm in T1 (pr/1969)} % \begin{macrocode} \lccode`\^^[=`\^^[ % oe in OT1 % \end{macrocode} % % \begin{macro}{\MakeUppercase} % \begin{macro}{\MakeUppercase} % \begin{macro}{\@uclclist} % % \changes{v1.0z1}{1997/10/20}{Removed \cs{aa} and \cs{AA} from % \cs{@uclclist} as these are macros.} % % And whilst we're doing things with uc/lc tables, here are two % commands to upper- and lower-case a string. % % \emph{Note} that this implementation is subject to change! At % the moment we're not providing any way to extend the list of % uc/lc commands, since finding a good interface is difficult. % These commands have some nasty features, such as uppercasing % mathematics, environment names, labels, etc. A much better % long-term solution is to use all-caps fonts, but these aren't % generally available. % \begin{macrocode} \DeclareRobustCommand{\MakeUppercase}[1]{{% \def\i{I}\def\j{J}% \def\reserved@a##1##2{\let##1##2\reserved@a}% \expandafter\reserved@a\@uclclist\reserved@b{\reserved@b\@gobble}% \protected@edef\reserved@a{\uppercase{#1}}% \reserved@a }} \DeclareRobustCommand{\MakeLowercase}[1]{{% \def\reserved@a##1##2{\let##2##1\reserved@a}% \expandafter\reserved@a\@uclclist\reserved@b{\reserved@b\@gobble}% \protected@edef\reserved@a{\lowercase{#1}}% \reserved@a }} \def\@uclclist{\oe\OE\o\O\ae\AE \dh\DH\dj\DJ\l\L\ng\NG\ss\SS\th\TH} % \end{macrocode} % The above code works, but has the nasty side-effect that if you % say something like: %\begin{verbatim} % \markboth{\MakeUppercase\contentsname} % {\MakeUppercase\contentsname} %\end{verbatim} % then the uppercasing is only done to the first letter of the % contents name, since the mark expands out to: %\begin{verbatim} % \mark{\protect\MakeUppercase Table of Contents} % {\protect\MakeUppercase Table of Contents} %\end{verbatim} % In order to get round this, we redefine |\MakeUppercase| and % |\MakeLowercase| to grab their argument and brace it. This is a % very low-level hack, and is \emph{not} recommended practice! % This is an instance of a general problem that makes it unsafe to % grab arguments unbraced, and probably needs a more general % solution. For the moment though, this hack will do: % \begin{macrocode} \protected@edef\MakeUppercase#1{\MakeUppercase{#1}} \protected@edef\MakeLowercase#1{\MakeLowercase{#1}} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \changes{v1.0h}{1994/05/13}{Added output enc stuff} % \changes{v1.0i}{1994/05/16}{moved output enc stuff to lfonts} % % \changes{v0.1a}{1994/03/07}{Add code from the old dump.dtx} % % \subsection{Applying Patch files} % Between major releases, small patches will be distributed in % files |ltpatch.ltx| which must be added at this point. % \changes{v1.0m}{1994/06/08}{Add patch file system} % \begin{macrocode} \IfFileExists{ltpatch.ltx} {\typeout{=================================^^J% Applying patch file ltpatch.ltx^^J% =================================} \def\fmtversion@topatch{unknown} \input{ltpatch.ltx} \ifx\fmtversion\fmtversion@topatch \ifx\patch@level\@undefined \typeout{^^J^^J^^J% !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J% !! Patch file `ltpatch.ltx' not suitable for this^^J% !! version of LaTeX.^^J^^J% !! Please check if initex found an old patch file:^^J% !! --- if so, rename it or delete it, and redo the^^J% !! initex run.^^J% !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J}% \batchmode \@@end \else % \end{macrocode} % \changes{v1.0q}{1995/04/21} % {Allow initial patch level 0} % \changes{v1.0t}{1995/06/13} % {Add patch level string more carefully} % The code below adds the `patch level' string to the first |\typeout| % in the startup banner. % \begin{macrocode} \def\fmtversion@topatch{0}% \ifx\fmtversion@topatch\patch@level\else \def\reserved@a\typeout##1##2\reserved@a{% \typeout{##1 patch level \patch@level}##2} \everyjob\expandafter\expandafter\expandafter{% \expandafter\reserved@a\the\everyjob\reserved@a} \let\reserved@a\relax \the\everyjob \fi \fi \else \typeout{^^J^^J^^J% !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J% !! Patch file `ltpatch.ltx' (for version <\fmtversion@topatch>)^^J% !! is not suitable for version <\fmtversion> of LaTeX.^^J^^J% !! Please check if initex found an old patch file:^^J% !! --- if so, rename it or delete it, and redo the^^J% !! initex run.^^J% !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J}% \batchmode \@@end \fi \let\fmtversion@topatch\relax }{} % \end{macrocode} % % \subsection{Freeing Memory} % % \begin{macro}{\reserved@a} % \begin{macro}{\reserved@b} % \changes{v1.0v}{1995/10/17}{reset here after the \cs{input} above} % And just to make sure nobody relies on those definitions of % |\reserved@b| and friends. % These macros are reserved for use in the kernel. \emph{Do not use % them as general scratch macros}. % \begin{macrocode} \let\reserved@a\@filelist \let\reserved@b=\@undefined \let\reserved@c=\@undefined \let\reserved@d=\@undefined \let\reserved@e=\@undefined \let\reserved@f=\@undefined % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\toks} % \changes{v1.0y}{1996/07/10} % {Free up memory from scratch registers /2213} % \begin{macrocode} \toks0{} \toks2{} \toks4{} \toks6{} \toks8{} % \end{macrocode} % \end{macro} % % \subsection{Initialise file list} % % \begin{macro}{\@providesfile} % \changes{v1.0v}{1995/10/17}{reset macro} % Initialise for use in the document. During initex a modified version % has been used which leaves debugging information for |latexbug.tex|. % \begin{macrocode} \def\@providesfile#1[#2]{% \wlog{File: #1 #2}% \expandafter\xdef\csname ver@#1\endcsname{#2}% \endgroup} % \end{macrocode} % \end{macro} % % \begin{macro}{\@filelist} % \changes{v1.0w}{1995/10/19}{Move after \cs{reserved@a} setting:-)} % \begin{macro}{\@addtofilelist} % Reset |\@filelist| so files input while making the format are not % listed. The list built up so far may take up a lot of memory and so % it is moved to |\reserved@a| where it will be overwritten as soon % as almost any \LaTeX\ command is issued in a class file. % However the |latexbug.tex| program will be able to access this % information and insert it into a bug report. % \begin{macrocode} \let\@filelist\@gobble \def\@addtofilelist#1{\xdef\@filelist{\@filelist,#1}}% % \end{macrocode} % \end{macro} % \end{macro} % % \subsection{Dumping the format} % Finally we make |@| into a letter, ensure the format will % be in the `normal' error mode, and dump everything into the % format file. % \changes{v1.0t}{1995/06/13} % {Call \cs{errorstopmode}} % \begin{macrocode} \makeatother \errorstopmode \dump % % \end{macrocode} % % \Finale %