diff options
author | Karl Berry <karl@freefriends.org> | 2019-07-25 22:32:37 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2019-07-25 22:32:37 +0000 |
commit | 40540b1196d9c22b71c7452ea1f0a248ced459b0 (patch) | |
tree | 7b0cc60a6457ef8f8240ec4334d320ef027891e4 /Master/texmf-dist/source/latex-dev/base/ltplain.dtx | |
parent | 5836409b7166d9802798637bd301368113a1c64f (diff) |
latex-dev formats: latex-base-dev (including latex-doc-dev), latex-graphics-dev, and corresponding texmf.cnf/fmtutil.cmf updates
git-svn-id: svn://tug.org/texlive/trunk@51730 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex-dev/base/ltplain.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex-dev/base/ltplain.dtx | 1588 |
1 files changed, 1588 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex-dev/base/ltplain.dtx b/Master/texmf-dist/source/latex-dev/base/ltplain.dtx new file mode 100644 index 00000000000..5c4050b734a --- /dev/null +++ b/Master/texmf-dist/source/latex-dev/base/ltplain.dtx @@ -0,0 +1,1588 @@ +% \iffalse meta-comment +% +% Copyright 1993-2017 +% 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.3c +% of this license or (at your option) any later version. +% The latest version of this license is in +% https://www.latex-project.org/lppl.txt +% and version 1.3c or later is part of all distributions of LaTeX +% version 2005/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} + [2017/04/10 v2.3c 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} + \MaintainedByLaTeXTeam{latex} + \maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% +% \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} +% \changes{v2.0e}{2015/02/21}{Removed autoload code} +% \changes{v2.2d}{2016/10/15}{Require e\TeX{}} +% \changes{v2.3b}{2016/11/06}{Drop \cs{outer} entirely} +% +% \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{} +% +% +% \begin{macrocode} +%<*2ekernel> +\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 \def^^L{\par}% ascii form-feed is \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}{\newread} +% \begin{macro}{\newwrite} +% \begin{macro}{\newlanguage} +% \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. +% \changes{v2.0a}{2014/12/30}{New engine-specific allocation scheme (latexrelease)} +% \changes{v2.0f}{2015/03/02}{allow 255 math groups in Unicode engines} +% \changes{v2.0h}{2015/06/19}{Use $-1$ for first range to get contiguous allocation} +% \begin{macrocode} +%</2ekernel> +%<*2ekernel|latexrelease> +%<latexrelease>\IncludeInRelease{2015/01/01}% +%<latexrelease> {\newcount}{Extended Allocation}% +% \end{macrocode} +% +% \begin{macrocode} +\def\newcount {\e@alloc\count \countdef {\count10}\insc@unt\float@count} +\def\newdimen {\e@alloc\dimen \dimendef {\count11}\insc@unt\float@count} +\def\newskip {\e@alloc\skip \skipdef {\count12}\insc@unt\float@count} +\def\newmuskip + {\e@alloc\muskip\muskipdef{\count13}\m@ne\e@alloc@top} +% \end{macrocode} +% For compatibility use |\chardef| in the classical range. +% \begin{macrocode} +\def\newbox {\e@alloc\box + {\ifnum\allocationnumber<\@cclvi + \expandafter\chardef + \else + \expandafter\e@alloc@chardef + \fi} + {\count14}\insc@unt\float@count} +\def\newtoks {\e@alloc\toks \toksdef{\count15}\m@ne\e@alloc@top} +\def\newread {\e@alloc\read \chardef{\count16}\m@ne\sixt@@n} +% \end{macrocode} +% +% \changes{v2.2a}{2015/11/18} +% {Extended stream allocation in luatex (0.85)} +% \changes{v2.2b}{2015/11/19} +% {Only extend allocation of write streams (see luatex list)} +% \changes{v2.3c}{2017/04/10} +% {Correction to code to skip write18 in luatex} +% Skip |\write18| due to its traditional use as a shell-escape. +% \begin{macrocode} +\ifx\directlua\@undefined + \def\newwrite {\e@alloc\write \chardef{\count17}\m@ne\sixt@@n} +\else + \def\newwrite {\e@alloc\write + {\ifnum\allocationnumber=18 + \advance\count17\@ne + \allocationnumber\count17 % + \fi + \global\chardef}% + {\count17}% + \m@ne + {128}} +\fi +% \end{macrocode} +% +% \begin{macrocode} +\def\new@mathgroup + {\e@alloc\mathgroup\chardef{\count18}\m@ne\e@mathgroup@top} +\let\newfam\new@mathgroup +% \end{macrocode} +% +% \changes{v2.3a}{2016/10/16}{Allow languages up to 16383 in luatex} +% \begin{macrocode} +\ifx\directlua\@undefined + \def\newlanguage {\e@alloc\language \chardef{\count19}\m@ne\@cclvi} +\else + \def\newlanguage {\e@alloc\language \chardef{\count19}\m@ne{16384}} +\fi +%</2ekernel|latexrelease> +% \end{macrocode} +% +% \begin{macrocode} +%<latexrelease>\EndIncludeInRelease +%<latexrelease>\IncludeInRelease{0000/00/00}% +%<latexrelease> {\newcount}{Extended Allocation}% +%<latexrelease>\def\newcount{\alloc@0\count\countdef\insc@unt} +%<latexrelease>\def\newdimen{\alloc@1\dimen\dimendef\insc@unt} +%<latexrelease>\def\newskip{\alloc@2\skip\skipdef\insc@unt} +%<latexrelease>\def\newmuskip{\alloc@3\muskip\muskipdef\@cclvi} +%<latexrelease>\def\newbox{\alloc@4\box\chardef\insc@unt} +%<latexrelease>\def\newtoks{\alloc@5\toks\toksdef\@cclvi} +%<latexrelease>\def\newread{\alloc@6\read\chardef\sixt@@n} +%<latexrelease>\def\newwrite{\alloc@7\write\chardef\sixt@@n} +%<latexrelease>\def\new@mathgroup{\alloc@8\fam\chardef\sixt@@n} +%<latexrelease>\def\newlanguage{\alloc@9\language\chardef\@cclvi} +%<latexrelease>\let\newfam\new@mathgroup +%<latexrelease>\EndIncludeInRelease +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +%\begin{macro}{\e@alloc@chardef} +% \changes{v2.0a}{2014/12/30}{macro added} +%\begin{macro}{\e@alloc@top} +% \changes{v2.0a}{2014/12/30}{macro added} +% The upper limit of extended registers, which leaves +% this number (eg |\dimen32767|) always unallocated +% by these macros. +% cf traditional |\dimen255|. +% \begin{macrocode} +%<*2ekernel|latexrelease> +%<latexrelease>\IncludeInRelease{2015/01/01}% +%<latexrelease> {\e@alloc@chardef}{Extended Allocation}% +% \end{macrocode} +% +% \begin{macrocode} +\ifx\directlua\@undefined + \ifx\widowpenalties\@undefined +% \end{macrocode} +% classic tex has $2^8$ registers. +% \begin{macrocode} + \mathchardef\e@alloc@top=255 + \let\e@alloc@chardef\chardef + \else +% \end{macrocode} +% etex and xetex have $2^{15}$ registers. +% \begin{macrocode} + \mathchardef\e@alloc@top=32767 + \let\e@alloc@chardef\mathchardef + \fi +\else +% \end{macrocode} +% luatex has $2^{16}$ registers. +% \begin{macrocode} + \chardef\e@alloc@top=65535 + \let\e@alloc@chardef\chardef +\fi +% \end{macrocode} +% +% \begin{macrocode} +%</2ekernel|latexrelease> +%<latexrelease>\EndIncludeInRelease +%<latexrelease>\IncludeInRelease{0000/00/00}% +%<latexrelease> {\e@alloc@chardef}{Extended Allocation}% +%<latexrelease>\let\e@alloc@top\@undefined +%<latexrelease>\let\e@alloc@chardef\@undefined +%<latexrelease>\EndIncludeInRelease +% \end{macrocode} +% \end{macro} +% \end{macro} +% +%\begin{macro}{\e@mathgroup@top} +% \changes{v2.0f}{2015/03/02}{macro added} +% The upper limit of extended math groups (|\fam|) +% 16 in classic \TeX\ and e-\TeX, but 256 in Unicode TeX variants. +% \begin{macrocode} +%<*2ekernel|latexrelease> +%<latexrelease>\IncludeInRelease{2015/01/01}% +%<latexrelease> {\e@mathgroup@top}{Extended Allocation}% +% \end{macrocode} +% +% \begin{macrocode} +\ifx\Umathcode\@undefined +% \end{macrocode} +% classic and e tex have 16 fam (0--15). +% \begin{macrocode} + \chardef\e@mathgroup@top=16 +\else +% \end{macrocode} +% xetex and luatex have 256 fam (0--255). +% \begin{macrocode} + \chardef\e@mathgroup@top=256 +\fi +% \end{macrocode} +% +% \begin{macrocode} +%</2ekernel|latexrelease> +%<latexrelease>\EndIncludeInRelease +%<latexrelease>\IncludeInRelease{0000/00/00}% +%<latexrelease> {\e@mathgroup@top}{Extended Allocation}% +%<latexrelease>\let\e@mathgroup@top\@undefined +%<latexrelease>\EndIncludeInRelease +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\e@alloc} +% \changes{v2.0a}{2014/12/30}{macro added} +% A modified version of |\alloc@| that +% takes the count register rather than just the final digit of its number +% (assuming |\count|$1x$). +% It also has an extra argument to give the top of the extended range. +% +% | #1 #2 #3 #4 #5 #6 | +% +% | \e@alloc type defcmd current top extended-top newname| +% +% Note that if just a single allocation range is required +% (not omitting a range up to 255 for inserts) then $-1$ +% should be used for the first upper bound argument, |#4|. +% +% \begin{macrocode} +%<*2ekernel|latexrelease> +%<latexrelease>\IncludeInRelease{2015/01/01}{\e@alloc}{Extended Allocation}% +% \end{macrocode} +% +% \changes{v2.0h}{2015/06/19}{extra braces in case arguments not single token} +% \begin{macrocode} +\def\e@alloc#1#2#3#4#5#6{% + \global\advance#3\@ne + \e@ch@ck{#3}{#4}{#5}#1% + \allocationnumber#3\relax + \global#2#6\allocationnumber + \wlog{\string#6=\string#1\the\allocationnumber}}% +% \end{macrocode} +% +% \begin{macrocode} +%</2ekernel|latexrelease> +%<latexrelease>\EndIncludeInRelease +%<latexrelease>\IncludeInRelease{0000/00/00}{\e@alloc}{Extended Allocation}% +%<latexrelease>\let\e@alloc\@undefined +%<latexrelease>\EndIncludeInRelease +%<*2ekernel> +% \end{macrocode} +% \end{macro} +% +%\begin{macro}{\e@ch@ck} +% \changes{v2.0a}{2014/12/30}{macro added} +% Extended check command. +% If the first range is exceeded, bump to 256 (or 266 for counts) +% and try again, testing the extended range. +%\begin{macro}{\extrafloats} +% \changes{v2.0a}{2014/12/30}{macro added} +% \changes{v2.0c}{2015/01/23}{reserve counts 256--265} +% Allocate matching registers from the top of the extended range +% and add to |\@freelist|. +% \begin{macrocode} +%</2ekernel> +%<*2ekernel|latexrelease> +%<latexrelease>\IncludeInRelease{2015/10/01} +%<latexrelease> {\e@ch@ck}{Extended Allocation (checking)}% +% \end{macrocode} +% +% \begin{macrocode} +\gdef\e@ch@ck#1#2#3#4{% + \ifnum#1<#2\else +% \end{macrocode} +% +% If we've reached the classical top limit, bump to 256 +% or 266 for counts (count 256--265 are reserved by the allocation +% system). +% \changes{v2.1b}{2015/10/27} +% {Use global assignment when switching to extended range} +% \begin{macrocode} + \ifnum#1=#2\relax + \global#1\@cclvi + \ifx\count#4\global\advance#1 10 \fi + \fi +% \end{macrocode} +% Check we are below the extended limit. +% \changes{v2.0i}{2015/08/06} +% {Add \cs{string} in case argument is not an unexpandable primitive} +% \begin{macrocode} + \ifnum#1<#3\relax + \else + \errmessage{No room for a new \string#4}% + \fi + \fi}% +%<latexrelease>\EndIncludeInRelease +%<latexrelease>\IncludeInRelease{2015/01/01}% +%<latexrelease> {\e@ch@ck}{Extended Allocation (checking)}% +%<latexrelease>\gdef\e@ch@ck#1#2#3#4{% +%<latexrelease> \ifnum#1<#2\else +%<latexrelease> \ifnum#1=#2\relax +%<latexrelease> #1\@cclvi +%<latexrelease> \ifx\count#4\advance#1 10 \fi +%<latexrelease> \fi +%<latexrelease> \ifnum#1<#3\relax +%<latexrelease> \else +%<latexrelease> \errmessage{No room for a new #4}% +%<latexrelease> \fi +%<latexrelease> \fi}% +%<latexrelease>\EndIncludeInRelease +%<latexrelease>\IncludeInRelease{0000/00/00}% +%<latexrelease> {\e@ch@ck}{Extended Allocation (checking)}% +%<latexrelease>\let\e@ch@ck\@undefined +%<latexrelease>\EndIncludeInRelease +% \end{macrocode} +% +% \begin{macrocode} +%<latexrelease>\IncludeInRelease{2015/01/01}% +%<latexrelease> {\extrafloats}{Extra floats}% +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\let\float@count\e@alloc@top +% \end{macrocode} +% +% \begin{macro}{\extrafloats} +% \changes{v2.2c}{2016/07/29}{use \cs{global} \cs{chardef}} +% \begin{macrocode} +\ifx\numexpr\@undefined +% \end{macrocode} +% In classic TeX use |\newinsert| to allocate float boxes. +% \begin{macrocode} +\def\extrafloats#1{% +\count@#1\relax +\ifnum\count@>\z@ +\newinsert\reserved@a +\global\expandafter\chardef + \csname bx@\the\allocationnumber\endcsname\allocationnumber +\@cons\@freelist{\csname bx@\the\allocationnumber\endcsname}% +\advance\count@\m@ne +\expandafter\extrafloats +\expandafter\count@ +\fi +}% +% \end{macrocode} +% +% \begin{macrocode} +\else +% \end{macrocode} +% In e-tex take float boxes from the top of the extended range. +% \begin{macrocode} +\def\extrafloats#1{% +\ifnum#1>\z@ +\count@\numexpr\float@count-1\relax + \ch@ck0\count@\count + \ch@ck1\count@\dimen + \ch@ck2\count@\skip + \ch@ck4\count@\box +\global\e@alloc@chardef\float@count\count@ +\global\expandafter\e@alloc@chardef + \csname bx@\the\float@count\endcsname\float@count +\@cons\@freelist{\csname bx@\the\float@count\endcsname}% +\expandafter +\extrafloats\expandafter{\numexpr#1-1\relax}% +\fi}% +% \end{macrocode} +% +% \begin{macrocode} +\fi +% \end{macrocode} +% +% \begin{macrocode} +%</2ekernel|latexrelease> +%<latexrelease>\EndIncludeInRelease +%<latexrelease>\IncludeInRelease{0000/00/00}% +%<latexrelease> {\extrafloats}{Extra floats}% +%<latexrelease>\let\float@count\@undefined +%<latexrelease>\let\extrafloats\@undefined +%<latexrelease>\EndIncludeInRelease +%<*2ekernel> +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\alloc@} +% \begin{macrocode} +\def\alloc@#1#2#3#4#5{\global\advance\count1#1\@ne + \ch@ck#1#4#2% + \allocationnumber\count1#1% + \global#3#5\allocationnumber + \wlog{\string#5=\string#2\the\allocationnumber}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\newinsert} +% \changes{v2.1a}{2015/08/30}{new \cs{newinsert} implementation} +% \begin{macrocode} +%</2ekernel> +%<*2ekernel|latexrelease> +%<latexrelease>\IncludeInRelease{2015/10/01} +%<latexrelease> {\newinsert}{Extended \newinsert}% +% \end{macrocode} +% \begin{macrocode} +\ifx\numexpr\@undefined +% \end{macrocode} +% If e-\TeX\ is not available use the original plain \TeX\ +% definition of |\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} +% \begin{macrocode} +\else +% \end{macrocode} +% The highest register allowed with |\insert|. +% \begin{macrocode} +\ifx\directlua\@undefined + \chardef\e@insert@top255 +\else + \chardef\e@insert@top\e@alloc@top +\fi +% \end{macrocode} +% If the classic registers are exausted, take an insert from the free float list +% and use |\extrafloats| to add a new float to that list. +% \changes{v2.2c}{2016/07/29}{fix for tlb-newinsert-001} +% \begin{macrocode} +\def\newinsert#1{% +\@tempswafalse +\global\advance\insc@unt\m@ne +\ifnum\count10<\insc@unt +\ifnum\count11<\insc@unt +\ifnum\count12<\insc@unt +\ifnum\count14<\insc@unt + \@tempswatrue +\fi\fi\fi\fi +\if@tempswa +\allocationnumber\insc@unt +\else +\global\advance\insc@unt\@ne + \extrafloats\@ne + \@next\@currbox\@freelist + {\ifnum\@currbox<\e@insert@top + \allocationnumber\@currbox + \else + \ch@ck0\m@ne\insert + \fi}% + {\ch@ck0\m@ne\insert}% +\fi +\global\chardef#1\allocationnumber +\wlog{\string#1=\string\insert\the\allocationnumber}% +} +% \end{macrocode} +% \begin{macrocode} +\fi +%</2ekernel|latexrelease> +% \end{macrocode} +% +% \begin{macrocode} +%<latexrelease>\EndIncludeInRelease +%<latexrelease>\IncludeInRelease{0000/00/00}% +%<latexrelease> {\newinsert}{Extended \newinsert}% +%<latexrelease>\let\e@insert@top\@undefined +%<latexrelease>\def\newinsert#1{\global\advance\insc@unt \m@ne +%<latexrelease> \ch@ck0\insc@unt\count +%<latexrelease> \ch@ck1\insc@unt\dimen +%<latexrelease> \ch@ck2\insc@unt\skip +%<latexrelease> \ch@ck4\insc@unt\box +%<latexrelease> \allocationnumber\insc@unt +%<latexrelease> \global\chardef#1\allocationnumber +%<latexrelease> \wlog{\string#1=\string\insert\the\allocationnumber}} +%<latexrelease>\EndIncludeInRelease +%<*2ekernel> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ch@ck} +% \begin{macrocode} +\gdef\ch@ck#1#2#3{% + \ifnum\count1#1<#2\else + \errmessage{No room for a new #3}% + \fi} +% \end{macrocode} +% \end{macro} +% +% \changes{v2.0h}{2015/06/19}{delete spurious old definition of \cs{newtoks}} +% \begin{macro}{\newhelp} +% \begin{macrocode} +\def\newhelp#1#2{\newtoks#1#1\expandafter{\csname#2\endcsname}} +% \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} +% +% 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} +% This generates a |/| acting a bit like |-| but still allows hyphenation +% in the word part preceding it (but not after). +% \begin{macrocode} +\def\slash{/\penalty\exhyphenpenalty} +% \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 unnecessary 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@}} +% \changes{v1.1y}{2005/09/27}{Macro no longer used but +% left for compatibility} +% The definition of this macro in plain.tex was improved in +% about 1997; but as a result its usage was changed and its new +% definition is not appropriate for \LaTeX{}. +% +% Since the version given here has been in use by +% \LaTeX{} for many years it does not seem prudent to remove it now. +% As far as we can tell it has only been used to define~|\b| and~|\d| +% but this cannot be certain. +% \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} +% +% \begin{macro}{\ltx@sh@ft} +% \changes{v1.1y}{2005/09/27}{New macro} +% This is the \LaTeX{} version of the second incarnation of the plain +% macro |\sh@ft|, which takes a dimension as its argument. It shifts +% a pseudo-accent horizontally by an amount proportional to the product +% of its argument and the slant-per-point (fontdimen 1). +% +% \begin{macrocode} +\def\ltx@sh@ft #1{% + \dimen@ #1% + \kern \strip@pt + \fontdimen1\font \dimen@ + } % kern by #1 times the current slant +% \end{macrocode} +% \end{macro} +% +% +% +% \LaTeX{} change: the text commands such as +% |\d|, |\b|, |\c|, |\copyright|,~|\TeX| +% are now 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 beginning 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} +\gdef\loggingoutput{\tracingoutput\@ne + \showboxbreadth\maxdimen\showboxdepth\maxdimen\errorstopmode} +\gdef\showoutput{\loggingoutput\showoverfull} +%</2ekernel> +% \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} +% \changes{v2.0b}{2012/01/20}{etex tracing if available} +% \changes{v2.0d}{2015/02/20}{Spell commands correctly :-)} +% \changes{v2.0g}{2015/03/10}{Reorganise to be less noisy} +% \begin{macrocode} +%<latexrelease>\IncludeInRelease{2015/01/01}{\loggingall}{etex tracing}% +%<*2ekernel|latexrelease> +\ifx\tracingscantokens\@undefined +\gdef\loggingall{% + \tracingstats\tw@ + \tracingpages\@ne + \tracinglostchars\@ne + \tracingparagraphs\@ne + \errorcontextlines\maxdimen + \loggingoutput + \tracingmacros\tw@ + \tracingcommands\tw@ + \tracingrestores\@ne + }% +\else +\gdef\loggingall{% + \tracingstats\tw@ + \tracingpages\@ne + \tracinglostchars\tw@ + \tracingparagraphs\@ne + \tracinggroups\@ne + \tracingifs\@ne + \tracingscantokens\@ne + \tracingnesting\@ne + \errorcontextlines\maxdimen + \loggingoutput + \tracingmacros\tw@ + \tracingcommands\thr@@ + \tracingrestores\@ne + \tracingassigns\@ne +}% +\fi +\gdef\tracingall{\showoverfull\loggingall} +%</2ekernel|latexrelease> +%<latexrelease>\EndIncludeInRelease +%<latexrelease>\IncludeInRelease{0000/00/00}{\loggingall}{etex tracing}% +%<latexrelease>\gdef\loggingall{\tracingcommands\tw@\tracingstats\tw@ +%<latexrelease> \tracingpages\@ne\tracinglostchars\@ne +%<latexrelease> \tracingmacros\tw@\tracingparagraphs\@ne\tracingrestores\@ne +%<latexrelease> \errorcontextlines\maxdimen\loggingoutput} +%<latexrelease> \gdef\tracingall{\loggingall\showoverfull} +%<latexrelease>\EndIncludeInRelease +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\tracingnone} +% \changes{v2.0g}{2015/03/10}{macro added} +% \begin{macro}{\hideoutput} +% \changes{v2.0g}{2015/03/10}{macro added} +% \begin{macrocode} +%<latexrelease>\IncludeInRelease{2015/01/01}{\tracingnone}% +%<latexrelease> {turn off etex tracing}% +%<*2ekernel|latexrelease> +\ifx\tracingscantokens\@undefined +\def\tracingnone{% + \tracingonline\z@ + \tracingcommands\z@ + \showboxdepth\m@ne + \showboxbreadth\m@ne + \tracingoutput\z@ + \errorcontextlines\m@ne + \tracingrestores\z@ + \tracingparagraphs\z@ + \tracingmacros\z@ + \tracinglostchars\@ne + \tracingpages\z@ + \tracingstats\z@ +}% +\else +\def\tracingnone{% + \tracingassigns\z@ + \tracingrestores\z@ + \tracingonline\z@ + \tracingcommands\z@ + \showboxdepth\m@ne + \showboxbreadth\m@ne + \tracingoutput\z@ + \errorcontextlines\m@ne + \tracingnesting\z@ + \tracingscantokens\z@ + \tracingifs\z@ + \tracinggroups\z@ + \tracingparagraphs\z@ + \tracingmacros\z@ + \tracinglostchars\@ne + \tracingpages\z@ + \tracingstats\z@ +}% +\fi +% \end{macrocode} +% +% \begin{macrocode} +\def\hideoutput{% + \tracingoutput\z@ + \showboxbreadth\m@ne + \showboxdepth\m@ne + \tracingonline\m@ne +}% +% \end{macrocode} +% +% \begin{macrocode} +%</2ekernel|latexrelease> +%<latexrelease>\EndIncludeInRelease +%<latexrelease>\IncludeInRelease{0000/00/00}{\tracingnone}% +%<latexrelease> {turn off etex tracing}% +%<latexrelease>\let\tracingnone\@undefined +%<latexrelease>\let\hideoutput\@undefined +%<latexrelease>\EndIncludeInRelease +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \LaTeX\ change: |\showhyphens| Defined later. +% +% Punctuation affects the spacing. +% \begin{macrocode} +%<*2ekernel> +\nonfrenchspacing +%</2ekernel> +% \end{macrocode} +% +% +% \Finale +% |