%
% \GetFileInfo{gmeometric.sty}
% \title{The \pk{gmeometric} Package\thfileinfo}
% \author{Grzegorz Murzynowski}
% \maketitle
%
%
% \begin{copyrnote}
%
%%   Written by Grzegorz Murzynowski,
%%   natror at o2 dot pl
%%
%% \copyright\,2006, 2007, 2008 by Grzegorz Murzynowski.
%%
%% This program is subject to the \LaTeX\ Project Public License.
%% See
%% \url{http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html}
%% for the details of that license.
%%
%% LPPL status: "author-maintained".\par
%
%\end{copyrnote}
%
% \CheckSum{61}
% \chschange{v0.69}{2007/4/26}{40}
% \chschange{v0.70}{2007/4/29}{36}
% \chschange{v0.71}{2007/11/16}{41}
% \chschange{v0.72}{2007/11/17}{239}
% \chschange{v0.73}{2008/11/22}{237}
% \toCTAN{v0.73}{2008/11/22}
%
% 
% \skiplines we skip the driver
\ifnum\catcode`\@=12
\documentclass[codespacesgrey, noindex, pagella, fontspec=quiet]{gmdocc}
\twocoltoc
\begin{document}
\GetFileInfo{\jobname.sty}
\DocInput{\jobname.sty}

\PrintChanges
\thispagestyle{empty}

\typeout{%
  Produce change log with^^J%
  makeindex -r -s gmglo.ist -o \jobname.gls \jobname.glo^^J
  (gmglo.ist should be put into some texmf/makeindex directory.)^^J}

\afterfi{\end{document}
% The package is too small to make index of it.
%^^A\typeout{%
%^^A  Produce index with^^J%
%^^A  makeindex -r \jobname^^J}
}
\fi % of driver pass
% \endskiplines
%% \FileInfo

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{gmeometric}
     [2008/11/22 v0.73 to allow the `geometry' macro in the document (GM)]

%
%% \division{Introduction, usage}
%%
%% This package allows you to use the |\geometry| macro, provided by
%% the \pk{geometry} v3.2 and v4.1 by Hideo Umeki, anywhere in a~document:
%% originally it's claused |\@onlypreamble| and the main work of
%% \pk{gmeometric} is to change that.
%%
%% Note it's rather queer to change the page layout \emph{inside}
%% a~document and it should be considered as drugs or alcohol: it's
%% O.K.\ only if you \emph{really} know what you're doing.
%%
%% In order to work properly, the macro should launch the |\clearpage|
%% or the \cs{cleardoublepage} to `commit' the changes. So, the
%% unstarred version trigges the first while the starred the
%% latter. If that doesn't work quite as expected, try to precede or
%% succede it with |\onecolumn| or |\twocolumn|.
%%
%% It's important that |\clear(double)page| launched by |\geometry|
%% not to be a~no-op, i.e., |\clear(double)page| immediately
%% preceding |\geometry| (nothing is printed in between) discards the
%% `commitment'.
%%
%% \stanza
%% You may use \pk{gmeometric} just like \pk{geometry} i.e., to specify
%% the layout as the package options: they shall be passed to
%% \pk{geometry}.
%%
%% This package also checks if the engine is \XeTeX\ and sets the
%% proper driver if so. Probably it's redundant since decent \XeTeX\
%% packages provide their \pk{geometry.cfg} file that does that.
%%
%
% \begin{gmlonely}
%   \subdivision{Installation}
%   
%   Unpack the \file{gmeometric.tds.zip} archive in a~\file{texmf}
%   directory or put the \pk{gmeometric.sty} somewhere in the
%   \file{texmf/tex/latex} branch on your own. Creating
%   a~\file{texmf/tex/latex/gm} directory may be advisable if
%   you consider using other packages written by me.
%
%   Then you should refresh your \TeX\ distribution's files' database
%   most probably. 
% \end{gmlonely}
%
%
% \subdivision{Contents of the \pk{gmeometric.zip} archive}
%
% The distribution of the \pk{gmeometric} package consists of the
% following four files.
% \begin{verse}
%   \pk{gmeometric.sty}\\
%   \pk{README}\\
%   \pk{gmeometric.pdf}\\
%   \pk{gmeometric.tds.zip}
% \end{verse}
%
%
% \begin{gmlonely}
%   \subdivision{Compiling of the documentation}
%
%   The last of the above files (the \pk{.pdf}, i.e., \emph{this
%     file}) is a~documentation compiled from the \pk{.sty} file by
%   running \LaTeX\ (twice) on the \pk{gmeometric.sty} file 
%   (|xelatex gmeometric.sty|  in the directory you wish the
%   documentation to be in, you don't have copy the \file{.sty} file
%   there, \TeX\ will find it).
%   Compiling of the documentation requires the packages: \pk{gmdoc}
%   (\pk{gmdoc.sty} and \pk{gmdocc.cls}), \pk{gmverb.sty},
%   \pk{gmutils.sty}, \pk{gmiflink.sty} and also some standard
%   packages: \pk{hyperref.sty}, \pk{color.sty}, \pk{geometry.sty},
%   \pk{multicol.sty}, \pk{lmodern.sty}, \pk{fontenc.sty} that should
%   be installed on your computer by default.
%
%   If you have not installed the \pk{mwart.cls} class (available on
%   CTAN in \pk{mwcls} package), the result of your compilation may
%   differ a bit from the \pk{.pdf} provided in this \pk{.zip} archive
%   in formattings: If you have not installed \pk{mwart.cls}, the
%   standard \pk{article.cls} class will be used.
% \end{gmlonely}
%
%
% \division{Usage} The main use of this package is to allow the
% |\geometry| command also inside the \env{document} (originally it's
% |\@onlypreamble|). To make |\geometry| work properly is quite
% a~different business. It may be advisable to `commit' the layout
% changes with |\newpage|, |\clearpage|, or |\cleardoublepage| and
% maybe |\one/twocolumn|. 
%
% Some layout commands should be put before |\one/twocolumn| and other
% after it. An example:
%
%\begin{verbatim}
% \thispagestyle{empty}
%
% \advance\textheight 3.4cm\relax
% \onecolumn
% \newpage
%
% \advance\footskip-1.7cm
% \geometry{hmargin=1.2cm,vmargin=1cm}
% \clearpage
%\end{verbatim}
%
% And another:
%\begin{verbatim}
% \newpage
% \geometry{bottom=3.6cm}
%\end{verbatim}
%
% In some cases it doesn't work perfectly
% anyway. Well, the \acro{(LPPL)} license warns about it.
% 
% \division{The code}

\RequirePackage{gmutils}[2008/11/21]% this package defines the storing and
% restoring commands.

% Redefine |\@onlypreamble|, add storing to BeginDocument.
\newcommand*\gme@tobestored{{% this list consists of the \CS'es
    % relaxed at begin document by \pk{geometry} (the only
    % \incs{AtBeginDocument} in \pk{geometry} v4.1).
    % \changes{v0.73}{2008/11/22}{ two \CS'es added to the
    %   list for compatibility with \pk{geometry} v4.1}
    \Gm@cnth \Gm@cntv \c@Gm@tempcnt \Gm@bindingoffset \Gm@wd@mp
    \Gm@odd@mp \Gm@even@mp \Gm@orgpw \Gm@orgph \Gm@orgw \Gm@orgh
    \Gm@dimlist}}


\AtBeginDocument{\@xa\StoreMacros\gme@tobestored}
% \changes[\AtBeginDocument]{v0.73}{2008/11/22}{removed two
%   \cs{expandafter}s expanding \cs{gme@tobestored}: much less tokens
%   added to the begin-document hook}

\StoreMacro\@onlypreamble
\let\@onlypreamble\@gobble

% To make it work properly in \XeTeX:
\@ifXeTeX{%
  \@ifundefined{pdfoutput}{\newcount\pdfoutput}{}%
  \PassOptionsToPackage{dvipdfm}{geometry}%
}{}

\RequirePackageWithOptions{geometry}

% Restore |\@onlypreamble|:
\RestoreMacro\@onlypreamble

% Hypothesis: |\ifx...\@undefined| fails in the document because
% something made |\csname Gm@lines\endcsname|. So we change the test
% to decent. And i~think I've found the guilty: |\@ifundefined| in
% |\Gm@showparams|. So I~change it to the more elegant
% |\ifx\@undefined|. 
%^^A at first I~rewrote \cs{Gm@process}, let it be, maybe
%^^A one day I'll rewrite entire \pk{geometry}
%^^A \def\Gm@process{%
%^^A  \ifGm@pass
%^^A   \Gm@dorg
%^^A  \else
%^^A   \Gm@processdimlist
%^^A   \@ifundefined{Gm@hmarginratio}{%
%^^A     \if@twoside
%^^A       \edef\Gm@hmarginratio{\Gm@Dhratiotwo}%
%^^A     \else
%^^A       \edef\Gm@hmarginratio{\Gm@Dhratio}%
%^^A     \fi
%^^A   }{}%
%^^A   \@ifundefined{Gm@vmarginratio}{%
%^^A     \edef\Gm@vmarginratio{\Gm@Dvratio}%
%^^A   }%
%^^A   \Gm@checkpaper
%^^A   \ifGm@sworient
%^^A     \@tempdima=\paperwidth
%^^A     \paperwidth=\paperheight
%^^A     \paperheight=\@tempdima
%^^A     \Gm@setpaper(\strip@pt\paperwidth,\strip@pt\paperheight){pt}%
%^^A     \Gm@sworientfalse
%^^A   \fi
%^^A   \advance\paperwidth by-\Gm@bindingoffset
%^^A   \ifGm@includemp
%^^A     \Gm@mpfix
%^^A   \fi
%^^A   \ifGm@hbody
%^^A     \@ifundefined{Gm@width}{%
%^^A       \@ifundefined{Gm@hscale}{%
%^^A         \edef\Gm@width{\Gm@Dhscale\paperwidth}%
%^^A       }{%
%^^A         \edef\Gm@width{\Gm@hscale\paperwidth}%
%^^A       }%
%^^A     }%
%^^A     \@ifundefined{Gm@textwidth}{}{%
%^^A       \setlength\@tempdima{\Gm@textwidth}%
%^^A       \ifGm@includemp
%^^A         \advance\@tempdima\Gm@wd@mp
%^^A       \fi
%^^A       \edef\Gm@width{\the\@tempdima}%
%^^A     }%
%^^A   \fi
%^^A   \ifGm@vbody
%^^A     \@ifundefined{Gm@height}{%
%^^A       \@ifundefined{Gm@vscale}{%
%^^A         \edef\Gm@height{\Gm@Dvscale\paperheight}%
%^^A       }{%
%^^A         \edef\Gm@height{\Gm@vscale\paperheight}%
%^^A       }%
%^^A     }{}%
%^^A     \@ifundefined{Gm@lines}{}{%
%^^A       \@tempdima=\baselineskip
%^^A       \multiply\@tempdima\Gm@lines
%^^A       \advance\@tempdima by\topskip
%^^A       \advance\@tempdima by-\baselineskip
%^^A       \edef\Gm@textheight{\the\@tempdima}%
%^^A     }%
%^^A     \@ifundefined{Gm@textheight}{}{%
%^^A       \@tempdima=\Gm@textheight
%^^A       \ifGm@includehead
%^^A         \advance\@tempdima by\headheight
%^^A         \advance\@tempdima by\headsep
%^^A       \fi
%^^A       \ifGm@includefoot
%^^A         \addtolength\@tempdima{\footskip}%
%^^A       \fi
%^^A       \edef\Gm@height{\the\@tempdima}%
%^^A     }%
%^^A   \fi
%^^A   \Gm@detall{h}{width}{lmargin}{rmargin}%
%^^A   \Gm@detall{v}{height}{tmargin}{bmargin}%
%^^A   \setlength\textwidth{\Gm@width}%
%^^A   \setlength\textheight{\Gm@height}%
%^^A   \setlength\topmargin{\Gm@tmargin}%
%^^A   \setlength\oddsidemargin{\Gm@lmargin}%
%^^A   \addtolength\oddsidemargin{-1\Gm@truedimen in}%
%^^A   \ifGm@includemp
%^^A     \advance\textwidth-\Gm@wd@mp
%^^A     \advance\oddsidemargin\Gm@odd@mp
%^^A   \fi
%^^A   \if@mparswitch
%^^A     \setlength\evensidemargin{\Gm@rmargin}%
%^^A     \addtolength\evensidemargin{-1\Gm@truedimen in}%
%^^A     \ifGm@includemp
%^^A       \advance\evensidemargin\Gm@even@mp
%^^A     \fi
%^^A     \ifGm@compatii
%^^A       \@ifundefined{Gm@twosideshift}{%
%^^A         \def\Gm@twosideshift{20\Gm@truedimen pt}%
%^^A       }%
%^^A       \addtolength\oddsidemargin{\Gm@twosideshift}%
%^^A       \addtolength\evensidemargin{-\Gm@twosideshift}%
%^^A     \fi
%^^A   \else
%^^A     \evensidemargin\oddsidemargin
%^^A   \fi
%^^A   \advance\oddsidemargin\Gm@bindingoffset
%^^A   \addtolength\topmargin{-1\Gm@truedimen in}%
%^^A   \ifGm@includehead
%^^A     \addtolength\textheight{-\headheight}%
%^^A     \addtolength\textheight{-\headsep}%
%^^A   \else
%^^A     \addtolength\topmargin{-\headheight}%
%^^A     \addtolength\topmargin{-\headsep}%
%^^A   \fi
%^^A   \ifGm@includefoot
%^^A     \addtolength\textheight{-\footskip}%
%^^A   \fi
%^^A   \ifGm@heightrounded
%^^A     \setlength\@tempdima{\textheight}%
%^^A     \addtolength\@tempdima{-\topskip}%
%^^A     \@tempcnta\@tempdima
%^^A     \@tempcntb\baselineskip
%^^A     \divide\@tempcnta\@tempcntb
%^^A     \setlength\@tempdimb{\baselineskip}%
%^^A     \multiply\@tempdimb\@tempcnta
%^^A     \advance\@tempdima-\@tempdimb
%^^A     \multiply\@tempdima\tw@
%^^A     \ifdim\@tempdima>\baselineskip
%^^A       \addtolength\@tempdimb{\baselineskip}%
%^^A     \fi
%^^A     \addtolength\@tempdimb{\topskip}%
%^^A     \textheight\@tempdimb
%^^A   \fi
%^^A   \addtolength\paperwidth{\Gm@bindingoffset}%
%^^A  \fi}%

\def\Gm@showparams{% \changes{v0.72}{2007/11/17}{a~bug fix:
  %% \cs{@ifundefined\{Gm@lines\}} raised an error when \cs{geometry}
  %% used inside the \env{document}, I~change it to
  %% \cs{ifx}\cs{@undefined}}
  -------------------- Geometry parameters^^J%
  \ifGm@pass
  'pass' is specified!! (disables the geometry layouter)^^J%
  \else
  paper: \ifx\Gm@paper\@undefined class default\else\Gm@paper\fi^^J%
  \Gm@checkbool{landscape}%
  twocolumn: \if@twocolumn\Gm@true\else--\fi^^J%
  twoside: \if@twoside\Gm@true\else--\fi^^J%
  asymmetric: \if@mparswitch --\else\if@twoside\Gm@true\else --\fi\fi^^J%
  h-parts: \Gm@lmargin, \Gm@width, \Gm@rmargin%
  \ifnum\Gm@cnth=\z@\space(default)\fi^^J%
  v-parts: \Gm@tmargin, \Gm@height, \Gm@bmargin%
  \ifnum\Gm@cntv=\z@\space(default)\fi^^J%
  hmarginratio: \ifnum\Gm@cnth<5 \ifnum\Gm@cnth=3--\else%
    \Gm@hmarginratio\fi\else--\fi^^J%
  vmarginratio: \ifnum\Gm@cntv<5 \ifnum\Gm@cntv=3--\else%
    \Gm@vmarginratio\fi\else--\fi^^J%
  lines: \ifx\Gm@lines\@undefined--\else\Gm@lines\fi^^J% here
  % I~(natror) fix the bug: it was \inverb|\@ifundefined| that of
  % course was assigning \inverb|\relax| to \inverb|\Gm@lines| and
  % that resulted in an error when \inverb|\geometry| was used inside
  % document.
  \Gm@checkbool{heightrounded}%
  bindingoffset: \the\Gm@bindingoffset^^J%
  truedimen: \ifx\Gm@truedimen\@empty --\else\Gm@true\fi^^J%
  \Gm@checkbool{includehead}%
  \Gm@checkbool{includefoot}%
  \Gm@checkbool{includemp}%
  driver: \Gm@driver^^J%
  \fi
  -------------------- Page layout dimensions and switches^^J%
  \string\paperwidth\space\space\the\paperwidth^^J%
  \string\paperheight\space\the\paperheight^^J%
  \string\textwidth\space\space\the\textwidth^^J%
  \string\textheight\space\the\textheight^^J%
  \string\oddsidemargin\space\space\the\oddsidemargin^^J%
  \string\evensidemargin\space\the\evensidemargin^^J%
  \string\topmargin\space\space\the\topmargin^^J%
  \string\headheight\space\the\headheight^^J%
  \string\headsep\@spaces\the\headsep^^J%
  \string\footskip\space\space\space\the\footskip^^J%
  \string\marginparwidth\space\the\marginparwidth^^J%
  \string\marginparsep\space\space\space\the\marginparsep^^J%
  \string\columnsep\space\space\the\columnsep^^J%
  \string\skip\string\footins\space\space\the\skip\footins^^J%
  \string\hoffset\space\the\hoffset^^J%
  \string\voffset\space\the\voffset^^J%
  \string\mag\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%
  -----------------------}

% Add restore to BeginDocument:

\AtBeginDocument{\@xa\RestoreMacros\gme@tobestored}

\endinput
% \ChangesGeneral
%
% \changes{v0.70}{2007/04/29}{Back to the v0.68 settings because
% \cs{not@onlypreamble} was far too little. Well, in this version the
% redefinition of \cs{geometry} is given up since the `committing'
% commands depend on the particular situation so defining only two
% options doesn't seem advisable}
%
% \changes{v0.71}{2007/11/17}{a~\acro{TDS}-compliant \file{zip}
% archive made}
%
% \changes{v0.72}{2008/08/06}{2008/08/06 only the way of documenting changes so
% I~don't increase the version number}
%
%
% \NoEOF

% (For my GNU Emacs:)
%%% Local Variables: 
%%% mode: doctex
%%% TeX-master: "../../../../LaTeX/TeXGuru/gmeometric/gmeometricDoc.tex"
%%% End: