diff options
Diffstat (limited to 'Master/texmf-dist/source/eplain/base/test/gcol.tex')
-rw-r--r-- | Master/texmf-dist/source/eplain/base/test/gcol.tex | 218 |
1 files changed, 218 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/eplain/base/test/gcol.tex b/Master/texmf-dist/source/eplain/base/test/gcol.tex new file mode 100644 index 00000000000..e44455ce0e7 --- /dev/null +++ b/Master/texmf-dist/source/eplain/base/test/gcol.tex @@ -0,0 +1,218 @@ +% This file is public domain. +% +%Date: Thu, 16 May 91 14:59 PDT +%From: David Guichard <GUICHARD%WHITMAN.BITNET@CORNELLC.cit.cornell.edu> +%Subject: Re: eplain +%To: karl@cs +% +%Karl-- +% +%Here are my multi-column macros and a rewrite of the double columns section +%of eplain.texinfo. I included a \quadcolumns because this seems potentially +%useful on landscape pages. +% +%I ran into a couple of problems/bugs/features of the original macros that I +%think I've fixed. +% +%First, if I started double columns and then returned to single column before +%the output routine was invoked, but there was too much text in the columns to +%fit on the current page, then all of the text was put on the next page, leaving +%lots of blank space on the first page. I think I've fixed this by changing how +%\vsize is defined. +% +%Next, unless I'm doing something screwy, it looks to me like eplain goofs up on +%footnotes and topinserts issued in multicolumn mode. I think I've got things +%changed around so they work. +% +%I also discovered that the "\vskip\interfootnoteskip" in the vfootnote macro +%will produce a parskip even if the interfootnoteskip is 0---was this +%intentional? If not, perhaps you'd like to add \parskip=0pt to vfootnote. +%(I have already added it to the modified vfootnote in the columns macro). + +\newskip\abovecolumnskip \abovecolumnskip = \bigskipamount +\newskip\belowcolumnskip \belowcolumnskip = \bigskipamount +\newdimen\gutter \gutter = 2pc +\newdimen\c@lumnhsize +\newtoks\previousoutput +\newcount\number@fcolumns +\newbox\@partialpage +\newdimen\singlec@lumnhsize +\newdimen\singlec@lumnvsize +\newtoks\previousoutput +\let\@ndcolumns=\relax +% +% We have a few synonymous ways to refer to multiple column modes. +% +\def\doublecolumns{\@columns2} +\def\triplecolumns{\@columns3} +\def\quadcolumns{\@columns4} +\def\begincolumns#1{\ifcase#1\relax \or \singlecolumn \or \@columns2 \or% + \@columns3 \or \@columns4 \else \relax \fi} +\def\singlecolumn{\@ndcolumns\vskip\belowcolumnskip\nointerlineskip} +\let\endcolumns=\singlecolumn +% +\def\@columns#1{% + \@ndcolumns% + \begingroup +% +% We redefine the main footnote macro so footnotes will extend across +% the whole page, not just the width of a column. Likewise for @ins, +% the insertion macro. +% + \def\vfootnote##1{\insert\footins\bgroup\hsize=\singlec@lumnhsize + \interlinepenalty\interfootnotelinepenalty + \splittopskip\ht\strutbox % top baseline for broken footnotes + \advance\splittopskip by \interfootnoteskip + \splitmaxdepth\dp\strutbox + \floatingpenalty\@MM + \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip + \everypar = {}% + \parskip0pt + \the\everyfootnote + \vskip\interfootnoteskip + \indent\llap{##1\kern\footnotemarkseparation}\footstrut\futurelet\next\fo@t} + % + \def\@ins{\par\begingroup\setbox\z@\vbox\bgroup\hsize=\singlec@lumnhsize} + \global\let\@ndcolumns=\@@endcolumns + \global\number@fcolumns=#1 + \global\c@lumnhsize = \hsize % If \hsize changed, get the new value. + \par % Shouldn't start in horizontal mode. + \global\previousoutput = \expandafter{\the\output}% + \global\advance\c@lumnhsize by -#1\gutter + \global\divide\c@lumnhsize by #1 + \global\output = {% + \global\setbox\@partialpage = + \vbox{\unvbox255\vskip\abovecolumnskip}% + }% + \pagegoal = \pagetotal + \eject % Now expand the \output just above. + \global\output = {\c@lumnoutput}% + \global\singlec@lumnhsize = \hsize + \global\singlec@lumnvsize = \vsize + \hsize = \c@lumnhsize +% +% Compute the proper vsize based on what's already on the page +% and the number of columns. Also change the mag factor for insertions. +% + \global\advance\vsize by -\ht\@partialpage + \global\advance\vsize by -\ht\footins + \ifvoid\footins\else \global\advance\vsize by -\skip\footins \fi + \global\advance\vsize by -\ht\topins + \ifvoid\topins\else \global\advance\vsize by -\skip\topins \fi + \global\vsize = #1\vsize + \multiply\count\footins by #1 \multiply\count\topins by #1 +}% +% +% When this is invoked box 255 should contain just the right amount of +% material, whether triggered by an output routine or a change in the +% number of columns. Because columns have to contain a whole number of +% lines of type, we take a bit of care with balancing the heights of the +% columns to prevent either losing material or having a very short last +% column. +% +% Note: when a page ends due to \bye or \eject, box 255 will contain lotsa +% white space, so the columns will not look balanced. To fix this use +% \singlecolumn before ending the page. +% +\def\@columnsplit{% + \splittopskip = \topskip + \splitmaxdepth = \baselineskip + \dimen0 = \ht255 + \divide\dimen0 by \number@fcolumns + \begingroup % the balancing act + \vbadness = 10000 \loop \setbox8=\copy255 + \global\setbox1 = \vsplit8 to \dimen0 \global\wd1 = \hsize + \global\setbox3 = \vsplit8 to \dimen0 \global\wd3 = \hsize + \ifnum\number@fcolumns>2% + \global\setbox5 = \vsplit8 to \dimen0 + \global\wd5 = \hsize \fi + \ifnum\number@fcolumns>3% + \global\setbox7 = \vsplit8 to \dimen0 + \global\wd7 = \hsize \fi + \ifdim\ht8>0pt \advance\dimen0 by 1pt \repeat + \endgroup + \global\setbox255 = \vbox{% + \unvbox\@partialpage + \ifcase\number@fcolumns \relax\or\relax\or% + \hbox to \singlec@lumnhsize{\box1\hfil\box3}\or% + \hbox to\singlec@lumnhsize{\box1\hfil\box3\hfil\box5}\or% + \hbox to\singlec@lumnhsize{\box1\hfil\box3\hfil\box5\hfil\box7}\or% + \else\relax\fi% + }% +}% +\def\c@lumnoutput{% + \@columnsplit + \hsize = \singlec@lumnhsize % Local to the \output group. + \vsize = \singlec@lumnvsize + \the\previousoutput +% +% Now the correct vsize is the original vsize times the +% number of columns. +% + \global\vsize=\number@fcolumns\singlec@lumnvsize +}% +\def\@@endcolumns{% + \global\let\@ndcolumns=\relax% + \par % Shouldn't start in horizontal mode. + \global\output = {\global\setbox1 = \box255}% + \pagegoal = \pagetotal + \eject + \global\setbox255 = \box1 + \@columnsplit + \global\vsize = \singlec@lumnvsize + \global\output = \expandafter{\the\previousoutput}% + \endgroup + \ifvoid\topins\else\topinsert\unvbox\topins\endinsert\fi + \unvbox255 +}% + +\endinput + +@node Multiple columns, Footnotes, Margins, User definitions +@section Multiple columns + +@cindex double column output +@cindex triple column output +@cindex quadruple column output +@cindex multiple column output + Eplain provides for double, triple and quadruple +column output: you just say +@code{\doublecolumns}, +@findex doublecolumns +@code{\triplecolumns} +@findex triplecolumns +or @code{\quadcolumns} +@findex quadcolumns +and from that point on, the manuscript will be +set in columns. If you want to go back to one column, say +@code{\singlecolumn}. +@findex singlecolumn + + The columns macros insert the value of the glue parameter +@code{\abovecolumnskip} +@findex abovecolumnskip +before the multi-column text, and the value of the glue parameter +@code{\belowcolumnskip} +@findex belowcolumnskip +after it. The default value for both of these parameters is +@code{\bigskipamount}, i.e., one linespace. + + The columns are separated by the value of the dimen parameter +@code{\gutter}. +@findex gutter +The default value for @code{\gutter} is two picas. + + The macros take into account only the insertion classes +@cindex insertion classes +defined by plain @TeX{}, namely, footnotes and @code{\topinsert}s. If +you have defined additional insertion classes, you will need to change +the macros which implement multi-column mode. Furthermore, the insertions +do not respect the column widths; if you want them to, you have to +change the way your output routine works. (Eplain uses whatever the +current output routine is; it is not tied to @code{\plainoutput}.) +@findex plainoutput + +@xx: \columnfill +@xx: \singlecolumn to balance columns +@xx: footnote/topinsert width of whole page +@xx: \vfootnote resets \parskip |