From b1c871653d37d9c6fd0f97b048dca051b5b1db27 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 12 Jan 2006 23:46:46 +0000 Subject: trunk/Master/texmf-dist/tex/plain git-svn-id: svn://tug.org/texlive/trunk@621 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/plain/base/fontchart.tex | 89 ++ Master/texmf-dist/tex/plain/base/gkpmac.tex | 859 ++++++++++++++++ Master/texmf-dist/tex/plain/base/letter.tex | 119 +++ Master/texmf-dist/tex/plain/base/list.tex | 47 + Master/texmf-dist/tex/plain/base/llist.tex | 67 ++ Master/texmf-dist/tex/plain/base/manmac.tex | 715 ++++++++++++++ Master/texmf-dist/tex/plain/base/mftmac.tex | 55 ++ Master/texmf-dist/tex/plain/base/mptmac.tex | 89 ++ Master/texmf-dist/tex/plain/base/picmac.tex | 178 ++++ Master/texmf-dist/tex/plain/base/plain.tex | 1241 ++++++++++++++++++++++++ Master/texmf-dist/tex/plain/base/story.tex | 18 + Master/texmf-dist/tex/plain/base/testfont.tex | 208 ++++ Master/texmf-dist/tex/plain/base/webmac.tex | 206 ++++ Master/texmf-dist/tex/plain/base/wlist.tex | 53 + 14 files changed, 3944 insertions(+) create mode 100644 Master/texmf-dist/tex/plain/base/fontchart.tex create mode 100644 Master/texmf-dist/tex/plain/base/gkpmac.tex create mode 100644 Master/texmf-dist/tex/plain/base/letter.tex create mode 100644 Master/texmf-dist/tex/plain/base/list.tex create mode 100644 Master/texmf-dist/tex/plain/base/llist.tex create mode 100644 Master/texmf-dist/tex/plain/base/manmac.tex create mode 100644 Master/texmf-dist/tex/plain/base/mftmac.tex create mode 100644 Master/texmf-dist/tex/plain/base/mptmac.tex create mode 100644 Master/texmf-dist/tex/plain/base/picmac.tex create mode 100644 Master/texmf-dist/tex/plain/base/plain.tex create mode 100644 Master/texmf-dist/tex/plain/base/story.tex create mode 100644 Master/texmf-dist/tex/plain/base/testfont.tex create mode 100644 Master/texmf-dist/tex/plain/base/webmac.tex create mode 100644 Master/texmf-dist/tex/plain/base/wlist.tex (limited to 'Master/texmf-dist/tex/plain/base') diff --git a/Master/texmf-dist/tex/plain/base/fontchart.tex b/Master/texmf-dist/tex/plain/base/fontchart.tex new file mode 100644 index 00000000000..6acc6211551 --- /dev/null +++ b/Master/texmf-dist/tex/plain/base/fontchart.tex @@ -0,0 +1,89 @@ +% make a (fairly large) font chart + +\newlinechar=`@ +\message{@Name of the font to chart = } +\read-1 to \fontname + +\font\f=\fontname at .75in +\f + +% Here's the best way I know to discover character height and depth +% when they are possibly negative. +\fontdimen5\f=-10000pt % a new (rather small) xheight +\textfont0=\f +\newdimen\h \newdimen\d % will be set to the character's height, depth +\def\htdp#1{\setbox0=\hbox{\char#1}\h=-\ht0 + \setbox0=\hbox{\accent#1\char#1}\advance\h\ht0 \advance\h-10000pt + \setbox0=\null \wd0=-10000pt % in case the character has a charlist! + \setbox0=\hbox{$\mathaccent#1{\box0}$}% + \d=\ht0 \advance\d-10000pt \advance\d-\h} + +% (By the way, my previous best was this: +% \textfont15=\f % use family "F +% \fontdimen8\tenex=0pt % set defaultrulethickness zero +% \setbox1=\null \ht1=-10000pt \setbox2=\null \dp3=-10000pt +% \newdimen\d \newdimen\h \newcount\n +% \n=#1 \advance\n"F00 +% \setbox0=\hbox{$\radical\n{\copy1}$} +% \d=\dp0 \advance\d-5000pt \advance\d\d %\showthe\d +% \setbox0=\hbox{$\radical\n{\copy2}$} +% \h=\ht0 \advance\h-5000pt \advance\h-.5\d +% \ifdim\h>0pt \h=.5\h \fi +% ....very tricky! But it works only when height+depth is positive.) + +\tracinglostchars=0 +\nopagenumbers + +\def\testrow#1#2{\setbox0=\hbox{\penalty1\def\\{\char'#1#2}% + \\0\\1\\2\\3\\4\\5\\6\\7\global\chardef\p=\lastpenalty}} % p=1 if none there + +\raggedbottom +\baselineskip=1in +\topskip=.75in +\newdimen\w \w=.75in +\headline={\vtop{\hbox{\tt\fontname\unskip, page \folio\hfil} + \kern-.75in\unitsdigits}\hss} +\footline={\unitsdigits\hss} +\def\unitsdigits{\hbox{\kern.3in \tt + \hbox to\w{\ \ 0\hss}% + \hbox to\w{\ \ 1\hss}% + \hbox to\w{\ \ 2\hss}% + \hbox to\w{\ \ 3\hss}% + \hbox to\w{\ \ 4\hss}% + \hbox to\w{\ \ 5\hss}% + \hbox to\w{\ \ 6\hss}% + \hbox to\w{\ \ 7\hss}}} + +\def\row#1#2{\testrow#1#2% +\ifnum\p=0\hbox{\hbox to.3in{\tt#1#2\hfil}% + \mod#1#20\mod#1#21\mod#1#22\mod#1#23\mod#1#24\mod#1#25\mod#1#26\mod#1#27% + \hbox to.3in{\tt\hfil#1#2}}\fi} + +\newdimen\pixel \pixel=.00333333in +\def\mod#1#2#3{\chardef\c='#1#2#3 \htdp\c + \setbox0=\hbox{\penalty1\c\global\chardef\p=\lastpenalty}% + \ifnum\p=1 \hbox to\w{}\else + \setbox2=\hbox{\c\/}% + \hbox to\w{\kern-\pixel \vrule width\pixel height\h depth\d + \copy\leftbox\copy0\copy\rightbox + \vrule width\pixel height\h depth\d \kern-\pixel \kern-\wd0 + \raise\h\vbox{\hrule height\pixel width\wd0}\kern-\wd0 + \lower\d\vbox{\hrule height0pt depth\pixel width\wd0}\kern-\wd0 + \ifdim\wd2>\wd0 \kern\wd2\raise\h\copy\icbox \fi + \hss}\fi} + +\newbox\leftbox % marking the baseline at the left +\setbox\leftbox=\hbox{\kern-\pixel\vrule width\pixel height4pt + \vrule height0pt depth\pixel width4pt \kern-4pt} +\newbox\rightbox % marking the baseline at the right +\setbox\rightbox=\hbox{\kern-4pt\vrule height0pt depth\pixel width4pt + \vrule width\pixel height4pt \kern-\pixel} +\newbox\icbox % the mark of an italic correction +\setbox\icbox=\hbox{\kern-4pt\vrule height\pixel width4pt depth0pt + \vrule width\pixel depth4pt} + +\row00 \row01 \row02 \row03 \row04 \row05 \row06 \row07 +\row10 \row11 \row12 \row13 \row14 \row15 \row16 \row17 +\row20 \row21 \row22 \row23 \row24 \row25 \row26 \row27 +\row30 \row31 \row32 \row33 \row34 \row35 \row36 \row37 +\bye diff --git a/Master/texmf-dist/tex/plain/base/gkpmac.tex b/Master/texmf-dist/tex/plain/base/gkpmac.tex new file mode 100644 index 00000000000..cdcd7b9c087 --- /dev/null +++ b/Master/texmf-dist/tex/plain/base/gkpmac.tex @@ -0,0 +1,859 @@ +\tracingpages=1 % TEMPORARY! +% Macros for `Concrete Mathematics' +\ifx\gkpmac\fmtversion\endinput\else\let\gkpmac=\fmtversion\fi + +% Fonts for regular text + +\font\textrm=ccr10 % roman +\font\textit=ccti10 % italic (emphasis) +\font\textsl=ccsl10 % slanted (titles) +\font\textbf=cmbx10 % bold +\font\textcsc=cccsc10 % caps and small caps +\font\oldsty=ccmi10 % equation numbers + +% Fonts for regular math +% I'm setting \fontdimen2 to zero because AMS forgot to do it; +% they may have fixed the problem in the meantime, but no harm is done + +\font\mathtext=ccr10 + \font\mathsubtext=ccr7 + \font\mathsubsubtext=ccr5 +\font\mathlet=eurm10 \fontdimen2\mathlet=0pt + \font\mathsublet=eurm7 \fontdimen2\mathsublet=0pt + \font\mathsubsublet=eurm5 \fontdimen2\mathsubsublet=0pt + \skewchar\mathlet='177 \skewchar\mathsublet='177 \skewchar\mathsubsublet='177 +\font\mathsym=cmsy10 + \font\mathsubsym=cmsy7 + \font\mathsubsubsym=cmsy5 + \skewchar\mathsym='60 \skewchar\mathsubsym='60 \skewchar\mathsubsubsym='60 +\font\mathext=cmex10 + \font\mathsubext=cmex10 + \font\mathsubsubext=cmex10 +\font\mathscr=euxm10\fontdimen2\mathscr=0pt + \font\mathsubscr=euxm7 \fontdimen2\mathsubscr=0pt + \font\mathsubsubscr=euxm5 \fontdimen2\mathsubsubscr=0pt + \skewchar\mathscr='60 \skewchar\mathsubscr='60 \skewchar\mathsubsubscr='60 +\font\mathfr=eufm10\fontdimen2\mathfr=0pt + \font\mathsubfr=eufm7 \fontdimen2\mathsubfr=0pt + \font\mathsubsubfr=eufm5 \fontdimen2\mathsubsubfr=0pt +\font\matheuex=euex10\fontdimen2\matheuex=0pt + +\font\eulerbf=eurb10 \fontdimen2\eulerbf=0pt % not hooked in to these macros + +% Fonts for graffiti + +\font\gtext=ccslc9 +\font\goldstyle=ccmic9 + \fontdimen3\gtext=0pt \fontdimen4\gtext=0pt % no stretch or shrink +\font\gmathtext=ccr9 + \font\gmathsubtext=ccr6 + \font\gmathsubsubtext=ccr5 +\font\gmathlet=eurm10 scaled 900 \fontdimen2\gmathlet=0pt + \font\gmathsublet=eurm7 scaled 857 \fontdimen2\gmathsublet=0pt + \font\gmathsubsublet=eurm5 \fontdimen2\gmathsubsublet=0pt + \skewchar\gmathlet='177 \skewchar\gmathsublet='177 + \skewchar\gmathsubsublet='177 +\font\gmathsym=cmsy9 + \font\gmathsubsym=cmsy6 + \font\gmathsubsubsym=cmsy5 + \skewchar\gmathsym='60 \skewchar\gmathsubsym='60 \skewchar\gmathsubsubsym='60 +\font\gmathext=cmex9 + \font\gmathsubext=cmex9 + \font\gmathsubsubext=cmex9 +\font\gmathscr=euxm10 scaled 900 \fontdimen2\gmathscr=0pt + \font\gmathsubscr=euxm7 scaled 857 \fontdimen2\gmathsubscr=0pt + \font\gmathsubsubscr=euxm5 \fontdimen2\gmathsubsubscr=0pt + \skewchar\gmathscr='60 \skewchar\gmathsubscr='60 \skewchar\gmathsubsubscr='60 +\font\gmathfr=eufm10 scaled 900 \fontdimen2\gmathfr=0pt + \font\gmathsubfr=eufm7 scaled 857 \fontdimen2\gmathsubfr=0pt + \font\gmathsubsubfr=eufm5 \fontdimen2\gmathsubsubfr=0pt +\font\gmatheuex=euex9 \fontdimen2\gmatheuex=0pt + +% Fonts for headings, etc. + +\font\chapfont=cmbxcd10 scaled 8000 +\font\title=cmbx10 scaled \magstep5 +\font\subtitle=cmbx10 scaled 1315 % that's magstep 1.5 +\font\subsubtitle=cmbxsl10 +\font\runhead=cmbx9 +\font\foliofont=cmr9 +\font\gtfont=cmmi9 % for the \t accent +\font\ninesl=ccsl9 % used in the index only + +% Normal text conventions + +\catcode`@=11 % borrow the private macros of PLAIN (with care) +\def\wlog#1{} % don't put allocation info into the log + +\hsize=28pc +\vsize=45.25pc +\parindent=20pt +\baselineskip=13pt + +\let\sc=\textcsc +\let\bf=\textbf +\def\textindent#1{\noindent\hbox to\parindent{\bf#1\hfil}\ignorespaces} +\def\exitem{\hangindent2\parindent \textindent} + +\textfont0=\mathtext + \scriptfont0=\mathsubtext + \scriptscriptfont0=\mathsubsubtext +\textfont1=\mathlet \let\tfont=\teni + \scriptfont1=\mathsublet + \scriptscriptfont1=\mathsubsublet +\textfont2=\mathsym + \scriptfont2=\mathsubsym + \scriptscriptfont2=\mathsubsubsym +\textfont3=\mathext + \scriptfont3=\mathsubext + \scriptscriptfont3=\mathsubsubext +\def\rm{\fam\z@\textrm} +\def\it{\fam\itfam\textit} % \it is family 4, defined in PLAIN +\def\sl{\textsl} +\textfont\itfam=\textit +\newfam\scrfam \ifnum\scrfam=8\relax\else\error\fi % family 8, script +\textfont\scrfam=\mathscr + \scriptfont\scrfam=\mathsubscr + \scriptscriptfont\scrfam=\mathsubsubscr +\def\scr{\fam8 } +\mathcode`0="7130 +\mathcode`1="7131 +\mathcode`2="7132 +\mathcode`3="7133 +\mathcode`4="7134 +\mathcode`5="7135 +\mathcode`6="7136 +\mathcode`7="7137 +\mathcode`8="7138 +\mathcode`9="7139 +\newfam\frfam % family 9, fraktur +\textfont\frfam=\mathfr + \scriptfont\frfam=\mathsubfr + \scriptscriptfont\frfam=\mathsubsubfr +\def\frak{\fam9 } +\newfam\euexfam % family 10, substitions for euler symbols +\newfam\eqfam % family 11, cmr equal signs for Relbar (!) +\font\teneq=cmr10 \textfont\eqfam=\teneq +\font\nineeq=cmr9 +% I'm not using Relbar except in 9&10pt, so this family is very incomplete... + +\mathchardef\intop="1A52 +\mathchardef\ointop="1A48 +\mathchardef\coprod="1A60 +\mathchardef\prod="1A51 +\mathchardef\sum="1A50 +\mathchardef\braceld="A7A \mathchardef\bracerd="A7B +\mathchardef\bracelu="A7C \mathchardef\braceru="A7D +\mathchardef\infty="0A31 + +\mathchardef\nearrow="3A25 +\mathchardef\searrow="3A26 +\mathchardef\nwarrow="3A2D +\mathchardef\swarrow="3A2E +\mathchardef\Leftrightarrow="3A2C +\mathchardef\Leftarrow="3A28 +\mathchardef\Rightarrow="3A29 +\mathchardef\leftrightarrow="3A24 \mathcode`\^^W="3A24 +\mathchardef\leftarrow="3A20 \let\gets=\leftarrow \mathcode`\^^X="3A20 +\mathchardef\rightarrow="3A21 \let\to=\rightarrow \mathcode`\^^Y="3A21 +\def\uparrow{\delimiter"3A22378 } \mathcode`\^^K="3A22 +\def\downarrow{\delimiter"3A23379 } \mathcode`\^^A="3A23 +\def\updownarrow{\delimiter"3A6C33F } +\def\Uparrow{\delimiter"3A2A37E } +\def\Downarrow{\delimiter"3A2B37F } +\def\Updownarrow{\delimiter"3A6D377 } +\mathchardef\leftharpoonup="3A18 +\mathchardef\leftharpoondown="3A19 +\mathchardef\rightharpoonup="3A1A +\mathchardef\rightharpoondown="3A1B + +\textfont\euexfam=\matheuex +\scriptfont\euexfam=\mathsubsym % this is OK since I don't use all characters +% of euex in subscripts/superscripts; otherwise I'd have to make euex7 and euex6 +\scriptscriptfont\euexfam=\mathsubsym % only for \mathchoice, not really chosen +\mathcode`+="292B +\mathcode`-="292D +\mathcode`!="0921 +\mathcode`(="4928 \delcode`(="928300 +\mathcode`)="5929 \delcode`)="929301 +\mathcode`[="495B \delcode`[="95B302 +\mathcode`]="595D \delcode`]="95D303 +\mathcode`=="393D +\mathchardef\Relbar="3B3D % we need the old = to match \Arrows +\mathchardef\Gamma="7100 +\mathchardef\Delta="7101 +\mathchardef\Theta="7102 +\mathchardef\Lambda="7103 +\mathchardef\Xi="7104 +\mathchardef\Pi="7105 +\mathchardef\Sigma="7106 +\mathchardef\Upsilon="7107 +\mathchardef\Phi="7108 +\mathchardef\Psi="7109 +\mathchardef\Omega="710A +\let\varsigma=\sigma \let\varrho=\rho % Euler doesn't have these +\mathchardef\aleph="0840 +\def\rbrace{\delimiter"5867A09 } \let\}=\rbrace +\def\lbrace{\delimiter"4866A08 } \let\{=\lbrace +%\mathchardef\equiv="3811 \let\cong=\equiv % lowres bars weren't spaced right +\mathchardef\leq="3814 \let\le=\leq +\mathchardef\geq="3815 \let\ge=\geq +\mathchardef\Re="083C +\mathchardef\Im="083D +\def\vert{\delimiter"86A30C } +\def\backslash{\delimiter"86E30F } + +\setbox\strutbox=\hbox{\vrule height9pt depth4pt width\z@}% +\newbox\bigstrutbox \newbox\biggstrutbox +\setbox\bigstrutbox=\hbox{\vrule height11pt depth4pt width\z@}% +\def\bigstrut{\relax\ifmmode\copy\bigstrutbox\else\unhcopy\bigstrutbox\fi} +\setbox\biggstrutbox=\hbox{\vrule height17pt depth10pt width\z@}% +\def\biggstrut{\relax\ifmmode\copy\biggstrutbox\else\unhcopy\biggstrutbox\fi} +\rm + +\newmuskip\normalthick \normalthick=5mu plus 5mu +\newmuskip\normalmedmu \normalmedmu=\medmuskip +\newmuskip\displaythick \displaythick=10mu minus 3mu +\everymath{\thickmuskip=\normalthick} + +\abovedisplayskip=8pt plus 3pt minus 2pt % there's 2pt more (opened up) +\belowdisplayskip=10pt plus 3pt minus 2pt + +% displays not centered; all have capability of \eqalign +\outer\def\begindisplay{\obeylines\startdisplay} +{\obeylines\gdef\startdisplay#1 + {\catcode`\^^M=5$$% + \advance\displayindent\parindent\advance\displaywidth-\parindent% + \openup2pt #1\halign\bgroup\span\preamble\cr}} +\outer\def\enddisplay{\crcr\egroup$$} +\jot=\z@ % we do our own opening up + +\def\displaymath{$\thickmuskip=\displaythick\displaystyle} +\def\preamble{\hfil\displaymath{##}$&&\displaymath{{}##}$\hfil} +\def\tablepreamble{\bigstrut\hfil$##$\hfil\ &\vrule##&&\quad\hfil$##$\hfil} +\def\xbox{\qquad\hbox} % for third column of explanation + +\newcount\eqcount +\def\equ(#1.#2){{\rm({\oldsty#1}.{\oldsty#2})}} +\def\eq(#1){\equ(\chapno.#1)} +\def\thiseq{\xdef\next{(\chapno.\number\eqcount)}\expandafter\equ\next} +\def\eqno{\global\advance\eqcount 1 \global\everycr{\makeeqno\thiseq}} +\newdimen\backup +\def\makeeqno#1{\noalign{\global\everycr{}% + \advance\displaywidth\displayindent + \setbox0=\hbox to\displaywidth{\hfil#1}% + \backup=\prevdepth \advance\backup\ht0 + \setbox0=\vbox{\kern-\backup\box0}\ht0=\z@ \dp0=\z@ + \setbox0=\vbox{\box0}\unvbox0}} % that puts equation number on prev line! + +\newif\iftitle +\newskip\chaptopspace \chaptopspace=1in minus 5pt +\def\beginchapter#1 #2 \par{ % we should be at top of a page + \titletrue \eqcount=0 + \ifodd\pageno + \rightline{\chapfont#1\kern-.05em} + \vskip\chaptopspace + \rightline{\title#2} + \moveleft7pc % this applies to the \vbox after the \fi + \else % left-hand page + \leftline{\kern-.05em\chapfont#1} + \vskip\chaptopspace + \leftline{\title#2} \fi + \vbox{\hrule width 35pc} + \def\chapno{#1} \edef\chaptitle{#2} + \mark{#1\enspace #2} + \smallskip\noindent} + +\def\beginsection#1 #2 \par{ % should not be first in the chapter + \backup=\lastskip % but should come on first or second page of chapter + \mark{#1\enspace #2} % because the mark gives running head on right page + \nobreak\vskip-\backup\penalty-200 + {\subtitle\baselineskip=34pt + \noindent\hbox to2\parindent{#1\hfil}\uppercase{\kern-.05em#2}\par} + \nobreak\vskip5pt\noindent\hbox to2\parindent{}} + +\newcount\excount +\def\beginexercises{\backup=\lastskip \excount=0 + \mark{\chapno\enspace Exercises} + \nobreak\vskip-\backup\penalty-200 + {\subtitle\baselineskip=34pt\noindent Exercises\par}\nobreak} + +{\catcode`\|=\active +\gdef\table#1\tabref|#2|{\hrule height1pt width\hsize \kern2pt + \noindent\strut{\bf Table |#2|\enspace}#1\par + \hrule height.5pt width\hsize\tabref|#2|}} + +\def\medbr{\ifnum\lastpenalty>9999 \medskip \else\medbreak\fi} +\def\subhead#1\par{\medbr + {\subsubtitle\noindent#1\par}\nobreak} +\def\ex:{\par{\advance\medskipamount-1pt\medbr}% + \advance\excount 1 \item{\number\excount}} + +\def\dash---{\thinspace---\hskip.16667em\relax} +\def\qback{\kern-.15em} % between , or . and '' +\def\undertext#1{$\underline{\smash{\hbox{#1}}}$} +\def\newline{\hfil\break} +\def\Hint:{{\it Hint:\/}} +\let\macron=\= % we will use \= for congruence relation +\def\t#1{{\edef\next{\the\font}\tfont\accent"7F\next#1}} + +% Here's a definition that was corrected in plain.tex version 3.14159; +% I'm keeping the old version here, because I had already been compensating +% for its deficiencies in script and scriptscript styles; without this +% buggy version, it would be hard for me to match the old pages precisely +\def\bmod{\mskip-\medmuskip\mkern5mu + \mathbin{\rm mod}\penalty900\mkern5mu\mskip-\medmuskip} + +% Graffiti macros +\chardef\other=12 +\newread\grfi \openin\grfi=\jobname.grf +%\newwrite\grfo \immediate\openout\grfo=\jobname.grf % let's hope no conflict +%% Hmmm...; that doesn't work on Unix. +%% Here's my first solution, a kludge where I alternated between .grf and .gr +%\newif\ifgrf \newwrite\grfo \newwrite\grfempty +%\ifeof\grfi \grffalse +%\else\read\grfi to\grfitest \ifeof\grfi \grffalse \else \grftrue \fi\fi +%\ifgrf\else \openin\grfi=\jobname.gr +% \ifeof\grfi\else\read\grfi to\grfitest \fi\fi +%\immediate\openout\grfo=\jobname.gr\ifgrf\else f\fi +%\immediate\write\grfo{} % an empty line will start a nonempty file (Unix only) +%% and then at the end I said +% \immediate\openout\grfempty=\jobname.gr\ifgrf f\fi % clear the input file +%% That solution worked with the following original macros +%\def\testnextgrf{{\def\do##1{\catcode`##1=\other}\dospecials +% \global\read\grfi to\next}\expandafter\testgrf\meaning\next\testgrf} +%\expandafter\def\expandafter\testgrf\meaning\empty#1 #2\testgrf{% +% \setup#2!!!!!$\ifx\thisone\thatone\if#1R\Rtrue\else\Rfalse\fi\else\Rguess\fi} +%% Anyway, here's my second approach to Unix: (order n^2 algorithm) +\def\\{{\def\do##1{\catcode`##1=\other}\dospecials \endlinechar=-1 \let\eol=0 + \gdef\grfmem{} + \expandafter\def\expandafter\gbbl\meaning\empty{} + \def\appgrf{\read\grfi to\g + \ifx\g\empty\else\xdef\grfmem{\grfmem\expandafter\gbbl\meaning\g\eol}\fi} + \def\next{\ifeof\grfi\let\next\relax\else\appgrf\fi\next}\next}} +\\ % now \grfmem is "L aaaaa\eol R bbbbb\eol ... R zzzzz\eol". +\def\testnextgrf#1 #2\eol#3\\{\gdef\grfmem{#3}\setup#2!!!!!$% + \ifx\thisone\thatone\if#1R\Rtrue\else\Rfalse\fi\else\Rguess\fi} +\newwrite\grfo \immediate\openout\grfo=\jobname.grf % no conflict now + +\def\graffiti{% set up graffiti style + \hsize=6pc + \baselineskip=10pt \lineskip=0pt \lineskiplimit=0pt + \parindent=0pt + \mathsurround=1pt + \textfont0=\gmathtext + \scriptfont0=\gmathsubtext + \scriptscriptfont0=\gmathsubsubtext + \textfont1=\gmathlet \let\tfont=\gtfont + \scriptfont1=\gmathsublet + \scriptscriptfont1=\gmathsubsublet + \textfont2=\gmathsym + \scriptfont2=\gmathsubsym + \scriptscriptfont2=\gmathsubsubsym + \textfont3=\gmathext + \scriptfont3=\gmathsubext + \scriptscriptfont3=\gmathsubsubext +\textfont\scrfam=\gmathscr + \scriptfont\scrfam=\gmathsubscr + \scriptscriptfont\scrfam=\gmathsubsubscr +\textfont\frfam=\gmathfr + \scriptfont\frfam=\gmathsubfr + \scriptscriptfont\frfam=\gmathsubsubfr +\textfont\euexfam=\gmatheuex +\scriptfont\euexfam=\gmathsubsym % OK since I don't use all chars in this size +\textfont\eqfam=\nineeq + \def\rm{\fam\z@\gtext}% + \let\oldsty=\goldstyle + \let\big=\ninebig + \setbox\strutbox=\hbox{\vrule height7.25pt depth2.75pt width\z@}% + \gtext + \rightskip=\z@ plus2em % ragged right + \tolerance=2000 + \hyphenpenalty=300 + \exhyphenpenalty=300 + \doublehyphendemerits=100000 + \finalhyphendemerits=\doublehyphendemerits + } +\def\ninebig#1{{\hbox{$\textfont0=\tenrm\textfont2=\tensy + \left#1\vbox to7.25pt{}\right.\n@space$}}} +\def\grafctr{\hbox to4.5pc{\hfil##\hfil}} + +\newif\ifR % does this entry go on a right-hand page? +\def\Rguess{\def\ifR{\ifodd\pageno}} +\long\def\g#1\g{\def\next{#1!!!!!}\expandafter\writegrf\meaning\next$% + \ifx\grfmem\empty\Rguess\else\expandafter\testnextgrf\grfmem\\\fi +% pre-Unix, that line was \ifeof\grfi\Rguess\else\testnextgrf\fi + \setbox0=\vtop{\graffiti#1% + \write\m@ne\ifR{\Rcheck}\else{\Lcheck}\fi}% log file records successes + \ifvmode\kern-\prevdepth\kern-\ht0\dp0=\z@\nointerlineskip\bgroup + \else\dp0=\dp\strutbox\strut\vadjust{\kern-\dp\strutbox\kern-\ht0\fi + \ifR\moveleft7\else\moveright29\fi pc\box0}} +\expandafter\def\expandafter\writegrf\meaning\empty#1#2#3#4#5#6${% + \write\grfo{\LorR #1#2#3#4#5}\def\thisone{#1#2#3#4#5}} +\def\setup#1#2#3#4#5#6${\def\thatone{#1#2#3#4#5}} +\def\LorR{\ifodd\pageno R \else L \fi} +\def\Lcheck{\ifodd\pageno Bad guess!\fi} +\def\Rcheck{\ifodd\pageno\else Bad guess!\fi} + +% Page layout +\newif\ifpreprint \preprinttrue % should be false when making the final copy +\newdimen\pageheight \pageheight=\vsize +\newdimen\totheight \totheight=49.5pc +\newdimen\folioht \setbox0=\hbox{\foliofont0} \folioht=\ht0 +\def\leftheadline{\hbox to35pc{\vbox to 10pt{}% strut to position the baseline + \llap{\kern-2pc\iftitle\leftcorner\else\foliofont\folio\fi\hfil}% + \iftitle\hfil\copyrite\else\runhead\uppercase\expandafter{\chaptitle}\hfil\fi}} +\def\rightheadline{\hbox to35pc{\iftitle\copyrite\fi\hfil + \vbox to 10pt{}% strut to position the baseline + \runhead\uppercase\expandafter{\topmark}% + \rlap{\hfil\iftitle\rightcorner\else\foliofont\folio\fi\kern-2pc}}} +\def\leftcorner{\vrule\vbox to\folioht{\hrule width9pt\vfil}} +\def\rightcorner{\vbox to\folioht{\hrule width9pt\vfil}\vrule} +\def\copyrite{\ifpreprint{\textfont2=\sevensy\sevenrm\copyright\ 1988 + Addison-Wesley Publishing Company; all rights reserved}\fi} + +\def\onepageout#1{\escapechar=-1 % for writing \tabrefs + \shipout\vbox to\totheight{ % here we define one page of output + \offinterlineskip % butt the boxes together + \vbox to 2pc{ % this part goes on top of the regular pages + \ifodd\pageno \rightheadline\else\leftheadline\fi + \vfill} % this completes the \vbox to 2pc + \ifodd\pageno\moveright7pc\fi #1 + \vfill + \iftitle \global\titlefalse % reset the titlepage switch + \ifodd\pageno \hbox to35pc{\hfil\foliofont\folio} + \else\hbox{\foliofont\folio}\fi\fi + \ifpreprint\ifinxmode\makeinxfooter\fi\fi + } + \advancepageno} + +\output{\onepageout{\pagebody}} + +\newbox\inxfootbanner +\def\hours{\count0=\time \divide\count0 by60 % find the o'clock + \multiply\count0 by40 \advance\count0\time % convert to hhmm + \advance\count0 10000 \expandafter\gobbleone\number\count0\relax} +\def\gobbleone1{} +\setbox\inxfootbanner=\rlap{\hbox to 6.5in{\hrulefill\sevenrm\quad + Author's page proof produced by \TeX\ at + \hours\space on \ifcase\month\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi + \space\number\day}} +\def\makeinxfooter{\vbox to0pt{\kern10pt\copy\inxfootbanner\kern4pt + \rlap{\vbadness=\maxdimen \inxcolumns}\vss}} +\def\inxcolumns{\ifvoid\inxbox\let\next\relax\else\let\next\contribcol\fi\next} +\def\contribcol{\setbox0=\vsplit\inxbox to54pt + \vtop{\unvbox0}\kern20pt \inxcolumns} +\def\inxstyle{\vrule height6pt depth2pt width\z@ \sevenrm} +\splittopskip=6pt + +% Cross references + +% \ref{value}|name| gives value to |name| +% \eqref|name| gives \eqcount to |name| +% \exref|name| gives \excount to |name| +% \tabref|name| gives appropriate page number to |name| +% \refin foo inputs references from job foo (other than this job) +% \showmissestrue if you want to see missing references + +\newif\ifshowmisses +\def\vertical{|} +\def\inref#1 #{\expandafter\def\csname\vertical#1\endcsname} + +\catcode`\|=\active +\expandafter\def\expandafter\dospecials\expandafter{\dospecials\do\|} +\newcount\defcount % number of old definitions not yet repeated +\newcount\changecount % number of new definitions that are changed +\newcount\miscount % number of unknown references + +\newread\tempin +\def\refin#1 {\openin\tempin=#1.ref + \ifeof\tempin\closein\tempin + \else\closein\tempin \let|\inref \input#1.ref \let|\crossref \fi} + +{\let\|=\jobname + \def\def{\global\advance\defcount1 \gdef}\expandafter\refin\| } +\newwrite\refo \immediate\openout\refo=\jobname.ref + +\def\ref#1|#2|{\xdef\temp{#1}\expandafter\dordef\csname\vertical#2\endcsname} +\def\dordef#1{\ifx#1\temp \global\advance\defcount-1 + \else\global\advance\changecount1 \global\let#1\temp\fi + {\escapechar=-1\immediate\write\refo{\noexpand#1{\temp}}}} +\def\eqref{\ref{\number\eqcount}} +\def\exref{\ref{\number\excount}} +\def\tabref|#1|{\expandafter\pageref\csname\vertical#1\endcsname} +\def\pageref#1{\ifx#1\relax\else\global\advance\defcount-1 \fi + \write\refo{\noexpand#1{\number\pageno}}% + \write\m@ne{\ifx#1\relax New Pageref!\else + \ifnum#1=\pageno\else Changed Pageref!\fi\fi}} +\def\crossref#1|{\expandafter\usedef\csname\vertical#1\endcsname} +\def\usedef#1{\ifx#1\relax + \ifshowmisses\showmiss#1\fi\global\advance\miscount1 ??\else #1\fi} +\let|=\crossref +\def\showmiss#1{{\escapechar=-1% + \message{***** WARNING: Undefined reference #1\string|! *****}}} + +\def\cite#1.{\ifinxmode\write\bnx{[#1] \number\pageno.}\fi#1} +{\catcode`\@=\active +\gdef\newcite#1.{\ifinxmode\write\bnx{[#1'] \number\pageno.}\fi#1$'@$}} + +\outer\def\bye{ + \ifnum\miscount>0 + \message{(\the\miscount\space undefined references were present)}\fi + \ifnum\changecount>0 + \message{(\the\changecount\space new references written on \jobname.ref)}\fi + \ifnum\defcount>0 + \message{(\the\defcount\space old references dropped from \jobname.ref)}\fi + \par\vfill\supereject + \end} + +% Exercises + +\newwrite\ans +\immediate\openout\ans=\jobname.ans + +\outer\def\answer{\par + \immediate\write\ans{} + \immediate\write\ans{\string\ansno\chapno.\the\excount:} + \copytoblankline} +\def\copytoblankline{\begingroup\setupcopy\copyans} +\def\setupcopy{\def\do##1{\catcode`##1=\other}\dospecials \obeylines} +{\obeylines \gdef\copyans#1 + {\def\next{#1}% + \ifx\next\empty\let\next=\endgroup % + \else\immediate\write\ans{\next} \let\next=\copyans\fi\next}} + +\def\ansno#1:{\par\medbreak\def\thisansno{\source#1}% + \noindent\hbox to\parindent{\bf #1\hfil}\ignorespaces} + +% Pictures (a subset of \LaTeX's conventions) +\newskip\hsssglue \hsssglue=0pt plus 1fill minus 1fill \def\hsss{\hskip\hsssglue} + +\newdimen\unitlength \newdimen\linethickness +\newdimen\@picheight \newdimen\@xdim \newdimen\@ydim \newdimen\@len \newdimen\@save +\newcount\@multicount \newcount\@xarg \newcount\@yarg +\newbox\@picbox \newbox\@mpbox + +\font\tenln=line10 \font\tenlnw=linew10 +\font\tencirc=lcircle10 \font\tencircw=lcirclew10 +\font\smallln=linew10 scaled 483 % that's magstep-4 + +\def\thinlines{\let\linefont=\tenln \let\circlefont=\tencirc + \linethickness=\fontdimen8\linefont} +\def\thicklines{\let\linefont=\tenlnw \let\circlefont=\tencircw + \linethickness=\fontdimen8\linefont} +\thinlines + +\def\beginpicture(#1,#2)(#3,#4){\@picheight=#2\unitlength \let\line=\@line + \setbox\@picbox=\hbox to#1\unitlength\bgroup + \kern-#3\unitlength \lower#4\unitlength\hbox\bgroup\ignorespaces} +\def\endpicture{\egroup\hss\egroup + \ht\@picbox=\@picheight \dp\@picbox=\z@ + \leavevmode\box\@picbox} + +\def\put(#1,#2)#3{\raise#2\unitlength\rlap{\kern#1\unitlength #3}\ignorespaces} + +\def\multiput(#1,#2)(#3,#4)#5#6{\@multicount=#5 + \@xdim=#1\unitlength \@ydim=#2\unitlength \setbox\@mpbox=\hbox{#6}% + \loop\ifnum\@multicount>0 + \raise\@ydim\rlap{\kern\@xdim \unhcopy\@mpbox}% + \advance\@xdim#3\unitlength \advance\@ydim#4\unitlength + \advance\@multicount\m@ne \repeat\ignorespaces} + +\def\makebox(#1,#2)#3{\setbox\@picbox=\hbox to#1\unitlength{\hss#3\hss}% + \@ydim=\ht\@picbox \advance\@ydim-\dp\@picbox + \ht\@picbox=#2\unitlength \dp\@picbox=\z@ + \leavevmode\lower.5\@ydim\box\@picbox} + +\newif\ifneg +\def\@line(#1,#2)#3{\@xarg=#1 \@yarg=#2 \@len=#3\unitlength \leavevmode + \ifnum\@xarg<0 \reverseline \else \negfalse \@ydim=\z@\fi + \ifnum\@xarg=0 \@vline + \else\ifnum\@yarg=0 \@hline \else\@sline\fi\fi + \ifneg\kern-\@len\else\@save=\@ydim\fi} +\def\reverseline{\negtrue \kern-\@len \@xarg=-\@xarg + \@ydim=\@len \multiply\@ydim\@yarg \divide\@ydim\@xarg \@yarg=-\@yarg} + +\def\@hline{\vrule height.5\linethickness depth.5\linethickness width\@len} +\def\@vline{\kern-.5\linethickness\vrule width\linethickness + \ifnum\@yarg<0 height\z@ depth\else depth\z@ height\fi\@len + \kern-.5\linethickness} + +\def\@sline{\setbox\@picbox=\hbox{\linefont \count@=\@xarg \multiply\count@ 8 + \ifnum\@yarg>0 \advance\count@\@yarg \advance\count@-9 + \else \advance\count@-\@yarg \advance\count@ 55 \fi \char\count@}% + \ifnum\@yarg<0 \@picheight=-\ht\@picbox \advance\@ydim\@picheight + \else \@picheight=\ht\@picbox \fi + \@xdim=\wd\@picbox \@save=\@ydim + \loop\ifdim\@xdim<\@len \raise\@ydim\copy\@picbox + \advance\@xdim\wd\@picbox \advance\@ydim\@picheight \repeat + \advance\@xdim-\@len \kern-\@xdim + \multiply\@xdim\@yarg \divide\@xdim\@xarg \advance\@ydim-\@xdim + \raise\@ydim\box\@picbox} + +\def\vector(#1,#2)#3{\@line(#1,#2){#3}% + \ifnum\@xarg=0 \@vvector \else\ifnum\@yarg=0 \@hvector \else\@svector\fi\fi} +\def\@hvector{\ifneg\rlap{\linefont\char27}\else + \smash{\llap{\linefont\char45}}\fi} % we have to smash because of font bug +\def\@vvector{\ifnum\@yarg<0 \raise-\@len\rlap{\linefont\char63}% + \else\setbox\@picbox=\rlap{\linefont\char54}\advance\@len-\ht\@picbox + \raise\@len\box\@picbox\fi} + +\def\@svector{\setbox\@picbox=\hbox to\z@{\linefont + \ifnum\@yarg<0 \count@=55 \@yarg=-\@yarg \else\count@=-9 \fi + \ifneg\multiply\@xarg16 \multiply\@yarg2 + \else\hss % \llap + \ifnum\@xarg>2 \multiply\@xarg9 \multiply\@yarg2 \advance\count@29 + \else\ifnum\@yarg>2 \multiply\@xarg16 \multiply\@yarg9 \advance\count@-20 + \else\multiply\@xarg24 \multiply\@yarg3 \fi\fi\fi + \advance\count@\@xarg \advance\count@\@yarg \char\count@ + \ifneg\hss\fi}% \rlap + \raise\@save\box\@picbox} + +\def\disk#1{\@len=#1\unitlength \count@='160 \@diskcirc} +\def\circle#1{\@len=#1\unitlength \count@='140 \@diskcirc} +\def\@diskcirc{\setbox\@picbox=\hbox{\circlefont\char\count@}\@xdim=\wd\@picbox + \leavevmode \ifdim\@len>15.499\@xdim \@bigdc \else \@smalldc\fi} +\def\@bigdc{\ifnum\count@<'160 \@bigcirc + \else \@len=15\@xdim \@diskcirc\fi} +\def\@smalldc{{\advance\@len-.5\@xdim + \loop\ifdim\@xdim<\@len \advance\count@\@ne \advance\@xdim\wd\@picbox\repeat + \hbox{\circlefont\char\count@}}} +\def\@bigcirc{{\circlefont\count@=15 + \setbox\@picbox=\hbox{\char\count@}\@xdim=\wd\@picbox + \ifdim\@len>2.5\@xdim \@len=2.5\@xdim\fi + \advance\@len-.125\wd\@picbox + \loop\ifdim\@xdim<\@len \advance\count@ 4 \advance\@xdim.25\wd\@picbox\repeat + \@ydim=.5\@xdim \advance\@ydim.5\linethickness + \setbox\@picbox=\vbox{\hbox{\char\count@\advance\count@-3\char\count@}% + \nointerlineskip + \hbox{\advance\count@\m@ne\char\count@\advance\count@\m@ne\char\count@}}% + \kern-\@ydim\lower\@ydim\box\@picbox}} + +\newif\ifovaltl \newif\ifovaltr \newif\ifovalbl \newif\ifovalbr +\ovaltltrue \ovaltrtrue \ovalbltrue \ovalbrtrue +\def\oval(#1,#2){\@xdim=#1\unitlength \@ydim=#2\unitlength + {\circlefont \setbox\@picbox=\hbox{\char0} + \ifdim\@xdim<\wd\@picbox \@xdim=\wd\@picbox\fi + \ifdim\@ydim<\wd\@picbox \@ydim=\wd\@picbox\fi + \@save=\@xdim \ifdim\@ydim<\@save \@save=\@ydim \fi + \count@=39 + \loop \setbox\@picbox=\hbox{\char\count@}\ifdim\@save<\wd\@picbox + \advance\count@-4 \repeat + \setbox\strutbox=\hbox{\vrule height\ht\@picbox depth\dp\@picbox width\z@ + \kern\wd\@picbox}% + \@save=.5\wd\@picbox \advance\@save-.5\linethickness + \setbox0=\hbox to\@xdim{\ifovaltl\char\count@\else\strut\fi + \kern-\@save\leaders\hrule height\ifovaltl\linethickness\else\z@\fi\hfil + \leaders\hrule height\ifovaltr\linethickness\else\z@\fi\hfil\kern\@save + \ifovaltr\advance\count@-3\char\count@\else\strut\fi\kern-\wd\@picbox}% + \advance\count@\m@ne + \setbox2=\hbox to\@xdim{\ifovalbl\char\count@\else\strut\fi + \kern-\@save\leaders\hrule height\ifovalbl\linethickness\else\z@\fi\hfil + \leaders\hrule height\ifovalbr\linethickness\else\z@\fi\hfil\kern\@save + \ifovalbr\advance\count@\m@ne\char\count@\else\strut\fi\kern-\wd\@picbox}% + \@save=\@ydim \advance\@save-\wd\@picbox \divide\@save 2 + \setbox\@picbox=\vbox{\box0\nointerlineskip + \hbox to\@xdim{\vrule height\@save width\ifovaltl\linethickness\else\z@\fi + \hfil\ifovaltr\vrule width\linethickness\kern-\linethickness\fi}% + \nointerlineskip + \hbox to\@xdim{\vrule height\@save width\ifovalbl\linethickness\else\z@\fi + \hfil\ifovalbr\vrule width\linethickness\kern-\linethickness\fi}% + \nointerlineskip\box2}% + \@save=.5\@ydim \advance\@save.5\linethickness \leavevmode + \kern-.5\@xdim \kern-.5\linethickness \lower\@save\box\@picbox}} + +\def\cpic#1\endcpic{\vcenter{\hbox{\beginpicture#1\endpicture}}} + +% Squines (quadratic splines) +% example of use: to plot f(x) between x0 and x1, you can say +% \put(0,0){\squine(x0,xm,x1,y0,ym,y1)}, where y0=f(x0), y1=f(x1) +% xm=(y0-y1+s1x1-s0x0)/(s1-s0), ym=(s0(s1x1-y1)-s1(s0x0-y0))/(s1-s0), +% s0=f'(x0), and s1=f'(x1). + +\newdimen\@xi \newdimen\@xii \newdimen\@xiii \newdimen\@xiv +\newdimen\@xpt \newdimen\@xoldpt +\newdimen\@yi \newdimen\@yii \newdimen\@yiii \newdimen\@yiv +\newdimen\@ypt \newdimen\@yoldpt +\def\squine(#1,#2,#3,#4,#5,#6){\setbox\@picbox\hbox{\tencirc q}% + \global\@xoldpt=#1\unitlength \global\@yoldpt=#4\unitlength \kern\@xoldpt + \@xi=\@xoldpt \@xii=#2\unitlength \@xiii=#3\unitlength + \@yi=\@yoldpt \@yii=#5\unitlength \@yiii=#6\unitlength + \squinerec + \@xpt=#3\unitlength \@ypt=#6\unitlength \@addpoint + \raise\@ypt\copy\@picbox} +\newif\iffar +\def\squinerec{\farfalse \testnear\@xi\@xiii \testnear\@yi\@yiii + \iffar \decast \fi} +\def\testnear#1#2{\@save=#1\advance\@save-#2% + \ifdim\@save<\z@ \@save=-\@save\fi \ifdim\@save>\p@ \fartrue \fi} +\def\decast{\@xpt=\@xi \advance\@xpt\@xii \divide\@xpt2 + \advance\@xii\@xiii \divide\@xii2 + \@xiv=\@xpt \advance\@xiv\@xii \divide\@xiv2 + \@ypt=\@yi \advance\@ypt\@yii \divide\@ypt2 + \advance\@yii\@yiii \divide\@yii2 + \@yiv=\@ypt \advance\@yiv\@yii \divide\@yiv2 + \begingroup\@xii=\@xpt \@xiii=\@xiv + \@yii=\@ypt \@yiii=\@yiv \squinerec\endgroup + \@xpt=\@xiv \@ypt=\@yiv \@addpoint + \@xi=\@xiv \@yi=\@yiv \squinerec} +\def\@addpoint{%\message{(\the\@xpt,\the\@ypt)}% + \global\advance\@xoldpt-\@xpt \wd\@picbox=-\@xoldpt + \raise\@yoldpt\copy\@picbox \global\@xoldpt=\@xpt \global\@yoldpt=\@ypt} + +% Math operators +\def\2{\mskip-.5mu2\mskip.5mu} +\newmuskip\lessfortimes \lessfortimes=-2mu minus -2mu +\def\cdt{\mskip\lessfortimes\cdot\mskip\lessfortimes} +\def\nullnum{\phantom{0}} +\def\twonullnum{\phantom{00}} +\def\bex{\mskip-2mu} +\def\twoconditions#1#2{_{\scriptstyle#1\atop\scriptstyle#2}} +\def\tworestrictions#1#2{\vcenter{\offinterlineskip + \halign{\strut\hfil##\hfil\cr#1\cr#2\cr}}} +\def\dts{\mathinner{\ldotp\ldotp}} +\def\[#1]{[\hbox{$\mskip1mu\thickmuskip=\thinmuskip#1\mskip1mu$}]} +\def\bigi[#1\bigr]{\bigl[\hbox{$\thickmuskip=\thinmuskip#1$}\bigr]} +\def\Bigi[#1\Bigr]{\Bigl[\hbox{$\thickmuskip=\thinmuskip#1$}\Bigr]} +\def\prp(#1){(\hbox{$\thickmuskip=\thinmuskip#1$})} +\def\pbigi(#1\bigr){\bigl(\hbox{$\thickmuskip=\thinmuskip#1$}\bigr)} +\def\_#1{\def\next{#1}% + \ifx\next\risingsign\expandafter\rising\else^{\underline{#1}}\fi} +\def\risingsign{^} +\def\rising#1{^{\overline{#1}}} +\def\dotminus{\mathbin{\buildrel{\hbox{\runhead.}}\over{\smash{-}\vphantom{_2}}}} +\let\divides=\backslash +\def\edivides{\divides\mskip-4mu\divides} +\def\ndivides{\mathpalette\notdiv\relax} +\def\notdiv#1#2{\setbox0=\hbox{$#1\divides$}% + \vcenter{\hbox to\wd0{$\hss\scriptscriptstyle/\hss$}}\kern-\wd0 + \vcenter{\hbox to\wd0{$\hss\kern.5pt\scriptscriptstyle/\hss$}}\kern-\wd0 + \box0\relax} +\def\spec{\mathop{\rm Spec}} +\def\half{{1\over2}} +\def\rp{\mathchar"323F } % relatively prime +\def\lcm{\mathop{\rm lcm}} +\def\And{\quad{\rm and}\quad} +\let\==\equiv +\def\tmod#1{(mod~$#1$)} +\let\implies=\Longrightarrow +\def\?{\hbox{!`}} % subfactorial +\def\hyp{\mathop{F{}}\nolimits\hyper} +\def\tightplus{\medmuskip=1.5mu\relax} +\def\hyper#1#2#3{\mathchoice{\tightplus + \hbox{$\displaystyle\biggl({#1\atop#2}\Big\vert\,{#3}\!\biggr)$}}% + {\bigl({#1\atop#2}\vert\mskip2mu#3\bigr)}% + {}{}} % used only in D and T styles +%\def\hypk_#1{\mathop{F{}}_{#1}\nolimits\hyper} % confl with mFn convention +\def\hypk_#1#2#3#4{\mathop{F{}}\mathchoice{\tightplus + \hbox{$\displaystyle\biggl({#2\atop#3}\Big\vert\,{#4}\!\biggr)$}% + \lower\fontdimen11\mathsym\hbox{$\scriptstyle\!#1$}}% + {\bigl({#2\atop#3}\vert\mskip2mu#4\bigr)\lower\fontdimen12\mathsym + \hbox{$\scriptstyle\!#1$}}% + {}{}} % used only in D and T styles +\def\double(#1\choose#2){\mathchoice{\biggl(\!\!{#1\choose#2}\!\!\biggr)} + {\bigl(\!{#1\choose#2}\!\bigr)}{}{}} % only D and T styles +\def\hypstrut{\vphantom{_1\_^k}} % if there's another denominator with \_^k +\def\deg{\mathop{\rm deg}} +\def\Bscr{{\scr B}} +\def\Escr{{\scr E}} +\def\Fscr{{\scr F}} +\def\Pscr{{\scr P}} +\def\Sscr{{\scr S}} +\def\adj{\relbar\joinrel\relbar} % adjacent in a graph +\let\<=\langle \let \>=\rangle +\def\Pr{\mathop{\rm Pr}\nolimits} +\def\Mean{\mathop{\rm Mean}\nolimits} +\def\Var{\mathop{\rm Var}\nolimits} +\def\between{\big\vert\hbox{\vphantom)}} % \between_a^b +{\catcode`\'=\active \gdef'{^\bgroup\mskip2mu\prim@s}} % more space before ' +\def\array#1[#2]{\hbox{\tt#1[$#2$]}} +\def\given{\mskip1mu\vert\mskip1mu} +\def\euler{\atopwithdelims<>} +\def\Euler#1#2{\mathchoice{\biggl<\mskip-7mu{#1\euler#2}\mskip-7mu\biggr>}% + {\bigl<\!{#1\euler#2}\!\bigr>}{}{}} + +\newbox\phihatbox \newbox\scrphihatbox +\setbox\phihatbox=\hbox{$\phi$} \ht\phihatbox=1ex +\setbox\scrphihatbox=\hbox{$\scriptstyle\phi$} + \ht\scrphihatbox=\fontdimen5\mathsublet +\setbox\phihatbox=\hbox{$\widehat{\box\phihatbox}$} +\setbox\scrphihatbox=\hbox{$\hat{\box\scrphihatbox}$} +\def\phihat{\mathchoice{\copy\phihatbox}{\copy\phihatbox}% + {\copy\scrphihatbox}{{\hat\phi}}} + +\newbox\mathsizebox +\def\setmathsize#1{\global\setbox\mathsizebox=\hbox{\displaymath#1$}} +\def\mathsize#1{\hbox to\wd\mathsizebox{\displaymath#1$\hss}} + +\newbox\sqrtstrutbox +\setbox\sqrtstrutbox=\hbox{\vrule height10.5pt width\z@} +\def\strutsqrt#1{\copy\sqrtstrutbox\sqrt{{}^{\mathstrut}#1}} + +\newbox\Sqbox % for sum of squares +\setbox\Sqbox=\vbox{\tenrm\hrule height.6pt\kern-.6pt + \hbox to1.5ex{\vrule height1.5ex width.6pt\hss\vrule width.6pt}\kern-.6pt + \hrule height.3pt depth.3pt} +\def\Sq{\mskip1.5mu\copy\Sqbox\mskip1.5mu} + +% primitive index macros +% "stuff for index" will go into a file for sorting and into normal text +% "!stuff for index" will go into the file only +\expandafter\def\expandafter\dospecials\expandafter{\dospecials\do\"} +\def\hexcode{"} \catcode`\"=\active + +\newif\ifinxmode +\newwrite\inx \newwrite\bnx +\newbox\inxbox + +\newif\ifsilent +\def\beginxref{\futurelet\next\beginxrefswitch} +\def\beginxrefswitch{\ifx\next!\let\next=\silentxref + \else\silentfalse\let\next=\xref\fi \next} +\def\silentxref!{\silenttrue\xref} +\let"=\beginxref + +\def\xref#1"{\ifinxmode\edef\text{#1}\makexref\fi + \ifsilent\ignorespaces\else#1\fi} +\def\makexref{\global\setbox\inxbox=% + \vbox{\unvbox\inxbox\allowbreak\hbox{\inxstyle\text}}% + \xdef\writeit{\write\inx{\text\space!\space + \noexpand\number\pageno.}}\writeit} + +% Final considerations +\catcode`\@=\active \def@{\mskip1mu\relax} +\expandafter\def\expandafter\dospecials\expandafter{\dospecials\do\@} + +\hyphenation{logical Mac-Mahon hyper-geo-metric hyper-geo-met-rics Ber-noulli} + +\preprintfalse % WE ARE MAKING THE REAL BOOK! +\inxmodetrue % WE ARE PREPARING A ROUGH INDEX +\showmissestrue % THE REFERENCES SHOULD ALL BE READY NOW + +\ifinxmode\immediate\openout\inx=\jobname.inx \fi % file for index reminders +\ifinxmode\immediate\openout\bnx=\jobname.bnx \fi % file for bib reminders + +% To make the book: +% First TeX BIB, to get BIB.REF correct. (Must have \cite entries.) +% Then TeX CHAP1..CHAP9, PREF, ANS, CRED, FRONT, CONT. +% Then make BNX file from individual *.BNX files including BIB.BNX. +% Then reTeX BIB. +% *.INX files are raw data only. Index and Contents are prepared by hand. + +% To produce only a subset of pages, put the page numbers on separate +% lines in a file called pages.tex, ended by 999 +% WARNING: This will screw up the .grf file! Save it, then restore it. +% WARNING: This may screw up the .ref file (if there are \tabrefs). Ditto. +\let\Shipout=\shipout +\newread\pages \newcount\nxtpg \openin\pages=pages +\def\getnxtpg{\ifeof\pages\else + {\endlinechar=-1\read\pages to\next + \ifx\next\empty % in this case we should have eof now + \else\global\nxtpg=\next\fi}\fi} +\ifeof\pages\else\message{OK, I'll ship only the requested pages!} + \getnxtpg\fi +\def\shipout{\ifeof\pages\let\next=\Shipout + \else\ifnum\pageno=\nxtpg\getnxtpg\let\next=\Shipout + \else\let\next=\Tosspage\fi\fi \next} +\newbox\garbage \def\Tosspage{\deadcycles=0\setbox\garbage=} diff --git a/Master/texmf-dist/tex/plain/base/letter.tex b/Master/texmf-dist/tex/plain/base/letter.tex new file mode 100644 index 00000000000..531a8b520df --- /dev/null +++ b/Master/texmf-dist/tex/plain/base/letter.tex @@ -0,0 +1,119 @@ +% This macro file is for business letters + +\def\today{\ifcase\month\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi + \space\number\day, \number\year} +\def\narrower{\advance\leftskip by 20pt \advance\rightskip by 20pt } + +\raggedbottom +\interlinepenalty=1000 +\hsize=6.25truein \voffset=24pt \advance\vsize by-\voffset +\parindent=0pt \parskip=0pt +\nopagenumbers +\headline={\ifnum\pageno>1 + \tenrm To \addressee\hfil\today\hfil Page \folio + \else\hfil\fi} + +\def\beginlinemode{\endmode + \begingroup\obeylines\def\endmode{\par\endgroup}} +\def\beginparmode{\endmode + \begingroup\parskip=\medskipamount \def\endmode{\par\endgroup}} +\let\endmode=\par +\def\endletter{\endmode\vfill\supereject \pageno=1 } + +\newdimen\longindentation \longindentation=4truein +\newbox\theaddress +\def\address{\beginlinemode\getaddress} +{\obeylines\gdef\getaddress#1 + #2 + {\gdef\addressee{#2\unskip}% + \global\setbox\theaddress=\vbox\bgroup\raggedright% + \hsize=\longindentation \everypar{\hangindent2em}#2 + \def\endmode{\egroup\endgroup \copy\theaddress \bigskip}}} + +\def\body{\beginparmode} +\def\closing{\beginlinemode\getclosing} +{\obeylines\gdef\getclosing #1 + #2 + {\nobreak\bigskip \leftskip=\longindentation #2 + \nobreak\bigskip\bigskip\bigskip % space for signature + \def + {\endgraf\nobreak}}} +\def\annotations{\beginlinemode\def\par{\endgraf\nobreak}\obeylines\par} +\def\ps{\beginparmode\nobreak + \interlinepenalty5000\def\par{\endgraf\penalty5000}} +\def\cc{\beginparmode\nobreak + \interlinepenalty5000\def\par{\endgraf\penalty5000}} + +\def\up#1{\leavevmode \raise.16ex\hbox{#1}} +\font\smallheadfont=cmr8 at 8truept +\font\largeheadfont=cmbx10 at 14.4truept +\font\logofont=stan70 at 70truept +\def\stanfordseal{\vbox{\kern-3truept\hbox{\logofont A}\kern-3truept}} + +\def\csdreturn{Computer Science Department\par \stanfordreturn} +\def\stanfordreturn{Stanford University\par + Stanford, CA 94305\kern.5pt-21\kern-.5pt40 USA\par} +\def\letterhead{\pageno=1 \univletterhead + {\leftskip=\longindentation + {\baselineskip9truept\smallheadfont\sendingaddress} + \bigskip\bigskip\rm\today\bigskip}} +\def\specrule#1{\nointerlineskip + \line{\hbox to 60truept{\hrulefill + \hphantom{\stanfordseal\kern-#1truept}% + \hrulefill}\hrulefill}\nointerlineskip} +\def\univletterhead{\vglue-34pt + \specrule{11}\vskip8truept + \hbox{\hbox to\longindentation{\smash{\hbox to60truept{\hfil\kern2.5truept + \lower10truept\stanfordseal\hfil}}% + \largeheadfont STANFORD UNIVERSITY\hfil}% + \smallheadfont STANFORD, CALIFORNIA 94305\kern.5pt-21\kern-.5pt40} + \vskip6truept\specrule{17}\vskip13truept } + +\def\deklet{ + \def\sendingaddress{DONALD E. KNUTH\par + Professor Emeritus of The Art of\par + \qquad Computer Programming\par + Department of Computer Science\par + Telephone \up[415\up]\thinspace 723-4367\par} + \def\returnaddress{Prof.~D. E. Knuth\par \csdreturn} + \letterhead} + +\def\memoto{\beginlinemode\parindent=60truept + \everypar{\hangindent70truept}\startmemo} +\def\bigmemoto{\beginlinemode\parindent=60pt % use this for magstep>1! + \everypar{\hangindent70pt}\startmemo} +\def\textin#1{\noindent\hbox to\parindent{#1\hss}\ignorespaces} +{\obeylines\gdef\startmemo #1 + {\gdef\addressee{#1}% + \global\pageno=1 \vglue-34pt\specrule{11}\vskip8truept + \leftline{\smash{\hbox to60truept{\hfil\kern2.5truept + \lower10truept\stanfordseal\hfil}}% + \largeheadfont Stanford Computer Science Department % + \rm\today}% + \vskip6truept\specrule{20}\bigskip\bigskip\bigskip% + \textin{Memo to:}#1 + \def\endmode{\par\endgroup\bigskip}} + \gdef\from #1 + {\smallskip\textin{From:}#1 + } + \gdef\subject #1 + {\smallskip\textin{Subject:}#1 + } +} + +\def\makelabel{\endletter\hbox{\vrule + \vbox{\hrule \kern6truept + \hbox{\kern6truept\stanfordseal\kern3pt + \vbox{\smallheadfont\baselineskip9truept\hsize=2truein\returnaddress} + \kern6truept}\kern6truept\hrule}\vrule} + \kern.1truein + \hbox{\vrule + \vbox{\hrule \kern12truept + \hbox{\kern12truept\copy\theaddress + \kern12truept}\kern12truept\hrule}\vrule} + \pageno=0\vfill\eject} + +\def\frac#1/#2{\leavemode\kern.1em\raise.5ex\hbox{\the\scriptfont0 + #1}\kern-.1em/\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}} diff --git a/Master/texmf-dist/tex/plain/base/list.tex b/Master/texmf-dist/tex/plain/base/list.tex new file mode 100644 index 00000000000..1daeba2bbe8 --- /dev/null +++ b/Master/texmf-dist/tex/plain/base/list.tex @@ -0,0 +1,47 @@ +% Makes a listing of one or more files +% Typical usage: +% tex list *.c \\end + +\def\grabfile#1 {\setbox0=\lastbox\endgraf\doit{#1}} +\everypar{\grabfile} + +\font\filenamefont= cmtt8 scaled\magstep3 +\font\headlinefont= cmr8 +\font\listingfont= cmtex10 +\font\eoffont= cmti8 + +\def\today{\ifcase\month\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi + \space\number\day, \number\year} +\newcount\m \newcount\n +\n=\time \divide\n 60 \m=-\n \multiply\m 60 \advance\m \time +\def\hours{\twodigits\n\twodigits\m} +\def\twodigits#1{\ifnum #1<10 0\fi \number#1} + +\newlinechar=`@ +\message{@\today\space at \hours} + +\raggedbottom +\nopagenumbers + +\chardef\other=12 +\def\doit#1{\message{@Listing #1@} + \begingroup \everypar{} \frenchspacing + \headline{\filenamefont#1\quad\headlinefont \today\ at \hours + \hfill Page \folio} + \def\do##1{\catcode`##1=\other}\dospecials + \catcode127=\other \catcode9=\other \catcode12=\other + \parindent 0pt \parfillskip=0pt plus 1fil minus 1in + \everypar{\hangindent 1in} \rightskip=0pt plus 2in + \def\par{\ifvmode\penalty-500\medskip\else\endgraf\fi} + \listingfont \obeylines \obeyspaces \global\pageno=1 + \input #1 {\eoffont(end of\/ file)}\endgraf\vfill\eject\endgroup} +{\obeyspaces\global\let =\ } +\catcode`\_=\other % allow _ in file names + +% A tab (^^I) prints as lowercase gamma. +% Character ^^M could be made visible, with a bit of work; +% at present, it's indistinguishable from newline (^^J). + +% You can get up to 103 characters on a line without an overfull box. diff --git a/Master/texmf-dist/tex/plain/base/llist.tex b/Master/texmf-dist/tex/plain/base/llist.tex new file mode 100644 index 00000000000..f107169e248 --- /dev/null +++ b/Master/texmf-dist/tex/plain/base/llist.tex @@ -0,0 +1,67 @@ +% Makes a landscape listing of one or more files +% Typical usage: +% tex llist *.c \\end + +\def\grabfile#1 {\setbox0=\lastbox\endgraf\doit{#1}} +\everypar{\grabfile} + +\font\filenamefont= cmtt8 scaled\magstep3 +\font\headlinefont= cmr8 +\font\listingfont= cmtex8 +\font\eoffont= cmti8 + +\def\today{\ifcase\month\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi + \space\number\day, \number\year} +\newcount\m \newcount\n +\n=\time \divide\n 60 \m=-\n \multiply\m 60 \advance\m \time +\def\hours{\twodigits\n\twodigits\m} +\def\twodigits#1{\ifnum #1<10 0\fi \number#1} + +\newlinechar=`@ +\message{@\today\space at \hours} + +\baselineskip=9pt +\medskipamount=4pt minus 1pt +\raggedbottom +\nopagenumbers + +\chardef\other=12 +\def\doit#1{\message{@Listing #1@} + \begingroup \everypar{} \frenchspacing + \headline{\ifright \headlinefont \hfill Page \folio + \else\filenamefont#1\quad\headlinefont \today\ at \hours\hfill \fi} + \def\do##1{\catcode`##1=\other}\dospecials + \catcode127=\other \catcode9=\other \catcode12=\other + \parindent 0pt \parfillskip=0pt plus 1fil minus .8in + \everypar{\hangindent 1in} \rightskip=0pt plus 2in + \def\par{\ifvmode\penalty-50\medskip\else\endgraf\fi} + \listingfont \obeylines \obeyspaces \global\pageno=1 + \input #1 {\eoffont(end of\/ file)}\endgraf\vfill\eject + \ifright\null\vfill\eject\fi\endgroup} +{\obeyspaces\global\let =\ } +\catcode`\_=\other % allow _ in file names + +\hsize=4.6truein +\vsize=7truein +\hoffset=-.5truein +\voffset=-.2truein +\newif\ifright +\newbox\lefthalf +\output{\ifright + \shipout\hbox{\hbox to5.5in{\box\lefthalf\hss}% + \vbox{\makeheadline\pagebody\makefootline}} + \advancepageno\global\rightfalse + \else\global\setbox\lefthalf\vbox{\makeheadline\pagebody\makefootline} + \global\righttrue\fi} + +\special{landscape} + +% A tab (^^I) prints as lowercase gamma. +% Character ^^M could be made visible, with a bit of work; +% at present, it's indistinguishable from newline (^^J). + +% You can get up to 91 characters on a line without an overfull box. +% (But lines with more than 84 characters will be clipped, if they +% appear on a righthand halfpage.) diff --git a/Master/texmf-dist/tex/plain/base/manmac.tex b/Master/texmf-dist/tex/plain/base/manmac.tex new file mode 100644 index 00000000000..d8678ab5070 --- /dev/null +++ b/Master/texmf-dist/tex/plain/base/manmac.tex @@ -0,0 +1,715 @@ +% Macros for The TeXbook + +\catcode`@=11 % borrow the private macros of PLAIN (with care) + +\font\tentex=cmtex10 + +\font\inchhigh=cminch +\font\titlefont=cmssdc10 at 40pt + +\font\ninerm=cmr9 +\font\eightrm=cmr8 +\font\sixrm=cmr6 + +\font\ninei=cmmi9 +\font\eighti=cmmi8 +\font\sixi=cmmi6 +\skewchar\ninei='177 \skewchar\eighti='177 \skewchar\sixi='177 + +\font\ninesy=cmsy9 +\font\eightsy=cmsy8 +\font\sixsy=cmsy6 +\skewchar\ninesy='60 \skewchar\eightsy='60 \skewchar\sixsy='60 + +\font\eightss=cmssq8 + +\font\eightssi=cmssqi8 + +\font\ninebf=cmbx9 +\font\eightbf=cmbx8 +\font\sixbf=cmbx6 + +\font\ninett=cmtt9 +\font\eighttt=cmtt8 + +\hyphenchar\tentt=-1 % inhibit hyphenation in typewriter type +\hyphenchar\ninett=-1 +\hyphenchar\eighttt=-1 + +\font\ninesl=cmsl9 +\font\eightsl=cmsl8 + +\font\nineit=cmti9 +\font\eightit=cmti8 + +\font\tenu=cmu10 % unslanted text italic +\font\magnifiedfiverm=cmr5 at 10pt +\font\manual=manfnt % font used for the METAFONT logo, etc. +\font\cmman=cmman % font used for miscellaneous Computer Modern variations + +\newskip\ttglue +\def\tenpoint{\def\rm{\fam0\tenrm}% + \textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm + \textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei + \textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy + \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex + \def\it{\fam\itfam\tenit}% + \textfont\itfam=\tenit + \def\sl{\fam\slfam\tensl}% + \textfont\slfam=\tensl + \def\bf{\fam\bffam\tenbf}% + \textfont\bffam=\tenbf \scriptfont\bffam=\sevenbf + \scriptscriptfont\bffam=\fivebf + \def\tt{\fam\ttfam\tentt}% + \textfont\ttfam=\tentt + \tt \ttglue=.5em plus.25em minus.15em + \normalbaselineskip=12pt + \def\MF{{\manual META}\-{\manual FONT}}% + \let\sc=\eightrm + \let\big=\tenbig + \setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width\z@}% + \normalbaselines\rm} + +\def\ninepoint{\def\rm{\fam0\ninerm}% + \textfont0=\ninerm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm + \textfont1=\ninei \scriptfont1=\sixi \scriptscriptfont1=\fivei + \textfont2=\ninesy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy + \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex + \def\it{\fam\itfam\nineit}% + \textfont\itfam=\nineit + \def\sl{\fam\slfam\ninesl}% + \textfont\slfam=\ninesl + \def\bf{\fam\bffam\ninebf}% + \textfont\bffam=\ninebf \scriptfont\bffam=\sixbf + \scriptscriptfont\bffam=\fivebf + \def\tt{\fam\ttfam\ninett}% + \textfont\ttfam=\ninett + \tt \ttglue=.5em plus.25em minus.15em + \normalbaselineskip=11pt + \def\MF{{\manual hijk}\-{\manual lmnj}}% + \let\sc=\sevenrm + \let\big=\ninebig + \setbox\strutbox=\hbox{\vrule height8pt depth3pt width\z@}% + \normalbaselines\rm} + +\def\eightpoint{\def\rm{\fam0\eightrm}% + \textfont0=\eightrm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm + \textfont1=\eighti \scriptfont1=\sixi \scriptscriptfont1=\fivei + \textfont2=\eightsy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy + \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex + \def\it{\fam\itfam\eightit}% + \textfont\itfam=\eightit + \def\sl{\fam\slfam\eightsl}% + \textfont\slfam=\eightsl + \def\bf{\fam\bffam\eightbf}% + \textfont\bffam=\eightbf \scriptfont\bffam=\sixbf + \scriptscriptfont\bffam=\fivebf + \def\tt{\fam\ttfam\eighttt}% + \textfont\ttfam=\eighttt + \tt \ttglue=.5em plus.25em minus.15em + \normalbaselineskip=9pt + \def\MF{{\manual opqr}\-{\manual stuq}}% + \let\sc=\sixrm + \let\big=\eightbig + \setbox\strutbox=\hbox{\vrule height7pt depth2pt width\z@}% + \normalbaselines\rm} + +\def\tenmath{\tenpoint\fam-1 } % use after $ in ninepoint sections +\def\tenbig#1{{\hbox{$\left#1\vbox to8.5pt{}\right.\n@space$}}} +\def\ninebig#1{{\hbox{$\textfont0=\tenrm\textfont2=\tensy + \left#1\vbox to7.25pt{}\right.\n@space$}}} +\def\eightbig#1{{\hbox{$\textfont0=\ninerm\textfont2=\ninesy + \left#1\vbox to6.5pt{}\right.\n@space$}}} + +% Page layout +\newdimen\pagewidth \newdimen\pageheight \newdimen\ruleht +\hsize=29pc \vsize=44pc \maxdepth=2.2pt \parindent=3pc +\pagewidth=\hsize \pageheight=\vsize \ruleht=.5pt +\abovedisplayskip=6pt plus 3pt minus 1pt +\belowdisplayskip=6pt plus 3pt minus 1pt +\abovedisplayshortskip=0pt plus 3pt +\belowdisplayshortskip=4pt plus 3pt + +%\newinsert\footins +\def\footnote#1{\edef\@sf{\spacefactor\the\spacefactor}#1\@sf + \insert\footins\bgroup\eightpoint + \interlinepenalty100 \let\par=\endgraf + \leftskip=\z@skip \rightskip=\z@skip + \splittopskip=10pt plus 1pt minus 1pt \floatingpenalty=20000 + \smallskip\item{#1}\bgroup\strut\aftergroup\@foot\let\next} +\skip\footins=12pt plus 2pt minus 4pt % space added when footnote is present +%\count\footins=1000 % footnote magnification factor (1 to 1) +\dimen\footins=30pc % maximum footnotes per page + +\newinsert\margin +\dimen\margin=\maxdimen +%\count\margin=0 \skip\margin=0pt % marginal inserts take up no space + +\newif\iftitle +\def\titlepage{\global\titletrue} % for pages without headlines +\def\rhead{} % \rhead contains the running headline + +\def\leftheadline{\hbox to \pagewidth{% + \vbox to 10pt{}% strut to position the baseline + \llap{\tenbf\folio\kern1pc}% folio to left of text + \tenit\rhead\hfil% running head flush left + }} +\def\rightheadline{\hbox to \pagewidth{% + \vbox to 10pt{}% strut to position the baseline + \hfil\tenit\rhead\/% running head flush right + \rlap{\kern1pc\tenbf\folio}% folio to right of text + }} + +\def\onepageout#1{\shipout\vbox{ % here we define one page of output + \offinterlineskip % butt the boxes together + \vbox to 3pc{ % this part goes on top of the 44pc pages + \iftitle % the next is used for title pages + \global\titlefalse % reset the titlepage switch + \setcornerrules % for camera alignment + \else\ifodd\pageno \rightheadline\else\leftheadline\fi\fi + \vfill} % this completes the \vbox to 3pc + \vbox to \pageheight{ + \ifvoid\margin\else % marginal info is present + \rlap{\kern31pc\vbox to\z@{\kern4pt\box\margin \vss}}\fi + #1 % now insert the main information + \ifvoid\footins\else % footnote info is present + \vskip\skip\footins \kern-3pt + \hrule height\ruleht width\pagewidth \kern-\ruleht \kern3pt + \unvbox\footins\fi + \boxmaxdepth=\maxdepth + } % this completes the \vbox to \pageheight + } + \advancepageno} + +\def\setcornerrules{\hbox to \pagewidth{\vrule width 1pc height\ruleht + \hfil \vrule width 1pc} + \hbox to \pagewidth{\llap{\sevenrm(page \folio)\kern1pc}% + \vrule height1pc width\ruleht depth\z@ + \hfil \vrule width\ruleht depth\z@}} + +\output{\onepageout{\unvbox255}} + +\newbox\partialpage +\def\begindoublecolumns{\begingroup + \output={\global\setbox\partialpage=\vbox{\unvbox255\bigskip}}\eject + \output={\doublecolumnout} \hsize=14pc \vsize=89pc} +\def\enddoublecolumns{\output={\balancecolumns}\eject + \endgroup \pagegoal=\vsize} + +\def\doublecolumnout{\splittopskip=\topskip \splitmaxdepth=\maxdepth + \dimen@=44pc \advance\dimen@ by-\ht\partialpage + \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ + \onepageout\pagesofar + \unvbox255 \penalty\outputpenalty} +\def\pagesofar{\unvbox\partialpage + \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}} +\def\balancecolumns{\setbox0=\vbox{\unvbox255} \dimen@=\ht0 + \advance\dimen@ by\topskip \advance\dimen@ by-\baselineskip + \divide\dimen@ by2 \splittopskip=\topskip + {\vbadness=10000 \loop \global\setbox3=\copy0 + \global\setbox1=\vsplit3 to\dimen@ + \ifdim\ht3>\dimen@ \global\advance\dimen@ by1pt \repeat} + \setbox0=\vbox to\dimen@{\unvbox1} + \setbox2=\vbox to\dimen@{\unvbox3} + \pagesofar} + +% To produce only a subset of pages, put the page numbers on separate +% lines in a file called pages.tex +\let\Shipout=\shipout +\newread\pages \newcount\nextpage \openin\pages=pages +\def\getnextpage{\ifeof\pages\else + {\endlinechar=-1\read\pages to\next + \ifx\next\empty % in this case we should have eof now + \else\global\nextpage=\next\fi}\fi} +\ifeof\pages\else\message{OK, I'll ship only the requested pages!} + \getnextpage\fi +\def\shipout{\ifeof\pages\let\next=\Shipout + \else\ifnum\pageno=\nextpage\getnextpage\let\next=\Shipout + \else\let\next=\Tosspage\fi\fi \next} +\newbox\garbage \def\Tosspage{\deadcycles=0\setbox\garbage=} + +% Chapter formatting +% The preface and table of contents are formatted in place, not here + +\newcount\exno % for the number of exercises in the current chapter +\newcount\subsecno % for the number of subsections in the current chapter + +\def\beginchapter#1 #2#3. #4\par{\global\exno=0 + \subsecno=0 + \def\chapno{#2#3} + \ifodd\pageno + \errmessage{You had too much text on that last page; I'm backing up} + \advance\pageno by-1 \fi + \titlepage + \def\\{ } % \\'s in the title will be treated as spaces + \message{#1 #2#3:} % show the chapter title on the terminal + \def\MF{{\manual 89:;<=>:}} % slant the logo + \xdef\rhead{#1 #2#3: #4\unskip} + {\def\TeX{T\kern-.2em\lower.5ex\hbox{E}\kern-.06em X} + \def\MF{{\vbox to30pt{}\manual ()*+,-.*}} + \def\\{#3} + \ifx\empty\\ \rightline{\inchhigh #2\kern-.04em} + \else\rightline{\inchhigh #2\kern-.06em#3\kern-.04em}\fi + \vskip 1.75pc + \baselineskip 36pt \lineskiplimit \titlelsl \lineskip 12pt + \let\\=\cr % now the \\'s are line dividers + \halign{\line{\titlefont\hfil##}\\#4\unskip\\} + \vfill\eject} % output the chapter title page + \tenpoint + \noindent\ignorespaces} % the first paragraph of a chapter is not indented +\newdimen\titlelsl \titlelsl=1pt + +\outer\def\endchapter{\ifodd\pageno \else\vfill\eject\null\fi + \begingroup\bigskip\vfill % beginning of the quotes + \def\eject{\endgroup\eject} + \def\par{\ifhmode\/\endgraf\fi}\obeylines + \def\TeX{T\kern-.2em\lower.5ex\hbox{E}\kern-.000em X} + \def\MF{{\manual opqr}\-{\manual stuq}} + \eightpoint \let\tt=\ninett + \baselineskip 10pt + \parfillskip \z@ + \interlinepenalty 10000 + \leftskip \z@ plus 40pc minus \parindent + \let\rm=\eightss \let\sl=\eightssi + \everypar{\sl}} +\def\author#1(#2){\smallskip\noindent\rm--- #1\unskip\enspace(#2)} + +\def\dbend{{\manual\char127}} % dangerous bend sign +\def\d@nger{\medbreak\begingroup\clubpenalty=10000 + \def\par{\endgraf\endgroup\medbreak} \noindent\hang\hangafter=-2 + \hbox to0pt{\hskip-\hangindent\dbend\hfill}\ninepoint} +\outer\def\danger{\d@nger} +\def\dd@nger{\medbreak\begingroup\clubpenalty=10000 + \def\par{\endgraf\endgroup\medbreak} \noindent\hang\hangafter=-2 + \hbox to0pt{\hskip-\hangindent\dbend\kern1pt\dbend\hfill}\ninepoint} +\outer\def\ddanger{\dd@nger} +\def\enddanger{\endgraf\endgroup} % omits the \medbreak + +\outer\def\subsection#1. {\medbreak\advance\subsecno by 1 + \noindent{\it \the\subsecno.\enspace#1.\enspace}} +\def\ansno#1.#2:{\medbreak\noindent + \hbox to\parindent{\bf\hss#1.#2.\enspace}\ignorespaces} + +% Composition macros +\hyphenation{man-u-script man-u-scripts ap-pen-dix xscaled} + +\def\AmSTeX{$\cal A\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.075em + S$-\TeX} +\def\bull{\vrule height .9ex width .8ex depth -.1ex } % square bullet +\def\SS{{\it SS}} % scriptscript style +\def\|{\leavevmode\hbox{\tt\char`\|}} % vertical line +\def\dn{\leavevmode\hbox{\tt\char'14}} % downward arrow +\def\up{\leavevmode\hbox{\tt\char'13}} % upward arrow +\def\]{\leavevmode\hbox{\tt\char`\ }} % visible space + +\def\pt{\,{\rm pt}} % units of points, in math formulas +\def\em{\,{\rm em}} % units of ems, in math formulas +\def\<#1>{\leavevmode\hbox{$\langle$#1\/$\rangle$}} % syntactic quantity +\def\oct#1{\hbox{\rm\'{}\kern-.2em\it#1\/\kern.05em}} % octal constant +\def\hex#1{\hbox{\rm\H{}\tt#1}} % hexadecimal constant +\def\cstok#1{\leavevmode\thinspace\hbox{\vrule\vtop{\vbox{\hrule\kern1pt + \hbox{\vphantom{\tt/}\thinspace{\tt#1}\thinspace}} + \kern1pt\hrule}\vrule}\thinspace} % control sequence token + +{\obeyspaces\gdef {\ }} +\def\parbreak{\hfil\break\indent\strut} +\def\stretch{\nobreak\hskip0pt plus2pt\relax} + +% macros for non-centered displays +\outer\def\begindisplay{\obeylines\startdisplay} +{\obeylines\gdef\startdisplay#1 + {\catcode`\^^M=5$$#1\halign\bgroup\indent##\hfil&&\qquad##\hfil\cr}} +\outer\def\enddisplay{\crcr\egroup$$} + +% (the following \begin...\end-type macros do not appear in Appendix E) +% macros for demonstrating math constructions +\outer\def\beginmathdemo{$$\advance\baselineskip by2pt + \halign\bgroup\indent\hbox to 160pt{##\hfil}&$##$\hfil\cr\noalign{\vskip-2pt}} +\outer\def\begindisplaymathdemo {$$\advance\baselineskip by15pt + \halign\bgroup\indent\hbox to 160pt{##\hfil}&$\displaystyle{##}$\hfil\cr + \noalign{\vskip-15pt}} +\outer\def\beginlongmathdemo{$$\advance\baselineskip by2pt + \halign\bgroup\indent\hbox to 210pt{##\hfil}&$##$\hfil\cr\noalign{\vskip-2pt}} +\outer\def\beginlongdisplaymathdemo {$$\advance\baselineskip by15pt + \halign\bgroup\indent\hbox to 210pt{##\hfil}&$\displaystyle{##}$\hfil\cr + \noalign{\vskip-15pt}} +\outer\def\endmathdemo{\egroup$$} + +% macros for font tables +\def\oddline#1{\cr + \noalign{\nointerlineskip} + \multispan{19}\hrulefill& + \setbox0=\hbox{\lower 2.3pt\hbox{\hex{#1x}}}\smash{\box0}\cr + \noalign{\nointerlineskip}} +\def\evenline{\cr\noalign{\hrule}} +\def\chartstrut{\lower4.5pt\vbox to14pt{}} +\def\beginchart#1{$$\postdisplaypenalty=-10000 \global\count@=0 #1 + \halign to\hsize\bgroup + \chartstrut##\tabskip0pt plus10pt& + &\hfil##\hfil&\vrule##\cr + \lower6.5pt\null + &&&\oct0&&\oct1&&\oct2&&\oct3&&\oct4&&\oct5&&\oct6&&\oct7&\evenline} +\def\endchart{\raise11.5pt\null&&&\hex 8&&\hex 9&&\hex A&&\hex B& + &\hex C&&\hex D&&\hex E&&\hex F&\cr\egroup$$} +\def\:{\setbox0=\hbox{\char\count@}% + \ifdim\ht0>7.5pt\reposition + \else\ifdim\dp0>2.5pt\reposition\fi\fi + \box0\global\advance\count@ by1 } +\def\reposition{\setbox0=\hbox{$\vcenter{\kern2pt\box0\kern2pt}$}} +\def\normalchart{% + &\oct{00x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline0 + &\oct{01x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline + &\oct{02x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline1 + &\oct{03x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline + &\oct{04x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline2 + &\oct{05x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline + &\oct{06x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline3 + &\oct{07x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline + &\oct{10x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline4 + &\oct{11x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline + &\oct{12x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline5 + &\oct{13x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline + &\oct{14x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline6 + &\oct{15x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline + &\oct{16x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline7 + &\oct{17x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline} + +% (now Appendix E resumes again) +% macros for verbatim scanning +\chardef\other=12 +\def\ttverbatim{\begingroup + \catcode`\\=\other + \catcode`\{=\other + \catcode`\}=\other + \catcode`\$=\other + \catcode`\&=\other + \catcode`\#=\other + \catcode`\%=\other + \catcode`\~=\other + \catcode`\_=\other + \catcode`\^=\other + \obeyspaces \obeylines \tt} + +\outer\def\begintt{$$\let\par=\endgraf \ttverbatim \parskip=\z@ + \catcode`\|=0 \rightskip-5pc \ttfinish} +{\catcode`\|=0 |catcode`|\=\other % | is temporary escape character + |obeylines % end of line is active + |gdef|ttfinish#1^^M#2\endtt{#1|vbox{#2}|endgroup$$}} + +\catcode`\|=\active +{\obeylines \gdef|{\ttverbatim \spaceskip\ttglue \let^^M=\ \let|=\endgroup}} + +% macros for syntax rules (again, not in Appendix E) +\def\[#1]{\silenttrue\xref|#1|\thinspace{\tt#1}\thinspace} % keyword in syntax +\def\beginsyntax{\endgraf\nobreak\medskip + \begingroup \catcode`<=13 \catcode`[=13 + \let\par=\endsyntaxline \obeylines} +\def\endsyntaxline{\futurelet\next\syntaxswitch} +\def\syntaxswitch{\ifx\next\<\let\next=\syntaxrule + \else\ifx\next\endsyntax\let\next=\endgroup + \else\let\next=\continuerule\fi\fi \next} +\def\continuerule{\hfil\break\indent\qquad} +\def\endsyntax{\medbreak\noindent} +{\catcode`<=13 \catcode`[=13 + \global\let<=\< \global\let[=\[ + \gdef\syntaxrule<#1>{\endgraf\indent\silentfalse\xref\<#1>}} +\def\is{\ $\longrightarrow$ } +\def\alt{\ $\vert$ } + +% macros to demarcate lines quoted from TeX source files +\def\beginlines{\par\begingroup\nobreak\medskip\parindent\z@ \obeylines + \hrule\kern1pt\nobreak \everypar{\strut}} +\def\endlines{\kern1pt\hrule\endgroup\medbreak\noindent} +\def\weakendlines{\kern1pt\hrule\endgroup\medskip\noindent} +\def\finalendlines{\kern1pt\hrule\endgroup\medbreak} + +\outer\def\exercise{\medbreak + \global\advance\exno by 1 + \noindent\llap{\manual\char'170\rm\kern.15em}% triangle in margin + {\ninebf EXERCISE \bf\chapno.\the\exno}\par\nobreak\noindent} +\def\dexercise{\global\advance\exno by 1 + \llap{\manual\char'170\rm\kern.15em}% triangle in indented space + {\eightbf EXERCISE \bf\chapno.\the\exno}\hfil\break} +\outer\def\dangerexercise{\d@nger \dexercise} +\outer\def\ddangerexercise{\dd@nger \dexercise} + +\newwrite\ans +\immediate\openout\ans=answers % file for answers to exercises +\outer\def\answer{\par\medbreak + \immediate\write\ans{} + \immediate\write\ans{\string\ansno\chapno.\the\exno:} + \copytoblankline} +\def\copytoblankline{\begingroup\setupcopy\copyans} +\def\setupcopy{\def\do##1{\catcode`##1=\other}\dospecials + \catcode`\|=\other \obeylines} +{\obeylines \gdef\copyans#1 + {\def\next{#1}% + \ifx\next\empty\let\next=\endgroup % + \else\immediate\write\ans{\next} \let\next=\copyans\fi\next}} + +% Editorial notes: some things to watch for. + +% f |\ and f ^|\ => insert \/ [e.g., if\/ |\hbox|...] +% appendi => check for \null [e.g., Appendix~B\null.] +% ly- => the hyphen is probably omittable +% ''. and '', => transpose to .'' and ,'' +% dgement => dgment +% in MFbook: f@' and \MF, and \MF. + +% Macros for drawing figures (not in Appendix E) +\def\hidehrule#1#2{\kern-#1\hrule height#1 depth#2 \kern-#2 } +\def\hidevrule#1#2{\kern-#1{\dimen0=#1 + \advance\dimen0 by#2\vrule width\dimen0}\kern-#2 } +% \makeblankbox puts rules at the edges of a blank box +% whose dimensions are those of \box0 (assuming nonnegative wd,ht,dp) +% #1 is rule thickness outside, #2 is rule thickness inside +\def\makeblankbox#1#2{\hbox{\lower\dp0\vbox{\hidehrule{#1}{#2}% + \kern-#1% overlap the rules at the corners + \hbox to\wd0{\hidevrule{#1}{#2}% + \raise\ht0\vbox to #1{}% set the vrule height + \lower\dp0\vtop to #1{}% set the vrule depth + \hfil\hidevrule{#2}{#1}}% + \kern-#1\hidehrule{#2}{#1}}}} +\def\maketypebox{\makeblankbox{0pt}{1pt}} +\def\makelightbox{\makeblankbox{.2pt}{.2pt}} + +% \box\bigdot is a null box with a bullet at its reference point +\newbox\bigdot \newbox\smalldot +\setbox0=\hbox{$\vcenter{}$} % \ht0 is the axis height +\setbox1=\hbox to\z@{$\hss\bullet\hss$} % bullet is centered on the axis +\setbox\bigdot=\vbox to\z@{\kern-\ht1 \kern\ht0 \box1 \vss} +\setbox1=\hbox to\z@{$\hss\cdot\hss$} % cdot is centered on the axis +\setbox\smalldot=\vbox to\z@{\kern-\ht1 \kern\ht0 \box1 \vss} + +% \arrows makes things like <--- text ---> +\def\arrows#1#2{% #1=width, #2=text + {\setbox0=\hbox{$\mkern-2mu\mathord-\mkern-2mu$} + \hbox to #1{\kern-.055556em$\leftarrow\mkern-6mu$% + \cleaders\copy0\hfil + \kern.4em #2\kern.4em + \cleaders\copy0\hfil + $\mkern-6mu\rightarrow$\kern-.055556em}}} + +% \samplebox makes the outline of a box, with big dot at reference point +\def\samplebox#1#2#3#4{% #1=ht, #2=dp, #3=wd, #4=text + {\setbox0=\vtop{\vbox to #1{\hbox to #3{}\vss} + \nointerlineskip + \vbox to #2{}}% now \box0 has the desired ht, dp, and wd + \hbox{\copy\bigdot + \vrule height.2pt depth.2pt width#3% + \kern-#3% + \makelightbox + \kern-#3% + \raise#1\vbox{\hbox to #3{\hss#4\hss} + \kern 3pt}}}} + +% \sampleglue makes glue between sample boxes +\newdimen\varunit +\varunit=\hsize \advance\varunit by-2\parindent +\divide\varunit by 58 % illustrations in Chapter 12 +\def\sampleglue#1#2{% #1=width, #2=text + \vtop{\hbox to #1{\xleaders\hbox to .5\varunit{\hss\copy\smalldot\hss}\hfil} + \kern3pt + \tabskip \z@ plus 1fil + \halign to #1{\hfil##\cr#2\cr}}} + +% Indexing macros +\newif\ifproofmode +\proofmodetrue % this should be false when making camera-ready copy +\newwrite\inx +\immediate\openout\inx=index % file for index reminders +\newif\ifsilent +\def\specialhat{\ifmmode\def\next{^}\else\let\next=\beginxref\fi\next} +\def\beginxref{\futurelet\next\beginxrefswitch} +\def\beginxrefswitch{\ifx\next\specialhat\let\next=\silentxref + \else\silentfalse\let\next=\xref\fi \next} +\catcode`\^=\active \let ^=\specialhat +\def\silentxref^{\silenttrue\xref} + +\def\marginstyle{\vrule height6pt depth2pt width\z@ \sevenrm} + +\chardef\bslash=`\\ +\def\xref{\futurelet\next\xrefswitch} +\def\xrefswitch{\begingroup + \ifx\next|\aftergroup\vxref % case 1 or 2, |arg| or |\arg| + \else\ifx\next\<\aftergroup\anglexref % case 3, "\" means angle brackets + \else\aftergroup\normalxref \fi\fi\endgroup} % case 0, "{arg}" +\def\vxref|{\catcode`\\=\active \futurelet\next\vxrefswitch} +\def\vxrefswitch#1|{\catcode`\\=0 + \ifx\next\empty\def\xreftype{2}% + \def\next{{\tt\bslash\text}}% type 2, |\arg| + \else\def\xreftype{1}\def\next{{\tt\text}}\fi % type 1, |arg| + \edef\text{#1}\makexref} +{\catcode`\|=0 \catcode`\\=\active |gdef\{}} +\def\anglexref\<#1>{\def\xreftype{3}\def\text{#1}% + \def\next{\<\text>}\makexref} +\def\normalxref#1{\def\xreftype{0}\def\text{#1}\let\next=\text\makexref} +\def\makexref{\ifproofmode\insert\margin{\hbox{\marginstyle\text}}% + \xdef\writeit{\write\inx{\text\space!\xreftype\space + \noexpand\number\pageno.}}\writeit + \else\ifhmode\kern\z@\fi\fi + \ifsilent\ignorespaces\else\next\fi} +% the \insert (which is done in proofmode only) suppresses hyphenation, +% so the \kern\z@ is put in to give the same effect in non-proofmode. + +% Internal cross references that may change +\def\sesame{61} % page number for Sesame Street quote +\def\bmiexno{20} % exercise number for bold math italic +\def\punishexno{1} % exercise number for `punishment' +\def\fracexno{6} % exercise number for `\frac' +\def\vshippage{31} % error message from `\vship' +\def\storypage{24} % listing of story.tex +\def\metaT{4} % exercise number for T of METAFONT +\def\xwhat{2} % exercise number for x3:=whatever +\def\Xwhat{2} % exercise number for whatever itself + +\def\checkequals#1#2{\ifnum#1=#2\else + \errmessage{Redefine \string#1 to be \the#2}\fi} + +% Things for The METAFONTbook only +\ifx\MFmanual\!\else\endinput\fi + +\def\!{\kern-.03em\relax} + +\def\frac#1/#2{\leavevmode\kern.1em + \raise.5ex\hbox{\the\scriptfont0 #1}\kern-.1em + /\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}} + +\outer\def\displayfig #1 (#2){$$\advance\abovedisplayskip by 3pt + \leftline{\indent\figbox{#1}{3in}{#2}\vbox}$$} +\def\rightfig #1 (#2 x #3) ^#4 {% #2 wide and #3 deep, raised #4 + \strut\vadjust{\setbox0=\vbox to 0pt{\vss + \hbox to\pagewidth{\hfil + \raise #4\figbox{#1}{#2}{#3}\vtop \quad}} + \dp0=0pt \box0}} +\def\figbox#1#2#3#4{#4to#3{ % makes a box #2 wide and #3 deep + \ifproofmode\kern0pt\hrule\vfill + \hsize=#2 \baselineskip 6pt \fiverm\noindent\raggedright + (Figure #1 will be inserted here; too bad you can't see it now.) + \endgraf\vfill\hrule + \else\vfill\hbox to#2{}\fi}} + +\def\endsyntax{\begingroup\let\par=\endgraf\medbreak\endgroup\noindent} + +\let\BEGINCHAPTER=\beginchapter +\def\beginchapter{\titlelsl=1pt \BEGINCHAPTER} +\def\beginChapter{\titlelsl=2pt \BEGINCHAPTER} + +\def\decreasehsize #1 {\advance\hsize-#1} +\def\restorehsize{\hsize=\pagewidth} + +\catcode`\@=\active +\catcode`\"=\active +\def\ttverbatim{\begingroup \catcode`\@=\other \catcode`\"=\other + \catcode`\\=\other + \catcode`\{=\other + \catcode`\}=\other + \catcode`\$=\other + \catcode`\&=\other + \catcode`\#=\other + \catcode`\%=\other + \catcode`\~=\other + \catcode`\_=\other + \catcode`\^=\other + \obeyspaces \obeylines \tt} +\def\setupcopy{\def\do##1{\catcode`##1=\other}\dospecials + \catcode`\|=\other \catcode`\@=\other \catcode`\"=\other \obeylines} +\def\_{\leavevmode \kern.06em \vbox{\hrule width.3em}} +\def@#1@{\begingroup\def\_{\kern.04em + \vbox{\hrule width.3em height .6pt}\kern.08em}% + \ifmmode\mathop{\bf#1}\else\hbox{\bf#1\/}\fi\endgroup} +\def"#1"{\hbox{\it#1\/\kern.05em}} % italic type for identifiers +\def\xrefswitch{\begingroup + \ifx\next|\aftergroup\vxref % case 1, |arg| or |\arg| + \else\ifx\next@\aftergroup\boldxref % case 2, "@arg@" means boldface + \else\ifx\next"\aftergroup\italxref % case 4, ""arg"" means boldface + \else\ifx\next\<\aftergroup\anglexref % case 3, "\" means angle brackets + \else\aftergroup\normalxref \fi\fi\fi\fi\endgroup} % case 0, "{arg}" +\def\boldxref@#1@{\def\xreftype{2}\def\text{#1}% + \def\next{@\text@}\makexref} +\def\italxref"#1"{\def\xreftype{4}\def\text{#1}% + \def\next{"\text"}\makexref} + +\def\pyth+{\mathbin{++}} +\def\0{\raise.7ex\hbox{$\scriptstyle\#$}} +\def\to{\mathrel{\ldotp\ldotp}} +\def\dashto{\mathrel{\hbox{-\thinspace-\kern-.05em}}} +\def\ddashto{\mathrel{\hbox{-\thinspace-\thinspace-\kern-.05em}}} +\def\round{\mathop{\rm round}} +\def\angle{\mathop{\rm angle}} +\def\rmsqrt{\mathop{\rm sqrt}} +\def\reverse{\mathop{\rm reverse}} +\def\curl{\mathop{\rm curl}} +\def\tension{\mathop{\rm tension}} +\def\atleast{\mathop{\rm atleast}} +\def\controls{\mathop{\rm controls}} +\def\and{\,{\rm and}\,} +\def\cycle{{\rm cycle}} +\def\pickup{@pickup@ \thinspace} +\def\penpos#1{\hbox{\it penpos}_{#1}} +\def\pentaper#1{\hbox{\it pentaper}_{#1}} + +\chardef\hexa=1 % first hex +\chardef\hexb=2 % top and bot adjusted +\chardef\hexc=3 % same, bold +\chardef\hexd=4 % same, confined to box +\chardef\hexe=5 % penstroked hex +\chardef\Aa=6 % stick-figure A, golden ratio +\def\sevenAs{\char7\char8\char9\char10\char11\char12\char13} % same, variants +\chardef\Az=14 % same, with crooked bar +\chardef\Ab=15 % \Aa with rectilinear elliptical pen +\chardef\Ac=16 % same, with the ellipse tilted +\chardef\beana=17 % kidney bean, default pen +\chardef\beanb=18 % same, twice as bold +\chardef\beanc=19 % same, rectilinear elliptical pen +\chardef\beand=20 % same, with the ellipse tilted +\chardef\niba=21 % 10x rectilinear ellipse +\chardef\nibb=22 % same, with the ellipse tilted +\chardef\nibc=23 % same, 90 degrees titled +\chardef\IOT=24 % Ionian T +\chardef\IOS=25 % Ionian S +\chardef\IOO=26 % Ionian O +\chardef\IOI=27 % Ionian I +\chardef\cubea=28 % possible cube +\chardef\cubeb=29 % impossible cube +\chardef\bicentennial=30 % star with overlapping strokes +\chardef\oneu=31 % 1/4 of uuuu ornament +\chardef\circa=32 % quartercircle +\chardef\circb=33 % filled quartercircle +\chardef\circc=34 % rotated quartercircle +\chardef\circd=35 % cone +\chardef\circe=36 % concentric circles +\chardef\circf=37 % concentric diamonds +\chardef\fouru=38 % uuuu ornament +\chardef\fourc=39 % same, rotated +\chardef\seventh='140 % 1/7, to go with cmssqi8 + +\newdimen\apspix +\apspix=31448sp % 8 APS pixels = 52413.64sp, and I'm taking 60% of this +% to crude approximation, there are about 2\apspix per pt +\newdimen\blankpix \newdimen\Blankpix +\setbox0=\hbox{\manual P} \blankpix=\wd0 % approximately 1pt blank pixel +\setbox0=\hbox{\manual R} \Blankpix=\wd0 % approximately 3pt blank pixel + +\def\leftheadline{\hbox to \pagewidth{% + \vbox to 10pt{}% strut to position the baseline + \llap{\tenbf\folio\kern1pc}% folio to left of text + \def\MF{{\manual 89:;<=>:}}% slanted 10pt + \tenit\rhead\hfil% running head flush left + }} +\def\rightheadline{\hbox to \pagewidth{% + \vbox to 10pt{}% strut to position the baseline + \def\MF{{\manual 89:;<=>:}}% slanted 10pt + \hfil\tenit\rhead\/% running head flush right + \rlap{\kern1pc\tenbf\folio}% folio to right of text + }} +\def\ttok#1{\leavevmode\thinspace\hbox{\vrule\vtop{\vbox{\hrule\kern1pt + \hbox{\vphantom{\tt(j}\thinspace{\tt#1}\thinspace}} + \kern1pt\hrule}\vrule}\thinspace} % token + +\newdimen\tinypix \setbox0=\hbox{\sixrm0} \tinypix=5pt +\newdimen\pixcorr \pixcorr=\tinypix \advance\pixcorr by-\wd0 +\def\pixpat#1#2#3#4{\vcenter{\sixrm\baselineskip=\tinypix + \hbox{#1\kern\pixcorr#2}\hbox{#3\kern\pixcorr#4}}} + +\font\rand=random diff --git a/Master/texmf-dist/tex/plain/base/mftmac.tex b/Master/texmf-dist/tex/plain/base/mftmac.tex new file mode 100644 index 00000000000..3243e74d68d --- /dev/null +++ b/Master/texmf-dist/tex/plain/base/mftmac.tex @@ -0,0 +1,55 @@ +% special macros for use with MFT output + +\font\tenlogo=logo10 % font used for the METAFONT logo +\font\tentex=cmtex10 \hyphenchar\tentex=-1 % font used for strings +\font\sevenit=cmti7 \scriptfont\itfam=\sevenit +\def\MF{{\tenlogo META}\-{\tenlogo FONT}} + +\parindent=0pt +\thinmuskip=5mu +\thickmuskip=6mu plus 6mu +\mathcode`\|="326A + +\def\\#1{{\it#1}} % italic type for identifiers +\def\0#1#2#3{\hbox{\rm\'{}\kern-.2em\it#1#2#3\/\kern.05em}} % octal constant +\def\1#1{\mathop{\hbox{\rm#1}}} % operator, in roman type +\def\2#1{\mathop{\hbox{\bf#1\/\kern.05em}}} % operator, in bold type +\def\3#1{\,\mathclose{\hbox{\bf#1\/}}} % `fi' and `endgroup' +\def\4#1{\mathbin{\hbox{\bf#1\/}}} % `step' and `at' +\def\5#1{\hbox{\bf#1\/}} % `true' and `nullpicture' +\def\6#1{\mathbin{\rm#1}} % `++' and `scaled' +\def\7{\hbox\bgroup\nocats\frenchspacing\finstring} % string token +\def\8#1{\mathrel{\mathcode`\.="8000 \mathcode`\-="8000 + #1\unkern}} % `..' and `--' +\def\9{\hfill$\%} % comment separator +\def\?#1{\mathopen{#1}\;} % `:', `::', and `||:' +\def\frac#1/#2{\leavevmode\kern.1em + \raise.5ex\hbox{\the\scriptfont0 #1}\kern-.1em + /\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}} + +\mathchardef\AM="2026 % ampersand +\let\BL=\medskip % space for empty line +\mathchardef\BS="026E % backslash +\mathchardef\HA="0222 % hat ("005E not as good) +\def\PS{\mathbin{+{-}+}} % pythagorean subtraction +\def\SH{\raise.7ex\hbox{$\scriptstyle\#$}} % sharp sign for sharped units +\mathchardef\TI="007E % tilde + +\chardef\other=12 +\def\nocats{\catcode`\\=\other \catcode`\{=\other + \catcode`\}=\other \catcode`\$=\other \catcode`\&=\other + \catcode`\#=\other \catcode`\%=\other \catcode`\~=\other + \catcode`\_=\other \catcode`\^=\other} +\def\finstring"#1"{\tentex"#1"\egroup} + +\newbox\shorthyf \setbox\shorthyf=\hbox{-\kern-.05em} +\mathchardef\period=`\. +{\catcode`\-=\active \global\def-{\copy\shorthyf\mkern3.9mu} + \catcode`\.=\active \global\def.{\period\mkern3mu}} + +\def\bf{\fam\bffam + \def\_{\kern.04em\vbox{\hrule width.3em height .6pt}\kern.08em}% + \tenbf} + +\def\join#1${} % say %%\join in .mf file to join lines together +\def\]{\hskip0pt plus 1filll\ } % say % comment\] to get comment flush left diff --git a/Master/texmf-dist/tex/plain/base/mptmac.tex b/Master/texmf-dist/tex/plain/base/mptmac.tex new file mode 100644 index 00000000000..f5af73afdfd --- /dev/null +++ b/Master/texmf-dist/tex/plain/base/mptmac.tex @@ -0,0 +1,89 @@ +% Special macros for use with MFT output. +% Adapted to METAPOST sources by Wlodek Bzyl, July 2001. + +\ifx\mptmacisloaded\relax\endinput\else\let\mptmacisloaded=\relax\fi + +\catcode`\@=11 + +\font\tenlogo=logo10 % font used for the METAFONT logo +\font\tentex=cmtex10 \hyphenchar\tentex=-1 % font used for strings +\font\sevenit=cmti7 \scriptfont\itfam=\sevenit +\def\MF{{\tenlogo META}\-{\tenlogo FONT}} +\def\MP{{\tenlogo META}\-{\tenlogo POST}} + +\parindent=0pt +\thinmuskip=5mu +\thickmuskip=6mu plus 6mu +\mathcode`\|="326A + +\def\\#1{{\it#1}} % italic type for identifiers +\def\0#1#2#3{\hbox{\rm\'{}\kern-.2em\it#1#2#3\/\kern.05em}} % octal constant +\def\1#1{\mathop{\hbox{\rm#1}}} % operator, in roman type +\def\2#1{\mathop{\hbox{\mftbf#1\/\kern.05em}}} % operator, in bold type +\def\3#1{\,\mathclose{\hbox{\mftbf#1\/}}} % `fi' and `endgroup' +\def\4#1{\mathbin{\hbox{\mftbf#1\/}}} % `step' and `at' +\def\5#1{\hbox{\mftbf#1\/}} % `true' and `nullpicture' +\def\6#1{\mathbin{\rm#1}} % `++' and `scaled' +\def\7{\hbox\bgroup\mft@nocats\frenchspacing\mft@finstring} % string token +\def\8#1{\mathrel{\mathcode`\.="8000 \mathcode`\-="8000 + #1\unkern}} % `..' and `--' +\def\9{\hfill$\%} % comment separator +\def\?#1{\mathopen{#1}\;} % `:', `::', and `||:' +\def\frac#1/#2{\leavevmode\kern.1em + \raise.5ex\hbox{\the\scriptfont0 #1}\kern-.1em + /\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}} + +\mathchardef\AM="2026 % ampersand +\let\BL=\medskip % space for empty line +\mathchardef\BS="026E % backslash +\mathchardef\HA="0222 % hat ("005E not as good) +\def\PS{\mathbin{+{-}+}} % pythagorean subtraction +\def\SH{\raise.7ex\hbox{$\scriptstyle\#$}} % sharp sign for sharped units +\mathchardef\TI="007E % tilde + +\chardef\other=12 +\def\mft@noc@ts{\catcode`\\=\other \catcode`\{=\other + \catcode`\}=\other \catcode`\$=\other \catcode`\&=\other + \catcode`\#=\other \catcode`\~=\other + \catcode`\_=\other \catcode`\^=\other} +\def\mft@nocats{\mft@noc@ts \catcode`\%=\other} +\def\mft@finstring"#1"{\tentex"#1"\egroup} + +\newbox\mft@shorthyf \setbox\mft@shorthyf=\hbox{-\kern-.05em} +\mathchardef\period=`\. +{\catcode`\-=\active \global\def-{\copy\mft@shorthyf\mkern3.9mu} + \catcode`\.=\active \global\def.{\period\mkern3mu}} + +\def\mftbf{\fam\bffam + \def\_{\kern.04em\vbox{\hrule width.3em height .6pt}\kern.08em}% + \tenbf} + +\def\join#1${} % say %%\join in .mf file to join lines together +\def\]{\hskip0pt plus 1filll\ } % say % comment\] to get comment flush left + +{\obeyspaces \global\let =\ } % don't skip spaces which begin a line + +\def\mft@verbatimtex{\begingroup + \def\par{\leavevmode\endgraf}% don't skip empty lines + \mft@nocats \obeyspaces \obeylines \tt} + +% the percent sign in btex .. etex group is a comment character. +\def\mft@btex{\begingroup \mft@noc@ts \obeyspaces \tt} + +% Names `\mftbeginV', `\mftbeginB', and `\mftend' are hard-wired into MFT + +\outer\def\mftbeginV#1{\5{#1}$\mftverbatimtex} +\outer\def\mftbeginB#1{\5{#1}$\mftbtex} +\def\mftend#1{$\5{#1}} + +\outer\def\mftverbatimtex{\let\par=\endgraf \mft@verbatimtex \parskip=\z@ + \mft@finish} +\outer\def\mftbtex{\mft@btex \mft@finish} + +{\catcode`\|=0 |catcode`|\=\other % | is temporary escape character + |obeylines % end of line is active + |gdef|mft@finish#1\mftend{#1|endgroup|mftend}} + +\catcode`\@=12 + +\endinput diff --git a/Master/texmf-dist/tex/plain/base/picmac.tex b/Master/texmf-dist/tex/plain/base/picmac.tex new file mode 100644 index 00000000000..0e1b537ab8b --- /dev/null +++ b/Master/texmf-dist/tex/plain/base/picmac.tex @@ -0,0 +1,178 @@ +% Pictures (a subset of \LaTeX's conventions, plus squines) +\catcode`@=11 % enable private control sequences +\def\wlog#1{} % don't put allocation info into the log + +\newskip\hsssglue \hsssglue=0pt plus 1fill minus 1fill \def\hsss{\hskip\hsssglue} + +\newdimen\unitlength \newdimen\linethickness +\newdimen\@picheight \newdimen\@xdim \newdimen\@ydim \newdimen\@len \newdimen\@save +\newcount\@multicount \newcount\@xarg \newcount\@yarg +\newbox\@picbox \newbox\@mpbox + +\font\tenln=line10 \font\tenlnw=linew10 +\font\tencirc=lcircle10 \font\tencircw=lcirclew10 + +\def\thinlines{\let\linefont=\tenln \let\circlefont=\tencirc + \linethickness=\fontdimen8\linefont} +\def\thicklines{\let\linefont=\tenlnw \let\circlefont=\tencircw + \linethickness=\fontdimen8\linefont} +\thinlines + +\def\beginpicture(#1,#2)(#3,#4){\@picheight=#2\unitlength + \setbox\@picbox=\hbox to#1\unitlength\bgroup \let\line=\@line + \kern-#3\unitlength \lower#4\unitlength\hbox\bgroup\ignorespaces} +\def\endpicture{\egroup\hss\egroup + \ht\@picbox=\@picheight \dp\@picbox=\z@ + \leavevmode\box\@picbox} + +\def\put(#1,#2)#3{\raise#2\unitlength\rlap{\kern#1\unitlength #3}\ignorespaces} + +\def\multiput(#1,#2)(#3,#4)#5#6{\@multicount=#5\relax + \@xdim=#1\unitlength \@ydim=#2\unitlength \setbox\@mpbox=\hbox{#6}% + \loop\ifnum\@multicount>0 + \raise\@ydim\rlap{\kern\@xdim \unhcopy\@mpbox}% + \advance\@xdim#3\unitlength \advance\@ydim#4\unitlength + \advance\@multicount\m@ne \repeat\ignorespaces} + +\def\makebox(#1,#2)#3{\setbox\@picbox=\hbox to#1\unitlength{\hss#3\hss}% + \@ydim=\ht\@picbox \advance\@ydim-\dp\@picbox + \ht\@picbox=#2\unitlength \dp\@picbox=\z@ + \leavevmode\lower.5\@ydim\box\@picbox} + +\newif\ifneg +\def\@line(#1,#2)#3{\@xarg=#1 \@yarg=#2 \@len=#3\unitlength \leavevmode + \ifnum\@xarg<0 \reverseline \else \negfalse \@ydim=\z@\fi + \ifnum\@xarg=0 \@vline + \else\ifnum\@yarg=0 \@hline \else\@sline\fi\fi + \ifneg\kern-\@len\else\@save=\@ydim\fi} +\def\reverseline{\negtrue \kern-\@len \@xarg=-\@xarg + \@ydim=\@len \multiply\@ydim\@yarg \divide\@ydim\@xarg \@yarg=-\@yarg} + +\def\@hline{\vrule height.5\linethickness depth.5\linethickness width\@len} +\def\@vline{\kern-.5\linethickness\vrule width\linethickness + \ifnum\@yarg<0 height\z@ depth\else depth\z@ height\fi\@len + \kern-.5\linethickness} + +\def\@sline{\setbox\@picbox=\hbox{\linefont \count@=\@xarg \multiply\count@ 8 + \ifnum\@yarg>0 \advance\count@\@yarg \advance\count@-9 + \else \advance\count@-\@yarg \advance\count@ 55 \fi \char\count@}% + \ifnum\@yarg<0 \@picheight=-\ht\@picbox \advance\@ydim\@picheight + \else \@picheight=\ht\@picbox \fi + \@xdim=\wd\@picbox \@save=\@ydim + \loop\ifdim\@xdim<\@len \raise\@ydim\copy\@picbox + \advance\@xdim\wd\@picbox \advance\@ydim\@picheight \repeat + \advance\@xdim-\@len \kern-\@xdim + \multiply\@xdim\@yarg \divide\@xdim\@xarg \advance\@ydim-\@xdim + \raise\@ydim\box\@picbox} + +\def\vector(#1,#2)#3{\@line(#1,#2){#3}% + \ifnum\@xarg=0 \@vvector \else\ifnum\@yarg=0 \@hvector \else\@svector\fi\fi} +\def\@hvector{\ifneg\rlap{\linefont\char27}\else + \smash{\llap{\linefont\char45}}\fi} % we have to smash because of font bug +\def\@vvector{\ifnum\@yarg<0 \raise-\@len\rlap{\linefont\char63}% + \else\setbox\@picbox=\rlap{\linefont\char54}\advance\@len-\ht\@picbox + \raise\@len\box\@picbox\fi} + +\def\@svector{\setbox\@picbox=\hbox to\z@{\linefont + \ifnum\@yarg<0 \count@=55 \@yarg=-\@yarg \else\count@=-9 \fi + \ifneg\multiply\@xarg16 \multiply\@yarg2 + \else\hss % \llap + \ifnum\@xarg>2 \multiply\@xarg9 \multiply\@yarg2 \advance\count@29 + \else\ifnum\@yarg>2 \multiply\@xarg16 \multiply\@yarg9 \advance\count@-20 + \else\multiply\@xarg24 \multiply\@yarg3 \fi\fi\fi + \advance\count@\@xarg \advance\count@\@yarg \char\count@ + \ifneg\hss\fi}% \rlap + \raise\@save\box\@picbox} + +\def\disk#1{\@len=#1\unitlength \count@='160 \@diskcirc} +\def\circle#1{\@len=#1\unitlength \count@='140 \@diskcirc} +\def\@diskcirc{\setbox\@picbox=\hbox{\circlefont\char\count@}\@xdim=\wd\@picbox + \leavevmode \ifdim\@len>15.499\@xdim \@bigdc \else \@smalldc\fi} +\def\@bigdc{\ifnum\count@<'160 \@bigcirc + \else \@len=15\@xdim \@diskcirc\fi} +\def\@smalldc{{\advance\@len-.5\@xdim + \loop\ifdim\@xdim<\@len \advance\count@\@ne \advance\@xdim\wd\@picbox\repeat + \hbox{\circlefont\char\count@}}} +\def\@bigcirc{{\circlefont\count@=15 + \setbox\@picbox=\hbox{\char\count@}\@xdim=\wd\@picbox + \ifdim\@len>2.5\@xdim \@len=2.5\@xdim\fi + \advance\@len-.125\wd\@picbox + \loop\ifdim\@xdim<\@len \advance\count@ 4 \advance\@xdim.25\wd\@picbox\repeat + \@ydim=.5\@xdim \advance\@ydim.5\linethickness + \setbox\@picbox=\vbox{\hbox{\char\count@\advance\count@-3\char\count@}% + \nointerlineskip + \hbox{\advance\count@\m@ne\char\count@\advance\count@\m@ne\char\count@}}% + \kern-\@ydim\lower\@ydim\box\@picbox}} + +\newif\ifovaltl \newif\ifovaltr \newif\ifovalbl \newif\ifovalbr +\ovaltltrue \ovaltrtrue \ovalbltrue \ovalbrtrue +\def\oval(#1,#2){\@xdim=#1\unitlength \@ydim=#2\unitlength + {\circlefont \setbox\@picbox=\hbox{\char0} + \ifdim\@xdim<\wd\@picbox \@xdim=\wd\@picbox\fi + \ifdim\@ydim<\wd\@picbox \@ydim=\wd\@picbox\fi + \@save=\@xdim \ifdim\@ydim<\@save \@save=\@ydim \fi + \count@=39 + \loop \setbox\@picbox=\hbox{\char\count@}\ifdim\@save<\wd\@picbox + \advance\count@-4 \repeat + \setbox\strutbox=\hbox{\vrule height\ht\@picbox depth\dp\@picbox width\z@ + \kern\wd\@picbox}% + \@save=.5\wd\@picbox \advance\@save-.5\linethickness + \setbox0=\hbox to\@xdim{\ifovaltl\char\count@\else\strut\fi + \kern-\@save\leaders\hrule height\ifovaltl\linethickness\else\z@\fi\hfil + \leaders\hrule height\ifovaltr\linethickness\else\z@\fi\hfil\kern\@save + \ifovaltr\advance\count@-3\char\count@\else\strut\fi\kern-\wd\@picbox}% + \advance\count@\m@ne + \setbox2=\hbox to\@xdim{\ifovalbl\char\count@\else\strut\fi + \kern-\@save\leaders\hrule height\ifovalbl\linethickness\else\z@\fi\hfil + \leaders\hrule height\ifovalbr\linethickness\else\z@\fi\hfil\kern\@save + \ifovalbr\advance\count@\m@ne\char\count@\else\strut\fi\kern-\wd\@picbox}% + \@save=\@ydim \advance\@save-\wd\@picbox \divide\@save 2 + \setbox\@picbox=\vbox{\box0\nointerlineskip + \hbox to\@xdim{\vrule height\@save width\ifovaltl\linethickness\else\z@\fi + \hfil\ifovaltr\vrule width\linethickness\kern-\linethickness\fi}% + \nointerlineskip + \hbox to\@xdim{\vrule height\@save width\ifovalbl\linethickness\else\z@\fi + \hfil\ifovalbr\vrule width\linethickness\kern-\linethickness\fi}% + \nointerlineskip\box2}% + \@save=.5\@ydim \advance\@save.5\linethickness \leavevmode + \kern-.5\@xdim \kern-.5\linethickness \lower\@save\box\@picbox}} + +\def\cpic#1\endcpic{\vcenter{\hbox{\beginpicture#1\endpicture}}} + +% Squines (quadratic splines) +% example of use: to plot f(x) between x0 and x1, you can say +% \put(0,0){\squine(x0,xm,x1,y0,ym,y1)}, where y0=f(x0), y1=f(x1) +% xm=(y0-y1+s1x1-s0x0)/(s1-s0), ym=(s0(s1x1-y1)-s1(s0x0-y0))/(s1-s0), +% s0=f'(x0), and s1=f'(x1). + +\newdimen\@xi \newdimen\@xii \newdimen\@xiii \newdimen\@xiv +\newdimen\@xpt \newdimen\@xoldpt +\newdimen\@yi \newdimen\@yii \newdimen\@yiii \newdimen\@yiv +\newdimen\@ypt \newdimen\@yoldpt +\def\squine(#1,#2,#3,#4,#5,#6){\setbox\@picbox\hbox{\tencirc q}% + \global\@xoldpt=#1\unitlength \global\@yoldpt=#4\unitlength \kern\@xoldpt + \@xi=\@xoldpt \@xii=#2\unitlength \@xiii=#3\unitlength + \@yi=\@yoldpt \@yii=#5\unitlength \@yiii=#6\unitlength + \squinerec + \@xpt=#3\unitlength \@ypt=#6\unitlength \@addpoint + \raise\@ypt\copy\@picbox} +\newif\iffar +\def\squinerec{\farfalse \testnear\@xi\@xiii \testnear\@yi\@yiii + \iffar \decast \fi} +\def\testnear#1#2{\@save=#1\advance\@save-#2% + \ifdim\@save<\z@ \@save=-\@save\fi \ifdim\@save>\p@ \fartrue \fi} +\def\decast{\@xpt=\@xi \advance\@xpt\@xii \divide\@xpt2 + \advance\@xii\@xiii \divide\@xii2 + \@xiv=\@xpt \advance\@xiv\@xii \divide\@xiv2 + \@ypt=\@yi \advance\@ypt\@yii \divide\@ypt2 + \advance\@yii\@yiii \divide\@yii2 + \@yiv=\@ypt \advance\@yiv\@yii \divide\@yiv2 + \begingroup\@xii=\@xpt \@xiii=\@xiv + \@yii=\@ypt \@yiii=\@yiv \squinerec\endgroup + \@xpt=\@xiv \@ypt=\@yiv \@addpoint + \@xi=\@xiv \@yi=\@yiv \squinerec} +\def\@addpoint{%\message{(\the\@xpt,\the\@ypt)}% + \global\advance\@xoldpt-\@xpt \wd\@picbox=-\@xoldpt + \raise\@yoldpt\copy\@picbox \global\@xoldpt=\@xpt \global\@yoldpt=\@ypt} + +\catcode`\@=12 % disable private control sequences diff --git a/Master/texmf-dist/tex/plain/base/plain.tex b/Master/texmf-dist/tex/plain/base/plain.tex new file mode 100644 index 00000000000..02d0523dd55 --- /dev/null +++ b/Master/texmf-dist/tex/plain/base/plain.tex @@ -0,0 +1,1241 @@ +% This is the plain TeX format that's described in The TeXbook. +% N.B.: A version number is defined at the very end of this file; +% please change that number whenever the file is modified! +% And don't modify the file unless you change its name: +% Everybody's "plain.tex" file should be the same, worldwide. + +% Unlimited copying and redistribution of this file are permitted as long +% as this file is not modified. Modifications are permitted, but only if +% the resulting file is not named plain.tex. + +\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 \catcode`\^^K=7 % circumflex and uparrow are for superscripts +\catcode`\_=8 \catcode`\^^A=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" + +\message{Preloading the plain format: codes,} + +% 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: +\def\dospecials{\do\ \do\\\do\{\do\}\do\$\do\&% + \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~} +% (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. +\catcode`@=11 + +% INITEX sets up \mathcode x=x, for x=0..255, except that +% \mathcode x=x+"7100, for x = `A to `Z and `a to `z; +% \mathcode x=x+"7000, for x = `0 to `9. +% The following changes define internal codes as recommended +% in Appendix C of The TeXbook: +\mathcode`\^^@="2201 % \cdot +\mathcode`\^^A="3223 % \downarrow +\mathcode`\^^B="010B % \alpha +\mathcode`\^^C="010C % \beta +\mathcode`\^^D="225E % \land +\mathcode`\^^E="023A % \lnot +\mathcode`\^^F="3232 % \in +\mathcode`\^^G="0119 % \pi +\mathcode`\^^H="0115 % \lambda +\mathcode`\^^I="010D % \gamma +\mathcode`\^^J="010E % \delta +\mathcode`\^^K="3222 % \uparrow +\mathcode`\^^L="2206 % \pm +\mathcode`\^^M="2208 % \oplus +\mathcode`\^^N="0231 % \infty +\mathcode`\^^O="0140 % \partial +\mathcode`\^^P="321A % \subset +\mathcode`\^^Q="321B % \supset +\mathcode`\^^R="225C % \cap +\mathcode`\^^S="225B % \cup +\mathcode`\^^T="0238 % \forall +\mathcode`\^^U="0239 % \exists +\mathcode`\^^V="220A % \otimes +\mathcode`\^^W="3224 % \leftrightarrow +\mathcode`\^^X="3220 % \leftarrow +\mathcode`\^^Y="3221 % \rightarrow +\mathcode`\^^Z="8000 % \ne +\mathcode`\^^[="2205 % \diamond +\mathcode`\^^\="3214 % \le +\mathcode`\^^]="3215 % \ge +\mathcode`\^^^="3211 % \equiv +\mathcode`\^^_="225F % \lor +\mathcode`\ ="8000 % \space +\mathcode`\!="5021 +\mathcode`\'="8000 % ^\prime +\mathcode`\(="4028 +\mathcode`\)="5029 +\mathcode`\*="2203 % \ast +\mathcode`\+="202B +\mathcode`\,="613B +\mathcode`\-="2200 +\mathcode`\.="013A +\mathcode`\/="013D +\mathcode`\:="303A +\mathcode`\;="603B +\mathcode`\<="313C +\mathcode`\=="303D +\mathcode`\>="313E +\mathcode`\?="503F +\mathcode`\[="405B +\mathcode`\\="026E % \backslash +\mathcode`\]="505D +\mathcode`\_="8000 % \_ +\mathcode`\{="4266 +\mathcode`\|="026A +\mathcode`\}="5267 +\mathcode`\^^?="1273 % \smallint + +% INITEX sets \uccode`x=`X and \uccode `X=`X for all letters x, +% and \lccode`x=`x, \lccode`X=`x; all other values are zero. +% No changes to those tables are needed in plain TeX format. + +% INITEX sets \sfcode x=1000 for all x, except that \sfcode`X=999 +% for uppercase letters. The following changes are needed: +\sfcode`\)=0 \sfcode`\'=0 \sfcode`\]=0 +% The \nonfrenchspacing macro will make further changes to \sfcode values. + +% Finally, INITEX sets all \delcode values to -1, except \delcode`.=0 +\delcode`\(="028300 +\delcode`\)="029301 +\delcode`\[="05B302 +\delcode`\]="05D303 +\delcode`\<="26830A +\delcode`\>="26930B +\delcode`\/="02F30E +\delcode`\|="26A30C +\delcode`\\="26E30F +% N.B. { and } should NOT get delcodes; otherwise parameter grouping fails! + +% 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. +\chardef\@ne=1 +\chardef\tw@=2 +\chardef\thr@@=3 +\chardef\sixt@@n=16 +\chardef\@cclv=255 +\mathchardef\@cclvi=256 +\mathchardef\@m=1000 +\mathchardef\@M=10000 +\mathchardef\@MM=20000 + +% 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. + +\message{registers,} + +% 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 once. + +% 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 +% 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, \box255 is +% reserved for \output; \count255, \dimen255, and \skip255 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. + +\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, ... +\countdef\insc@unt=20 % the insertion counter +\countdef\allocationnumber=21 % the most recent allocation +\countdef\m@ne=22 \m@ne=-1 % a handy constant +\def\wlog{\immediate\write\m@ne} % write on log file (only) + +% Here are abbreviations for the names of scratch registers +% that don't need to be allocated. + +\countdef\count@=255 +\dimendef\dimen@=0 +\dimendef\dimen@i=1 % global only +\dimendef\dimen@ii=2 +\skipdef\skip@=0 +\toksdef\toks@=0 + +% 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. + +\outer\def\newcount{\alloc@0\count\countdef\insc@unt} +\outer\def\newdimen{\alloc@1\dimen\dimendef\insc@unt} +\outer\def\newskip{\alloc@2\skip\skipdef\insc@unt} +\outer\def\newmuskip{\alloc@3\muskip\muskipdef\@cclvi} +\outer\def\newbox{\alloc@4\box\chardef\insc@unt} +\let\newtoks=\relax % we do this to allow plain.tex to be read in twice +\outer\def\newhelp#1#2{\newtoks#1#1\expandafter{\csname#2\endcsname}} +\outer\def\newtoks{\alloc@5\toks\toksdef\@cclvi} +\outer\def\newread{\alloc@6\read\chardef\sixt@@n} +\outer\def\newwrite{\alloc@7\write\chardef\sixt@@n} +\outer\def\newfam{\alloc@8\fam\chardef\sixt@@n} +\outer\def\newlanguage{\alloc@9\language\chardef\@cclvi} +\def\alloc@#1#2#3#4#5{\global\advance\count1#1by\@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}} +\outer\def\newinsert#1{\global\advance\insc@unt by\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}} +\def\ch@ck#1#2#3{\ifnum\count1#1<#2% + \else\errmessage{No room for a new #3}\fi} + +% Here are some examples of allocation. +\newdimen\maxdimen \maxdimen=16383.99999pt % the largest legal +\newskip\hideskip \hideskip=-1000pt plus 1fill % negative but can grow +\newskip\centering \centering=0pt plus 1000pt minus 1000pt +\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 + +% And here's a different sort of allocation: +% For example, \newif\iffoo creates \footrue, \foofalse to go with \iffoo. +\outer\def\newif#1{\count@\escapechar \escapechar\m@ne + \expandafter\expandafter\expandafter + \def\@if#1{true}{\let#1=\iftrue}% + \expandafter\expandafter\expandafter + \def\@if#1{false}{\let#1=\iffalse}% + \@if#1{false}\escapechar\count@} % the condition starts out false +\def\@if#1#2{\csname\expandafter\if@\string#1#2\endcsname} +{\uccode`1=`i \uccode`2=`f \uppercase{\gdef\if@12{}}} % `if' is required + +% Assign initial values to TeX's parameters + +\message{parameters,} + +% 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. + +\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 +% \postdisplaypenalty=0 +% \interlinepenalty=0 +% \floatingpenalty=0, set during \insert +% \outputpenalty=0, set before TeX enters \output +\doublehyphendemerits=10000 +\finalhyphendemerits=5000 +\adjdemerits=10000 +% \looseness=0, cleared by TeX after each paragraph +% \pausing=0 +% \holdinginserts=0 +% \tracingonline=0 +% \tracingmacros=0 +% \tracingstats=0 +% \tracingparagraphs=0 +% \tracingpages=0 +% \tracingoutput=0 +\tracinglostchars=1 +% \tracingcommands=0 +% \tracingrestores=0 +% \language=0 +\uchyph=1 +% \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 +\defaulthyphenchar=`\- +\defaultskewchar=-1 +% \endlinechar=`\^^M % INITEX does this +\newlinechar=-1 +\delimiterfactor=901 +% \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 +\showboxbreadth=5 +\showboxdepth=3 +\errorcontextlines=5 + +\hfuzz=0.1pt +\vfuzz=0.1pt +\overfullrule=5pt +\hsize=6.5in +\vsize=8.9in +\maxdepth=4pt +\splitmaxdepth=\maxdimen +\boxmaxdepth=\maxdimen +% \lineskiplimit=0pt, changed by \normalbaselines +\delimitershortfall=5pt +\nulldelimiterspace=1.2pt +\scriptspace=0.5pt +% \mathsurround=0pt +% \predisplaysize=0pt, set before TeX enters $$ +% \displaywidth=0pt, set before TeX enters $$ +% \displayindent=0pt, set before TeX enters $$ +\parindent=20pt +% \hangindent=0pt, zeroed by TeX after each paragraph +% \hoffset=0pt +% \voffset=0pt + +% \baselineskip=0pt, changed by \normalbaselines +% \lineskip=0pt, changed by \normalbaselines +\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 +% \leftskip=0pt +% \rightskip=0pt +\topskip=10pt +\splittopskip=10pt +% \tabskip=0pt +% \spaceskip=0pt +% \xspaceskip=0pt +\parfillskip=0pt plus 1fil + +\thinmuskip=3mu +\medmuskip=4mu plus 2mu minus 4mu +\thickmuskip=5mu plus 5mu + +% We also define special registers that function like parameters: +\newskip\smallskipamount \smallskipamount=3pt plus 1pt minus 1pt +\newskip\medskipamount \medskipamount=6pt plus 2pt minus 2pt +\newskip\bigskipamount \bigskipamount=12pt plus 4pt minus 4pt +\newskip\normalbaselineskip \normalbaselineskip=12pt +\newskip\normallineskip \normallineskip=1pt +\newdimen\normallineskiplimit \normallineskiplimit=0pt +\newdimen\jot \jot=3pt +\newcount\interdisplaylinepenalty \interdisplaylinepenalty=100 +\newcount\interfootnotelinepenalty \interfootnotelinepenalty=100 + +% Definitions for preloaded fonts + +\def\magstephalf{1095 } +\def\magstep#1{\ifcase#1 \@m\or 1200\or 1440\or 1728\or 2074\or 2488\fi\relax} + +% Fonts assigned to \preloaded are not part of "plain TeX", +% but they are preloaded so that other format packages can use them. +% For example, if another set of macros says "\font\ninerm=cmr9", +% TeX will not have to reload the font metric information for cmr9. + +\message{fonts,} + +\font\tenrm=cmr10 % roman text +\font\preloaded=cmr9 +\font\preloaded=cmr8 +\font\sevenrm=cmr7 +\font\preloaded=cmr6 +\font\fiverm=cmr5 + +\font\teni=cmmi10 % math italic +\font\preloaded=cmmi9 +\font\preloaded=cmmi8 +\font\seveni=cmmi7 +\font\preloaded=cmmi6 +\font\fivei=cmmi5 + +\font\tensy=cmsy10 % math symbols +\font\preloaded=cmsy9 +\font\preloaded=cmsy8 +\font\sevensy=cmsy7 +\font\preloaded=cmsy6 +\font\fivesy=cmsy5 + +\font\tenex=cmex10 % math extension + +\font\preloaded=cmss10 % sans serif +\font\preloaded=cmssq8 + +\font\preloaded=cmssi10 % sans serif italic +\font\preloaded=cmssqi8 + +\font\tenbf=cmbx10 % boldface extended +\font\preloaded=cmbx9 +\font\preloaded=cmbx8 +\font\sevenbf=cmbx7 +\font\preloaded=cmbx6 +\font\fivebf=cmbx5 + +\font\tentt=cmtt10 % typewriter +\font\preloaded=cmtt9 +\font\preloaded=cmtt8 + +\font\preloaded=cmsltt10 % slanted typewriter + +\font\tensl=cmsl10 % slanted roman +\font\preloaded=cmsl9 +\font\preloaded=cmsl8 + +\font\tenit=cmti10 % text italic +\font\preloaded=cmti9 +\font\preloaded=cmti8 +\font\preloaded=cmti7 + +\message{more fonts,} +\font\preloaded=cmu10 % unslanted text italic + +\font\preloaded=cmmib10 % bold math italic +\font\preloaded=cmbsy10 % bold math symbols + +\font\preloaded=cmcsc10 % caps and small caps + +\font\preloaded=cmssbx10 % sans serif bold extended + +\font\preloaded=cmdunh10 % Dunhill style + +\font\preloaded=cmr7 scaled \magstep4 % for titles +\font\preloaded=cmtt10 scaled \magstep2 +\font\preloaded=cmssbx10 scaled \magstep2 + +\font\preloaded=manfnt % METAFONT logo and dragon curve and special symbols + +% Additional \preloaded fonts can be specified here. +% (And those that were \preloaded above can be eliminated.) + +\let\preloaded=\undefined % preloaded fonts must be declared anew later. + +\skewchar\teni='177 \skewchar\seveni='177 \skewchar\fivei='177 +\skewchar\tensy='60 \skewchar\sevensy='60 \skewchar\fivesy='60 + +\textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm +\def\rm{\fam\z@\tenrm} +\textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei +\def\mit{\fam\@ne} \def\oldstyle{\fam\@ne\teni} +\textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy +\def\cal{\fam\tw@} +\textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex +\newfam\itfam \def\it{\fam\itfam\tenit} % \it is family 4 +\textfont\itfam=\tenit +\newfam\slfam \def\sl{\fam\slfam\tensl} % \sl is family 5 +\textfont\slfam=\tensl +\newfam\bffam \def\bf{\fam\bffam\tenbf} % \bf is family 6 +\textfont\bffam=\tenbf \scriptfont\bffam=\sevenbf +\scriptscriptfont\bffam=\fivebf +\newfam\ttfam \def\tt{\fam\ttfam\tentt} % \tt is family 7 +\textfont\ttfam=\tentt + +% Macros for setting ordinary text +\message{macros,} + +\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 } + +\def\normalbaselines{\lineskip\normallineskip + \baselineskip\normalbaselineskip \lineskiplimit\normallineskiplimit} + +\def\^^M{\ } % control = control +\def\^^I{\ } % same for + +\def\lq{`} \def\rq{'} +\def\lbrack{[} \def\rbrack{]} + +\let\endgraf=\par \let\endline=\cr + +\def\space{ } +\def\empty{} +\def\null{\hbox{}} + +\let\bgroup={ \let\egroup=} + +% In \obeylines, we say `\let^^M=\par' instead of `\def^^M{\par}' +% since this allows, for example, `\let\par=\cr \obeylines \halign{...' +{\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} + +\def\loop#1\repeat{\def\body{#1}\iterate} +\def\iterate{\body \let\next\iterate \else\let\next\relax\fi \next} +\let\repeat=\fi % this makes \loop...\if...\repeat skippable + +\def\thinspace{\kern .16667em } +\def\negthinspace{\kern-.16667em } +\def\enspace{\kern.5em } + +\def\enskip{\hskip.5em\relax} +\def\quad{\hskip1em\relax} +\def\qquad{\hskip2em\relax} + +\def\smallskip{\vskip\smallskipamount} +\def\medskip{\vskip\medskipamount} +\def\bigskip{\vskip\bigskipamount} + +\def\nointerlineskip{\prevdepth-1000\p@} +\def\offinterlineskip{\baselineskip-1000\p@ + \lineskip\z@ \lineskiplimit\maxdimen} + +\def\topglue{\nointerlineskip\vglue-\topskip\vglue} % for top of page +\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@} + +\def~{\penalty\@M \ } % tie +\def\slash{/\penalty\exhyphenpenalty} % a `/' that acts like a `-' + +\def\break{\penalty-\@M} +\def\nobreak{\penalty \@M} +\def\allowbreak{\penalty \z@} + +\def\filbreak{\par\vfil\penalty-200\vfilneg} +\def\goodbreak{\par\penalty-500 } +\def\eject{\par\break} +\def\supereject{\par\penalty-\@MM} + +\def\removelastskip{\ifdim\lastskip=\z@\else\vskip-\lastskip\fi} +\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} + +\def\line{\hbox to\hsize} +\def\leftline#1{\line{#1\hss}} +\def\rightline#1{\line{\hss#1}} +\def\centerline#1{\line{\hss#1\hss}} + +\def\rlap#1{\hbox to\z@{#1\hss}} +\def\llap#1{\hbox to\z@{\hss#1}} + +\def\m@th{\mathsurround\z@} +\def\underbar#1{$\setbox\z@\hbox{#1}\dp\z@\z@ + \m@th \underline{\box\z@}$} + +\newbox\strutbox +\setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width\z@} +\def\strut{\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi} + +\def\hidewidth{\hskip\hideskip} % for alignment entries that can stick out +\def\ialign{\everycr{}\tabskip\z@skip\halign} % initialized \halign +\newcount\mscount +\def\multispan#1{\omit \mscount#1\relax + \loop\ifnum\mscount>\@ne \sp@n\repeat} +\def\sp@n{\span\omit\advance\mscount\m@ne} + +\newif\ifus@ \newif\if@cr +\newbox\tabs \newbox\tabsyet \newbox\tabsdone + +\def\cleartabs{\global\setbox\tabsyet\null \setbox\tabs\null} +\def\settabs{\setbox\tabs\null \futurelet\next\sett@b} +\let\+=\relax % in case this file is being read in twice +\def\sett@b{\ifx\next\+\def\nxt{\afterassignment\s@tt@b\let\nxt}% + \else\let\nxt\s@tcols\fi \let\next\relax \nxt} +\def\s@tt@b{\let\nxt\relax \us@false\m@ketabbox} +\def\tabalign{\us@true\m@ketabbox} % non-\outer version of \+ +\outer\def\+{\tabalign} +\def\s@tcols#1\columns{\count@#1\dimen@\hsize + \loop\ifnum\count@>\z@ \@nother \repeat} +\def\@nother{\dimen@ii\dimen@ \divide\dimen@ii\count@ + \setbox\tabs\hbox{\hbox to\dimen@ii{}\unhbox\tabs}% + \advance\dimen@-\dimen@ii \advance\count@\m@ne} + +\def\m@ketabbox{\begingroup + \global\setbox\tabsyet\copy\tabs + \global\setbox\tabsdone\null + \def\cr{\@crtrue\crcr\egroup\egroup + \ifus@\unvbox\z@\lastbox\fi\endgroup + \setbox\tabs\hbox{\unhbox\tabsyet\unhbox\tabsdone}}% + \setbox\z@\vbox\bgroup\@crfalse + \ialign\bgroup&\t@bbox##\t@bb@x\crcr} + +\def\t@bbox{\setbox\z@\hbox\bgroup} +\def\t@bb@x{\if@cr\egroup % now \box\z@ holds the column + \else\hss\egroup \global\setbox\tabsyet\hbox{\unhbox\tabsyet + \global\setbox\@ne\lastbox}% now \box\@ne holds its size + \ifvoid\@ne\global\setbox\@ne\hbox to\wd\z@{}% + \else\setbox\z@\hbox to\wd\@ne{\unhbox\z@}\fi + \global\setbox\tabsdone\hbox{\box\@ne\unhbox\tabsdone}\fi + \box\z@} + +\def\hang{\hangindent\parindent} +\def\textindent#1{\indent\llap{#1\enspace}\ignorespaces} +\def\item{\par\hang\textindent} +\def\itemitem{\par\indent \hangindent2\parindent \textindent} +\def\narrower{\advance\leftskip\parindent + \advance\rightskip\parindent} + +\outer\def\beginsection#1\par{\vskip\z@ plus.3\vsize\penalty-250 + \vskip\z@ plus-.3\vsize\bigskip\vskip\parskip + \message{#1}\leftline{\bf#1}\nobreak\smallskip\noindent} +\outer\def\proclaim #1. #2\par{\medbreak + \noindent{\bf#1.\enspace}{\sl#2\par}% + \ifdim\lastskip<\medskipamount \removelastskip\penalty55\medskip\fi} + +\def\raggedright{\rightskip\z@ plus2em \spaceskip.3333em \xspaceskip.5em\relax} +\def\ttraggedright{\tt\rightskip\z@ plus2em\relax} % for use with \tt only + +\chardef\%=`\% +\chardef\&=`\& +\chardef\#=`\# +\chardef\$=`\$ +\chardef\ss="19 +\chardef\ae="1A +\chardef\oe="1B +\chardef\o="1C +\chardef\AE="1D +\chardef\OE="1E +\chardef\O="1F +\chardef\i="10 \chardef\j="11 % dotless letters +\def\aa{\accent23a} +\def\l{\char32l} +\def\L{\leavevmode\setbox0\hbox{L}\hbox to\wd0{\hss\char32L}} + +\def\leavevmode{\unhbox\voidb@x} % begins a paragraph, if necessary +\def\_{\leavevmode \kern.06em \vbox{\hrule width.3em}} +\def\AA{\leavevmode\setbox0\hbox{!}\dimen@\ht0\advance\dimen@-1ex% + \rlap{\raise.67\dimen@\hbox{\char'27}}A} + +\def\mathhexbox#1#2#3{\leavevmode + \hbox{$\m@th \mathchar"#1#2#3$}} +\def\dag{\mathhexbox279} +\def\ddag{\mathhexbox27A} +\def\S{\mathhexbox278} +\def\P{\mathhexbox27B} +\def\Orb{\mathhexbox20D} + +\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} % chars over each other +{\catcode`p=12 \catcode`t=12 \gdef\\#1pt{#1}} \let\getf@ctor=\\ +\def\sh@ft#1{\dimen@#1\kern\expandafter\getf@ctor\the\fontdimen1\font + \dimen@} % kern by #1 times the current slant +\def\d#1{{\o@lign{\relax#1\crcr\hidewidth\sh@ft{-1ex}.\hidewidth}}} +\def\b#1{{\o@lign{\relax#1\crcr\hidewidth\sh@ft{-3ex}% + \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}}} +\def\c#1{{\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent24 #1% + \else\ooalign{\unhbox\z@\crcr\hidewidth\char24\hidewidth}\fi}} +\def\copyright{{\ooalign{\hfil\raise.07ex\hbox{c}\hfil\crcr\Orb}}} + +\def\dots{\relax\ifmmode\ldots\else$\m@th\ldots\,$\fi} +\def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX} + +\def\`#1{{\accent18 #1}} +\def\'#1{{\accent19 #1}} +\def\v#1{{\accent20 #1}} \let\^^_=\v +\def\u#1{{\accent21 #1}} \let\^^S=\u +\def\=#1{{\accent22 #1}} +\def\^#1{{\accent94 #1}} \let\^^D=\^ +\def\.#1{{\accent95 #1}} +\def\H#1{{\accent"7D #1}} +\def\~#1{{\accent"7E #1}} +\def\"#1{{\accent"7F #1}} +\def\t#1{{\edef\next{\the\font}\the\textfont1\accent"7F\next#1}} + +\def\hrulefill{\leaders\hrule\hfill} +\def\dotfill{\cleaders\hbox{$\m@th \mkern1.5mu.\mkern1.5mu$}\hfill} +\def\rightarrowfill{$\m@th\smash-\mkern-7mu% + \cleaders\hbox{$\mkern-2mu\smash-\mkern-2mu$}\hfill + \mkern-7mu\mathord\rightarrow$} +\def\leftarrowfill{$\m@th\mathord\leftarrow\mkern-7mu% + \cleaders\hbox{$\mkern-2mu\smash-\mkern-2mu$}\hfill + \mkern-7mu\smash-$} +\mathchardef\braceld="37A \mathchardef\bracerd="37B +\mathchardef\bracelu="37C \mathchardef\braceru="37D +\def\downbracefill{$\m@th \setbox\z@\hbox{$\braceld$}% + \braceld\leaders\vrule height\ht\z@ depth\z@\hfill\braceru + \bracelu\leaders\vrule height\ht\z@ depth\z@\hfill\bracerd$} +\def\upbracefill{$\m@th \setbox\z@\hbox{$\braceld$}% + \bracelu\leaders\vrule height\ht\z@ depth\z@\hfill\bracerd + \braceld\leaders\vrule height\ht\z@ depth\z@\hfill\braceru$} + +\outer\def\bye{\par\vfill\supereject\end} + +% Macros for math setting +\message{math definitions,} + +\let\sp=^ \let\sb=_ +\def\,{\mskip\thinmuskip} +\def\>{\mskip\medmuskip} +\def\;{\mskip\thickmuskip} +\def\!{\mskip-\thinmuskip} +\def\*{\discretionary{\thinspace\the\textfont2\char2}{}{}} +{\catcode`\'=\active \gdef'{^\bgroup\prim@s}} +\def\prim@s{\prime\futurelet\next\pr@m@s} +\def\pr@m@s{\ifx'\next\let\nxt\pr@@@s \else\ifx^\next\let\nxt\pr@@@t + \else\let\nxt\egroup\fi\fi \nxt} +\def\pr@@@s#1{\prim@s} \def\pr@@@t#1#2{#2\egroup} +{\catcode`\^^Z=\active \gdef^^Z{\not=}} % ^^Z is like \ne in math + +{\catcode`\_=\active \global\let_=\_} % _ in math is either subscript or \_ + +\mathchardef\alpha="010B +\mathchardef\beta="010C +\mathchardef\gamma="010D +\mathchardef\delta="010E +\mathchardef\epsilon="010F +\mathchardef\zeta="0110 +\mathchardef\eta="0111 +\mathchardef\theta="0112 +\mathchardef\iota="0113 +\mathchardef\kappa="0114 +\mathchardef\lambda="0115 +\mathchardef\mu="0116 +\mathchardef\nu="0117 +\mathchardef\xi="0118 +\mathchardef\pi="0119 +\mathchardef\rho="011A +\mathchardef\sigma="011B +\mathchardef\tau="011C +\mathchardef\upsilon="011D +\mathchardef\phi="011E +\mathchardef\chi="011F +\mathchardef\psi="0120 +\mathchardef\omega="0121 +\mathchardef\varepsilon="0122 +\mathchardef\vartheta="0123 +\mathchardef\varpi="0124 +\mathchardef\varrho="0125 +\mathchardef\varsigma="0126 +\mathchardef\varphi="0127 +\mathchardef\Gamma="7000 +\mathchardef\Delta="7001 +\mathchardef\Theta="7002 +\mathchardef\Lambda="7003 +\mathchardef\Xi="7004 +\mathchardef\Pi="7005 +\mathchardef\Sigma="7006 +\mathchardef\Upsilon="7007 +\mathchardef\Phi="7008 +\mathchardef\Psi="7009 +\mathchardef\Omega="700A + +\mathchardef\aleph="0240 +\def\hbar{{\mathchar'26\mkern-9muh}} +\mathchardef\imath="017B +\mathchardef\jmath="017C +\mathchardef\ell="0160 +\mathchardef\wp="017D +\mathchardef\Re="023C +\mathchardef\Im="023D +\mathchardef\partial="0140 +\mathchardef\infty="0231 +\mathchardef\prime="0230 +\mathchardef\emptyset="023B +\mathchardef\nabla="0272 +\def\surd{{\mathchar"1270}} +\mathchardef\top="023E +\mathchardef\bot="023F +\def\angle{{\vbox{\ialign{$\m@th\scriptstyle##$\crcr + \not\mathrel{\mkern14mu}\crcr + \noalign{\nointerlineskip} + \mkern2.5mu\leaders\hrule height.34pt\hfill\mkern2.5mu\crcr}}}} +\mathchardef\triangle="0234 +\mathchardef\forall="0238 +\mathchardef\exists="0239 +\mathchardef\neg="023A \let\lnot=\neg +\mathchardef\flat="015B +\mathchardef\natural="015C +\mathchardef\sharp="015D +\mathchardef\clubsuit="027C +\mathchardef\diamondsuit="027D +\mathchardef\heartsuit="027E +\mathchardef\spadesuit="027F + +\mathchardef\coprod="1360 +\mathchardef\bigvee="1357 +\mathchardef\bigwedge="1356 +\mathchardef\biguplus="1355 +\mathchardef\bigcap="1354 +\mathchardef\bigcup="1353 +\mathchardef\intop="1352 \def\int{\intop\nolimits} +\mathchardef\prod="1351 +\mathchardef\sum="1350 +\mathchardef\bigotimes="134E +\mathchardef\bigoplus="134C +\mathchardef\bigodot="134A +\mathchardef\ointop="1348 \def\oint{\ointop\nolimits} +\mathchardef\bigsqcup="1346 +\mathchardef\smallint="1273 + +\mathchardef\triangleleft="212F +\mathchardef\triangleright="212E +\mathchardef\bigtriangleup="2234 +\mathchardef\bigtriangledown="2235 +\mathchardef\wedge="225E \let\land=\wedge +\mathchardef\vee="225F \let\lor=\vee +\mathchardef\cap="225C +\mathchardef\cup="225B +\mathchardef\ddagger="227A +\mathchardef\dagger="2279 +\mathchardef\sqcap="2275 +\mathchardef\sqcup="2274 +\mathchardef\uplus="225D +\mathchardef\amalg="2271 +\mathchardef\diamond="2205 +\mathchardef\bullet="220F +\mathchardef\wr="226F +\mathchardef\div="2204 +\mathchardef\odot="220C +\mathchardef\oslash="220B +\mathchardef\otimes="220A +\mathchardef\ominus="2209 +\mathchardef\oplus="2208 +\mathchardef\mp="2207 +\mathchardef\pm="2206 +\mathchardef\circ="220E +\mathchardef\bigcirc="220D +\mathchardef\setminus="226E % for set difference A\setminus B +\mathchardef\cdot="2201 +\mathchardef\ast="2203 +\mathchardef\times="2202 +\mathchardef\star="213F + +\mathchardef\propto="322F +\mathchardef\sqsubseteq="3276 +\mathchardef\sqsupseteq="3277 +\mathchardef\parallel="326B +\mathchardef\mid="326A +\mathchardef\dashv="3261 +\mathchardef\vdash="3260 +\mathchardef\nearrow="3225 +\mathchardef\searrow="3226 +\mathchardef\nwarrow="322D +\mathchardef\swarrow="322E +\mathchardef\Leftrightarrow="322C +\mathchardef\Leftarrow="3228 +\mathchardef\Rightarrow="3229 +\def\neq{\not=} \let\ne=\neq +\mathchardef\leq="3214 \let\le=\leq +\mathchardef\geq="3215 \let\ge=\geq +\mathchardef\succ="321F +\mathchardef\prec="321E +\mathchardef\approx="3219 +\mathchardef\succeq="3217 +\mathchardef\preceq="3216 +\mathchardef\supset="321B +\mathchardef\subset="321A +\mathchardef\supseteq="3213 +\mathchardef\subseteq="3212 +\mathchardef\in="3232 +\mathchardef\ni="3233 \let\owns=\ni +\mathchardef\gg="321D +\mathchardef\ll="321C +\mathchardef\not="3236 +\mathchardef\leftrightarrow="3224 +\mathchardef\leftarrow="3220 \let\gets=\leftarrow +\mathchardef\rightarrow="3221 \let\to=\rightarrow +\mathchardef\mapstochar="3237 \def\mapsto{\mapstochar\rightarrow} +\mathchardef\sim="3218 +\mathchardef\simeq="3227 +\mathchardef\perp="323F +\mathchardef\equiv="3211 +\mathchardef\asymp="3210 +\mathchardef\smile="315E +\mathchardef\frown="315F +\mathchardef\leftharpoonup="3128 +\mathchardef\leftharpoondown="3129 +\mathchardef\rightharpoonup="312A +\mathchardef\rightharpoondown="312B + +\def\joinrel{\mathrel{\mkern-3mu}} +\def\relbar{\mathrel{\smash-}} % \smash, because - has the same height as + +\def\Relbar{\mathrel=} +\mathchardef\lhook="312C \def\hookrightarrow{\lhook\joinrel\rightarrow} +\mathchardef\rhook="312D \def\hookleftarrow{\leftarrow\joinrel\rhook} +\def\bowtie{\mathrel\triangleright\joinrel\mathrel\triangleleft} +\def\models{\mathrel|\joinrel=} +\def\Longrightarrow{\Relbar\joinrel\Rightarrow} +\def\longrightarrow{\relbar\joinrel\rightarrow} +\def\longleftarrow{\leftarrow\joinrel\relbar} +\def\Longleftarrow{\Leftarrow\joinrel\Relbar} +\def\longmapsto{\mapstochar\longrightarrow} +\def\longleftrightarrow{\leftarrow\joinrel\rightarrow} +\def\Longleftrightarrow{\Leftarrow\joinrel\Rightarrow} +\def\iff{\;\Longleftrightarrow\;} + +\mathchardef\ldotp="613A % ldot as a punctuation mark +\mathchardef\cdotp="6201 % cdot as a punctuation mark +\mathchardef\colon="603A % colon as a punctuation mark +\def\ldots{\mathinner{\ldotp\ldotp\ldotp}} +\def\cdots{\mathinner{\cdotp\cdotp\cdotp}} +\def\vdots{\vbox{\baselineskip4\p@ \lineskiplimit\z@ + \kern6\p@\hbox{.}\hbox{.}\hbox{.}}} +\def\ddots{\mathinner{\mkern1mu\raise7\p@\vbox{\kern7\p@\hbox{.}}\mkern2mu + \raise4\p@\hbox{.}\mkern2mu\raise\p@\hbox{.}\mkern1mu}} + +\def\acute{\mathaccent"7013 } +\def\grave{\mathaccent"7012 } +\def\ddot{\mathaccent"707F } +\def\tilde{\mathaccent"707E } +\def\bar{\mathaccent"7016 } +\def\breve{\mathaccent"7015 } +\def\check{\mathaccent"7014 } +\def\hat{\mathaccent"705E } +\def\vec{\mathaccent"017E } +\def\dot{\mathaccent"705F } +\def\widetilde{\mathaccent"0365 } +\def\widehat{\mathaccent"0362 } +\def\overrightarrow#1{\vbox{\m@th\ialign{##\crcr + \rightarrowfill\crcr\noalign{\kern-\p@\nointerlineskip} + $\hfil\displaystyle{#1}\hfil$\crcr}}} +\def\overleftarrow#1{\vbox{\m@th\ialign{##\crcr + \leftarrowfill\crcr\noalign{\kern-\p@\nointerlineskip} + $\hfil\displaystyle{#1}\hfil$\crcr}}} +\def\overbrace#1{\mathop{\vbox{\m@th\ialign{##\crcr\noalign{\kern3\p@} + \downbracefill\crcr\noalign{\kern3\p@\nointerlineskip} + $\hfil\displaystyle{#1}\hfil$\crcr}}}\limits} +\def\underbrace#1{\mathop{\vtop{\m@th\ialign{##\crcr + $\hfil\displaystyle{#1}\hfil$\crcr\noalign{\kern3\p@\nointerlineskip} + \upbracefill\crcr\noalign{\kern3\p@}}}}\limits} +\def\skew#1#2#3{{\muskip\z@#1mu\divide\muskip\z@\tw@ \mkern\muskip\z@ + #2{\mkern-\muskip\z@{#3}\mkern\muskip\z@}\mkern-\muskip\z@}{}} + +\def\lmoustache{\delimiter"437A340 } % top from (, bottom from ) +\def\rmoustache{\delimiter"537B341 } % top from ), bottom from ( +\def\lgroup{\delimiter"462833A } % extensible ( with sharper tips +\def\rgroup{\delimiter"562933B } % extensible ) with sharper tips +\def\arrowvert{\delimiter"26A33C } % arrow without arrowheads +\def\Arrowvert{\delimiter"26B33D } % double arrow without arrowheads +\def\bracevert{\delimiter"77C33E } % the vertical bar that extends braces +\def\Vert{\delimiter"26B30D } \let\|=\Vert +\def\vert{\delimiter"26A30C } +\def\uparrow{\delimiter"3222378 } +\def\downarrow{\delimiter"3223379 } +\def\updownarrow{\delimiter"326C33F } +\def\Uparrow{\delimiter"322A37E } +\def\Downarrow{\delimiter"322B37F } +\def\Updownarrow{\delimiter"326D377 } +\def\backslash{\delimiter"26E30F } % for double coset G\backslash H +\def\rangle{\delimiter"526930B } +\def\langle{\delimiter"426830A } +\def\rbrace{\delimiter"5267309 } \let\}=\rbrace +\def\lbrace{\delimiter"4266308 } \let\{=\lbrace +\def\rceil{\delimiter"5265307 } +\def\lceil{\delimiter"4264306 } +\def\rfloor{\delimiter"5263305 } +\def\lfloor{\delimiter"4262304 } + +\def\bigl{\mathopen\big} +\def\bigm{\mathrel\big} +\def\bigr{\mathclose\big} +\def\Bigl{\mathopen\Big} +\def\Bigm{\mathrel\Big} +\def\Bigr{\mathclose\Big} +\def\biggl{\mathopen\bigg} +\def\biggm{\mathrel\bigg} +\def\biggr{\mathclose\bigg} +\def\Biggl{\mathopen\Bigg} +\def\Biggm{\mathrel\Bigg} +\def\Biggr{\mathclose\Bigg} +\def\big#1{{\hbox{$\left#1\vbox to8.5\p@{}\right.\n@space$}}} +\def\Big#1{{\hbox{$\left#1\vbox to11.5\p@{}\right.\n@space$}}} +\def\bigg#1{{\hbox{$\left#1\vbox to14.5\p@{}\right.\n@space$}}} +\def\Bigg#1{{\hbox{$\left#1\vbox to17.5\p@{}\right.\n@space$}}} +\def\n@space{\nulldelimiterspace\z@ \m@th} + +\def\choose{\atopwithdelims()} +\def\brack{\atopwithdelims[]} +\def\brace{\atopwithdelims\{\}} + +\def\sqrt{\radical"270370 } + +\def\mathpalette#1#2{\mathchoice{#1\displaystyle{#2}}% + {#1\textstyle{#2}}{#1\scriptstyle{#2}}{#1\scriptscriptstyle{#2}}} +\newbox\rootbox +\def\root#1\of{\setbox\rootbox + \hbox{$\m@th\scriptscriptstyle{#1}$}\mathpalette\r@@t} +\def\r@@t#1#2{\setbox\z@\hbox{$\m@th#1\sqrt{#2}$}\dimen@\ht\z@ + \advance\dimen@-\dp\z@ + \mkern5mu\raise.6\dimen@\copy\rootbox \mkern-10mu\box\z@} +\newif\ifv@ \newif\ifh@ +\def\vphantom{\v@true\h@false\ph@nt} +\def\hphantom{\v@false\h@true\ph@nt} +\def\phantom{\v@true\h@true\ph@nt} +\def\ph@nt{\ifmmode\def\next{\mathpalette\mathph@nt}% + \else\let\next\makeph@nt\fi\next} +\def\makeph@nt#1{\setbox\z@\hbox{#1}\finph@nt} +\def\mathph@nt#1#2{\setbox\z@\hbox{$\m@th#1{#2}$}\finph@nt} +\def\finph@nt{\setbox\tw@\null + \ifv@ \ht\tw@\ht\z@ \dp\tw@\dp\z@\fi + \ifh@ \wd\tw@\wd\z@\fi \box\tw@} +\def\mathstrut{\vphantom(} +\def\smash{\relax % \relax, in case this comes first in \halign + \ifmmode\def\next{\mathpalette\mathsm@sh}\else\let\next\makesm@sh + \fi\next} +\def\makesm@sh#1{\setbox\z@\hbox{#1}\finsm@sh} +\def\mathsm@sh#1#2{\setbox\z@\hbox{$\m@th#1{#2}$}\finsm@sh} +\def\finsm@sh{\ht\z@\z@ \dp\z@\z@ \box\z@} + +\def\cong{\mathrel{\mathpalette\@vereq\sim}} % congruence sign +\def\@vereq#1#2{\lower.5\p@\vbox{\lineskiplimit\maxdimen\lineskip-.5\p@ + \ialign{$\m@th#1\hfil##\hfil$\crcr#2\crcr=\crcr}}} +\def\notin{\mathrel{\mathpalette\c@ncel\in}} +\def\c@ncel#1#2{\m@th\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}} +\def\rightleftharpoons{\mathrel{\mathpalette\rlh@{}}} +\def\rlh@#1{\vcenter{\m@th\hbox{\ooalign{\raise2pt + \hbox{$#1\rightharpoonup$}\crcr + $#1\leftharpoondown$}}}} +\def\buildrel#1\over#2{\mathrel{\mathop{\kern\z@#2}\limits^{#1}}} +\def\doteq{\buildrel\textstyle.\over=} + +\def\log{\mathop{\rm log}\nolimits} +\def\lg{\mathop{\rm lg}\nolimits} +\def\ln{\mathop{\rm ln}\nolimits} +\def\lim{\mathop{\rm lim}} +\def\limsup{\mathop{\rm lim\,sup}} +\def\liminf{\mathop{\rm lim\,inf}} +\def\sin{\mathop{\rm sin}\nolimits} +\def\arcsin{\mathop{\rm arcsin}\nolimits} +\def\sinh{\mathop{\rm sinh}\nolimits} +\def\cos{\mathop{\rm cos}\nolimits} +\def\arccos{\mathop{\rm arccos}\nolimits} +\def\cosh{\mathop{\rm cosh}\nolimits} +\def\tan{\mathop{\rm tan}\nolimits} +\def\arctan{\mathop{\rm arctan}\nolimits} +\def\tanh{\mathop{\rm tanh}\nolimits} +\def\cot{\mathop{\rm cot}\nolimits} +\def\coth{\mathop{\rm coth}\nolimits} +\def\sec{\mathop{\rm sec}\nolimits} +\def\csc{\mathop{\rm csc}\nolimits} +\def\max{\mathop{\rm max}} +\def\min{\mathop{\rm min}} +\def\sup{\mathop{\rm sup}} +\def\inf{\mathop{\rm inf}} +\def\arg{\mathop{\rm arg}\nolimits} +\def\ker{\mathop{\rm ker}\nolimits} +\def\dim{\mathop{\rm dim}\nolimits} +\def\hom{\mathop{\rm hom}\nolimits} +\def\det{\mathop{\rm det}} +\def\exp{\mathop{\rm exp}\nolimits} +\def\Pr{\mathop{\rm Pr}} +\def\gcd{\mathop{\rm gcd}} +\def\deg{\mathop{\rm deg}\nolimits} + +\def\bmod{\nonscript\mskip-\medmuskip\mkern5mu + \mathbin{\rm mod}\penalty900\mkern5mu\nonscript\mskip-\medmuskip} +\def\pmod#1{\allowbreak\mkern18mu({\rm mod}\,\,#1)} + +\def\cases#1{\left\{\,\vcenter{\normalbaselines\m@th + \ialign{$##\hfil$&\quad##\hfil\crcr#1\crcr}}\right.} +\def\matrix#1{\null\,\vcenter{\normalbaselines\m@th + \ialign{\hfil$##$\hfil&&\quad\hfil$##$\hfil\crcr + \mathstrut\crcr\noalign{\kern-\baselineskip} + #1\crcr\mathstrut\crcr\noalign{\kern-\baselineskip}}}\,} +\def\pmatrix#1{\left(\matrix{#1}\right)} +\newdimen\p@renwd +\setbox0=\hbox{\tenex B} \p@renwd=\wd0 % width of the big left ( +\def\bordermatrix#1{\begingroup \m@th + \setbox\z@\vbox{\def\cr{\crcr\noalign{\kern2\p@\global\let\cr\endline}}% + \ialign{$##$\hfil\kern2\p@\kern\p@renwd&\thinspace\hfil$##$\hfil + &&\quad\hfil$##$\hfil\crcr + \omit\strut\hfil\crcr\noalign{\kern-\baselineskip}% + #1\crcr\omit\strut\cr}}% + \setbox\tw@\vbox{\unvcopy\z@\global\setbox\@ne\lastbox}% + \setbox\tw@\hbox{\unhbox\@ne\unskip\global\setbox\@ne\lastbox}% + \setbox\tw@\hbox{$\kern\wd\@ne\kern-\p@renwd\left(\kern-\wd\@ne + \global\setbox\@ne\vbox{\box\@ne\kern2\p@}% + \vcenter{\kern-\ht\@ne\unvbox\z@\kern-\baselineskip}\,\right)$}% + \null\;\vbox{\kern\ht\@ne\box\tw@}\endgroup} + +\def\openup{\afterassignment\@penup\dimen@=} +\def\@penup{\advance\lineskip\dimen@ + \advance\baselineskip\dimen@ + \advance\lineskiplimit\dimen@} +\def\eqalign#1{\null\,\vcenter{\openup\jot\m@th + \ialign{\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil + \crcr#1\crcr}}\,} +\newif\ifdt@p +\def\displ@y{\global\dt@ptrue\openup\jot\m@th + \everycr{\noalign{\ifdt@p \global\dt@pfalse \ifdim\prevdepth>-1000\p@ + \vskip-\lineskiplimit \vskip\normallineskiplimit \fi + \else \penalty\interdisplaylinepenalty \fi}}} +\def\@lign{\tabskip\z@skip\everycr{}} % restore inside \displ@y +\def\displaylines#1{\displ@y \tabskip\z@skip + \halign{\hbox to\displaywidth{$\@lign\hfil\displaystyle##\hfil$}\crcr + #1\crcr}} +\def\eqalignno#1{\displ@y \tabskip\centering + \halign to\displaywidth{\hfil$\@lign\displaystyle{##}$\tabskip\z@skip + &$\@lign\displaystyle{{}##}$\hfil\tabskip\centering + &\llap{$\@lign##$}\tabskip\z@skip\crcr + #1\crcr}} +\def\leqalignno#1{\displ@y \tabskip\centering + \halign to\displaywidth{\hfil$\@lign\displaystyle{##}$\tabskip\z@skip + &$\@lign\displaystyle{{}##}$\hfil\tabskip\centering + &\kern-\displaywidth\rlap{$\@lign##$}\tabskip\displaywidth\crcr + #1\crcr}} + +% Definitions related to output + +\message{output routines,} + +\countdef\pageno=0 \pageno=1 % first page is number 1 +\newtoks\headline \headline={\hfil} % headline is normally blank +\newtoks\footline \footline={\hss\tenrm\folio\hss} + % footline is normally a centered page number in font \tenrm +\newif\ifr@ggedbottom +\def\raggedbottom{\topskip 10\p@ plus60\p@ \r@ggedbottomtrue} +\def\normalbottom{\topskip 10\p@ \r@ggedbottomfalse} % undoes \raggedbottom +\def\folio{\ifnum\pageno<\z@ \romannumeral-\pageno \else\number\pageno \fi} +\def\nopagenumbers{\footline{\hfil}} % blank out the footline +\def\advancepageno{\ifnum\pageno<\z@ \global\advance\pageno\m@ne + \else\global\advance\pageno\@ne \fi} % increase |pageno| + +\newinsert\footins +\def\footnote#1{\let\@sf\empty % parameter #2 (the text) is read later + \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi + #1\@sf\vfootnote{#1}} +\def\vfootnote#1{\insert\footins\bgroup + \interlinepenalty\interfootnotelinepenalty + \splittopskip\ht\strutbox % top baseline for broken footnotes + \splitmaxdepth\dp\strutbox \floatingpenalty\@MM + \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip + \textindent{#1}\footstrut\futurelet\next\fo@t} +\def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t + \else\let\next\f@t\fi \next} +\def\f@@t{\bgroup\aftergroup\@foot\let\next} +\def\f@t#1{#1\@foot} +\def\@foot{\strut\egroup} +\def\footstrut{\vbox to\splittopskip{}} +\skip\footins=\bigskipamount % space added when footnote is present +\count\footins=1000 % footnote magnification factor (1 to 1) +\dimen\footins=8in % maximum footnotes per page + +\newinsert\topins +\newif\ifp@ge \newif\if@mid +\def\topinsert{\@midfalse\p@gefalse\@ins} +\def\midinsert{\@midtrue\@ins} +\def\pageinsert{\@midfalse\p@getrue\@ins} +\skip\topins=\z@skip % no space added when a topinsert is present +\count\topins=1000 % magnification factor (1 to 1) +\dimen\topins=\maxdimen % no limit per page +\def\@ins{\par\begingroup\setbox\z@\vbox\bgroup} % start a \vbox +\def\endinsert{\egroup % finish the \vbox + \if@mid \dimen@\ht\z@ \advance\dimen@\dp\z@ \advance\dimen@12\p@ + \advance\dimen@\pagetotal \advance\dimen@-\pageshrink + \ifdim\dimen@>\pagegoal\@midfalse\p@gefalse\fi\fi + \if@mid \bigskip\box\z@\bigbreak + \else\insert\topins{\penalty100 % floating insertion + \splittopskip\z@skip + \splitmaxdepth\maxdimen \floatingpenalty\z@ + \ifp@ge \dimen@\dp\z@ + \vbox to\vsize{\unvbox\z@\kern-\dimen@}% depth is zero + \else \box\z@\nobreak\bigskip\fi}\fi\endgroup} + +\output{\plainoutput} +\def\plainoutput{\shipout\vbox{\makeheadline\pagebody\makefootline}% + \advancepageno + \ifnum\outputpenalty>-\@MM \else\dosupereject\fi} +\def\pagebody{\vbox to\vsize{\boxmaxdepth\maxdepth \pagecontents}} +\def\makeheadline{\vbox to\z@{\vskip-22.5\p@ + \line{\vbox to8.5\p@{}\the\headline}\vss}\nointerlineskip} +\def\makefootline{\baselineskip24\p@\lineskiplimit\z@\line{\the\footline}} +\def\dosupereject{\ifnum\insertpenalties>\z@ % something is being held over + \line{}\kern-\topskip\nobreak\vfill\supereject\fi} + +\def\pagecontents{\ifvoid\topins\else\unvbox\topins\fi + \dimen@=\dp\@cclv \unvbox\@cclv % open up \box255 + \ifvoid\footins\else % footnote info is present + \vskip\skip\footins + \footnoterule + \unvbox\footins\fi + \ifr@ggedbottom \kern-\dimen@ \vfil \fi} +\def\footnoterule{\kern-3\p@ + \hrule width 2truein \kern 2.6\p@} % the \hrule is .4pt high + +% Hyphenation, miscellaneous macros, and initial values for standard layout +\message{hyphenation} + +\lefthyphenmin=2 \righthyphenmin=3 % disallow x- or -xx breaks +\input hyphen + +\def\magnification{\afterassignment\m@g\count@} +\def\m@g{\mag\count@ + \hsize6.5truein\vsize8.9truein\dimen\footins8truein} + +\def\loggingall{\tracingcommands\tw@\tracingstats\tw@ + \tracingpages\@ne\tracingoutput\@ne\tracinglostchars\@ne + \tracingmacros\tw@\tracingparagraphs\@ne\tracingrestores\@ne + \showboxbreadth\maxdimen\showboxdepth\maxdimen\errorstopmode} +\def\tracingall{\tracingonline\@ne\loggingall} + +\def\showhyphens#1{\setbox0\vbox{\parfillskip\z@skip\hsize\maxdimen\tenrm + \pretolerance\m@ne\tolerance\m@ne\hbadness0\showboxdepth0\ #1}} + +\normalbaselines\rm % select roman font +\nonfrenchspacing % punctuation affects the spacing +\catcode`@=12 % at signs are no longer letters + +\def\fmtname{plain}\def\fmtversion{3.14159265} % identifies the current format diff --git a/Master/texmf-dist/tex/plain/base/story.tex b/Master/texmf-dist/tex/plain/base/story.tex new file mode 100644 index 00000000000..fcbaa4151af --- /dev/null +++ b/Master/texmf-dist/tex/plain/base/story.tex @@ -0,0 +1,18 @@ +\hrule +\vskip 1in +\centerline{\bf A SHORT STORY} +\vskip 6pt +\centerline{\sl by A. U. Thor} % !`?`?! (modified) +\vskip .5cm +Once upon a time, in a distant + galaxy called \"O\"o\c c, +there lived a computer +named R.~J. Drofnats. + +Mr.~Drofnats---or ``R. J.,'' as +he preferred to be called---% error has been fixed! +was happiest when he was at work +typesetting beautiful documents. +\vskip 1in +\hrule +\vfill\eject diff --git a/Master/texmf-dist/tex/plain/base/testfont.tex b/Master/texmf-dist/tex/plain/base/testfont.tex new file mode 100644 index 00000000000..f7d146f8671 --- /dev/null +++ b/Master/texmf-dist/tex/plain/base/testfont.tex @@ -0,0 +1,208 @@ +% A testbed for font evaluation (see The METAFONTbook, Appendix H) + +\tracinglostchars=0 +\tolerance=1000 +\raggedbottom +\nopagenumbers +\parindent=0pt +\newlinechar=`@ +\hyphenpenalty=200 +\doublehyphendemerits=30000 +\hyphenation{prom-i-nent} + +\newcount\m \newcount\n \newcount\p \newdimen\dim +\chardef\other=12 + +\def\today{\ifcase\month\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi + \space\number\day, \number\year} +\def\hours{\n=\time \divide\n 60 + \m=-\n \multiply\m 60 \advance\m \time + \twodigits\n\twodigits\m} +\def\twodigits#1{\ifnum #1<10 0\fi \number#1} + +\def\init{\message{@Name of the font to test = } + \read-1 to\fontname \startfont + \message{Now type a test command (\string\help\space for help):}} +\def\startfont{\font\testfont=\fontname \spaceskip=0pt + \leftline{\sevenrm Test of \fontname\unskip\ on \today\ at \hours} + \medskip + \testfont \setbaselineskip + \ifdim\fontdimen6\testfont<10pt \rightskip=0pt plus 20pt + \else\rightskip=0pt plus 2em \fi + \spaceskip=\fontdimen2\testfont % space between words (\raggedright) + \xspaceskip=\fontdimen2\testfont \advance\xspaceskip by\fontdimen7\testfont} + +{\catcode`\|=0 \catcode`\\=\other +|gdef|help{|message{% +\init switches to another font;@% +\end or \bye finishes the run;@% +\table prints the font layout in tabular format;@% +\text prints a sample text, assuming TeX text font conventions;@% +\sample combines \table and \text;@% +\mixture mixes a background character with a series of others;@% +\alternation interleaves a background character with a series;@% +\alphabet prints all lowercase letters within a given background;@% +\ALPHABET prints all uppercase letters within a given background;@% +\series prints a series of letters within a given background;@% +\lowers prints a comprehensive test of lowercase;@% +\uppers prints a comprehensive test of uppercase;@% +\digits prints a comprehensive test of numerals;@% +\math prints a comprehensive test of TeX math italic;@% +\names prints a text that mixes upper and lower case;@% +\punct prints a punctuation test;@% +\bigtest combines many of the above routines;@% +\help repeats this message;@% +and you can use ordinary TeX commands (e.g., to \input a file).}}} + +\def\setbaselineskip{\setbox0=\hbox{\n=0 +\loop\char\n \ifnum \n<255 \advance\n 1 \repeat} +\baselineskip=6pt \advance\baselineskip\ht0 \advance\baselineskip\dp0 } + +\def\setchar#1{{\escapechar-1\message{\string#1 character = }% + \def\do##1{\catcode`##1=\other}\dospecials + \read-1 to\next + \expandafter\finsetchar\next\next#1}} +\def\finsetchar#1#2\next#3{\global\chardef#3=`#1 + \ifnum #3=`\# \global\chardef#3=#2 \fi} +\def\promptthree{\setchar\background + \setchar\starting \setchar\ending} + +\def\mixture{\promptthree \domix\mixpattern} +\def\alternation{\promptthree \domix\altpattern} +\def\mixpattern{\0\1\0\0\1\1\0\0\0\1\1\1\0\1} +\def\altpattern{\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0} +\def\domix#1{\par\chardef\0=\background \n=\starting + \loop \chardef\1=\n #1\endgraf + \ifnum \n<\ending \advance\n 1 \repeat} + +\def\!{\discretionary{\background}{\background}{\background}} +\def\series{\promptthree \!\doseries\starting\ending\par} +\def\doseries#1#2{\n=#1\loop\char\n\!\ifnum\n<#2\advance\n 1 \repeat} +\def\complower{\!\doseries{`a}{`z}\doseries{'31}{'34}\par} +\def\compupper{\!\doseries{`A}{`Z}\doseries{'35}{'37}\par} +\def\compdigs{\!\doseries{`0}{`9}\par} +\def\alphabet{\setchar\background\complower} +\def\ALPHABET{\setchar\background\compupper} + +\def\lowers{\docomprehensive\complower{`a}{`z}{'31}{'34}} +\def\uppers{\docomprehensive\compupper{`A}{`Z}{'35}{'37}} +\def\digits{\docomprehensive\compdigs{`0}{`4}{`5}{`9}} +\def\docomprehensive#1#2#3#4#5{\par\chardef\background=#2 + \loop{#1} \ifnum\background<#3\m=\background\advance\m 1 + \chardef\background=\m \repeat \chardef\background=#4 + \loop{#1} \ifnum\background<#5\m=\background\advance\m 1 + \chardef\background=\m \repeat} + +\def\names{ {\AA}ngel\aa\ Beatrice Claire + Diana \'Erica Fran\c{c}oise Ginette H\'el\`ene Iris + Jackie K\=aren {\L}au\.ra Mar{\'\i}a N\H{a}ta{\l}{\u\i}e {\O}ctave + Pauline Qu\^eneau Roxanne Sabine T\~a{\'\j}a Ur\v{s}ula + Vivian Wendy Xanthippe Yv{\o}nne Z\"azilie\par} +\def\punct{\par\dopunct{min}\dopunct{pig}\dopunct{hid} + \dopunct{HIE}\dopunct{TIP}\dopunct{fluff} + \$1,234.56 + 7/8 = 9\% @ \#0\par} +\def\dopunct#1{#1,\ #1:\ #1;\ `#1'\ ?`#1?\ !`#1!\ (#1)\ [#1]\ #1*\ #1.\par} + +\def\bigtest{\sample + hamburgefonstiv HAMBURGEFONSTIV\par + \names \punct \lowers \uppers \digits} + +\def\math{\textfont1=\testfont \skewchar\testfont=\skewtrial + \mathchardef\Gamma="100 \mathchardef\Delta="101 + \mathchardef\Theta="102 \mathchardef\Lambda="103 \mathchardef\Xi="104 + \mathchardef\Pi="105 \mathchardef\Sigma="106 \mathchardef\Upsilon="107 + \mathchardef\Phi="108 \mathchardef\Psi="109 \mathchardef\Omega="10A + \def\ii{i} \def\jj{j} + \def\\##1{|##1|+}\mathtrial + \def\\##1{##1_2+}\mathtrial + \def\\##1{##1^2+}\mathtrial + \def\\##1{##1/2+}\mathtrial + \def\\##1{2/##1+}\mathtrial + \def\\##1{##1,{}+}\mathtrial + \def\\##1{d##1+}\mathtrial + \let\ii=\imath \let\jj=\jmath \def\\##1{\hat##1+}\mathtrial} +\newcount\skewtrial \skewtrial='177 +\def\mathtrial{$\\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 \\a \\b \\c \\d \\e \\f \\g + \\h \\\ii \\\jj \\k \\l \\m \\n \\o \\p \\q \\r \\s \\t \\u \\v \\w \\x \\y + \\z \\\alpha \\\beta \\\gamma \\\delta \\\epsilon \\\zeta \\\eta \\\theta + \\\iota \\\kappa \\\lambda \\\mu \\\nu \\\xi \\\pi \\\rho \\\sigma \\\tau + \\\upsilon \\\phi \\\chi \\\psi \\\omega \\\vartheta \\\varpi \\\varphi + \\\Gamma \\\Delta \\\Theta \\\Lambda \\\Xi \\\Pi \\\Sigma \\\Upsilon + \\\Phi \\\Psi \\\Omega \\\partial \\\ell \\\wp$\par} +\def\mathsy{\begingroup\skewtrial='060 % for math symbol font tests + \def\mathtrial{$\\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$\par} + \math\endgroup} + +\def\oct#1{\hbox{\rm\'{}\kern-.2em\it#1\/\kern.05em}} % octal constant +\def\hex#1{\hbox{\rm\H{}\tt#1}} % hexadecimal constant +\def\setdigs#1"#2{\gdef\h{#2}% \h=hex prefix; \0\1=corresponding octal + \m=\n \divide\m by 64 \xdef\0{\the\m}% + \multiply\m by-64 \advance\m by\n \divide\m by 8 \xdef\1{\the\m}} +\def\testrow{\setbox0=\hbox{\penalty 1\def\\{\char"\h}% + \\0\\1\\2\\3\\4\\5\\6\\7\\8\\9\\A\\B\\C\\D\\E\\F% + \global\p=\lastpenalty}} % \p=1 if none of the characters exist +\def\oddline{\cr + \noalign{\nointerlineskip} + \multispan{19}\hrulefill& + \setbox0=\hbox{\lower 2.3pt\hbox{\hex{\h x}}}\smash{\box0}\cr + \noalign{\nointerlineskip}} +\newif\ifskipping +\def\evenline{\loop\skippingfalse + \ifnum\n<256 \m=\n \divide\m 16 \chardef\next=\m + \expandafter\setdigs\meaning\next \testrow + \ifnum\p=1 \skippingtrue \fi\fi + \ifskipping \global\advance\n 16 \repeat + \ifnum\n=256 \let\next=\endchart\else\let\next=\morechart\fi + \next} +\def\morechart{\cr\noalign{\hrule\penalty5000} + \chartline \oddline \m=\1 \advance\m 1 \xdef\1{\the\m} + \chartline \evenline} +\def\chartline{&\oct{\0\1x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&} +\def\chartstrut{\lower4.5pt\vbox to14pt{}} +\def\table{$$\global\n=0 + \halign to\hsize\bgroup + \chartstrut##\tabskip0pt plus10pt& + &\hfil##\hfil&\vrule##\cr + \lower6.5pt\null + &&&\oct0&&\oct1&&\oct2&&\oct3&&\oct4&&\oct5&&\oct6&&\oct7&\evenline} +\def\endchart{\cr\noalign{\hrule} + \raise11.5pt\null&&&\hex 8&&\hex 9&&\hex A&&\hex B& + &\hex C&&\hex D&&\hex E&&\hex F&\cr\egroup$$\par} +\def\:{\setbox0=\hbox{\noboundary\char\n\noboundary}% + \ifdim\ht0>7.5pt\reposition + \else\ifdim\dp0>2.5pt\reposition\fi\fi + \box0\global\advance\n 1 } +\def\reposition{\setbox0=\vbox{\kern2pt\box0}\dim=\dp0 + \advance\dim 2pt \dp0=\dim} +\def\centerlargechars{ + \def\reposition{\setbox0=\hbox{$\vcenter{\kern2pt\box0\kern2pt}$}}} + +\def\text{{\advance\baselineskip-4pt +\setbox0=\hbox{abcdefghijklmnopqrstuvwxyz} +\ifdim\hsize>2\wd0 \ifdim 15pc>2\wd0 \hsize=15pc \else \hsize=2\wd0 \fi\fi +On November 14, 1885, Senator \& Mrs.~Leland Stanford called +together at their San Francisco mansion the 24~prominent men who had +been chosen as the first trustees of The Leland Stanford Junior University. +They handed to the board the Founding Grant of the University, which they +had executed three days before. This document---with various amendments, +legislative acts, and court decrees---remains as the University's charter. +In bold, sweeping language it stipulates that the objectives of the University +are ``to qualify students for personal success and direct usefulness in life; +and to promote the publick welfare by exercising an influence in behalf of +humanity and civilization, teaching the blessings of liberty regulated by +law, and inculcating love and reverence for the great principles of +government as derived from the inalienable rights of man to life, liberty, +and the pursuit of happiness.'' \moretext +(!`THE DAZED BROWN FOX QUICKLY GAVE 12345--67890 JUMPS!)\par}} +\def\moretext{?`But aren't Kafka's Schlo{\ss} and {\AE}sop's {\OE}uvres +often na{\"\i}ve vis-\`a-vis the d{\ae}monic ph{\oe}nix's official r\^ole +in fluffy souffl\'es? } +\def\omitaccents{\let\moretext=\relax} + +\def\sample{\table\text} + +\ifx\noinit!\else\init\fi diff --git a/Master/texmf-dist/tex/plain/base/webmac.tex b/Master/texmf-dist/tex/plain/base/webmac.tex new file mode 100644 index 00000000000..5ca707bb9b2 --- /dev/null +++ b/Master/texmf-dist/tex/plain/base/webmac.tex @@ -0,0 +1,206 @@ +% standard macros for WEB listings (in addition to PLAIN.TEX) +\xdef\fmtversion{\fmtversion+WEBMAC4.1} % identifies current set of macros +\parskip 0pt % no stretch between paragraphs +\parindent 1em % for paragraphs and for the first line of Pascal text + +\font\eightrm=cmr8 \let\sc=\eightrm % NOT a caps-and-small-caps font! +\let\mainfont=\tenrm +\font\titlefont=cmr7 scaled\magstep4 % title on the contents page +\font\ttitlefont=cmtt10 scaled\magstep2 % typewriter type in title +\font\tentex=cmtex10 % TeX extended character set (used in strings) +\fontdimen7\tentex=0pt % no extra space after punctuation + +\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers +\def\|#1{\hbox{$#1$}} % one-letter identifiers look a bit better this way +\def\{\hbox{\bf#1\/}} % boldface type for reserved words +\def\.#1{\hbox{\tentex % typewriter type for strings + \let\\=\BS % backslash in a string + \let\'=\RQ % right quote in a string + \let\`=\LQ % left quote in a string + \let\{=\LB % left brace in a string + \let\}=\RB % right brace in a string + \let\~=\TL % tilde in a string + \let\ =\SP % space in a string + \let\_=\UL % underline in a string + \let\&=\AM % ampersand in a string + #1}} +\def\#{\hbox{\tt\char`\#}} % parameter sign +\def\${\hbox{\tt\char`\$}} % dollar sign +\def\%{\hbox{\tt\char`\%}} % percent sign +\def\^{\ifmmode\mathchar"222 \else\char`^ \fi} % pointer or hat +% circumflex accents can be obtained from \^^D instead of \^ +\def\AT!{@} % at sign for control text + +\chardef\AM=`\& % ampersand character in a string +\chardef\BS=`\\ % backslash in a string +\chardef\LB=`\{ % left brace in a string +\def\LQ{{\tt\char'22}} % left quote in a string +\chardef\RB=`\} % right brace in a string +\def\RQ{{\tt\char'23}} % right quote in a string +\def\SP{{\tt\char`\ }} % (visible) space in a string +\chardef\TL=`\~ % tilde in a string +\chardef\UL=`\_ % underline character in a string + +\newbox\bak \setbox\bak=\hbox to -1em{} % backspace one em +\newbox\bakk\setbox\bakk=\hbox to -2em{} % backspace two ems + +\newcount\ind % current indentation in ems +\def\1{\global\advance\ind by1\hangindent\ind em} % indent one more notch +\def\2{\global\advance\ind by-1} % indent one less notch +\def\3#1{\hfil\penalty#10\hfilneg} % optional break within a statement +\def\4{\copy\bak} % backspace one notch +\def\5{\hfil\penalty-1\hfilneg\kern2.5em\copy\bakk\ignorespaces}% optional break +\def\6{\ifmmode\else\par % forced break + \hangindent\ind em\noindent\kern\ind em\copy\bakk\ignorespaces\fi} +\def\7{\Y\6} % forced break and a little extra space + +\let\yskip=\smallskip +\def\to{\mathrel{.\,.}} % double dot, used only in math mode +\def\note#1#2.{\Y\noindent{\hangindent2em\baselineskip10pt\eightrm#1~#2.\par}} +\def\lapstar{\rlap{*}} +\def\startsection{\Q\noindent{\let\*=\lapstar\bf\modstar.\quad}} +\def\defin#1{\global\advance\ind by 2 \1\&{#1 }} % begin `define' or `format' +\def\A{\note{See also section}} % crossref for doubly defined section name +\def\As{\note{See also sections}} % crossref for multiply defined section name +\def\B{\mathopen{\.{@\{}}} % begin controlled comment +\def\C#1{\ifmmode\gdef\XX{\null$\null}\else\gdef\XX{}\fi % Pascal comments + \XX\hfil\penalty-1\hfilneg\quad$\{\,$#1$\,\}$\XX} +\def\D{\defin{define}} % macro definition +\def\E{\cdot10^} % exponent in floating point constant +\def\ET{ and~} % conjunction between two section numbers +\def\ETs{, and~} % conjunction between the last two of several section numbers +\def\F{\defin{format}} % format definition +\let\G=\ge % greater than or equal sign +\def\H#1{\hbox{\rm\char"7D\tt#1}} % hexadecimal constant +\let\I=\ne % unequal sign +\def\J{\.{@\&}} % TANGLE's join operation +\let\K=\gets % left arrow +\let\L=\le % less than or equal sign +\outer\def\M#1.{\MN#1.\ifon\vfil\penalty-100\vfilneg % beginning of section + \vskip12ptminus3pt\startsection\ignorespaces} +\outer\def\N#1.#2.{\MN#1.\vfil\eject % beginning of starred section + \def\rhead{\uppercase{\ignorespaces#2}} % define running headline + \message{*\modno} % progress report + \edef\next{\write\cont{\Z{#2}{\modno}{\the\pageno}}}\next % to contents file + \ifon\startsection{\bf\ignorespaces#2.\quad}\ignorespaces} +\def\MN#1.{\par % common code for \M, \N + {\xdef\modstar{#1}\let\*=\empty\xdef\modno{#1}} + \ifx\modno\modstar \onmaybe \else\ontrue \fi \mark{\modno}} +\def\O#1{\hbox{\rm\char'23\kern-.2em\it#1\/\kern.05em}} % octal constant +\def\P{\rightskip=0pt plus 100pt minus 10pt % go into Pascal mode + \sfcode`;=3000 + \pretolerance 10000 + \hyphenpenalty 10000 \exhyphenpenalty 10000 + \global\ind=2 \1\ \unskip} +\def\Q{\rightskip=0pt % get out of Pascal mode + \sfcode`;=1500 \pretolerance 200 \hyphenpenalty 50 \exhyphenpenalty 50 } +\let\R=\lnot % logical not +\let\S=\equiv % equivalence sign +\def\T{\mathclose{\.{@\}}}} % terminate controlled comment +\def\U{\note{This code is used in section}} % crossref for use of a section +\def\Us{\note{This code is used in sections}} % crossref for uses of a section +\let\V=\lor % logical or +\let\W=\land % logical and +\def\X#1:#2\X{\ifmmode\gdef\XX{\null$\null}\else\gdef\XX{}\fi % section name + \XX$\langle\,$#2{\eightrm\kern.5em#1}$\,\rangle$\XX} +\def\Y{\par\yskip} +\let\Z=\let % now you can \send the control sequence \Z +\def\){\hbox{\.{@\$}}} % sign for string pool check sum +\def\]{\hbox{\.{@\\}}} % sign for forced line break +\def\=#1{\kern2pt\hbox{\vrule\vtop{\vbox{\hrule + \hbox{\strut\kern2pt\.{#1}\kern2pt}} + \hrule}\vrule}\kern2pt} % verbatim string +\let\~=\ignorespaces +\let\*=* + +\def\onmaybe{\let\ifon=\maybe} \let\maybe=\iftrue +\newif\ifon \newif\iftitle \newif\ifpagesaved +\def\lheader{\mainfont\the\pageno\eightrm\qquad\rhead\hfill\title\qquad + \tensy x\mainfont\topmark} % top line on left-hand pages +\def\rheader{\tensy x\mainfont\topmark\eightrm\qquad\title\hfill\rhead + \qquad\mainfont\the\pageno} % top line on right-hand pages +\def\page{\box255 } +\def\normaloutput#1#2#3{\ifodd\pageno\hoffset=\pageshift\fi + \shipout\vbox{ + \vbox to\fullpageheight{ + \iftitle\global\titlefalse + \else\hbox to\pagewidth{\vbox to10pt{}\ifodd\pageno #3\else#2\fi}\fi + \vfill#1}} % parameter #1 is the page itself + \global\advance\pageno by1} + +\def\rhead{\.{WEB} OUTPUT} % this running head is reset by starred sections +\def\title{} % an optional title can be set by the user +\def\topofcontents{\centerline{\titlefont\title} + \vfill} % this material will start the table of contents page +\def\botofcontents{\vfill} % this material will end the table of contents page +\def\contentspagenumber{0} % default page number for table of contents +\newdimen\pagewidth \pagewidth=6.5in % the width of each page +\newdimen\pageheight \pageheight=8.7in % the height of each page +\newdimen\fullpageheight \fullpageheight=9in % page height including headlines +\newdimen\pageshift \pageshift=0in % shift righthand pages wrt lefthand ones +\def\magnify#1{\mag=#1\pagewidth=6.5truein\pageheight=8.7truein + \fullpageheight=9truein\setpage} +\def\setpage{\hsize\pagewidth\vsize\pageheight} % use after changing page size +\def\contentsfile{CONTENTS} % file that gets table of contents info +\def\readcontents{\input CONTENTS} + +\newwrite\cont +\output{\setbox0=\page % the first page is garbage + \openout\cont=\contentsfile + \global\output{\normaloutput\page\lheader\rheader}} +\setpage +\vbox to \vsize{} % the first \topmark won't be null + +\def\ch{\note{The following sections were changed by the change file:} + \let\*=\relax} +\newbox\sbox % saved box preceding the index +\newbox\lbox % lefthand column in the index +\def\inx{\par\vskip6pt plus 1fil % we are beginning the index + \write\cont{} % ensure that the contents file isn't empty + \closeout\cont % the contents information has been fully gathered + \output{\ifpagesaved\normaloutput{\box\sbox}\lheader\rheader\fi + \global\setbox\sbox=\page \global\pagesavedtrue} + \pagesavedfalse \eject % eject the page-so-far and predecessors + \setbox\sbox\vbox{\unvbox\sbox} % take it out of its box + \vsize=\pageheight \advance\vsize by -\ht\sbox % the remaining height + \hsize=.5\pagewidth \advance\hsize by -10pt + % column width for the index (20pt between cols) + \parfillskip 0pt plus .6\hsize % try to avoid almost empty lines + \def\lr{L} % this tells whether the left or right column is next + \output{\if L\lr\global\setbox\lbox=\page \gdef\lr{R} + \else\normaloutput{\vbox to\pageheight{\box\sbox\vss + \hbox to\pagewidth{\box\lbox\hfil\page}}}\lheader\rheader + \global\vsize\pageheight\gdef\lr{L}\global\pagesavedfalse\fi} + \message{Index:} + \parskip 0pt plus .5pt + \outer\def\:##1, {\par\hangindent2em\noindent##1:\kern1em} % index entry + \let\ttentry=\. \def\.##1{\ttentry{##1\kern.2em}} % give \tt a little room + \def\[##1]{$\underline{##1}$} % underlined index item + \rm \rightskip0pt plus 2.5em \tolerance 10000 \let\*=\lapstar + \hyphenpenalty 10000 \parindent0pt} +\def\fin{\par\vfill\eject % this is done when we are ending the index + \ifpagesaved\null\vfill\eject\fi % output a null index column + \if L\lr\else\null\vfill\eject\fi % finish the current page + \parfillskip 0pt plus 1fil + \def\rhead{NAMES OF THE SECTIONS} + \message{Section names:} + \output{\normaloutput\page\lheader\rheader} + \setpage + \def\note##1##2.{\hfil\penalty-1\hfilneg\quad{\eightrm##1~##2.}} + \linepenalty=10 % try to conserve lines + \def\U{\note{Used in section}} % crossref for use of a section + \def\Us{\note{Used in sections}} % crossref for uses of a section + \def\:{\par\hangindent 2em}\let\*=*\let\.=\ttentry} +\def\con{\par\vfill\eject % finish the section names + \rightskip 0pt \hyphenpenalty 50 \tolerance 200 + \setpage + \output{\normaloutput\page\lheader\rheader} + \titletrue % prepare to output the table of contents + \pageno=\contentspagenumber \def\rhead{TABLE OF CONTENTS} + \message{Table of contents:} + \topofcontents + \line{\hfil Section\hbox to3em{\hss Page}} + \def\Z##1##2##3{\line{\ignorespaces##1 + \leaders\hbox to .5em{.\hfil}\hfil\ ##2\hbox to3em{\hss##3}}} + \readcontents\relax % read the contents info + \botofcontents \end} % print the contents page(s) and terminate diff --git a/Master/texmf-dist/tex/plain/base/wlist.tex b/Master/texmf-dist/tex/plain/base/wlist.tex new file mode 100644 index 00000000000..a665a32a627 --- /dev/null +++ b/Master/texmf-dist/tex/plain/base/wlist.tex @@ -0,0 +1,53 @@ +% Makes a landscape listing of one or more files with wide lines +% Typical usage: +% tex list *.c \\end + +\hsize=9in +\vsize=6.5in +\special{landscape} + +\def\grabfile#1 {\setbox0=\lastbox\endgraf\doit{#1}} +\everypar{\grabfile} + +\font\filenamefont= cmtt8 scaled\magstep3 +\font\headlinefont= cmr8 +\font\listingfont= cmtex8 +\font\eoffont= cmti8 + +\def\today{\ifcase\month\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi + \space\number\day, \number\year} +\newcount\m \newcount\n +\n=\time \divide\n 60 \m=-\n \multiply\m 60 \advance\m \time +\def\hours{\twodigits\n\twodigits\m} +\def\twodigits#1{\ifnum #1<10 0\fi \number#1} + +\newlinechar=`@ +\message{@\today\space at \hours} + +\baselineskip=9pt +\medskipamount=4pt minus 1pt +\raggedbottom +\nopagenumbers + +\chardef\other=12 +\def\doit#1{\message{@Listing #1@} + \begingroup \everypar{} \frenchspacing + \headline{\filenamefont#1\quad\headlinefont \today\ at \hours + \hfill Page \folio} + \def\do##1{\catcode`##1=\other}\dospecials + \catcode127=\other \catcode9=\other \catcode12=\other + \parindent 0pt \parfillskip=0pt plus 1fil minus 1in + \everypar{\hangindent 1in} \rightskip=0pt plus 2in + \def\par{\ifvmode\penalty-500\medskip\else\endgraf\fi} + \listingfont \obeylines \obeyspaces \global\pageno=1 + \input #1 {\eoffont(end of\/ file)}\endgraf\vfill\eject\endgroup} +{\obeyspaces\global\let =\ } +\catcode`\_=\other % allow _ in file names + +% A tab (^^I) prints as lowercase gamma. +% Character ^^M could be made visible, with a bit of work; +% at present, it's indistinguishable from newline (^^J). + +% You can get up to 170 characters on a line without an overfull box. -- cgit v1.2.3