% OUTPUT PSIZZL - output routine for publications % singlesided : page numbers in fixed location % doublesided : alternating page numbers at left/right % quadsided : alternating page numbers at foot and top % nopagenumbers : disables all pagenumbering % bottomcentered : bottom centered page numbers % topcentered : top centered page numbers % bottomnumbers : bottom outside page numbers % topnumbers : top outside page numbers \newdimen\evenoffset\newdimen\oddoffset % Even and odd leaves of output are shifted by these respective amounts % in order to have a proper binding margin. \newcount\p@gecount \def\pageset#1{\p@gecount#1}% \def\p@geclear{\global\p@gecount\@ne}\adddef\fmtreset{\p@geclear}% \def\p@gefront{\global\p@gecount\m@ne}\adddef\resd@c{\p@gefront}% \newcount\le@f\le@f=\@ne \newcount\p@geroman\p@geroman\m@ne \newif\iffr@nt \newif\ifdoubleside \newif\ifquadside \def\singlesided{\quadsidefalse \doublesidefalse}% \def\doublesided{% \quadsidefalse\doublesidetrue%\evenoffset.2in\oddoffset-.05in }% \def\quadsided{% \quadsidetrue\doublesidefalse%\evenoffset.2in\oddoffset-.05in \let\endleaf\endle@f }% \newif\ifp@genumberleft \newif\ifp@genumbertop \newif\ifp@genumbernone \newif\ifp@genumbercenter \adddef\resd@c{% \let\frontnumbers=\bottomcentered\let\bodynumbers=\topoutside }% \def\nopagenumbers{\p@genumbernonetrue}% \def\bottomcentered{\p@genumbertopfalse\p@genumbercentertrue}% \def\topcentered{\p@genumbertoptrue\p@genumbercentertrue}% \def\bottomoutside{\p@genumbertopfalse\p@genumbercenterfalse}% \def\topoutside{\p@genumbertoptrue\p@genumbercenterfalse}% \def\p@gehead{\ifp@genumbertop\p@genumberline\else\p@genumbernull\fi}% \def\p@gefoot{\ifp@genumbertop\p@genumbernull\else\p@genumberline\fi}% \def\b@ndp@ge#1#2{\ifp@genumberleft{#2}\else{#1}\fi}% \def\p@gebanner#1#2#3{% \line{{\rm\lapline{\b@ndp@ge{#1}{#3}}{#2}{\b@ndp@ge{#3}{#1}}}}% }% \def\lapline#1#2#3{\rlap{#1}\hfil#2\hfil\llap{#3}}% % % set up the defaults % \singlesided\topoutside % default pagenumbering format % \newinsert\margin\dimen\margin\maxdimen % This pagenumber is same as in PLAIN but does not impose \tenrm \gdef\p@genumber{{\bf\numorroman\p@gecount}}% \def\p@genumberline{% \iffr@nt \p@genumbernull \else \ifletter\p@genumberletter\else \ifm@mo\p@genumbermemo\else \p@genumberpaper \fi \fi \fi }% \def\p@genumbernull{\vbox to \z@{}}% \def\makep@genumber{% output.psizzl \ifnum\p@gecount<\z@\frontnumbers\else\bodynumbers\fi \ifdoubleside \ifodd\pageno\hoffset\evenoffset\p@genumberleftfalse \else\hoffset\oddoffset\p@genumberlefttrue \fi \fi \ifquadside \ifodd\pageno\p@genumberlefttrue\else\p@genumberleftfalse\fi \ifodd\le@f \p@genumbertopfalse\voffset\evenoffset \else\p@genumbertoptrue\voffset\oddoffset \fi \fi \ifp@genumbernone\fr@nttrue\fi \count\@ne\number\p@gecount %\count\tw@\number\le@f }% \def\p@gecontents{% \ifvoid\margin\else \p@gebanner{}{}{% \hbox to\z@{\b@ndp@ge{}{\hss}% \hbox{\vbox to \z@{\box\margin\vss}}\b@ndp@ge{\hss}{}% }% }% \fi \ifvoid\topins\else\unvbox\topins\fi \unvbox\@cclv \ifvoid\footins\else\vskip\skip\footins\vskip-0.68ex \hrule width.25\hsize\vskip1.82ex \unvbox\footins \fi \ifr@ggedbottom\vfill\fi }% \def\p@gebox#1{% \vbox{% \boxmaxdepth=\the\maxdepth\offinterlineskip %\offinterlineskip \p@gehead\vskip\normalbaselineskip \c@lumnbox{#1}% \vskip\normalbaselineskip\p@gefoot }% }% \def\c@lumnbox#1{% \vbox to \vsize{#1}% }% \def\bumple@fnumber{% counter for total leaves. Quad: Two pages per leaf \ifodd\pageno\global\advance\le@f\@ne\fi }% \def\bumpp@genumber{% \iffr@nt\global\fr@ntfalse\fi \ifnum\p@gecount<\z@ % register for the page label `page number' \global\advance\p@gecount\m@ne \global\p@geroman=\number\p@gecount \else\global\advance\p@gecount\@ne \fi \global\advance\pageno\@ne % counter for total pages }% \def\fmtoutput#1{% \makep@genumber\l@twrite\shipout#1\bumpp@genumber\bumple@fnumber }% \def\eject@ns{% \ifnum\outputpenalty>-20000 \else\dosupereject\fi }% \output{\fmtoutput{\p@gebox{\p@gecontents}}\eject@ns}% \newdimen\pagesize\pagesize\hsize \newcount\c@lumncount\newcount\c@lumntotal \def\gutter{\thinvrule}% \def\pageline{\hbox to\pagesize}% \newbox\c@lumni\newbox\c@lumnii\newbox\c@lumniii \newbox\c@lumniv\newbox\c@lumnv \def\@@nd{\endmulticolumn\@nd}\let\@nd\end \def\beginmulticolumn#1{% arg = number of columns per page < 6 \@ndmulticolumn \topskip\z@\r@ggedbottomtrue \c@lumntotal#1\c@lumncount\c@lumntotal \pagesize\hsize\let\g@tter\gutter % save \gutter where it can't go bad \setbox\z@\hbox{\g@tter}\advance\hsize\wd\z@ \divide\hsize\number\c@lumntotal\advance\hsize-\wd\z@ % new \hsize \output{\multic@lumn{\c@lumnbox{\p@gecontents}}\eject@ns}% }% \def\@ndmulticolumn{% \endpage\supereject \message{\string\c@lumncount=\number\c@lumncount}% \loop\ifnum\c@lumncount<\c@lumntotal\null\endpage\repeat \hsize\pagesize\c@lumntotal\@ne \let\markl\empty\let\markr\empty\let\marko\empty % null these, too }% \def\endmulticolumn{% \mark{}\@ndmulticolumn }% \def\multic@lumn#1{\rm % switch back just in case \def\l@toutput{% \l@twrite\let\leftline\z@\let\bf\z@ \let\allmark\z@\let\nomark\z@\let\inimark\z@ }% \ifx\markl\empty {\l@toutput\xdef\markl{\firstmark}}% {\let\allmark\relax\let\nomark\relax\let\inimark\relax \setbox\z@\hbox{\titleline\markl}% \setbox\@ne\hbox{\titleline\empty}% \ifdim\wd\z@=\wd\@ne {\l@toutput\xdef\markl{\botmark}}% \fi }% %\message{\string\markl=\markl.}% \fi \ifcase\c@lumncount \or\c@lumnformat{#1}\or\s@tb@x\c@lumni#1\or\s@tb@x\c@lumnii#1% \or\s@tb@x\c@lumniii#1\or\s@tb@x\c@lumniv#1\or\s@tb@x\c@lumnv#1% \fi \global\advance\c@lumncount\m@ne % if the current heading is not yet finished, % insert the column header for this heading into the vertical list \botmark }% \def\g@tb@x#1{\ifdim\wd#1=\z@\else\box#1\g@tter\fi}% \def\s@tb@x{\global\setbox}% \def\c@lumnformat#1{% \fmtoutput{% \vbox{% \p@gehead {\l@twrite \pageline{% \g@tb@x\c@lumnv\g@tb@x\c@lumniv\g@tb@x\c@lumniii \g@tb@x\c@lumnii\g@tb@x\c@lumni#1\hfil }% }% \p@gefoot }% \global\advance\c@lumncount\c@lumntotal }% }%