summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2008-08-15 00:56:38 +0000
committerKarl Berry <karl@freefriends.org>2008-08-15 00:56:38 +0000
commited61f4feb45f64895eadc29ea91cfaa11aa717b1 (patch)
tree5ac8627f5b81306ac39828f48c3d8d153d49052c
parentc9cc2a8459327fcce4b4c5e2e120db41a917d1f4 (diff)
restore chngpage.sty, report from gary gray
git-svn-id: svn://tug.org/texlive/trunk@10354 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Master/texmf-dist/tex/latex/ltxmisc/chngpage.sty342
1 files changed, 342 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/ltxmisc/chngpage.sty b/Master/texmf-dist/tex/latex/ltxmisc/chngpage.sty
new file mode 100644
index 00000000000..7c7245e0b78
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/ltxmisc/chngpage.sty
@@ -0,0 +1,342 @@
+% chngpage.sty
+%
+% Provides commands to change the page layout in the middle of a document,
+% and to robustly check for typesetting on odd or even pages.
+% Instructions for use are at the end of this file.
+%
+% Author: Peter Wilson (CUA) now at peter.r.wilson@boeing.com
+% (or pandgwilson@earthlink.net)
+% Copyright 2000, 2001, 2003 Peter R. Wilson
+%
+% 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 the 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/06/01 or later.
+%
+% This work has the LPPL maintenance status "author-maintained".
+%
+% This work consists of this file.
+%
+%
+%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{chngpage}[2003/08/10 v1.2 change page layout]
+
+%% Note: internal package commands all include the string `cp@'
+%% new \if for the strict option
+\newif\ifcpstrict
+ \cpstrictfalse
+
+%% Declare and process options
+\DeclareOption{strict}{\cpstricttrue}
+\ProcessOptions\relax
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% new commands for strict checking of odd/even page
+%% Works by writing a label and then checking its pageref
+%%
+% rewritten in v1.2 to handle roman, Roman, etc page numbers
+% as well as arabic; also eliminates special code to handle
+% hyperref. Based on the code in the memoir class.
+
+\newif\ifcpoddpage
+\newcounter{cp@cnt}
+\newcounter{cp@tempcnt}
+\newcommand{\cplabelprefix}{^_}
+
+\gdef\thecp@page{\the\c@page}
+\long\def\cp@protected@write#1#2#3{% % modified \protected@write
+ \begingroup
+ \let\thecp@page\relax
+ #2%
+ \let\protect\@unexpandable@protect
+ \edef\reserved@a{\write#1{#3}}%
+ \reserved@a
+ \endgroup
+ \if@nobreak\ifvmode\nobreak\fi\fi}
+
+\DeclareRobustCommand{\checkoddpage}{%
+ \cpoddpagefalse
+ \stepcounter{cp@cnt}\cplabel{\cplabelprefix\thecp@cnt}%
+ \c@cp@tempcnt=\cp@labelref{\cplabelprefix\thecp@cnt}\relax
+ \ifodd\c@cp@tempcnt\cpoddpagetrue\fi}
+
+\newcommand{\cplabel}[1]{\@bsphack
+ \cp@protected@write\@auxout{}%
+ {\string\newcplabel{#1}{\thecp@page}}%
+ \@esphack}
+
+\newcommand{\newcplabel}[2]{{\global\@namedef{p@#1}{#2}}}
+
+\newcommand{\cp@labelref}[1]{%
+ \expandafter\ifx\csname p@#1\endcsname\relax
+ 0% % 0 if there is no label yet in aux file
+ \else
+ \csname p@#1\endcsname
+ \fi}
+
+%% end newcommands for strict checking of odd/even page
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% copy of some of the code from the ifmtarg package to save requiring ifmtarg
+\begingroup
+\catcode`\Q=3
+\long\gdef\@ifmtarg#1{\@xifmtarg#1QQ\@secondoftwo\@firstoftwo\@nil}
+\long\gdef\@xifmtarg#1#2Q#3#4#5\@nil{#4}
+\endgroup
+
+%% set the page output parameters
+%\newcommand{\ch@ngetext}{%
+\DeclareRobustCommand{\ch@ngetext}{%
+ \setlength{\@colht}{\textheight}\setlength{\@colroom}{\textheight}%
+ \setlength{\vsize}{\textheight}\setlength{\columnwidth}{\textwidth}%
+ \if@twocolumn%
+ \advance\columnwidth-\columnsep \divide\columnwidth\tw@%
+ \@firstcolumntrue%
+ \fi%
+ \setlength{\hsize}{\columnwidth}%
+ \setlength{\linewidth}{\hsize}%
+}
+
+%\newcommand{\changetext}[5]{%
+\DeclareRobustCommand{\changetext}[5]{%
+ \@ifmtarg{#1}{}{\addtolength{\textheight}{#1}}%
+ \@ifmtarg{#2}{}{\addtolength{\textwidth}{#2}}%
+ \@ifmtarg{#3}{}{\addtolength{\evensidemargin}{#3}}%
+ \@ifmtarg{#4}{}{\addtolength{\oddsidemargin}{#4}}%
+ \@ifmtarg{#5}{}{\addtolength{\columnsep}{#5}}%
+ \ch@ngetext%
+}
+
+%\newcommand{\changepage}[9]{%
+\DeclareRobustCommand{\changepage}[9]{%
+ \@ifmtarg{#1}{}{\addtolength{\textheight}{#1}}%
+ \@ifmtarg{#2}{}{\addtolength{\textwidth}{#2}}%
+ \@ifmtarg{#3}{}{\addtolength{\evensidemargin}{#3}}%
+ \@ifmtarg{#4}{}{\addtolength{\oddsidemargin}{#4}}%
+ \@ifmtarg{#5}{}{\addtolength{\columnsep}{#5}}%
+ \ch@ngetext%
+ \@ifmtarg{#6}{}{\addtolength{\topmargin}{#6}}%
+ \@ifmtarg{#7}{}{\addtolength{\headheight}{#7}}%
+ \@ifmtarg{#8}{}{\addtolength{\headsep}{#8}}%
+ \@ifmtarg{#9}{}{\addtolength{\footskip}{#9}}%
+}
+
+
+\newenvironment{adjustwidth}[3][\@empty]{%
+ \begin{list}{}{%
+ \topsep\z@%
+ \listparindent\parindent%
+ \parsep\parskip%
+ \@ifmtarg{#2}{\setlength{\leftmargin}{\z@}}{\setlength{\leftmargin}{#2}}%
+ \@ifmtarg{#3}{\setlength{\rightmargin}{\z@}}{\setlength{\rightmargin}{#3}}%
+ \ifx\@empty #1\relax \else
+ \cpoddpagefalse
+ \ifcpstrict\checkoddpage\else
+ \ifodd\c@page\cpoddpagetrue\fi
+ \fi
+ \ifcpoddpage\else % even numbered page
+ \@ifmtarg{#3}{\setlength{\leftmargin}{\z@}}{\setlength{\leftmargin}{#3}}%
+ \@ifmtarg{#2}{\setlength{\rightmargin}{\z@}}{\setlength{\rightmargin}{#2}}%
+ \fi
+ \fi}
+ \item[]}{\end{list}}
+
+
+
+\endinput
+
+% Usage:
+% ------
+%
+%%%%%%%%%%%%%
+% \changetext
+%%%%%%%%%%%%%
+% The \changetext command is for changing the size and horizontal position
+% of the text block on a page. The command takes 5 arguments, each of which
+% is a length or is empty. i.e.,
+%
+% \changetext{textheight}{textwidth}{evensidemargin}{oddsidemargin}{columnsep}
+%
+% The given lengths are added to the corresponding current lengths and
+% the remainder of the current page is typeset using the changed text block
+% layout. The new layout remains in effect until another \change... command
+% is issued.
+%
+%%%%%%%%%%%%%
+% \changepage
+%%%%%%%%%%%%%
+% The \changepage command is for changing the general layout of
+% a page. The command takes 9 arguments, each of which is a length or is empty.
+% The first 5 arguments are the same as for \changetext and have the same effect.
+% The last four arguments are:
+%
+% \changepage{5 args}{topmargin}{headheight}{headsep}{footskip}
+%
+% These lengths are added to the corresponding current lengths and
+% thus modify the vertical positions of the elements of the page. The
+% remainder of the current page is typeset using the changed text block
+% and page layout. The new layout remains in effect until another
+% \change... command is issued.
+%
+% NOTE 1: Not supplying a value for a length argument is equivalent
+% to giving it a zero length value.
+%
+% NOTE 2: For any given page, everything is constant except for the textwidth
+% and columnsep (for example, what is the meaning of two
+% topmargins on a single column page?).
+% It is therefore best to change anything else at the
+% start of a new page. Further, any changes only apply to whole
+% paragraphs. If you want an odd shaped paragraph use either
+% the hanging package or the TeX \parshape command.
+%
+% For example, to change from single column pages to double column
+% pages where the text block is both shorter and wider, then to revert
+% back to the initial layout:
+% ... single column normal page
+% \newpage % or \clearpage
+% \changetext{-5\baselineskip}{10em}{-5em}{-5em}{}
+% \twocolumn
+% ... two column pages
+% \clearpage
+% \changetext{5\baselineskip}{-10em}{5em}{5em}{}
+% \onecolumn
+% ... normal pages
+%
+% Note the adjustments to the margins which will keep the vertical centerline
+% of the textblock at the same position on the page.
+%
+% As another example, to increase the width of a single paragraph:
+%
+% \changetext{0pt}{5em}{}{}{}%
+% Start of wider paragraph text ...
+% ... end of paragraph.
+%
+% \changetext{0pt}{-5em}{}{}{}
+% Start of a normal paragraph ...
+%
+% Under some circumstances you can include a \change... command as part of
+% the argument to \afterpage (from the afterpage package) and it may work.
+% Similarly it may work in a heading style used for \thispagestyle to change
+% a single page.
+%
+%%%%%%%%%%%%%
+% adjustwidth
+%%%%%%%%%%%%%
+% Within an adjustwidth environment the left and right margins can be
+% adjusted. The environment takes one optional argument and two required
+% length arguments:
+%
+% \begin{adjustwidth}[]{leftmargin}{rightmargin}
+%
+% A positive length value will increase the relevant margin (shortening
+% the text lines) while a negative length value will decrease the margin
+% (lengthening text lines). An empty length argument means no change
+% to the margin. At the end of the environment the margins revert to
+% their original values.
+%
+% For example, to extend the text into the right margin:
+% \begin{adjustwidth}{}{-8em}
+%
+% Any appearance of the optional argument (even just []) will cause
+% the values of the margins to switch between odd and even pages.
+%
+% If the document is being set twosided it might be advantageous
+% to have any wider text extending into the outside margin. This
+% could be done via the optional argument, as:
+% \begin{adjustwidth}[]{}{-8em}
+%
+% To have the adjusted text horizontally centered with respect to
+% any surrounding text, the margins should be adjusted equally:
+% \begin{adjustwidth}{-4em}{-4em}
+%
+% For interest, \begin{quotation} is pretty much equivalent
+% to \begin{adjustwidth}{2.5em}{2.5em}
+%
+% The environment may also be used inside a float if the contents are
+% a bit too wide for the text block, but can still fit within the physical
+% page:
+% \begin{figure}
+% \begin{adjustwidth}{-2em}{-2em}
+% \includegraphics{wide}
+% \caption{Wide figure}
+% \end{adjustwidth}
+% \end{figure}
+%
+% Sometimes, because of the asynchronous nature of the TeX output
+% routine, the margin switching may be incorrect (like \marginpar sometimes)
+% near the top of a page. This can be corrected by using the package
+% option `strict' (i.e., \usepackage[strict]{chngpage}), which causes
+% adjustwidth to use the \checkoddpage command (see below).
+%
+% A disadvantage of the strict option is that the package generates
+% a new label for each adjustwidth environment, and TeX may run out
+% of space if there are an excessive number of labels in the document.
+%
+% Whether or not the strict option is used, `strict adjustwidths'
+% can be turned on by putting the command \cpstricttrue before
+% the environment, and turned of by using \cpstrictfalse.
+%
+% NOTE: In a twocolumn document, the adjustwidth environment
+% treats both columns equally. For example, if the width is meant
+% to be wider at the outer margin, then on odd pages the extra width
+% will be at the right of any column, and on even pages the extra
+% will be at the left of any column. You can get interesting effects
+% by careful hand tuning on two column pages.
+%
+%%%%%%%%%%%%%%%
+% \checkoddpage
+%%%%%%%%%%%%%%%
+% The \checkoddpage command can be used anywhere in the body of
+% a document to determine if TeX is typesetting on an odd or
+% even numbered page. If on an odd page then \ifcpoddpage is
+% set TRUE, otherwise (on an even page) \ifcpoddpage is set
+% FALSE.
+%
+% This works by the \checkoddpage command generating a label and
+% then checking the \pageref for the label (actually, a special version
+% of \pageref is required and is used internally by \checkoddpage).
+% This mechanism requires at least two LaTeX passes to ensure that
+% the labels have settled (on the initial pass there will be no labels
+% in the *.aux file to be checked).
+%
+% The label identifier is composed of the command \cplabelprefix
+% and an automatically generated number. \cplabelprefix, initially
+% defined as `^_', can be changed in the preamble if it will cause
+% a clash with any author-defined labels. The default labels will
+% be of the form `^_N' where N is a positive integer.
+%
+% Changes in version 1.2 (2003/08/10)
+% ----------------------
+% o Fixed \checkoddpage to handle page numbers other than arabic
+% o Eliminated special \checkoddpage code for hyperref
+%
+% Changes in version 1.1c (2001/02/24)
+% -----------------------
+% o Fixed problem when used with the calc package
+% (can't do \setcounter{cp@tempcnt}{\cp@pageref{....}}
+% o Fixed problem when used with the hyperef package
+% (hyperref adds new arguments to \newlabel in the *.aux file)
+%
+% Changes in version 1.1b (2001/01/31)
+% -----------------------
+% o Added strict option for robust adjustwidth; checks odd/even
+% pages via labels instead of by the page counter.
+%
+% Changes in version 1.1a (2001/01/18)
+% -----------------------
+% o Added missing {} in last 4 arguments of \changepage
+%
+% Changes in version 1.1 (2000/07/22)
+% ----------------------
+% o Empty arguments made available
+% o Added adjustwidth environment
+%
+%
+% Peter W.
+%
+%