summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/base/ltplain.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/base/ltplain.dtx')
-rw-r--r--Master/texmf-dist/source/latex/base/ltplain.dtx1112
1 files changed, 1112 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/base/ltplain.dtx b/Master/texmf-dist/source/latex/base/ltplain.dtx
new file mode 100644
index 00000000000..0b172df540b
--- /dev/null
+++ b/Master/texmf-dist/source/latex/base/ltplain.dtx
@@ -0,0 +1,1112 @@
+% \iffalse meta-comment
+%
+% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004
+% The LaTeX3 Project and any individual authors listed elsewhere
+% in this file.
+%
+% This file is part of the LaTeX base system.
+% -------------------------------------------
+%
+% It may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This file has the LPPL maintenance status "maintained".
+%
+% The list of all files belonging to the LaTeX base distribution is
+% given in the file `manifest.txt'. See also `legal.txt' for additional
+% information.
+%
+% The list of derived (unpacked) files belonging to the distribution
+% and covered by LPPL is defined by the unpacking scripts (with
+% extension .ins) which are part of the distribution.
+%
+% \fi
+% \iffalse
+%%% From File: ltplain.dtx
+%
+%<*driver>
+% \fi
+\ProvidesFile{ltplain.dtx}
+ [2004/02/24 v1.1x LaTeX Kernel (Plain TeX)]
+% \iffalse
+\documentclass{ltxdoc}
+\GetFileInfo{ltplain.dtx}
+\begin{document}
+\title{\filename\\(The file plain.tex, modified for \LaTeX)}
+\author{Donald~E.~Knuth\\
+ Modified by
+ Leslie Lamport, Frank Mittelbach,\\
+ Rainer Sch\"opf, David Carlisle}
+\date{\filedate}
+\maketitle
+ \DocInput{\filename}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{756}
+%
+% \changes{v1.0a}{1994/03/08}
+% {Remove need for a driver file.}
+% \changes{v1.0b}{1994/03/12}
+% {Name changed from lplain. The end of an era}
+% \changes{v1.0e}{1994/03/12}{Replaced remaining width, height, depth
+% by \LaTeX{} macro names to save tokens.}
+% \changes{v1.1a}{1994/10/14}
+% {Moved code to other files.}
+% \changes{v1.1b}{1994/11/10}
+% {(CAR) added patch to \cs{loop}.}
+% \changes{v1.1f}{1994/11/25}
+% {(DPC) Comment out lots of obsolete code}
+% \changes{v1.1g}{1994/12/01}
+% {(DPC) More doc changes}
+% \changes{v1.1j}{1995/05/07}{Use \cs{hb@xt@}}
+% \changes{v1.1j}{1995/05/21}{Moved some code to other files}
+% \changes{v1.1n}{1995/07/02}{Removed surplus `by' and `\quotechar=' in
+% various places}
+% \changes{v1.1o}{1995/09/14}{Moved \cs{multispan} to lttab.dtx}
+% \changes{v1.1r}{1995/10/10}{Autoload tracing code}
+% \changes{v1.1u}{1996/10/28}{(CAR) More doc changes}
+%
+% \section{Plain \TeX}
+%
+% \LaTeX\ includes almost all of the functionality of Knuth's original
+% `Basic Macros' That is, the plain \TeX\ format described in Appendix~B
+% of the \TeX{}Book. However, some of the user commands are not much
+% use so, in order to save memory, we may remove them from the kernel
+% into a package. Here is a list of the commands that may be removed
+% (PROBABLY NOT COMPLETE).
+% \begin{verbatim}
+% \magstep \magstephalf
+% \mathhexbox
+% \vglue \vgl@
+% \hglue \hgl@
+% \end{verbatim}
+%
+% This file is by now very small as most of it has been moved to more
+% appropriate kernel files: it may disappear completely one day.
+%
+% \LaTeX\ font definitions are done using NFSS2 so none of PLAIN's
+% font definitions are in \LaTeX.
+%
+% \LaTeX\ has its own tabbing environment, so PLAIN's is disabled.
+%
+% \LaTeX{} uses its own output routine, so most of the plain one was
+% removed.
+%
+% \StopEventually{}
+%
+% \iffalse
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+% \fi
+%
+% \begin{macrocode}
+%<*2ekernel|autoload>
+\catcode`\{=1 % left brace is begin-group character
+\catcode`\}=2 % right brace is end-group character
+\catcode`\$=3 % dollar sign is math shift
+\catcode`\&=4 % ampersand is alignment tab
+\catcode`\#=6 % hash mark is macro parameter character
+\catcode`\^=7 % circumflex and uparrow are for superscripts
+\catcode`\_=8 % underline and downarrow are for subscripts
+\catcode`\^^I=10 % ascii tab is a blank space
+\chardef\active=13 \catcode`\~=\active % tilde is active
+\catcode`\^^L=\active \outer\def^^L{\par}% ascii form-feed is \outer\par
+% \end{macrocode}
+%
+% \begin{macrocode}
+\message{catcodes,}
+% \end{macrocode}
+%
+% We had to define the |\catcodes| right away, before the message line,
+% since |\message| uses the |{| and |}| characters.
+% When INITEX (the \TeX\ initializer) starts up,
+% it has defined the following |\catcode| values:\\
+% |\catcode`\^^@=9 % | ascii null is ignored\\
+% |\catcode`\^^M=5 % | ascii return is end-line\\
+% |\catcode`\\=0 % | backslash is TeX escape character\\
+% |\catcode`\%=14 % | percent sign is comment character\\
+% |\catcode`\ =10 % | ascii space is blank space\\
+% |\catcode`\^^?=15 %| ascii delete is invalid\\
+% |\catcode`\A=11 ... \catcode`\Z=11 %| uppercase letters\\
+% |\catcode`\a=11 ... \catcode`\z=11 %| lowercase letters\\
+% all others are type 12 (other)
+%
+% Here is a list of the characters that have been specially catcoded:
+% \begin{macrocode}
+\def\dospecials{\do\ \do\\\do\{\do\}\do\$\do\&%
+ \do\#\do\^\do\_\do\%\do\~}
+% \end{macrocode}
+% (not counting ascii null, tab, linefeed, formfeed, return, delete)
+% Each symbol in the list is preceded by \do, which can be defined
+% if you want to do something to every item in the list.
+%
+% We make |@| signs act like letters, temporarily, to avoid conflict
+% between user names and internal control sequences of plain format.
+% \begin{macrocode}
+\catcode`@=11
+% \end{macrocode}
+%
+% To make the plain macros more efficient in time and space,
+% several constant values are declared here as control sequences.
+% If they were changed, anything could happen;
+% so they are private symbols.
+% \begin{macro}{\@ne}
+% \begin{macro}{\tw@}
+% \begin{macro}{\thr@@}
+% \begin{macro}{\sixt@@n}
+% \begin{macro}{\@cclv}
+% Small constants are defined using |\chardef|.
+% \begin{macrocode}
+\chardef\@ne=1
+\chardef\tw@=2
+\chardef\thr@@=3
+\chardef\sixt@@n=16
+\chardef\@cclv=255
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@cclvi}
+% \begin{macro}{\@m}
+% \begin{macro}{\@M}
+% \begin{macro}{\@MM}
+% Constants above 255 defined using |\mathchardef|.
+% \begin{macrocode}
+\mathchardef\@cclvi=256
+\mathchardef\@m=1000
+\mathchardef\@M=10000
+\mathchardef\@MM=20000
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% Allocation of registers
+%
+% Here are macros for the automatic allocation of |\count|, |\box|,
+% |\dimen|, |\skip|, |\muskip|, and |\toks| registers, as well as
+% |\read| and |\write| stream numbers, |\fam| codes, |\language| codes,
+% and |\insert| numbers.
+%
+% \begin{macrocode}
+\message{registers,}
+% \end{macrocode}
+%
+% When a register is used only temporarily, it need not be allocated;
+% grouping can be used, making the value previously in the register
+% return after the close of the group. The main use of these macros is
+% for registers that are defined by one macro and used by others,
+% possibly at different nesting levels. All such registers should be
+% defined through these macros; otherwise conflicts may occur,
+% especially when two or more macro packages are being used at
+% the same time.
+%
+% \begin{oldcomments}
+% The following counters are reserved:
+% 0 to 9 page numbering
+% 10 count allocation
+% 11 dimen allocation
+% 12 skip allocation
+% 13 muskip allocation
+% 14 box allocation
+% 15 toks allocation
+% 16 read file allocation
+% 17 write file allocation
+% 18 math family allocation
+% 19 language allocation
+% 20 insert allocation
+% 21 the most recently allocated number
+% 22 constant -1
+% \end{oldcomments}
+%
+% New counters are allocated starting with 23, 24, etc. Other registers
+% are allocated starting with 10. This leaves 0 through 9 for the user
+% to play with safely, except that counts 0 to 9 are considered to be
+% the page and subpage numbers (since they are displayed during
+% output). In this scheme, |\count| 10 always contains the number of the
+% highest-numbered counter that has been allocated, |\count| 14 the
+% highest-numbered box, etc. Inserts are given numbers 254, 253, etc.,
+% since they require a |\count|, |\dimen|, |\skip|, and |\box| all with
+% the same number; |\count| 20 contains the lowest-numbered insert that
+% has been allocated. Of course, |\box|255 is reserved for |\output|;
+% |\count|255, |\dimen|255, and |\skip|255 can be used freely.
+%
+% It is recommended that macro designers always use
+% |\global| assignments with respect to registers numbered\\
+% 1, 3, 5, 7, 9,\\
+% and always non-|\global| assignments with respect to registers\\
+% 0, 2, 4, 6, 8, 255.\\
+% This will prevent ``save stack buildup'' that might otherwise occur.
+%
+% \begin{macrocode}
+\count10=22 % allocates \count registers 23, 24, ...
+\count11=9 % allocates \dimen registers 10, 11, ...
+\count12=9 % allocates \skip registers 10, 11, ...
+\count13=9 % allocates \muskip registers 10, 11, ...
+\count14=9 % allocates \box registers 10, 11, ...
+\count15=9 % allocates \toks registers 10, 11, ...
+\count16=-1 % allocates input streams 0, 1, ...
+\count17=-1 % allocates output streams 0, 1, ...
+\count18=3 % allocates math families 4, 5, ...
+\count19=0 % allocates \language codes 1, 2, ...
+\count20=255 % allocates insertions 254, 253, ...
+% \end{macrocode}
+%
+% \begin{macro}{\insc@unt}
+% \begin{macro}{\allocationnumber}
+% The insertion counter and most recent allocation.
+% \begin{macrocode}
+\countdef\insc@unt=20
+\countdef\allocationnumber=21
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\m@ne}
+% The constant $-1$.
+% \begin{macrocode}
+\countdef\m@ne=22 \m@ne=-1
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\wlog}
+% Write on log file (only)
+% \begin{macrocode}
+\def\wlog{\immediate\write\m@ne}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\count@}
+% \begin{macro}{\dimen@}
+% \begin{macro}{\dimen@i}
+% \begin{macro}{\dimen@ii}
+% \begin{macro}{\skip@}
+% \begin{macro}{\toks@}
+% Here are abbreviations for the names of scratch registers
+% that don't need to be allocated.
+% \begin{macrocode}
+\countdef\count@=255
+\dimendef\dimen@=0
+\dimendef\dimen@i=1 % global only
+\dimendef\dimen@ii=2
+\skipdef\skip@=0
+\toksdef\toks@=0
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\newcount}
+% \begin{macro}{\newdimen}
+% \begin{macro}{\newskip}
+% \begin{macro}{\newmuskip}
+% \begin{macro}{\newbox}
+% \begin{macro}{\newhelp}
+% \begin{macro}{\newtoks}
+% \changes{v1.0c}{1994/03/28}
+% {Remove some \cs{outer} declarations.}
+% \changes{v1.1h}{1995/04/24}
+% {Remove remaining \cs{outer} declarations.}
+% Now, we define |\newcount|, |\newbox|, etc. so that you can say
+% |\newcount\foo| and |\foo| will be defined (with |\countdef|) to
+% be the next counter.
+%
+% To find out which counter |\foo| is, you can look at
+% |\allocationnumber|.
+%
+% Since there's no |\boxdef| command, |\chardef| is used to define a
+% |\newbox|, |\newinsert|, |\newfam|, and so on.
+%
+% \LaTeX\ change: remove |\outer| from |\newcount| and |\newdimen| (FMi)
+% This is necessary to use |\newcount| inside |\if...|
+% later on. Also remove from |\newskip|, |\newbox|
+% |\newwrite| and |\newfam| (DPC) to save later redefinition.
+% \begin{macrocode}
+\def\newcount{\alloc@0\count\countdef\insc@unt}
+\def\newdimen{\alloc@1\dimen\dimendef\insc@unt}
+\def\newskip{\alloc@2\skip\skipdef\insc@unt}
+\def\newmuskip{\alloc@3\muskip\muskipdef\@cclvi}
+\def\newbox{\alloc@4\box\chardef\insc@unt}
+\def\newhelp#1#2{\newtoks#1#1\expandafter{\csname#2\endcsname}}
+\def\newtoks{\alloc@5\toks\toksdef\@cclvi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\newread}
+% \begin{macro}{\newwrite}
+% \begin{macrocode}
+\def\newread{\alloc@6\read\chardef\sixt@@n}
+\def\newwrite{\alloc@7\write\chardef\sixt@@n}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \LaTeX\ defines |\newfam| in |ltfss.dtx|.
+%\begin{verbatim}
+%\def\newfam{\alloc@8\fam\chardef\sixt@@n}
+%\end{verbatim}
+%
+% \begin{macro}{\newlanguage}
+% \begin{macrocode}
+\def\newlanguage{\alloc@9\language\chardef\@cclvi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\alloc@}
+% \begin{macrocode}
+\def\alloc@#1#2#3#4#5{\global\advance\count1#1\@ne
+ \ch@ck#1#4#2% make sure there's still room
+ \allocationnumber\count1#1%
+ \global#3#5\allocationnumber
+ \wlog{\string#5=\string#2\the\allocationnumber}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\newinsert}
+% \begin{macrocode}
+\def\newinsert#1{\global\advance\insc@unt \m@ne
+ \ch@ck0\insc@unt\count
+ \ch@ck1\insc@unt\dimen
+ \ch@ck2\insc@unt\skip
+ \ch@ck4\insc@unt\box
+ \allocationnumber\insc@unt
+ \global\chardef#1\allocationnumber
+ \wlog{\string#1=\string\insert\the\allocationnumber}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ch@ck}
+% \begin{macrocode}
+%</2ekernel|autoload>
+%<*2ekernel|autoload|autoerr>
+\gdef\ch@ck#1#2#3{%
+ \ifnum\count1#1<#2\else
+%<!autoload> \errmessage{No room for a new #3}%
+%<autoload> \@autoerr\ch@ck#1#2#3%
+ \fi}
+%</2ekernel|autoload|autoerr>
+%<*2ekernel|autoload>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\maxdimen}
+% \begin{macro}{\hideskip}
+% Here are some examples of allocation.
+% \begin{macrocode}
+\newdimen\maxdimen \maxdimen=16383.99999pt % the largest legal <dimen>
+\newskip\hideskip \hideskip=-1000pt plus 1fill % negative but can grow
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\p@}
+% \begin{macro}{\z@}
+% \begin{macro}{\z@skip}
+% \begin{macro}{\voidb@x}
+% \begin{macrocode}
+\newdimen\p@ \p@=1pt % this saves macro space and time
+\newdimen\z@ \z@=0pt % can be used both for 0pt and 0
+\newskip\z@skip \z@skip=0pt plus0pt minus0pt
+\newbox\voidb@x % permanently void box register
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \changes{v1.1p}{1995/10/02}{Move \cs{newif} to ltdefns}
+%
+% \begin{macrocode}
+\message{compatibility for TeX 2, }
+% \end{macrocode}
+%
+% If this file is used in an old \TeX\ we define the new features
+% of \TeX\ 3.0 as simple macros or counters so that files that uses
+% these features can be processed in such an environment
+% (They will however produce some other results).
+%
+% \begin{macrocode}
+\ifx\@undefined\inputlineno
+ \newcount\inputlineno
+% \end{macrocode}
+% This could be used to detect that an old \TeX\ is in force
+% \begin{macrocode}
+ \inputlineno-1
+% \end{macrocode}
+% Extra test for MLTeX 2, RmS 91/11/07.
+% \begin{macrocode}
+ \ifx\@undefined\language
+ \newcount\language
+ \fi
+ \newcount\lefthyphenmin
+ \newcount\righthyphenmin
+ \newcount\errorcontextlines
+ \newcount\holdinginserts
+ \newdimen\emergencystretch
+ \newcount\badness
+ \let\noboundary\relax
+ \newcount\setlanguage
+\fi
+% \end{macrocode}
+%
+% Assign initial values to \TeX's parameters
+%
+% \begin{macrocode}
+\message{parameters,}
+% \end{macrocode}
+%
+% All of \TeX's numeric parameters are listed here,
+% but the code is commented out if no special value needs to be set.
+% INITEX makes all parameters zero except where noted.
+%
+% \begin{oldcomments}
+% \begin{macrocode}
+\pretolerance=100
+\tolerance=200 % INITEX sets this to 10000
+\hbadness=1000
+\vbadness=1000
+\linepenalty=10
+\hyphenpenalty=50
+\exhyphenpenalty=50
+\binoppenalty=700
+\relpenalty=500
+\clubpenalty=150
+\widowpenalty=150
+\displaywidowpenalty=50
+\brokenpenalty=100
+\predisplaypenalty=10000
+% \end{macrocode}
+% \postdisplaypenalty=0
+% \interlinepenalty=0
+% \floatingpenalty=0, set during \insert
+% \outputpenalty=0, set before TeX enters \output
+% \begin{macrocode}
+\doublehyphendemerits=10000
+\finalhyphendemerits=5000
+\adjdemerits=10000
+% \end{macrocode}
+% \looseness=0, cleared by TeX after each paragraph
+% \pausing=0
+% \holdinginserts=0
+% \tracingonline=0
+% \tracingmacros=0
+% \tracingstats=0
+% \tracingparagraphs=0
+% \tracingpages=0
+% \tracingoutput=0
+% \begin{macrocode}
+\tracinglostchars=1
+% \end{macrocode}
+% \tracingcommands=0
+% \tracingrestores=0
+% \language=0
+% \begin{macrocode}
+\uchyph=1
+% \end{macrocode}
+% \lefthyphenmin=2 \righthyphenmin=3 set below
+% \globaldefs=0
+% \maxdeadcycles=25 % INITEX does this
+% \hangafter=1 % INITEX does this, also TeX after each paragraph
+% \fam=0
+% \mag=1000 % INITEX does this
+% \escapechar=`\\ % INITEX does this
+% \begin{macrocode}
+\defaulthyphenchar=`\-
+\defaultskewchar=-1
+% \end{macrocode}
+% \endlinechar=`\^^M % INITEX does this
+% \newlinechar=-1 \LaTeX\ sets this in ltdefns.dtx.
+% \begin{macrocode}
+\delimiterfactor=901
+% \end{macrocode}
+% \time=now % TeX does this at beginning of job
+% \day=now % TeX does this at beginning of job
+% \month=now % TeX does this at beginning of job
+% \year=now % TeX does this at beginning of job
+%
+% \end{oldcomments}
+% In \LaTeX{} we don't want box information in the transcript
+% unless we do a full tracing.
+% \changes{v1.0g}{1994/04/28}{Turn off overfull box tracing in log}
+%
+% \begin{macrocode}
+\showboxbreadth=-1
+\showboxdepth=-1
+\errorcontextlines=-1
+% \end{macrocode}
+%
+% \begin{macrocode}
+\hfuzz=0.1pt
+\vfuzz=0.1pt
+\overfullrule=5pt
+\maxdepth=4pt
+\splitmaxdepth=\maxdimen
+\boxmaxdepth=\maxdimen
+% \end{macrocode}
+%
+% \begin{oldcomments}
+% \lineskiplimit=0pt, changed by \normalbaselines
+% \begin{macrocode}
+\delimitershortfall=5pt
+\nulldelimiterspace=1.2pt
+\scriptspace=0.5pt
+% \end{macrocode}
+% \mathsurround=0pt
+% \predisplaysize=0pt, set before TeX enters $$
+% \displaywidth=0pt, set before TeX enters $$
+% \displayindent=0pt, set before TeX enters $$
+% \begin{macrocode}
+\parindent=20pt
+% \end{macrocode}
+% \hangindent=0pt, zeroed by TeX after each paragraph
+% \hoffset=0pt
+% \voffset=0pt
+%
+% \baselineskip=0pt, changed by \normalbaselines
+% \lineskip=0pt, changed by \normalbaselines
+% \begin{macrocode}
+\parskip=0pt plus 1pt
+\abovedisplayskip=12pt plus 3pt minus 9pt
+\abovedisplayshortskip=0pt plus 3pt
+\belowdisplayskip=12pt plus 3pt minus 9pt
+\belowdisplayshortskip=7pt plus 3pt minus 4pt
+% \end{macrocode}
+% \leftskip=0pt
+% \rightskip=0pt
+% \begin{macrocode}
+\topskip=10pt
+\splittopskip=10pt
+% \end{macrocode}
+% \tabskip=0pt
+% \spaceskip=0pt
+% \xspaceskip=0pt
+% \begin{macrocode}
+\parfillskip=0pt plus 1fil
+% \end{macrocode}
+% \end{oldcomments}
+%
+%
+% \begin{macro}{\normalbaselineskip}
+% \begin{macro}{\normallineskip}
+% \begin{macro}{\normallineskiplimit}
+% We also define special registers that function like parameters:
+% \begin{macrocode}
+\newskip\normalbaselineskip \normalbaselineskip=12pt
+\newskip\normallineskip \normallineskip=1pt
+\newdimen\normallineskiplimit \normallineskiplimit=0pt
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\interfootlinepenalty}
+% \begin{macrocode}
+\newcount\interfootnotelinepenalty \interfootnotelinepenalty=100
+% \end{macrocode}
+% \end{macro}
+%
+% Definitions for preloaded fonts
+%
+% \begin{macro}{\magstephalf}
+% \begin{macro}{\magstep}
+% \begin{macrocode}
+\def\magstephalf{1095 }
+\def\magstep#1{\ifcase#1 \@m\or 1200\or 1440\or 1728\or
+ 2074\or 2488\fi\relax}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% Macros for setting ordinary text
+%
+% \begin{macro}{\frenchspacing}
+% \begin{macro}{\nonfrenchspacing}
+% \begin{macrocode}
+\def\frenchspacing{\sfcode`\.\@m \sfcode`\?\@m \sfcode`\!\@m
+ \sfcode`\:\@m \sfcode`\;\@m \sfcode`\,\@m}
+\def\nonfrenchspacing{\sfcode`\.3000\sfcode`\?3000\sfcode`\!3000%
+ \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\normalbaselines}
+% \begin{macrocode}
+\def\normalbaselines{\lineskip\normallineskip
+ \baselineskip\normalbaselineskip \lineskiplimit\normallineskiplimit}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\M}
+% \begin{macro}{\I}
+% \changes{v1.1m}{1995/09/01}{Use \cs{let} to save space}
+% Save a bit of space by using |\let| here.
+% \begin{macrocode}
+\def\^^M{\ } % control <return> = control <space>
+\let\^^I\^^M % same for <tab>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\lq}
+% \begin{macro}{\rq}
+% \begin{macrocode}
+\def\lq{`}
+\def\rq{'}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\lbrack}
+% \begin{macro}{\rbrack}
+% \begin{macrocode}
+\def\lbrack{[}
+\def\rbrack{]}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\aa}
+% \begin{macro}{\AA}
+% These are not from plain.tex but they are similar to other commands
+% found here and nowhere else, being alternate input forms for
+% characters.
+% \begin{macrocode}
+\def \aa {\r a}
+\def \AA {\r A}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\endgraf}
+% \begin{macro}{\endline}
+% \begin{macrocode}
+\let\endgraf=\par
+\let\endline=\cr
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\space}
+% \begin{macrocode}
+\def\space{ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\empty}
+% \changes{v1.1m}{1995/09/01}{Use \cs{let} to save space}
+% This probably ought to go altogether, but let it to the \LaTeX\
+% version to save space.
+% \begin{macrocode}
+\let\empty\@empty
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\null}
+% \begin{macrocode}
+\def\null{\hbox{}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bgroup}
+% \begin{macro}{\egroup}
+% \begin{macrocode}
+\let\bgroup={
+\let\egroup=}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\obeylines}
+% \begin{macro}{\obeyspaces}
+% In |\obeylines|, we say |\let^^M=\par| instead of |\def^^M{\par}|
+% since this allows, for example, |\let\par=\cr \obeylines \halign{...|
+% \begin{macrocode}
+{\catcode`\^^M=\active % these lines must end with %
+ \gdef\obeylines{\catcode`\^^M\active \let^^M\par}%
+ \global\let^^M\par} % this is in case ^^M appears in a \write
+\def\obeyspaces{\catcode`\ \active}
+{\obeyspaces\global\let =\space}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\loop}
+% \changes{v1.0h}{1994/05/16}{Use Kabelschacht method}
+% \begin{macro}{\iterate}
+% \changes{v1.1b}{1994/11/10}
+% {(CAR) added extra \cs{relax}}
+% \changes{v1.1m}{1994/05/26}
+% {(CAR) added \cs{long}}
+% \begin{macro}{\repeat}
+% We use Kabelschacht's method of doing loops, see TUB 8\#2 (1987).
+% (unless that breaks something :-). It turned out to need an
+% extra |\relax|: see pr/642 (|\loop| could do one iteration too much
+% in certain cases).
+% \begin{macrocode}
+\long\def \loop #1\repeat{%
+ \def\iterate{#1\relax % Extra \relax
+ \expandafter\iterate\fi
+ }%
+ \iterate
+ \let\iterate\relax
+}
+% \end{macrocode}
+% This setting of |\repeat| is needed to make |\loop...\if...\repeat|
+% skippable within another |\if...|.
+% \begin{macrocode}
+\let\repeat=\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \LaTeX\ defines |\smallskip|, etc.\ in |ltspace.dtx|.
+%
+% \begin{macro}{\nointerlineskip}
+% \begin{macro}{\offinterlineskip}
+% \changes{v1.1n}{1995/07/02}{Replaced 1000 by \cs{@m}}
+% \begin{macrocode}
+\def\nointerlineskip{\prevdepth-\@m\p@}
+\def\offinterlineskip{\baselineskip-\@m\p@
+ \lineskip\z@ \lineskiplimit\maxdimen}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\vglue}
+% \begin{macro}{\hglue}
+% \begin{macrocode}
+\def\vglue{\afterassignment\vgl@\skip@=}
+\def\vgl@{\par \dimen@\prevdepth \hrule \@height\z@
+ \nobreak\vskip\skip@ \prevdepth\dimen@}
+\def\hglue{\afterassignment\hgl@\skip@=}
+\def\hgl@{\leavevmode \count@\spacefactor \vrule \@width\z@
+ \nobreak\hskip\skip@ \spacefactor\count@}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \LaTeX\ defines |~| in |ltdefns.dtx|.
+%
+% \begin{macro}{\slash}
+% \begin{macrocode}
+\def\slash{/\penalty\exhyphenpenalty} % a `/' that acts like a `-'
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\break}
+% \begin{macro}{\nobreak}
+% \begin{macro}{\allowbreak}
+% \begin{macrocode}
+\def\break{\penalty-\@M}
+\def\nobreak{\penalty \@M}
+\def\allowbreak{\penalty \z@}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\filbreak}
+% \begin{macro}{\goodbreak}
+% \begin{macrocode}
+\def\filbreak{\par\vfil\penalty-200\vfilneg}
+\def\goodbreak{\par\penalty-500 }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\eject}
+% \changes{v1.1s}{1995/10/17}{Move \cs{supereject} to compat file}
+% Define |\eject| as in plain \TeX\ but define |\supereject| only in
+% the compatibility file.
+% \begin{macrocode}
+\def\eject{\par\break}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\removelastskip}
+% \begin{macrocode}
+\def\removelastskip{\ifdim\lastskip=\z@\else\vskip-\lastskip\fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\smallbreak}
+% \begin{macro}{\medbreak}
+% \begin{macro}{\bigbreak}
+% \begin{macrocode}
+\def\smallbreak{\par\ifdim\lastskip<\smallskipamount
+ \removelastskip\penalty-50\smallskip\fi}
+\def\medbreak{\par\ifdim\lastskip<\medskipamount
+ \removelastskip\penalty-100\medskip\fi}
+\def\bigbreak{\par\ifdim\lastskip<\bigskipamount
+ \removelastskip\penalty-200\bigskip\fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\m@th}
+% \changes{v1.0h}{1994/05/16}{Remove unnecssary space}
+% \begin{macrocode}
+\def\m@th{\mathsurround\z@}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\underbar}
+% Due to \LaTeX's redefinition of |\underline| plain \TeX's
+% |\underbar| can be done in a simpler fashion (but do we
+% need it at all?).
+% \changes{v1.1m}{1994/05/26}
+% {(CAR/FMi) changed to use box \cs{tw@}}
+% \changes{v1.1p}{1994/05/26}
+% {(DPC) changed to use \cs{sbox}}
+% \begin{macrocode}
+\def\underbar#1{\underline{\sbox\tw@{#1}\dp\tw@\z@\box\tw@}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\strutbox}
+% \begin{macro}{\strut}
+% \LaTeX\ sets |\strutbox| in |\set@fontsize|.
+% \begin{macrocode}
+\newbox\strutbox
+\def\strut{\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\hidewidth}
+% For alignment entries that can stick out.
+% \begin{macrocode}
+\def\hidewidth{\hskip\hideskip}
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{v1.0h}{1994/05/16}{Remove unnecessary def for \cs{item}}
+% \changes{v1.1i}{1995/04/27}
+% {Move \cs{hang} and \cs{textindent} to latex209.def}
+% \changes{RmS}{1991/11/04}{Removed \cs{itemitem} since never
+% needed/useful with \LaTeX.}
+%
+% \begin{macro}{\narrower}
+% \begin{macrocode}
+\def\narrower{%
+ \advance\leftskip\parindent
+ \advance\rightskip\parindent}
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{v1.1c}{1994/11/12}{Comment out more encoding specific
+% commands}
+% \LaTeX\ defines |\ae| and similar commands elsewhere.
+%
+% \begin{macrocode}
+\chardef\%=`\%
+\chardef\&=`\&
+\chardef\#=`\#
+% \end{macrocode}
+%
+% Most text commands are actually encoding specific and therefore
+% defined later, so commented out or removed from this file.
+% \changes{v1.0h}{1994/05/16}{Comment out encoding specific commands}
+%
+% \begin{macro}{\leavevmode}
+% begins a paragraph, if necessary
+% \begin{macrocode}
+\def\leavevmode{\unhbox\voidb@x}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\mathhexbox}
+% \begin{macrocode}
+\def\mathhexbox#1#2#3{\mbox{$\m@th \mathchar"#1#2#3$}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\ialign}
+% \begin{macrocode}
+\def\ialign{\everycr{}\tabskip\z@skip\halign} % initialized \halign
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\oalign}
+% \begin{macro}{\o@lign}
+% \begin{macro}{\ooalign}
+% \begin{macrocode}
+\def\oalign#1{\leavevmode\vtop{\baselineskip\z@skip \lineskip.25ex%
+ \ialign{##\crcr#1\crcr}}}
+\def\o@lign{\lineskiplimit\z@ \oalign}
+\def\ooalign{\lineskiplimit-\maxdimen \oalign}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\sh@ft}
+% \changes{v1.1t}{1996/07/26}{replace \cs{dimen}\cs{z@} by
+% \cs{dimen@}}
+% \begin{macrocode}
+\def\sh@ft#1{\dimen@.00#1ex\multiply\dimen@\fontdimen1\font
+ \kern-.0156\dimen@} % compensate for slant in lowered accents
+% \end{macrocode}
+% \end{macro}
+%
+% \LaTeX\ change: |\d|, |\b|, |\c|, |\copyright|, |\TeX|
+% defined elsewhere.
+%
+% \changes{LaTeX2e}
+% {1993/11/29}{All accents in decimals; suggested by Paul Taylor}
+% \changes{v1.0d}{1994/04/12}
+% {Define \cs{@acci}}
+% \changes{v1.0h}{1994/05/16}{Remove \cs{@acci} and friends again}
+%
+% \LaTeX{} change: Make |\t| work in a moving argument.
+% Now defined elsewhere.
+%
+% \begin{macro}{\hrulefill}
+% \begin{macro}{\dotfill}
+% \LaTeX\ change: |\kern\z@| added to end of
+% |\hrulefill| and |\dotfill|
+% to make them work in `tabular' and `array' environments.
+% (Change made 24 July 1987).
+% \LaTeX\ change: |\leavevmode| added at begining of
+% |\dotfill| and |\hrulefill|
+% so that they work as expected in vertical mode.
+% \begin{macrocode}
+\def\hrulefill{\leavevmode\leaders\hrule\hfill\kern\z@}
+% \end{macrocode}
+% The box in |\dotfill| originally contained (in plain.tex):
+% |\mkern 1.5mu .\mkern 1.5mu|; the width of .44em differs from this
+% by .04pt which is probably an acceptable difference within leaders.
+% \changes{v1.1u}{1996/10/28}{Removed math mode}
+% \changes{v1.1v}{1996/10/29}{Got arithmetic correct (CAR)}
+% \changes{v1.1w}{1996/11/03}{Saved tokens by using \cs{hb@xt@}}
+% \begin{macrocode}
+\def\dotfill{%
+ \leavevmode
+ \cleaders \hb@xt@ .44em{\hss.\hss}\hfill
+ \kern\z@}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% INITEX sets |\sfcode x=1000| for all x, except that |\sfcode`X=999|
+% for uppercase letters. The following changes are needed:
+% \begin{macrocode}
+\sfcode`\)=0 \sfcode`\'=0 \sfcode`\]=0
+% \end{macrocode}
+% The |\nonfrenchspacing| macro will make further changes to
+% |\sfcode| values.
+%
+%
+% Definitions related to output
+%
+%
+% \changes{v1.1k}{1995/05/22}{Definitions of \cs{footins} and
+% \cs{footnoterule} moved to ltfloat.}
+%
+%
+% |\magnification| doesn't work in \LaTeX.
+%\begin{verbatim}
+%\def\magnification{\afterassignment\m@g\count@}
+%\def\m@g{\mag\count@
+% \hsize6.5truein\vsize8.9truein\dimen\footins8truein}
+%\end{verbatim}
+%
+% \begin{macro}{\showoverfull}
+% \changes{v0.1k ltfinal}{1994/05/19}{used \cs{@ne} not 1}
+% The following commands are used in debugging:
+% \begin{macrocode}
+\def\showoverfull{\tracingonline\@ne}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\showoutput}
+% \changes{v0.1k ltfinal}{1994/05/19}
+% {used \cs{maxdimen} not 99999}
+% \changes{v1.1n}{1995/07/02}{Use \cs{showoverfull} to save space}
+% \changes{v1.1x}{2002/02/24}{Use newly added \cs{loggingoutput}}
+% \begin{macro}{\loggingoutput}
+% \changes{v1.1x}{2002/02/24}{Macro added}
+% \begin{macrocode}
+%</2ekernel|autoload>
+%<*2ekernel|autoerr>
+\gdef\loggingoutput{\tracingoutput\@ne
+ \showboxbreadth\maxdimen\showboxdepth\maxdimen\errorstopmode}
+\gdef\showoutput{\loggingoutput\showoverfull}
+%</2ekernel|autoerr>
+%<autoload>\def\showoutput{\@autoerr\showoutput}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\tracingall}
+% \changes{LaTeX209}{1991/08/26}{Added
+% \cs{errorcontextlines}!=\cs{maxdimen}, suggested by J. Schrod}
+% \changes{v1.1n}{1995/07/02}{Use \cs{showoutput} to save space}
+% \changes{v1.1x}{2002/02/24}{Use newly added \cs{loggingoutput}}
+% \begin{macro}{\loggingall}
+% \changes{v1.1x}{2002/02/24}{Macro added}
+% \begin{macrocode}
+%<*2ekernel|autoerr>
+\gdef\loggingall{\tracingcommands\tw@\tracingstats\tw@
+ \tracingpages\@ne\tracinglostchars\@ne
+ \tracingmacros\tw@\tracingparagraphs\@ne\tracingrestores\@ne
+ \errorcontextlines\maxdimen\loggingoutput}
+\gdef\tracingall{\loggingall\showoverfull}
+%</2ekernel|autoerr>
+%<autoload>\def\tracingall{\@autoerr\tracingall}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \LaTeX\ change: |\showhyphens| Defined later.
+%
+% Punctuation affects the spacing.
+% \begin{macrocode}
+%<*2ekernel|autoload>
+\nonfrenchspacing
+%</2ekernel|autoload>
+% \end{macrocode}
+%
+%
+% \Finale
+%