1 % \iffalse meta-comment
4 % The LaTeX3 Project and any individual authors listed elsewhere
7 % This file is part of the LaTeX base system.
8 % -------------------------------------------
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.
18 % This file has the LPPL maintenance status "maintained".
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
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.
31 %%% From File: ltfinal.dtx
35 \ProvidesFile{ltfinal.dtx}
36 [2016/01/04 v2.0j LaTeX Kernel (Final Settings)]
38 \documentclass{ltxdoc}
39 \GetFileInfo{ltfinal.dtx}
51 \MaintainedByLaTeXTeam{latex}
53 \DocInput{ltfinal.dtx}
60 % \section{Final settings}
61 % This section contains the final settings for \LaTeX. It initialises
62 % some debugging and typesetting parameters, sets the default
63 % |\catcode|s and uc/lc codes, and inputs the hyphenation file.
67 % \changes{v0.1a}{1994/03/07}{Initial version, split from latex.dtx}
68 % \changes{v0.1a}{1994/03/07}{Remove oldcomments environment}
69 % \changes{v0.1c}{1994/04/21}{Added comments, set the catcodes of
71 % \changes{v0.1d}{1994/04/23}{Check that \cs{font@submax} is still zero}
72 % \changes{v0.1e}{1994/05/02}{Set all the catcodes}
73 % \changes{v0.1f}{1994/05/03}{Set the catcode of control-J to be
74 % `other', for use in messages.}
75 % \changes{v0.1g}{1994/05/05}{Added empty errhelp.}
76 % \changes{v0.1h}{1994/05/13}{Added package ot1enc, and defined
77 % \cs{@acci}, \cs{@accii} and \cs{@acciii}.}
78 % \changes{v0.1j}{1994/05/18}{Corrected the lccode for d-bar.}
79 % \changes{v0.1k}{1994/05/19}{Removed \cs{makeat...}}
80 % \changes{v1.0n}{1994/05/31}{Renamed lthyphen.* to lthyphen.*.}
81 % \changes{v1.0o}{1994/11/17}
82 % {\cs{@tempa} to \cs{reserved@a}}
83 % \changes{v1.0p}{1994/12/01}
84 % {Renamed lthyphen.* to hyphen.*.}
85 % \changes{v1.0r}{1995/06/05}
86 % {Added \cs{MakeUppercase} and \cs{MakeLowercase}.}
87 % \changes{v1.0s}{1995/06/06}
88 % {Made \cs{MakeUppercase} and \cs{MakeLowercase} brace their
91 % \subsection{Debugging}
93 % By default, \LaTeX{} shows statistics:
99 % \subsection{Typesetting parameters}
101 % \begin{macro}{\@lowpenalty}
102 % \begin{macro}{\@medpenalty}
103 % \begin{macro}{\@highpenalty}
104 % These are penalties used internally.
106 \newcount\@lowpenalty
107 \newcount\@medpenalty
108 \newcount\@highpenalty
115 %\begin{macro}{\newmarks}
116 % \changes{v2.0a}{2014/12/30}{macro added}
117 % \changes{v2.0b}{2015/01/23}{use reserved count 256}
118 % \changes{v2.0g}{2015/06/19}{Use $-1$ for first range to get contiguous allocation}
119 % Allocate extended marks types if etex is active.
120 % Placed here at the end of the format
121 % to increase compatibility with count allocations
122 % in earlier releases.
125 %<*2ekernel|latexrelease>
126 %<latexrelease>\IncludeInRelease{2015/01/01}%
127 %<latexrelease> {\newmarks}{Extended Allocation}%
131 \ifx\marks\@undefined\else
133 \e@alloc\marks \e@alloc@chardef{\count256}\m@ne\e@alloc@top}
138 %</2ekernel|latexrelease>
139 %<latexrelease>\EndIncludeInRelease
140 %<latexrelease>\IncludeInRelease{0000/00/00}%
141 %<latexrelease> {\newmarks}{Extended Allocation}%
142 %<latexrelease>\let\newmarks\@undefined
143 %<latexrelease>\EndIncludeInRelease
148 %\begin{macro}{\newXeTeXintercharclass}
149 % \changes{v2.0a}{2014/12/30}{macro added}
150 % \changes{v2.0b}{2015/01/23}{use reserved count 257}
151 % \changes{v2.0f}{2015/04/28}{define \cs{xe@alloc@intercharclass} for compatibility with older xelatex initilisation}
152 %\begin{macro}{\xe@alloc@intercharclass}
153 % \changes{v2.0j}{2016/01/04}{Start allocation at one not three}
154 % Allocate |\XeTeXintercharclass| types if xetex is active.
155 % previously defined in |xetex.ini|.
159 %<*2ekernel|latexrelease>
160 %<latexrelease>\IncludeInRelease{2015/01/01}%
161 %<latexrelease> {\newXeTeXintercharclass}{Extended Allocation}%
164 % Classes allocated 1 to 254 (early 1, 2 and 3 were pre-set for CJK).
165 % \changes{v2.0g}{2015/06/19}{Use $-1$ for first range to get contiguous allocation}
167 \ifx\XeTeXcharclass\@undefined
169 \countdef\xe@alloc@intercharclass=257
170 \xe@alloc@intercharclass=\thr@@
171 \def\newXeTeXintercharclass{%
172 \e@alloc\XeTeXcharclass\chardef\xe@alloc@intercharclass\m@ne\@cclv}
177 %</2ekernel|latexrelease>
178 %<latexrelease>\EndIncludeInRelease
179 %<latexrelease>\IncludeInRelease{0000/00/00}%
180 %<latexrelease> {\newXeTeXintercharclass}{Extended Allocation}%
181 %<latexrelease> \ifx\XeTeXcharclass\@undefined
182 %<latexrelease> \else
183 %<latexrelease> \newcount\xe@alloc@intercharclass
184 %<latexrelease> \xe@alloc@intercharclass=\thr@@
185 %<latexrelease> \def\xe@alloc@#1#2#3#4#5{\global\advance#1\@ne
186 %<latexrelease> \xe@ch@ck#1#4#2%
187 %<latexrelease> \allocationnumber#1%
188 %<latexrelease> \global#3#5\allocationnumber
189 %<latexrelease> \wlog{\string#5=\string#2\the\allocationnumber}}
190 %<latexrelease> \def\xe@ch@ck#1#2#3{%
191 %<latexrelease> \ifnum#1<#2\else
192 %<latexrelease> \errmessage{No room for a new #3}%
194 %<latexrelease> \def\newXeTeXintercharclass{%
195 %<latexrelease> \xe@alloc@\xe@alloc@intercharclass
196 %<latexrelease> \XeTeXcharclass\chardef\@cclv}
198 %<latexrelease>\EndIncludeInRelease
199 %<*2ekernel|latexrelease>
200 %<latexrelease>\IncludeInRelease{2016/01/01}%
201 %<latexrelease> {\xe@alloc@intercharclass}{Start of XeTeX class allocator}%
202 \ifx\XeTeXcharclass\@undefined
204 \countdef\xe@alloc@intercharclass=257
205 \xe@alloc@intercharclass=\z@
207 %</2ekernel|latexrelease>
208 %<latexrelease>\EndIncludeInRelease
209 %<latexrelease>\IncludeInRelease{2015/01/01}%
210 %<latexrelease> {\xe@alloc@intercharclass}{Start of XeTeX class allocator}%
211 %<latexrelease> \ifx\XeTeXcharclass\@undefined
212 %<latexrelease> \else
213 %<latexrelease> \xe@alloc@intercharclass=\thr@@
215 %<latexrelease>\EndIncludeInRelease
216 %<latexrelease>\IncludeInRelease{0000/00/00}%
217 %<latexrelease> {\xe@alloc@intercharclass}{Start of XeTeX class allocator}%
218 %<latexrelease> \ifx\XeTeXcharclass\@undefined
219 %<latexrelease> \else
220 %<latexrelease> \newcount\xe@alloc@intercharclass
221 %<latexrelease> \xe@alloc@intercharclass=\thr@@
223 %<latexrelease>\EndIncludeInRelease
231 % The default values of the picture and |\fbox| parameters:
237 % The saved value of \TeX's |\maxdepth|:
239 \@maxdepth = \maxdepth
241 % |\vsize| initialized because a |\clearpage| with |\vsize < \topskip|
243 % |\@colroom| and |\@colht| also initialized because |\vsize| may be
244 % set to them if a |\clearpage| is done before the |\begin{document}|
251 % Initialise |\textheight| |\textwidth| and page style, to avoid
252 % internal errors if they are not set by the class.
253 % \changes{v0.1b}{1994/04/18}
254 % {Initialise \cs{textheight}, \cs{textwidth} and page style}
256 \textheight=.5\maxdimen
257 \textwidth=\textheight
261 % \subsection{Lccodes for hyphenation}
263 % \changes{v2.0a}{2015/01/03}{Unicode data loading added}
264 % \changes{v2.0c}{2015/01/24}{Skip T1-code entirely with Unicode engines}
265 % \changes{v2.0d}{2015/03/26}{Use renamed
266 % \texttt{unicode-letters.def}}
267 % \changes{v2.0i}{2015/12/10}{Use new common Unicode data loaders}
268 % \changes{v2.0j}{2016/01/04}{Do not set up inter character classes for
270 % For $7$- and $8$-bit engines the assumption of T1 encodings is the
271 % basis for the hyphenation patterns. That's not the case for the Unicode
272 % engines, where the assumption is engine-native working. The common
273 % loader system provides access to data from the Unicode Consortium
274 % covering not only |\lccode| but also other related data. The
275 % |\lccode| part of that at least needs to be loaded before hyphenation is
276 % tackled: Xe\TeX{} follows the standard \TeX{} route of building patterns
277 % into the format. Lua\TeX{} doesn't require this data be loaded \emph{here}
278 % but it does need to be loaded somewhere. Rather than test for the Unicode
279 % engines by name, the approach here is to look for the extended math mode
280 % handling both provide: any other engine developed in this area will
281 % presumably also provide |\Umathcode|.
284 \ifx\Umathcode\@undefined\else 1\fi
285 \ifx\XeTeXmathcode\@undefined\else 1\fi
287 \message{ Unicode character data,}
288 \input{load-unicode-data}
290 %<*2ekernel|latexrelease>
291 %<latexrelease>\IncludeInRelease{0000/00/00}%
292 %<latexrelease> {\XeTeXintercharclasses}{XeTeX character classes}%
293 \input{load-unicode-xetex-classes}
294 %</2ekernel|latexrelease>
295 %<latexrelease>\EndIncludeInRelease
298 % \changes{v2.0d}{2015/02/03}{Set \cs{lccode} for \texttt{-} with Unicode
300 % There is one over-ride that makes sense here (see below for the same for
301 % $8$-bit engines): setting the lccode for |-| to itself.
303 \lccode`\- =`\- % default hyphen char
305 % The alternative is that a ``traditional'' engine is in use.
309 % \changes{v1.1b}{1998/05/20}{Set up lccodes before loading
310 % hyphenation files: pr/2639}
311 % We set things up so that hyphenation files can assume that the
312 % default (T1) lccodes are in use (at present this also sets up the
314 % We temporarily define |\reserved@a| to apply |\reserved@c| to
315 % all the numbers in the range of its arguments.
317 \def\reserved@a#1#2{%
323 \ifnum\@tempcnta>\@tempcntb\else
324 \reserved@c\@tempcnta
325 \advance\@tempcnta\@ne
326 \expandafter\reserved@b
330 % Depending on the \TeX{} version, we might not be allowed to do
331 % this for non-ASCII characters.
332 % \changes{v1.0n}{1994/06/09}{For \TeX2, do not set codes for higher
333 % half of character table.}
336 \count@=#1\advance\count@ by -"20
340 \reserved@a{`\a}{`\z}
341 \ifnum\inputlineno=\m@ne\else
342 \reserved@a{"A0}{"BC}
343 \reserved@a{"E0}{"FF}
346 % The upper case characters need their |\uccode| and |\lccode| values
347 % set, and their |\sfcode| set to 999.
350 \count@=#1\advance\count@ by "20
355 \reserved@a{`\A}{`\Z}
356 \ifnum\inputlineno=\m@ne\else
357 \reserved@a{"80}{"9C}
358 \reserved@a{"C0}{"DF}
361 % Well, it would be nice if that were correct, but unfortunately, the
362 % Cork encoding contains some odd slots whose uccode or lccode isn't
363 % quite what you'd expect.
365 \uccode`\^^Y=`\I % dotless i
366 \lccode`\^^Y=`\^^Y % dotless i
367 \uccode`\^^Z=`\J % dotless j, ae in OT1
368 \lccode`\^^Z=`\^^Z % dotless j, ae in OT1
369 \ifnum\inputlineno=\m@ne\else
370 \lccode`\^^9d=`\i % dotted I
371 \uccode`\^^9d=`\^^9d % dotted I
372 \lccode`\^^9e=`\^^9e % d-bar
373 \uccode`\^^9e=`\^^d0 % d-bar
376 % Finally here is one that helps hyphenation in the OT1 encoding.
377 % \changes{v1.0z}{1996/10/31}
378 % {Added extra \cs{lcode}, hoping it does no harm in T1 (pr/1969)}
380 \lccode`\^^[=`\^^[ % oe in OT1
383 % And we also set the |\lccode| of |\-| and |\textcompwordmark| so
384 % that they do not prevent hyphenation in the remainder of the word
385 % (as suggested by Lars Helstr\"om).
386 % \changes{v1.1e}{2003/10/13}
387 % {Added extra \cs{lccode} for \cs{-} and \cs{textcompwordmark}}
389 \lccode`\- =`\- % default hyphen char
390 \lccode 127=127 % alternate hyphen char
391 \lccode 23 =23 % textcompwordmark in T1
394 % End of the conditional to select either Unicode or T1 encoding defaults.
399 % This is as good a place as any to active a few Xe\TeX{}-specific
402 \ifx\XeTeXuseglyphmetrics\@undefined
404 \XeTeXuseglyphmetrics=1 %
405 \XeTeXdashbreakstate=1 %
409 % \subsection{Hyphenation}
411 % \changes{v0.1a}{1994/03/07}{move code here from lhyphen.dtx}
412 % \changes{v0.1a}{1994/03/07}
413 % {use \cs{InputIfFileExists} not \cs{IfFileExists}}
414 % \changes{v1.0x}{1995/11/01}
415 % {(DPC) Switch meaning of \cs{@addtofilelist} for cfg files}%
416 % The following code will be compiled into the format file. It checks
417 % for the existence of \texttt{hyphen.cfg} in inputs that file if
418 % found. Otherwise it inputs \texttt{hyphen.ltx}. Note that these
419 % are loaded in \emph{before} the |\catcode|s are set, so local
420 % hyphenation files can use 8-bit input.
422 % We try to load the customized hyphenation description file.
424 \InputIfFileExists{hyphen.cfg}
425 {\typeout{===========================================^^J%
426 Local configuration file hyphen.cfg used^^J%
427 ===========================================}%
428 \def\@addtofilelist##1{\xdef\@filelist{\@filelist,##1}}%
431 \let\@addtofilelist\@gobble
436 % \subsection{Font loading}
437 % Fonts loaded during the formatting process might already have
438 % changed the |\font@submax| from |0pt| to something higher.
439 % If so, we put out a bold warning.
440 % \changes{v0.1l}{1994/05/20}{Use new font warning commands}
442 % \changes{v1.1c}{2000/08/23}{Fix typo in warning}
443 \ifdim \font@submax >\z@
444 \@font@warning{Size substitutions with differences\MessageBreak
445 up to \font@submax\space have occurred.\MessageBreak
447 Please check the transcript file
448 carefully\MessageBreak
449 and redo the format generation if necessary!
451 \errhelp{Only stopped, to give you time to
452 read the above message.}
455 % We reset the macro. Otherwise every user will get a warning on
458 \def\font@submax{0pt}
462 % \subsection{Input encoding}
464 % We temporarily define |\reserved@a| to apply |\reserved@c| to all the
465 % numbers in the range of its arguments.
467 \def\reserved@a#1#2{%
473 \ifnum\@tempcnta>\@tempcntb\else
474 \reserved@c\@tempcnta
475 \advance\@tempcnta\@ne
476 \expandafter\reserved@b
480 % \changes{v0.1e}{1994/05/02}{Added setting the special catcodes.}
481 % \changes{v0.1f}{1994/05/02}{Set the catcode of control-J.}
482 % Set the special catcodes (although some of these are useless, since an
483 % error will have occurred if the catcodes have changed). Note that
484 % |^^J| has catcode `other' for use in warning messages.
503 % \changes{v0.1e}{1994/05/02}{Added setting the `other' catcodes.}
504 % Set the `other' catcodes.
506 \def\reserved@c#1{\catcode#1=12\relax}
509 \reserved@a{`\'}{`\?}
515 % \changes{v0.1e}{1994/05/02}{Added setting the `letter' catcodes.}
516 % Set the `letter' catcodes.
518 \def\reserved@c#1{\catcode#1=11\relax}
519 \reserved@a{`\A}{`\Z}
520 \reserved@a{`\a}{`\z}
522 % \changes{v0.1e}{1994/05/02}{Made slot 127 illegal}
523 % \changes{v1.0n}{1994/11/18}
524 % {re-allow slots 127--255}
525 % All the characters in the range 0--31 and 127--255 are illegal,
526 % \emph{except} tab (|^^I|), nl (|^^J|), ff (|^^L|) and cr (|^^M|).
528 % Now allow 8-bit characters, although their use in this way is
529 % strongly discouraged. See |inputenc.dtx| for a supported mechanism
532 \def\reserved@c#1{\catcode#1=15\relax}
533 \reserved@a{0}{`\^^H}
535 \reserved@a{`\^^N}{31}
536 %\ifnum\inputlineno=\m@ne
539 % \reserved@a{"7F}{"FF}
543 % \subsection{Lccodes and uccodes}
545 % \changes{v1.1b}{1998/05/20}{Set up uc/lccodes after loading
546 % hyphenation files: pr/2639}
547 % We now again set up the default (T1) uc/lccodes.
548 % The lower case characters need their |\uccode| and |\lccode| values
549 % set. Some of this is a repeat of the set-up before loading
551 % Depending on the \TeX{} version, we might not be allowed to do
552 % this for non-ASCII characters.
553 % \changes{v1.0n}{1994/06/09}{For \TeX2, do not set codes for higher
554 % half of character table.}
555 % \changes{v2.0a}{2015/01/03}{Skip resetting codes with Unicode engines}
556 % For the Unicode engines (Xe\TeX{} and Lua\TeX{}) there is no need to
557 % do any of this: they use hyphenation data which does not alter any
558 % of the set up and so this entire block is skipped.
561 \ifx\Umathcode\@undefined\else 1\fi
562 \ifx\XeTeXmathcode\@undefined\else 1\fi
566 \count@=#1\advance\count@ by -"20
570 \reserved@a{`\a}{`\z}
571 \ifnum\inputlineno=\m@ne\else
572 \reserved@a{"A0}{"BC}
573 \reserved@a{"E0}{"FF}
576 % The upper case characters need their |\uccode| and |\lccode| values
577 % set, and their |\sfcode| set to 999.
580 \count@=#1\advance\count@ by "20
585 \reserved@a{`\A}{`\Z}
586 \ifnum\inputlineno=\m@ne\else
587 \reserved@a{"80}{"9C}
588 \reserved@a{"C0}{"DF}
591 % Well, it would be nice if that were correct, but unfortunately, the
592 % Cork encoding contains some odd slots whose uccode or lccode isn't
593 % quite what you'd expect.
595 \uccode`\^^Y=`\I % dotless i
596 \lccode`\^^Y=`\^^Y % dotless i
597 \uccode`\^^Z=`\J % dotless j, ae in OT1
598 \lccode`\^^Z=`\^^Z % dotless j, ae in OT1
599 \ifnum\inputlineno=\m@ne\else
600 \lccode`\^^9d=`\i % dotted I
601 \uccode`\^^9d=`\^^9d % dotted I
602 \lccode`\^^9e=`\^^9e % d-bar
603 \uccode`\^^9e=`\^^d0 % d-bar
606 % Finally here is one that helps hyphenation in the OT1 encoding.
607 % \changes{v1.0z}{1996/10/31}
608 % {Added extra \cs{lcode}, hoping it does no harm in T1 (pr/1969)}
610 \lccode`\^^[=`\^^[ % oe in OT1
611 \fi % End of reset block for 8-bit engines
614 % \begin{macro}{\MakeUppercase}
615 % \begin{macro}{\MakeUppercase}
616 % \begin{macro}{\@uclclist}
618 % \changes{v1.1a}{1997/10/20}{Removed \cs{aa} and \cs{AA} from
619 % \cs{@uclclist} as these are macros.}
621 % And whilst we're doing things with uc/lc tables, here are two
622 % commands to upper- and lower-case a string.
624 % \emph{Note} that this implementation is subject to change! At
625 % the moment we're not providing any way to extend the list of
626 % uc/lc commands, since finding a good interface is difficult.
627 % These commands have some nasty features, such as uppercasing
628 % mathematics, environment names, labels, etc. A much better
629 % long-term solution is to use all-caps fonts, but these aren't
630 % generally available.
632 \DeclareRobustCommand{\MakeUppercase}[1]{{%
634 \def\reserved@a##1##2{\let##1##2\reserved@a}%
635 \expandafter\reserved@a\@uclclist\reserved@b{\reserved@b\@gobble}%
636 \protected@edef\reserved@a{\uppercase{#1}}%
639 \DeclareRobustCommand{\MakeLowercase}[1]{{%
640 \def\reserved@a##1##2{\let##2##1\reserved@a}%
641 \expandafter\reserved@a\@uclclist\reserved@b{\reserved@b\@gobble}%
642 \protected@edef\reserved@a{\lowercase{#1}}%
645 \def\@uclclist{\oe\OE\o\O\ae\AE
646 \dh\DH\dj\DJ\l\L\ng\NG\ss\SS\th\TH}
648 % The above code works, but has the nasty side-effect that if you
649 % say something like:
651 % \markboth{\MakeUppercase\contentsname}
652 % {\MakeUppercase\contentsname}
654 % then the uppercasing is only done to the first letter of the
655 % contents name, since the mark expands out to:
657 % \mark{\protect\MakeUppercase Table of Contents}
658 % {\protect\MakeUppercase Table of Contents}
660 % In order to get round this, we redefine |\MakeUppercase| and
661 % |\MakeLowercase| to grab their argument and brace it. This is a
662 % very low-level hack, and is \emph{not} recommended practice!
663 % This is an instance of a general problem that makes it unsafe to
664 % grab arguments unbraced, and probably needs a more general
665 % solution. For the moment though, this hack will do:
667 \protected@edef\MakeUppercase#1{\MakeUppercase{#1}}
668 \protected@edef\MakeLowercase#1{\MakeLowercase{#1}}
674 % \changes{v1.0h}{1994/05/13}{Added output enc stuff}
675 % \changes{v1.0i}{1994/05/16}{moved output enc stuff to lfonts}
677 % \changes{v0.1a}{1994/03/07}{Add code from the old dump.dtx}
679 % \subsection{Applying Patch files}
680 % Between major releases, small patches will be distributed in
681 % files |ltpatch.ltx| which must be added at this point.
682 % \changes{v1.0m}{1994/06/08}{Add patch file system}
683 % \changes{v2.0h}{2015/06/23}
684 % {set \cs{patch@level} in ltvers rather than in ltfinal/ltpatch}
686 % Patch file code removed.
688 %\IfFileExists{ltpatch.ltx}
689 % {\typeout{=================================^^J%
690 % Applying patch file ltpatch.ltx^^J%
691 % =================================}
692 % \def\fmtversion@topatch{unknown}
693 % \input{ltpatch.ltx}
694 % \ifx\fmtversion\fmtversion@topatch
695 % \ifx\patch@level\@undefined
696 % \typeout{^^J^^J^^J%
697 % !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J%
698 % !! Patch file `ltpatch.ltx' not suitable for this^^J%
699 % !! version of LaTeX.^^J^^J%
700 % !! Please check if initex found an old patch file:^^J%
701 % !! --- if so, rename it or delete it, and redo the^^J%
703 % !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J}%
707 % \changes{v1.0q}{1995/04/21}
708 % {Allow initial patch level 0}
709 % \changes{v1.0t}{1995/06/13}
710 % {Add patch level string more carefully}
711 % The code below adds the `patch level' string to the first |\typeout|
712 % in the startup banner.
714 % \def\fmtversion@topatch{0}%
715 % \ifx\fmtversion@topatch\patch@level\else
716 % \def\reserved@a\typeout##1##2\reserved@a{%
717 % \typeout{##1 patch level \patch@level}##2}
718 % \everyjob\expandafter\expandafter\expandafter{%
719 % \expandafter\reserved@a\the\everyjob\reserved@a}
720 % \let\reserved@a\relax
725 % \typeout{^^J^^J^^J%
726 % !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J%
727 % !! Patch file `ltpatch.ltx' (for version <\fmtversion@topatch>)^^J%
728 % !! is not suitable for version <\fmtversion> of LaTeX.^^J^^J%
729 % !! Please check if initex found an old patch file:^^J%
730 % !! --- if so, rename it or delete it, and redo the^^J%
732 % !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J}%
735 % \let\fmtversion@topatch\relax
739 % \subsection{Freeing Memory}
741 % \begin{macro}{\reserved@a}
742 % \begin{macro}{\reserved@b}
743 % \changes{v1.0v}{1995/10/17}{reset here after the \cs{input} above}
744 % And just to make sure nobody relies on those definitions of
745 % |\reserved@b| and friends.
746 % These macros are reserved for use in the kernel. \emph{Do not use
747 % them as general scratch macros}.
749 \let\reserved@a\@filelist
750 \let\reserved@b=\@undefined
751 \let\reserved@c=\@undefined
752 \let\reserved@d=\@undefined
753 \let\reserved@e=\@undefined
754 \let\reserved@f=\@undefined
759 % \begin{macro}{\toks}
760 % \changes{v1.0y}{1996/07/10}
761 % {Free up memory from scratch registers /2213}
771 % \begin{macro}{\errhelp}
772 % \changes{v0.1g}{1994/05/05}{Set error help empty.}
773 % \changes{v1.1d}{2000/09/01}{Set error help empty at very end
774 % (pr/449 done correctly).}
775 % Empty the error help message, which may have some rubbish:
781 % \subsection{Initialise file list}
783 % \begin{macro}{\@providesfile}
784 % \changes{v1.0v}{1995/10/17}{reset macro}
785 % Initialise for use in the document. During initex a modified version
786 % has been used which leaves debugging information for |latexbug.tex|.
788 \def\@providesfile#1[#2]{%
790 \expandafter\xdef\csname ver@#1\endcsname{#2}%
795 % \begin{macro}{\@filelist}
796 % \changes{v1.0w}{1995/10/19}{Move after \cs{reserved@a} setting:-)}
797 % \begin{macro}{\@addtofilelist}
798 % Reset |\@filelist| so files input while making the format are not
799 % listed. The list built up so far may take up a lot of memory and so
800 % it is moved to |\reserved@a| where it will be overwritten as soon
801 % as almost any \LaTeX\ command is issued in a class file.
802 % However the |latexbug.tex| program will be able to access this
803 % information and insert it into a bug report.
805 \let\@filelist\@gobble
806 \def\@addtofilelist#1{\xdef\@filelist{\@filelist,#1}}%
811 % \subsection{Dumping the format}
812 % Finally we make |@| into a letter, ensure the format will
813 % be in the `normal' error mode, and dump everything into the
815 % \changes{v1.0t}{1995/06/13}
816 % {Call \cs{errorstopmode}}