summaryrefslogtreecommitdiff
path: root/Master/texmf-dist
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2008-03-28 23:17:45 +0000
committerKarl Berry <karl@freefriends.org>2008-03-28 23:17:45 +0000
commit047de128c28ad2e92c3c27a20974622d439e5757 (patch)
tree17cb1387cd64af82c3709af339dcb07c4f7116ce /Master/texmf-dist
parent621824913ca6d3bfb1995ff09e4c254756cb6b42 (diff)
new latex package changepage (27mar08)
git-svn-id: svn://tug.org/texlive/trunk@7208 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r--Master/texmf-dist/tex/latex/changepage/changepage.sty347
1 files changed, 347 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/changepage/changepage.sty b/Master/texmf-dist/tex/latex/changepage/changepage.sty
new file mode 100644
index 00000000000..880883ee4d0
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/changepage/changepage.sty
@@ -0,0 +1,347 @@
+% changepage.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.
+%
+% This package is an extraction of code from the memoir class. It is
+% intended to eventually replace the chngpage package.
+%
+% Author: Peter Wilson (Herries Press)
+% (occasionaly at herries dot press (at) earthlink dot net)
+% Copyright 2008 Peter R. Wilson
+%
+% If you have any questions you will probably get better and faster
+% answers if you ask them on the comp.text.tex newsgroup as I am away
+% more often than I am here.
+%
+% 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{changepage}[2008/03/22 v1.0 check page and change page layout]
+
+%%% Don't use this with memoir
+\newcommand*{\cp@whoopsusingmemoir}{}
+\@ifclassloaded{memoir}{\def\cp@whoopsusingmemoir{\endinput}}
+\cp@whoopsusingmemoir
+
+%% new \if for the strict option
+\newif\ifstrictpagecheck
+ \strictpagecheckfalse
+%% user commands for switching strict page checking on/off
+\newcommand*{\strictpagecheck}{\strictpagechecktrue}
+\newcommand*{\easypagecheck}{\strictpagecheckfalse}
+
+%% Declare and process options
+\DeclareOption{strict}{\strictpagechecktrue}
+\ProcessOptions\relax
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% new commands for strict checking of odd/even page
+%% Works by writing a label and then checking its pageref
+%%
+
+\newif\ifoddpage
+\newcounter{cp@cntr}
+\newcount\cp@tempcnt % instead of \@memcnta
+\newcommand{\cplabel}{^_}
+
+\gdef\thememc@@page{\the\c@page}
+
+\long\def\pmemprotected@write#1#2#3{% modified \protected@write
+ \begingroup
+ \let\thepmemc@@page\relax
+ #2%
+ \let\protect\@unexpandable@protect
+ \edef\reserved@a{\write#1{#3}}%
+ \reserved@a
+ \endgroup
+ \if@nobreak\ifvmode\nobreak\fi\fi}
+
+\newcommand*{\pmemlabel}[1]{\@bsphack
+ \pmemprotected@write\@auxout{}%
+ {\string\newpmemlabel{#1}{\thepmemc@@page}}%
+ \@esphack}
+
+\newcommand*{\newpmemlabel}[2]{{\global\@namedef{m@#1}{#2}}}
+\newcommand*{\pmemlabelref}[1]{%
+ \expandafter\ifx\csname m@#1\endcsname\relax
+ 0% % 0 if there is no label yet in the aux file
+ \else
+ \csname m@#1\endcsname
+ \fi}
+
+\DeclareRobustCommand{\checkoddpage}{%
+ \oddpagefalse%
+ \ifstrictpagecheck%
+ \stepcounter{cp@cntr}\pmemlabel{\cplabel\thecp@cntr}%
+ \cp@tempcnt=\pmemlabelref{\cplabel\thecp@cntr}\relax
+ \ifodd\cp@tempcnt\oddpagetrue\fi
+ \else
+ \ifodd\c@page\oddpagetrue\fi
+ \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
+\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}}
+
+\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}
+
+\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}[2]{%
+ \begin{list}{}{%
+ \topsep\z@%
+ \listparindent\parindent%
+ \parsep\parskip%
+ \@ifmtarg{#1}{\setlength{\leftmargin}{\z@}}%
+ {\setlength{\leftmargin}{#1}}%
+ \@ifmtarg{#2}{\setlength{\rightmargin}{\z@}}%
+ {\setlength{\rightmargin}{#2}}%
+ }
+ \item[]}{\end{list}}
+
+\newenvironment{adjustwidth*}[2]{%
+ \begin{list}{}{%
+ \topsep\z@%
+ \listparindent\parindent%
+ \parsep\parskip%
+ \checkoddpage
+ \ifoddpage% odd numbered page
+ \@ifmtarg{#1}{\setlength{\leftmargin}{\z@}}%
+ {\setlength{\leftmargin}{#1}}%
+ \@ifmtarg{#2}{\setlength{\rightmargin}{\z@}}%
+ {\setlength{\rightmargin}{#2}}%
+ \else% even numbered page
+ \@ifmtarg{#2}{\setlength{\leftmargin}{\z@}}%
+ {\setlength{\leftmargin}{#2}}%
+ \@ifmtarg{#1}{\setlength{\rightmargin}{\z@}}%
+ {\setlength{\rightmargin}{#1}}%
+ \fi}
+ \item[]}{\end{list}}
+
+\endinput
+
+% Usage:
+% ------
+%
+% \usepackage[strict]{changepage}
+%
+%%%%%%%%%%%%%%%
+% \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 \ifoddpage is
+% set TRUE, otherwise (on an even page) \ifoddpage is set
+% FALSE.
+%
+% Strict page checking 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 \cplabel
+% and an automatically generated number. \cplabel, 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.
+%
+% The package option `strict' turns on strict page checking --- the default
+% is not to use strict checking. Strict page checking can be turned on or
+% off at any time by the commands \strictpagecheck or \easypagecheck.
+% The easy page check just tests the page number to see if it is odd or even,
+% which does not always give the correct result because of TeX's asynchronous
+% output mechanism.
+%
+%%%%%%%%%%%%%
+% adjustwidth
+%%%%%%%%%%%%%
+% Within an adjustwidth environment the left and right margins can be
+% adjusted. The environment takes 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}
+%
+% The starred version, adjustwidth*, causes 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 \strictpagecheck before
+% the environment, and turned off by using \easypagecheck.
+%
+% 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.
+%
+%%%%%%%%%%%%%
+% \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.
+%
+%
+% Changes in version 1.0 (2008/03/22)
+% ----------------------
+% o First public release
+%
+% Peter W.
+%
+