From ed61f4feb45f64895eadc29ea91cfaa11aa717b1 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Fri, 15 Aug 2008 00:56:38 +0000 Subject: restore chngpage.sty, report from gary gray git-svn-id: svn://tug.org/texlive/trunk@10354 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/ltxmisc/chngpage.sty | 342 +++++++++++++++++++++++ 1 file changed, 342 insertions(+) create mode 100644 Master/texmf-dist/tex/latex/ltxmisc/chngpage.sty 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. +% +% -- cgit v1.2.3