From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/plain/contrib/samples/double.tex | 687 ++++++++++++++++++++++++++++++++ 1 file changed, 687 insertions(+) create mode 100644 macros/plain/contrib/samples/double.tex (limited to 'macros/plain/contrib/samples/double.tex') diff --git a/macros/plain/contrib/samples/double.tex b/macros/plain/contrib/samples/double.tex new file mode 100644 index 0000000000..2bd5505a10 --- /dev/null +++ b/macros/plain/contrib/samples/double.tex @@ -0,0 +1,687 @@ +% Macros for The TeXbook + +\catcode`@=11 % borrow the private macros of PLAIN (with care) + +\font\tentex=amtex10 + +\font\inchhigh=aminch +\font\titlefont=amssmc40 + +\font\ninerm=amr9 +\font\eightrm=amr8 +\font\sixrm=amr6 + +\font\ninei=ammi9 +\font\eighti=ammi8 +\font\sixi=ammi6 +\skewchar\ninei='177 \skewchar\eighti='177 \skewchar\sixi='177 + +\font\ninesy=amsy9 +\font\eightsy=amsy8 +\font\sixsy=amsy6 +\skewchar\ninesy='60 \skewchar\eightsy='60 \skewchar\sixsy='60 + +\font\eightss=amssq8 + +\font\eightssi=amssqi8 + +\font\ninebf=ambx9 +\font\eightbf=ambx8 +\font\sixbf=ambx6 + +\font\ninett=amtt9 +\font\eighttt=amtt8 + +\hyphenchar\tentt=-1 % inhibit hyphenation in typewriter type +\hyphenchar\ninett=-1 +\hyphenchar\eighttt=-1 + +\font\ninesl=amsl9 +\font\eightsl=amsl8 + +\font\nineit=amti9 +\font\eightit=amti8 + +\font\tenu=amu10 % unslanted text italic +\font\magnifiedfiverm=amr5 at 10pt +\font\man=manfnt % font used for special symbols (old version) +%\font\manual=manual % font used for the METAFONT logo, etc. (new version) + % manual [which isn't complete yet] is supposed to replace manfnt some day + +\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}} + +\newdimen\colwidth \newdimen\bigcolheight +\colwidth=14pc \bigcolheight=89pc +\output{\onepageout{\unvbox255}} +\newbox\partialpage +\newdimen\savesize +\def\begindoublecolumns{\begingroup + \savesize=\vsize + \output={\global\setbox\partialpage=\vbox{\unvbox255}}\eject + \output={\doublecolumnout} \hsize=\colwidth \vsize=\bigcolheight + \advance\vsize by -2\ht\partialpage} +\def\enddoublecolumns{\output={\balancecolumns}\eject + \global\output={\onepageout{\unvbox255}} + \global\vsize=\savesize + \endgroup \pagegoal=\vsize} +\def\doublecolumnout{\dimen0=\pageheight + \advance\dimen0 by -\ht\partialpage \splittopskip=\topskip + \setbox0=\vsplit255 to\dimen0 + \setbox2=\vsplit255 to\dimen0 + \onepageout\pagesofar + \global\vsize=\bigcolheight + \unvbox255 \penalty\outputpenalty} +\def\pagesofar{\unvbox\partialpage + \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}} +\def\balancecolumns{\setbox0=\vbox{\unvbox255} \dimen0=\ht0 + \advance\dimen0 by\topskip \advance\dimen0 by-\baselineskip + \divide\dimen0 by2 \splittopskip=\topskip + {\vbadness=10000 \loop \global\setbox3=\copy0 + \global\setbox1=\vsplit3 to\dimen0 + \ifdim\ht3>\dimen0 \global\advance\dimen0 by1pt \repeat} + \setbox0=\vbox to\dimen@{\unvbox1} + \setbox2=\vbox to\dimen@{\unvbox3} + \global\output={\balancingerror} + \pagesofar} +\newhelp\balerrhelp{Please change the page + into one that works!} +\def\balancingerror{\errhelp=\balerrhelp + \errmessage{Page can't be balanced} + \onepageout{\unvbox255}} + + + +% 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 + +\outer\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 + \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 1pt \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 + +\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} + +\def\AmSTeX{$\cal A\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.125em + 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} + +\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 + +% 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\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-.05em\relax} + +\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} + +\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\reverse{\mathop{\rm reverse}} +\def\curl{\mathop{\rm curl}} +\def\tension{\mathop{\rm tension}} +\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\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 + +\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}}} -- cgit v1.2.3