%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Generic double column output. % % Modified from a routine written by Donald Knuth (The TeXBook, App. E) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % The user may modify the following to his tastes: % % \pagewidth vertical length of page. % \pageheight horizontal width of page. % \colwidth column width % \separator macro to generate column separator. Default is nothing. % \rulesep sets it to \vrule. \norulesep doesn't. % \makepage default is what is contained in plain. \catcode`@=11 % from plain.tex % Create and initialize new dimensions. \newdimen\pagewidth \newdimen\pageheight \newdimen\colwidth \pagewidth=\hsize \pageheight=\vsize \colwidth=3.2truein % This routine is used by \output ; this is different from % the one found in App. E. \def\onepageout#1{\shipout\vbox{\offinterlineskip \vbox to \pageheight {\makepage{#1}% \boxmaxdepth=\maxdepth}} \advancepageno} \def\makepage#1{\makeheadline #1 % Page contents \makefootline} \output{\onepageout{\unvbox255}} \newbox\partialpage \def\begindoublecolumns{\begingroup \output={\global\setbox\partialpage=\vbox{\unvbox255\bigskip}}\eject \output={\doublecolumnout} \hsize=\colwidth \vsize=2\pageheight} \def\enddoublecolumns{\output={\balancecolumns}\eject \endgroup \pagegoal=\vsize} \def\doublecolumnout{\splittopskip=\topskip \splitmaxdepth=\maxdepth \dimen@=\pageheight \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\separator\hfil\box2}} \def\norulesep{\let\separator=\relax} \def\rulesep{\let\separator=\vrule} \let\separator=\relax \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@{\dimen2=\dp3 \unvbox3\kern-\dimen2 \vfil} \pagesofar}