Use new -t option in l3build for TU tests
[latex2e.git] / latex2e-20150101 / base / ltplain.dtx
blobf14969b31d0b5357cee46118444b1ba78c431238
1 % \iffalse meta-comment
3 % Copyright 1993-2015
4 % The LaTeX3 Project and any individual authors listed elsewhere
5 % in this file.
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
22 % information.
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.
28 % \fi
29 % \iffalse
30 %%% From File: ltplain.dtx
32 %<*driver>
33 % \fi
34 \ProvidesFile{ltplain.dtx}
35              [2015/06/19 v2.0h LaTeX Kernel (Plain TeX)]
36 % \iffalse
37 \documentclass{ltxdoc}
38 \GetFileInfo{ltplain.dtx}
39 \begin{document}
40 \title{\filename\\(The file plain.tex, modified for \LaTeX)}
41 \author{Donald~E.~Knuth\\
42  Modified by
43  Leslie Lamport, Frank Mittelbach,\\
44  Rainer Sch\"opf, David Carlisle}
45 \date{\filedate}
46  \MaintainedByLaTeXTeam{latex}
47  \maketitle
48  \DocInput{\filename}
49 \end{document}
50 %</driver>
51 % \fi
53 % \CheckSum{1204}
55 % \changes{v1.0a}{1994/03/08}
56 %         {Remove need for a driver file.}
57 % \changes{v1.0b}{1994/03/12}
58 %         {Name changed from lplain. The end of an era}
59 % \changes{v1.0e}{1994/03/12}{Replaced remaining width, height, depth
60 %       by \LaTeX{} macro names to save tokens.}
61 % \changes{v1.1a}{1994/10/14}
62 %         {Moved code to other files.}
63 % \changes{v1.1b}{1994/11/10}
64 %         {(CAR) added patch to \cs{loop}.}
65 % \changes{v1.1f}{1994/11/25}
66 %         {(DPC) Comment out lots of obsolete code}
67 % \changes{v1.1g}{1994/12/01}
68 %         {(DPC) More doc changes}
69 % \changes{v1.1j}{1995/05/07}{Use \cs{hb@xt@}}
70 % \changes{v1.1j}{1995/05/21}{Moved some code to other files}
71 % \changes{v1.1n}{1995/07/02}{Removed surplus `by' and `\quotechar=' in
72 %                             various places}
73 % \changes{v1.1o}{1995/09/14}{Moved \cs{multispan} to lttab.dtx}
74 % \changes{v1.1r}{1995/10/10}{Autoload tracing code}
75 % \changes{v1.1u}{1996/10/28}{(CAR) More doc changes}
76 % \changes{v2.0e}{2015/02/21}{Removed autoload code}
78 % \section{Plain \TeX}
80 % \LaTeX\ includes almost all of the functionality of Knuth's original
81 % `Basic Macros' That is, the plain \TeX\ format described in Appendix~B
82 % of the \TeX{}Book.  However, some of the user commands are not much
83 % use so, in order to save memory, we may remove them from the kernel
84 % into a package.  Here is a list of the commands that may be removed
85 % (PROBABLY NOT COMPLETE).
86 % \begin{verbatim}
87 %    \magstep    \magstephalf
88 %    \mathhexbox
89 %    \vglue      \vgl@
90 %    \hglue      \hgl@
91 % \end{verbatim}
93 % This file is by now very small as most of it has been moved to more
94 % appropriate kernel files: it may disappear completely one day.
96 % \LaTeX\ font definitions are done using NFSS2 so none of PLAIN's
97 % font definitions are in \LaTeX.
99 % \LaTeX\ has its own tabbing environment, so PLAIN's is disabled.
101 % \LaTeX{} uses its own output routine, so most of the plain one was
102 % removed.
104 % \StopEventually{}
107 %    \begin{macrocode}
108 %<*2ekernel>
109 \catcode`\{=1 % left brace is begin-group character
110 \catcode`\}=2 % right brace is end-group character
111 \catcode`\$=3 % dollar sign is math shift
112 \catcode`\&=4 % ampersand is alignment tab
113 \catcode`\#=6 % hash mark is macro parameter character
114 \catcode`\^=7 % circumflex and uparrow are for superscripts
115 \catcode`\_=8 % underline and downarrow are for subscripts
116 \catcode`\^^I=10 % ascii tab is a blank space
117 \chardef\active=13 \catcode`\~=\active % tilde is active
118 \catcode`\^^L=\active \outer\def^^L{\par}% ascii form-feed is \outer\par
119 %    \end{macrocode}
121 %    \begin{macrocode}
122 \message{catcodes,}
123 %    \end{macrocode}
125 % We had to define the |\catcodes| right away, before the message line,
126 % since |\message| uses the |{| and |}| characters.
127 % When INITEX (the \TeX\ initializer) starts up,
128 % it has defined the following |\catcode| values:\\
129 % |\catcode`\^^@=9 % | ascii null is ignored\\
130 % |\catcode`\^^M=5 % | ascii return is end-line\\
131 % |\catcode`\\=0 %   | backslash is TeX escape character\\
132 % |\catcode`\%=14 %  | percent sign is comment character\\
133 % |\catcode`\ =10 %  | ascii space is blank space\\
134 % |\catcode`\^^?=15 %| ascii delete is invalid\\
135 % |\catcode`\A=11 ... \catcode`\Z=11 %| uppercase letters\\
136 % |\catcode`\a=11 ... \catcode`\z=11 %| lowercase letters\\
137 % all others are type 12 (other)
139 % Here is a list of the characters that have been specially catcoded:
140 %    \begin{macrocode}
141 \def\dospecials{\do\ \do\\\do\{\do\}\do\$\do\&%
142   \do\#\do\^\do\_\do\%\do\~}
143 %    \end{macrocode}
144 % (not counting ascii null, tab, linefeed, formfeed, return, delete)
145 % Each symbol in the list is preceded by \do, which can be defined
146 % if you want to do something to every item in the list.
148 % We make |@| signs act like letters, temporarily, to avoid conflict
149 % between user names and internal control sequences of plain format.
150 %    \begin{macrocode}
151 \catcode`@=11
152 %    \end{macrocode}
154 % To make the plain macros more efficient in time and space,
155 % several constant values are declared here as control sequences.
156 % If they were changed, anything could happen;
157 % so they are private symbols.
158 % \begin{macro}{\@ne}
159 % \begin{macro}{\tw@}
160 % \begin{macro}{\thr@@}
161 % \begin{macro}{\sixt@@n}
162 % \begin{macro}{\@cclv}
163 % Small constants are defined using |\chardef|.
164 %    \begin{macrocode}
165 \chardef\@ne=1
166 \chardef\tw@=2
167 \chardef\thr@@=3
168 \chardef\sixt@@n=16
169 \chardef\@cclv=255
170 %    \end{macrocode}
171 % \end{macro}
172 % \end{macro}
173 % \end{macro}
174 % \end{macro}
175 % \end{macro}
177 % \begin{macro}{\@cclvi}
178 % \begin{macro}{\@m}
179 % \begin{macro}{\@M}
180 % \begin{macro}{\@MM}
181 % Constants above 255 defined using |\mathchardef|.
182 %    \begin{macrocode}
183 \mathchardef\@cclvi=256
184 \mathchardef\@m=1000
185 \mathchardef\@M=10000
186 \mathchardef\@MM=20000
187 %    \end{macrocode}
188 % \end{macro}
189 % \end{macro}
190 % \end{macro}
191 % \end{macro}
193 % Allocation of registers
195 % Here are macros for the automatic allocation of |\count|, |\box|,
196 % |\dimen|, |\skip|, |\muskip|, and |\toks| registers, as well as
197 % |\read| and |\write| stream numbers, |\fam| codes, |\language| codes,
198 % and |\insert| numbers.
200 %    \begin{macrocode}
201 \message{registers,}
202 %    \end{macrocode}
204 % When a register is used only temporarily, it need not be allocated;
205 % grouping can be used, making the value previously in the register
206 % return after the close of the group.  The main use of these macros is
207 % for registers that are defined by one macro and used by others,
208 % possibly at different nesting levels.  All such registers should be
209 % defined through these macros; otherwise conflicts may occur,
210 % especially when two or more macro packages are being used at
211 % the same time.
213 % \begin{oldcomments}
214 % The following counters are reserved:
215 %   0 to 9  page numbering
216 %       10  count allocation
217 %       11  dimen allocation
218 %       12  skip allocation
219 %       13  muskip allocation
220 %       14  box allocation
221 %       15  toks allocation
222 %       16  read file allocation
223 %       17  write file allocation
224 %       18  math family allocation
225 %       19  language allocation
226 %       20  insert allocation
227 %       21  the most recently allocated number
228 %       22  constant -1
229 % \end{oldcomments}
231 % New counters are allocated starting with 23, 24, etc.  Other registers
232 % are allocated starting with 10.  This leaves 0 through 9 for the user
233 % to play with safely, except that counts 0 to 9 are considered to be
234 % the page and subpage numbers (since they are displayed during
235 % output). In this scheme, |\count| 10 always contains the number of the
236 % highest-numbered counter that has been allocated, |\count| 14 the
237 % highest-numbered box, etc. Inserts are given numbers 254, 253, etc.,
238 % since they require a |\count|, |\dimen|, |\skip|, and |\box| all with
239 % the same number; |\count| 20 contains the lowest-numbered insert that
240 % has been allocated. Of course, |\box|255 is reserved for |\output|;
241 % |\count|255, |\dimen|255, and |\skip|255 can be used freely.
243 % It is recommended that macro designers always use
244 % |\global| assignments with respect to registers numbered\\
245 % 1, 3, 5, 7, 9,\\
246 % and always non-|\global| assignments with respect to registers\\
247 % 0, 2, 4, 6, 8, 255.\\
248 % This will prevent ``save stack buildup'' that might otherwise occur.
250 %    \begin{macrocode}
251 \count10=22 % allocates \count registers 23, 24, ...
252 \count11=9 % allocates \dimen registers 10, 11, ...
253 \count12=9 % allocates \skip registers 10, 11, ...
254 \count13=9 % allocates \muskip registers 10, 11, ...
255 \count14=9 % allocates \box registers 10, 11, ...
256 \count15=9 % allocates \toks registers 10, 11, ...
257 \count16=-1 % allocates input streams 0, 1, ...
258 \count17=-1 % allocates output streams 0, 1, ...
259 \count18=3 % allocates math families 4, 5, ...
260 \count19=0 % allocates \language codes 1, 2, ...
261 \count20=255 % allocates insertions 254, 253, ...
262 %    \end{macrocode}
264 % \begin{macro}{\insc@unt}
265 % \begin{macro}{\allocationnumber}
266 % The insertion counter and most recent allocation.
267 %    \begin{macrocode}
268 \countdef\insc@unt=20
269 \countdef\allocationnumber=21
270 %    \end{macrocode}
271 % \end{macro}
272 % \end{macro}
274 % \begin{macro}{\m@ne}
275 % The constant $-1$.
276 %    \begin{macrocode}
277 \countdef\m@ne=22 \m@ne=-1
278 %    \end{macrocode}
279 % \end{macro}
281 % \begin{macro}{\wlog}
282 % Write on log file (only)
283 %    \begin{macrocode}
284 \def\wlog{\immediate\write\m@ne}
285 %    \end{macrocode}
286 % \end{macro}
288 % \begin{macro}{\count@}
289 % \begin{macro}{\dimen@}
290 % \begin{macro}{\dimen@i}
291 % \begin{macro}{\dimen@ii}
292 % \begin{macro}{\skip@}
293 % \begin{macro}{\toks@}
294 % Here are abbreviations for the names of scratch registers
295 % that don't need to be allocated.
296 %    \begin{macrocode}
297 \countdef\count@=255
298 \dimendef\dimen@=0
299 \dimendef\dimen@i=1 % global only
300 \dimendef\dimen@ii=2
301 \skipdef\skip@=0
302 \toksdef\toks@=0
303 %    \end{macrocode}
304 % \end{macro}
305 % \end{macro}
306 % \end{macro}
307 % \end{macro}
308 % \end{macro}
309 % \end{macro}
311 % \begin{macro}{\newcount}
312 % \begin{macro}{\newdimen}
313 % \begin{macro}{\newskip}
314 % \begin{macro}{\newmuskip}
315 % \begin{macro}{\newbox}
316 % \begin{macro}{\newread}
317 % \begin{macro}{\newwrite}
318 % \begin{macro}{\newlanguage}
319 % \changes{v1.0c}{1994/03/28}
320 %         {Remove some \cs{outer} declarations.}
321 % \changes{v1.1h}{1995/04/24}
322 %         {Remove remaining \cs{outer} declarations.}
323 % Now, we define |\newcount|, |\newbox|, etc. so that you can say
324 % |\newcount\foo| and |\foo| will be defined (with |\countdef|) to
325 % be the next counter.
327 % To find out which counter |\foo| is, you can look at
328 % |\allocationnumber|.
330 % Since there's no |\boxdef| command, |\chardef| is used to define a
331 % |\newbox|, |\newinsert|, |\newfam|, and so on.
333 % \LaTeX\ change: remove |\outer| from |\newcount| and |\newdimen| (FMi)
334 %            This is necessary to use |\newcount| inside |\if...|
335 %            later on. Also remove from |\newskip|, |\newbox|
336 %            |\newwrite| and |\newfam| (DPC) to save later redefinition.
337 % \changes{v2.0a}{2014/12/30}{New engine-specific allocation scheme (latexrelease)}
338 % \changes{v2.0f}{2015/03/02}{allow 255 math groups in Unicode engines}
339 % \changes{v2.0h}{2015/06/19}{Use $-1$ for first range to get contiguous allocation}
340 %    \begin{macrocode}
341 %</2ekernel>
342 %<*2ekernel|latexrelease>
343 %<latexrelease>\IncludeInRelease{2015/01/01}%
344 %<latexrelease>                 {\newcount}{Extended Allocation}%
345 %    \end{macrocode}
347 %    \begin{macrocode}
348 \def\newcount {\e@alloc\count \countdef {\count10}\insc@unt\float@count}
349 \def\newdimen {\e@alloc\dimen \dimendef {\count11}\insc@unt\float@count}
350 \def\newskip  {\e@alloc\skip  \skipdef  {\count12}\insc@unt\float@count}
351 \def\newmuskip
352            {\e@alloc\muskip\muskipdef{\count13}\m@ne\e@alloc@top}
353 %    \end{macrocode}
354 % For compatibility use |\chardef| in the classical range.
355 %    \begin{macrocode}
356 \def\newbox   {\e@alloc\box
357                   {\ifnum\allocationnumber<\@cclvi
358                      \expandafter\chardef
359                    \else
360                      \expandafter\e@alloc@chardef
361                    \fi}
362                                         {\count14}\insc@unt\float@count}
363 \def\newtoks  {\e@alloc\toks \toksdef{\count15}\m@ne\e@alloc@top}
364 \def\newread      {\e@alloc\read     \chardef{\count16}\m@ne\sixt@@n}
365 \def\newwrite     {\e@alloc\write    \chardef{\count17}\m@ne\sixt@@n}
366 \def\new@mathgroup
367   {\e@alloc\mathgroup\chardef{\count18}\m@ne\e@mathgroup@top}
368 \def\newlanguage  {\e@alloc\language \chardef{\count19}\m@ne\@cclvi}
369 \let\newfam\new@mathgroup
370 %</2ekernel|latexrelease>
371 %    \end{macrocode}
373 %    \begin{macrocode}
374 %<latexrelease>\EndIncludeInRelease
375 %<latexrelease>\IncludeInRelease{0000/00/00}%
376 %<latexrelease>                 {\newcount}{Extended Allocation}%
377 %<latexrelease>\def\newcount{\alloc@0\count\countdef\insc@unt}
378 %<latexrelease>\def\newdimen{\alloc@1\dimen\dimendef\insc@unt}
379 %<latexrelease>\def\newskip{\alloc@2\skip\skipdef\insc@unt}
380 %<latexrelease>\def\newmuskip{\alloc@3\muskip\muskipdef\@cclvi}
381 %<latexrelease>\def\newbox{\alloc@4\box\chardef\insc@unt}
382 %<latexrelease>\def\newtoks{\alloc@5\toks\toksdef\@cclvi}
383 %<latexrelease>\def\newread{\alloc@6\read\chardef\sixt@@n}
384 %<latexrelease>\def\newwrite{\alloc@7\write\chardef\sixt@@n}
385 %<latexrelease>\def\new@mathgroup{\alloc@8\fam\chardef\sixt@@n}
386 %<latexrelease>\def\newlanguage{\alloc@9\language\chardef\@cclvi}
387 %<latexrelease>\let\newfam\new@mathgroup
388 %<latexrelease>\EndIncludeInRelease
389 %    \end{macrocode}
390 % \end{macro}
391 % \end{macro}
392 % \end{macro}
393 % \end{macro}
394 % \end{macro}
395 % \end{macro}
396 % \end{macro}
397 % \end{macro}
399 %\begin{macro}{\e@alloc@chardef}
400 % \changes{v2.0a}{2014/12/30}{macro added}
401 %\begin{macro}{\e@alloc@top}
402 % \changes{v2.0a}{2014/12/30}{macro added}
403 % The upper limit of  extended registers, which leaves
404 % this number (eg |\dimen32767|) always unallocated
405 % by these macros.
406 % cf traditional |\dimen255|.
407 %    \begin{macrocode}
408 %<*2ekernel|latexrelease>
409 %<latexrelease>\IncludeInRelease{2015/01/01}%
410 %<latexrelease>                 {\e@alloc@chardef}{Extended Allocation}%
411 %    \end{macrocode}
413 %    \begin{macrocode}
414 \ifx\directlua\@undefined
415   \ifx\widowpenalties\@undefined
416 %    \end{macrocode}
417 % classic tex has $2^8$ registers.
418 %    \begin{macrocode}
419     \mathchardef\e@alloc@top=255
420     \let\e@alloc@chardef\chardef
421   \else
422 %    \end{macrocode}
423 % etex and xetex have $2^{15}$ registers.
424 %    \begin{macrocode}
425     \mathchardef\e@alloc@top=32767
426     \let\e@alloc@chardef\mathchardef
427   \fi
428 \else
429 %    \end{macrocode}
430 % luatex has $2^{16}$ registers.
431 %    \begin{macrocode}
432   \chardef\e@alloc@top=65535
433   \let\e@alloc@chardef\chardef
435 %    \end{macrocode}
437 %    \begin{macrocode}
438 %</2ekernel|latexrelease>
439 %<latexrelease>\EndIncludeInRelease
440 %<latexrelease>\IncludeInRelease{0000/00/00}%
441 %<latexrelease>                 {\e@alloc@chardef}{Extended Allocation}%
442 %<latexrelease>\let\e@alloc@top\@undefined
443 %<latexrelease>\let\e@alloc@chardef\@undefined
444 %<latexrelease>\EndIncludeInRelease
445 %    \end{macrocode}
446 % \end{macro}
447 % \end{macro}
449 %\begin{macro}{\e@mathgroup@top}
450 % \changes{v2.0f}{2015/03/02}{macro added}
451 % The upper limit of extended math groups (|\fam|)
452 % 16 in classic \TeX\ and e-\TeX, but 256 in Unicode TeX variants.
453 %    \begin{macrocode}
454 %<*2ekernel|latexrelease>
455 %<latexrelease>\IncludeInRelease{2015/01/01}%
456 %<latexrelease>                 {\e@mathgroup@top}{Extended Allocation}%
457 %    \end{macrocode}
459 %    \begin{macrocode}
460 \ifx\Umathcode\@undefined
461 %    \end{macrocode}
462 % classic and e tex have 16 fam (0--15).
463 %    \begin{macrocode}
464   \chardef\e@mathgroup@top=16
465 \else
466 %    \end{macrocode}
467 % xetex and luatex have 256 fam (0--255).
468 %    \begin{macrocode}
469   \chardef\e@mathgroup@top=256
471 %    \end{macrocode}
473 %    \begin{macrocode}
474 %</2ekernel|latexrelease>
475 %<latexrelease>\EndIncludeInRelease
476 %<latexrelease>\IncludeInRelease{0000/00/00}%
477 %<latexrelease>                 {\e@mathgroup@top}{Extended Allocation}%
478 %<latexrelease>\let\e@mathgroup@top\@undefined
479 %<latexrelease>\EndIncludeInRelease
480 %    \end{macrocode}
481 % \end{macro}
483 % \begin{macro}{\e@alloc}
484 % \changes{v2.0a}{2014/12/30}{macro added}
485 % A modified version of |\alloc@| that
486 % takes the count register rather than just the final digit of its number
487 % (assuming |\count|$1x$).
488 % It also has an extra argument to give the top of the extended range.
490 % |           #1  #2      #3     #4    #5         #6    |
492 % | \e@alloc type defcmd current top extended-top newname|
494 % Note that if just a single allocation range is required
495 % (not omitting a range up to 255 for inserts) then $-1$
496 % should be used for the first upper bound argument, |#4|.
498 %    \begin{macrocode}
499 %<*2ekernel|latexrelease>
500 %<latexrelease>\IncludeInRelease{2015/01/01}{\e@alloc}{Extended Allocation}%
501 %    \end{macrocode}
503 % \changes{v2.0h}{2015/06/19}{extra braces in case arguments not single token}
504 %    \begin{macrocode}
505 \def\e@alloc#1#2#3#4#5#6{%
506   \global\advance#3\@ne
507   \e@ch@ck{#3}{#4}{#5}#1% 
508   \allocationnumber#3\relax
509   \global#2#6\allocationnumber
510   \wlog{\string#6=\string#1\the\allocationnumber}}%
511 %    \end{macrocode}
513 %    \begin{macrocode}
514 %</2ekernel|latexrelease>
515 %<latexrelease>\EndIncludeInRelease
516 %<latexrelease>\IncludeInRelease{0000/00/00}{\e@alloc}{Extended Allocation}%
517 %<latexrelease>\let\e@alloc\@undefined
518 %<latexrelease>\EndIncludeInRelease
519 %<*2ekernel>
520 %    \end{macrocode}
521 % \end{macro}
523 %\begin{macro}{\e@ch@ck}
524 % \changes{v2.0a}{2014/12/30}{macro added}
525 % Extended check command.
526 % If the first range is exceeded, bump to 256 (or 266 for counts)
527 % and try again, testing the extended range.
528 %\begin{macro}{\extrafloats}
529 % \changes{v2.0a}{2014/12/30}{macro added}
530 % \changes{v2.0c}{2015/01/23}{reserve counts 256--265}
531 % Allocate matching registers from the top of the extended range
532 % and add to |\@freelist|.
533 %    \begin{macrocode}
534 %</2ekernel>
535 %<*2ekernel|latexrelease>
536 %<latexrelease>\IncludeInRelease{2015/01/01}{\e@ch@ck}{Extended Allocation}%
537 %    \end{macrocode}
539 %    \begin{macrocode}
540 \gdef\e@ch@ck#1#2#3#4{%
541   \ifnum#1<#2\else
542 %    \end{macrocode}
544 % If we've reached the classical top limit, bump to 256
545 % or 266 for counts (count 256--265 are reserved by the allocation
546 % system).
547 %    \begin{macrocode}
548     \ifnum#1=#2\relax
549       #1\@cclvi
550       \ifx\count#4\advance#1 10 \fi
551     \fi
552 %    \end{macrocode}
553 % Check we are below the extended limit.
554 %    \begin{macrocode}
555     \ifnum#1<#3\relax
556     \else
557       \errmessage{No room for a new #4}%
558     \fi
559   \fi}%
561 %    \end{macrocode}
562 % \end{macro}
564 %    \begin{macrocode}
565 \let\float@count\e@alloc@top
566 %    \end{macrocode}
568 % \begin{macro}{\extrafloats}
569 %    \begin{macrocode}
570 \ifx\numexpr\@undefined
571 %    \end{macrocode}
572 % In classic TeX use |\newinsert| to allocate float boxes.
573 %    \begin{macrocode}
574 \def\extrafloats#1{%
575 \count@#1\relax
576 \ifnum\count@>\z@
577 \newinsert\reserved@a
578 \expandafter\chardef
579             \csname bx@\the\allocationnumber\endcsname\allocationnumber
580 \@cons\@freelist{\csname bx@\the\allocationnumber\endcsname}%
581 \advance\count@\m@ne
582 \expandafter\extrafloats
583 \expandafter\count@
586 %    \end{macrocode}
588 %    \begin{macrocode}
589 \else
590 %    \end{macrocode}
591 % In e-tex take float boxes from the top of the extended range.
592 %    \begin{macrocode}
593 \def\extrafloats#1{%
594 \ifnum#1>\z@
595 \count@\numexpr\float@count-1\relax
596   \ch@ck0\count@\count
597   \ch@ck1\count@\dimen
598   \ch@ck2\count@\skip
599   \ch@ck4\count@\box
600 \e@alloc@chardef\float@count\count@
601 \expandafter\e@alloc@chardef
602             \csname bx@\the\float@count\endcsname\float@count
603 \@cons\@freelist{\csname bx@\the\float@count\endcsname}%
604 \expandafter
605 \extrafloats\expandafter{\numexpr#1-1\relax}%
606 \fi}%
607 %    \end{macrocode}
609 %    \begin{macrocode}
611 %    \end{macrocode}
613 %    \begin{macrocode}
614 %</2ekernel|latexrelease>
615 %<latexrelease>\EndIncludeInRelease
616 %<latexrelease>\IncludeInRelease{0000/00/00}%
617 %<latexrelease>                 {\e@ch@ck}{Extended Allocation}%
618 %<latexrelease>\let\e@ch@ck\@undefined
619 %<latexrelease>\let\float@count\@undefined
620 %<latexrelease>\let\extrafloats\@undefined
621 %<latexrelease>\EndIncludeInRelease
622 %    \end{macrocode}
623 % \end{macro}
624 % \end{macro}
626 % \begin{macro}{\alloc@}
627 %    \begin{macrocode}
628 %<*2ekernel>
629 \def\alloc@#1#2#3#4#5{\global\advance\count1#1\@ne
630   \ch@ck#1#4#2% make sure there's still room
631   \allocationnumber\count1#1%
632   \global#3#5\allocationnumber
633   \wlog{\string#5=\string#2\the\allocationnumber}}
634 %    \end{macrocode}
635 % \end{macro}
637 % \begin{macro}{\newinsert}
638 %    \begin{macrocode}
639 \def\newinsert#1{\global\advance\insc@unt \m@ne
640   \ch@ck0\insc@unt\count
641   \ch@ck1\insc@unt\dimen
642   \ch@ck2\insc@unt\skip
643   \ch@ck4\insc@unt\box
644   \allocationnumber\insc@unt
645   \global\chardef#1\allocationnumber
646   \wlog{\string#1=\string\insert\the\allocationnumber}}
647 %    \end{macrocode}
648 % \end{macro}
650 % \begin{macro}{\ch@ck}
651 %    \begin{macrocode}
652 \gdef\ch@ck#1#2#3{%
653   \ifnum\count1#1<#2\else
654     \errmessage{No room for a new #3}%
655   \fi}
656 %    \end{macrocode}
657 % \end{macro}
659 % \changes{v2.0h}{2015/06/19}{delete spurious old definition of \cs{newtoks}}
660 % \begin{macro}{\newhelp}
661 %    \begin{macrocode}
662 \def\newhelp#1#2{\newtoks#1#1\expandafter{\csname#2\endcsname}}
663 %    \end{macrocode}
664 % \end{macro}
666 % \begin{macro}{\maxdimen}
667 % \begin{macro}{\hideskip}
668 % Here are some examples of allocation.
669 %    \begin{macrocode}
670 \newdimen\maxdimen \maxdimen=16383.99999pt % the largest legal <dimen>
671 \newskip\hideskip \hideskip=-1000pt plus 1fill % negative but can grow
672 %    \end{macrocode}
673 % \end{macro}
674 % \end{macro}
676 % \begin{macro}{\p@}
677 % \begin{macro}{\z@}
678 % \begin{macro}{\z@skip}
679 % \begin{macro}{\voidb@x}
680 %    \begin{macrocode}
681 \newdimen\p@ \p@=1pt % this saves macro space and time
682 \newdimen\z@ \z@=0pt % can be used both for 0pt and 0
683 \newskip\z@skip \z@skip=0pt plus0pt minus0pt
684 \newbox\voidb@x % permanently void box register
685 %    \end{macrocode}
686 % \end{macro}
687 % \end{macro}
688 % \end{macro}
689 % \end{macro}
691 %  \changes{v1.1p}{1995/10/02}{Move \cs{newif} to ltdefns}
693 %    \begin{macrocode}
694 \message{compatibility for TeX 2, }
695 %    \end{macrocode}
697 % If this file is used in an old \TeX\ we define the new features
698 % of \TeX\ 3.0 as simple macros or counters so that files that uses
699 % these features can be processed in such an environment
700 % (They will however produce some other results).
702 %    \begin{macrocode}
703 \ifx\@undefined\inputlineno
704   \newcount\inputlineno
705 %    \end{macrocode}
706 % This could be used to detect that an old \TeX\ is in force
707 %    \begin{macrocode}
708   \inputlineno-1
709 %    \end{macrocode}
710 % Extra test for MLTeX 2, RmS 91/11/07.
711 %    \begin{macrocode}
712   \ifx\@undefined\language
713     \newcount\language
714   \fi
715   \newcount\lefthyphenmin
716   \newcount\righthyphenmin
717   \newcount\errorcontextlines
718   \newcount\holdinginserts
719   \newdimen\emergencystretch
720   \newcount\badness
721   \let\noboundary\relax
722   \newcount\setlanguage
724 %    \end{macrocode}
726 % Assign initial values to \TeX's parameters
728 %    \begin{macrocode}
729 \message{parameters,}
730 %    \end{macrocode}
732 % All of \TeX's numeric parameters are listed here,
733 % but the code is commented out if no special value needs to be set.
734 % INITEX makes all parameters zero except where noted.
736 % \begin{oldcomments}
737 %    \begin{macrocode}
738 \pretolerance=100
739 \tolerance=200 % INITEX sets this to 10000
740 \hbadness=1000
741 \vbadness=1000
742 \linepenalty=10
743 \hyphenpenalty=50
744 \exhyphenpenalty=50
745 \binoppenalty=700
746 \relpenalty=500
747 \clubpenalty=150
748 \widowpenalty=150
749 \displaywidowpenalty=50
750 \brokenpenalty=100
751 \predisplaypenalty=10000
752 %    \end{macrocode}
753 % \postdisplaypenalty=0
754 % \interlinepenalty=0
755 % \floatingpenalty=0, set during \insert
756 % \outputpenalty=0, set before TeX enters \output
757 %    \begin{macrocode}
758 \doublehyphendemerits=10000
759 \finalhyphendemerits=5000
760 \adjdemerits=10000
761 %    \end{macrocode}
762 % \looseness=0, cleared by TeX after each paragraph
763 % \pausing=0
764 % \holdinginserts=0
765 % \tracingonline=0
766 % \tracingmacros=0
767 % \tracingstats=0
768 % \tracingparagraphs=0
769 % \tracingpages=0
770 % \tracingoutput=0
771 %    \begin{macrocode}
772 \tracinglostchars=1
773 %    \end{macrocode}
774 % \tracingcommands=0
775 % \tracingrestores=0
776 % \language=0
777 %    \begin{macrocode}
778 \uchyph=1
779 %    \end{macrocode}
780 % \lefthyphenmin=2 \righthyphenmin=3 set below
781 % \globaldefs=0
782 % \maxdeadcycles=25 % INITEX does this
783 % \hangafter=1 % INITEX does this, also TeX after each paragraph
784 % \fam=0
785 % \mag=1000 % INITEX does this
786 % \escapechar=`\\ % INITEX does this
787 %    \begin{macrocode}
788 \defaulthyphenchar=`\-
789 \defaultskewchar=-1
790 %    \end{macrocode}
791 % \endlinechar=`\^^M % INITEX does this
792 % \newlinechar=-1     \LaTeX\ sets this in ltdefns.dtx.
793 %    \begin{macrocode}
794 \delimiterfactor=901
795 %    \end{macrocode}
796 % \time=now % TeX does this at beginning of job
797 % \day=now % TeX does this at beginning of job
798 % \month=now % TeX does this at beginning of job
799 % \year=now % TeX does this at beginning of job
801 % \end{oldcomments}
802 %    In \LaTeX{} we don't want box information in the transcript
803 %    unless we do a full tracing.
804 %  \changes{v1.0g}{1994/04/28}{Turn off overfull box tracing in log}
806 %    \begin{macrocode}
807 \showboxbreadth=-1
808 \showboxdepth=-1
809 \errorcontextlines=-1
810 %    \end{macrocode}
812 %    \begin{macrocode}
813 \hfuzz=0.1pt
814 \vfuzz=0.1pt
815 \overfullrule=5pt
816 \maxdepth=4pt
817 \splitmaxdepth=\maxdimen
818 \boxmaxdepth=\maxdimen
819 %    \end{macrocode}
821 % \begin{oldcomments}
822 % \lineskiplimit=0pt, changed by \normalbaselines
823 %    \begin{macrocode}
824 \delimitershortfall=5pt
825 \nulldelimiterspace=1.2pt
826 \scriptspace=0.5pt
827 %    \end{macrocode}
828 % \mathsurround=0pt
829 % \predisplaysize=0pt, set before TeX enters $$
830 % \displaywidth=0pt, set before TeX enters $$
831 % \displayindent=0pt, set before TeX enters $$
832 %    \begin{macrocode}
833 \parindent=20pt
834 %    \end{macrocode}
835 % \hangindent=0pt, zeroed by TeX after each paragraph
836 % \hoffset=0pt
837 % \voffset=0pt
839 % \baselineskip=0pt, changed by \normalbaselines
840 % \lineskip=0pt, changed by \normalbaselines
841 %    \begin{macrocode}
842 \parskip=0pt plus 1pt
843 \abovedisplayskip=12pt plus 3pt minus 9pt
844 \abovedisplayshortskip=0pt plus 3pt
845 \belowdisplayskip=12pt plus 3pt minus 9pt
846 \belowdisplayshortskip=7pt plus 3pt minus 4pt
847 %    \end{macrocode}
848 % \leftskip=0pt
849 % \rightskip=0pt
850 %    \begin{macrocode}
851 \topskip=10pt
852 \splittopskip=10pt
853 %    \end{macrocode}
854 % \tabskip=0pt
855 % \spaceskip=0pt
856 % \xspaceskip=0pt
857 %    \begin{macrocode}
858 \parfillskip=0pt plus 1fil
859 %    \end{macrocode}
860 % \end{oldcomments}
863 % \begin{macro}{\normalbaselineskip}
864 % \begin{macro}{\normallineskip}
865 % \begin{macro}{\normallineskiplimit}
866 % We also define special registers that function like parameters:
867 %    \begin{macrocode}
868 \newskip\normalbaselineskip \normalbaselineskip=12pt
869 \newskip\normallineskip \normallineskip=1pt
870 \newdimen\normallineskiplimit \normallineskiplimit=0pt
871 %    \end{macrocode}
872 % \end{macro}
873 % \end{macro}
874 % \end{macro}
876 % \begin{macro}{\interfootlinepenalty}
877 %    \begin{macrocode}
878 \newcount\interfootnotelinepenalty \interfootnotelinepenalty=100
879 %    \end{macrocode}
880 % \end{macro}
882 % Definitions for preloaded fonts
884 % \begin{macro}{\magstephalf}
885 % \begin{macro}{\magstep}
886 %    \begin{macrocode}
887 \def\magstephalf{1095 }
888 \def\magstep#1{\ifcase#1 \@m\or 1200\or 1440\or 1728\or
889                2074\or 2488\fi\relax}
890 %    \end{macrocode}
891 % \end{macro}
892 % \end{macro}
895 % Macros for setting ordinary text
897 % \begin{macro}{\frenchspacing}
898 % \begin{macro}{\nonfrenchspacing}
899 %    \begin{macrocode}
900 \def\frenchspacing{\sfcode`\.\@m \sfcode`\?\@m \sfcode`\!\@m
901   \sfcode`\:\@m \sfcode`\;\@m \sfcode`\,\@m}
902 \def\nonfrenchspacing{\sfcode`\.3000\sfcode`\?3000\sfcode`\!3000%
903   \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 }
904 %    \end{macrocode}
905 % \end{macro}
906 % \end{macro}
908 % \begin{macro}{\normalbaselines}
909 %    \begin{macrocode}
910 \def\normalbaselines{\lineskip\normallineskip
911   \baselineskip\normalbaselineskip \lineskiplimit\normallineskiplimit}
912 %    \end{macrocode}
913 % \end{macro}
915 % \begin{macro}{\M}
916 % \begin{macro}{\I}
917 % \changes{v1.1m}{1995/09/01}{Use \cs{let} to save space}
918 % Save a bit of space by using |\let| here.
919 %    \begin{macrocode}
920 \def\^^M{\ } % control <return> = control <space>
921 \let\^^I\^^M % same for <tab>
922 %    \end{macrocode}
923 % \end{macro}
924 % \end{macro}
926 % \begin{macro}{\lq}
927 % \begin{macro}{\rq}
928 %    \begin{macrocode}
929 \def\lq{`}
930 \def\rq{'}
931 %    \end{macrocode}
932 % \end{macro}
933 % \end{macro}
935 % \begin{macro}{\lbrack}
936 % \begin{macro}{\rbrack}
937 %    \begin{macrocode}
938 \def\lbrack{[}
939 \def\rbrack{]}
940 %    \end{macrocode}
941 % \end{macro}
942 % \end{macro}
944 % \begin{macro}{\aa}
945 % \begin{macro}{\AA}
946 % These are not from plain.tex but they are similar to other commands
947 % found here and nowhere else, being alternate input forms for
948 % characters.
949 %    \begin{macrocode}
950 \def \aa {\r a}
951 \def \AA {\r A}
952 %    \end{macrocode}
953 % \end{macro}
954 % \end{macro}
956 % \begin{macro}{\endgraf}
957 % \begin{macro}{\endline}
958 %    \begin{macrocode}
959 \let\endgraf=\par
960 \let\endline=\cr
961 %    \end{macrocode}
962 % \end{macro}
963 % \end{macro}
965 % \begin{macro}{\space}
966 %    \begin{macrocode}
967 \def\space{ }
968 %    \end{macrocode}
969 % \end{macro}
971 % \begin{macro}{\empty}
972 % \changes{v1.1m}{1995/09/01}{Use \cs{let} to save space}
973 % This probably ought to go altogether, but let it to the \LaTeX\
974 % version to save space.
975 %    \begin{macrocode}
976 \let\empty\@empty
977 %    \end{macrocode}
978 % \end{macro}
980 % \begin{macro}{\null}
981 %    \begin{macrocode}
982 \def\null{\hbox{}}
983 %    \end{macrocode}
984 % \end{macro}
986 % \begin{macro}{\bgroup}
987 % \begin{macro}{\egroup}
988 %    \begin{macrocode}
989 \let\bgroup={
990 \let\egroup=}
991 %    \end{macrocode}
992 % \end{macro}
993 % \end{macro}
995 % \begin{macro}{\obeylines}
996 % \begin{macro}{\obeyspaces}
997 % In |\obeylines|, we say |\let^^M=\par| instead of |\def^^M{\par}|
998 % since this allows, for example, |\let\par=\cr \obeylines \halign{...|
999 %    \begin{macrocode}
1000 {\catcode`\^^M=\active % these lines must end with %
1001   \gdef\obeylines{\catcode`\^^M\active \let^^M\par}%
1002   \global\let^^M\par} % this is in case ^^M appears in a \write
1003 \def\obeyspaces{\catcode`\ \active}
1004 {\obeyspaces\global\let =\space}
1005 %    \end{macrocode}
1006 % \end{macro}
1007 % \end{macro}
1009 %  \begin{macro}{\loop}
1010 % \changes{v1.0h}{1994/05/16}{Use Kabelschacht method}
1011 %  \begin{macro}{\iterate}
1012 % \changes{v1.1b}{1994/11/10}
1013 %         {(CAR) added extra \cs{relax}}
1014 % \changes{v1.1m}{1994/05/26}
1015 %         {(CAR) added \cs{long}}
1016 %  \begin{macro}{\repeat}
1017 %    We use Kabelschacht's method of doing loops, see TUB 8\#2 (1987).
1018 %    (unless that breaks something :-).  It turned out to need an
1019 %    extra |\relax|: see pr/642 (|\loop| could do one iteration too much
1020 %    in certain cases).
1021 %    \begin{macrocode}
1022 \long\def \loop #1\repeat{%
1023   \def\iterate{#1\relax  % Extra \relax
1024                \expandafter\iterate\fi
1025                }%
1026   \iterate
1027   \let\iterate\relax
1029 %    \end{macrocode}
1030 %    This setting of |\repeat| is needed to make |\loop...\if...\repeat|
1031 %    skippable within another |\if...|.
1032 %    \begin{macrocode}
1033 \let\repeat=\fi
1034 %    \end{macrocode}
1035 %  \end{macro}
1036 %  \end{macro}
1037 %  \end{macro}
1039 % \LaTeX\ defines |\smallskip|, etc.\ in |ltspace.dtx|.
1041 % \begin{macro}{\nointerlineskip}
1042 % \begin{macro}{\offinterlineskip}
1043 % \changes{v1.1n}{1995/07/02}{Replaced 1000 by \cs{@m}}
1044 %    \begin{macrocode}
1045 \def\nointerlineskip{\prevdepth-\@m\p@}
1046 \def\offinterlineskip{\baselineskip-\@m\p@
1047   \lineskip\z@ \lineskiplimit\maxdimen}
1048 %    \end{macrocode}
1049 %  \end{macro}
1050 %  \end{macro}
1052 % \begin{macro}{\vglue}
1053 % \begin{macro}{\hglue}
1054 %    \begin{macrocode}
1055 \def\vglue{\afterassignment\vgl@\skip@=}
1056 \def\vgl@{\par \dimen@\prevdepth \hrule \@height\z@
1057   \nobreak\vskip\skip@ \prevdepth\dimen@}
1058 \def\hglue{\afterassignment\hgl@\skip@=}
1059 \def\hgl@{\leavevmode \count@\spacefactor \vrule \@width\z@
1060   \nobreak\hskip\skip@ \spacefactor\count@}
1061 %    \end{macrocode}
1062 %  \end{macro}
1063 %  \end{macro}
1065 % \LaTeX\ defines |~| in |ltdefns.dtx|.
1067 % \begin{macro}{\slash}
1068 %    \begin{macrocode}
1069 \def\slash{/\penalty\exhyphenpenalty} % a `/' that acts like a `-'
1070 %    \end{macrocode}
1071 %  \end{macro}
1073 % \begin{macro}{\break}
1074 % \begin{macro}{\nobreak}
1075 % \begin{macro}{\allowbreak}
1076 %    \begin{macrocode}
1077 \def\break{\penalty-\@M}
1078 \def\nobreak{\penalty \@M}
1079 \def\allowbreak{\penalty \z@}
1080 %    \end{macrocode}
1081 %  \end{macro}
1082 %  \end{macro}
1083 %  \end{macro}
1085 % \begin{macro}{\filbreak}
1086 % \begin{macro}{\goodbreak}
1087 %    \begin{macrocode}
1088 \def\filbreak{\par\vfil\penalty-200\vfilneg}
1089 \def\goodbreak{\par\penalty-500 }
1090 %    \end{macrocode}
1091 %  \end{macro}
1092 %  \end{macro}
1094 % \begin{macro}{\eject}
1095 % \changes{v1.1s}{1995/10/17}{Move \cs{supereject} to compat file}
1096 % Define |\eject| as in plain \TeX\ but define |\supereject| only in
1097 % the compatibility file.
1098 %    \begin{macrocode}
1099 \def\eject{\par\break}
1100 %    \end{macrocode}
1101 %  \end{macro}
1103 % \begin{macro}{\removelastskip}
1104 %    \begin{macrocode}
1105 \def\removelastskip{\ifdim\lastskip=\z@\else\vskip-\lastskip\fi}
1106 %    \end{macrocode}
1107 %  \end{macro}
1109 % \begin{macro}{\smallbreak}
1110 % \begin{macro}{\medbreak}
1111 % \begin{macro}{\bigbreak}
1112 %    \begin{macrocode}
1113 \def\smallbreak{\par\ifdim\lastskip<\smallskipamount
1114   \removelastskip\penalty-50\smallskip\fi}
1115 \def\medbreak{\par\ifdim\lastskip<\medskipamount
1116   \removelastskip\penalty-100\medskip\fi}
1117 \def\bigbreak{\par\ifdim\lastskip<\bigskipamount
1118   \removelastskip\penalty-200\bigskip\fi}
1119 %    \end{macrocode}
1120 %  \end{macro}
1121 %  \end{macro}
1122 %  \end{macro}
1124 % \begin{macro}{\m@th}
1125 % \changes{v1.0h}{1994/05/16}{Remove unnecessary space}
1126 %    \begin{macrocode}
1127 \def\m@th{\mathsurround\z@}
1128 %    \end{macrocode}
1129 %  \end{macro}
1131 % \begin{macro}{\underbar}
1132 %    Due to \LaTeX's redefinition of |\underline| plain \TeX's
1133 %    |\underbar| can be done in a simpler fashion (but do we
1134 %    need it at all?).
1135 % \changes{v1.1m}{1994/05/26}
1136 %         {(CAR/FMi) changed to use box \cs{tw@}}
1137 % \changes{v1.1p}{1994/05/26}
1138 %         {(DPC) changed to use \cs{sbox}}
1139 %    \begin{macrocode}
1140 \def\underbar#1{\underline{\sbox\tw@{#1}\dp\tw@\z@\box\tw@}}
1141 %    \end{macrocode}
1142 %  \end{macro}
1144 % \begin{macro}{\strutbox}
1145 % \begin{macro}{\strut}
1146 % \LaTeX\ sets |\strutbox| in |\set@fontsize|.
1147 %    \begin{macrocode}
1148 \newbox\strutbox
1149 \def\strut{\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi}
1150 %    \end{macrocode}
1151 %  \end{macro}
1152 %  \end{macro}
1154 % \begin{macro}{\hidewidth}
1155 % For alignment entries that can stick out.
1156 %    \begin{macrocode}
1157 \def\hidewidth{\hskip\hideskip}
1158 %    \end{macrocode}
1159 %  \end{macro}
1161 % \changes{v1.0h}{1994/05/16}{Remove unnecessary def for \cs{item}}
1162 % \changes{v1.1i}{1995/04/27}
1163 %   {Move \cs{hang} and \cs{textindent} to latex209.def}
1164 % \changes{RmS}{1991/11/04}{Removed \cs{itemitem} since never
1165 %    needed/useful with \LaTeX.}
1167 % \begin{macro}{\narrower}
1168 %    \begin{macrocode}
1169 \def\narrower{%
1170   \advance\leftskip\parindent
1171   \advance\rightskip\parindent}
1172 %    \end{macrocode}
1173 %  \end{macro}
1175 % \changes{v1.1c}{1994/11/12}{Comment out more encoding specific
1176 %                             commands}
1177 % \LaTeX\ defines |\ae| and similar commands elsewhere.
1179 %    \begin{macrocode}
1180 \chardef\%=`\%
1181 \chardef\&=`\&
1182 \chardef\#=`\#
1183 %    \end{macrocode}
1185 % Most text commands are actually encoding specific and therefore
1186 % defined later, so commented out or removed from this file.
1187 % \changes{v1.0h}{1994/05/16}{Comment out encoding specific commands}
1189 % \begin{macro}{\leavevmode}
1190 % begins a paragraph, if necessary
1191 %    \begin{macrocode}
1192 \def\leavevmode{\unhbox\voidb@x}
1193 %    \end{macrocode}
1194 %  \end{macro}
1196 % \begin{macro}{\mathhexbox}
1197 %    \begin{macrocode}
1198 \def\mathhexbox#1#2#3{\mbox{$\m@th \mathchar"#1#2#3$}}
1199 %    \end{macrocode}
1200 %  \end{macro}
1203 % \begin{macro}{\ialign}
1204 %    \begin{macrocode}
1205 \def\ialign{\everycr{}\tabskip\z@skip\halign} % initialized \halign
1206 %    \end{macrocode}
1207 %  \end{macro}
1209 % \begin{macro}{\oalign}
1210 % \begin{macro}{\o@lign}
1211 % \begin{macro}{\ooalign}
1212 %    \begin{macrocode}
1213 \def\oalign#1{\leavevmode\vtop{\baselineskip\z@skip \lineskip.25ex%
1214   \ialign{##\crcr#1\crcr}}}
1215 \def\o@lign{\lineskiplimit\z@ \oalign}
1216 \def\ooalign{\lineskiplimit-\maxdimen \oalign}
1217 %    \end{macrocode}
1218 %  \end{macro}
1219 %  \end{macro}
1220 %  \end{macro}
1222 % \begin{macro}{\sh@ft}
1223 % \changes{v1.1t}{1996/07/26}{replace \cs{dimen}\cs{z@} by
1224 %          \cs{dimen@}}
1225 % \changes{v1.1y}{2005/09/27}{Macro no longer used but
1226 %   left for compatibility}
1227 % The definition of this macro in plain.tex was improved in
1228 % about 1997; but as a result its usage was changed and its new
1229 % definition is not appropriate for \LaTeX{}.
1231 % Since the version given here has been in use by
1232 % \LaTeX{} for many years it does not seem prudent to remove it now.
1233 % As far as we can tell it has only been used to define~|\b| and~|\d|
1234 % but this cannot be certain.
1235 %    \begin{macrocode}
1236 \def\sh@ft#1{\dimen@.00#1ex\multiply\dimen@\fontdimen1\font
1237   \kern-.0156\dimen@} % compensate for slant in lowered accents
1238 %    \end{macrocode}
1239 %  \end{macro}
1241 % \begin{macro}{\ltx@sh@ft}
1242 % \changes{v1.1y}{2005/09/27}{New macro}
1243 % This is the \LaTeX{} version of the second incarnation of the plain
1244 % macro |\sh@ft|, which takes a dimension as its argument.  It shifts
1245 % a pseudo-accent horizontally by an amount proportional to the product
1246 % of its argument and the slant-per-point (fontdimen 1).
1248 %    \begin{macrocode}
1249 \def\ltx@sh@ft #1{%
1250   \dimen@ #1%
1251   \kern \strip@pt
1252     \fontdimen1\font \dimen@
1253   } % kern by #1 times the current slant
1254 %    \end{macrocode}
1255 %  \end{macro}
1259 % \LaTeX{} change: the text commands such as
1260 % |\d|, |\b|, |\c|, |\copyright|,~|\TeX|
1261 % are now defined elsewhere.
1263 % \changes{LaTeX2e}
1264 %     {1993/11/29}{All accents in decimals; suggested by Paul Taylor}
1265 % \changes{v1.0d}{1994/04/12}
1266 %         {Define \cs{@acci}}
1267 % \changes{v1.0h}{1994/05/16}{Remove \cs{@acci} and friends again}
1269 % \LaTeX{} change: Make |\t| work in a moving argument.
1270 % Now defined elsewhere.
1272 % \begin{macro}{\hrulefill}
1273 % \begin{macro}{\dotfill}
1274 % \LaTeX\ change: |\kern\z@| added to end of
1275 % |\hrulefill| and |\dotfill|
1276 % to make them work in `tabular' and `array' environments.
1277 % (Change made 24 July 1987).
1278 % \LaTeX\ change: |\leavevmode| added at beginning of
1279 % |\dotfill| and |\hrulefill|
1280 % so that they work as expected in vertical mode.
1281 %    \begin{macrocode}
1282 \def\hrulefill{\leavevmode\leaders\hrule\hfill\kern\z@}
1283 %    \end{macrocode}
1284 % The box in |\dotfill| originally contained (in plain.tex):\\
1285 % |\mkern 1.5mu .\mkern 1.5mu|;\\
1286 % the width of .44em differs from this
1287 % by .04pt which is probably an acceptable difference within leaders.
1288 % \changes{v1.1u}{1996/10/28}{Removed math mode}
1289 % \changes{v1.1v}{1996/10/29}{Got arithmetic correct (CAR)}
1290 % \changes{v1.1w}{1996/11/03}{Saved tokens by using \cs{hb@xt@}}
1291 %    \begin{macrocode}
1292 \def\dotfill{%
1293   \leavevmode
1294   \cleaders \hb@xt@ .44em{\hss.\hss}\hfill
1295   \kern\z@}
1296 %    \end{macrocode}
1297 %  \end{macro}
1298 %  \end{macro}
1300 % INITEX sets |\sfcode x=1000| for all x, except that |\sfcode`X=999|
1301 % for uppercase letters. The following changes are needed:
1302 %    \begin{macrocode}
1303 \sfcode`\)=0 \sfcode`\'=0 \sfcode`\]=0
1304 %    \end{macrocode}
1305 % The |\nonfrenchspacing| macro will make further changes to
1306 % |\sfcode| values.
1309 % Definitions related to output
1312 % \changes{v1.1k}{1995/05/22}{Definitions of \cs{footins} and
1313 %                 \cs{footnoterule} moved to ltfloat.}
1316 % |\magnification| doesn't work in \LaTeX.
1317 %\begin{verbatim}
1318 %\def\magnification{\afterassignment\m@g\count@}
1319 %\def\m@g{\mag\count@
1320 %  \hsize6.5truein\vsize8.9truein\dimen\footins8truein}
1321 %\end{verbatim}
1323 % \begin{macro}{\showoverfull}
1324 % \changes{v0.1k ltfinal}{1994/05/19}{used \cs{@ne} not 1}
1325 % The following commands are used in debugging:
1326 %    \begin{macrocode}
1327 \def\showoverfull{\tracingonline\@ne}
1328 %    \end{macrocode}
1329 % \end{macro}
1331 % \begin{macro}{\showoutput}
1332 % \changes{v0.1k ltfinal}{1994/05/19}
1333 %         {used \cs{maxdimen} not 99999}
1334 % \changes{v1.1n}{1995/07/02}{Use \cs{showoverfull} to save space}
1335 % \changes{v1.1x}{2002/02/24}{Use newly added \cs{loggingoutput}}
1336 % \begin{macro}{\loggingoutput}
1337 % \changes{v1.1x}{2002/02/24}{Macro added}
1338 %    \begin{macrocode}
1339 \gdef\loggingoutput{\tracingoutput\@ne
1340     \showboxbreadth\maxdimen\showboxdepth\maxdimen\errorstopmode}
1341 \gdef\showoutput{\loggingoutput\showoverfull}
1342 %</2ekernel>
1343 %    \end{macrocode}
1344 % \end{macro}
1345 % \end{macro}
1348 % \begin{macro}{\tracingall}
1349 % \changes{LaTeX209}{1991/08/26}{Added
1350 %    \cs{errorcontextlines}!=\cs{maxdimen}, suggested by J. Schrod}
1351 % \changes{v1.1n}{1995/07/02}{Use \cs{showoutput} to save space}
1352 % \changes{v1.1x}{2002/02/24}{Use newly added \cs{loggingoutput}}
1353 % \begin{macro}{\loggingall}
1354 % \changes{v1.1x}{2002/02/24}{Macro added}
1355 % \changes{v2.0b}{2012/01/20}{etex tracing if available}
1356 % \changes{v2.0d}{2015/02/20}{Spell commands correctly :-)}
1357 % \changes{v2.0g}{2015/03/10}{Reorganise to be less noisy}
1358 %    \begin{macrocode}
1359 %<latexrelease>\IncludeInRelease{2015/01/20}{\loggingall}{etex tracing}%
1360 %<*2ekernel|latexrelease>
1361 \ifx\tracingscantokens\@undefined
1362 \gdef\loggingall{%
1363   \tracingstats\tw@
1364   \tracingpages\@ne
1365   \tracinglostchars\@ne
1366   \tracingparagraphs\@ne
1367   \errorcontextlines\maxdimen
1368   \loggingoutput
1369   \tracingmacros\tw@
1370   \tracingcommands\tw@
1371   \tracingrestores\@ne
1372   }%
1373 \else
1374 \gdef\loggingall{%
1375   \tracingstats\tw@
1376   \tracingpages\@ne
1377   \tracinglostchars\tw@
1378   \tracingparagraphs\@ne
1379   \tracinggroups\@ne
1380   \tracingifs\@ne
1381   \tracingscantokens\@ne
1382   \tracingnesting\@ne
1383   \errorcontextlines\maxdimen
1384   \loggingoutput
1385   \tracingmacros\tw@
1386   \tracingcommands\thr@@
1387   \tracingrestores\@ne
1388   \tracingassigns\@ne
1391 \gdef\tracingall{\showoverfull\loggingall}
1392 %</2ekernel|latexrelease>
1393 %<latexrelease>\EndIncludeInRelease
1394 %<latexrelease>\IncludeInRelease{0000/00/00}{\loggingall}{etex tracing}%
1395 %<latexrelease>\gdef\loggingall{\tracingcommands\tw@\tracingstats\tw@
1396 %<latexrelease>  \tracingpages\@ne\tracinglostchars\@ne
1397 %<latexrelease>  \tracingmacros\tw@\tracingparagraphs\@ne\tracingrestores\@ne
1398 %<latexrelease>  \errorcontextlines\maxdimen\loggingoutput}
1399 %<latexrelease>  \gdef\tracingall{\loggingall\showoverfull}
1400 %<latexrelease>\EndIncludeInRelease
1401 %    \end{macrocode}
1402 % \end{macro}
1403 % \end{macro}
1406 % \begin{macro}{\tracingnone}
1407 % \changes{v2.0g}{2015/03/10}{macro added}
1408 % \begin{macro}{\hideoutput}
1409 % \changes{v2.0g}{2015/03/10}{macro added}
1410 %    \begin{macrocode}
1411 %<latexrelease>\IncludeInRelease{2015/01/20}{\tracingnone}%
1412 %<latexrelease>                             {turn off etex tracing}%
1413 %<*2ekernel|latexrelease>
1414 \ifx\tracingscantokens\@undefined
1415 \def\tracingnone{%
1416   \tracingonline\z@
1417   \tracingcommands\z@
1418   \showboxdepth\m@ne
1419   \showboxbreadth\m@ne
1420   \tracingoutput\z@
1421   \errorcontextlines\m@ne
1422   \tracingrestores\z@
1423   \tracingparagraphs\z@
1424   \tracingmacros\z@
1425   \tracinglostchars\@ne
1426   \tracingpages\z@
1427   \tracingstats\z@
1429 \else
1430 \def\tracingnone{%
1431   \tracingassigns\z@
1432   \tracingrestores\z@
1433   \tracingonline\z@
1434   \tracingcommands\z@
1435   \showboxdepth\m@ne
1436   \showboxbreadth\m@ne
1437   \tracingoutput\z@
1438   \errorcontextlines\m@ne
1439   \tracingnesting\z@
1440   \tracingscantokens\z@
1441   \tracingifs\z@
1442   \tracinggroups\z@
1443   \tracingparagraphs\z@
1444   \tracingmacros\z@
1445   \tracinglostchars\@ne
1446   \tracingpages\z@
1447   \tracingstats\z@
1450 %    \end{macrocode}
1452 %    \begin{macrocode}
1453 \def\hideoutput{%
1454   \tracingoutput\z@
1455   \showboxbreadth\m@ne
1456   \showboxdepth\m@ne
1457   \tracingonline\m@ne
1459 %    \end{macrocode}
1461 %    \begin{macrocode}
1462 %</2ekernel|latexrelease>
1463 %<latexrelease>\EndIncludeInRelease
1464 %<latexrelease>\IncludeInRelease{0000/00/00}{\tracingnone}%
1465 %<latexrelease>                             {turn off etex tracing}%
1466 %<latexrelease>\let\tracingnone\@undefined
1467 %<latexrelease>\let\hideoutput\@undefined
1468 %<latexrelease>\EndIncludeInRelease
1469 %    \end{macrocode}
1470 % \end{macro}
1471 % \end{macro}
1474 % \LaTeX\ change: |\showhyphens| Defined later.
1476 % Punctuation affects the spacing.
1477 %    \begin{macrocode}
1478 %<*2ekernel>
1479 \nonfrenchspacing
1480 %</2ekernel>
1481 %    \end{macrocode}
1484 % \Finale