% Copyright (c) 1985, 1986 Daniel C. Brotsky. All rights reserved. % User interface for yTeX. See the file YTEX.MAC for details. % CONTENTS % ^L-page contents % ---------------------------------------------------------------------- % 1 %% User interface to YTEX macros % 2 %% combinators % 3 %% runners % 4 %% glosses % 5 %% paragraphs % 6 %% textual displays % 7 %% lisp programs % 8 %% footnotes % 9 %% figures % 10 %% tables % 11 %% equations % 12 %% chapters and sections % 13 %% special pages % 14 %% 2 columns % 15 %% indexes % 16 %% citations % 17 %% labels % 18 %% initialization \message{combinators,} % verbatim word \def\verb {% #1 \begingroup\tt\specials@ther\activespaces\ \v@rb} \def\v@rb #1{% \def\next##1#1{##1\endgroup}\next} % spread to the current hsize \newspread\spread \setup \endnew \let\@@spreadwidth=\spreadwidth \let\spreadwidth=\hsize % left-adjusted, center-adjusted, and right-adjusted titles \newtitle\tleft \box \vopen \shape \titleleft{\z@}{\z@}% \font \setup \begin \end \endnew \newtitle\tcenter \box \vopen \shape \titlecenter{\z@}{\z@}% \font \setup \begin \end \endnew \newtitle\tright \box \vopen \shape \titleright{\z@}{\z@}% \font \setup \begin \end \endnew % symbols \newtextwrap\sy \box \hopen \setup \smltt \before \after \begin \end \endnew \newtextwrap\sybox \box \hbox \setup \smltt \before \after \begin \end \endnew \newtextwrap\ucsy \box \hopen \setup \smltt \before \after \begin \uppercase\bgroup \end \egroup \endnew \newtextwrap\ucsybox \box \hbox \setup \smltt \before \after \begin \uppercase\bgroup \end \egroup \endnew \def\ignore #{% \begingroup \def\do ##1{\catcode`##1=12\relax}% \dospecials % turn off all special chars \catcode`\\=0\relax % need to see commands as single tokens \catcode`\{=1\catcode`\}=2\relax % need to recognize balanced braces \catcode`\%=14\relax % need to ignore comments \let\par=\relax \ignorereader} \long \def\ignorereader #1{% \endgroup} \message{runners,} % contents of headers and footers \newtoks\versoleftheader \newtoks\versocenterheader \newtoks\versorightheader \newtoks\rectoleftheader \newtoks\rectocenterheader \newtoks\rectorightheader \newtoks\versoleftfooter \newtoks\versocenterfooter \newtoks\versorightfooter \newtoks\rectoleftfooter \newtoks\rectocenterfooter \newtoks\rectorightfooter \newtoks\runnerfont \rectoheader={\the\runnerfont \line{\hbox to\z@{\the\rectoleftheader\hss}\hfil \hbox to\z@{\hss\the\rectocenterheader\hss}\hfil \hbox to\z@{\hss\the\rectorightheader}}} \versoheader={\the\runnerfont \line{\hbox to\z@{\the\versoleftheader\hss}\hfil \hbox to\z@{\hss\the\versocenterheader\hss}\hfil \hbox to\z@{\hss\the\versorightheader}}} \rectofooter={\the\runnerfont \line{\hbox to\z@{\the\rectoleftfooter\hss}\hfil \hbox to\z@{\hss\the\rectocenterfooter\hss}\hfil \hbox to\z@{\hss\the\rectorightfooter}}} \versofooter={\the\runnerfont \line{\hbox to\z@{\the\versoleftfooter\hss}\hfil \hbox to\z@{\hss\the\versocenterfooter\hss}\hfil \hbox to\z@{\hss\the\versorightfooter}}} \versoleftheader={\bf\folio} \rectoleftheader={\firstm@rk} \rectorightheader={\bf\folio} \versocenterfooter={\bf\folio} \rectocenterfooter={\bf\folio} % convenient runner settings: args are toklists \let\fixedhead=\versorightheader \let\runninghead=\rectoleftheader \message{glosses,} % top gloss: copyright \newif\ifshowcopyright \newtoks\copyrightholder \def\copyrightpage {\ifshowcopyright\yestopgloss\fi} \copyrightholder={by the author} \topgloss={\regsize\bf Copyright $\m@th\copyright$ \number\year~\the\copyrightholder\hfil \shortdate \enspace[\daytime]} % drafts \def\draft {% \ymessage{{Draft}} \overfullrule=5\p@ \bottomgloss={\regsize\bf DRAFT $\bullet$ DRAFT $\bullet$ DRAFT\hfil \date \enspace [\daytime]} \bottomglosstrue} \message{paragraphs,} % disciplined \rem@veindent \newif\ifvpar \def\vpar {% \ifvpar \edef\next{\the\everypar}\ifx\next\empty \rem@veindent \fi\fi} \def\unvpar {\everypar={}} % various paragraph shapes \newpar\ivpar \argtext \setup \vestindent \parindent \starter \noindent \endnew \newpar\ipar \argtext \setup \vestindent \parindent \starter \indent \endnew \newdimen\partagsep \newbox\partagbox \newpar\ftpar \argtext #1% \setup \setbox\partagbox=\hbox{#1}% \ifdim \wd\partagbox<\parindent \setbox\partagbox=\hbox to\parindent{\unhbox\partagbox \hfil}% \else \setbox\partagbox=\hbox{\unhbox\partagbox \hskip\partagsep}\fi \vestindent \parindent \starter \noindent \box\partagbox \ignorespaces \endnew \newpar\atpar \argtext #1% \setup \vestindent \parindent \starter \noindent \hbox to\parindent {\hss #1\hskip\partagsep}\ignorespaces \endnew \newpar\vtpar \argtext #1% \setup \setbox\partagbox=\hbox{#1\hskip\partagsep}% \vestindent 1\wd\partagbox \starter \noindent \box\partagbox \ignorespaces \endnew % bullet paragraphs and lists thereof \newpar\bpar \argtext \setup \vestindent \parindent \starter \noindent \hbox to\parindent {$\m@th\bullet$\hfil}\ignorespaces \endnew \newelement\bullets \setup \unvpar \above \minbreak \prebulletspenalty \abovebulletsskip \below \dobreak \postbulletspenalty \belowbulletsskip \vpar \begin \end \endgraf \endnew \setskip\abovebulletsskip \dimen 2pt \glue \parskip \factor 500 \setskip\belowbulletsskip \dimen 2pt \glue \parskip \factor 500 \prebulletspenalty=-200 \postbulletspenalty=-200 % quotes \newtoks\quotefont \newelement\quote \setup \advance\leftskip\parindent \advance\rightskip\parindent \unvpar \the\quotefont \offindent \above \vskip\baselineskip \nobreak % compensate for smaller baseline \begingroup \the\quotefont \vskip-\baselineskip \endgroup \below \vpar \begin \end \endgraf \endnew % ragged center (mostly from the TeXbook) \def\raggedcenter {% \leftskip=\z@ plus2em \rightskip=\leftskip \spaceskip=.3333em \xspaceskip=.5em \parfillskip=\z@ \pretolerance=9999 \tolerance=9999 \hbadness=9999 \hyphenpenalty=9999 \exhyphenpenalty=9999 \offindent} % ragged left \def\raggedleft {% \leftskip=\z@ plus2em \rightskip=\z@skip \spaceskip=.3333em \xspaceskip=.5em \parfillskip=\z@ \pretolerance=9999 \tolerance=9999 \hbadness=9999 \hyphenpenalty=9999 \exhyphenpenalty=9999 \offindent} \message{textual displays,} % nofill \newelement\nofill \setup \offindent \setupnofill \above \vskip\parskip % compensate for loss of \parskip \below \vpar \begin \end \endgraf \endnew \newtext\text \display \setup \hsize=\displaywidth \advance\leftskip\displayindent \setupnofill \begin \end \endnew \newtext\textlines \display \displaywidth=\hsize \displayindent=\z@ \setup \setupnofill \begin \end \endnew \newtext\code \display \setup \hsize=\displaywidth \advance\leftskip\displayindent \tt \setupnofill \begin \end \endnew \newtext\codelines \display \displaywidth=\hsize \displayindent=\z@ \setup \tt \setupnofill \begin \end \endnew % verbatim material \def\beginverbatim {% \par \beginpgroup \vskip\parskip \setupverbatim \re@dverbatim} {\obeylines \catcode`\|=\@scape \catcode`\\=\@ther % |gdef|re@dverbatim#1^^M#2\endverbatim{#1#2|endgroup}} \newverbatim\verb \begincs \beginverb \readcs \readv@rb \endcsname endverb% \display \setup \hsize=\displaywidth \advance\leftskip\displayindent \tt \begin \end \endnew \newverbatim\verblines \begincs \beginverblines \readcs \readv@rblines \endcsname endverblines% \display \displaywidth=\hsize \displayindent=\z@ \setup \tt \begin \end \endnew \message{lisp programs,} % make semis active a la \obeylines {\catcode`\;=\@ctive \gdef\obeysemis {\catcode`\;=\@ctive\relax \let;=\lispsemi}} % \beginl@sp \endl@sp \def\beginl@sp {% \beginpgroup % semis start comments unless immediately followed by \pbrk \def\lispsemi{\futurelet\next\l@spsemi}% \def\l@spsemi{\ifx\next\pbrk \let\next=\relax \else \let\next=\l@spcomment\fi \next}% \obeysemis % spaces made active so they start paragraphs % and so multiple spaces aren't collapsed to one. \activespaces\ % % nofill via every line a par, if spaces start next line % we do a \noindent to make sure a par gets started. % in addition, turn off interline skip and use struts % to insure baseline spacing \offinterlineskip \parskip=\z@skip \def\par{\ifhmode \nobreak\strut \fi \endgraf} \obeylines % compensate for loss of baseline spacing \skip@=\dp\strutbox \advance\skip@ -\prevdepth \ifdim \skip@>\z@ \vskip\skip@ \nobreak \fi % make ',` do the right thing; make &, #, <> harmless \makebqspecial \makeandother \makesharpother \makelgtother \vbox\bgroup} \def\endl@sp {% \egroup \endpgroup} {\obeylines % for defs that happen where ^^M is active % each program is a box, preventing page splits, but we % make the \pbrk macro work a la \noalign whose arg is % the entire rest of the line. \gdef\pbrk #1^^M{% \egroup% \def\next{#1}% \ifx\empty\next% \smallskip \else \begingroup \activespaces\space \next\endgroup\fi% \vbox\bgroup% ^^M} % end with a CR since arg did % semicolons start program comments which end with the end % of the line. These comments are in roman, in an \hbox to % avoid line breaking, <> become angle brackets, % and ; becomes harmless \gdef\l@spcomment {% \begingroup% \def\lispsemi{;\kern\p@}\obeysemis % this works even if ; already read \def^^M{\egroup\endgroup^^M}% end with ^^M since line does \leavevmode\hbox\bgroup \rm \strut;\kern\p@}% } % end of def group \newtoks\lispfont \newtext\lisp \display \setup \hsize=\displaywidth \advance\leftskip\displayindent \the\lispfont \begin \beginl@sp \end \endl@sp \endnew \newtext\lisplines \display \displaywidth=\hsize \displayindent=\z@ \setup \the\lispfont \begin \beginl@sp \end \endl@sp \endnew \message{footnotes,} \let\footdef=\relax \let\footref=\relax \newfloat\footn@te \type \botfloat \floatsetup \setupfootnotefloat \setup \setupfootnote \floatabove \floatbelow \begin \startfootnote \end \strut\endgraf \endnew \def\setupfootnotefloat {% \splittopskip=\ht\strutbox % top baseline for broken footnotes \splitmaxdepth=\dp\strutbox \floatingpenalty=\@M \setupfootnotefloathook} \def\setupfootnotefloathook {} \newtoks\footnotefont \def\setupfootnote {% \interlinepenalty=\interfootnotelinepenalty \leftskip=\footnotemarkerwidth \parfillskip=\filskip \rightskip=\z@skip \spaceskip=\z@skip \xspaceskip=\z@skip \the\footnotefont \setupfootnotehook} \def\setupfootnotehook {} % footnote markers \newdimen\footnotemarkerwidth \def\footstrut {\vbox to\splittopskip{}} \def\startfootnote #1{% \noindent \llap{#1}\footstrut} % hmode footnote invocation \def\footnote #1{\let\@sf\empty \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi #1\@sf\beginfootn@te{#1}\futurelet\next\fo@t} \def\@foot {\endfootn@te} % numbered hmode footnote \def\nfootnote #1{\footnote{$\m@th^{#1}$}} % vmode footnote invocation \def\vfootnote #1{\beginfootn@te{#1}\futurelet\next\fo@t} % general footnote invocation \newfloat\footmatter \type \botfloat \floatsetup \setupfootnotefloat \leftskip=\z@skip \setup \setupfootnote \floatabove \floatbelow \begin \noindent \footstrut \end \strut\endgraf \endnew \message{figures,} \let\figdef=\relax \let\figref=\relax % lines above and below figures \newif\iffigureline \newdimen\figurelinedrop \def\figl@nabove {% \iffigureline \hrule \vskip\figurelinedrop\relax \fi} \def\figl@nbelow {% \iffigureline \nobreak \vskip\figurelinedrop \hrule\relax \fi} % figure environment definitions \newdimen\captionindent \newtoks\captionfont \def\setupcaption {% \leftskip=\captionindent \rightskip=\captionindent \the\captionfont \parskip=\z@skip \everypar={}% \vpar \setupcaptionhook} \def\setupcaptionhook {} \newelement\c@ption \setup \setupcaption \above \dobreak \prec@ptionpenalty \abovec@ptionskip \below \dobreak \postc@ptionpenalty \belowc@ptionskip \begin \end \ifhmode \vrule width\z@ height\z@ depth\dp\strutbox \fi \endgraf \endnew \let\abovecaptionskip=\abovec@ptionskip \let\belowcaptionskip=\belowc@ptionskip \let\precaptionpenalty=\prec@ptionpenalty \let\postcaptionpenalty=\postc@ptionpenalty \def\setupfigure {% \let\begincaption=\beginc@ption \let\endcaption=\endc@ption \let\caption=\c@ption \leftskip=\z@skip \rightskip=\z@skip \spaceskip=\z@skip \xspaceskip=\z@skip \parfillskip=\filskip \everypar={}% \setupfigurehook} \def\setupfigurehook {} % figure type indicators \newif\ifstationaryfigur@ \newif\ifsectionfigur@ \newif\iftopfigur@ \newif\iffloatingfigur@ % stationary figures \newelement\stationaryfigure \setup \stationaryfigur@true \setupfigure \above \minbreak \prestationaryfigurepenalty \abovestationaryfigureskip \nointerlineskip \below \dobreak \poststationaryfigurepenalty \belowstationaryfigureskip \nointerlineskip \begin \vbox\bgroup \figl@nabove \end \figl@nbelow \egroup \endnew \abovestationaryfigureskip=\bigskipamount \belowstationaryfigureskip=\bigskipamount \prestationaryfigurepenalty=\z@ \poststationaryfigurepenalty=-200 \newpage\pagestationaryfigure \setup \stationaryfigur@true \setupfigure \glue \begin \vbox to\vsize\bgroup \figl@nabove \end \figl@nbelow \vskip \z@ plus\@M\p@ \egroup \endnew \def\stationaryfigures {% \let\figure=\stationaryfigure \let\pagefigure=\stationarypagefigure \let\beginfigure=\beginstationaryfigure \let\endfigure=\endstationaryfigure \let\beginpagefigure=\beginstationarypagefigure \let\endpagefigure=\endstationarypagefigure \let\abovefigureskip=\abovestationaryfigureskip \let\belowfigureskip=\belowstationaryfigureskip \let\prefigurepenalty=\prestationaryfigurepenalty \let\postfigurepenalty=\poststationaryfigurepenalty} % section figures \newelement\sectionfigure \setup \sectionfigur@true \setupfigure \above \dobreak \presectionfigurepenalty \abovesectionfigureskip \nointerlineskip \below \dobreak \postsectionfigurepenalty \belowsectionfigureskip \nointerlineskip \begin \vbox\bgroup \figl@nabove \end \figl@nbelow \egroup \endnew \abovesectionfigureskip=\z@skip \belowsectionfigureskip=\fillskip \presectionfigurepenalty=\@M \postsectionfigurepenalty=-200 \newpage\sectionpagefigure \setup \sectionfigur@true \setupfigure \glue \begin \vbox to\vsize\bgroup \figl@nabove \end \figl@nbelow \vskip \z@ plus\@M\p@ \egroup \endnew \def\sectionfigures {% \let\figure=\sectionfigure \let\pagefigure=\sectionpagefigure \let\beginfigure=\beginsectionfigure \let\endfigure=\endsectionfigure \let\beginpagefigure=\beginsectionpagefigure \let\endpagefigure=\endsectionpagefigure \let\abovefigureskip=\abovesectionfigureskip \let\belowfigureskip=\belowsectionfigureskip \let\prefigurepenalty=\presectionfigurepenalty \let\postfigurepenalty=\postsectionfigurepenalty} % floating top figures \newskip\abovetopfigureskip \abovetopfigureskip=\z@skip \newskip\belowtopfigureskip \belowtopfigureskip=\bigskipamount \newcount\pretopfigurepenalty \pretopfigurepenalty=100 \newcount\posttopfigurepenalty \posttopfigurepenalty=\z@ \newfloat\topfigure \type \topfloat \floatsetup \floatingpenalty\posttopfigurepenalty \splitmaxdepth\maxdimen \splittopskip\z@skip \setup \topfigur@true \setupfigure \floatabove \penalty\pretopfigurepenalty \vskip\abovetopfigureskip \nointerlineskip \floatbelow \nobreak \vskip\belowtopfigureskip \begin \vbox\bgroup \figl@nabove \end \figl@nbelow \egroup \endnew \newpagefloat\toppagefigure \type \topfloat \floatsetup \penalty\pretopfigurepenalty \floatingpenalty\posttopfigurepenalty \splitmaxdepth\maxdimen \splittopskip\z@skip \setup \topfigur@true \setupfigure \above \below \begin \vbox to\vsize\bgroup \figl@nabove \end \figl@nbelow \vskip \z@ plus\@M\p@ \egroup \endnew \gdef\topfigures {% \let\figure=\topfigure \let\pagefigure=\toppagefigure \let\beginfigure=\begintopfigure \let\endfigure=\endtopfigure \let\beginpagefigure=\begintoppagefigure \let\endpagefigure=\endtoppagefigure \let\abovefigureskip=\abovetopfigureskip \let\belowfigureskip=\belowtopfigureskip \let\prefigurepenalty=\pretopfigurepenalty \let\postfigurepenalty=\posttopfigurepenalty} % inline/floating figures \newskip\floatabovefloatingfigureskip \newskip\floatbelowfloatingfigureskip \newcount\floatprefloatingfigurepenalty \newcount\floatpostfloatingfigurepenalty \floatabovefloatingfigureskip=\z@skip \floatbelowfloatingfigureskip=\bigskipamount \floatprefloatingfigurepenalty=100 \floatpostfloatingfigurepenalty=\z@ \newskip\abovefloatingfigureskip \abovefloatingfigureskip=\bigskipamount \newskip\belowfloatingfigureskip \belowfloatingfigureskip=\bigskipamount \newcount\prefloatingfigurepenalty \prefloatingfigurepenalty=\z@ \newcount\postfloatingfigurepenalty \postfloatingfigurepenalty=-200 \newfitfloat\floatingfigure \type \topfloat \floatsetup \floatingpenalty\floatpostfloatingfigurepenalty \splitmaxdepth\maxdimen \splittopskip\z@skip \setup \floatingfigur@true \setupfigure \floatabove \penalty\floatprefloatingfigurepenalty \vskip\floatabovefloatingfigureskip \nointerlineskip \floatbelow \nobreak \vskip\floatbelowfloatingfigureskip \above \penalty\prefloatingfigurepenalty \vskip\abovefloatingfigureskip \nointerlineskip \below \penalty\postfloatingfigurepenalty \vskip\belowfloatingfigureskip \nointerlineskip \vpar \begin \vbox\bgroup \figl@nabove \end \figl@nbelow \egroup \endnew \newpagefloat\floatingpagefigure \type \topfloat \floatsetup \penalty\floatprefloatingfigurepenalty \floatingpenalty\floatpostfloatingfigurepenalty \splitmaxdepth\maxdimen \splittopskip\z@skip \setup \floatingfigur@true \setupfigure \above \below \begin \vbox to\vsize\bgroup \figl@nabove \end \figl@nbelow \vskip \z@ plus\@M\p@ \egroup \endnew \gdef\floatingfigures {% \let\figure=\floatingfigure \let\pagefigure=\floatingpagefigure \let\beginfigure=\beginfloatingfigure \let\endfigure=\endfloatingfigure \let\beginpagefigure=\beginfloatingpagefigure \let\endpagefigure=\endfloatingpagefigure \let\abovefigureskip=\abovefloatingfigureskip \let\belowfigureskip=\belowfloatingfigureskip \let\prefigurepenalty=\prefloatingfigurepenalty \let\postfigurepenalty=\postfloatingfigurepenalty} \message{tables,} \let\tabdef=\relax \let\tabref=\relax \newtable\table \leftdelim [% \rightdelim ]% \before \vbox\bgroup \after \egroup \begin \end \endnew \newtable\toptable \leftdelim [% \rightdelim ]% \before \vtop\bgroup \after \egroup \begin \end \endnew \newtable\centertable \leftdelim [% \rightdelim ]% \before \vcenter\bgroup \after \egroup \begin \end \endnew \newtable\opentable \leftdelim [% \rightdelim ]% \before \after \begin \end \endnew \newtable\displaytable \leftdelim [% \rightdelim ]% \before \tablewidth=\hsize$$ \after $$ \begin \end \endnew \message{equations,} % equation numbering \let\eqdef=\relax \let\eqref=\relax % synonyms for $$ \def\beginmath {$$} \def\endmath {$$} \def\math #1{$$#1$$} \message{chapters and sections,} \let\secref=\relax \let\secdef=\relax % are section, etc. headings centered or left-flush \newif\ifcenterheadings % chapters \newtoks\chapterfont \newtitle\chaptertitle \box \vopen \shape \ifcenterheadings \titlecenter{\z@}{\z@}\else \titleleft{\z@}{\z@}\fi \font \the\chapterfont \setup \interlinepenalty=\@M \begin \end \endnew \def\chaptersetup {% \chaptersetuphook} \def\chaptersetuphook {} \newelement\chapter \setup \get@rg\endchapter \chaptersetup \above \minbreak \prechapterpenalty \abovechapterskip \below \dobreak \postchapterpenalty \belowchapterskip \vpar \begin \get@rg \end \ymessage{{Chapter: \the\toks@}}\chaptertitle{\the\toks@}% \endnew \setskip\abovechapterskip \dimen 36pt \glue \parskip \factor 3000 \setskip\belowchapterskip \dimen 18pt \glue \parskip \factor 2000 \prechapterpenalty=-500 \postchapterpenalty=10000 \newelement\pchapter \setup \get@rg\endpchapter \chaptersetup \above \rectosupereject \below \dobreak \postchapterpenalty \belowchapterskip \vpar \begin \get@rg \end \ymessage{{Chapter: \the\toks@}}\chaptertitle{\the\toks@}% \endnew % starts sections. \newtoks\sectionfont \newtitle\sectiontitle \box \vbottom \shape \ifcenterheadings \titlecenter{\z@}{\z@}\else \titleleft{\z@}{\z@}\fi \font \the\sectionfont \setup \begin \end \endnew \def\sectionsetup {% \sectionsetuphook} \def\sectionsetuphook {} \newelement\section \setup \get@rg\endsection \sectionsetup \above \minbreak \presectionpenalty \abovesectionskip \below \dobreak \postsectionpenalty \belowsectionskip \vpar \begin \get@rg \end \ymessage{{Section: \the\toks@}}\sectiontitle{\the\toks@}% \endnew \setskip\abovesectionskip \dimen 18pt \glue \parskip \factor 3000 \setskip\belowsectionskip \dimen 9pt \glue \parskip \factor 2000 \presectionpenalty=-200 \postsectionpenalty=10000 \let\beginsubsection=\beginsection \let\endsubsection=\endsection \let\subsection=\section \let\beginsubsubsection=\beginsubsection \let\endsubsubsection=\endsubsection \let\subsubsection=\subsection % simple heading \newtoks\headingfont \newtitle\headingtitle \box \vbottom \shape \ifcenterheadings \titlecenter{\z@}{\z@}\else \titleleft{\z@}{\z@}\fi \font \the\headingfont \setup \begin \end \endnew \def\headingsetup {% \headingsetuphook} \def\headingsetuphook {} \newelement\heading \setup \get@rg\endheading \headingsetup \above \minbreak \preheadingpenalty \aboveheadingskip \below \dobreak \postheadingpenalty \belowheadingskip \vpar \begin \get@rg \end \ymessage{{Heading: \the\toks@}}\headingtitle{\the\toks@}% \endnew \setskip\aboveheadingskip \dimen 9pt \glue \parskip \factor 1000 \setskip\belowheadingskip \dimen 4pt \glue \parskip \factor 1000 \preheadingpenalty=-200 \postheadingpenalty=10000 \message{special pages,} % titling pages \newsuperpage\titlingpage \setup \norunners \copyrightpage \glue \vfil \begin \end \endnew % main title pages \newelement\titlepage \setup \titlepagedefs \above \below \begin \begintitlingpage \global\pageno=\z@ \ymessage{{Main title}} \end \endgraf \endtitlingpage \global\pageno=\@ne \endnew % title pages for sub-parts of a book, etc. \newelement\partpage \setup \titlepagedefs \above \below \begin \begintitlingpage \ymessage{{Part title}} \end \endgraf \endtitlingpage \endnew % titles and abstracts \newtoks\titlefont \newtoks\authorfont \newtitle\title \box \vbottom \shape \titleleft{\z@}{\z@}% \font \the\titlefont \setup \begin \end \endnew \newtitle\ctitle \box \vbottom \shape \titlecenter{\z@}{\z@}% \font \the\titlefont \setup \begin \end \endnew \newtitle\author \box \vbottom \shape \titleleft{\z@}{\z@}% \font \the\authorfont \setup \begin \end \endnew \newtitle\cauthor \box \vbottom \shape \titlecenter{\z@}{\z@}% \font \the\authorfont \setup \begin \end \endnew \newtoks\abstractfont \newdimen\abstractindent \newelement\abstract \setup \the\abstractfont \parindent=2em% \leftskip=\abstractindent \rightskip=\abstractindent \above \minbreak \preabstractpenalty \aboveabstractskip \below \dobreak \postabstractpenalty \belowabstractskip \begin \end \endgraf \endnew \newtoks\bottomtextfont \def\titlepagedefs {% \newelement\bottomtext \setup \the\bottomtextfont \offindent \above \bigskip \vfill \below \begin \end \endgraf \endnew} \message{2 columns,} % N.B. this stuff mostly adapted from the TeXbook % parameters \newdimen\columnskip \newbox\partialp@ge \newdimen\onec@lhsize \newdimen\onec@lvsize \newtoks\onec@loutput \newdimen\twoc@lvsize \def\setuptwocolumn {% \trimpagesfalse \onec@lfigfoot \def\columneject{\vfil\penalty200}% \baselinefactor={1.2}\setnormalbaselines \spaceskip=.3333em plus .3333em minus .1666em \xspaceskip=.3333em plus .6666em minus .0833em \advance\parskip by 0pt plus 2pt \setuptwocolumnhook} \def\setuptwocolumnhook {} % make figures and footnotes be one column \def\onec@lfigfoot {% \topmag=2000% \botmag=2000% \addtodef\setupfigurehook{% \iffloatingfigur@ \errhelp={I will assume it doesn't float.}% \errmessage{You can't use a floating figure in two-column text.}% \fi \iftopfigur@ \hsize=\onec@lhsize \fi \vsize=\onec@lvsize}% \addtodef\setupfootnotehook{\hsize=\onec@lhsize}} \def\begintwocolumntext {% \begingroup \onec@lhsize=\hsize \onec@lvsize=\vsize \onec@loutput=\output \output={\global\setbox\partialp@ge=\vbox{\unvbox\@cclv}}% \let\dosupereject=\twoc@lsupereject \eject \output={\twoc@lout}% \hsize=.5\hsize \advance\hsize by-.5\columnskip \vsize=2\vsize \advance\vsize by2pc\relax \twoc@lvsize=\vsize \advance\vsize by-2\ht\partialp@ge \setuptwocolumn} \def\endtwocolumntext {% \output={\balancec@ls}% \eject \global\output=\onec@loutput \global\vsize=\onec@lvsize \endgroup \pagegoal=\vsize} \def\twocolumntext #1{\begintwocolumntext #1\endtwocolumntext} \def\twoc@lout {% \dimen@=\onec@lvsize \advance\dimen@ by-\ht\partialp@ge \advance\dimen@ by-\ht\topfloat \advance\dimen@ by-\dp\topfloat \advance\dimen@ by-\ht\botfloat \advance\dimen@ by-\dp\botfloat \ifdim \dimen@>\baselineskip \dimen@i=\ht\@cclv \advance\dimen@i\dp\@cclv \ifdim \dimen@i>\z@ \splittopskip=\topskip \splitmaxdepth=\maxdimen \setbox\z@=\vsplit\@cclv to\dimen@ \setbox\@ne=\vsplit\@cclv to\dimen@ \else \setbox\z@=\box\voidb@x \setbox\@ne=\box\voidb@x \fi \else \setbox\z@=\box\voidb@x \setbox\@ne=\box\voidb@x \fi \def\line{\hbox to\onec@lhsize}% \let\pagebody=\twoc@lpagebody \ytexoutput \global\vsize=\twoc@lvsize \unvbox\@cclv \penalty\outputpenalty} \def\twoc@lsupereject {% \ifnum\insertpenalties>\z@ % something is being held over \hbox{}\kern-\topskip\nobreak\vskip 0pt plus.5\vsize\penalty-200% \hbox{}\kern-\topskip\nobreak\vskip 0pt plus.5\vsize\supereject\fi} \def\twoc@lpagebody {% \vbox{\twoc@lpagecontents}} \def\twoc@lpagecontents {% \dimen@i=\ht\partialp@ge \advance\dimen@i\ht\z@ \ifvoid\topfloat\else \dimen@=\ht\topfloat \advance\dimen@\dp\topfloat \unvbox\topfloat \ifdim \dimen@>\z@ \ifdim\dimen@i>\z@ \the\topsep\fi\fi \fi \unvbox\partialp@ge \wd\z@=\hsize \wd\@ne=\hsize \hbox to\onec@lhsize{\box\z@\hfil\box\@ne} \ifvoid\botfloat\else \dimen@=\ht\botfloat \advance\dimen@\dp\botfloat \ifdim \dimen@>\z@ \ifdim\dimen@i>\z@ \the\botsep\fi\fi \unvbox\botfloat \fi} \def\balancec@ls {% \setbox\z@=\vbox{\unvbox\@cclv}% \dimen@=\ht\z@ \advance\dimen@ by\topskip \advance\dimen@ by-\baselineskip \divide\dimen@ by2 \splittopskip=\topskip \splitmaxdepth=\maxdimen {\vbadness=10000 \loop \global\setbox\tw@=\copy\z@ \global\setbox\@ne=\vsplit\tw@ to\dimen@ \ifdim\ht\tw@>\dimen@ \global\advance\dimen@ by\p@ \repeat} \setbox\z@=\vbox to\dimen@{\unvbox\@ne}% \setbox\@ne=\vbox to\dimen@{\unvbox\tw@}% \global\output={\balancing@rror} \unvbox\partialp@ge \wd\z@=\hsize \wd\@ne=\hsize \hbox to\onec@lhsize{\box\z@\hfil\box\@ne}} \def\balancing@rror {% \errhelp={Please change the page into one that works.}% \errmessage{Page can't be balanced.}% \def\line{\hbox to\onec@lhsize}% \def\pagebody{\vbox{\unvbox\@cclv}}% \ytexoutput} % complete double columns \newif\iffirstc@l \newbox\firstc@l \newbox\secondc@l \def\setupdoublecolumn {% \trimpagesfalse \def\pageeject{% \filpage\iffirstc@l \else \line{}\filpage \fi}% \baselinefactor={1.2}\setnormalbaselines \spaceskip=.3333em plus .3333em minus .1666em \xspaceskip=.3333em plus .6666em minus .0833em \advance\parskip by 0pt plus 2pt \setupdoublecolumnhook} \def\setupdoublecolumnhook {} \def\begindoublecolumn {% \begingroup \onec@lhsize=\hsize \output={\box\@cclv=\voidb@x}% \eject \output={\doublec@lout}% \global\firstc@ltrue \hsize=.5\hsize \advance\hsize by-.5\columnskip \setupdoublecolumn} \def\enddoublecolumn {% \pageeject \endgroup \pagegoal=\vsize} \def\doublecolumn #1{\begindoublecolumn #1\enddoublecolumn} \def\doublec@lout {% \iffirstc@l \def\line{\hbox to\onec@lhsize}% \global\setbox\firstc@l=\pagebody \def\next{\global\firstc@lfalse} \else \def\line{\hbox to\onec@lhsize}% \global\setbox\secondc@l=\pagebody \wd\firstc@l=\hsize \wd\secondc@l=\hsize \def\pagecontents{\vbox{\line{\box\firstc@l\hfil\box\secondc@l}}}% \def\next{\ytexoutput\global\firstc@ltrue}% \fi \next} \message{indexes,} \gdef\beginindex {% \beginpgroup \def\entry##1{% \hangindent=2\parindent \hangafter=\@ne \noindent ##1\par} \def\subentry##1{% \hangindent=2\parindent \hangafter=\@ne \indent ##1\par} \raggedright \exhyphenpenalty=\@M \tolerance=\@M \interlinepenalty=\@M \begintwocolumntext} \gdef\endindex {% \endtwocolumntext \endpgroup} \message {citations,} \def\writec@te {\write\m@ne} \def\setciteaux #1{% \stripn@me{}#1% \edef\writec@te{\expandafter\noexpand\csname write\next \endcsname}} \def\c@te #1{% \expandafter\ifx \csname @cd-#1\endcsname \relax \expandafter\let\csname @cd-#1\endcsname=\cite% \writec@te{\string\citation{#1}}% \fi \expandafter\ifx \csname @cr-#1\endcsname \relax \expandafter\def\csname @cr-#1\endcsname{??}% \ywarning{{Citation #1 undefined}}% \fi} \def\cite #1{% \c@te{#1}% \csname @cr-#1\endcsname} \def\explicitcite #1#2{% \c@te{#1}% #2} \let\ecite=\explicitcite \def\citation #1{\relax} \def\bibcite #1#2{% \expandafter\def\csname @cr-#1\endcsname{#2}} \def\setbibstyle #1{% \toks@={#1}% \immediate\writec@te{\string\bibstyle{\the\toks@}}} \def\bibstyle #1{\relax} \newcount\bibcount \newskip\bibparskip \newtoks\biblabelfont \newtoks\bibsetup \newif\ifbibopenform \def\setupbibliography #1{ \bibcount=\z@ \setbox\z@=\hbox{\the\biblabelfont [#1]\enspace}\parindent=\wd\z@ \ifbibopenform \let\newblock=\linebreak \else \let\newblock=\relax \fi \setupbibliographyhook}% \def\setupbibliographyhook {} \def\bibpar #1{\ftpar{\the\biblabelfont [#1]}} \def\bibitem {\futurelet\next\bib@tem} \def\bib@tem {% \if[\noexpand\next \let\next=\bibit@m \else \let\next\b@bitem \fi \next} \def\bibit@m [#1]#2{% \toks@={#1}% \immediate\writec@te{\string\bibcite{#2}{\the\toks@}}% \bibpar{#1}} \def\b@bitem #1{% \advance\bibcount\@ne \edef\next{\number\bibcount} \immediate\writec@te{\string\bibcite{#1}{\next}}% \bibpar{\number\bibcount}} \def\bibliography #1{% \toks@={#1}% \immediate\writec@te{\string\bibdata{\the\toks@}}% \begingroup % for latex-like defs \def\begin##1##2{\begingroup \setupbibliography{##2}}% \def\end##1{\par\endgroup}% \@input{\jobname.bbl}{\ywarning{{No file \jobname.bbl}}}% \endgroup} \def\explicitbibliography #1#2{% \toks@={#1}% \writec@te{\string\bibdata{\the\toks@}} \@input{#2.bbl}{\ywarning{{No file #2.bbl}}}} \let\ebibligraphy=\explicitbibliography \def\bibdata #1{\relax} \message {labels,} \def\writel@bel {\write\m@ne} \def\setlabelaux #1{% \stripn@me{}#1% \edef\writel@bel{\expandafter\noexpand\csname write\next \endcsname}} \def\reference #1{% \expandafter\ifx \csname @lr-#1\endcsname \relax \expandafter\def\csname @lr-#1\endcsname{??}% \ywarning{{Reference #1 undefined}}% \else \csname @lr-#1\endcsname \fi} \def\pagereference #1{% \expandafter\ifx \csname @lrp-#1\endcsname \relax \expandafter\def\csname @lrp-#1\endcsname{??}% \ywarning{{Page reference #1 undefined}}% \else \csname @lrp-#1\endcsname \fi} \def\label #1#2{% \edef\next{#2}% \expandafter\ifx \csname @lr-#1\endcsname \relax \ywarning{{Label #1 defined as \next}}% \fi \expandafter\let\csname @lr-#1\endcsname=\next \writel@bel{\string\deflabel{#1}{\csname @lr-#1\endcsname}{\the\pageno}}} \def\deflabel #1#2#3{% \expandafter\def\csname @lr-#1\endcsname{#2}% \expandafter\def\csname @lrp-#1\endcsname{#3}} \message{initialization,} % output routine \output={\fixsiz@ \ytexoutput} % page layout \hsize=28pc \vsize=44pc \onheaders \offfooters \twosidedfalse \showcopyrightfalse \columnskip=2pc % displays \abovedisplayskip=3pt plus1pt minus2pt \belowdisplayskip=3pt plus1pt minus2pt \abovedisplayshortskip=0pt plus1pt \belowdisplayshortskip=2pt plus1pt minus1pt % footnotes \footnotemarkerwidth=10pt \botsep={\vskip\bigskipamount \footnoterule} % figures \figurelinefalse \figurelinedrop=4pt \topsep={} \floatingfigures \abovecaptionskip=\medskipamount \captionindent=2em % tables \tablewidth=0pt \intabskip=\emskip \pretabskip=\filskip \posttabskip=\filskip % miscellany \abstractindent=0pt \centerheadingsfalse % citations and labels \newaux\aux \filename \perjob \extension aux% \endnew \setciteaux\aux \setlabelaux\aux \bibsetup={} \biblabelfont={} \bibopenformfalse % fonts \runnerfont={\smlsize\rm} \footnotefont={\smlsize\rm} \captionfont={\smlsize\rm} \quotefont={\smlsize\rm} \titlefont={\bigsize\bf} \authorfont={\regsize\rm} \abstractfont={\smlsize\rm} \bottomtextfont={\smllsize\rm} \chapterfont={\bigsize\bf} \sectionfont={\regsize\bf} \headingfont={\regsize\bf} \lispfont={\regsize\tt} % running text \vpartrue \overfullrule=0pt \parindent=2em \partagsep=.5em \parskip=1pt plus2pt minus1pt \normallineskip=2pt \normallineskiplimit=0pt \def\singlespace {\baselinefactor={1.3}\setnormalbaselines} \def\doublespace {\baselinefactor={2.6}\setnormalbaselines} \singlespace \clubpenalty=900 \widowpenalty=900