summaryrefslogtreecommitdiff
path: root/macros/plain/formats/texsis/styles/twin.txs
diff options
context:
space:
mode:
Diffstat (limited to 'macros/plain/formats/texsis/styles/twin.txs')
-rw-r--r--macros/plain/formats/texsis/styles/twin.txs121
1 files changed, 121 insertions, 0 deletions
diff --git a/macros/plain/formats/texsis/styles/twin.txs b/macros/plain/formats/texsis/styles/twin.txs
new file mode 100644
index 0000000000..d99abd1d67
--- /dev/null
+++ b/macros/plain/formats/texsis/styles/twin.txs
@@ -0,0 +1,121 @@
+%% file: twin.txs (TeXsis version 2.16)
+% $Revision: 16.0 $ : $Date: 1993/07/26 22:59:46 $ : $Author: myers $
+%======================================================================*
+% TWINOUT -- two pages side by side on one piece of paper
+%
+% \twinout redefines TeX's \output routine to put two pages side-by-side
+% on one piece of paper, in landscape format. By default the height/width
+% ratio of \vsize to \hsize is preserved, unless this would make the
+% two pages overlap. In that case the new \hsize is adjusted to give
+% a "reasonable" gutter between the two pages. (For example, the first
+% method works for A4 paper, but fails for U.S. letter size, so then the
+% second method is used.)
+%
+% In some cases the defaults will not give you what you want.
+% If you don't like the way that \twinout sets the sizes of the pages
+% you can adjust them to your liking AFTER you have invoked \twinout.
+% \hsize is the width of an individual page, \vsize is the height of
+% either page, and \twinhsize is the width of both pages across the
+% length of the paper (the default is the \vsize in effect before you
+% invoked \twinout). The \hoffset and \voffset can also be adjusted.
+% The default is to set \hoffset=-0.10in, which is a reasonable place to
+% start; \voffset is unchanged.
+%
+% Typestyles are NOT changed, you have to do that yourself.
+%
+% An example showing both page size and typestyle selection is:
+%
+% \twinout
+% \twinhsize=9in \vsize=6.95in \hsize=4.36in \hoffset=-0.5in
+% \tenpoint
+%
+% These macros are patterned after similar macros in Harvmac by
+% Paul Ginsparg, as well as the plain.tex \output routines, but this
+% is a total rewrite by Eric Myers <myers@lifshitz.ph.utexas.edu>.
+%
+% Dependencies: \LandscapeSpecial should be defined in TXSsite.tex, but
+% you can make your own definition before twin.txs is read in, or you
+% can do without it and give dvips the "-t landscape" flag. Other than
+% worrying about that, this can be used by itself with plain.tex.
+%
+% This file is a part of TeXsis, a TeX macro package for Physicists
+% (C) copyright 1993 by Eric Myers and Frank Paige
+%======================================================================*
+\message{- two pages on one}
+\catcode`@=11 % @ is a letter here to hide the inner workings
+
+\newbox\@leftpage % box to hold left page while building right page
+\newdimen\twinhsize % width of both pages together across the page
+
+
+% \LandscapeSpecial is the \special command that puts your laser printer
+% in "landscape" mode, i.e. printing sideways. If it is not already
+% defined (in TeXsis this is done in TXSsite.tex) then the default
+% is for Tom Rokicki's dvips.
+
+\ifx\undefined\LandscapeSpecial % is there no definition? then use
+ \def\LandscapeSpecial{\special{papersize=11in,8.5in}}% dvips version
+\fi
+
+
+% \twinout just sets up the column flag (to start in Left column),
+% sets the new \hsize and \vsize and changes \output.
+
+\def\twinout{% change \output to get two pages on one
+ \global\let\@LR=L % begin in left column
+ \twinsize % set paper size to default
+ \output={\twinoutput}} % redefine \output
+
+
+% \twinsize sets the page size for twin page output from the
+% current settings of \vsize and \hsize, preserving their ratio.
+% If h and v are the original horizontal and vertical sizes then the
+% width of a new page is w = h*(h/v). [Since TeX stores dimensions
+% in scaled points (65536sp=1pt) we have to be careful to rescale
+% from sp to pt to avoid arithmetic overflow.] If the columns would
+% overlap then a smaller \hsize is chosen such that there is a
+% reasonable gutter between the two pages.
+
+\def\twinsize{% set page sizes for twin page output
+ \twinhsize=\vsize % two pages across one rotated page
+ \vsize=\hsize % height of page is width of paper
+ \hoffset=-0.1in % also adjust offset a bit
+% now compute default \hsize from \hsize/\vsize ratio
+ \divide\hsize by 65536 % convert sp to pt for calculations
+ \multiply\hsize by \hsize % h^2 in points
+ \dimen@=\twinhsize \divide \dimen@ by 65536 % v in pt from sp
+ \divide\hsize by \dimen@ % w = h * (h/v)
+ \multiply\hsize by 65536 % convert pt back to sp
+% also compute candidate \hsize based on \twinhsize with a reasonable gutter
+ \dimen@=-\vsize \divide\dimen@ by 13 % gutter width computed from height
+ \advance\dimen@ by \twinhsize % width of page minus gutter
+ \divide\dimen@ by 2 % divide by 2 to get column width
+ \ifdim\dimen@<\hsize \hsize=\dimen@\fi} % choose smaller \hsize
+
+
+% \twinoutput builds the page as plain.tex does, but with a modified
+% \shipout to collect the left page first, then put both pages out together
+
+\def\twinoutput{% modified version of \plainoutput for two-on-one printing
+ \twinshipout{\vbox{\makeheadline\pagebody\makefootline}}%
+ \advancepageno
+ \ifnum\outputpenalty>-\@MM \else\dosupereject\fi}
+
+
+% \twinshipout takes a \vbox, as \shipout does, but for the left page
+% it saves it temporarily. When the right page is given it puts the two
+% side by side and ships them out together.
+
+\def\twinshipout#1{% modified version of \shipout for two-on-one printing
+ \if L\@LR % left page?
+ \global\setbox\@leftpage=#1 % save the box for left page
+ \message{[\the\pageno]}% % fake [page number] in log
+ \global\let\@LR=R % set flag for next (right) page
+ \else % right page?
+ \shipout\vbox{\LandscapeSpecial % force landscape on every page
+ \hbox to \twinhsize{\box\@leftpage\hfil{#1}}}% 2 pages side by side
+ \global\let\@LR=L % set flag back to left page
+ \fi}
+
+\catcode`@=12 % @ is no longer a letter
+% >>> EOF twinout.txs <<<