% \iffalse meta-comment % booklet.dtx % Author: Peter Wilson (Herries Press) % Maintainer: Will Robertson (will dot robertson at latex-project dot org) % Copyright 2000--2005 Peter R. Wilson % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either % version 1.3c of this license or (at your option) any % later version: % % This work has the LPPL maintenance status "maintained". % The Current Maintainer of this work is Will Robertson. % % This work consists of the files listed in the README file. % % %<*driver> \documentclass[twoside]{ltxdoc} \usepackage{url} \usepackage[draft=false, plainpages=false, pdfpagelabels, bookmarksnumbered, hyperindex=false ]{hyperref} \providecommand{\phantomsection}{} \makeatletter \@mparswitchfalse \makeatother \EnableCrossrefs \CodelineIndex %%\OnlyDescription \renewcommand{\MakeUppercase}[1]{#1} \pagestyle{headings} \setcounter{StandardModuleDepth}{1} \begin{document} \DocInput{booklet.dtx} \end{document} % % % \fi % % \CheckSum{629} % % \DoNotIndex{\',\.,\@M,\@@input,\@addtoreset,\@arabic,\@badmath} % \DoNotIndex{\@centercr,\@cite} % \DoNotIndex{\@dotsep,\@empty,\@float,\@gobble,\@gobbletwo,\@ignoretrue} % \DoNotIndex{\@input,\@ixpt,\@m} % \DoNotIndex{\@minus,\@mkboth,\@ne,\@nil,\@nomath,\@plus,\@set@topoint} % \DoNotIndex{\@tempboxa,\@tempcnta,\@tempdima,\@tempdimb} % \DoNotIndex{\@tempswafalse,\@tempswatrue,\@viipt,\@viiipt,\@vipt} % \DoNotIndex{\@vpt,\@warning,\@xiipt,\@xipt,\@xivpt,\@xpt,\@xviipt} % \DoNotIndex{\@xxpt,\@xxvpt,\\,\ ,\addpenalty,\addtolength,\addvspace} % \DoNotIndex{\advance,\Alph,\alph} % \DoNotIndex{\arabic,\ast,\begin,\begingroup,\bfseries,\bgroup,\box} % \DoNotIndex{\bullet} % \DoNotIndex{\cdot,\cite,\CodelineIndex,\cr,\day,\DeclareOption} % \DoNotIndex{\def,\DisableCrossrefs,\divide,\DocInput,\documentclass} % \DoNotIndex{\DoNotIndex,\egroup,\ifdim,\else,\fi,\em,\endtrivlist} % \DoNotIndex{\EnableCrossrefs,\end,\end@dblfloat,\end@float,\endgroup} % \DoNotIndex{\endlist,\everycr,\everypar,\ExecuteOptions,\expandafter} % \DoNotIndex{\fbox} % \DoNotIndex{\filedate,\filename,\fileversion,\fontsize,\framebox,\gdef} % \DoNotIndex{\global,\halign,\hangindent,\hbox,\hfil,\hfill,\hrule} % \DoNotIndex{\hsize,\hskip,\hspace,\hss,\if@tempswa,\ifcase,\or,\fi,\fi} % \DoNotIndex{\ifhmode,\ifvmode,\ifnum,\iftrue,\ifx,\fi,\fi,\fi,\fi,\fi} % \DoNotIndex{\input} % \DoNotIndex{\jobname,\kern,\leavevmode,\let,\leftmark} % \DoNotIndex{\list,\llap,\long,\m@ne,\m@th,\mark,\markboth,\markright} % \DoNotIndex{\month,\newcommand,\newcounter,\newenvironment} % \DoNotIndex{\NeedsTeXFormat,\newdimen} % \DoNotIndex{\newlength,\newpage,\nobreak,\noindent,\null,\number} % \DoNotIndex{\numberline,\OldMakeindex,\OnlyDescription,\p@} % \DoNotIndex{\pagestyle,\par,\paragraph,\paragraphmark,\parfillskip} % \DoNotIndex{\penalty,\PrintChanges,\PrintIndex,\ProcessOptions} % \DoNotIndex{\protect,\ProvidesClass,\raggedbottom,\raggedright} % \DoNotIndex{\refstepcounter,\relax,\renewcommand,\reset@font} % \DoNotIndex{\rightmargin,\rightmark,\rightskip,\rlap,\rmfamily,\roman} % \DoNotIndex{\roman,\secdef,\selectfont,\setbox,\setcounter,\setlength} % \DoNotIndex{\settowidth,\sfcode,\skip,\sloppy,\slshape,\space} % \DoNotIndex{\symbol,\the,\trivlist,\typeout,\tw@,\undefined,\uppercase} % \DoNotIndex{\usecounter,\usefont,\usepackage,\vfil,\vfill,\viiipt} % \DoNotIndex{\viipt,\vipt,\vskip,\vspace} % \DoNotIndex{\wd,\xiipt,\year,\z@} % % \changes{v0.5}{2001/08/11}{First public release} % \changes{v0.6}{2001/08/26}{Reduced use of boxes} % \changes{v0.6a}{2002/10/05}{Improved documentation, no technical changes} % \changes{v0.6b}{2004/04/16}{Changed license and contact details} % \changes{v0.7}{2005/03/23}{Improved print setup for memoir} % \changes{v0.7a}{2005/06/01}{Additional documentation} % \changes{v0.7b}{2009/09/02}{New maintainer} % % \def\dtxfile{booklet.dtx} % \def\fileversion{v0.5} \def\filedate{2001/08/11} % \def\fileversion{v0.6} \def\filedate{2001/08/26} % \def\fileversion{v0.6a} \def\filedate{2002/10/05} % \def\fileversion{v0.6b} \def\filedate{2004/04/16} % \def\fileversion{v0.7} \def\filedate{2005/03/23} % \def\fileversion{v0.7a} \def\filedate{2005/06/01} % \def\fileversion{v0.7b} \def\filedate{2009/09/02} % \newcommand*{\Lpack}[1]{\textsf {#1}} ^^A typeset a package % \newcommand*{\Lopt}[1]{\textsf {#1}} ^^A typeset an option % \newcommand*{\file}[1]{\texttt {#1}} ^^A typeset a file % \newcommand*{\Lcount}[1]{\textsl {\small#1}} ^^A typeset a counter % \newcommand*{\pstyle}[1]{\textsl {#1}} ^^A typeset a pagestyle % \newcommand*{\Lenv}[1]{\texttt {#1}} ^^A typeset an environment % % \title{Printing booklets with LaTeX\thanks{This % file (\texttt{\dtxfile}) has version number \fileversion, last revised % \filedate.}} % % \author{% % Author: Peter Wilson, Herries Press\\ % Maintainer: Will Robertson\\ % \texttt{will dot robertson at latex-project dot org} % } % \date{\filedate} % \maketitle % \begin{abstract} % The \Lpack{booklet} package provides some aid in printing % simple booklets or signatures for longer books. % % \end{abstract} % \tableofcontents % % % % \section{Introduction} % % In normal usage the \Lpack{booklet} package subverts LaTeX into % putting pairs of pages onto a single page. For example, the contents % of pairs of A4 % portrait pages can be rotated and printed as two A5 portrait % pages side by side on an A4 landscape page. % % In 1993 Timothy Van Zandt wrote the \Lpack{2up} generic macros % for printing more than one page on a physical sheet~\cite{2UP}; % his original code and documentation is in appendices~\ref{sec:2upcode} % and~\ref{sec:2updoc}. % The \Lpack{booklet} % package is a poorman's version of some of the \Lpack{2up} macros % specifically for (pdf)LaTeX. % % The \Lpack{2up} and \Lpack{booklet} packages cannot be used % simultaneously in one document. % % This manual is typeset according to the conventions of the % \LaTeX{} \textsc{docstrip} utility which enables the automatic % extraction of the \LaTeX{} macro source files~\cite{GOOSSENS94}. % % Section~\ref{sec:usc} describes the usage of the \Lpack{booklet} % package and % commented source code is in Section~\ref{sec:code}. Timothy Van Zandt's % original macros and documentation are supplied in the appendices. % % % % \section{The \Lpack{booklet} package} \label{sec:usc} % % The code provided by the \Lpack{booklet} package is meant to help % with some aspects of booklet printing. % % Basically, the pages of documents processed with the \Lpack{booklet} % package will be reordered and scaled so that they can be printed as % four pages per physical sheet of paper, two pages per side of the % sheet. The default expectation is that the original document is in % a portrait orientation and the pages are printed rotated onto a landscape % sheet. Folding the sheet in half will produce a half-sized document, again % with portrait orientation. % % Professionally printed books have many pages printed per sheet of (large) % paper, which is then folded and cut where necessary to produce a % \emph{signature} of several smaller sheets. Folding a sheet in % half produces a one sheet \emph{folio} signature with four pages. % Folding it in half again and cutting % along the original fold gives a two sheet \emph{quarto} signature % with eight pages. Folding in half again, % results in a four sheet \emph{octavo} signature with 16 pages, and so on % through \emph{16mo}, \emph{32mo}, to \emph{64mo} with six folds and 128 pages. % \emph{Octavo} is the most popular of these. % % Other folds can produce other signatures. For example a \emph{sexto}, % obtained by folding in half and then folding in thirds, is a three sheet % signature with 12 pages. % % The main differences between the \Lpack{2up} macros and the % \Lpack{booklet} package are: % \begin{itemize} % \item \Lpack{2up} is generic but \Lpack{booklet} can only be used % with (pdf)LaTeX. % \item \Lpack{2up} can be used for more than booklets % \item \Lpack{booklet} adds the notion of signatures and reduces the need for |\box|es. % \item \Lpack{booklet} adds means of automatically controlling % portrait/landscape printing. % \end{itemize} % % \subsection{Options} % % When the \Lopt{noprint} option is used the package is essentially vacuous. % That is, it behaves as though it had not been used at all, with the % exception that LaTeX will not hiccup at any of the package commands that % may be used in the document; these commands will also do nothing. % % The \Lopt{print} option must be used if you want the package to work % as advertised. The reasons for the \Lopt{print} and \Lopt{noprint} % options are explained later in Section~\ref{sec:usage}. % % The \Lpack{booklet} package can also take one option from each of % two groups. % % The first group of options specifies how many pages there should be % to a hypothetical signature. The options are: \Lopt{four}, \Lopt{eight}, % \Lopt{sixteen}, and \Lopt{thirtytwo}. TeX has to hold all the pages % for a signature before it outputs any of them, and TeX is memory limited. % % If you have a duplex printer you can print out the document double-sided % and then just fold the sheets forming each signature ready for binding. % If you don't have a duplex printer, then the sheets can be photocopied % (1-to-2 sided) ready for folding. % % The second group of options are for selecting one of the package's % predefined layouts. These options include: % \begin{itemize} % \item[\Lopt{twouparticle}] --- for portrait pages with wide margins % (similar to those in the standard LaTeX \Lpack{article}, \Lpack{book} % and \Lpack{report} classes) % and no marginal notes, to go on landscape sheets. % \item[\Lopt{largetypeblock}] --- for portrait pages with a larger % (wider and/or longer) typeblock % and/or marginal notes, to go on landscape sheets. % \item[\Lopt{1to1}] --- for portrait pages where the original is % designed to fit on half-sized paper, to go on landscape sheets. % \item[\Lopt{landscape}] --- for landscape pages to go onto % portrait sheets. Pairs of original landscape pages will be % printed at the top and bottom of a portrait page. % This option is called automatically if the % \Lopt{landscape} option is used for the document class. % % \end{itemize} % % The default options are \Lopt{noprint}, \Lopt{twouparticle} and % \Lopt{thirtytwo}. % % \subsection{Commands} % % The \emph{source} is the document as it would % be normally typeset by LaTeX (i.e., without using the \Lpack{booklet} % package). % % The \emph{target} is the desired document as it should % be printed % using the \Lpack{booklet} package. % % \DescribeMacro{\source} % The command |\source{|\meta{mag}|}{|\meta{width}|}{|\meta{height}|}| % specifies the source sheets, where % \meta{width} and \meta{height} are the width and height for the % pages of the orginal document (the document that LaTeX would process % without the \Lpack{booklet} package). The \meta{mag} argument is the % magnification factor. % % The default definition of |\source| is: \\ % |\source{\magstep0}{\paperwidth}{\paperheight}| \\ % which corresponds to a full size default page. % % \DescribeMacro{\target} % The command |\target{|\meta{mag}|}{|\meta{width}|}{|\meta{height}|}| % specifies the target sheets, where % \meta{width} and \meta{height} are the width and height for the % sheets that will be used for printing with the package. For % example, |\target{...}{11in}{8.5in}| would be typical for a % (portrait letterpaper) % source being put onto a (landscape) letterpaper target. % % \DescribeMacro{\magstepN} % \DescribeMacro{\magstepminusN} % The package puts two pages onto a single sheet. It often happens that % in order to do this the natural size of the text pages has to be changed, % via the \meta{mag} argument noted above. The macro |\magstepminusN|, % where $0 \leq N \leq 5$ is a shrinkage factor; similary, |\magstepN| % specifies a magnification factor. For example, the default |\target| % is specified as: \\ % |\target{\magstepminus1}{\paperheight}{\paperwidth}| \\ % whereas the target for the \Lopt{largetypeblock} option is: \\ % |\target{\magstepminus2}{\paperheight}{\paperwidth}| \\ % which shrinks the original pages more than the default |\target| does. % % The \Lpack{booklet} package uses the |\source| and |\target| % specifications to decide on how to scale and position the orginal % full size source pages onto half of a target sheet. % % Normally there is no need to change the default |\source| but it % may be useful sometimes to change the |\target|. For example, if the % text on source letterpages is very wide it could be useful to print % on legal paper instead. In this case |\target| can be defined as: \\ % |\target{\magstepminus2}{14in}{8.5in}| % % \DescribeMacro{\pagespersignature} % If none of the signature options are suitable, then % |\pagespersignature{|\meta{num}|}| may be used to specify \meta{num} % pages per signature. For example, if you wanted a \emph{sexto} signature % then use |\pagespersignature{12}|. % % \DescribeMacro{\ifprintoption} % The command |\ifprintoption| is set TRUE if the \Lopt{print} option % is used otherwise it is set FALSE. % % \DescribeMacro{\setdvipstargetpages} % If you are using LaTeX to generate a \file{.dvi} file the % |\setdvipstargetpages| macro sets up the correct target page sizes % in the \file{.dvi} file assuming that subsequent processing will be % via a program that understands \file{dvips} \cs{special} commands. % % \DescribeMacro{\setpdftargetpages} % If you are using pdfLaTeX to generate a \file{.pdf} file the % |\setpdftargetpages| macro sets up the correct target page sizes for % pdfLaTeX. % % \DescribeMacro{\pagesepwidth} % \DescribeMacro{\pageseplength} % \DescribeMacro{\pagesepoffset} % A line may be drawn between the output text pages. The length of % the line is |\pageseplength| (default 6.5in), and line starts a % distance |\pagesepoffset| from the bottom (side) of the printed sheet % (default 1in). The line thickness is specified by the length % |\pagesepwidth|, which is initially defined to be 0pt (i.e., the % line is normally invisible). To see a dividing line use |\setlength| % to change the value of |\pagesepwidth|; in LaTeX ruled lines normally % have a thickness of 0.4pt. % % \DescribeMacro{\twoupclearpage} % \DescribeMacro{\twoupemptypage} % The command |\twoupclearpage| outputs the current target page (like % LaTeX's |\newpage|). The command |\twoupemptypage| inserts a completely % empty page into the target. % % \DescribeMacro{\ifuselandscape} % \DescribeMacro{\ifprintoption} % The command |\ifuselandscape| is set TRUE if the \Lopt{landscape} option % is used otherwise it is set FALSE. % % \DescribeMacro{\checkforlandscape} % The macro |\checkforlandscape| evaluates the value of |\ifprintoption| % and the current value of |\ifuselandscape| and sets |\ifuselandscape| % to TRUE if the document % requires landscape printing (when either both the \Lopt{landscape} and % \Lopt{noprint} options are used, or when just the \Lopt{print} % option is called for), % or to FALSE if the document should be printed in the normal portrait % orientation (when either both the \Lopt{landscape} and \Lopt{print} % options are used, or when just the \Lopt{noprint} option is used without % \Lopt{landscape}). % % Note that as |\checkforlandscape| may change the value of % |\ifuselandscape|, the command is only guaranteed when |\ifuselandscape| % accurately indicates the presence or absence of the \Lopt{landscape} % option. % % In version 0.7 of the package the macro \cs{setdvipstargetpages} was % introduced and the macro \cs{setpdftargetpages} was modified with the % result that \cs{checkforlandscape} was effectively % no longer needed. It is left to maintain upward compatibilty for % older documents. % % % \subsection{Usage} \label{sec:usage} % % You use the \Lpack{booklet} package just like any other package: \\ % |\usepackage[]{booklet}| \\ % but some other things need taking care of as well. % % If you are making any changes to the values of |\paperwidth| or % |\paperheight|, say through the \Lpack{geometry} package or the % \Lpack{memoir} class, then the \Lpack{booklet} package must be called % \emph{after} those changes have been made. In this case you may have % to specify a different |\source| than usual, but I think that this % is probably unlikely. % % % \DescribeMacro{\special} % Under normal circumstances printing should be done onto landscape % oriented paper instead of the usual portrait orientation. If you are % using the \file{dvips} program for transformation from the \file{.dvi} % to a \file{.ps} file, then you can use the command |\special{landscape}| % in the preamble so that the output is organised for landscape. Other % drivers may support similar commands, or command line options for % accomplishing this. % % For example, it may happen that if you use \file{ghostview} (or % \file{gsview}) to look at \file{dvips} PostScript output of the final % printing that the text appears upside down. Putting: \\ % \verb?\special{!TeXDict begin /landplus90{true}store end}? \\ % just before the \verb?\begin{document}? may cure this. % % I use a LaserJet printer with a duplex printing capability (i.e., % printing can be done on both sides of a sheet in one pass). When % printing in duplex mode I also found that it was very convenient % to change the binding from the long to the short side of the paper; % the sheets were then all set for folding. Using \file{dvips} and % the 5SiMx LaserJet I found that the following commands in the % preamble let me change the printer settings from the document. % \begin{verbatim} % \special{!TeXDict begin <> setpagedevice end} % duplex % \special{!TeXDict begin <> setpagedevice end} % short binding % \end{verbatim} % How these would fare with another printer or program, I have no idea. % The CTAN subdirectory \texttt{/dviware/dvipsconfig} contains a % set of files for performing the above operations, and more, % as command line options for \file{dvips}. % % If you can only do simplex printing (one side only), then when % photocopying from one-sided to two-sided, alternate printed pages % need to be rotated 180 degrees before being fed into the copier. % % The following physical analogy of how the package works with % portrait pages may help in achieving results that you want. % % \begin{itemize} % \item Write the original text on portrait oriented transparent % material (e.g., viewfoils) which is the same size as that % specified by the |\source| macro. Mark the centre --- the % point where the diagonals intersect --- of each original page. % % \item Take a sheet of paper the same size as that specified by % the |\target| macro and in landscape orientation. Mentally % divide this in half by a vertical line and then mark the centre % points of the two (left and right) halves. % \item Take an even numbered original sheet, portrait orientaion, % and place it on top of the landscape oriented target sheet % with its centre point coincident with the left half centre % point. Do the same with an odd numbered original sheet except % that its centre is coincident with the right half centre point. % \item Take the assembly to a photocopier and make a copy onto a target % sized sheet. This is the final result. % \end{itemize} % The analogy for landscape originals is similar with the obvious changes % in the orientations. % % Not that the analogy does not include any scaling. If the size of % the target is relatively small then the texts on the original sheets % may overlap or extend outside the physical target sheet. If the target % is relatively large then there may be too much white space around the % texts. The \meta{mag} arguments to the |\source| and |\target| macros % are provided to adjust the source/target text sizes. Scaling does % not affect the positions of the texts. % % If you are planning to produce a booklet in the first place, then % design the initial page layout as though it would be printed on half-sized % paper. This will produce a better end result as no scaling will % be necessary. The \Lopt{1to1} option is provided for just this case. % % If the original pages look too crowded after printing, you can specify % another |\target| with a larger shrink factor (e.g., |\magstepminus3| % instead of |\magstepminus2|). Conversely, too much white space can be % countered by decreasing the shrink factor (e.g., |\magstepminus1| % instead of |\magstepminus2|). % % The following are the default settings of |\source| and |\target| (the % source and target sheets are the same size) for the different layout % options. % \begin{itemize} % \item[\Lopt{twouparticle:}] \mbox{} \\ % |\source{\magstep0}{\paperwidth}{\paperheight}| \\ % |\target{\magstepminus1}{\paperheight}{\paperwidth}| \\ % \item[\Lopt{largetypeblock:}] \mbox{} \\ % |\source{\magstep0}{\paperwidth}{\paperheight}| \\ % |\target{\magstepminus2}{\paperheight}{\paperwidth}| \\ % \item[\Lopt{1to1:}] \mbox{} \\ % |\source{\magstep0}{\paperwidth}{\paperheight}| \\ % |\target{\magstep0}{\paperheight}{\paperwidth}| \\ % \end{itemize} % % If the original is not planned to be produced as a booklet, then % obtaining respectable looking full size and booklet results may % require some trial and error in determining good values for % magnifications and/or target paper sizes. The original page margins % may also need changing for the booklet output. % % LaTeX is not very happy if it is forced to save some pages instead % of outputting each one as it is finished. It shows its displeasure % by messing up any internal references in the document, for example % a Table of Contents or an Index. To counter this, run LaTeX on the % document \emph{without} the \Lopt{print} package option % until all references % have stabilised. Then put the command |\nofiles| in the preamble, use % the \Lopt{print} option, % and run LaTeX a final time before printing. % (The |\nofiles| command stops LaTeX from generating new \file{.aux}, % \file{.toc} files, etc., but it will still use any old versions). % % The following gives an indication of how the relevant portion of % a preamble may look. % \begin{verbatim} % % possibly change default \paperwidth and/or \paperheight % % \usepackage[noprint,...]{booklet} % use this % % \usepackage[...]{booklet} % or this for initial runs % % \usepackage[print, ...]{booklet} \nofiles % use this for final run % % perhaps change \target % \ifpdf % from the ifpdf package % \pdfoutput = 1 % generate pdf output % \setpdftargetpages % set output page size % \else % \setdvipstargetpages % use this for dvi output % \fi % ... % \end{verbatim} % It is safer to use the package without the \Lopt{print} option for % the initial runs rather than not using the package at all; doing it % this way will stop LaTeX from complaining if you happened to have % used any of the \Lpack{booklet} commands in the document. % % TeX allocates a new box for each page in the first signature and then these % are reused for each subsequent signature. Large % signatures may use up all available boxes in which case % TeX will tell you. It is much more probable, though, that TeX will % run out of memory before this happens. % % Here is a real example of one booklet setup for typesetting a 68 page % book. I used the \Lpack{memoir} % class but afterwards I'll point out how to do the equivalent with the % \Lpack{book} class. % \begin{verbatim} % \documentclass[letterpaper,11pt]{memoir} % % typeblock size of 5.5+ by 4 inches % \settypeblocksize{5.5in}{4in}{*} % \addtolength{\textheight}{\onelineskip} % \setlrmargins{2in}{*}{*} % \setulmargins{2.25in}{*}{*} % \checkandfixthelayout % % % \usepackage[noprint]{booklet} % \usepackage[print,1to1]{booklet} \nofiles % \pagespersignature{16} % 16 pages per signature % % \ifpdf % \setpdftargetpages % \else % \setdvipstargetpages % \fi % \ifprintoption % tweak dvi output only for final printing % \special{!TeXDict begin /landplus90{true}store end} % \special{!TeXDict begin <> setpagedevice end} % \fi % % \begin{document} % \pagestyle{empty} % % Want a blank sheet before the title page % \hbox{}\cleardoublepage % % half-title page here % \cleardoublepage % % % title page here % \clearpage % % % copyright page here % \cleardoublepage % % \pagestyle{plain} % \pagenumbering{roman} % \tableofcontents* % \cleardoublepage % \pagenumbering{arabic} % \pagestyle{headings} % % \chapter{First} % % and so on % % % want some blank endpapers to get enough pages into % % the last signature for easy binding % \clearpage % \hbox{}\clearpage\hbox{}\cleardoublepage % \end{document} % \end{verbatim} % % Using the \Lpack{book} class just involves changing how the page layout % is specified: % \begin{verbatim} % \documentclass[letterpaper,11pt]{book} % % typeblock size of 5.5 by 4 inches % \setlength{\textheight}{419pt} \setlength{\textwidth}{289pt} % \setlength{\oddsidemargin}{72pt} \setlength{\evensidemargin}{108pt} % \setlength{\topmargin}{55.9pt} \setlength{\footskip}{27.5pt} % \setlength{\headheight}{14.6pt} \setlength{\headsep}{19.9pt} % % % \usepackage[noprint]{booklet} % ... % \end{verbatim} % % If you try and use a non-zero magnification with a document that % has any `true' lengths, for example the \Lpack{amsbook} class, % TeX itself will complain with an error message % of the form: \\ % |!Incompatible magnification (833);| \\ % |the previous value will be retained|\\ % Try forcing LaTeX to continue and check the output because you might % be lucky and it looks alright. % % \changes{v0.7a}{2005/06/01}{Added Gordo's example} % Here is another example from a posting to \texttt{comp.text.tex} by % Gordo in the thread \textit{booklet problem}, 2005/05/26. % \begin{verbatim} % \documentclass[twoside,10pt]{article} % \setlength{\paperwidth}{5.5in} % \setlength{\paperheight}{8.5in} % \setlength{\topmargin}{-0.3in} % \setlength{\textheight}{6.9in} % \setlength{\oddsidemargin}{0.0in} % \setlength{\evensidemargin}{-0.5in} % \setlength{\textwidth}{4.0in} % \usepackage{makeidx} % %\usepackage[noprint,1to1]{booklet} % initial runs for ToC and index % \usepackage[noprint,1to1]{booklet} \nofiles % final printing run % \source{\magstep0}{5.5in}{8.5in} % \target{\magstep0}{11in}{8.5in} % \setpdftargetpages % \pagespersignature{120} % \makeindex % \begin{document} % \pagenumbering{roman} % \begin{titlepage} ... \end{titlepage} % the title % ... % \newpage % \begin{titlepage} \mbox{} \end{titlepage} % back cover % \end{document} % \end{verbatim} % % % \changes{v0.7a}{2005/06/01}{Added example for bookleting the manual} % As yet another example, you can produce this manual as a booklet. Change % the first part of this file to read: % \begin{verbatim} % \documentclass[twoside]{ltxdoc} % \usepackage{url} % \usepackage{ifpdf} % \addtolength{\evensidemargin}{-0.75in} % % \usepackage[noprint]{booklet} % initial runs % \usepackage[print,largetypeblock]{booklet}\nofiles\pagespersignature{48} % final run % %\usepackage[draft=false, % % plainpages=false, % % pdfpagelabels, % % bookmarksnumbered, % % hyperindex=false % % ]{hyperref} % \ifpdf % \setpdftargetpages % \else % \setdvipstargetpages % \fi % \providecommand{\phantomsection}{} % \makeatletter % \@mparswitchfalse % \makeatother % ... % \end{verbatim} % The \Lpack{hyperref} package interferes with the \cs{setpdftargetpages} % macro so it is commented out. The \Lopt{largetypeblock} option is used % otherwise the marginal notes can fall off the edges of the pages in the % final printing; the \cs{evensidemargin} is also altered for the same reason. % The value for \cs{pagespersignature} is to ensure that % only a single signature is produced (you can decrease this if you are % willing to bind multiple signatures). % % % The original source of the \Lpack{2up} package is included at % the end of this manual. It may provide some more insights into how to % use the \Lpack{booklet} package. Be careful, though, as the two packages % differ in some significant details. % % % % \StopEventually{ % \bibliographystyle{alpha} % \begin{thebibliography}{GMS94} % \bibitem[GMS94]{GOOSSENS94} % Michel Goossens, Frank Mittelbach, and Alexander Samarin. % \newblock \emph{The LaTeX Companion}. % \newblock Addison-Wesley Publishing Company, 1994. % \bibitem[Zan93]{2UP} % Timothy Van Zandt. % \newblock \emph{Two-up printing for Generic TeX}. % \newblock January 1993. % \newblock (Available from CTAN in \texttt{macros/generic/2up}) % \end{thebibliography} % } % % % \section{The package code} \label{sec:code} % % The package code essentially consists of modifications to the \Lpack{2up} % macros, which are given in section~\ref{sec:2upcode}. I could not % have written the \Lpack{booklet} package without Timothy Van Zandt's % \Lpack{2up} macros. % % As much as possible I have tried to keep to the original % \Lpack{2up} macro names. However, the \Lpack{2up} and \Lpack{booklet} % packages cannot be used in the same document. % % The code is actually in two packages, \file{booklet.sty} which % provides the commands that % the user sees, and \file{bkltprnt.sty} which is used by % \file{booklet.sty} to do all the hard work. % % \subsection{Preliminaries} % % Announce the name and version of the packages, which require % \LaTeXe. % \begin{macrocode} %<*usc> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{booklet}[2009/09/02 v0.7b booklet printing] % %<*prnt> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{bkltprnt}[2009/09/02 v0.7b support for booklet printing] % % \end{macrocode} % % \subsection{The main \Lpack{booklet} code} % % The \Lpack{booklet} package provides the user commands. Then, if % the \Lopt{print} option is used it calls the \Lpack{bkltprnt} % package to do the work. % % \begin{macrocode} %<*usc> % \end{macrocode} % % \begin{macro}{\twoup@end} % For the \Lopt{print} and \Lopt{noprint} options. % \begin{macrocode} \newcommand*{\twoup@end}{\endinput} % \end{macrocode} % \end{macro} % % \begin{macro}{\pageseplength} % \begin{macro}{\pagesepwidth} % \begin{macro}{\pagesepoffset} % Lengths for the dividing rule. % \begin{macrocode} \newdimen\pageseplength \newdimen\pagesepwidth \newdimen\pagesepoffset % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\ifsidebyside} % TRUE if pages are to be placed side-by-side on the sheet. I have changed % the original |\if@sidebyside| to |\ifsidebyside| so that a user can % call it easily. I don't % don't implement the |\if@twosided|. % \begin{macrocode} \newif\ifsidebyside \sidebysidetrue % \end{macrocode} % \end{macro} % % \begin{macro}{\ifuselandscape} % \begin{macro}{\ifprintoption} % Booleans for some options and for if the final printing should be landscape. % \begin{macrocode} \newif\ifuselandscape \uselandscapefalse \newif\ifprintoption \printoptionfalse % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\c@signature} % \begin{macro}{\c@sigcount} % Counters for signature handling. % \begin{macrocode} \newcounter{signature} \newcounter{sigcount} \setcounter{sigcount}{0} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\pagespersignature} % A user-level command for setting the number of pages wanted % in a signature. I initialise these to 32. % \begin{macrocode} \newcommand*{\pagespersignature}[1]{\setcounter{signature}{#1}} \pagespersignature{32} % \end{macrocode} % \end{macro} % % % \begin{macro}{\magstepminus} % A useful extension of the |\magstep| macro. % \begin{macrocode} \def\magstepminus#1{% \ifcase#1 \@m\or 833\or 694\or 579\or 482\or 401\fi\relax} % \end{macrocode} % \end{macro} % % \begin{macro}{\target} % \begin{macro}{\source} % \begin{macro}{\setpdftargetpages} % \begin{macro}{\setdvipstargetpages} % Vacuous versions of the user-level macros. % \changes{v0.7}{3005/03/23}{Added \cs{setdvipstargetpages}} % \begin{macrocode} \newcommand*{\target}[3]{} \newcommand*{\source}[3]{} \newcommand*{\setpdftargetpages}{} \newcommand*{\setdvipstargetpages}{} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\targettopbottom} % Vacuous version of the user command. % \begin{macrocode} \newcommand*{\targettopbottom}{} % \end{macrocode} % \end{macro} % % \begin{macro}{\twoupemptypage} % \begin{macro}{\twoupclearpage} % vacuous versions of the user commands. % \begin{macrocode} \newcommand*{\twoupemptypage}{} \newcommand*{\twoupclearpage}{} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\checkforlandscape} % Sets the value of |\ifuselandscape| to % (|\ifuselandscape| XOR |\ifprintoption|). % \begin{macrocode} \newcommand*{\checkforlandscape}{% \ifx\ifuselandscape\ifprintoption \uselandscapefalse\else\uselandscapetrue\fi} % \end{macrocode} % \end{macro} % % Now declare the \Lopt{print}, \Lopt{noprint} and \Lopt{landscape} % options, % prepare to pass any other % options to \Lpack{bkltprnt}, and execute the options. % \begin{macrocode} \DeclareOption{print}{\printoptiontrue\def\twoup@end{}} \DeclareOption{noprint}{\printoptionfalse\def\twoup@end{\endinput}} \DeclareOption{landscape}{\uselandscapetrue} \DeclareOption*{\PassOptionsToPackage{\CurrentOption}{bkltprnt}} \ProcessOptions\relax \ifuselandscape \PassOptionsToPackage{landscape}{bkltprnt} \fi % \end{macrocode} % % Now call |\twoup@end|, which is either |\endinput| or vacuous, after % which the \Lpack{bkltprnt} package is called (if |\twoup@end| was vacuous). % \begin{macrocode} \twoup@end \RequirePackage{bkltprnt} % \end{macrocode} % % % The end of this package. % % \begin{macrocode} % % \end{macrocode} % % \subsection{The main \Lpack{bkltprnt} code} % % \begin{macrocode} %<*prnt> % \end{macrocode} % % \begin{macro}{\@targetwidth} % \begin{macro}{\@targetheight} % \begin{macro}{\@sourcewidth} % \begin{macro}{\@sourceheight} % Parameter registers. % \begin{macrocode} \newdimen\@targetwidth \newdimen\@targetheight \newdimen\@sourcewidth \newdimen\@sourceheight % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\if@leftpage} % \begin{macro}{\@leftpage} % \begin{macro}{\@rightpage} % \begin{macro}{\@physicalpage} % Registers used by output routine. % \begin{macrocode} \newif\if@leftpage \@leftpagetrue \newbox\@leftpage \newbox\@rightpage \newcount\@physicalpage % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % % Since pages are both stored and shipped out half as often: % \begin{macrocode} \multiply\maxdeadcycles by 40\relax % \end{macrocode} % % \begin{macro}{\bookletpage} % \begin{macro}{\leftpagenumber} % \begin{macro}{\rightpagenumber} % Registers used only for booklet layout. These are specified directly % as this is the only layout. % \begin{macrocode} \newcount\bookletpage \bookletpage=0 \newcount\leftpagenumber \newcount\rightpagenumber % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\twoupp@geboxes} % I have added this macro so that only the boxes required for a signature % are created. The original \Lpack{2up} code creates a new box for each output page. % \changes{v0.6}{2001/08/26}{Added \cs{twoupp@geboxes}} % \begin{macrocode} \newcommand*{\twoupp@geboxes}{% \advance\bookletpage\@ne \expandafter\newbox\csname bookletbox\the\bookletpage\endcsname \ifnum \bookletpage < \c@signature \twoupp@geboxes \fi} \AtBeginDocument{\twoupp@geboxes\bookletpage=\z@} % \end{macrocode} % \end{macro} % % % \begin{macro}{\target} % \begin{macro}{\inv@targetmag} % |\@targetwidth| and |\@targetheight| are set to the \emph{unmagnified} % dimensions % of the target page. |\inv@targetmag| is the inverse of the target % magnification. % \begin{macrocode} {\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} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\source} % Like |\target|, but for the source: % \begin{macrocode} \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} % \end{macrocode} % \end{macro} % % \begin{macro}{\setpdftargetpages} % This macro specifies the size of the target page for pdfLaTeX. % It ensures that \Lpack{memoir}'s version (\cs{fixpdflayout}) does nothing. % \changes{v0.7}{2005/03/23}{Modified \cs{setpdftargetpages} to cater for memoir} % \begin{macrocode} \renewcommand*{\setpdftargetpages}{% \ifprintoption \setlength{\pdfpageheight}{\@targetheight}% \setlength{\pdfpagewidth}{\@targetwidth}% \let\fixpdflayout\relax \fi} % \end{macrocode} % \end{macro} % % \begin{macro}{\setdvipstargetpages} % This macro specifies the size of the target page fow when dvips is % used. It ensures that \Lpack{memoir}'s version (\cs{fixdvipslayout}) % does nothing. % \changes{v0.7}{2005/03/23}{Implemented \cs{setdvipstargetpages}} % \begin{macrocode} \renewcommand*{\setdvipstargetpages}{% \ifprintoption \AtBeginDvi{\special{papersize=\the\@targetwidth,\the\@targetheight}}% \let\fixdvipslayout\relax \fi} % \end{macrocode} % \end{macro} % % \begin{macro}{\targetBooklet} % \begin{macro}{\ship@@@leftpage} % \begin{macro}{\ship@@@rightpage} % I only provide the original \Lpack{2up} Booklet, not booklet. For % the \Lpack{booklet} package the Booklet code can be processed % immediately. The code in this chunk is equvalent to the original % |\target@Booklet|. % \begin{macrocode} \def\targetBooklet{% \def\ship@@@leftpage{\save@booklet\@leftpage}% \def\ship@@@rightpage{\save@booklet\@rightpage}% \@leftpagefalse} \targetBooklet % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\targettopbottom} % \begin{macro}{\make@@halfpage} % \begin{macro}{\make@fullpage} % I have renamed the original |\target@topbottom| to |\targettopbottom| % \begin{macrocode} \def\targettopbottom{% \def\make@@halfpage{\make@@halftopbottom}% \def\make@fullpage{\make@fulltopbottom}% \sidebysidefalse} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % Specify the options. There are new ones for signature sizes, and some % of the original \Lpack{2up} source/targets are now treated as options. % \begin{macrocode} \DeclareOption{four}{\setcounter{signature}{4}} \DeclareOption{eight}{\setcounter{signature}{8}} \DeclareOption{sixteen}{\setcounter{signature}{16}} \DeclareOption{thirtytwo}{\setcounter{signature}{32}} \DeclareOption{twouparticle}{\twouparticle} \DeclareOption{landscape}{\twouplandscape} \DeclareOption{largetypeblock}{\twoupplain} \DeclareOption{1to1}{\twouponetoone} % \end{macrocode} % % \begin{macro}{\shipout} % 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. There is no twosided layout in this version. % \begin{macrocode} \expandafter\let\csname &normal@shipout\endcsname\shipout \def\shipout{% \if@leftpage \global\@leftpagefalse \def\next{\afterassignment\ship@leftpage\global\setbox\@leftpage=}% \else \global\@leftpagetrue \def\next{\afterassignment\ship@rightpage\global\setbox\@rightpage=}% \fi \next} % \end{macrocode} % \end{macro} % % \begin{macro}{\ship@leftpage} % \begin{macro}{\ship@rightpage} % The job of |\ship@leftpage| and |\ship@rightpage| is to invoke % |\ship@@leftpage| or |\ship@@rightpage| at the right time. % |\shipout| is followed either: % \begin{enumerate} % \item 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 % % \item by a |\box| or |\copy|, in which case |\ship@leftpage| is invoked after % the full assignment; |\@leftpage| is not void, and |\ship@leftpage| invokes % |\ship@@leftpage| immediately. % \end{enumerate} % % \begin{macrocode} \def\ship@leftpage{% \ifvoid\@leftpage\aftergroup\ship@@leftpage\else\ship@@leftpage\fi} \def\ship@rightpage{% \ifvoid\@rightpage\aftergroup\ship@@rightpage\else\ship@@rightpage\fi} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\ship@@leftpage} % \begin{macro}{\ship@@rightpage} % |\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. % \begin{macrocode} \def\ship@@leftpage{\make@halfpage\@leftpage\ship@@@leftpage} \def\ship@@rightpage{\make@halfpage\@rightpage\ship@@@rightpage} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\make@halfpage} % \begin{macrocode} \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} % \end{macrocode} % \end{macro} % % \begin{macro}{\make@@halfsidebyside} % \begin{macro}{\make@@halfpage} % The definition of |\make@@halfpage| depends on the target layout. % \begin{macrocode} \def\make@@halfsidebyside#1{% \global\setbox#1=\vbox to\@targetheight{\vss \hbox to.5\@targetwidth{\hss\box#1\hss}\vss}} \def\make@@halfpage{\make@@halfsidebyside} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\make@@halftopbottom} % \begin{macrocode} \def\make@@halftopbottom#1{% \global\setbox#1=\vbox to.5\@targetheight{\vss \hbox to\@targetwidth{\hss\box#1\hss}\vss}} % \end{macrocode} % \end{macro} % % \begin{macro}{\ship@twoup} % The pages are generaly shipped in pairs: % \begin{macrocode} \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} % \end{macrocode} % \end{macro} % % \begin{macro}{\make@fullsidebyside} % \begin{macro}{\make@fulltopbottom} % \begin{macrocode} \def\make@fullsidebyside{% \hbox{\box\@leftpage\pagesep@sidebyside\box\@rightpage}} \def\make@fulltopbottom{% \vbox{\offinterlineskip\box\@leftpage\pagesep@topbottom\box\@rightpage}} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\make@fullpage} % The definition of |\make@fullpage| depends on the layout: % \begin{macrocode} \def\make@fullpage{\make@fullsidebyside} % \end{macrocode} % \end{macro} % % \begin{macro}{\pagesep@sidebyside} % \begin{macro}{\pagesep@topbottom} % A vertical or horizontal rule can be inserted. These can be redefined % for other tricks: % \begin{macrocode} \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} % \end{macrocode} % \end{macro} % \end{macro} % % \changes{v0.7a}{2005/06/01}{Added sewing example} % For example it may be helpful to mark the positions of sewing holes % along the spine of your booklet. For \Lopt{landscape} this can be done % by redefining \cs{pagesep@topbottom} and for the more typical portrait % style booklet by changing \cs{pagesep@sidebyside}. The general technique % is to use a zero-sized picture which \LaTeX{} will think takes up no space. % For instance, for letterpaper (11in by 8.5in) you can do something % like this in your preamble: % \begin{verbatim} % \makeatletter % \renewcommand*{\pagesep@sidebyside}{% % \begingroup % \setlength{\unitlength}{1in}% measurements in inches % \begin{picture}(0,0)(0,-8.5)% zero-sized picture, origin at page top % \put(0,-1){\makebox(0,0){.}}% mark 1in down from top % \put(0,-4.25){\makebox(0,0){.}}% mark at page center % \put(0,-7.5){\makebox(0,0){.}}% mark 1in up from bottom % \end{picture}% % \endgroup} % \makeatother % \end{verbatim} % % \begin{macro}{\save@booklet} % With the Booklet layout, the pages are saved rather than % shipped. I have added the signature code to the original macro. This % outputs all the pages making up a signature even if there are still more % to come. The page boxes used in |\save@booklet| are assigned initially % by |\twoupp@geboxes|. % \changes{v0.6}{2001/08/26}{Modified \cs{save@booklet}} % \begin{macrocode} \begingroup \let\newbox\relax \gdef\save@booklet#1{% \begingroup \globaldefs=1 \ifnum\c@sigcount=\z@\bookletpage=0\fi \advance\bookletpage by 1 \addtocounter{sigcount}{1} %%%% \expandafter\newbox\csname bookletbox\the\bookletpage\endcsname \expandafter\setbox\csname bookletbox\the\bookletpage\endcsname\box#1% \endgroup \ifnum\c@sigcount=\c@signature %%% PW \twoup@eject% \setcounter{sigcount}{0}% \fi} \endgroup % \end{macrocode} % \end{macro} % % \begin{macro}{\make@bookletpage} % \begin{macro}{\booklet@loop} % \begin{macro}{\Booklet@@loop} % The pages are then printed at the end with the following macros: % \begin{macrocode} \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 1 \advance\leftpagenumber by -1 \ifnum\leftpagenumber<\rightpagenumber\else\expandafter\booklet@loop\fi} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\twoupemptypage} % This one is easy: % \begin{macrocode} \def\twoupemptypage{\shipout\hbox{}} % \end{macrocode} % \end{macro} % % % \begin{macro}{\twoup@eject} % 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| below. (The \Lpack{booklet} % package doesn't need |\twoupeject| which is for non-LaTeX systems). % % This is the definition of |\twoup@eject| with the Booklet layout. % \begin{macrocode} \def\twoup@eject{ \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} % \end{macrocode} % \end{macro} % % \begin{macro}{\twoupclearpage} % 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): % \begin{macrocode} \begingroup \catcode`\>=9\relax >>\gdef\twoupclearpage{\clearpage\twoup@eject} >>\expandafter\@temptokena\expandafter{\enddocument} >>\xdef\enddocument{\noexpand\twoupclearpage\the\@temptokena} \endgroup % \end{macrocode} % \end{macro} % % % \begin{macro}{\TwoupWrites} % This is one workaround for the page cross-references problem % \begin{macrocode} \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} % \end{macrocode} % \end{macro} % % \begin{macro}{\twouparticle} % \begin{macro}{\twoupplain} % \begin{macro}{\twouplandscape} % \begin{macro}{\twouponetoone} % The pre-defined layouts. I have taken advantage of LaTeX2e's % paper size lengths to generalise. % \begin{macrocode} \def\twouparticle{\target{\magstepminus1}{\paperheight}{\paperwidth}} \def\twoupplain{\target{\magstepminus2}{\paperheight}{\paperwidth}} \def\twouplandscape{\target{\magstepminus2}{\paperwidth}{\paperheight}% \targettopbottom} \def\twouponetoone{\target{\magstep0}{\paperheight}{\paperwidth}} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % Set the default for the source. % \begin{macrocode} \source{\magstep0}{\paperwidth}{\paperheight} % \end{macrocode} % % Set the defaults for the rule. % \begin{macrocode} \pagesepwidth 0pt \pageseplength 6.5in \pagesepoffset 1in % \end{macrocode} % % I also found that |\TwoupWrites| was really not optional. % \begin{macrocode} \TwoupWrites % \end{macrocode} % % The default options are \Lopt{twouparticle} and \Lopt{thirtytwo} pages % per signature. % \begin{macrocode} \ExecuteOptions{twouparticle,thirtytwo} \ProcessOptions % \end{macrocode} % % % The end of this package. % \begin{macrocode} % % \end{macrocode} % % % \appendix % % \section{The code for 2up} \label{sec:2upcode} % % Following is a verbatim copy of Timothy Van Zandt's \Lpack{2up} code. % I hope that by including this I have partly met his COPYING conditions. % % \begin{verbatim} % % %% BEGIN 2up.tex/2up.sty % %% % \def\fileversion{1.2} % \def\filedate{93/01/28} % %% % %% COPYRIGHT 1992, 1993 by Timothy Van Zandt, tvz@Princeton.EDU % %% % %% 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. % %% % %% INSTALLATION: % %% Put this file where your TeX looks for inputs, under the name 2up.tex. % %% Name a copy 2up.sty to use as a LaTeX style option, or create a file % %% 2up.sty with the lines: % %% \input 2up.tex % %% \endinput % %% % %% DOCUMENTATION: % %% Input 2up.tex, or include 2up as a LaTeX style option. There is a % %% good chance you will get the desired layout. (But you will probably % %% need to generate new font bitmaps to get high quality output.) See % %% 2up.doc, which might be appended to this file, for detailed % %% documentation. % %% % %% COPYING: % %% Copying of part or all of this file is allowed under the following % %% conditions only: % %% (1) You may freely distribute unchanged copies of the file. Please % %% include the documentation when you do so. % %% (2) You may modify a renamed copy of the file, but only for personal % %% use or use within an organization. % %% (3) You may copy fragments from the file, for personal use or for use % %% in a macro package for distribution, as long as credit is given % %% where credit is due. % %% % %% You are NOT ALLOWED to take money for the distribution or use of % %% this file or modified versions or fragments thereof, except for % %% a nominal charge for copying etc. % %% % %% CODE: % % % \csname TwoUpLoaded\endcsname % \let\TwoUpLoaded\endinput % % % \edef\TheAtCode{\the\catcode`\@} % \catcode`\@=11\relax % \message{\space\space v\fileversion\space\space \filedate\space\space } % % % % 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 % % \end{verbatim} % % % \section{The documentation for 2up} \label{sec:2updoc} % % Following is an almost verbatim copy of the documentation for Timothy % Van Zandt's \Lpack{2up}. I hope that by including this I have % now completely met his COPYING conditions. The only change that % I have made to the original is replacing every occurrence of `|{verbatim}|' % by `|{verbtm}|', so LaTeX does not get confused when processing the % current document. % % \begin{verbatim} % % %% BEGIN 2up.doc % %% % %% Documentation for 2up.tex/2up.sty. % %% Run through LaTeX, with or without the NFSS. % %% % %% See below if you want to try out two-up printing. % %% % %% LaTeX version of this documentation courtesy of % %% H. David Todd % %% % %% % \documentstyle[12pt,twoside]{article} % % \def\FileDate{January 28, 1993} % \def\FileVersion{1.2} % % %% INSTRUCTIONS FOR TWO-UP PRINTING. % %% 1. Change \iffalse below to \iftrue. % %% 2. Uncomment \special{landscape} if using Rokicki's dvips, or otherwise % %% remember to print the document out in landscape mode. % %% 3. Uncomment one of the booklet options, if desired. % %% % \iffalse % \input 2up.tex % \targetlayout{twosided} % \TwoupWrites % % \special{landscape} %% This works with Rokicki's dvips % % \targetlayout{Booklet} %% Booklet printing with 2-sided printer/copier. % % \targetlayout{booklet} %% Booklet printing with 1-sided printer/copier. % \fi % % \makeatletter % % %% PAGE NUMBERING: % %% Adjust page numbering if using booklet layout option. % \setcounter{page}{0} % \def\next{\if@leftpage\else\stepcounter{page}\fi} % \@ifundefined{target@stop}{}{\next} % % %% CONTENTS: % \def\tableofcontents{% % \par\begin{center} % \large\bf Contents % \end{center} % \begin{quote}\@starttoc{toc}\end{quote}} % % %% PAGE PARAMETERS: % \setlength{\parindent}{0pt} % paragraph indent % \setlength{\parskip}{4pt plus 1pt minus 1pt} % \setlength{\topmargin}{0pt} % \setlength{\headheight}{12pt} % height of running head % \setlength{\headsep}{30pt} % distance between header and text % \setlength{\textheight}{8.2in} % height of text on page % % %% DATES, VERSIONS AND TITLES: % \def\@maketitle{% % \begin{center} % {\Large\bf \@title \par} % \vskip 1.2em {\lineskip .5em % \begin{tabular}[t]{c}\@author\end{tabular}\par} % \vskip .8em {\@date}% % \end{center} % \par % \vskip .5em} % % %% Page Style: % \pagestyle{myheadings} % \markboth{Two-Up Style Guide}{Version \FileVersion, \FileDate} % % %% Special list: % \newcommand{\namelistlabel}[1]{\mbox{\bf #1}\hfil} % \newenvironment{namelist}[1]% % {\begin{list}{}% % {\let\makelabel\namelistlabel % \settowidth{\labelwidth}{#1} % \setlength{\leftmargin}{1.1\labelwidth}}}% % {\end{list}} % % %% VERBATIM: % %% % \begingroup % \catcode`\{=12 \catcode`\}=12 % \catcode`\(=1 \catcode`\)=2 % \catcode`\+=0 \catcode`\\=12 % +gdef+|(\) % \| = character \ % +gdef+{({) % \{ = character { % +gdef+}(}) % \} = character } % +endgroup % \def\Backslash{\protect\|} % %% % %% Define some functional font commands: % %% % \def\MainFont{\tt} % For macro definitions. % \def\UsageFont{\tt} % For in-line macro names. % \def\InlineFont{\tt} % For other in-line snipets of code. % \def\MetaFont{\rm\it} % For meta arguments. % %% % %% Short-cuts for font commands: % %% % \def\s#1{\string#1} % \def\t#1{{\InlineFont\string#1}} % For other in-line code. % \def\m#1{{\MetaFont #1\/}} % For just putting things in italics % \def\M#1{{\InlineFont\{\m{#1}\}}} % Arg is in italic, enclosed in tt braces. % \let\N\t % For in-line macro names. % \catcode`\<=13 \def<#1>{\m{#1}} % % \catcode`\"=13\def"{\verb"} % Short verb % %% % %% This is for listing macro definitions in a quote-like environment. % %% % \begingroup % \catcode`\[=1 \catcode`\]=2 % \catcode`\{=13 \catcode`\}=12 % \gdef\@MD[% % \catcode`\{=13 \catcode`\}=12 % \def{##1}[\{[\MetaFont ##1]\}]] % \endgroup % \def\MD{% % \quote % \begingroup % \@MD % \def\end{\endgroup\end}% % \def\\{\@centercr\s}% % \MainFont % \s} % \def\endMD{\endquote} % %% % % %% End preamble. % \catcode`\@=12 % % \begin{document} % % \title{Documentation for 2up.tex:\\ % Two-up printing for Generic TeX} % \author{Timothy Van Zandt\thanks{The documentation was put into % \LaTeX\ format by David Todd.}\\ tvz@Princeton.EDU} % \date{Version \FileVersion\\[3pt] \FileDate} % % \maketitle % \thispagestyle{empty} % % "2up.tex"/"2up.sty" allows one to print a document two-up, with % considerable flexibility as to paper size and layout. It produces a standard % dvi file, and does not involve an additional dvi or PostScript filter. It % should work with most \TeX\ macro packages. % % {\bf Usage:} Input "2up.tex", or include "2up" as a LaTeX style option. % There is a good chance you will get the desired layout. (But you will probably % need to generate new font bitmaps to get high quality output.) See the rest of % this documentation for detailed information on controlling 2up.tex. % % \begingroup % \def\baselinestretch{.8}\large\normalsize % \tableofcontents % \endgroup % \clearpage % % \section{Comparison with other methods} % % There are other tools for two-up printing: % \begin{description} % \item[PostScript filters] % These work well as long as you only use PostScript fonts (as opposed to the % usual Metafont fonts). Otherwise, the PostScript filter scales bitmapped % fonts, and the quality is lower than with "2up.tex". % % \item[Rokicki's dvidvi] % "dvidvi" is a versatil tool that does much more than % 2up printing. However, if only rearranges the pages, and does not adjust the % magnification to ensure that the pages fit properly in a two-up format. It % also adds one more step to the \TeX-dvi-printer cycle. "2up.tex", on the other % hand, combines the changes to \TeX's magnification and page layout with the % rearranging of the pages, all with an easy-to-use interface and from within % your \TeX\ document. (See Section \ref{dvidvi} on using both "2up.tex" and % "dvidvi" together.) % \end{description} % % \section{A warning about fonts} % % Two-up printing generally involves reducing a document, and thus using fonts % sizes that are not typically found on your system. If you are using bitmapped % fonts (standard for \TeX\ users), and you do not have and cannot generate the % extra fonts bitmaps, you will find 2up.sty (and any other method of two-up % printing) to give very poor quality output. % % If you are using a program like Rokicki's "dvips" that can generate extra font % bitmaps as needed, you will find that it takes a long time to print your 2up % document the first few times, as "dvips" is busy making the extra fonts. This % problem will go away. Be thankful you have such an easy way to get extra font % bitmaps. % % \section{Usage} % % Input "2up.tex". \LaTeX\ users can include "2up" as a style option. % % Then set the target and source layout: % \begin{MD} % \source{mag}{width}{height}\\ % \target{mag}{width}{height} % \end{MD} % % \begin{itemize} % \item 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. % % \item and are the true width and height of the paper, % when looking at the output right-side-up. % % \item refers to the source and target magnification. It should be an % integer, equal to 1000 times the magnification factor. There are also some % magic magnification numbers: % \begin{description} % \item[$\setminus$magstep] for a magnification of 1.2$^n$ (n=0,...,5), or % % \item[$\setminus$magstepminus] for a magnification of 1.2$^{-n}$ % (n=0,...,5). % \end{description} % Using these magnification values will make best use of the available fonts on % your system. % \end{itemize} % % "2up.tex" takes each source page, and centers in half a target page. To get % the pages to fit, the magnification of the document typically has to be % reduced. If you find that the pages are too crowded, try reducing the target % magnification. If they are too lonely, try increasing the target % magnification. % % If you want to adjust the positioning of the scaled pages, try changing the % values of "\hoffset" or "\voffset" with "\advance" or \LaTeX's "\addtolength". % % Don't change the magnification of your document after using the "\target" % command, as you will override the settings made by 2up.tex. % % You can also specify some options: % \begin{MD} % \targetlayout{options} % \end{MD} % where is a comma separated list with no spaces. Valid % options are: % \begin{namelist}{topbottomxxx} % % \item [topbottom] The two source pages are printed one on top of the other. % \item [twosided] Odd pages are always printed on the right or the bottom. % \item [booklet] Pages are printed like a booklet. See Section \ref{booklet}. % \item [Booklet] Like "booklet", but for two-sided printers/copiers. % \item [dvidvi] For arranging in two-up layout with "dvidvi". See Section % \ref{dvidvi}. % % \end{namelist} % % The only other changes you might want to make to your document are the % following: % \begin{itemize} % \item You have to see to it that the target output is printed with the % correct orientation (landscape or portrait). See the documentation for your % dvi driver for details. % % \item "2up.tex" will inserts a line between pages if you change the following % dimensions: % \begin{namelist}{pagesepwidthxxx} % \item [$\setminus$pagesepwidth] Thickness of line. (Default 0pt) % \item [$\setminus$pageseplength] Length of line. (Default 6.5in) % \item [$\setminus$pagesepoffset] Distance from bottom of page to bottom of % line, or (with "topbottom" layout) from side of page to beginning of line. % (Default 1in) % \end{namelist} % % \item You can, but do not need to, use the following commands: % \begin{namelist}{twoupemptypagexxx} % % \item [$\setminus$twoupemptypage] inserts a completely blank half page % in the target. % % \item [$\setminus$twoupclearpage] \LaTeX\ users: ejects a complete target % page. % % \item [$\setminus$twoupeject] Plain \TeX users: ejects a complete target % page. % % \end{namelist} % \end{itemize} % % \section{Defaults} % % The following commands set the parameters for some common sources and % targets. The definitions of these commands are also useful examples. % % For A4 paper, just replace "8.5in" and "11in" in the definitions below by % the width and height of A4 paper. % % \begin{description} % % \item [$\setminus$twouparticle] % % This is the default for \LaTeX. % \begin{namelist}{Sourcexx} % % \item [Source:] A portrait document on 8.5x11 inch paper with wide margins as % used in \LaTeX's article style, and without marginal notes. % % \item [Target:] A landscape document on the same size paper, with the source % pages printed side by side. % % \item [Definition:]\hspace{1pt} % \begin{verbtm} % \target{\magstepminus1}{11in}{8.5in} % \source{\magstep0}{8.5in}{11in}} % \end{verbtm} % \end{namelist} % % If you use narrower side margins, or if you use marginal notes, then you % will need to use "\twoupplain" or \\ "\twouplegaltarget", defined below. % % \item [$\setminus$twoupplain] % % This is the default for non-\LaTeX. % % It is the same as "\twouparticle", but for source documents with narrower % margins. % \begin{namelist}{Sourcexxx} % % \item [Definition:]\hspace{1pt} % \begin{verbtm} % \target{\magstepminus2}{11in}{8.5in} % \source{\magstep0}{8.5in}{11in} % \end{verbtm} % \end{namelist} % % \item [$\setminus$twouplegaltarget] % % \begin{namelist}{Sourcexxx} % \item [Source:] A portrait document on 8.5x11 inch paper with just about any % margins and perhaps with marginal notes. % % \item [Target:] A landscape document on legal size paper (8.5x14 inches), % with the source pages printed side by side. % % \item [Definition:]\hspace{1pt} % \begin{verbtm} % \target{\magstepminus1}{14in}{8.5in} % \source{\magstep0}{8.5in}{11in}\ % end{verbtm} % \end{namelist} % % \item [$\setminus$twouplandscape]\hspace{1pt} % \begin{namelist}{Sourcexxx} % % \item [Source:] A landscape document on 8.5x11 inch paper with just about any % margins. % % \item [Target:] A portrait document on the same size paper, with the % source pages stacked vertically. % % \item [Definition:]\hspace{1pt} % \begin{verbtm} % \target{\magstepminus2}{8.5in}{11in} % \source{\magstep0}{11in}{8.5in} % \targetlayout{topbottom} % \end{verbtm} % \end{namelist} % % \end{description} % % % \section{True Dimensions} % % \TeX\ lets you use `true' dimensions, as in % \begin{verbtm} % \topmargin 1truein % \setlength{\topmargin}{1truein} % \end{verbtm} % This sets the length to 1 inch % as it appears on the page, no matter what the magnification. % % Once you use `true' dimensions, it is impossible to change the % magnification of your document, and hence it is almost impossible % to use 2up.tex. You will get an error like: % \begin{verbtm} % ! Incompatible magnification (833); % the previous value will be retained (2000). % \end{verbtm}% % % The use of `true' dimensions might be hiding in macros or style files % you are using. For example, Plain \TeX's "\magnification" command uses % true dimensions; use "\mag" instead, and then set "\hsize" and % "\vsize" appropriately scaled. If you can't find the culprit `true' % dimension in your document or input files, try putting this on the % (very) first line of your document: % \begin{verbtm} % \mag 143 \voffset 1truein \mag 1000 % \end{verbtm} % % You will get the error listed above wherever true dimensions are used % (and in some other places as well). % % % \section{Page Cross-References} % % Page cross-references (e.g., in an index or table of contents) will not be % accurate with "2up.tex", because finished pages are not immediately shipped % out. This can also cause problems with some special \LaTeX\ styles that have % multiple ".aux" files (e.g., for each chapter). % % To get better, but not perfect, page cross-references, try putting the % command % \begin{verbtm} % \TwoupWrites % \end{verbtm} % at the beginning of your document, after inputting "2up.tex". This is good for % drafts, and may fix problems with \LaTeX\ styles that have multiple ".aux" % files. "\TwoupWrites" makes "\write" and "\read" "\immediate", if you know % what that means. It might cause problems of its own, but try it and see. % % To get accurate page cross-references: % \begin{enumerate} % \item Run the job without "2up.tex", until all cross-references % are properly resolved. Run any index utility at this point. % % \item Run the job ONE MORE TIME with "2up.tex"; it will use the % correct cross-references from the previous runs. (In \LaTeX\ documents, % it is useful at this point to include the "\nofiles" command, so that % the correct cross-references are preserved.) % \end{enumerate} % % \section{Booklets\label{booklet}} % % Here are some special considerations for making booklets: % % \begin{itemize} % % \item Use the "booklet" target layout if your printer or copier cannot print % two % sides directly. "2up.tex" prints out the ``tops'' of the pages, and then the % ``bottoms'', so that you can copy or print on both sides by doing one side, % flipping the output over, and doing the other side. % % \item Use "Booklet" if your printer or copier can print directly on two sides. % % \item You must have enough memory and box registers to hold all the pages in % the document. A Big\TeX\ should be able to handle at least a 32-page booklet. % % \item Sometimes booklet printing is part of the design of a document, rather % than an afterthought. In this case, you should set up the margins for the % target half-page rather than using "2up.tex" to scale the document. For % example, if using \LaTeX, 8.5x11 inch paper, \LaTeX's twoside style option, % and headings, try the following page parameter changes: % \begin{verbtm} % \setlength{\oddsidemargin}{-0.2in} % \setlength{\evensidemargin}{-0.5in} % \setlength{\textwidth}{4.2in} % \setlength{\textheight}{6.5in} % \setlength{\topmargin}{-.4in} % \end{verbtm} % If you do this, "2up.tex" isn't adjusting margins or scaling the % document. You coould therefore get by without "2up.tex" by using "dvidvi". % \end{itemize} % % \section{Using dvidvi\label{dvidvi}} % % With the "dvidvi" layout option, "2up.tex" takes care of adjusting the % margins, and you then use "dvidvi" to arrange the pages in a two-up % format. The advantage is that cross referencing comes out right. % The disadvantage is that it involves one more step. % % Start by \TeX ing your document with "2up.tex" and the "dvidvi" layout option. % Then run the dvi file through "dvidvi". Specify the offsets for "dvidvi" at % the middle of the page. E.g., for % a side-by-side layout on 8.5x11in paper, use % \begin{verbtm} % dvidvi '2:0,1(5.5in,0in)' foo bar % \end{verbtm} % For other paper sizes, replace "5.5in" by half the target paper width. For the % "topbottom" layout, reverse the dimensions, e.g., % (0in,5.5in). For booklet printing, see the % the documentation for "dvidvi". % % % \section{Compatibility\label{compatibility}} % % These macros should work with most \TeX\ macro packages, except for % the following possible but unlikely compatibility problems: % % \begin{itemize} % % \item If you use a macro package other than \LaTeX\ that does unusual things % to end a document and/or that modifies the definition of "\end", you may % find that the last page is nor printed or that an extra page with headings % is inserted at the end of the document. This is fixable on a case-by-case % basis. See the redefinition of "\end" in "2up.tex". % % \item "2up.tex" might not work if you meddle with \TeX's "\shipout" primitive % after loading "2up.tex". % % \item If the first page of the source document is not on the first two-up % target % page (possible, for example, with two-sided printing and the "booklet" % option, but generally unlikely), "\special"'s that come at the beginning % of the document also do not get onto the first page of output. This can mess % up "\special"'s for landscape printing or % including a PostScript header file. In this case, you have to specify % these things as command line options when using your dvi driver. % % \end{itemize} % % % \section{Changes} % \begin{namelist}{V0.9xxx} % \raggedright % % \item [V0.9a] Everything redone. Too many differences to point out. % % \item [V0.9b] Interface redone again. "booklet" option added. % % \item [V0.9c] Pages ship out a little earlier. A few bugs fixed. % % Parameters "\pageseplength" and "\pagesepthickness" added. % % \item [V0.9d] Fixed bug with "\twoupclearpage" and "\twoupeject". % % \item [V0.9e] Made pages be counted (from dvi driver's viewpoint) by the % physical page number. % % \item [V0.9f] Parameter "\pagesepoffset" added, and "\pagesepthickness" % changed to "\pagesepwidth". % % \item [V1.0] None. Just seemed seemed like it was time to call it 1.0 % % \item [V1.1] Added "Booklet" and "dvidvi" target layouts. % % "\hoffset" and "\voffset" in source document now have expected effect. % % \item[V1.2] Fixed incompatibility problem with AmS-\TeX/AmS-\LaTeX. % % Added "\TwoupWrites" command. % % \end{namelist} % \end{document} % % END 2up.doc % % \end{verbatim} % % I used a slightly modified version of \file{2up.doc} as one of the % test documents for the \Lpack{booklet} package. First, to get a baseline, % I followed the instructions in \file{2up.doc} and edited and printed % it using \Lpack{2up} to get a booklet. % % I then copied \file{2up.doc} to \file{2updoc.tex} and then edited % the new file so that the first part of the preamble became: % \begin{verbatim} % %% BEGIN 2updoc.tex % %% .... % \documentclass[12pt,twoside]{article} % \usepackage[print,four]{booklet} % change options to suit % \usepackage{ifpdf} % from CTAN % % \ifpdf % \pdfoutput=1 % \setpdftargetpages % \else % \checkforlandscape % \ifuselandscape % \special{dvips} % \ifprintoption % \special{!TeXDict begin <> setpagedevice end} % \fi % \fi % \fi % % \def\FileDate.... % ... % \iffalse % \input 2up.tex % ... % % \fi and \makeatletter were here % %% PAGE NUMBERING: % ... % \@ifundefined{target@stop}... % \fi % this \fi and \makeatletter moved down from before NUMBERING % \makeatletter % % %% CONTENTS % no changes after this % ... % \end{verbatim} % % Processing, printing and folding this to make a booklet enabled me to % determine if the package effectively produced the same final result % as \Lpack{2up}. % % % \Finale % \PrintIndex % \endinput %% \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 \~}