summaryrefslogtreecommitdiff
path: root/obsolete/dviware/dvi2xx/2up.sty
diff options
context:
space:
mode:
Diffstat (limited to 'obsolete/dviware/dvi2xx/2up.sty')
-rw-r--r--obsolete/dviware/dvi2xx/2up.sty428
1 files changed, 428 insertions, 0 deletions
diff --git a/obsolete/dviware/dvi2xx/2up.sty b/obsolete/dviware/dvi2xx/2up.sty
new file mode 100644
index 0000000000..adb81628b9
--- /dev/null
+++ b/obsolete/dviware/dvi2xx/2up.sty
@@ -0,0 +1,428 @@
+%Article: 10393 of comp.text.tex
+%From: tvz@zandtwerk.Princeton.EDU (Timothy Van Zandt)
+%Newsgroups: comp.text.tex
+%Subject: Here is a 2up.sty for LaTeX.
+%Message-ID: <14650@princeton.Princeton.EDU>
+%Date: 27 Sep 91 19:27:46 GMT
+%Organization: Princeton University, Princeton NJ
+%
+%I seem to remember recent inquiries here or in comp.lang.postscript about
+%printing TeX documents two-up. This can be achieved using a PostScript
+%filter and/or a dvidvi converter.
+%
+%Here is another solution. It is a document style option for LaTeX which
+%makes a few modifications to LaTeX's output routine. It does not require
+%a PostScript output device.
+%
+%
+%---------------------------BEGIN 2up.sty -----------------------------
+\def\fileversion{v0.9}
+\def\filedate{91/09/26}
+%%
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \%% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+%% Document style option `2up', for use with LaTeX v2.09
+%% By Timothy Van Zandt, tvz@Princeton.EDU
+%%
+%% It is recommended that this documentation be kept with the style file.
+%%
+%% *******************************************************************
+%% ** DESCRIPTION **
+%% *******************************************************************
+%%
+%% This is style prints a document two-up. It does this by making a few
+%% simple changes to LaTeX's output routine. It does not involve a dvidvi
+%% converter or PostScript code. It produces a standard dvi file.
+%%
+%% As long as you have or can generate the needed font bitmaps (e.g., pk
+%% files), fonts will not be scaled and output quality will be high.
+%% Non-standard font sizes are needed if the document is reduced.
+%% This is often necessary so that the two pages fit on the sheet of paper.
+%%
+%% If you have used `true' dimensions in your document, you cannot reduce
+%% it and you may find it impossible to fit the two pages on a single one.
+%% `true' dimensions are a no-no if you want to change the magnification
+%% of a document.
+%%
+%% Otherwise, this style option should be compatible with any LaTeX styles
+%% or options that do not change LaTeX's \@outputpage and \enddocument,
+%% macros and that do not modify the commands and parameters that these
+%% use in a non-standard way.
+%%
+%% In this documentation, the "source" layout is the layout of your document
+%% the way it is usually printed. The "target" layout is the layout when it
+%% is printed two-up.
+%%
+%%
+%% *******************************************************************
+%% ** PARAMETERS **
+%% *******************************************************************
+%%
+%% After inputing this file, you must set the following parameters
+%% *** ONCE AND ONLY ONCE, AND IN THIS ORDER. ***
+%%
+%%
+%% 1. Target magnification. Use the command
+%%
+%% \targetmag{<num>}
+%%
+%% where
+%%
+%% a. <num> is integer nearest to 1000 times the magnification, or
+%% b. <num> is \magstep<n> for a magnification of 1.2^n (n=0,...,5), or
+%% c. <num> is \magstepminus<n> for a magnification of 1.2^{-n} (n=0,...,5).
+%%
+%% To minimize the number of non-standard font magnifications, use (b) or (c),
+%% and choose the magnification closest to 1 such that the source pages
+%% fit properly in the target output.
+%%
+%%
+%% 2. Source magnification. Use the command
+%%
+%% \sourcemag{<num>}
+%%
+%% where <num> is as in (1), but for the source output.
+%%
+%%
+%% 3. Target paper width and height. Use:
+%%
+%% \targetpaperwidth{<width>true<unit>}
+%% \targetpaperheight{<height>true<unit>}
+%%
+%% where <unit> is cm, in, pt, etc., and <width> and <height> are the
+%% true width and height of the paper, when looking at the target output
+%% right side up.
+%%
+%%
+%% 4. Source paper width and height. Use:
+%%
+%% \sourcepaperwidth{<width><unit>}
+%% \sourcepaperheight{<height><unit>}
+%%
+%% where <unit>, <width> and <height> are as in (2), but for the source
+%% output.
+%%
+%%
+%% 5. Target layout. Use
+%%
+%% \targetlayout{<layout>}
+%%
+%% where <layout> is "topbottom" if the two source pages are to be printed
+%% one on top of the other, or "sidebyside" if the two source pages are
+%% to be printed side by side. With the sidebyside layout and LaTeX's twoside
+%% option, odd pages always appear on the right and even pages appear on the
+%% left; blank pages are inserted if necessary.
+%%
+%%
+%%
+%% MAKE NO OTHER CHANGES TO YOUR DOCUMENT EXCEPT THE FOLLOWING:
+%%
+%% -- You have to see to it that the target output is printed with the
+%% correct orientation.
+%%
+%% -- You can use \emptytwouppage to insert a completely blank half page in
+%% the target, and \cleartwouppage to eject a complete target page. Ordinarily
+%% you do not need to use these commands.
+%%
+%%
+%% *******************************************************************
+%% ** DEFAULTS **
+%% *******************************************************************
+%%
+%% The following commands set the parameters for some common sources and
+%% targets. The definitions of these commands are also useful examples.
+%%
+%%
+%% I. \twouparticle.
+%%
+%% Source: A portrait document on 8.5x11 inch paper with the standard margins
+%% used in the article document style and without marginal notes.
+%%
+%% Target: A landscape document on the same size paper, with the source
+%% pages printed side by side.
+%%
+%% Definition:
+%%
+%% \targetmag{\magstepminus1}
+%% \sourcemag{\magstep0}
+%% \targetpaperwidth{11truein}
+%% \targetpaperheight{8.5truein}
+%% \sourcepaperwidth{8.5in}
+%% \sourcepaperheight{11in}
+%% \targetlayout{sidebyside}
+%%
+%% If you use narrower side margins than the default ones in the article
+%% document style, or if you use marginal notes, then you will need to
+%% to reduce the magnication to \magstepminus2 or lower or use
+%% \twouplegaltarget, defined below.
+%%
+%%
+%% II. \twouplegaltarget.
+%%
+%% Source: A portrait document on 8.5x11 inch paper with just about any
+%% margins and perhaps with marginal notes.
+%%
+%% Target: A landscape document on legal size paper (8.5x14 inches),
+%% with the source pages printed side by side.
+%%
+%% Definition:
+%%
+%% \targetmag{\magstepminus1}
+%% \sourcemag{\magstep0}
+%% \targetpaperwidth{14truein}
+%% \targetpaperheight{8.5truein}
+%% \sourcepaperwidth{8.5in}
+%% \sourcepaperheight{11in}
+%% \targetlayout{sidebyside}
+%%
+%%
+%% III. \twouplandscape.
+%%
+%% Source: A landscape document on 8.5x11 inch paper with just about any
+%% margins.
+%%
+%% Target: A portrait document on the same size paper, with the source pages
+%% stacked vertically.
+%%
+%% Definition:
+%%
+%% \targetmag{\magstepminus2}
+%% \sourcemag{\magstep0}
+%% \targetpaperwidth{8.5truein}
+%% \targetpaperheight{11truein}
+%% \sourcepaperwidth{11in}
+%% \sourcepaperheight{8.5in}
+%% \targetlayout{topbottom}
+%%
+%%
+%% *******************************************************************
+%% ** IMPLEMENTATION **
+%% *******************************************************************
+%%
+%%
+\typeout{Document style option: `2up' \fileversion \space\space <tvz>}
+%%
+%% Parameter registers:
+\newcount\@sourcemag
+\newdimen\@targetpaperwidth
+\newdimen\@targetpaperheight
+\newdimen\@sourcepagewidth
+\newdimen\@sourcepageheight
+\newif\if@sidebyside
+\@sidebysidetrue
+%%
+%% Registers used by output routing.
+\newif\if@firstpage
+\@firstpagetrue
+\newbox\@leftpage
+\newbox\@rightpage
+%%
+\def\targetmag#1{\mag #1}
+\def\sourcemag#1{\@sourcemag #1}
+\def\targetpaperwidth#1{\@targetpaperwidth #1}
+\def\targetpaperheight#1{\@targetpaperheight #1}
+%%
+%% \@sourcepagewidth and |\@sourcepageheight should be the unmagnified
+%% dimensions of the source page when measured without TeX's 1 inch margins.
+\def\sourcepaperwidth#1{%
+ \@sourcepagewidth #1
+ \advance\@sourcepagewidth by -2in
+ \divide\@sourcepagewidth by \@sourcemag
+ \multiply\@sourcepagewidth by 1000\relax}
+\def\sourcepaperheight#1{%
+ \@sourcepageheight #1
+ \advance\@sourcepageheight by -2in
+ \divide\@sourcepageheight by \@sourcemag
+ \multiply\@sourcepageheight by 1000\relax}
+\def\targetlayout#1{%
+ \def\@tempa{sidebyside}%
+ \def\@tempb{topbottom}%
+ \def\@tempc{#1}
+ \ifx\@tempa\@tempc
+ \@sidebysidetrue
+ \else
+ \ifx\@tempb\@tempc
+ \@sidebysidefalse
+ \else
+ \@latexerr{Valid target layouts are "sidebyside" and "topbottom"}\@eha
+ \fi
+ \fi}
+%%
+\def\magstepminus#1{%
+ \ifcase#1 \@m\or 833\or 694\or 579\or 482\or 401\fi\relax}
+\def\twouparticle{%
+ \targetmag{\magstepminus1}%
+ \sourcemag{\magstep0}%
+ \targetpaperwidth{11truein}%
+ \targetpaperheight{8.5truein}%
+ \sourcepaperwidth{8.5in}%
+ \sourcepaperheight{11in}%
+ \targetlayout{sidebyside}}
+\def\twouplegaltarget{%
+ \targetmag{\magstepminus1}%
+ \sourcemag{\magstep0}%
+ \targetpaperwidth{14truein}%
+ \targetpaperheight{8.5truein}%
+ \sourcepaperwidth{8.5in}%
+ \sourcepaperheight{11in}%
+ \targetlayout{sidebyside}}
+\def\twouplandscape{%
+ \targetmag{\magstepminus2}%
+ \sourcemag{\magstep0}%
+ \targetpaperwidth{8.5truein}%
+ \targetpaperheight{11truein}%
+ \sourcepaperwidth{11in}%
+ \sourcepaperheight{8.5in}%
+ \targetlayout{topbottom}}
+%%
+%% LaTeX's output page routine is modified so that it saves each page and
+%% prints out every two. Each page is centered in a half-page
+\def\@outputpage{%
+ \if@firstpage
+ \global\@firstpagefalse
+ \def\next{%
+ \@makepagebox\@leftpage
+ \stepcounter{page}}%
+ \if@sidebyside
+ \if@twoside
+ \ifodd\count\z@
+ \def\next{%
+ \@makeemptypage\@leftpage
+ \@outputpage}%
+ \fi
+ \fi
+ \fi
+ \else
+ \global\@firstpagetrue
+ \def\next{%
+ \@makepagebox\@rightpage
+ \@shiptwouppage
+ \stepcounter{page}}
+ \if@sidebyside
+ \if@twoside
+ \ifodd\count\z@
+ \else
+ \def\next{%
+ \@makeemptypage\@rightpage
+ \@shiptwouppage
+ \@outputpage}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \next}
+%%
+%% This is the \shipout routine.
+\def\@shiptwouppage{
+ \if@sidebyside
+ \shipout\vbox{%
+ \vskip -1truein
+ \hbox{\hskip -1truein\box\@leftpage\box\@rightpage}}
+ \else
+ \shipout\hbox{%
+ \hskip -1truein
+ \vbox{\offinterlineskip\vskip -1truein \box\@leftpage\box\@rightpage}}
+ \fi}
+%%
+%% \@makepagebox is just like \@outputpage in \LaTeX's standard output
+%% routine, except that it saves the page in a box instead of shipping it out.
+\def\@makepagebox#1{%
+ \begingroup\catcode`\ =10
+ \let\-\@dischyph \let\'\@acci \let\`\@accii \let\=\@acciii
+ \if@specialpage
+ \global\@specialpagefalse\@nameuse{ps@\@specialstyle}%
+ \fi
+ \if@twoside
+ \ifodd\count\z@
+ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
+ \let\@themargin\evensidemargin
+ \else
+ \let\@thehead\@evenhead \let\@thefoot\@evenfoot
+ \let\@themargin\oddsidemargin
+ \fi
+ \else
+ \fi
+ \setbox#1=\vbox to \@sourcepageheight{%
+ \normalsize \baselineskip\z@ \lineskip\z@
+ \let\par\@@par
+ \vskip \topmargin
+ \hbox to \@sourcepagewidth{%
+ \hskip \@themargin
+ \vbox{%
+ \setbox\@tempboxa=\vbox to\headheight{%
+ \vfil
+ \hbox to\textwidth{%
+ \let\label\@gobble \let\index\@gobble \@thehead}}%
+ \dp\@tempboxa\z@
+ \box\@tempboxa
+ \vskip \headsep
+ \box\@outputbox
+ \baselineskip\footskip
+ \hbox to\textwidth{%
+ \let\label\@gobble \let\index\@gobble \@thefoot}}
+ \hss}
+ \vss}%
+ \if@sidebyside
+ \global\setbox#1=\vbox to \@targetpaperheight{%
+ \vss
+ \hbox to .5\@targetpaperwidth{\hss\box#1\hss}
+ \vss}
+ \else
+ \global\setbox#1=\vbox to .5\@targetpaperheight{%
+ \vss
+ \hbox to \@targetpaperwidth{\hss\box#1\hss}
+ \vss}
+ \fi
+ \global\@colht\textheight
+ \endgroup
+ \let\firstmark\botmark}
+%%
+%% This is used to generate an empty page.
+\def\@makeemptypage#1{%
+ \if@sidebyside
+ \global\setbox#1=\vbox to \@targetpaperheight{\vss
+ \hbox to .5\@targetpaperwidth{\hss}}
+ \else
+ \global\setbox#1=\vbox to .5\@targetpaperheight{\vss
+ \hbox to .5\@targetpaperwidth{\hss\box#1\hss}}
+ \fi}
+%%
+%% Eject a page, even when there is only one source page on it.
+\def\cleartwouppage{%
+ \clearpage
+ \if@firstpage
+ \else
+ \twoupemptypage
+ \fi}
+%%
+\def\twoupemptypage{%
+ \clearpage
+ {\let\@makepagebox\@makeemptypage
+ \@outputpage}
+ \addtocounter{page}{-1}}
+%%
+%% This is LaTeX's standard \enddocument, except that we change \clearpage
+%% to \cleartwouppage.
+\def\enddocument{\@checkend{document}\cleartwouppage\begingroup
+ \if@filesw \immediate\closeout\@mainaux
+ \def\global\@namedef##1##2{}\def\newlabel{\@testdef r}%
+ \def\bibcite{\@testdef b}\@tempswafalse \makeatletter\input \jobname.aux
+ \if@tempswa \@warning{Label(s) may have changed. Rerun to get
+ cross-references right}\fi\fi\endgroup\deadcycles\z@\@@end}
+%%
+\endinput
+