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