% \iffalse meta-comment
% %%----------------------------------------------------------------------------
%
%% File: vmargin.dtx Copyright (C) 1993, 1994, 1995, 1996, 1999, 2000, 2002,
%%                                 2004
%%       by Volker Kuhlmann   <VolkerKuhlmann@GMX.de>
%% All rights are reserved.
%%
%
%<*dtx>
            \NeedsTeXFormat{LaTeX2e}[1999/06/01]
            \ProvidesFile{vmargin.dtx}
%</dtx>
%
%<driver>   \ProvidesFile{vmargin.drv}
%
%^^A<package>\NeedsTeXFormat{LaTeX2e}[1998/06/01]
%^^A<package>\ProvidesPackage{vmargin}
%^^A         Can't have these 2 lines if package is to work with LaTeX 2.09
%
% ^^A NOTE: VERSION INFO DUPLICATED BELOW AND IN PACKAGE MACROCODE SECTION !!!
% ^^A       search tag:  mAcRoVeRsIoN    (total of 4 places to change!)
%<*dtx|driver>
%           \ProvidesFile{vmargin.dtx}
           [2004/07/15 v2.5 set document margins (VK)]
%^^A need to uncomment above line to get it into the .drv
%^^A alternatively we could scrap it altogether!
%</dtx|driver>
%
% \fi
% ^^A The following 2 lines are required for the .drv file to correctly generate
% ^^A the documentation from the .dtx. It's needed for \GetFileInfo.
% ^^A The 2nd line generally is uncommented, but that would mean it ends up in
% ^^A the .sty which we can't allow for 2.09 compatibility.
%           \ProvidesFile{vmargin.dtx}
%           [2004/07/15 V2.5 set document margins (VK)]  %^^A mAcRoVeRsIoN
%
%%
%% \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         \~}
%%
%
% \iffalse
%<*driver>

\NeedsTeXFormat{LaTeX2e}[1999/06/01]
\documentclass{ltxdoc}
%%\IfFileExists{ltxdoc.cfg}{}{\OnlyDescription\RecordChanges\CodelineIndex}

\IfFileExists{vmargin.sty}{%
    \usepackage{vmargin}%
    \setpapersize[portrait]{A4}%
    \setmarginsrb{55mm}{15mm}{22mm}{15mm}{10pt}{7mm}{}{12mm}%
    \marginparsep   3mm
    \relax
}{}

 %\OnlyDescription                  % uncomment to suppress code line listing
 \RecordChanges                    % uncomment for a change history
 \CodelineIndex\EnableCrossrefs    % uncomment for command index
\GetFileInfo{vmargin.dtx}

\begin{document}
\DocInput{vmargin.dtx}
%%\IfFileExists{ltxdoc.cfg}{}{\PrintChanges\PrintIndex}
 \PrintChanges                     % uncomment for a change history
 \PrintIndex                       % uncomment for command index
\end{document}

%</driver>
% \fi
%
%
% \GetFileInfo{vmargin.dtx}
% \CheckSum{395}
%
% %^^A This command extracts all index entries:
% %^^A sed < vmargin.idx -e 's,indexentry{,,' -e 's,=.*$,,'
%
% \date{\filedate}
% \title{The \textsf{vmargin} Package\thanks
%        {This file has version number \fileversion,
%         last modified \filedate.}}
% \author{Volker Kuhlmann\thanks{%^^A
%         ^^AEmail:\ \url{v.kuhlmann@elec.canterbury.ac.nz}.
%   	  Email:\ \url{VolkerKuhlmann@GMX.de}.
%   	  For a postal address refer to the license section.}}
%
%
% %%%^^A  MACROS used for this document
% \let\package\textsf
% \let\env\textsf
% \let\url\texttt
% \newcommand\optmeta[1]{[\meta{#1}]}
% \begingroup
% \catcode`\^^M\active^^A%   Has to be active during definition!
% \gdef\makeNLnl{\catcode`\^^M\active \def^^M{\par}}
% \endgroup
% \newenvironment{pckcmd}{%^^A
%   \ifvmode \else \par\vspace{-\parskip}\fi
%   \vspace{1mm}\noindent \hangindent 4em\hangafter 0\ignorespaces
%   }{%^^A
%   \par\vspace{1mm}\vspace{-\parskip}}
% \newcommand\MargWord[1]{\marginpar{\raggedleft\PrintDescribeEnv{#1}}}
%
%
% ^^A  search tag:  mAcRoVeRsIoN  (adjust changelog)
%
% \changes{v2.5}{2004/07/15}
%   {\cs{margin@offset} now uses \hbox{-1truein} instead of -1in}
%
% \changes{v2.4.2}{2002/11/08}
%   {documentation only}
%
% \changes{v2.4}{2002/01/23}
%   {minor changes, mostly cosmetic}
%
% \changes{v2.3b}{2000/08/29}
%   {screen output of version info.}
%
% \changes{v2.3}{2000/08/01}
%   {Now setting page size for pdflatex.}
% 
% \changes{v2.2b}{2000/03/14}
%   {Changed into docstrip format.
%   Improved documentation.}
%
% \changes{V2.2}{1999/05/31}
%   {Released under LPPL.
%   Changed references to Vmargin to vmargin.
%   \LaTeX2e\ package options introduced.}
%
% \changes{V2.13}{1996/06/26}
%   {Fixed comment for \cs{setmarginsrb}.}
%
% \changes{V2.12}{1995/03/28}
%   {Fixed documentation for \cs{setmargrb}.}
%
% \changes{V2.1}{1994/09/20}
%   {\cs{@defmetricpaper} now defines \cs{w}, \cs{h}, \cs{s} locally.
%   Thanks to \url{branderhorst@fgg.eur.nl}!}
%
% \changes{V2.0}{1994/06/28}
%   {Added support for \LaTeX2e\ \cs{paperwidth}, \cs{paperheight}.}
%
% \changes{V1.9}{1994/06/22}
%   {Corrected spelling in comment.}
%
% \changes{V1.8}{1994/05/28}
%   {Commented \cs{chk@dimen};
%   reduced load on \TeX'sparameter stack (changed \cs{chk@dimen});
%   put a conditional around references to \cs{footheight}.}
%
% \changes{V1.72}{1994/05/21}
%   {Fixed bug in \cs{setpapersize\{custom\}}.}
%
% \changes{V1.7}{1994/05/21}
%   {Changed file header.}
%
% \changes{1.0}{1993}
%   {Created out of Vpage.sty V2.2, 18 June 1993}
%
%
% \maketitle
%
% \begin{abstract}
% LaTeX package which introduces paper sizes and provides macros for
% setting document margins. It still works with \LaTeX\ 2.09.
% This package supersedes package vpage.
%
% This package file can be made part of a format by typing |\input vmargin.sty|
% before dumping the format.
% \end{abstract}
%
% \tableofcontents
%
%
% \section{License}
%
% This package is copyright \textcopyright\ 1993, 1994, 1995, 1996, 1999, 2000,
% 2002, 2004 by:
%
% \begin{quote}
%   Volker Kuhlmann,
%   c/o University of Canterbury,
%   ELEC Dept, Creyke Road,
%   Christchurch, New Zealand\\
%   ^^AE-Mail: \url{v.kuhlmann@elec.canterbury.ac.nz}
%   E-Mail: \url{VolkerKuhlmann@GMX.de}
% \end{quote}
%
% This program can be redistributed and/or modified under the terms
% of the LaTeX Project Public License, distributed from CTAN
% archives as macros/latex/base/lppl.txt; either
% version 1 of the License, or (at your option) any later version.
%
%
% \section{History}
%
% This is the first package I ever wrote, to save a lot of typing when dealing
% with \TeX's 1in/1in margin offset, proper margin alignment for doublesided
% printing, and page layout parameters I always used. As there wasn't anything
% similar on CTAN I submitted the package, then called \package{Vpage}. I
% never heard back, and wasn't looking for it in the right place, so I
% thought it hadn't been accepted and never thought any more of it.
%
% In the meantime I realised its general-purpose potential and took the page
% layout code out, renaming it to \package{Vmargin}. First time I heard it
% was on CTAN was when I read the list of 3rd-party packages in the \LaTeX\
% Companion and it had \package{vpage} in it (CTAN doesn't deal in uppercase
% letters). So sorry for any confusion the name change caused\ldots
%
% Further development essentially ceased because I didn't see much scope
% for improvements. \package{vmargin} was doing its job. I could have gone
% overboard with package options, but didn't because I was more interested
% in a short efficient tool which doesn't load half of the tools and/or
% graphics bundle. It still works under both \LaTeX\ 2.09 and \LaTeXe.
%
%
% \section{User manual}
%
% \subsection{Page Size}
% 
% These macros make it easy to set page margins for a chosen paper size.
% Actual dimensions of the most common paper sizes are stored and need
% not be remembered.
% 
% Two sided printing is supported, meaning that if on odd pages the left
% margin is, say, 30mm and the right margin is 20mm, it will be vice
% versa on even pages. This gives equal margins on the outer and equal
% margins on the inner edge of the paper, as expected e.g.\ for a book.
% 
% \package{vmargin} is designed to be reasonably restricted in both memory
% usage and processing time, so that the common task of setting margins
% is not too distracting. If you are looking for something fancier try the
% \package{geometry} package.
% 
% The basic procedure of using \package{vmargin} is to first set a paper size,
% and then to set the margins. The margin setting functions depend on the paper
% size. Setting the paper size and margins are two independent operations,
% i.e.\ setting the paper size does not directly affect the margins but will
% affect the following margin setting command.
% 
% \DescribeMacro{\setpapersize}
% The size of the paper can be set with 
% ^^A
% \begin{pckcmd}
% 	|\setpapersize{|\meta{size}|}|
% \end{pckcmd}
% ^^A
% \meta{size} can be A0, A1, ..., A9, B0, B1, ..., B9, C0, ..., C9, USletter,
% USlegal, and USexecutive. The metric paper sizes are not stored but
% calculated. |\setpapersize| by default sets the orientation to portrait.
% 
% Landscape format is selected by using the optional argument
% ^^A
% \begin{pckcmd}
% 	|\setpapersize[landscape]{|\meta{size}|}|
% \end{pckcmd}
% ^^A
% which swaps the width and height dimensions of the paper.
% \begin{pckcmd}
%       |\setpapersize[portrait]{|\meta{size}|}|
% \end{pckcmd}
% is allowed but is the default.
% 
% If you have a size which is not pre-defined use
% ^^A
% \begin{pckcmd}
% 	|\setpapersize{custom}{|\meta{width}|}{|\meta{height}|}|
% \end{pckcmd}
% ^^A
% For \meta{width} and \meta{height} insert the respective dimensions of your
% paper.
% 
% \DescribeMacro{\PaperWidth}
% \DescribeMacro{\PaperHeight}
% |\setpapersize| stores the actual dimensions of the paper in the length
% variables
% ^^A
% \begin{pckcmd}
% 	|\PaperWidth|   \\
% 	|\PaperHeight|
% \end{pckcmd}
% 
% \DescribeMacro{\ifLandscape}
% which can be used further, if desired.
% ^^A
% \begin{pckcmd}
% 	|\ifLandscape|
% \end{pckcmd}
% ^^A
% yields true if a landscape format is selected. Do not write to
% |\PaperWidth|, |\PaperHeight|, or call |\Landscapetrue| or |\Landscapefalse|,
% it will not work!!
%
% \package{vmargin} detects when it runs under pdflatex, and in that case also
% sets the pdf page size (variables |\pdfpagewidth| and |\pdfpageheight|).
% 
% Default for the paper size is A4 portrait.
% 
% 
% \subsection{Margins}
% 
% \DescribeMacro{\setmargins}
% Once the paper size is selected, margins can be set with
% \begin{pckcmd}
% 	|\setmargins{|\meta{leftmargin}|}{|\meta{topmargin}^^A
%               |}{|\meta{textwidth}|}{|\meta{textheight}|}%| \\
%       |   {|\meta{headheight}|}{|\meta{headsep}|}{|\meta{footheight}^^A
%               |}{|\meta{footskip}|}|
% \end{pckcmd}
% or with
% \begin{pckcmd}
% 	|\setmarginsrb{|\meta{leftmargin}|}{|\meta{topmargin}^^A
%               |}{|\meta{rightmargin}|}{|\meta{bottommargin}|}%|  \\
% 	|   {|\meta{headheight}|}{|\meta{headsep}^^A
%               |}{|\meta{footheight}|}{|\meta{footskip}|}|
% \end{pckcmd}
% \DescribeMacro{\setmarginsrb}
% In the latter case |\textwidth| and |\textheight| are calculated using the
% width and height of the selected paper such as to effectively result in
% \meta{rightmargin} and \meta{bottommargin}. The first four parameters of the
% above two commands are used to set |\oddsidemargin|, |\evensidemargin|,
% |\textwidth|, |\topmargin|, and |\textheight|.
%
% \DescribeMacro{\setmargnohf}
% \DescribeMacro{\setmargnohfrb}
% |\setmargnohf|, |\setmargnohfrb|
% provide a page with no header and footer. They work the same as
% |\setmargins|, |\setmarginsrb| except that they only need the first 4
% parameters. The last 4 parameters are set to 0pt. These 2 commands set
% the pagestyle to empty (|\pagestyle{empty}|) as there is no space for
% headers or footers.
% \begin{pckcmd}
% 	|\setmargnohf{|\meta{leftmargin}|}{|\meta{topmargin}^^A
%               |}{|\meta{textwidth}|}{|\meta{textheight}|}%|   \\
% 	|\setmargnohfrb{|\meta{leftmargin}|}{|\meta{topmargin}^^A
%               |}{|\meta{rightmargin}|}{|\meta{bottommargin}|}%|
% \end{pckcmd}
%
% \DescribeMacro{\setmarg}
% \DescribeMacro{\setmargrb}
% |\setmarg|, |\setmargrb|
% are the same as |\setmargnohf|, |\setmargnohfrb| except that
% \meta{headheight}, \meta{headsep}, \meta{footheight}, and \meta{footskip} are
% unchanged instead of being set to 0pt.
% \begin{pckcmd}
% 	|\setmarg{|\meta{leftmargin}|}{|\meta{topmargin}^^A
%               |}{|\meta{textwidth}|}{|\meta{textheight}|}%|   \\
% 	|\setmargrb{|\meta{leftmargin}|}{|\meta{topmargin}^^A
%               |}{|\meta{rightmargin}|}{|\meta{bottommargin}|}%|
% \end{pckcmd}
% 
% Example:
% 
% 	A4 paper, left margin 30mm, top, right, and bottom margin 20mm
% 	each, no headers or footers:
% \begin{pckcmd}
% 	|\setpapersize{A4}| \\
% 	|\setmarginsrb{30mm}{20mm}{20mm}{20mm}{0pt}{0mm}{0pt}{0mm}| \\
% 	|\pagestyle{empty}|
% \end{pckcmd}
% The same settings would result with:
% \begin{pckcmd}
% 	|\setpapersize{A4}| \\
% 	|\setmargnohfrb{30mm}{20mm}{20mm}{20mm}|
% \end{pckcmd}
%
% Defaults are 
% \begin{pckcmd}
%   |\setmarginsrb{35mm}{20mm}{25mm}{15mm}{12pt}{11mm}{0pt}{11mm}|
% \end{pckcmd}
% or with package option nohf
% \begin{pckcmd}
%   |\setmargnohfrb{35mm}{20mm}{25mm}{15mm}|
% \end{pckcmd}
% 
%
% \subsection{Dealing with \TeX's Margin Offset}
% 
% The default top and left margins of TeX are +1in. |\setmargXXX| call
% ^^A
% 	|\margin@offset|
% ^^A
% \DescribeMacro{\margin@offset}
% \DescribeMacro{\hoffset}
% \DescribeMacro{\voffset}
% which initialises |\hoffset|, |\voffset| to -1truein and |\oddsidemargin|,
% |\evensidemargin|, |\topmargin| to 0in. |\setmargXXX| then add the given
% dimensions to |\topmargin|, |\oddsidemargin|, |\evensidemargin|. In some
% cases it might be desired to use |\XXXmargin| instead of |\Xoffset| for
% compensation. This can be achieved by telling |\margin@offset| to
% initialise |\Xoffset| to 0in and |\XXXmargin| to -1truein.
% This is what
% %^^A
% 	|\shiftmargins|
% %^^A
% does.
%
% If |\margin@offset| is already defined at the time \package{vmargin} is loaded
% it is \emph{not} redefined! Therefore if |\margin@offset| is defined before
% \package{vmargin} is loaded the above mentioned compensation can be replaced
% by a different mechanism. In any case |\setmargXXX| call |\margin@offset| and
% then expect that |\XXXmargin| are set to useful values. |\Xoffset| are not
% touched by |\setmargXXX|. |\margin@offset| should be defined in a separate
% file which is included \emph{before} \package{vmargin}, i.e. appears in the
% list of document-substyles of the |\documentstyle| command before
% \package{vmargin}.
% %^^A
% Any better way of doing this? (grumble)
% 
% Example:
% \begin{pckcmd}
%       |\documentclass[...]{...}|  \\
% 	|\usepackage{...,margins,vmargin,...}|
% \end{pckcmd}
% if |\margin@offset| is defined in a file called margins.sty.
% 
% or with \LaTeX\ 2.09:
% \begin{pckcmd}
%       |\documentstyle[...,margins,vmargin,...]{...}|
% \end{pckcmd}
% 
% 
% \subsection{\LaTeXe}
% 
% This package now uses some of the new \LaTeX2e\ features for package
% programming. It will still work with \LaTeX\ 2.09 (in which case the new
% features are not used).
% 
% \LaTeX2e\ (unless in compatibility mode) does not know |\footheight| any
% more. \package{vmargin} does not set this variable if it does not exist, and sets
% it if it does. As |\footheight| was not used by \LaTeX\ 2.09 all this has
% little significance.
% 
% \LaTeXe\ now has the dimensions |\paperwidth|, |\paperheight| which
% hold the size of the paper. |\PaperWidth|, |\PaperHeight| are copied
% into |\paperwidth|, |\paperheight| if the latter exist. This makes
% \package{vmargin} work correctly with anything that expects |\paperwidth|,
% |\paperheight| to be set properly. The names |\PaperWidth|, |\PaperHeight|
% had been chosen in the first place to avoid clashes with style files that
% also use these names (namely \package{pageframe.sty}).
% 
% The following package options are available with \LaTeXe:
% 
% \begin{description}
% \item[shiftmargins]   \MargWord{shiftmargins}
%       Same as |\shiftmargins|.
% \item[portrait]       \MargWord{portrait}
%       Keep the default of a portrait page layout.
% \item[landscape]      \MargWord{landscape}
%       Change the default page orientation to landscape.
%       Note: using |\setpapersize|
% 	after |\usepackage| causes package option landscape to be ignored.
% \item[A4, etc]        \MargWord{A4}
%       Same as using |\setpapersize[...]{...}|.
% 	Note: |\setpapersize| always sets the orientation to
% 	portrait unless landscape is given as an optional argument to
%       |\setpapersize|.
% \item[nohf]           \MargWord{nohf}
%       Do not make space for header and footer lines; this also
% 	sets the pagestyle to |empty|.
% \end{description}
% 
% All unknown options are treated as a paper size, if necessary
% generating an error that the requested paper size is not defined.
% 
% 
% \subsection{Inclusion in \TeX\ formats}
% 
% This file may be loaded in initex before dumping the format, by typing
% \begin{verbatim}
% 	\makeatletter
% 	\input vmargin.sty
% 	\makeatother
% \end{verbatim}\vspace{-\bigskipamount}
% Be aware that this generates a non-standard format. It is really only useful
% for slow computers. This feature has not been tested with \LaTeXe.
% 
% 
% \subsection{Hints for using pageframe.sty}
% 
% \package{vmargin.sty} and \package{pageframe.sty} can be used together if the
% following points are considered:
% 
% \package{vmargin} uses |\hoffset| and |\voffset| and writes negative values
% into it, \package{pageframe} expects them to be zero to give a 1in space
% on the left and the top where it prints additional information. Initially,
% set both to 0mm (in the preamble of your text) and adjust them later on.
% 
% \package{pageframe} needs to know the trimmed height of the paper (= the
% height of the ``page frame''). Unless the trimmed(!) size of the paper is
% equivalent to one of the standard paper sizes (unlikely\ldots) the size
% should be specified with
% 
% 	|\setpapersize{custom}{|\meta{width}|}{|\meta{height}|}|
% 
% The correct height of the trimmed page can then be given to
% \package{pageframe} using
% 
% 	|\paperheight{\PaperHeight}|
% 
% and the margins of the final product (inside the page frame) can be
% specified using |\setmargXXX|.
% 
% Warning: if |\setmargXXXrb| is used the 3rd parameter (right margin) is
% ignored. Instead, the dimension of the right margin has to be assigned to
% |\evensidemargin|. This is because \package{pageframe} re-defines the meaning
% of |\evensidemargin| to be the right margin of your text, on all pages.
% 
% Remember: all these assignments and macro calls have to be in the
% preamble of the document.
% 
% 
% \subsection{Bugs and To Do}
% 
% I have not tested this with older versions of \LaTeXe\ because I don't
% have any. If there are any problems please let me know and I'll do
% something about it.
% 
% The way the metric paper sizes are stored takes up a lot of space.
% A metric size could be computed by |\setpapersize|.
% 
% If you have any comments (positive or negative) please let me know!
% 
% 
% \subsection{Summary}
% 
% \begin{verbatim}
% new lengths:
%   \PaperWidth     (read-only)
%   \PaperHeight    (read-only)
% 
% new ifs:
%   \ifLandscape    (read-only)
% 
% new macros:
%   \setpapersize[<orientation>]{<size>}, 
%   \setpapersize[<orientation>]{custom}{<width>}{<height>}
%       <orientation> (optional) = landscape or portrait (default)
%       <size> = A4, B5, ...
%       <width>, <height> = actual dimensions of the paper
%   \setmargins{leftmargin}{topmargin}{textwidth}{textheight}%
%           {headheight}{headsep}{footheight}{footskip}
%   \setmarginsrb{leftmargin}{topmargin}{rightmargin}{bottommargin}%
%           {headheight}{headsep}{footheight}{footskip}
%   \setmargnohf{leftmargin}{topmargin}{textwidth}{textheight}
%   \setmargnohfrb{leftmargin}{topmargin}{rightmargin}{bottommargin}
%   \setmarg{leftmargin}{topmargin}{textwidth}{textheight}
%   \setmargrb{leftmargin}{topmargin}{rightmargin}{bottommargin}
%
%   \margin@offset
%   \shiftmargins
% 
% LaTeX2e package options:
%   shiftmargins
%   portrait
%   landscape
%   nohf
%   all other options are treated as paper sizes
% \end{verbatim}\vspace{-\bigskipamount}
%
%
% \DoNotIndex{\ ,\.,\_}%^^A  DOES NOT WORK!!
% \DoNotIndex{\@ifnextchar,\@ifundefined,\@nameuse,\CurrentOption}
% \DoNotIndex{\DeclareOption,\NeedsTeXFormat,\PackageError}
% \DoNotIndex{\ProcessOptions,\ProvidesPackage,\advance,\begingroup}
% \DoNotIndex{\catcode,\count,\csname,\def,\dimen,\edef,\else}
% \DoNotIndex{\endcsname,\endgroup,\endinput,\evensidemargin}
% \DoNotIndex{\everyjob,\expandafter,\fi,\footheight,\footskip}
% \DoNotIndex{\headheight,\headsep,\if,\ifnum,\let,\loop}
% \DoNotIndex{\newcommand,\newdimen,\newif,\noexpand,\oddsidemargin}
% \DoNotIndex{\pagestyle,\relax,\repeat,\space,\string,\textheight}
% \DoNotIndex{\textwidth,\the,\topmargin,\typeout,\usename,\xdef}
% \DoNotIndex{\z@}
%
% \StopEventually{}
%
%
%
% \section{Implementation}
%
%    \begin{macrocode}
%<*package>
%    \end{macrocode}
%
%
% We use macros for the version info here.
%
% ^^A       search tag:  mAcRoVeRsIoN
%    \begin{macrocode}
%\def\filename{Vmargin}
\def\filename{vmargin}
\def\fileversion{V2.5}
\def\filedate{2004/07/15}
%    \end{macrocode}
%
% Allow \package{vmargin} to be |input| more than once.
% Important for embedding in formats.
%    \begin{macrocode}
\@ifundefined{Vmargin}{}{\endinput}
%    \end{macrocode}
%
% Make use of \LaTeX2e\ commands, but only if we are actually running with it.
%    \begin{macrocode}
\@ifundefined{documentclass}{
  \edef\Vmargin{Style `\filename', \fileversion, \filedate}
  \expandafter\everyjob\expandafter{\the\everyjob\typeout{\Vmargin}}
  \typeout{\Vmargin}
}{
  \NeedsTeXFormat{LaTeX2e}[1994/06/01]
  \edef\Vmargin{\filedate\space\fileversion\space set document margins (VK)}
  \ProvidesPackage{\filename}[\Vmargin]
  \edef\Vmargin{Package: \filename\space\Vmargin}
  \expandafter\everyjob\expandafter{\the\everyjob\typeout{\Vmargin}}
  \typeout{\Vmargin}
}
%    \end{macrocode}
%
%
% \begin{macro}{\PaperWidth}
% \begin{macro}{\PaperHeight}
% \begin{macro}{\ifLandscape}
% New lengths for paper width and height, and a new if, as flag for using
% landscape orientation.
%
%    \begin{macrocode}
\newdimen\PaperWidth
\newdimen\PaperHeight
\newif\ifLandscape
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
%
% \begin{macro}{\setpapersize}
% Setting a paper size. Kind of a data base lookup. Well, it looks up whether
% the control sequence is defined\ldots
% 
% When running pdflatex we also set the pdf page size (|\pdfpagewidth| and
% |\pdfpageheight|).
%    \begin{macrocode}
\def\setpapersize{\@ifnextchar[{\@@setps}{\@@setps[portrait]}}
\def\@@setps[#1]{%
  \@ifundefined{po@#1}{\@name@err{#1}}{\@nameuse{po@#1}}%
  \@@@setps}
\def\@@@setps#1{%
  \@ifundefined{paper@#1}{\@name@err{#1}}{}%
  \csname paper@#1\endcsname}
        % \usename{paper@#1} inside arg to \@ifundefined does not work
        % with papersize "custom".
\def\po@portrait{\Landscapefalse}
\def\po@landscape{\Landscapetrue}
\def\@po@{\ifLandscape
  \dimen0\PaperWidth\PaperWidth\PaperHeight\PaperHeight\dimen0
  \fi
  \@ifundefined{paperwidth}{}{\paperwidth\PaperWidth}%
  \@ifundefined{paperheight}{}{\paperheight\PaperHeight}%
  \@ifundefined{pdfpagewidth}{}{\pdfpagewidth\PaperWidth}%
  \@ifundefined{pdfpageheight}{}{\pdfpageheight\PaperHeight}%
  }
\@ifundefined{PackageError}{
  \def\@name@err#1{%
    \typeout{*****> \string\setpapersize: illegal parameter: #1}}
}{
 \def\@name@err#1{\PackageError{\filename}%
                    {Paper size or orientation unknown: #1}{}}
}
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\@defmetricpaper}
% Calculate smaller sizes from largest one.
%
%    \begin{macrocode}
\def\@defmetricpaper#1#2#3{%
  \begingroup
  \count0=0
  \def\w{\dimen1 }\def\h{\dimen2 }\def\s{\dimen3 }%
  \w#2\h#3
  \def\l{11}
  \loop
    \begingroup
    \def\t{\the\count0}
    \catcode`\t=11	% letter
    \expandafter\xdef\csname paper@#1\the\count0\endcsname{%
      \PaperWidth\the\w\PaperHeight\the\h\noexpand\@po@}
    \endgroup
    \s\w\w.5\h\h\s
  \ifnum\the\count0<9
    \advance\count0 by 1
  \repeat
  \endgroup
}
%    \end{macrocode}
% \end{macro}
%
% Pre-defined paper/envelope sizes:
%
% A0, A1, A2, ..., A9, B0, B1, ..., B9, C0, C1, ..., C9
%    \begin{macrocode}
\@defmetricpaper{A}{840.9mm}{1189.2mm}
\@defmetricpaper{B}{1000mm}{1414mm}
\@defmetricpaper{C}{917mm}{1297mm}
%    \end{macrocode}
%
% delete definition to save memory
%    \begin{macrocode}
\let\@defmetricpaper=\relax
%    \end{macrocode}
%
% USletter, USlegal, USexecutive
%    \begin{macrocode}
\def\paper@USletter{\PaperWidth 8.5in \PaperHeight 11in \@po@}
\def\paper@USlegal{\PaperWidth 8.5in \PaperHeight 14in \@po@}
\def\paper@USexecutive{\PaperWidth 7.25in\PaperHeight 10.5in \@po@}
%    \end{macrocode}
%
% custom
%    \begin{macrocode}
\def\paper@custom#1#2{\PaperWidth#1\PaperHeight#2\@po@}
%    \end{macrocode}
%
%
% \begin{macro}{\margin@offset}
% Initialise left margins (odd and even) and |\hoffset|, |\voffset|.
% Compensates for the +1in/+1in top/left corner used by \TeX\
% by either reducing the margins or |\hoffset|, |\voffset| by 1truein.
% This macro is only defined here if it is not already defined! Define this
% macro before loading \package{vmargin} to use your own definition.
%
%    \begin{macrocode}
\@ifundefined{margin@offset}{%
\def\margin@offset{%
  \if@shiftmargins
    \oddsidemargin -1truein\evensidemargin\oddsidemargin\topmargin\oddsidemargin
    \hoffset\z@\voffset\z@
  \else
    \oddsidemargin\z@\evensidemargin\z@\topmargin\z@
    \hoffset -1truein\voffset\hoffset
  \fi
}}{}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\shiftmargins}
% A new if, as flag for when to use margins instead of |\hoffset|/|\voffset| to
% compensate, and a user-command to set the flag.
%    \begin{macrocode}
\newif\if@shiftmargins
\@shiftmarginsfalse	% this MUST be default (pageframe.sty)
\def\shiftmargins{\@shiftmarginstrue}
%    \end{macrocode}
% \end{macro}
%
%
% Setting margins
%
% \begin{macro}{\setmargins}
% |\setmargins{leftmargin}{topmargin}{textwidth}{textheight}% |\\
% |   {headheight}{headsep}{footheight}{footskip}|
%
%    \begin{macrocode}
\newcommand\setmargins[8]{%
	\margin@offset
	\advance\oddsidemargin	#1
	\advance\evensidemargin	\PaperWidth	% = paperwidth - left - width
	\advance\evensidemargin	-#1
	\advance\evensidemargin	-#3
	\advance\topmargin	#2
	\textwidth	#3
	\textheight	#4
	\headheight	#5
	\headsep	#6
	\@ifundefined{footheight}{}{\footheight=#7}%
	\footskip	#8
	\chk@dimen{#1}{#2}{#3}{#4}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\setmarginsrb}
% |\setmarginsrb{leftmargin}{topmargin}{rightmargin}{bottommargin}%|\\
% |   {headheight}{headsep}{footheight}{footskip}|
%
%    \begin{macrocode}
\newcommand\setmarginsrb[8]{%
	\margin@offset
	\textwidth		\PaperWidth	% = paperwidth
	\advance\textwidth	-#1		%  - left - right
	\advance\textwidth	-#3
	\textheight		\PaperHeight	% = paperheight - top
	\advance\textheight	-#2		%  - headheight
	\advance\textheight	-#5		%  - headsep
	\advance\textheight	-#6		%  - footskip - bottom
	\advance\textheight	-#8
	\advance\textheight	-#4
	\advance\oddsidemargin	#1
	\advance\evensidemargin	\PaperWidth	% = paperwidth - left - width
	\advance\evensidemargin	-#1
	\advance\evensidemargin	-\textwidth
	\advance\topmargin	#2
	\headheight	#5
	\headsep	#6
	\@ifundefined{footheight}{}{\footheight=#7}%
	\footskip	#8
	\chk@dimen{#1}{#2}{#3}{#4}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\setmargnohf}
% |\setmargnohf{leftmargin}{topmargin}{textwidth}{textheight}|	\\
% headheight, headsep, footheight, footskip set to 0pt
%    \begin{macrocode}
\newcommand\setmargnohf[4]{%
	\setmargins{#1}{#2}{#3}{#4}\z@\z@\z@\z@
	\pagestyle{empty}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\setmargnohfrb}
% |\setmargnohfrb{leftmargin}{topmargin}{rightmargin}{bottommargin}|	\\
% headheight, headsep, footheight, footskip set to 0pt
%    \begin{macrocode}
\newcommand\setmargnohfrb[4]{%
	\setmarginsrb{#1}{#2}{#3}{#4}\z@\z@\z@\z@
	\pagestyle{empty}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\setmarg}
% |\setmarg{leftmargin}{topmargin}{textwidth}{textheight}|	\\
% headheight, headsep, footheight, footskip unchanged
%    \begin{macrocode}
\newcommand\setmarg[4]{%
	\setmargins{#1}{#2}{#3}{#4}%
            \headheight\headsep\footheight\footskip}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\setmargrb}
% |\setmargrb{leftmargin}{topmargin}{rightmargin}{bottommargin}|	\\
% headheight, headsep, footheight, footskip unchanged
%    \begin{macrocode}
\newcommand\setmargrb[4]{%
	\setmarginsrb{#1}{#2}{#3}{#4}%
            \headheight\headsep\footheight\footskip}
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\chk@dimen}
% A brief plausability check.\\
% h-warning:\\
%   \null\quad if [leftmarg + textwidth $>$ paperwidth] resp.\\
%   \null\quad if [leftmarg + rightmarg $>$ paperwidth].\\
% v-warning:\\
%   \null\quad if [topmarg + textheight $>$ paperheight] resp.\\
%   \null\quad if [topmarg + bottommarg $>$ paperheight].
%    \begin{macrocode}
\def\chk@dimen#1#2#3#4{%
	\dimen0=	#1
	\advance\dimen0 by#3
	\advance\dimen0 -\PaperWidth
	\dimen1=	#2
	\advance\dimen1 by#4
	\advance\dimen1 \headheight
	\advance\dimen1 \headsep
	\advance\dimen1 \footskip
	\advance\dimen1 -\PaperHeight
	\chk@dimen@err
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\chk@dimen@err}
% Make this work with both \LaTeX\ 2.09 and \LaTeXe.
%    \begin{macrocode}
\@ifundefined{PackageError}{
  \def\chk@dimen@err{%
    \ifnum\dimen0>\z@\typeout{vmargin Warning: Horizontal dimensions
      exceed paper width by \the\dimen0}\fi
    \ifnum\dimen1>\z@\typeout{vmargin Warning: Vertical dimensions
      exceed paper height by \the\dimen1}\fi
  }
}{
  \def\chk@dimen@err{%
    \ifnum\dimen0>\z@\PackageError{\filename}{%
      Horizontal dimensions exceed paper width by \the\dimen0}{}\fi
    \ifnum\dimen1>\z@\PackageError{\filename}{%
      Vertical dimensions exceed paper height by \the\dimen1}{}\fi
  }
}
%    \end{macrocode}
% \end{macro}
%
%
% Defaults, and \LaTeXe\ package options (ignored for 2.09).
%    \begin{macrocode}
\setpapersize{A4}
\def\@hf@dflt{}
\@ifundefined{DeclareOption}{
}{
  \DeclareOption{shiftmargins}{\shiftmargins}
  \DeclareOption{portrait}{\Landscapefalse}
  \DeclareOption{landscape}{\Landscapetrue}
  \DeclareOption{nohf}{\def\@hf@dflt{y}}
  \DeclareOption*{\@@@setps{\CurrentOption}}
  \ProcessOptions\relax  % process options in order of declaration!
}
\if y\@hf@dflt
  \setmargnohfrb{35mm}{20mm}{25mm}{15mm}%
\else
  \setmarginsrb{35mm}{20mm}{25mm}{15mm}{12pt}{11mm}{0pt}{11mm}%
\fi
%    \end{macrocode}
%
%
%    \begin{macrocode}
%</package>
%    \end{macrocode}
%
%
% \Finale
%
% \iffalse
% %% EOF vmargin.dtx
% %%----------------------------------------------------------------------------
% \fi
