diff options
author | Karl Berry <karl@freefriends.org> | 2010-05-17 16:06:35 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2010-05-17 16:06:35 +0000 |
commit | 326646bc9c462610b33d3387deb586d5dd2de9f3 (patch) | |
tree | 6844105505634474cf874ef4a56b6bcbe9dd47d1 /Master/texmf-dist/tex/generic/2up | |
parent | 6edfc4f99ff37896e0f1b16146cd8b678cba6911 (diff) |
2up own pkg (15may10)
git-svn-id: svn://tug.org/texlive/trunk@18310 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/2up')
-rw-r--r-- | Master/texmf-dist/tex/generic/2up/2up.sty | 9 | ||||
-rw-r--r-- | Master/texmf-dist/tex/generic/2up/2up.tex | 363 |
2 files changed, 372 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/2up/2up.sty b/Master/texmf-dist/tex/generic/2up/2up.sty new file mode 100644 index 00000000000..15659c73981 --- /dev/null +++ b/Master/texmf-dist/tex/generic/2up/2up.sty @@ -0,0 +1,9 @@ +%% $Id: 2up.sty 318 2010-05-15 07:29:54Z herbert $ +\ProvidesPackage{2up}[2010/05/15 package wrapper for + 2up.tex (hv)] +\input{2up.tex} +\ProvidesFile{2up.tex} + [\filedate\space v\fileversion\space `2up' (tvz,hv)] +% +\endinput + diff --git a/Master/texmf-dist/tex/generic/2up/2up.tex b/Master/texmf-dist/tex/generic/2up/2up.tex new file mode 100644 index 00000000000..b1f064c0e2f --- /dev/null +++ b/Master/texmf-dist/tex/generic/2up/2up.tex @@ -0,0 +1,363 @@ +%% +%% $Id: 2up.tex 318 2010-05-15 07:29:54Z herbert $ +%% +%% COPYRIGHT 1992/2010, by Timothy Van Zandt, tvz@Princeton.EDU +%% COPYRIGHT 2010, by Herbert Voss, hvoss@tug.org +%% +%% Copyright: +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN archives +%% in directory macros/latex/base/lppl.txt. +%% +%% DESCRIPTION: +%% 2up.tex/2up.sty provides two-up printing for Generic TeX (e.g., +%% Plain, LaTeX, AmSTeX and AmS-LaTeX). It produces a standard dvi file, +%% and does not involve an additional dvi or PostScript filter. It has a +%% flexible interface for specifying paper size and layout. +%% +% +\def\fileversion{1.3} +\def\filedate{2010/05/15} +% +\csname TwoUpLoaded\endcsname +\let\TwoUpLoaded\endinput +% +\edef\TheAtCode{\the\catcode`\@} +\catcode`\@=11\relax +\message{\space\space v\fileversion\space\space \filedate\space\space <tvz>} +% +% Parameter registers: +\newdimen\@targetwidth +\newdimen\@targetheight +\newdimen\@sourcewidth +\newdimen\@sourceheight +\newdimen\pageseplength +\newdimen\pagesepwidth +\newdimen\pagesepoffset +\newif\if@sidebyside +\@sidebysidetrue +\newif\if@twosided +% +% Registers used by output routine. +\newif\if@leftpage +\@leftpagetrue +\newbox\@leftpage +\newbox\@rightpage +\newcount\@physicalpage +% +% Since pages are shipped out half as often: +\multiply\maxdeadcycles by 2 +% +% Registers used only for booklet layout: +\begingroup + \let\newcount\relax + \gdef\booklet@registers{% + \newcount\bookletpage + \bookletpage=0 + \newcount\leftpagenumber + \newcount\rightpagenumber + \multiply\maxdeadcycles by 20} +\endgroup +% +% A useful extension of the \magstep macro. +\def\magstepminus#1{% + \ifcase#1 \@m\or 833\or 694\or 579\or 482\or 401\fi\relax} +% +% \@targetwidth and \@targetheight are set to the *unmagnified* dimensions +% of the target page. \inv@targetmag is the inverse of the target +% magnification. +{\catcode`\p=12\catcode`\t=12\gdef\@@inv@@mag#1pt#2{\def#2{#1}}} +\def\target#1#2#3{% + \mag #1\relax + \@targetwidth=1000pt + \divide\@targetwidth by #1\relax + \expandafter\@@inv@@mag\the\@targetwidth\inv@targetmag + \@targetwidth=#2\relax + \@targetwidth=\inv@targetmag\@targetwidth + \@targetheight=#3\relax + \@targetheight=\inv@targetmag\@targetheight} +% +% Like \target, but for the source: +\def\source#1#2#3{% + \@sourcewidth=1000pt + \divide\@sourcewidth by #1\relax + \expandafter\@@inv@@mag\the\@sourcewidth\inv@sourcemag + \@sourcewidth=#2\relax + \@sourcewidth=\inv@sourcemag\@sourcewidth + \@sourceheight=#3\relax + \@sourceheight=\inv@sourcemag\@sourceheight} +% +% \targetlayout does a loop that reads the comma separated arguments. +% There can be no extraneous spaces. +\def\targetlayout#1{\process@targetlayout#1,stop,} +\def\process@targetlayout#1,{% + \expandafter\let\expandafter\next\csname target@#1\endcsname + \ifx\next\relax + \begingroup + \errhelp{Valid target layouts are "topbottom", "twosided", + "booklet", "Booklet" and "dvidvi".}% + \errmessage{`#1' is invalid 2up target layout - ignored.}% + \endgroup + \expandafter\process@targetlayout + \else + \next + \fi} +\def\target@stop{} +\def\target@booklet{% + \booklet@registers + \def\ship@@@leftpage{\save@booklet\@leftpage}% + \def\ship@@@rightpage{\save@booklet\@rightpage}% + \@leftpagefalse + \def\twoup@eject{\twoup@eject@booklet}% + \expandafter\process@targetlayout} +\def\target@Booklet{% + \def\booklet@@loop{\Booklet@@loop}% + \target@booklet} +\def\target@twosided{% + \@twosidedtrue + \expandafter\process@targetlayout} +\def\target@topbottom{% + \def\make@@halfpage{\make@@halftopbottom}% + \def\make@fullpage{\make@fulltopbottom}% + \@sidebysidefalse + \expandafter\process@targetlayout} +\def\target@dvidvi{% + \def\ship@@@leftpage{\ship@dvidvi\@leftpage}% + \def\ship@@@rightpage{\ship@dvidvi\@rightpage}% + \expandafter\process@targetlayout} +% +% TeX's \shipout primitive is saved as \&normal@shipout, and then \shipout +% is defined to save each page to \@leftpage or \@rightpage and to print out +% every two. With the twosided layout, filler pages are added when needed. +\expandafter\let\csname &normal@shipout\endcsname\shipout +\def\shipout{% + \if@leftpage + \global\@leftpagefalse + \def\next{\afterassignment\ship@leftpage\global\setbox\@leftpage=}% + \if@twosided + \ifodd\count\z@ + \global\setbox\@leftpage=\hbox{}% + \make@@halfpage\@leftpage\ship@@@leftpage + \def\next{\shipout}% + \fi + \fi + \else + \global\@leftpagetrue + \def\next{\afterassignment\ship@rightpage\global\setbox\@rightpage=}% + \if@twosided + \ifodd\count\z@ + \else + \global\setbox\@rightpage=\hbox{}% + \make@@halfpage\@rightpage\ship@@@rightpage + \def\next{\shipout}% + \fi + \fi + \fi + \next} +% +% The job of \ship@leftpage and \ship@rightpage is to invoke \ship@@leftpage +% or \ship@@rightpage at the right time. \shipout is followed either +% (i) by an \hbox, \vbox or \vtop, in which case \ship@leftpage is invoked +% after the opening {. \@leftpage is void, and \ship@leftpage invokes +% \ship@@leftpage after the closing }, or +% (ii) by a \box or \copy, in which case \ship@leftpage is invoked after +% the full assignment. \@leftpage is not voide, and \ship@leftpage invokes +% \ship@@leftpage immediately. +\def\ship@leftpage{% + \ifvoid\@leftpage\aftergroup\ship@@leftpage\else\ship@@leftpage\fi} +\def\ship@rightpage{% + \ifvoid\@rightpage\aftergroup\ship@@rightpage\else\ship@@rightpage\fi} +% +% \ship@@leftpage/\ship@@rightpage take the output box, and first make it +% into a fully-size source page (with \make@halfpage) and then this is +% centered horizontally and vertically in half of a target page (with +% \make@@halfpage). Then they are shipped individually or together. +\def\ship@@leftpage{\make@halfpage\@leftpage\ship@@@leftpage} +\def\ship@@rightpage{\make@halfpage\@rightpage\ship@@@rightpage} +\def\make@halfpage#1{% + \dp#1=\z@ + \setbox#1=\vbox to\@sourceheight{% + \vskip \inv@sourcemag in + \vskip \voffset + \hbox to\@sourcewidth{\hskip\inv@sourcemag in\hskip\hoffset\box#1\hss}% + \vss}% + \make@@halfpage#1} +% +% The definition of \make@@halfpage depends on the target layout. +\def\make@@halfsidebyside#1{% + \global\setbox#1=\vbox to\@targetheight{\vss + \hbox to.5\@targetwidth{\hss\box#1\hss}\vss}} +\def\make@@halftopbottom#1{% + \global\setbox#1=\vbox to.5\@targetheight{\vss + \hbox to\@targetwidth{\hss\box#1\hss}\vss}} +\def\make@@halfpage{\make@@halfsidebyside} +% +% The pages are generaly shipped in pairs: +\def\ship@twoup{% + \begingroup + \voffset=-\inv@targetmag in + \hoffset=\voffset + \global\advance\@physicalpage by 1 + \count\z@=\@physicalpage + \csname &normal@shipout\endcsname\make@fullpage + \endgroup} +\let\ship@@@leftpage\relax +\def\ship@@@rightpage{\ship@twoup} +% +% The definition of \make@fullpage depends on the layout: +\def\make@fullsidebyside{% + \hbox{\box\@leftpage\pagesep@sidebyside\box\@rightpage}} +\def\make@fulltopbottom{% + \vbox{\offinterlineskip\box\@leftpage\pagesep@topbottom\box\@rightpage}} +\def\make@fullpage{\make@fullsidebyside} +% +% A vertical or horizontal rule can be inserted. These can be redefined +% for other tricks: +\def\pagesep@sidebyside{% + \begingroup + \advance\pageseplength by \pagesepoffset + \pagesepwidth=\inv@targetmag\pagesepwidth + \kern -.5\pagesepwidth + \vrule height \inv@targetmag\pageseplength + depth -\inv@targetmag\pagesepoffset + width \pagesepwidth + \kern -.5\pagesepwidth + \endgroup} +\def\pagesep@topbottom{% + \begingroup + \pagesepwidth=\inv@targetmag\pagesepwidth + \vskip -.5\pagesepwidth + \moveright\inv@targetmag\pagesepoffset\hbox{% + \vrule height\pagesepwidth width\inv@targetmag\pageseplength}% + \vskip -.5\pagesepwidth + \endgroup} +% +% With the dvidvi layout, the pages are shipped individually: +\def\ship@dvidvi#1{% + \begingroup + \voffset=-\inv@targetmag in + \hoffset=\voffset + \csname &normal@shipout\endcsname\box#1% + \endgroup} +% +% With the booklet or Booklet layout, the pages are saved rather than +% shipped. +\begingroup +\let\newbox\relax +\gdef\save@booklet#1{% + \begingroup + \globaldefs=1 + \advance\bookletpage by 1 + \expandafter\newbox\csname bookletbox\the\bookletpage\endcsname + \expandafter\setbox\csname bookletbox\the\bookletpage\endcsname\box#1% + \endgroup} +\endgroup +% +% The pages are then printed at the end with the following macros: +\def\make@bookletpage#1{% + \setbox\ifodd#1\@rightpage\else\@leftpage\fi=% + \expandafter\box\csname bookletbox\the#1\endcsname} +\def\booklet@loop{% + \count\z@\rightpagenumber + \make@bookletpage\leftpagenumber + \make@bookletpage\rightpagenumber + \ship@twoup + \booklet@@loop} +\def\booklet@@loop{% + \advance\rightpagenumber by 2 + \advance\leftpagenumber by -2 + \ifnum\leftpagenumber<1\else\expandafter\booklet@loop\fi} +\def\Booklet@@loop{% + \advance\rightpagenumber by 1 + \advance\leftpagenumber by -1 + \ifnum\leftpagenumber<\rightpagenumber\else\expandafter\booklet@loop\fi} +% +% This one is easy: +\def\twoupemptypage{\shipout\hbox{}} +% +% This clears a whole target page if there is a saved left page. Note that +% this does not invoke the output routine; i.e., it is not like \clearpage +% or \supereject. See \twoupclearpage and \twoupeject below. +\def\twoup@eject{% + \if@leftpage\else + \global\setbox\@rightpage\hbox{}% + \make@@halfpage\@rightpage\ship@@@rightpage + \global\@leftpagetrue + \fi} +% +% This is the definition of \twoup@eject with the booklet option: +\def\twoup@eject@booklet{% + \leftpagenumber\bookletpage + \advance\leftpagenumber by 3 + \divide\leftpagenumber by 4 + \multiply\leftpagenumber by 4 + \rightpagenumber=1 + \ifnum\leftpagenumber>\bookletpage + \setbox\@leftpage\hbox{}% + \make@@halfpage\@leftpage + \loop + \setbox\@rightpage\copy\@leftpage + \save@booklet\@rightpage + \ifnum\leftpagenumber>\bookletpage + \repeat + \fi + \booklet@loop} +% +% This modification is needed for \LaTeX in order to get the last page +% printed out if the final page is a left page (the catcode business is +% because \enddocument is \let to \bye in amstex): +\begingroup +\expandafter\ifx\csname @latexerr\endcsname\relax + \catcode`\>=14\else\catcode`\>=9\fi\relax +>>\gdef\twoupclearpage{\clearpage\twoup@eject} +>>\expandafter\@temptokena\expandafter{\enddocument} +>>\xdef\enddocument{\noexpand\twoupclearpage\the\@temptokena} +\endgroup +% +% For most other macro packages we could just leave be and all pages would +% always be printed because of the way the \end primitive works (except that +% TeX will go bonkers with the booklet layout). However, +% sometimes a blank filler page would be printed *with* headings. We prefer +% the filler page to be truly blank. To achieve this, we hack the definition +% of \end. This may cause problems with some macros. +\expandafter\ifx\csname @latexerr\endcsname\relax + \let\twoup@@@end\end + \def\end{\twoup@eject\twoup@@@end} + \def\twoupeject{\par\vfil\supereject\twoup@eject} +\fi +% +% This is one workaround for the page cross-references problem +\def\TwoupWrites{% + \let\TwoupSaved@write\write + \let\TwoupSaved@read\read + \let\TwoupSaved@openout\openout + \let\TwoupSaved@closeout\closeout + \def\write{\TwoupSaved@write-1{}\immediate\TwoupSaved@write}% + \def\read{\TwoupSaved@write-1{}\immediate\TwoupSaved@read}% + \def\openout{\TwoupSaved@write-1{}\immediate\TwoupSaved@openout}% + \def\closeout{\TwoupSaved@write-1{}\immediate\TwoupSaved@closeout}% + \let\TwoupWrites\relax} +% +% Defaults: +\def\twouparticle{% + \target{\magstepminus1}{11in}{8.5in}% + \source{\magstep0}{8.5in}{11in}} +\def\twoupplain{% + \target{\magstepminus2}{11in}{8.5in}% + \source{\magstep0}{8.5in}{11in}} +\def\twouplegaltarget{% + \target{\magstepminus1}{14in}{8.5in}% + \source{\magstep0}{8.5in}{11in}}% +\def\twouplandscape{% + \target{\magstepminus2}{8.5in}{11in}% + \source{\magstep0}{11in}{8.5in}% + \targetlayout{topbottom}} +\expandafter\ifx\csname @latexerr\endcsname\relax + \twoupplain\else\twouparticle\fi +\pagesepwidth 0pt +\pageseplength 6.5in +\pagesepoffset 1in +% +\expandafter\catcode`\@=\TheAtCode\relax +\endinput +%% END 2up.tex/2up.sty |