home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Education Sampler 1992 [NeXTSTEP]
/
Education_1992_Sampler.iso
/
Mathematics
/
TeX
/
TeXsis-2.15
/
TXSdcol.tex
< prev
next >
Wrap
Text File
|
1992-08-04
|
31KB
|
605 lines
% TXSdcol.tex TeXsis version 2.15
% $Revision: 15.6 $ : $Date: 92/06/02 15:56:46 $ : $Author: myers $
%======================================================================*
% DOUBLE COLUMN FORMAT E. Myers and F.E. Paige
%
% TXSdcol produces double-column output with balanced columns and
% floating single and double column insertions. Adapted from The TeXBook,
% pg 417, and The TUGboat, Vol 6, pg 29.
%
% \setdoublecolumns initializes the double column format, including
% setting \hsize and \vsize:
%
% \setdoublecolumns#1#2#3 initializes double column format
% #1 = overall width
% #2 = overall height
% #3 = column width
% Note that \setdoublecolumns redefines \output.
%
% \doublecolumns and \enddoublecolumns are used to switch between
% single and double column format:
%
% \doublecolumns starts double column format
% \enddoublecolumns returns to single column format and
% balances columns
% \longequation begins a long (2-column) equation
% \endlongequation ends a long equation
% \leftcolrule draws a rule across left column
% \rightcolrule draws a rule across right column
%
% Insertions of figures or other vertical mode material can be made
% using the following macros, which are similar to those in Plain TeX:
%
% \topinsert insert at top of current column
% \midinsert insert at current position or at top
% \pageinsert insert full column
% \widetopinsert insert across 2 columns at top of page
% \widepageinsert insert full page across 2 columns
% \endinsert end insertion
%
% The material is put in the left or right column depending on the current
% position. A specific column can be forced by putting inside the insertion
%
% \forceleft force left column insertion
% \forceright force right column insertion
%
% Outside of double column mode, \widetopinsert is equivalent to \topinsert.
%
%
% A typical TeXsis double-column document will contain:
%
% \texsis % initialize
% \setdoublecolumns{width}{height}{colwidth} % in cm, in, pt,...
% ... title page, etc ...
% ... title, author, etc ... % default is single column
% \doublecolumns % switch to 2 columns
% ... text ...
% \longequation
% $$
% ... long equation, table, etc ... % across both columns
% $$
% \endlongequation
% ... text ...
% \figure{foo} % insert at top of column
% ... top matter ...
% \endfigure % end insertion
% ... text ...
% \enddoublecolumns % end
% \bye
%
% Since double columns are narrow, the normal TeX spacing will produce
% many overfull hboxes. To avoid this, the interword skip \spaceskip is
% replaced by \doublecolskip with the default value
% \doublecolskip=.3333em plus .3333em minus .1em
% and the \hyphenpenalty is set to zero. To balance the columns, it is
% necessary to allow some vertical stretch; for example use
% \parskip=\smallskipamount
%
% To type oversize documents on an 8.5 x 11 inch laser printer, use
% \ninepoint and set the dimensions in \setdoublecolumns to 9/12 of the
% desired size. Then the document enlarged by 4/3 will be correct.
%
%
% WARNING: Formatting double column documents is very difficult. There
% are many special cases, only some of which are handled in these macros.
% The following is a list of known problems:
%
% (1) Since double columns are narrow, the normal TeX spacing produces
% many overfull \hbox's. To avoid this, the interword skip \spaceskip is
% changed to
% \doublecolskip=.3333em plus .3333em minus .1em
% More uniform spacing can be obtained by changing \doublecolskip.
%
% (2) To balance columns it is essential to have some stretch in the
% column. For example, use
% \parskip=\smallskipamount
% (This is done automatically in \IEEEproceedings.)
%
% (3) If the page cannot be balanced, an error message is produced. To
% see the page, try typing i\vfill after the ? prompt.
%
% (4) Insertions which do not fit on a page move to the same column
% of the next page, so figures may appear in the wrong order. To fix this
% move the insertion to a different position or use \forceleft or \forceright.
%
% (5) A \topinsert placed after a \midinsert may appear before it, just
% as in Plain. To avoid this, rearrange the figures or use \topinsert for all
% figures.
%
% (6) Footnotes are not implemented. These may be added in the future.
%
% (7) Running headlines and footlines are added to each page. But
% forming the double columns destroys the top and bottom marks on the page,
% so the standard TeXsis headlines and footlines do not work very well.
%
%-----------------------------------------------------------------------
% \twinout is much simpler than \setdoublecolumns; it simply
% redefines \output to produce a reduced format output with two pages per
% physical page in landscape format. Usage with TeXsis:
%
% [\twinhsize=<dimen>] % horizontal width
% [\twinvsize=<dimen>] % vertical height
% [\twincsize=<dimen>] % column width
% [\def\LandscapeSpecial{\special{...}}] % \special for landscape
% \texsis
% \tenpoint
% \def\Tbf{\twelvebf}
% \def\tbf{\tenbf}
% \twinout
%
% Adapted from Harvmac by Paul Ginsparg.
% -----------------------------------------------------------------------
%
% Dependencies: This file is independent of the rest of TeXsis and
% can be used with Plain TeX.
%
% -----------------------------------------------------------------------
\message{Double Column Format.}
\catcode`@=11 % make @ a letter for this file
\newdimen\colwidth % col. width
\newdimen\pagewidth % total width
\newdimen\pageheight % total height
\newdimen\ruleht \ruleht=.5pt % col. rule height
\newdimen\colmaxdepth \colmaxdepth=4pt % max. split depth
\newdimen\bigc@lheight % 2 * col. height
\newdimen\l@ftpluscenter % left + middle
\newdimen\splitmaxs@ve % save \splitmaxdepth
\newdimen\s@vesize % save \vsize
% TXShead.tex defines similar dimensions for headlines, but if if
% has not been loaded then we need to create new ones.
\newdimen\wideheadlineoffset \wideheadlineoffset=0.0pt % how much to raise
\newdimen\widefootlineoffset \widefootlineoffset=0.0pt % how much to lower
\newskip\s@veskip % save \spaceskip
\newskip\doublecolskip % new \spaceskip
\doublecolskip=.3333em plus .3333em minus .1em % with more stretch
\newbox\partialpage % partial page
\newinsert\leftins \count\leftins=1000 % left col. insert
\dimen\leftins=\maxdimen \skip\leftins=0pt %
\newinsert\rightins \count\rightins=1000 % right col. insert
\dimen\rightins=\maxdimen \skip\rightins=0pt %
\newif\ifleftc@lumn % insert left col.
\newif\ifwid@ \wid@false % wide insert
%----------------------------------------------------------------------*
% Until or unless you say \setdoublecolumns, the \doublecolumns,
% \enddoublecolumns, \leftcolrule and \rightcolrule macros are
% simply \relax. This is so you can put these in a document that
% uses double columns, but then print it with one of the single
% column formats without them getting in the way. Or vice versa.
%
% For the same reason, \widetopinsert and \widefullinsert are just
% \topinsert and \fullinsert. There is no need to define the table and
% figure macros here because they use appropriate the inserts.
\colwidth=\hsize % default column width is \hsize
\def\doublecolumns{\relax}
\def\enddoublecolumns{\relax}
\def\leftcolrule{\relax}
\def\rightcolrule{\relax}
\def\longequation{\relax}
\def\endlongequation{\relax}
\def\newcolumn{\relax}
\def\widetopinsert{\topinsert}
\def\widepageinsert{\pageinsert}
\def\begindoublecolumns{\doublecolumns} % synonym
\def\singlecolumn{\enddoublecolumns} % synonym
% Save Plain definitions of inserts to we can use them
\let\topinsertpl@in=\topinsert
\let\midinsertpl@in=\midinsert
\let\pageinsertpl@in=\pageinsert
\let\endinsertpl@in=\endinsert
% \@newcolumn is like \newpage but only active in double column mode
\def\@newcolumn{\vfill\eject}
%----------------------------------------------------------------------*
% \setdoublecolumns initializes double column format. #1 is the
% overall width, #2 is the height, and #3 is the column width.
\def\setdoublecolumns#1#2#3{%
\global\hsize=#1\relax % width
\global\vsize=#2\relax % height
\global\colwidth=#3\relax % column width
\pagewidth=\hsize \pageheight=\vsize % page sizes
\bigc@lheight=\vsize % total height = \vsize
\multiply \bigc@lheight by 2 % times 2
\l@ftpluscenter=\pagewidth % \l@ftpluscenter = size
\advance \l@ftpluscenter by -\colwidth % to right column
\dimen\leftins=\pageheight % max. insert
\dimen\rightins=\pageheight % max. insert
\output{\onep@geout{\unvbox255}}% % just ship out page
\let\doublecolumns=\@doublecolumns % enable \doublecolumns
\let\enddoublecolumns=\@enddoublecolumns % enable \enddoublecolumns
\let\rightcolrule=\@rightcolrule % enable
\let\leftcolrule=\@leftcolrule %
\def\longequation{\@longequation}% % to begin long equations
}
% \@doublecolumns starts double column output. It redefines \endinsert
% to handle double column insertions and \widetopinsert and \widepageinsert
% to do them.
\def\@doublecolumns{% % begin 2 columns
\begingroup % keep changes local
\def\endmode{\@enddoublecolumns} % how to end
\output={\global\setbox\partialpage=% % set up output
\vbox{% % box containing...
\ifvoid\topins\else\unvbox\topins\fi% %top insert
\unvbox255}}\eject % and main page
\output={\d@ublec@lumnout}% % set 2 column output
\s@vesize=\vsize % save old \vsize
\hsize=\colwidth\vsize=\bigc@lheight % set width, 2*height
\advance \vsize by -2\ht\partialpage % less partial page
\advance \vsize by -2\dp\partialpage % less partial page
\global\s@veskip=\spaceskip % save old interword glue
\global\spaceskip=\doublecolskip % stretch for small cols.
\global\displaywidth=\colwidth % equations have \colwidth
\global\hyphenpenalty=0 % hyphens are OK
\let\topinsert=\topinsertd@uble % 2-col top insert
\global\let\midinsert=\midinsertd@uble % mid insert
\global\let\pageinsert=\pageinsertd@uble % full column insert
\global\let\endinsert=\endinsertd@uble % 2-col end inserts
\global\let\widetopinsert=\widet@pinsert % allow wide inserts
\global\let\widepageinsert=\widep@geinsert % or full page inserts
\global\let\newcolumn=\@newcolumn % to break columns
}
%----------------------------------------------------------------------*
% \@enddoublecolumns ends double column output and balances columns.
% This also allows double width equations. The grouping insures that
% \endinsert is reset to the Plain version.
\def\@enddoublecolumns{% % end double column mode
\output={\b@lancecolumns}\eject % output 2 columns
\global\output={\onep@geout{% % output page =
\ifvoid\topins\else\unvbox\topins\fi % top insert
\unvbox255}}% % plus main page
\global\vsize=\s@vesize % reset vsize
\endgroup % end 2 col. group
\pagegoal=\vsize % overall goal size
\spaceskip=\s@veskip % reset interword glue
\displaywidth=\hsize % equation width
\hyphenpenalty=50 % hyphen penalty
\global\let\topinsert=\topinsertpl@in % top insert
\global\let\midinsert=\midinsertpl@in % mid insert
\global\let\pageinsert=\pageinsertpl@in % page insert
\global\let\endinsert=\endinsertpl@in % end insert
\global\let\widetopinsert=\topinsertpl@in % wide insert
\global\let\widepageinsert=\pageinsertpl@in % page insert
\count\topins=1000 % standard top insert
} % end of \@enddoublecolumns
%----------------------------------------------------------------------*
% Output and related routines:
% \onep@geout ships out a page. From the TeXbook, p. 416. Running
% headlines and footlines have been added.
\def\onep@geout#1{% % output one page
\shipout\vbox{% % output a box
\offinterlineskip % no interline skip
\wideheadline % make wide headline
\vbox to \pageheight{#1% % box containing #1
\boxmaxdepth=\maxdepth}% %
\widefootline}% % make wide footline
\advancepageno}% % increment page number
% The following are like \makeheadline and \makefootline in Plain
% except that they use \pagewidth.
\def\wideheadline{% % make wide headline
\vbox to\z@{\vskip-22.5\p@% % skip up some
\vskip-\wideheadlineoffset % and then some, if needed
\hbox to \pagewidth{% % like \line
\vbox to8.5\p@{}\the\headline}\vss}% % content in \headline
\nointerlineskip}% %
\def\widefootline{% % make wide footline
\baselineskip24\p@% % space down
\vskip\widefootlineoffset % and then some, if needed
\hbox to \pagewidth{\the\footline}}% % content in \footline
% \d@ublec@lumnout splits the page into two columns, inserting any
% top insertions which have accumulated.
\def\d@ublec@lumnout{% %
\splitmaxs@ve=\splitmaxdepth % save it
\splitmaxdepth=\colmaxdepth % and reset it
\dimen@=\pageheight % total height...
\advance\dimen@ by -\ht\partialpage % less partial page
\advance\dimen@ by -\dp\partialpage % less partial page
\ifvoid\topins\else % if undone top insert
\advance\dimen@ by -\ht\topins % subtract its height
\advance\dimen@ by -\dp\topins\fi % subtract its height
\splittopskip=\topskip % top glue for splits
\ifdim\dimen@>\baselineskip% % if room for 1 line...
\setbox3=\vbox{% % box3 = working box
\ifvoid\leftins\else\unvbox\leftins\fi%% left insertion
\unvbox255}% % plus main material
\setbox1=\vsplit3 to \dimen@ % box1 = left column
\setbox4=\vbox{% % box4 = working box
\ifvoid\rightins\else\unvbox\rightins\fi% right insertion
\unvbox3}% % rest if main material
\setbox2=\vsplit4 to \dimen@ % box2 = right column
\setbox255=\vbox{\unvbox255\unvbox4}% % rest back on output list
\else% % ... else no room
\setbox1=\vbox{}% % so do nothing
\setbox2=\vbox{}% %
\fi% % end if no room
\onep@geout\p@gesofar% % output page
\global\vsize=\bigc@lheight% %
\unvbox255 \penalty\outputpenalty% %
\splitmaxdepth=\splitmaxs@ve}% % reset it
% \p@gesofar adds double column material to the page, putting box1 on the
% left, box2 on the right.
\def\p@gesofar{% %
\ifvoid\topins\else\unvbox\topins\fi % unbox top insert
\unvbox\partialpage % unbox partial page
\wd1=\hsize \wd2=\hsize % set sizes
\hbox to \pagewidth{\box1\hfil\box2}}% % and combining 2 boxes
% \b@lancecolumns is the output routine for 2 balanced columns. Taken
% from The TeXbook, p. 417, with major modifications.
\def\b@lancecolumns{% %
\splitmaxs@ve=\splitmaxdepth% % save it
\splitmaxdepth=\colmaxdepth% % and reset it
\setbox0=\vbox{% % box0 = working box
\ifvoid\leftins\else\unvbox\leftins\fi% % left insert
\unvbox255}% % plus main page
\dimen@=\ht0 \advance\dimen@ by \dp0% % get height
\ifvoid\rightins\else% % if right insert
\advance \dimen@ by \ht\rightins% % add its height
\advance \dimen@ by \dp\rightins\fi% % add its height
\ifvoid\topins\else % if undone top insert
\advance\dimen@ by -\ht\topins % subtract its height
\advance\dimen@ by -\dp\topins\fi % subtract its height
\advance \dimen@ by \topskip % add top skip
\advance \dimen@ by -\baselineskip % add baseline skip
\divide \dimen@ by 2% % and divide by 2
\splittopskip=\topskip % top skip for split boxes
% Loop over possible splits of text into left and right columns.
{\vbadness=10000 \loop% % suppress errors
\setbox3=\copy0% % box3 = working copy
\setbox6=\copy\rightins% % box6 = working rightins
\global\setbox4=\vbox{% % box 4 =
\vsplit3 to\dimen@}% % left column
\global\setbox5=\vbox{% % box5 = right column
\ifvoid\rightins\else\unvbox6\fi% % right insert
\unvbox3}% % rest of text
\ifdim\ht5>\dimen@% % if box5 too big,
\global\advance\dimen@ by 1pt\repeat}% % increment and try again
% End loop over possible splits. Set up output.
\dimen@ = \ht4 \dimen5 = \ht5% % get heights
\ifdim\dimen5 > \dimen@ \dimen@=\dimen5 \fi% % find larger
\setbox1=\vbox to \dimen@{\unvbox4}% % box1 = left column
\setbox2=\vbox to \dimen@{\unvbox5}% % box2 = right column
\global\output={\b@lancingerror}% % prepare for error
\p@gesofar% % and output page
\splitmaxdepth=\splitmaxs@ve}% % reset it
% if there is a problem balancing the lines we display an error message
\newhelp\b@l@ncingerror{%
b@lancecolumns: I couldn't figure out how to balance the^^J
two columns. Maybe you can re-arange some text to make ^^J
the job easier. To see the page anyway try inserting a \string\vfill.}
\def\b@lancingerror{% % error exit
\newlinechar=10 % ^^J is line break
\errhelp=\b@l@ncingerror % longer help message
\errmessage{Page cannot be balanced}% % error message
\onep@geout{\unvbox255}}% % do something
%======================================================================*
% \@leftcolrule and \@rightcolrule put rules across left and right
% columns for spanned equations
\def\@leftcolrule{% Rule across bottom of left column
\vskip 2pt\nointerlineskip % some whitespace first
\vbox to \baselineskip{\hbox to \colwidth{ % short vertical bar at right
\hss \vrule height6pt width\ruleht}% % and above the horiz. rule
\hrule width\colwidth height\ruleht}% % rule
\vskip 4pt}
\def\@rightcolrule{\vskip 4pt
\moveright\l@ftpluscenter % move over
\vbox to \baselineskip {%
\hrule width\colwidth height\ruleht % rule across column
\hbox to \colwidth{% %
\vrule height 6pt width\ruleht\hss}%
}}
\def\@longequation{% what to do for a long (2-column) equation
\enddoublecolumns % single column mode
\leftcolrule % and draw a rule
\def\endlongequation{\@endlongequation}} % how to get out
\def\@endlongequation{ % ending a long equation
\rightcolrule % rule at top of right column
\doublecolumns} % then back to double column mode
\def\longequation{\relax} % default for single column
\def\endlongequation{\relax} % does nothing
%----------------------------------------------------------------------*
% Floating insertions:
% \endinsertd@uble is a modified version of \endinsert from Plain which
% decides whether to put a top insertion in the left or the right column.
% \endinsert is let equal this in \doublecolumns.
% Note: Writing \ifdim\pagetotal<\dimen1 ... near the beginning of this
% macro worked with an \emsg{\the\pagetotal} preceding it but failed when it
% was removed. \dimen3 =\pagetotal \ifdim\dimen3 <\dimen1 ... seems to work.
% Is this a bug or a feature???
\def\endinsertd@uble{\egroup% % finish the \vbox
% Decide whether in left or right column.
\dimen2 =\vsize% % 2 col. height = \vsize
\dimen1 =\dimen2 \divide\dimen1 by 2% % 1 col height = 1/2 \dimen2
\dimen3 =\pagetotal% % get value of pagetotal
\ifdim\dimen3 <\dimen1 \leftc@lumntrue% % left if page total < 1 col
\else \leftc@lumnfalse\fi % right otherwise
\ifx L\LRf@rce \leftc@lumntrue \fi % forced left
\ifx R\LRf@rce \leftc@lumnfalse \fi % forced right
% If midinsert requested, decide whether there is room.
\if@mid % midinsert selected
\dimen@\ht\z@ \advance\dimen@\dp\z@% % dimen0 = height + depth
\advance\dimen@ \baselineskip% % + baselineskip
\advance\dimen@\pagetotal% % + page total
\ifleftc@lumn % if in left column
\ifdim\dimen@>\dimen1 % % \dimen1 = 1 col height
\@midfalse\p@gefalse\fi % top insert
\else% % in right column
\ifdim\dimen@>\dimen2 % % \dimen2 = 2 col height
\@midfalse\p@gefalse\fi\fi % top insert
\fi % end if@mid
% If room for midinsert, do it; otherwise make topinsert in same column.
\if@mid \bigskip\box\z@\bigbreak% % if mid, insert
\else% % doesn't fit
\ifwid@% % wide insert
\count\topins=2000% % counts 2 x 1000 for length
\insert\topins{\penalty100% % put wide insertion into
\topskip\z@skip\splittopskip\z@skip% % \topins with inserts
\splitmaxdepth\maxdimen% % from 1-col mode.
\floatingpenalty\z@% % no penalty
\hsize=\pagewidth% % full width
\ifp@ge \dimen@\dp\z@% % dimen0 = depth
\vbox to\pageheight{\unvbox\z@% % full page = \pageheight
\kern-\dimen@}% %
\else \box\z@\nobreak\bigskip\fi}% % just add box0
\else% % single column insertion
\ifleftc@lumn% % in left column
\let\m@keins=\leftins% % so insert in left
\else \let\m@keins=\rightins\fi % or insert in right
\insert\m@keins{\penalty100% % do the insertion just
\splittopskip\z@skip% % like Plain TeX...
\splitmaxdepth\maxdimen% %
\floatingpenalty\z@% %
\ifp@ge \dimen@\dp\z@% % full page insert
\vbox to\pageheight{\unvbox\z@% % height is pageheight
\kern-\dimen@}% % depth is 0pt
\else \box\z@\nobreak\bigskip\fi}% % top insert
\fi % end ifwid@
\fi\endgroup% % end if@mid
\global\let\LRf@rce=X}% % reset forcing flag
% \@widetopinsert makes a floating insertion across both columns. It
% uses the same \topins as the normal top insert because it goes in the same
% place. \widetopinsert is let equal to this by \doublecolumns.
\def\widet@pinsert{% % let \widetopinsert = this
\@midfalse % not mid insert
\p@gefalse % not page
\wid@true % is wide
\@ins % Plain insert macro
\hsize=\pagewidth} % but set full width
\def\widep@geinsert{% % let \widepageinsert = this
\@midfalse % not mid insert
\p@getrue % not page
\wid@true % is wide
\@ins % Plain insert macro
\hsize=\pagewidth} % but set full width
% \topinsertd@uble,... are like \topinsert,... in Plain but also reset
% \ifwid@ for wide inserts. \topinsert,... are set to these by \doublecolumns.
% The Plain versions must be saved to reset these in \enddoublecolumns.
\def\topinsertd@uble{\@midfalse\p@gefalse\wid@false\@ins}
\def\midinsertd@uble{\@midtrue\wid@false\@ins}
\def\pageinsertd@uble{\@midfalse\p@getrue\wid@false\@ins}
% \forceleft and \forceright force left and right insertions independent
% of the current column position.
\def\forceleft{\global\let\LRf@rce=L} % force left insert
\def\forceright{\global\let\LRf@rce=R} % force right insert
\let\LRf@rce=X % default is no force
%======================================================================*
% TWIN PAGE OUTPUT
% \twinout is much simpler than \setdoublecolumns; it simply
% redefines \output to produce a reduced format output with two pages per
% physical page in landscape format.
%-----------------------------------------------------------------------
% Counters and such
\newbox\l@ftp@ge % box for first column
\newdimen\twinhsize \twinhsize=10truein % twin width
\newdimen\twinvsize \twinvsize=7truein % twin height
\newdimen\twincsize \twincsize=4.75truein % twin column width
\newdimen\normhsize \normhsize=6.5truein % normal hsize
\newdimen\normvsize \normvsize=9.0truein % normal vsize
% \LandscapeSpecial is the \special hack for landscape. Otherwise
% you can use the landscape option for the device driver. The default
% is for dvips 5.484 by Tom Rokikki:
\def\LandscapeSpecial{\special{papersize=11in,8.5in}}
% \twinout redefines \output to generate two columns per page.
% You should also set font sizes, etc.
\def\twinout{% % reduced size output
\def\l@r{L}% % left-right flag
\hsize=\twincsize % twin col width
\vsize=\twinvsize % twin height
\twin@ffset % twin offsets
\output={\almostship@ut{\leftline{\vbox{% % new \output
\makeheadline\pagebody\makefootline}}}% % just like Plain
\advancepageno}% % advance number
}
% \twin@ffset sets the offsets for \twinout assuming that the
% initial offsets are 0pt. Otherwise trouble...
\def\twin@ffset{% % set \twinout sizes
\dimen0 =\twinhsize % get new \hsize
\advance\dimen0 by-\normvsize % subtract normal
\divide\dimen0 by 2 % divide by 2
\global\hoffset=-\dimen0 % and fix \hoffset
\dimen0 =\twinvsize % get new \vsize
\advance\dimen0 by-\normhsize % subtract normal
\divide\dimen0 by 2 % divide by 2
\global\voffset=-\dimen0 % and fix \voffset
}
% \almostship@ut either builds a box or does a \shipout of the
% new box plus the old \leftb@x.
\def\almostship@ut#1{% % new \shipout
\if L\l@r% % left page
\global\setbox\l@ftp@ge=#1 % save in box
\global\let\l@r=R % set flag
\message{[\the\pageno]}% % page number
\else % right page
\shipout\vbox{\LandscapeSpecial% % \special hack
\hbox to \twinhsize{\box\l@ftp@ge\hfil#1}}%% text
\global\let\l@r=L % reset flag
\fi}
%-----------------------------------------------------------------------
\catcode`@=12
% >>> EOF TXSdcol.tex <<<