diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-11 23:58:38 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-11 23:58:38 +0000 |
commit | 970069682b77600b8873f40bf6ad8f5870b36cde (patch) | |
tree | 1d19b5812421800aba40c5338d337060b4fab3f6 | |
parent | 7a11ab69c04f29af8eaa0fa74d53803decbbf357 (diff) |
trunk/Master/texmf-dist/source/latex/twoup
git-svn-id: svn://tug.org/texlive/trunk@565 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r-- | Master/texmf-dist/source/latex/twoup/twoup.dtx | 777 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/twoup/twoup.ins | 33 |
2 files changed, 810 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/twoup/twoup.dtx b/Master/texmf-dist/source/latex/twoup/twoup.dtx new file mode 100644 index 00000000000..f1066c87165 --- /dev/null +++ b/Master/texmf-dist/source/latex/twoup/twoup.dtx @@ -0,0 +1,777 @@ +% \iffalse +% This is the twoup package, twoup.dtx +% Copyright 2005 by Mogens Lemvig Hansen. +% +% Run this file through LaTeX and read the documentation in twoup.dvi +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This work has the LPPL maintenance status "maintained". +% +% This Current Maintainer of this work is Mogens Lemvig Hansen. +% +% This work consists of the files twoup.dtx and twoup.ins +% and the derived file twoup.sty. +% +%<*docdriver> +\documentclass{ltxdoc}[1996/01/11] +\usepackage{url} +%\discretionaries |~!@$%^&*()_+`=#{"}[]:;'<>,.?\/| +%\CodelineIndex%\EnableCrossrefs +\makeatletter +\newcommand{\nextlinelabel}[2][1]{\@bsphack + \@tempcnta\c@CodelineNo + \advance\@tempcnta#1\relax + \def\@currentlabel{\the\@tempcnta}\label{#2}% + \@esphack} +\makeatother +\begin{document} \DocInput{twoup.dtx} \end{document} +%</docdriver> +% \fi +% \CheckSum{324} +% \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 \~} +% +% \def\fileversion{1.2} \def\filedate{2005/7/25} \def\docdate{\filedate} +% \title{The \textsf{twoup} Package\thanks{This file describes version +% \fileversion, \filedate.}} +% \author{\copyright\ Mogens Lemvig Hansen\thanks{% +% The \textsf{twoup} package is distributed under the \LaTeX\ Project +% Public License; please see Section~\ref{sec:license}.}\\ +% mlhansen@uniserve.com} +% \date{\docdate} +% \maketitle +% \begin{abstract} +% The \textsf{twoup} assists in two-up or booklet printing +% using the \textsf{2up} or \textsf{booklet} packages +% or using the psnup program and friends. +% \end{abstract} +% +% \tableofcontents\bigskip +% +% I am familiar with three ways of producing two-up +% documents\footnote{That is, printing two logical pages side by +% side on one side of one sheet of paper.} and +% booklets:\footnote{That is, rearranging the logical pages before +% printing them two-up on both sides of the paper in such a manner +% that the resulting sheets of paper can be folded down the middle +% into a small book.} the \textsf{2up} package, the \textsf{booklet} +% package, and the postscript tool psnup. +% The \textsf{2up} and \textsf{booklet} packages are both available +% from CTAN, and psnup is included with many \TeX\ distributions +% including MiK\TeX. All three will by default +% accomplish this task by scaling the page down. However, a one-up +% page layout does not necessarily work well when scaled. The +% \textsf{twoup} package provides a page layout designed for two-up +% printing and sets the relevant \textsf{2up} or \textsf{booklet} +% parameters or gives advise on how to use the postscript tools. +% +% \section{Usage} +% Give the paper size you intend to print on as an option to +% \verb:\documentclass:.\footnote{If you intend to print on your +% default paper size, you do not have to give any paper size +% option.} The \textsf{twoup} package re-calculates the paper size +% and margins for two-up printing.\footnote{If you print on +% \texttt{a4paper}, \textsf{twoup} calculates the same paper size as +% the \texttt{a5paper} option but with different (smaller) margins. +% You may consider this discrepancy either a bug or a feature.} +% Then choose the method: +% +% \subsection{Plain two-up with the \textsf{2up} package} +% Load the \textsf{2up} package \emph{before} the \textsf{twoup} +% package. +% \begin{quote} +% \verb:\documentclass[a4paper,12pt]{article}:\\ +% \verb:\usepackage{2up}:\\ +% \verb:\usepackage{twoup}: +% \end{quote} +% +% Unfortunately cross references may not work out under the +% \textsf{2up} package. The solution is, as explained in the +% \textsf{2up} documentation, to comment out the +% \verb:\usepackage{2up}: line, run your .tex file through \LaTeX\ +% until all references work out, then load \textsf{2up} again and run +% your document through \LaTeX\ once (an only once). +% +% \subsection{Booklets with the \textsf{booklet} package} +% Load the \textsf{booklet} package \emph{before} the \textsf{twoup} +% package. +% \begin{quote} +% \verb:\documentclass[letterpaper,12pt]{article}:\\ +% \verb:\usepackage[print]{booklet}:\\ +% \verb:\usepackage{twoup}: +% \end{quote} +% Without the \verb:print: option, the \textsf{booklet} package does +% nothing. +% +% The \textsf{booklet} package has miraculously solved the +% cross-reference problem of the \textsf{2up} package but does not +% provide a plain two-up option. +% +% \subsection{Plain two-up with the postscript tools} +% Simply load the \textsf{twoup} package. +% \begin{quote} +% \verb:\documentclass[letterpaper,12pt]{article}:\\ +% \verb:\usepackage{twoup}: +% \end{quote} +% When you run your .tex file through \LaTeX, the \textsf{twoup} +% package will tell you which options to use with the psnup program; +% look for the psnup command line near the end of the +% transcript.\footnote{Both on screen and in the .log file.} If you +% give a paper size option, the \textsf{twoup} package will also +% tell you which lines you will have to add to your postscript file +% by hand. +% +% Run the .dvi file through dvips\footnote{The current version of +% the \textsf{twoup} package requires that you use dvips. If you +% want to use some other .dvi-to-postscript program, please see code +% line~\ref{line:dvips} and the commentary around it.} to make a +% postscript file. +% \begin{quote} +% \verb:dvips: \meta{file} +% \end{quote} +% +% Then run psnup with the options that the \textsf{twoup} package +% gave you above. Even Win95 allows you to cut-and-paste the +% command line which could look something like this: +% \begin{quote} +% \verb:psnup: \verb:-pletter: \verb:-W396.0pt: \verb:-H612.0pt: +% \verb:-2: \meta{file}\verb:.ps: \meta{twoup}\verb:.ps: +% \end{quote} +% +% The postscript file, \meta{twoup}\verb:.ps:, has by now lost all +% consciousness of which paper size it is to be printed on. If you +% are about to print on your printer's default paper size, that is +% no problem. To print on any other paper size you most likely have +% to place a paper size command in \meta{twoup}\verb:.ps:. With a +% plain text editor add the lines \textsf{twoup} gave you in the +% \LaTeX\ run to \meta{twoup}\verb:.ps:. The lines to add could look +% like this: +% \begin{quote} +% \verb;%%BeginPaperSize: letter;\\ +% \verb;letter;\\ +% \verb;%%EndPaperSize; +% \end{quote} +% Place the new lines just after the +% \verb:%%EndComments: line near the top of \meta{twoup}\verb:.ps:. +% +% \subsection{Booklets with the postscript tools} +% The \LaTeX\ side of making booklets is much like simple two-up. +% You may want to use the \texttt{twoside} option to +% \verb:\documentclass: to make the inner margins a bit larger etc. +% \begin{quote} +% \verb:\documentclass[a4paper,11pt,twoside]{article}:\\ +% \verb:\usepackage{twoup}: +% \end{quote} +% As above, the \textsf{twoup} package will advise you on which +% options to use with the psnup program. Run your .dvi file through +% dvips: +% \begin{quote} +% \verb:dvips: \meta{file} +% \end{quote} +% +% Now the fun begins: Before using psnup you must use the psbook +% program to fold your postscript file into a signature: +% \begin{quote} +% \verb:psbook: \meta{file}\verb:.ps: \meta{book}\verb:.ps: +% \end{quote} +% The number of pages in a signature must be divisible by four, so +% psbook may add a few blank pages to the end of your booklet. Run +% the result through psnup with the options the \textsf{twoup} +% package calculated in the \LaTeX\ run. The command line could look +% something like this:\footnote{Under Unix, you can pipe the psbook +% and psnup commands together; Windows, however, does not like long +% command lines.} +% \begin{quote} +% \verb:psnup: \verb:-pa4: \verb:-Pa5: +% \verb:-2: \meta{book}\verb:.ps: \meta{twoup}\verb:.ps: +% \end{quote} +% +% Unless you are about to print on your printer's default paper +% size, add the paper size command to \meta{twoup}\verb:.ps: as +% above. +% +% You can print your postscript file, \meta{twoup}\verb:.ps:, now, +% but if you want to print double sided, you may have to split the +% file in two with the psselect program: +% \begin{quote} +% \verb:psselect: \verb:-o: \meta{twoup}\verb:.ps: +% \meta{odd}\verb:.ps:\\ +% \verb:psselect: \verb:-e: +% \meta{twoup}\verb:.ps: \meta{even}\verb:.ps: +% \end{quote} +% Then print \meta{odd}\verb:.ps:, turn the paper over, and print +% \meta{even}\verb:.ps:.\footnote{Depending on your printer, you may +% want to use psselect's \texttt{-r} option to print the \meta{even} +% pages in reverse order.} +% +% \subsection{Options} +% By default the \textsf{twoup} package leaves room for running +% headers and footers. Use the \texttt{noheadfoot}, +% \texttt{nofoot}, or \texttt{nohead} option to reclaim that space. +% As a side efect, these options set the page style: +% \texttt{noheadfoot} implies the \texttt{empty} page style, +% \texttt{nofoot} implies the \texttt{headings} page style, and +% \texttt{nohead} implies the \texttt{plain} page style. Moreover, +% the \texttt{nofoot} and \texttt{noheadfoot} options disable the +% \texttt{plain} page style\footnote{By making \texttt{plain} +% synonymous with the \texttt{empty} style.} to prevent the +% \verb:\chapter: command from inserting a +% \verb:\thispagestyle{plain}: command. +% +% The \textsf{twoup} package knows the standard paper size options: +% \texttt{letterpaper}, \texttt{legalpaper}, +% \texttt{executivepaper}, \texttt{a4paper}, \texttt{a5paper}, and +% \texttt{b5paper}. You should use these options as global options +% to \verb:\documentclass:. If you print two-up on +% \texttt{legalpaper}, the text width is larger than what is +% considered comfortable. You should use the \texttt{twocolumn} +% option to \verb:\documentclass: or, better, the \textsf{multicol} +% package. +% +% If you use \textsf{twoup} without \textsf{2up} or +% \textsf{booklet}, then the \textsf{twoup} package will insert a +% paper-size \verb:\special: in your .dvi file. Use the +% \verb:nospecial: option to suppress this. +% +% \subsection{Additional commands}% +% \DescribeMacro{\cleartolastpage}% +% If you are making a booklet, the number of pages must be divisible +% by four; indeed, the \textsf{booklet} package or the psbook +% program will add blank pages as necessary. If, however, you want +% to print on the last page, the back of your booklet, you can use +% the \verb:\cleartolastpage: command in a \verb:twosided: context +% to (print all pending tables, figures, and footnotes and) insert +% as many blank pages as necessary to reach a page number divisible +% by four. In detail, +% \begin{quote} +% \verb:\cleartolastpage:\oarg{div}\oarg{rem}\\ +% \verb:\cleartolastpage*:\oarg{div}\oarg{rem} +% \end{quote} +% both print all pending floats and insert blank pages until the +% page number leaves remainder \meta{rem} when divided by +% \meta{div}. The default value of \meta{rem} is~$0$, and the +% default value of \meta{div} is~$4$ under the \verb:twosided: class +% option and $2$ otherwise. The starred version suppresses the +% printing of page numbers on the inserted blank pages. +% +% Thus \verb:\cleartolastpage[1]: is equivalent to \LaTeX's +% \verb:\clearpage: command +% and \verb:\cleartolastpage[2][1]: is equivalent to +% \verb:\cleardoublepage:. +% +% The \verb:\cleartolastpage: command may fail to put you one the +% last page if page~$1$ is not the very first page (maybe because +% you have differently numbered front matter); use the optional +% \meta{rem} argument to overcome this. +% +% +% \section{Installation} +% As you must have figured, you generate the documentation for the +% \textsf{twoup} package by running the file \url:twoup.dtx: through +% \LaTeX---thrice to resolve cross references. +% +% To extract the package itself from the .dtx file, run +% \url:twoup.ins: through \LaTeX: +% \begin{quote} +% \verb:latex twoup.ins: +% \end{quote} +% You now have to decide what to do with several files. +% \begin{itemize} +% \item You may have to move the file \url:twoup.sty: to some +% directory where \LaTeX\ can find it; +% \url:(local)texmf/tex/latex/misc: would be the natural +% choice~\cite{tds}. +% +% \item Move the documentation, \url:twoup.dvi: or \url:twoup.pdf:, +% to \url:(local)texmf/doc/latex/misc:. +% +% \item You may discard the source files, \url:twoup.dtx: and +% \url:twoup.ins:, or store them in +% \url:(local)texmf/source/latex/misc:. +% +% \item Discard all remaining \url:twoup.*: files. +% \end{itemize} +% +% +% \section{Limitations} +% The \textsf{twoup} package is designed for and tested on +% \texttt{letterpaper}, \texttt{legalpaper}, and \texttt{a4paper}. +% Printing two-up on smaller paper is hardly feasible; printing on +% larger paper is beyond the normal desktop printer. +% +% The margins calculated by \textsf{twoup} are too small for +% \verb:\marginpar:s.\footnote{But just large enough for the line +% numbers inserted by the \textsf{lineno} package.} +% +% If you print two-up on \texttt{legalpaper}, \textsf{twoup} leaves +% a text width larger than what is considered comfortable. You +% should use the \texttt{twocolumn} option to \verb:\documentclass: +% or, better, the \textsf{multicol} package. +% +% The \textsf{twoup} package is not compatible with the +% \textsf{geometry} package. Both packages re-calculate the margins +% and the disagree on the interpretation of the paper size options. +% +% I know very little about postscript, yet I tell you to go add +% lines to .ps files. The advise \textsf{twoup} gives has always +% worked for me; if it doesn't work for you, please teach me the +% correct way. +% +% The current implementation of \textsf{twoup} requires dvips +% (unless you use the \textsf{2up} or \textsf{booklet} packages). +% This limitation is easily overcome with your help: please see code +% line~\ref{line:dvips} and the commentary around it. +% +% +% \section{License}\label{sec:license} +% This work may be distributed and/or modified under the +% conditions of the \LaTeX\ Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% \url{http://www.latex-project.org/lppl.txt} +% and version 1.3 or later is part of all distributions of \LaTeX\ +% version 2003/12/01 or later. +% +% This work has the LPPL maintenance status ``maintained.'' +% +% This Current Maintainer of this work is Mogens Lemvig Hansen. +% +% This work consists of the files \url{twoup.dtx} and \url{twoup.ins} +% and the derived file \url{twoup.sty}. +% +% +% \StopEventually{ +% \nocite{ltclass} +% \bibliographystyle{is-plain} +% ^^A\bibliography{tex} +% \begin{thebibliography}{1} +% +% \bibitem{ltclass} +% Leslie Lamport, Frank Mittelbach, and Johannes Braams. +% \newblock {\em Standard Document Classes for \LaTeX\ version 2e}. +% \newblock CTAN, 1999/09/10 edition, 1999. +% +% \bibitem{tds} +% {TUG Working Group on a {\TeX} Directory Structure (TWG-TDS)}. +% \newblock {\em A Directory Structure for {\TeX} Files}. +% \newblock CTAN, version 0.9995, January 26, 1998 edition, 1998. +% +% \end{thebibliography} +% } +% +% \section{Implementation} +% The \textsf{twoup} package doesn't have to do much---just +% re-calculate the paper size and the margins and put together the +% advise on how to use the psnup program. The \textsf{twoup} package +% does its thing based on the plain \LaTeX\ parameters +% \verb:\paperwidth:, \verb:\paperheight:, \verb:\headheight:, +% \verb:\headsep:, \verb:\footskip:, \verb:\topskip:, and +% \verb:\baselineskip:. +% +% \subsection{Identification} +% \begin{macrocode} +%<*package> +\NeedsTeXFormat{LaTeX2e}% +\ProvidesPackage{twoup}[2005/07/25 version 1.2] +% \end{macrocode} +% +% \subsection{Declaration of Options} +% The \texttt{noheadfoot} option sets the relevant lenghts to zero. +% Since there is no room for headers or footers, the only sensible +% page style is \texttt{empty}. The \verb:\chapter: command issues +% a \verb:\thispagestyle{plain}: command, so re-define the +% \texttt{plain} style to be a synonym for the \texttt{empty} +% style.\footnote{I borrowed the idea of brutally making +% \texttt{plain} a synonym for \texttt{empty} from David Carlisle's +% \textsf{nopageno} package.} +% \begin{macrocode} +\DeclareOption{noheadfoot}{% + \setlength{\headheight}{0pt}% + \setlength{\headsep}{0pt}% + \setlength{\footskip}{0pt}% + \let\ps@plain\ps@empty + \pagestyle{empty}} +% \end{macrocode} +% With room for a header but without a footer the most sensible page +% style would be \texttt{headings}. Again the \texttt{plain} page +% style must be disabled. +% \begin{macrocode} +\DeclareOption{nofoot}{% + \setlength{\footskip}{0pt}% + \let\ps@plain\ps@empty + \pagestyle{headings}} +% \end{macrocode} +% With room for a footer but no header the most sensible page style +% is \texttt{plain}---so don't change \texttt{plain}. +% \begin{macrocode} +\DeclareOption{nohead}{% + \setlength{\headheight}{0pt}% + \setlength{\headsep}{0pt}% + \pagestyle{plain}} +% \end{macrocode} +% +% \begin{macro}{\TwoUp@info} +% \begin{macro}{\TwoUp@paper} +% The paper size options record part of the advise on how to use the +% psnup program in \verb:\TwoUp@info: and part of the advise on how +% to edit the final postscript file in \verb:\TwoUp@paper:. +% \begin{macrocode} +\DeclareOption{letterpaper}{% + \def\TwoUp@info{-pletter -W5.5in -H8.5in}% + \def\TwoUp@paper{letter}}% +\DeclareOption{legalpaper}{% + \def\TwoUp@info{-plegal -W7in -H8.5in}% + \def\TwoUp@paper{legal}}% +\DeclareOption{executivepaper}{% + \def\TwoUp@info{-pexecutive -W5.25in -H7.25in}% + \def\TwoUp@paper{executive}}% +\DeclareOption{a4paper}{% + \def\TwoUp@info{-pa4 -Pa5}% + \def\TwoUp@paper{a4}}% +\DeclareOption{a5paper}{% + \def\TwoUp@info{-pa5 -W105mm -H148mm}% + \def\TwoUp@paper{a5}}% +\DeclareOption{b5paper}{% + \def\TwoUp@info{-pb5 -W125mm -H176mm}% + \def\TwoUp@paper{b5}}% +% \end{macrocode} +% \end{macro}\end{macro} +% +% \begin{macro}{\TwoUp@special} +% The \textsf{twoup} package needs to record the (smaller) paper +% size in the postscript file. That means placing a suitable +% \verb:\special: command in the .dvi file. Unfortunately, +% ``suitable'' depends on which .dvi-to-postscript program you use, +% so we need an option for each such program. I have implemented +% the option for dvips but was too lazy to figure out the +% appropriate command for other .dvi-to-postscript +% programs.\nextlinelabel[2]{line:dvips} +% \begin{macrocode} +\DeclareOption{dvips}{% + \def\TwoUp@special{% + \special{papersize=\the\paperwidth,\the\paperheight}}} +% \end{macrocode} +% If you need to use the \textsf{twoup} package with another +% postscript driver, please let me know so I can incorporate more +% options in future releases of \textsf{twoup}. While you wait for +% that, use the \texttt{nospecial} option to suppress the +% \verb:\special:. +% \begin{macrocode} +\DeclareOption{nospecial}{% + \def\TwoUp@special{\relax}} +% \end{macrocode} +% \end{macro} +% +% \subsection{Execution of Options} +% Default to dvips leaving space for headers and footer as the class +% sees fit. +% \begin{macrocode} +\ExecuteOptions{dvips} +\ProcessOptions +% \end{macrocode} +% +% \subsection{Main Code} +% \subsubsection{Paper Size and psnup Advise} +% \begin{macro}{\TwoUp@info} +% Before re-calculating the paper size, we must record part of the +% psnup advise. If a paper size option did that already, all is +% fine. Otherwise we must be printing on the default paper size +% which we must then determine. We will try to recognize the most +% common default paper sizes: a4, letter, and legal. Since this is +% the default paper size, we may assume that the printer knows how +% to handle it. We therefore suppress the advise on editing the +% final postscript file by \emph{not} defining \verb:\TwoUp@paper:. +% \begin{macrocode} +\ifx\TwoUp@info\undefined + \setlength{\@tempdima}{8.5in} + \ifdim\paperwidth=\@tempdima + \setlength{\@tempdima}{11in} + \ifdim\paperheight=\@tempdima + \def\TwoUp@info{-pletter -W5.5in -H8.5in} + \fi + \setlength{\@tempdima}{14in} + \ifdim\paperheight=\@tempdima + \def\TwoUp@info{-plegal -W7in -H8.5in} + \fi + \fi + \setlength{\@tempdima}{210mm} + \ifdim\paperwidth=\@tempdima + \setlength{\@tempdima}{297mm} + \ifdim\paperheight=\@tempdima + \def\TwoUp@info{-pa4 -Pa5} + \fi + \fi +\fi +% \end{macrocode} +% If \verb:\TwoUp@info: is still undefined, we give up and use the +% \verb:-w: and \verb:-h: options to psnup.\footnote{We could of +% course have used the \texttt{-w} and \texttt{-h} options also for +% a4, letter, and legal sized paper, but the psnup command line +% looks a lot prettier with a \texttt{-pa4}, \texttt{-pletter}, or +% \texttt{-plegal} option.} +% \begin{macrocode} +\ifx\TwoUp@info\undefined + \PackageWarningNoLine{twoup}{Unknown paper size. + You may want to use a \MessageBreak + paper size option like letterpaper} +% \end{macrocode} +% \TeX\ displays \verb:\the\paperwidth: as however many \emph{pt}, +% by which \TeX\ means traditional points; one inch is $72.27$\,pt. +% However, psnup expects the paper width as so-and-so many +% \emph{pt}, by which psnup means postscript points, the unit \TeX\ +% calls \emph{bp}, or big points; one inch is $72$\,bp. To overcome +% this confusion, we must multiply by $\frac{72}{72.27}$ or +% $0.99627$. +% \begin{macrocode} + \setlength{\@tempdima}{0.99627\paperwidth} +% \end{macrocode} +% The \verb:\@settopoint: command rounds (down) to an integer. +% Rounding causes the psnup command line to be slightly wrong but +% less ugly. +% \begin{macrocode} + \@settopoint\@tempdima +% \end{macrocode} +% Then record the information in \verb:\TwoUp@info:. The psnup +% syntax for the output paper size is \verb:-w:\meta{width} +% \verb:-h:\meta{height}. +% \begin{macrocode} + \edef\TwoUp@info{-w\the\@tempdima} +% \end{macrocode} +% Record the paper height in the same manner. +% \begin{macrocode} + \setlength{\@tempdima}{0.99627\paperheight} + \@settopoint\@tempdima + \edef\TwoUp@info{\TwoUp@info\space -h\the\@tempdima} +% \end{macrocode} +% Then add the input paper size to the list of psnup options. The +% syntax for the input paper size is \verb:-W:\meta{width} +% \verb:-H:\meta{height}. As before, we must correct for the +% confusion between traditional and postscript points. +% \begin{macrocode} + \setlength{\@tempdima}{0.5\paperheight} + \setlength{\@tempdima}{0.99627\@tempdima} + \@settopoint\@tempdima + \edef\TwoUp@info{\TwoUp@info\space -W\the\@tempdima} + \setlength{\@tempdima}{0.99627\paperwidth} + \@settopoint\@tempdima + \edef\TwoUp@info{\TwoUp@info\space -H\the\@tempdima} +\fi +% \end{macrocode} +% \end{macro} +% +% The advise on psnup options is ready; now we must decide whether +% to use it. But first change the paper size: swap the width and +% the height; then divide the new width by two. +% \begin{macrocode} +\setlength{\@tempdima}{\paperwidth} +\setlength{\paperwidth}{0.5\paperheight} +\setlength{\paperheight}{\@tempdima} +% \end{macrocode} +% If either the \textsf{2up} or \textsf{booklet} package is loaded, +% ignore the psnup advise and issue suitable \verb:\source: and +% \verb:\target: commands---both \textsf{2up} and \textsf{booklet} +% define \verb:\source: and \verb:\target:. +% \begin{macrocode} +\@ifpackageloaded{2up}{% + \source{\magstep0}{\paperwidth}{\paperheight}% + \target{\magstep0}{2\paperwidth}{\paperheight}% +}{% +\@ifpackageloaded{booklet}{% + \source{\magstep0}{\paperwidth}{\paperheight}% + \target{\magstep0}{2\paperwidth}{\paperheight}% +}{% +% \end{macrocode} +% Otherwise we are going the postscript route. Record the new +% smaller paper size in the postscript file by placing a suitable +% \verb:\special: command in the .dvi file. +% \begin{macrocode} + \TwoUp@special +% \end{macrocode} +% Then have the psnup advise presented at the end of the \LaTeX\ +% run. Using \verb:\PackageInfo: would have been natural, but I want +% the advise to appear on the screen (as well as in the .log file); +% also the psnup command line is rather long, so we need \emph{ad +% hoc} formatting. +% \begin{macrocode} + \AtEndDocument{\typeout{^^J% + Package twoup Info: Use psnup with these options:^^J% + psnup \TwoUp@info\space -2 \jobname.ps twoup.ps^^J}} +% \end{macrocode} +% If we had an explicit paper size option (indicating that we are to +% print on a paper size other than the default), \verb:\TwoUp@paper: +% is defined and we can give advise on editing the postscript file. +% \begin{macrocode} + \ifx\TwoUp@paper\undefined\else + \AtEndDocument{\typeout{^^J% + Package twoup Info: You may have to add these + three lines to your .ps file:^^J% + \@percentchar\@percentchar BeginPaperSize: \TwoUp@paper^^J% + \TwoUp@paper^^J% + \@percentchar\@percentchar EndPaperSize^^J}} + \fi% +}}% +% \end{macrocode} +% +% \subsubsection{Text Width and Horizontal Margins} +% The standard \LaTeX\ classes~\cite{ltclass} ensure that the line +% length is not too large for comfortable reading. For two-up +% printing on \texttt{letterpaper}, \texttt{a4paper}, or smaller, +% that is a non-issue. However, \texttt{legalpaper} does leave room +% for oversized lines.\footnote{Up to 25\% ``too large.''} If I +% leave the line length ``small,'' the layout of the two-up printed +% page looks odd. I therefore allow the oversized lines. The user +% should consider using \texttt{twocolumn} mode or---better---the +% \textsf{multicol} package. +% +% I think that a total horizontal margin of one inch looks +% fine.\footnote{Fine enough to just leave room (in \texttt{oneside} +% mode) for the numbers added by the \textsf{lineno} package.} The +% \verb:\textwidth: is then what is left of the \verb:\paperwidth:. +% \begin{macrocode} +\setlength{\@tempdima}{1in} +\setlength{\textwidth}{\paperwidth} +\addtolength{\textwidth}{-\@tempdima} +% \end{macrocode} +% If we are printing in \texttt{twoside} mode, the inner margin +% should be larger than the outer margin. A ratio of about $1:2$ +% looks fine. The outer margin is then what is left of the total +% horizontal margin. +% \begin{macrocode} +\if@twoside + \setlength{\evensidemargin}{0.33\@tempdima} + \setlength{\oddsidemargin}{\@tempdima} + \addtolength{\oddsidemargin}{-\evensidemargin} +\else +% \end{macrocode} +% In \texttt{oneside} mode, simply split the margins even. +% \begin{macrocode} + \setlength{\oddsidemargin}{0.5\@tempdima} + \setlength{\evensidemargin}{\oddsidemargin} +\fi +% \end{macrocode} +% +% So far we have ignored that the ``real'' left margin is +% \verb:1 inch:${}+{}$\verb:\hoffset:${}+{}$\verb:\oddsidemargin: +% (or \verb:\evensidemargin:). We must subtract that inch. +% \begin{macrocode} +\addtolength{\oddsidemargin}{-1in} +\addtolength{\evensidemargin}{-1in} +% \end{macrocode} +% +% \subsubsection{Text Height and Vertical Margins} +% A top margin of half an inch looks good to me. As a first +% approximation for the text height, simply subtract all the header +% and footer stuff from the paper height. (Subtract +% \verb:\topmargin: twice for the sake of the bottom margin.) +% \begin{macrocode} +\setlength{\topmargin}{0.5in} +\setlength{\textheight}{\paperheight} +\addtolength{\textheight}{-2\topmargin} +\addtolength{\textheight}{-\headheight} +\addtolength{\textheight}{-\headsep} +\addtolength{\textheight}{-\footskip} +% \end{macrocode} +% +% The text height must then be corrected to fit an integer number of +% lines. The first line has height \verb:\topskip: while all other +% lines have height \verb:\baselineskip:. Thus subtract +% \verb:\topskip: and divide by \verb:\baselineskip:. +% \begin{macrocode} +\addtolength{\textheight}{-\topskip} +\divide\textheight\baselineskip +% \end{macrocode} +% The \verb:\divide: command performs integer division, so +% \verb:\textheight: is now \meta{number of lines}\,sp. Store the +% result in a counter to get a \emph{bona fide} number. +% \begin{macrocode} +\@tempcnta\textheight +% \end{macrocode} +% Now we can calculate the text height: the correct number of +% \verb:\baselineskip:s plus a \verb:\topskip: for the first line. +% \begin{macrocode} +\setlength{\textheight}{\@tempcnta\baselineskip} +\addtolength{\textheight}{\topskip} +% \end{macrocode} +% +% Again, the ``real'' top margin is +% \verb:1 inch:${}+{}$\verb:\voffset:${}+{}$\verb:\topmargin:, +% so subtract one inch from \verb:\topmargin:. +% \begin{macrocode} +\addtolength{\topmargin}{-1in} +% \end{macrocode} +% +% \begin{macro}{\cleartolastpage} +% The \verb:\cleartolastpage: command clears the page, checks for a +% star, prepares to issue a suitable \verb:\thispagestyle: command, +% and passes control to \verb:\cleartolastp@ge:. +% \begin{macrocode} +\newcommand{\cleartolastpage}{% + \clearpage + \@ifstar + {\def\TwoUp@blankpagestyle{\thispagestyle{empty}}\cleartolastp@ge} + {\let\TwoUp@blankpagestyle\relax\cleartolastp@ge}} +% \end{macrocode} +% The \verb:\cleartolastp@ge: command stores the first optional +% argument, \meta{div}, in the temporary counter \verb:\@tempcnta: +% with a default that depends on the \verb:twoside: class option. +% \begin{macrocode} +\if@twoside + \newcommand{\cleartolastp@ge}[1][4]{% + \@tempcnta#1\relax + \cleartol@stp@ge}% +\else + \newcommand{\cleartolastp@ge}[1][2]{% + \@tempcnta#1\relax + \cleartol@stp@ge}% +\fi +% \end{macrocode} +% The \verb:\cleartol@stp@ge: command does the real work: store a +% copy of the page number, \verb:\c@page:, in a temporary counter, +% divide and multiply by \meta{div} to round down to a multiple of +% \meta{div}, and add \meta{rem}. +% \begin{macrocode} +\newcommand{\cleartol@stp@ge}[1][0]{% + \@tempcntb\c@page + \divide\@tempcntb\@tempcnta + \multiply\@tempcntb\@tempcnta + \advance\@tempcntb#1\relax +% \end{macrocode} +% Now \verb:\@tempcntb: leaves remainder \meta{rem} when divided by +% \meta{div}, but it may still be smaller than the page number. If +% so, add \meta{div} to get the next number that leaves the same +% remainder. +% \begin{macrocode} + \ifnum\@tempcntb<\c@page + \advance\@tempcntb\@tempcnta + \fi +% \end{macrocode} +% Now \verb:\@\tempcntb: is the page number we want to reach. +% \begin{macrocode} + \loop\ifnum\c@page<\@tempcntb + \hbox{}\TwoUp@blankpagestyle\newpage + \repeat +} +%</package> +% \end{macrocode} +% \end{macro} +% \Finale diff --git a/Master/texmf-dist/source/latex/twoup/twoup.ins b/Master/texmf-dist/source/latex/twoup/twoup.ins new file mode 100644 index 00000000000..71632cea6ea --- /dev/null +++ b/Master/texmf-dist/source/latex/twoup/twoup.ins @@ -0,0 +1,33 @@ +% The twoup package, version 1.2.
+\input docstrip.tex
+\preamble
+
+
+ This is the twoup package
+ Copyright 2005 by Mogens Lemvig Hansen,
+ mlhansen@uniserve.com
+
+Run twoup.dtx through LaTeX and read the documentation in twoup.dvi
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of LaTeX
+version 2003/12/01 or later.
+
+This work has the LPPL maintenance status "maintained".
+
+This Current Maintainer of this work is Mogens Lemvig Hansen.
+
+This work consists of the files twoup.dtx and twoup.ins
+and the derived file twoup.sty.
+
+\endpreamble
+% I think that \path:twoup.sty: should go into the directory
+% \path:tex/latex/misc:; however, \textsc{DocStrip} will not heed my advise
+% unless your configuration file, \path:docstrip.cfg:, allows it to.
+\usedir{tex/latex/misc}
+\generate{\file{twoup.sty}{\from{twoup.dtx}{package}}}
+\endbatchfile
|