summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/changelayout/changelayout.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/changelayout/changelayout.sty')
-rw-r--r--macros/latex/contrib/changelayout/changelayout.sty382
1 files changed, 382 insertions, 0 deletions
diff --git a/macros/latex/contrib/changelayout/changelayout.sty b/macros/latex/contrib/changelayout/changelayout.sty
new file mode 100644
index 0000000000..6d18afa673
--- /dev/null
+++ b/macros/latex/contrib/changelayout/changelayout.sty
@@ -0,0 +1,382 @@
+%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++%
+% This is file 'changelayout.sty', version 0.1. %
+% %
+% This package can be used to change page and text layout on the fly, %
+% (ie, for specific pages, and, of course, for the entire document). %
+% It is an extension of Peter Wilson's 'changepage' package. %
+% %
+% Copyright (c) 2009 Ahmed Musa (a.musa@rocketmail.com). %
+% %
+% This work may be distributed and/or modified for commercial and %
+% non-commercial purposes. %
+% %
+% The LPPL maintenance status of this software is 'author-maintained'. %
+% %
+% This software is provided 'as it is', without warranty of any kind, %
+% either expressed or implied, including, but not limited to, the %
+% implied warranties of merchantability and fitness for a particular %
+% purpose. %
+%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++%
+\ProvidesPackage{changelayout}[2009/10/07 v0.1 Change page layout on the fly]
+\NeedsTeXFormat{LaTeX2e}
+\RequirePackage{etextools}
+\RequirePackage{xkeyval}
+\RequirePackage{ltxnew}
+\newrobustcmd\cpl@warn[1]{\PackageWarningNoLine{changelayout}{#1}}
+\newrobustcmd\cpl@info[1]{\PackageInfo{changelayout}{#1\@gobble}}
+\newrobustcmd\cpl@err[1]{\PackageError{changelayout}{#1}{\@ehc}}
+\new\let\cpl@xp\expandafter
+\@ifclassloaded{memoir}{%
+ \cpl@err{This package can't be used with\MessageBreak
+ memoir class. I've therefore exited}
+ \cpl@xp\endinput%
+}{}
+\@ifpackageloaded{xcolor}{%
+ \cpl@info{You've already loaded 'xcolor'\MessageBreak
+ package with options that possibly\MessageBreak
+ differ from my options.\MessageBreak
+ I've not reloaded 'xcolor'}
+}{%
+ \RequirePackage[dvipsnames*,svgnames*,x11names*,table,hyperref]{xcolor}
+ \cpl@info{'xcolor' package loaded with\MessageBreak
+ options 'dvipsnames*', 'svgnames*',\MessageBreak
+ 'x11names*', 'table', 'hyperref'}
+}
+\AtEndPreamble{%
+ \@ifpackageloaded{changepage}{%
+ \cpl@err{This package is a replacement for\MessageBreak
+ 'changepage' package.\MessageBreak
+ It can't be used with 'changepage'}
+ \cpl@xp\endinput%
+ }{}
+}
+\newrobustcmd*\cpl@numdef[2]{%
+ \ifstrempty{#2}{\cpl@err{You can't assign empty argument\MessageBreak
+ to number}}{}
+ \ifundef{#1}{\new\count#1\relax #1=\z@\relax}{}%
+ #1=\numexpr#2\relax
+}
+\newrobustcmd*\cpl@csnumdef[1]{\cpl@xp\cpl@numdef\csname#1\endcsname}
+\newrobustcmd*\cpl@dimdef[2]{%
+ \ifstrempty{#2}{\cpl@err{You can't assign empty argument\MessageBreak
+ to dimension}}{}
+ \ifundef{#1}{\new\dimen#1\relax #1=\z@\relax}{}%
+ #1=\dimexpr#2\relax
+}
+\newrobustcmd*\cpl@csdimdef[1]{\cpl@xp\cpl@dimdef\csname#1\endcsname}
+\newrobustcmd*\cpl@dimadd[2]{%
+ \ifstrempty{#2}{\cpl@err{Why do you want to add empty\MessageBreak
+ argument to dimension?}}{}
+ \ifundef{#1}{\cpl@err{You can't add to undefined dimension}}{}
+ #1=\dimexpr#1+#2\relax
+}
+\newrobustcmd*\cpl@csdimadd[1]{\cpl@xp\cpl@dimadd\csname#1\endcsname}
+\newrobustcmd\cpl@changelayout{%
+ \@colht=\textheight%
+ \@colroom=\textheight%
+ \vsize=\textheight%
+ \columnwidth=\textwidth%
+ \if@twocolumn
+ \cpl@csdimdef{dimen@}{(\columnwidth-\columnsep)/2}
+ \columnwidth=\dimen@%
+ \@firstcolumntrue
+ \fi
+ \hsize=\columnwidth%
+ \linewidth=\hsize%
+}
+\newrobustcmd\cpl@getdefaults{\begingroup
+ \protected@edef\@tempa{\endgroup
+ \noexpand\cpl@csdimdef{cpl@orig@paperwidth}{\paperwidth}%
+ \noexpand\cpl@csdimdef{cpl@orig@paperheight}{\paperheight}%
+ \noexpand\cpl@csdimdef{cpl@orig@textheight}{\textheight}%
+ \noexpand\cpl@csdimdef{cpl@orig@textwidth}{\textwidth}%
+ \noexpand\cpl@csdimdef{cpl@orig@oddsidemargin}{\oddsidemargin}%
+ \noexpand\cpl@csdimdef{cpl@orig@evensidemargin}{\evensidemargin}%
+ \noexpand\cpl@csdimdef{cpl@orig@topmargin}{\topmargin}%
+ \noexpand\cpl@csdimdef{cpl@orig@headsep}{\headsep}%
+ \noexpand\cpl@csdimdef{cpl@orig@headheight}{\headheight}%
+ \noexpand\cpl@csdimdef{cpl@orig@footskip}{\footskip}%
+ \noexpand\cpl@csdimdef{cpl@orig@footins}{\skip\footins}%
+ \noexpand\cpl@csdimdef{cpl@orig@marginparwidth}{\marginparwidth}%
+ \noexpand\cpl@csdimdef{cpl@orig@marginparsep}{\marginparsep}%
+ \noexpand\cpl@csdimdef{cpl@orig@marginparpush}{\marginparpush}%
+ \noexpand\cpl@csdimdef{cpl@orig@columnsep}{\columnsep}%
+ \noexpand\cpl@csdimdef{cpl@orig@columnseprule}{\columnseprule}%
+ \noexpand\cpl@csdimdef{cpl@orig@linewidth}{\linewidth}%
+ \noexpand\cpl@csdimdef{cpl@orig@hoffset}{\hoffset}%
+ \noexpand\cpl@csdimdef{cpl@orig@voffset}{\voffset}%
+ \noexpand\cpl@csnumdef{cpl@orig@mag}{\mag}%
+ }\@tempa%
+}
+\@onlypreamble\cpl@getdefaults\relax
+\AtEndPreamble{\cpl@getdefaults}%
+\newcommand\cpl@print@defaultparams{%
+ ^^J*******************************************************^^J%
+ Original page layout dimensions and booleans^^J%
+ (changelayout package)^^J%
+ \string\paperwidth\space\space\the\cpl@orig@paperwidth^^J%
+ \string\paperheight\space\space\the\cpl@orig@paperheight^^J%
+ \string\textwidth\space\space\the\cpl@orig@textwidth^^J%
+ \string\textheight\space\space\the\cpl@orig@textheight^^J%
+ \string\oddsidemargin\space\space\the\cpl@orig@oddsidemargin^^J%
+ \string\evensidemargin\space\space\the\cpl@orig@evensidemargin^^J%
+ \string\topmargin\space\space\the\cpl@orig@topmargin^^J%
+ \string\headheight\space\space\the\cpl@orig@headheight^^J%
+ \string\headsep\space\space\the\cpl@orig@headsep^^J%
+ \string\footskip\space\space\the\cpl@orig@footskip^^J%
+ \string\marginparwidth\space\space\the\cpl@orig@marginparwidth^^J%
+ \string\marginparsep\space\space\the\cpl@orig@marginparsep^^J%
+ \string\columnsep\space\space\the\cpl@orig@columnsep^^J%
+ \string\columnseprule\space\space\the\cpl@orig@columnseprule^^J%
+ \string\skip\string\footins\space\space\the\cpl@orig@footins^^J%
+ \string\hoffset\space\space\the\cpl@orig@hoffset^^J%
+ \string\voffset\space\space\the\cpl@orig@voffset^^J%
+ \string\mag\space\space\the\cpl@orig@mag^^J%
+ \if@twocolumn\string\@twocolumntrue\space\fi%
+ \if@twoside\string\@twosidetrue\space\fi%
+ \if@mparswitch\string\@mparswitchtrue\space\fi%
+ \if@reversemargin\string\@reversemargintrue\space\fi^^J%
+ (1in=72.27pt, 1cm=28.45pt)^^J%
+ *******************************************************^^J%
+}%
+\@onlypreamble\cpl@print@defaultparams\relax
+\newcommand\cpl@print@finalparams{%
+ ^^J+++++++++++++++++++++++++++++++++++++++++++++++++++++++^^J%
+ Final page layout dimensions and booleans^^J%
+ (changelayout package)^^J%
+ \string\paperwidth\space\space\the\paperwidth^^J%
+ \string\paperheight\space\space\the\paperheight^^J%
+ \string\textwidth\space\space\the\textwidth^^J%
+ \string\textheight\space\space\the\textheight^^J%
+ \string\oddsidemargin\space\space\the\oddsidemargin^^J%
+ \string\evensidemargin\space\space\the\evensidemargin^^J%
+ \string\topmargin\space\space\the\topmargin^^J%
+ \string\headheight\space\space\the\headheight^^J%
+ \string\headsep\space\space\the\headsep^^J%
+ \string\footskip\space\space\the\footskip^^J%
+ \string\marginparwidth\space\space\the\marginparwidth^^J%
+ \string\marginparsep\space\space\the\marginparsep^^J%
+ \string\columnsep\space\space\the\columnsep^^J%
+ \string\columnseprule\space\space\the\columnseprule^^J%
+ \string\skip\string\footins\space\space\the\footins^^J%
+ \string\hoffset\space\space\the\hoffset^^J%
+ \string\voffset\space\space\the\voffset^^J%
+ \string\mag\space\space\the\mag^^J%
+ \if@twocolumn\string\@twocolumntrue\space\fi%
+ \if@twoside\string\@twosidetrue\space\fi%
+ \if@mparswitch\string\@mparswitchtrue\space\fi%
+ \if@reversemargin\string\@reversemargintrue\space\fi^^J%
+ (1in=72.27pt, 1cm=28.45pt)^^J%
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++^^J%
+}%
+\newrobustcmd\cpl@backtodefaults{\begingroup
+ \protected@edef\@tempa{\endgroup
+ \noexpand\setlength{\paperwidth}{\cpl@orig@paperwidth}%
+ \noexpand\setlength{\paperheight}{\cpl@orig@paperheight}%
+ \noexpand\setlength{\textheight}{\cpl@orig@textheight}%
+ \noexpand\setlength{\textwidth}{\cpl@orig@textwidth}%
+ \noexpand\setlength{\linewidth}{\cpl@orig@linewidth}%
+ \noexpand\setlength{\oddsidemargin}{\cpl@orig@oddsidemargin}%
+ \noexpand\setlength{\evensidemargin}{\cpl@orig@evensidemargin}%
+ \noexpand\setlength{\topmargin}{\cpl@orig@topmargin}%
+ \noexpand\setlength{\headsep}{\cpl@orig@headsep}%
+ \noexpand\setlength{\headheight}{\cpl@orig@headheight}%
+ \noexpand\setlength{\footskip}{\cpl@orig@footskip}%
+ \noexpand\setlength{\skip\footins}{\cpl@orig@footins}%
+ \noexpand\setlength{\marginparwidth}{\cpl@orig@marginparwidth}%
+ \noexpand\setlength{\marginparsep}{\cpl@orig@marginparsep}%
+ \noexpand\setlength{\marginparpush}{\cpl@orig@marginparpush}%
+ \noexpand\setlength{\columnsep}{\cpl@orig@columnsep}%
+ \noexpand\setlength{\columnseprule}{\cpl@orig@columnseprule}%
+ \noexpand\setlength{\hoffset}{\cpl@orig@hoffset}%
+ \noexpand\setlength{\voffset}{\cpl@orig@voffset}%
+ \noexpand\mag=\cpl@orig@mag%
+ \noexpand\cpl@changelayout%
+ \noexpand\cpl@info{Layout parameters reset to defaults}%
+ }\@tempa%
+}
+\define@boolkey+[KV]{changelay}[cpl@]{reset}[true]{%
+ \ifcpl@reset\cpl@backtodefaults\fi%
+ }{\cpl@err{Erroneous value for 'reset'}}
+\define@boolkeys[KV]{changelay}[cpl@]{switchadjust,logdefault,%
+ logfinal,strictcheck,oddpage}[true]
+\define@cmdkey[KV]{changelay}[cpl@]{content}[]{}
+\define@cmdkey[KV]{changelay}[cpl@]{textcolor}[black]{}
+\define@cmdkey[KV]{changelay}[cpl@]{paperheight}[\paperheight]{}
+\define@cmdkey[KV]{changelay}[cpl@]{paperwidth}[\paperwidth]{}
+\define@cmdkey[KV]{changelay}[cpl@]{textheight}[\textheight]{}
+\define@cmdkey[KV]{changelay}[cpl@]{textwidth}[\textwidth]{}
+\define@cmdkey[KV]{changelay}[cpl@]{evensidemargin}[\evensidemargin]{}
+\define@cmdkey[KV]{changelay}[cpl@]{oddsidemargin}[\oddsidemargin]{}
+\define@cmdkey[KV]{changelay}[cpl@]{topmargin}[\topmargin]{}
+\define@cmdkey[KV]{changelay}[cpl@]{headheight}[\headheight]{}
+\define@cmdkey[KV]{changelay}[cpl@]{headsep}[\headsep]{}
+\define@cmdkey[KV]{changelay}[cpl@]{footskip}[\footskip]{}
+\define@cmdkey[KV]{changelay}[cpl@]{footins}[\skip\footins]{}
+\define@cmdkey[KV]{changelay}[cpl@]{topsep}[\topsep]{}
+\define@cmdkey[KV]{changelay}[cpl@]{listparindent}[\parindent]{}
+\define@cmdkey[KV]{changelay}[cpl@]{parindent}[\parindent]{}
+\define@cmdkey[KV]{changelay}[cpl@]{parsep}[\parsep]{}
+\define@cmdkey[KV]{changelay}[cpl@]{parskip}[\parskip]{}
+\define@cmdkey[KV]{changelay}[cpl@]{leftmargin}[\leftmargin]{}
+\define@cmdkey[KV]{changelay}[cpl@]{rightmargin}[\rightmargin]{}
+\define@cmdkey[KV]{changelay}[cpl@]{columnwidth}[\columnwidth]{}
+\define@cmdkey[KV]{changelay}[cpl@]{columnsep}[\columnsep]{}
+\define@cmdkey[KV]{changelay}[cpl@]{columnseprule}[\columnseprule]{}
+\define@cmdkey[KV]{changelay}[cpl@]{marginparwidth}[\marginparwidth]{}
+\define@cmdkey[KV]{changelay}[cpl@]{marginparsep}[\marginparsep]{}
+\define@cmdkey[KV]{changelay}[cpl@]{marginparpush}[\marginparpush]{}
+\define@cmdkey[KV]{changelay}[cpl@]{hoffset}[\hoffset]{}
+\define@cmdkey[KV]{changelay}[cpl@]{voffset}[\voffset]{}
+\define@cmdkeys[KV@X]{changelay}[cpl@x@]{%
+ paperheight,paperwidth,textheight,textwidth,evensidemargin,%
+ oddsidemargin,topmargin,headheight,headsep,footskip,footins,%
+ topsep,listparindent,parindent,parsep,parskip,leftmargin,%
+ rightmargin,columnwidth,columnsep,columnseprule,marginparwidth,%
+ marginparsep,marginparpush,hoffset,voffset%
+}[\z@]
+\DeclareOptionX*{\cpl@warn{Unknown option '\CurrentOption' ignored}}
+\ExecuteOptionsX[KV]<changelay>[switchadjust,logdefault,logfinal,
+ strictcheck,oddpage]{content,textcolor,
+ paperheight,paperwidth,textheight,textwidth,evensidemargin,
+ oddsidemargin,topmargin,headheight,headsep,footskip,footins,topsep,
+ listparindent,parindent,parsep,parskip,leftmargin,rightmargin,
+ columnwidth,columnsep,columnseprule,marginparwidth,marginparsep,
+ marginparpush,hoffset,voffset
+}
+\ProcessOptionsX*<changelay>\relax
+\setkeys[KV@X]{changelay}{%
+ paperheight,paperwidth,textheight,textwidth,evensidemargin,
+ oddsidemargin,topmargin,headheight,headsep,footskip,footins,topsep,
+ listparindent,parindent,parsep,parskip,leftmargin,rightmargin,
+ columnwidth,columnsep,columnseprule,marginparwidth,marginparsep,
+ marginparpush,hoffset,voffset
+}
+\cpl@csnumdef{cpl@cnt@a}{\z@}
+\cpl@csnumdef{cpl@mem@c@page}{\z@}
+\new\def\cpl@xlabel{_x_}
+\new\gdef\thecpl@mem@c@page{\the\c@page}
+\new\long\def\cpl@afterelsefi#1\else#2\fi{\fi#1}
+\newrobustcmd\cpl@protected@write[3]{%
+ \begingroup
+ \let\thecpl@mem@c@page\relax
+ #2%
+ \let\protect\@unexpandable@protect
+ \csedef{@tempa}{\write#1{#3}}\@tempa%
+ \endgroup
+ \if@nobreak\ifvmode\nobreak\fi\fi
+}
+\ifcpl@strictcheck\if@filesw\cpl@afterelsefi
+ \new\def\cpl@mem@label#1{%
+ \@bsphack
+ \cpl@protected@write\@auxout{}%
+ {\cpl@new@mem@label{#1}{\thecpl@mem@c@page}}%
+ \@esphack
+ }
+\else
+ \cpl@err{nofiles: I need to write to .aux file}
+\fi\fi
+\new\def\cpl@new@mem@label#1#2{\csgdef{m@#1}{#2}}
+\new\def\cpl@mem@labelref#1{0\csuse{m@#1}}
+\newrobustcmd\cpl@checkifoddpage{%
+ \cpl@oddpagefalse%
+ \ifbool{cpl@strictcheck}{%
+ \global\advance\cpl@cnt@a\@ne\relax
+ \cpl@mem@label{\cpl@xlabel\the\cpl@cnt@a}%
+ \cpl@mem@c@page=\cpl@mem@labelref{\cpl@xlabel\the\cpl@cnt@a}\relax
+ \ifodd\cpl@mem@c@page\cpl@oddpagetrue\fi
+ }{%
+ \ifodd\c@page\cpl@oddpagetrue\fi
+ }%
+}
+\ifbool{cpl@logdefault}{%
+ \AtBeginDocument{\immediate\write-1{\cpl@print@defaultparams}}
+}{}
+\ifbool{cpl@logfinal}{%
+ \AtEndDocument{\immediate\write-1{\cpl@print@finalparams}}
+}{}
+\newrobustcmd\changepagelayout[1]{%
+ \setkeys[KV]{changelay}{#1}%
+ \cpl@dimdef{\paperheight}{\cpl@paperheight}%
+ \cpl@dimdef{\paperwidth}{\cpl@paperwidth}%
+ \cpl@dimdef{\textheight}{\cpl@textheight}%
+ \cpl@dimdef{\textwidth}{\cpl@textwidth}%
+ \cpl@dimdef{\evensidemargin}{\cpl@evensidemargin}%
+ \cpl@dimdef{\oddsidemargin}{\cpl@oddsidemargin}%
+ \cpl@dimdef{\columnsep}{\cpl@columnsep}%
+ \cpl@dimdef{\columnseprule}{\cpl@columnseprule}%
+ \cpl@dimdef{\topmargin}{\cpl@topmargin}%
+ \cpl@dimdef{\headheight}{\cpl@headheight}%
+ \cpl@dimdef{\headsep}{\cpl@headsep}%
+ \cpl@dimdef{\footskip}{\cpl@footskip}%
+ \cpl@dimdef{\skip\footins}{\cpl@footins}%
+ \cpl@dimdef{\marginparwidth}{\cpl@marginparwidth}%
+ \cpl@dimdef{\marginparsep}{\cpl@marginparsep}%
+ \cpl@dimdef{\marginparpush}{\cpl@x@marginparpush}%
+ \cpl@changelayout%
+}
+\new\global\let\changetextlayout\changepagelayout
+\newrobustcmd\adjustpagelayout[1]{%
+ \setkeys[KV@X]{changelay}{#1}%
+ \cpl@dimadd{\paperheight}{\cpl@x@paperheight}%
+ \cpl@dimadd{\paperwidth}{\cpl@x@paperwidth}%
+ \cpl@dimadd{\textheight}{\cpl@x@textheight}%
+ \cpl@dimadd{\textwidth}{\cpl@x@textwidth}%
+ \cpl@dimadd{\evensidemargin}{\cpl@x@evensidemargin}%
+ \cpl@dimadd{\oddsidemargin}{\cpl@x@oddsidemargin}%
+ \cpl@dimadd{\columnsep}{\cpl@x@columnsep}%
+ \cpl@dimadd{\columnseprule}{\cpl@x@columnseprule}%
+ \cpl@dimadd{\topmargin}{\cpl@x@topmargin}%
+ \cpl@dimadd{\headheight}{\cpl@x@headheight}%
+ \cpl@dimadd{\headsep}{\cpl@x@headsep}%
+ \cpl@dimadd{\footskip}{\cpl@x@footskip}%
+ \cpl@dimadd{\skip\footins}{\cpl@x@footins}%
+ \cpl@dimadd{\marginparwidth}{\cpl@x@marginparwidth}%
+ \cpl@dimadd{\marginparsep}{\cpl@x@marginparsep}%
+ \cpl@dimadd{\marginparpush}{\cpl@x@marginparpush}%
+ \cpl@changelayout%
+}
+\new\global\let\adjusttextlayout\adjustpagelayout
+\new\def\cpl@listparams{%
+ \topsep=\z@%
+ \partopsep=\z@%
+ \listparindent=\parindent%
+ \parsep=\parskip%
+ \itemsep=\z@%
+}
+\newenvironment{cpl@adjustwidth}[2]{%
+ \begin{list}{}{%
+ \cpl@listparams%
+ \setlength\leftmargin{#1}%
+ \setlength\rightmargin{#2}%
+ }%
+ \item[]\ignorespaces}%
+{\end{list}\@ignoretrue}
+\newenvironment{cpl@adjustwidth*}[2]{%
+ \begin{list}{}{%
+ \cpl@listparams%
+ \cpl@checkifoddpage%
+ \ifbool{cpl@oddpage}{%
+ \setlength\leftmargin{#1}%
+ \setlength\rightmargin{#2}%
+ }{%
+ \setlength\leftmargin{#2}%
+ \setlength\rightmargin{#1}%
+ }%
+ }\item[]\ignorespaces}%
+{\end{list}\@ignoretrue}
+\newrobustcmd\adjusttextwidth[1]{%
+ \setkeys[KV]{changelay}{#1}%
+ \ifbool{cpl@switchadjust}{%
+ \begin{cpl@adjustwidth*}{\cpl@leftmargin}{\cpl@rightmargin}%
+ \textcolor{\cpl@textcolor}{\cpl@content}%
+ \end{cpl@adjustwidth*}\relax
+ }{%
+ \begin{cpl@adjustwidth}{\cpl@leftmargin}{\cpl@rightmargin}%
+ \textcolor{\cpl@textcolor}{\cpl@content}%
+ \end{cpl@adjustwidth}\relax
+ }
+}
+\newrobustcmd*\resetdefault{\setkeys[KV]{changelay}{reset=true}}
+
+\endinput \ No newline at end of file