summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/geometry
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-11 23:53:43 +0000
committerKarl Berry <karl@freefriends.org>2006-01-11 23:53:43 +0000
commite4c3d9af333e856471e26c80bca1f1bcd8ec172b (patch)
tree4c3a80ac20b7131aa8ad74c4b1948e1bf5b3c9a4 /Master/texmf-dist/source/latex/geometry
parent0f0d49bc3ec60b16a83351299d981850c1acf704 (diff)
trunk/Master/texmf-dist/source/latex/geometry
git-svn-id: svn://tug.org/texlive/trunk@307 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/geometry')
-rw-r--r--Master/texmf-dist/source/latex/geometry/ChangeLog231
-rw-r--r--Master/texmf-dist/source/latex/geometry/Makefile47
-rw-r--r--Master/texmf-dist/source/latex/geometry/geometry.drv35
-rw-r--r--Master/texmf-dist/source/latex/geometry/geometry.dtx3029
-rw-r--r--Master/texmf-dist/source/latex/geometry/geometry.ins38
-rw-r--r--Master/texmf-dist/source/latex/geometry/manual.drv38
-rw-r--r--Master/texmf-dist/source/latex/geometry/test/Makefile26
-rw-r--r--Master/texmf-dist/source/latex/geometry/test/gcheck.sty49
-rw-r--r--Master/texmf-dist/source/latex/geometry/test/gtest01.tex35
-rw-r--r--Master/texmf-dist/source/latex/geometry/test/gtest02.tex36
-rw-r--r--Master/texmf-dist/source/latex/geometry/test/gtest03.tex32
-rw-r--r--Master/texmf-dist/source/latex/geometry/test/gtest04.tex31
-rw-r--r--Master/texmf-dist/source/latex/geometry/test/gtest05.tex32
-rw-r--r--Master/texmf-dist/source/latex/geometry/test/gtest06.tex35
-rw-r--r--Master/texmf-dist/source/latex/geometry/test/gtest07.tex34
-rw-r--r--Master/texmf-dist/source/latex/geometry/test/gtest08.tex32
-rw-r--r--Master/texmf-dist/source/latex/geometry/test/gtest09.tex36
-rw-r--r--Master/texmf-dist/source/latex/geometry/test/gtest10.tex31
-rw-r--r--Master/texmf-dist/source/latex/geometry/test/gtest11.tex34
-rw-r--r--Master/texmf-dist/source/latex/geometry/test/gtest12.tex33
-rw-r--r--Master/texmf-dist/source/latex/geometry/test/gtest13.tex33
-rw-r--r--Master/texmf-dist/source/latex/geometry/test/gtest14.tex43
-rw-r--r--Master/texmf-dist/source/latex/geometry/test/gtest15.tex40
-rw-r--r--Master/texmf-dist/source/latex/geometry/test/gtest16.tex37
24 files changed, 4047 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/geometry/ChangeLog b/Master/texmf-dist/source/latex/geometry/ChangeLog
new file mode 100644
index 00000000000..5bbf5671387
--- /dev/null
+++ b/Master/texmf-dist/source/latex/geometry/ChangeLog
@@ -0,0 +1,231 @@
+2002-07-08 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * Release 3.2
+ * Added known problem: for crop package with its 'center' option and
+ 'mag' larger than 1000, the result is not the one expected.
+ * Bug fix: double-valued marginratio setting like {1:1,1:5} didn't
+ work properly. {h|v}marginratio should have been set by \edef
+ instead of \def (line:439-440 in geometry.sty).
+ The bug was introduced in v3.1.
+ (I'd like to thank Rolf Niepraschk for his pointing out the bug.)
+ * Added two test files: gtest15.tex gtest16.tex
+
+2002-07-04 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * Release 3.1
+ * Bug fix: error in setting geometry dimensions with \widthof of
+ calc package. \Gm@defbylen and \Gm@defbycnt are introduced to set
+ geometry dimensions.
+
+2002-06-30 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ (Special thanks to Frank Mittelbach for checking codes patiently
+ and providing extremely helpful insight and suggestions)
+ * Release 3.0
+ * Revised geometry.dtx document.
+
+2002-06-28 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * Bug fix: multiple landscape/portrait switches malfunctioned.
+ * Bug fix: default hmarginratio wasn't reset when twoside is reset.
+ The initialization of default margionratios added in \Gm@clean.
+
+2002-06-12 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * Improved 'reset': can reset 'paper' given as a geometry option.
+ * Bug fix: class default papersize with class option 'landscape'
+ didn't work with \geometry command.
+
+2002-06-05 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * Added a landscape correction for dvips with 'special' command.
+ * Added 'dvipdfm' (same as 'dvips' internally).
+ * Changed driver settings ('dvips', 'pdftex', and all that) to exclusive.
+ * Bug fix: 'footnotesep' (\skip\footins) couldn't be reset.
+ * Bug fix: 'bindingoffset' didn't work with calc package
+ * Bug fix: 'showframe' vbox had improper height settings.
+ * Bug fix: complex margin settings with calc, e.g. (1in-50pt)*2/3,
+ didn't work well.
+
+2002-05-27 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * Added many '\@onlypreamble' commands.
+ * The default vscale is changed to 0.7.
+ * Added 'compat2' to achieve option compatibility with the old version.
+
+2002-05-24 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * 'pdfoutput=1' is removed because it is unnecessary and rather harmful
+ with package 'hyperref'.
+ * The default hscale is changed to 0.7.
+ * The default hmaginratio '\Geom@Dhratiotwo' (=2:3) is used
+ if \@twosidetrue.
+ * 'asymmetric' sets \@mparswitchfalse and \@twosidetrue, so that
+ one can use 'asymmetric' as an alternative to the 'twoside' option.
+
+2002-05-21 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * Added 'nomarginpar' with \marginparwidth and \marginparsep set to 0pt.
+ * Added '\geom@checkmp' checking if marginal notes fall off the page.
+ * '\geom@process' revised with new internal macros.
+ * Bug fixed: odd/evensidemargin calculations totally modified.
+
+2002-05-20 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * Changed the default settings (old defaults --> new defaults)
+ - scale={0.8,0.9} --> scale=0.8
+ - includeheadfoot, ignoremp --> ignoreall
+ - marginratio={2:3,1:2} for oneside, marginratio=2:3 for twoside
+ --> marginratio={1:1,2:3} for oneside, marginratio=2:3 for twoside
+
+2002-05-19 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * 'asymmetric' just sets \@mparswitchfalse. 'asymmetric=false' does
+ nothing.
+ * '\geom@process' revised.
+
+2002-05-14 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * 'nohead', 'nofoot' and 'noheadfoot' are just shortcut for
+ setting the corresponding LaTeX dimensions to zero, so they
+ are overwritable by subsequent options.
+ * Added 'asymmetric' option with the same layout on every pages.
+ 'twoside' automatically set 'asymmetric=false', but users can
+ set manually 'asymmetric(=true)'.
+ * Changed showparam style.
+ * Added 'hcentering' and 'vcentering', which set |hmarginratio=1:1|
+ and |vmarginratio=1:1| respectively.
+ * Bug fixed: incorrect margins when 'twocolumn' and 'includemp'
+ * Bug fixed: '(h|v)centering' option was set even when the value is
+ false.
+ * Bug fixed: \mag and options with true dimension values caused
+ overspecification warning about \mag. Now \mag cannot be specified
+ more than once as geometry option.
+ * Known Problem: 'reset' still leaves the last papername given as
+ a geometry option, not the class original papername.
+ Set the proper paper name again after 'reset'.
+
+2002-05-13 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * Added 'twocolumn' option
+ * "verbose" displays the parameter results on the terminal,
+ "verbose=false" (default) still puts them into the log.
+ * 'heightrounded' calculation no longer needs ifthen package.
+ * Bug fixed: 'heightrounded' always adjusted downwards.
+ * Bug fixed: it didn't work with calc package.
+ \Geom@setafter command needs \expandafter's
+ * Bug fixed: 'pass' and multiple 'reset' didn't work well.
+
+2002-05-10 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * Added 'showframe' option, which shows textarea and page frames,
+ and lines for head and foot to check layout in detail.
+ Geometry.sty now contains features of showframe.sty. So showframe.sty
+ is deleted from the distribution.
+ * Bug fixed: {h,v}offset was set wrong values when 'mag', 'truedimen'
+ and \geometry{..} macro were used.
+ * Bug fixed: execution timing of changing papersize was wrong.
+ This bug was introduced in v3.0 beta.
+
+2002-05-09 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * Added 'heightrounded' option. If \textheight is not specified,
+ this option rounds it to n-times (n: an integer) of \baselineskip plus
+ \topskip, \textheight = n * \baselineskip + \topskip,
+ to avoid "underfull vbox" in some cases. Default is false.
+ ifthen package included in LaTeX base bundle is required.
+ * Added 'lines' option, which enables users to specify \textheight
+ by the number of lines included in \textheight auto-calculating
+ \textheight = (lines - 1) * \baselineskip + \topskip.
+ This option is prior to all the other options determining 'textheight'
+ directly (ie. 'textheight', 'height', 'vscale').
+ * Bug fixed: \Geom@dset wasn't set by \edef.
+
+2002-04-26 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * \geom@setafter and \Geom@dset (both internal) makes LaTeX dimension
+ setting as a option (headsep, footskip, hoffset, and etc)
+ effective at the beginning of \geom@process for 'pass' option.
+ * Revised internal codes specifying papersize.
+ * Changed the way of displaying options and parameters in 'verbose' mode.
+
+2002-04-25 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * Version 3.0 beta
+ * Added 'screen' option as a new papersize (papersize={225mm,180mm}).
+ To make presentation with PC and video projector, geometry option
+ "screen,centering" with 'slide' documentclass must be the best choise.
+ * Added 'pass' option, which disables geometry's auto-layout.
+ * Added 'ratio' option equivalent to 'marginratio'.
+ * Added 'centering', a shortcut for 'marginratio=1:1'.
+ * Added 'innermargin' and 'outermargin', aliases for leftmargin
+ and rightmargin respectively.
+
+2002-04-22 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * Version 3.0 Candidate alpha, alpha-2 (formly known as 2.4 alpha-1,2)
+ * Added `ignorehead', `ignorefoot', `ignoreheadfoot', and
+ `ignoreheadfootmp'(ignoreall) options to disregard
+ head/foot/marginpars spaces.
+ * Added `{h|v}marginratio' options.
+ These options specify visible marginal spaces in each direction,
+ left(inner):right(outer) for the horizontal ratio, top:bottom
+ for the vertical. They should be set in 'a:b' style and each
+ value should be a positive integer less than 100 to avoid
+ arithmetic overflow. In default, hmarginratio=2:3 (1:2 for
+ twoside) and vmarginratio=1:2.
+ * The 'automatic' centering is no longer default layout,
+ so marginratio={2:3,1:2} is used as default.
+ * Removed twosideshift option, use bindingoffset instead.
+ bindingoffset is set 0pt as default and supports twoside.
+
+2000-06-28 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * Release 2.3
+ * Added `truedimen', `columnsep' and `footnotesep' options.
+ * VTeX supported.
+ * Modified internal settings for twosideshift and mag.
+
+1999-10-07 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * Release 2.2
+ * Bug fixed: explicit twoside was needed for book.cls.
+
+1999-09-27 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * Release 2.1
+ * Bug fixed: twosideshift with reversemarginpar made wrong margins.
+ * Added mag option.
+ * Paper sizes A6 and B6 supported.
+ * Changed license declaration to LPPL.
+
+1998-04-06 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * Release 2.0
+ * Flexible setting scheme for package option with keyval.
+ * Removed exclamations and extra control sequences for paperwidth
+ and paperheight.
+ * Totally revised the code and document.
+
+1997-09-08 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * Release 1.08
+ * Included geometry.cfg into geometry.dtx.
+ * Changed the catcode of exclamation mark.
+
+1997-07-05 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * Release 1.07
+ * Modified process of 'dvips' option.
+ * pdftex supported.
+ * Added `a0paper' and `b0paper'.
+
+1997-04-16 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * Release 1.06
+ * reversemarginpar supported.
+
+1997-02-17 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * Release 1.05
+ * Changed the definition for dvips option.
+
+1996-08-05 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * Release 1.04
+ * Bug fixed: papersize= had no effect when papertype was given
+ in geometry.cfg or as a package option.
+
+1996-07-17 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * Release 1.03
+ * calc support
+
+1996-06-07 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * Release 1.02
+ * Changed definition for `reset' option.
+ * Revised instructions for `reset' and `dvips' options.
+
+1996-06-03 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * Release 1.01
+ * Fixed bugs in setting paper and option processing.
+ * geometry.cfg
+ * Added `dvips' option.
+
+1996-05-31 Hideo UMEKI <hideo.umeki@toshiba.co.jp>
+ * Release 1.00
+ * Started geometry package distribution.
+ * Use keyval interface.
+EOF \ No newline at end of file
diff --git a/Master/texmf-dist/source/latex/geometry/Makefile b/Master/texmf-dist/source/latex/geometry/Makefile
new file mode 100644
index 00000000000..1bfb24849c1
--- /dev/null
+++ b/Master/texmf-dist/source/latex/geometry/Makefile
@@ -0,0 +1,47 @@
+RM=rm -f
+SHELL=sh
+VERSION=3.2
+FILES=README ChangeLog Makefile geometry.dtx geometry.ins manual.pdf gtest.tex
+JUNKS=*.aux *.toc *.idx *.drv *.dvi *.log *.lof *.ist *.ilg *.ind *.out
+
+unpack:
+ latex geometry.ins
+ @echo '**************************************'
+ @echo ' To make geomtery documentation, '
+ @echo ' % make manual '
+ @echo ' or '
+ @echo ' % make doc (for full documentation)'
+ @echo '**************************************'
+
+all: unpack doc manual
+
+geometry.drv: unpack
+manual.drv: unpack
+
+doc: geometry.drv
+ latex geometry.drv
+ latex geometry.drv
+ latex geometry.drv
+
+manual: manual.drv
+ -$(RM) manual.aux
+ pdflatex manual.drv
+ pdflatex manual.drv
+ pdflatex manual.drv
+
+test: unpack
+ -cp geometry.sty geometry.cfg test
+ @echo
+ @(cd test; for f in gtest*tex; do latex $$f; done)
+ @echo
+ @echo "--- Summary of Tests ---"
+ @(cd test; grep -h Test gtest*.log)
+ @echo "-------------------------"
+
+pack: clean
+ -(cd ..; tar cvfz geometry-$(VERSION).tgz geometry-$(VERSION))
+
+clean:
+ @$(RM) $(JUNKS) geometry.sty geometry.cfg *~ \#*
+ @(cd test; $(RM) $(JUNKS) geometry.sty geometry.cfg *~ \#*)
+ @echo The current and test directories have been cleaned up.
diff --git a/Master/texmf-dist/source/latex/geometry/geometry.drv b/Master/texmf-dist/source/latex/geometry/geometry.drv
new file mode 100644
index 00000000000..3b10423cc8d
--- /dev/null
+++ b/Master/texmf-dist/source/latex/geometry/geometry.drv
@@ -0,0 +1,35 @@
+%%
+%% This is file `geometry.drv',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% geometry.dtx (with options: `driver')
+%%
+%% File: geometry.dtx Copyright (C) 1996-2002 Hideo Umeki
+%% (hideo.umeki@toshiba.co.jp)
+%%
+%% This package may be distributed under the terms of the LaTeX
+%% Project Public License, as described in lppl.txt in the base
+%% LaTeX distribution, either version 1.2 or (at your option)
+%% any later version.
+%%
+\ProvidesFile{geometry.drv}
+ [Geometry documentation driver file]
+\documentclass{ltxdoc}
+\usepackage{times}
+\def\ttdefault{cmtt}
+\usepackage[ hmargin={4cm,1.5cm},top=1.5cm, marginpar=3.5cm
+ ]{geometry}
+%\OnlyDescription
+\begin{document}
+ \GetFileInfo{geometry.sty}
+ \title{The \textsf{geometry} package}
+ \author{Hideo UMEKI\\\texttt{hideo.umeki@toshiba.co.jp}}
+ \date{\filedate~~\fileversion{}}
+ \maketitle
+ \DocInput{geometry.dtx}
+\end{document}
+\endinput
+%%
+%% End of file `geometry.drv'.
diff --git a/Master/texmf-dist/source/latex/geometry/geometry.dtx b/Master/texmf-dist/source/latex/geometry/geometry.dtx
new file mode 100644
index 00000000000..ad991a72efc
--- /dev/null
+++ b/Master/texmf-dist/source/latex/geometry/geometry.dtx
@@ -0,0 +1,3029 @@
+% \iffalse meta-comment
+%% File: geometry.dtx Copyright (C) 1996-2002 Hideo Umeki
+%% (hideo.umeki@toshiba.co.jp)
+%%
+%% This package may be distributed under the terms of the LaTeX
+%% Project Public License, as described in lppl.txt in the base
+%% LaTeX distribution, either version 1.2 or (at your option)
+%% any later version.
+%%
+%
+%<package>\NeedsTeXFormat{LaTeX2e}%
+%<package>\ProvidesPackage{geometry}[2002/07/08 v3.2 Page Geometry]
+%<driver>\ProvidesFile{geometry.drv}
+%<manual>\ProvidesFile{manual.drv}
+%<driver> [Geometry documentation driver file]
+%<manual> [Geometry manual driver file (A4 PDF)]
+%<*driver|manual>
+\documentclass{ltxdoc}
+\usepackage{times}
+\def\ttdefault{cmtt}
+%<manual>\usepackage[colorlinks, linkcolor=blue,
+%<manual> pdftitle={Geometry Manual}, pdfauthor={Hideo Umeki}]{hyperref}
+\usepackage[ hmargin={4cm,1.5cm},top=1.5cm, marginpar=3.5cm
+%<manual> ,a4paper,pdftex, hmargin=3cm, top=2cm
+ ]{geometry}
+%<manual>\OnlyDescription
+%<driver>%\OnlyDescription
+\begin{document}
+ \GetFileInfo{geometry.sty}
+ \title{The \textsf{geometry} package}
+ \author{Hideo UMEKI\\\texttt{hideo.umeki@toshiba.co.jp}}
+ \date{\filedate~~\fileversion{}}
+ \maketitle
+ \DocInput{geometry.dtx}
+\end{document}
+%</driver|manual>
+% \fi
+%
+% \CheckSum{2369}
+%
+% \def\OpenB{{\ttfamily\char`\{}}
+% \def\Comma{{\ttfamily\char`,}}
+% \def\CloseB{{\ttfamily\char`\}}}
+% \newcommand\argii[2]{\OpenB\meta{#1}\Comma\meta{#2}\CloseB}
+% \newcommand\argiii[3]{\OpenB\meta{#1}\Comma\meta{#2}\Comma\meta{#3}\CloseB}
+% \newcommand\vargii[2]{\OpenB#1\Comma#2\CloseB}
+% \newcommand\vargiii[3]{\OpenB#1\Comma#2\Comma#3\CloseB}
+% \newcommand\OR{\ \strut\vrule width .4pt\ }
+% \newcommand\gpart[1]{\textsl{#1}}
+% \newcommand\glen[1]{\textsf{#1}}
+% \newcommand\New[1]{\llap{$^{\star#1\:}$}}
+% \newcommand\Mod[1]{\llap{$^{\dagger#1\:}$}}
+% \newenvironment{key}[2]{\expandafter\macro\expandafter{`#2'}}{\endmacro}
+% \newenvironment{Options}%
+% {\begin{list}{}{%
+% \renewcommand{\makelabel}[1]{\texttt{##1}\hfil}%
+% \setlength{\itemsep}{-.5\parsep}
+% \settowidth{\labelwidth}{\texttt{xxxxxxxxxxx\space}}%
+% \setlength{\leftmargin}{\labelwidth}%
+% \addtolength{\leftmargin}{\labelsep}}%
+% \raggedright}
+% {\end{list}}
+%
+% \MakeShortVerb{|}
+%
+% \begin{abstract}
+% This package provides a flexible and complete user interface to page
+% dimensions. You can specify them by using intuitive parameters to get
+% your desired page layout. For example, if you want to set margins
+% (the left, right, top and bottom margins) to 2cm from each edge of
+% the paper, what you need is just |\usepackage[margin=2cm]{geometry}|.
+% \end{abstract}
+%
+% \newif\ifmulticols
+% \IfFileExists{multicol.sty}{\multicolstrue}{}
+% \ifmulticols
+% \addtocontents{toc}{%
+% \protect\setlength{\columnsep}{3pc}%
+% \protect\begin{multicols}{2}}
+% \fi
+% {\parskip 0pt
+% \tableofcontents
+% }
+%
+% \section{Preface to Version 3}
+%
+% The \textsf{geometry} package becomes even more flexible and powerful with
+% the release of version 3. This new release contains major changes and
+% enhancements in user interface, calculation schemes and the default settings
+% of the page dimensions.
+% \begin{itemize}
+% \item \textbf{New default layout.}\par
+% The `automatic' centering is no longer default layout. Instead of
+% centering, the idea of margin ratio and common values for default settings
+% are introduced: the ratio of left (inner) margin to right (outer) margin
+% is set 1:1 (2:3 for twoside), and the ratio of top to bottom is set 2:3.
+% The margin ratios can be specified by newly introduced options,
+% e.g. |marginratio| (see Section~\ref{sec:completion} and \ref{sec:margin}
+% for the detail). In addition, the spaces for the head and foot of the
+% page are disregarded in calculating the placement of the text area by
+% default. Furthermore the default |scale| of the type area is set to
+% |0.7| with 70\% of the width and height of the paper.
+% If you want to use the old default layout of version 2.3 or earlier,
+% add |compat2| as a first option, e.g.,
+% |\usepackage[compat2,left=1.5in]{geometry}|, which sets
+% the old default options
+% \texttt{[scale=\{0.8,0.9\}, centering, includeheadfoot]} and allows
+% the subsequent options to behave as if they are used in the old version.
+% See also Section~\ref{sec:default} for the detail of the default layout.
+%
+% \item \textbf{Option |twosideshift| is obsoleted.} \par
+% |twoside| and other geometry options can substitute for it.
+% A new option |bindingoffset| might be also helpful to control margins for
+% oneside/twoside. For the detail, see Section~\ref{sec:margin}.
+%
+% \item \textbf{Option |includemp| becomes independent of |marginparwidth|
+% and |marginparsep|.} \par
+% In the previous version, |marginparwidth| or |marginparsep|
+% automatically set |includemp=true|. Now if you want |includemp| mode,
+% |includemp| should be set explicitly.
+%
+% \item \textbf{Options |nohead|, |nofoot| and |noheadfoot| become
+% order-dependent and overwritable} \par
+% In the previous version, these options was order-independent:
+% |nohead,headsep=10pt| resulted in just |nohead| (\cs{headsep}|=0pt|,
+% \cs{headheight}|=0pt|), for example. But now they are overwritable
+% by subsequent options. The above case results in \cs{headheight}|=0pt|
+% and \cs{headsep}|=10pt|.
+%
+% \item \textbf{A complete set of options |ignore*| and |include*| for
+% head, foot and marginpar.}\par
+% The previous version has only |includemp|, which denotes that the width
+% of marginpar is included in the total body width.
+% Now |ignore|\{|head|, |foot|, |headfoot|, |mp|, |all|\} and
+% |include|\{|head|, |foot|, |headfoot|, |all|\} are newly added.
+% If one of these |ignore*| is set, the corresponding space(s) are
+% disregarded in auto-completion calculation.
+% In version 3, |ignoreall| is set by default. So if you need to include
+% the spaces for the head, foot and marginpar, the corresponding |include*|
+% should be set explicitly. In addition, unlike the previous version,
+% neither |reversemp|, |marginparwidth| nor |marginparsep| sets |includemp|
+% automatically.
+%
+% \item \textbf{New option |lines|.}\par
+% The option enables users to specify \cs{textheight} by the number of
+% lines included in \cs{textheight}, e.g., |lines=20|.
+%
+% \item \textbf{New option |heightrounded|.}\par
+% The option rounds \cs{textheight} to \textit{n}-times (\textit{n}:
+% an integer) of \cs{baselineskip} plus \cs{topskip} to avoid ``underfull
+% vbox'' in some cases.
+%
+% \item \textbf{New option |screen|.}\par
+% To make presentation with PC and video projector, geometry option
+% |screen,centering| with `slide' documentclass would be the best choice.
+%
+% \item \textbf{New option |asymmetric|.}\par
+% The option implements a twosided layout in which margins are not swapped
+% on alternate pages and the marginal notes stay always on the same side.
+%
+% \item \textbf{New option |showframe|.}\par
+% The option displays visible frames for the text area and page, and lines
+% for the head and foot to check layout in detail. Therefore |showframe.sty|
+% is excluded from the \textsf{geometry} package distribution.
+%
+% \item \textbf{New option |pass|.}\par
+% The option disables auto-layout and all of the geometry settings except
+% |verbose| and |showframe|. It can be used for checking out the page
+% layout of the documentclass, other packages and manual settings
+% without \textsf{geometry}.
+% \end{itemize}
+% See the text for the detail. All the new and modified options in this
+% release are marked with `$\star3$' and `$\dagger3$' respectively.
+%
+% \section{Introduction}
+%
+% To set dimensions for page layout in \LaTeX\ is not straightforward.
+% You need to adjust several \LaTeX{} native dimensions to place a text area
+% where you want
+% If you want to center the text area in the paper you use, for example,
+% you have to specify native dimensions as follows:
+% \begin{quote}
+% |\usepackage{calc}|\\
+% |\setlength\textwidth{7in}|\\
+% |\setlength\textheight{10in}|\\
+% |\setlength\oddsidemargin{(\paperwidth-\textwidth)/2 - 1in}|\\
+% |\setlength\topmargin{(\paperheight-\textheight|\\
+% | -\headheight-\headsep-\footskip)/2 - 1in}|.
+% \end{quote}
+% Without package \textsl{calc}, the above example would need
+% more tedious settings. Package \textsf{geometry} provides an easy
+% way to set page layout parameters. In this case, what you have to do
+% is just
+% \begin{quote}
+% |\usepackage[text={7in,10in},centering]{geometry}|.
+% \end{quote}
+% Besides centering problem, setting margins from each edge of the paper is
+% also troublesome. But \textsf{geometry} also make it easy.
+% If you want to set each margin 1.5in, you can go
+% \begin{quote}
+% |\usepackage[margin=1.5in]{geometry}|
+% \end{quote}
+% In both cases, the unspecified dimensions are automatically determined.
+% The package will be also useful when you have to set page layout obeying
+% the following strict instructions: for example,
+% \begin{quote}\slshape
+% The total allowable width of the text area is 6.5 inches wide by 8.75
+% inches high. The top margin on each page should be 1.2 inches from
+% the top edge of the page. The left margin should be 0.9 inch from
+% the left edge. The footer with page number should be at the bottom
+% of the text area.
+% \end{quote}
+% In this case, using \textsf{geometry} you can go
+% \begin{quote}
+% |\usepackage[total={6.5in,8.75in},|\\
+% | top=1.2in, left=0.9in, includefoot]{geometry}|.
+% \end{quote}
+%
+% Setting a text area on the paper in document preparation system has some
+% analogy to placing a window on the background in the window system.
+% The name `geometry' comes from the |-geometry| option used for specifying
+% a size and location of a window in X Window System.
+%
+% \section{Page Geometry}
+% \subsection{Layout Dimensions}
+% To realize a straightforward setting for page layout, the following page
+% structure is introduced: A paper contains a total body (printable area)
+% and margins. The total body consists of a body (text area) with optional
+% a header, a footer and marginal notes (marginpar). There are four margins:
+% the left, right, top and bottom margins. For twosided documents, horizontal
+% margins should be called the inner and outer margins.
+% \begin{quote}
+% \begin{tabular}{rcl}
+% \gpart{paper}&:&\gpart{total body} and
+% \gpart{margins}\\
+% \gpart{total body}&:&\gpart{body} (text area)\quad
+% (optional \gpart{head}, \gpart{foot} and \gpart{marginpar})\\
+% \gpart{margins}&:&\gpart{left}(\gpart{inner}),
+% \gpart{right}(\gpart{outer}), \gpart{top} and \gpart{bottom}
+% \end{tabular}
+% \end{quote}
+% Each margin is measured from the corresponding edge of a paper.
+% For example, left margin (inner margin) means a horizontal distance
+% between the left (inner) edge of the paper and that of the total body.
+% Therefore the left and top margins defined in \textsf{geometry}
+% are different from the native dimensions \cs{leftmargin}
+% and \cs{topmargin}.
+% The size of a body (text area) can be modified by \cs{textwidth} and
+% \cs{textheight}.
+%
+% The layout parts and the corresponding dimension names used in this
+% package are showed schematically in Figure~\ref{fig:layout}.
+% \begin{figure}
+% \centering\small
+% {\unitlength=.65pt
+% \begin{picture}(450,250)(0,-10)
+% \put(20,0){\framebox(170,230){}}
+% \put(20,235){\makebox(170,230)[br]{\gpart{paper}}}
+% \put(40,30){\framebox(120,170){}}
+% \put(40,30){\makebox(120,165)[tr]{\gpart{total body}~}}
+% \put(45,30){\makebox(0,170)[l]{|height|}}
+% \put(50,35){\makebox(120,0)[bc]{|width|}}
+% \put(50,-20){\makebox(120,0)[bc]{|paperwidth|}}
+% \put(10,45){\makebox(0,170)[r]{|paperheight|}}
+% \put(90,200){\makebox(0,30)[lc]{|top|}}
+% \put(90,0){\makebox(0,30)[lc]{|bottom|}}
+% \put(10,70){\makebox(0,0)[r]{|left|}}
+% \put(10,55){\makebox(0,0)[r]{(|inner|)}}
+% \put(200,70){\makebox(0,0)[l]{|right|}}
+% \put(200,55){\makebox(0,0)[l]{(|outer|)}}
+% \put(80,230){\vector(0,-1){30}}\put(80,30){\vector(0,-1){30}}
+% \put(80,200){\vector(0,1){30}}\put(80,0){\vector(0,1){30}}
+% \put(20,70){\vector(1,0){20}}\put(40,70){\vector(-1,0){20}}
+% \put(160,70){\vector(1,0){30}}\put(190,70){\vector(-1,0){30}}
+% \multiput(160,30)(5,0){24}{\line(1,0){2}}
+% \multiput(160,200)(5,0){24}{\line(1,0){2}}
+% \put(280,30){\framebox(120,170){}}
+% \put(280,30){\makebox(120,165)[tr]{\gpart{total body}~}}
+% \put(280,220){\line(1,0){120}}
+% \put(280,208){\makebox(120,20)[bc]{\gpart{head}}}
+% \put(280,207){\line(1,0){120}}
+% \put(410,215){\makebox(0,0)[l]{|headheight|}}
+% \put(410,203){\makebox(0,0)[l]{|headsep|}}
+% \put(410,110){\makebox(0,0)[l]{|textheight|}}
+% \put(280,35){\makebox(120,0)[bc]{|textwidth|}}
+% \put(410,20){\makebox(0,0)[l]{|footskip|}}
+% \put(280,40){\makebox(120,140)[c]{\gpart{body}}}
+% \put(280,15){\makebox(120,10)[c]{\gpart{foot}}}
+% \put(280,14){\line(1,0){120}}
+% \end{picture}}
+% \caption[Dimension names for \textsf{geometry}]{%
+% \begin{minipage}[t]{.8\textwidth}\raggedright\small
+% Dimension names used in the \textsf{geometry} package.
+% |width|=|textwidth| and |height|=|textheight| by default.
+% |left|, |right|, |top| and |bottom| are margins.
+% If margins on verso pages are swapped by |twoside| option,
+% margins specified by |left| and |right| options
+% are used for the inside and outside margins respectively.
+% |inner| and |outer| are aliases of |left| and |right|
+% respectively.
+% \end{minipage}}
+% \label{fig:layout}
+% \end{figure}
+% The dimensions for paper, total body and margins have the following
+% relations.
+% \begin{eqnarray}
+% \label{eq:paperwidth}
+% |paperwidth| &=& |left|+|width|+|right| \\
+% |paperheight| &=& |top|+|height|+|bottom|
+% \label{eq:paperheight}
+% \end{eqnarray}
+% The dimensions of the total body, |width| and |height|, are defined
+% as follows:
+% \begin{eqnarray}
+% \label{eq:width}
+% |width| &:=& |textwidth| \quad( + |marginparsep| + |marginparwidth| )\\
+% |height| &:=& |textheight| \quad(+ |headheight| + |headsep| + |footskip| )
+% \label{eq:height}
+% \end{eqnarray}
+% In Equation (\ref{eq:width}), |width:=textwidth| by default,
+% but |marginparsep| and |marginparwidth| are included in |width|
+% if |includemp| option is set |true|.
+% In Equation (\ref{eq:height}), |height:=textheight| by default.
+% If |includehead| is set to |true|, |headheight| and |headsep| are
+% considered as a part of |height| in the the vertical completion calculation.
+% In the same way, |includefoot| includes
+% |footskip|. Note that options |ignore*| just exclude the corresponding
+% spaces from |textheight|, but do not change those lengths themselves.
+% Figure~\ref{fig:includes} shows how these options work.
+% \begin{figure}
+% \centering\small
+% {\unitlength=.65pt
+% \begin{picture}(490,280)(0,-10)
+% \put(25,255){\makebox(120,0)[bl]{\textbf{(a)}~\textit{default}}}%
+% \put(20,0){\framebox(170,230){}}
+% \put(20,230){\makebox(170,230)[br]{\gpart{paper}}}
+% \put(40,30){\framebox(120,165){}}
+% \put(70,165){\vector(0,1){30}}
+% \put(55,145){\makebox(0,20)[lc]{|textheight|}}
+% \put(70,145){\vector(0,-1){115}}
+% \multiput(40,203)(5,0){24}{\line(1,0){3}}
+% \multiput(40,213)(5,0){24}{\line(1,0){3}}
+% \multiput(40,10)(5,0){24}{\line(1,0){3}}
+% \put(40,203){\makebox(120,20)[bc]{\gpart{head}}}
+% \put(40,40){\makebox(120,140)[c]{\gpart{body}}}
+% \put(40,10){\makebox(120,10)[c]{\gpart{foot}}}
+% \put(150,230){\vector(0,-1){35}}\put(150,30){\vector(0,-1){30}}
+% \put(150,195){\vector(0,1){35}}\put(150,0){\vector(0,1){30}}
+% \put(160,197){\makebox(0,30)[lc]{|top|}}
+% \put(160,0){\makebox(0,30)[lc]{|bottom|}}
+% \multiput(160,30)(5,0){24}{\line(1,0){2}}
+% \multiput(160,195)(5,0){24}{\line(1,0){2}}
+% \put(265,255){\makebox(120,0)[bl]
+% {\textbf{(b)}~|includehead| and |includefoot|}}%
+% \put(260,0){\framebox(170,230){}}
+% \put(260,230){\makebox(170,230)[br]{\gpart{paper}}}
+% \put(280,30){\framebox(120,165){}}
+% \put(310,150){\vector(0,1){25}}
+% \put(295,130){\makebox(0,20)[lc]{|textheight|}}
+% \put(310,130){\vector(0,-1){80}}
+% \multiput(280,183)(5,0){24}{\line(1,0){3}}
+% \multiput(280,175)(5,0){24}{\line(1,0){3}}
+% \multiput(280,50)(5,0){24}{\line(1,0){3}}
+% \put(280,183){\makebox(120,20)[bc]{\gpart{head}}}
+% \put(280,40){\makebox(120,140)[c]{\gpart{body}}}
+% \put(400,140){\line(1,1){45}}
+% \put(437,187){\makebox(50,10)[l]{\gpart{total body}}}
+% \put(280,30){\makebox(120,10)[c]{\gpart{foot}}}
+% \put(370,230){\vector(0,-1){35}}\put(370,30){\vector(0,-1){30}}
+% \put(370,195){\vector(0,1){35}}\put(370,0){\vector(0,1){30}}
+% \put(380,197){\makebox(0,30)[lc]{|top|}}
+% \put(380,0){\makebox(0,30)[lc]{|bottom|}}
+% \end{picture}}
+% \caption[An effect of \texttt{includehead} and \texttt{includefoot}.]{%
+% \begin{minipage}[t]{.8\textwidth}\raggedright\small
+% |includehead| and |includefoot| include the head and foot respectively
+% into \gpart{total body}. \textbf{(a)} |height| $=$ |textheight| (default).
+% \textbf{(b)} |height| $=$ |textheight| $+$ |headheight| $+$ |headsep| $+$
+% |footskip| if |includehead| and |includefoot|. If the top and bottom
+% margins are fixed, |includehead| and |includefoot| make |textheight|
+% shorter than default.
+% \end{minipage}}
+% \label{fig:includes}
+% \end{figure}
+% Each of the seven dimensions in the right-hand side of Equations
+% (\ref{eq:width}) and (\ref{eq:height}) corresponds to the ordinary
+% \LaTeX\ control sequence with the same name.
+%
+% Figure~\ref{fig:modes} illustrates various layouts with different layout
+% modes. The dimensions for a header and a footer can be controlled by
+% |nohead| or |nofoot| mode, which sets each length to 0pt directly.
+% On the other hand, options |ignore*| do \textit{not} change
+% the corresponding native dimensions.
+% \begin{figure}
+% \centering\small
+% {\unitlength=.65pt
+% \begin{picture}(460,525)(0,0)
+% \put( 20,310){\framebox(120,170){}}
+% \put( 20,507){\makebox(120,0)[bl]%
+% {\textbf{(a)}~|includeheadfoot|}}
+% \put( 20,460){\line(1,0){120}}\put( 20,450){\line(1,0){120}}
+% \put( 20,330){\line(1,0){120}}
+% \put( 20,485){\makebox(120,0)[br]{\gpart{total body}}}
+% \put( 20,335){\makebox(120,0)[bc]{|textwidth|}}
+% \put(150,470){\makebox(0,0)[l]{|headheight|}}
+% \put(150,450){\makebox(0,0)[l]{|headsep|}}
+% \put(150,390){\makebox(0,0)[l]{|textheight|}}
+% \put(150,320){\makebox(0,0)[l]{|footskip|}}
+% \put( 10,460){\makebox(120,20)[bc]{\gpart{head}}}
+% \put( 10,320){\makebox(120,140)[c]{\gpart{body}}}
+% \put( 10,310){\makebox(120,10)[c]{\gpart{foot}}}
+% \put(250,310){\framebox(120,170){}}
+% \put(250,507){\makebox(120,0)[bl]%
+% {\textbf{(b)}~|includeall|}}
+% \put(250,460){\line(1,0){95}}\put(250,450){\line(1,0){95}}
+% \put(250,330){\line(1,0){95}}\put(345,330){\line(0,1){120}}
+% \put(350,330){\line(0,1){120}}\put(350,450){\line(1,0){20}}
+% \put(350,330){\line(1,0){20}}
+% \put(250,485){\makebox(120,0)[br]{\gpart{total body}}}
+% \put(250,460){\makebox(95,20)[bc]{\gpart{head}}}
+% \put(250,320){\makebox(95,140)[c]{\gpart{body}}}
+% \put(385,390){\makebox(95,0)[cl]%
+% {\gpart{\shortstack[l]{marginal\\note}}}}
+% \put(250,310){\makebox(95,10)[c]{\gpart{foot}}}
+% \put(250,335){\makebox(95,0)[bc]{|textwidth|}}
+% \multiput(360, 390)(4,0){6}{\line(1,0){2}}
+% \multiput(348,333)(0,-4){12}{\line(0,1){2}}
+% \multiput(360,333)(0,-4){8}{\line(0,1){2}}
+% \put(355,292){\makebox(0,0)[bl]{|marginparwidth|}}
+% \put(345,275){\makebox(0,0)[bl]{|marginparsep|}}
+% \put( 20, 40){\framebox(120,170){}}
+% \put( 20,237){\makebox(120,0)[bl]%
+% {\textbf{(c)}~|includefoot|}}
+% \put( 20, 60){\line(1,0){120}}
+% \put( 20,215){\makebox(120,0)[br]{\gpart{total body}}}
+% \put(150,130){\makebox(0,0)[l]{|textheight|}}
+% \put(150, 50){\makebox(0,0)[l]{|footskip|}}
+% \put( 20, 50){\makebox(120,160)[c]{\gpart{body}}}
+% \put( 20, 40){\makebox(120,10)[c]{\gpart{foot}}}
+% \put( 20, 65){\makebox(120,10)[c]{|textwidth|}}
+% \put(250, 40){\framebox(120,170){}}
+% \put(250,237){\makebox(120,0)[bl]%
+% {\textbf{(d)}~|includefoot,includemp|}}
+% \put(250, 60){\line(1,0){95}}\put(350, 60){\line(1,0){20}}
+% \put(250,215){\makebox(120,0)[br]{\gpart{total body}}}
+% \put(250, 50){\makebox(95,160)[c]{\gpart{body}}}
+% \put(385,130){\makebox(95,0)[cl]%
+% {\gpart{\shortstack[l]{marginal\\note}}}}
+% \put(250, 40){\makebox(95,10)[c]{\gpart{foot}}}
+% \put(250, 65){\makebox(95,0)[bc]{|textwidth|}}
+% \put(345, 60){\line(0,1){150}}\put(350, 60){\line(0,1){150}}
+% \multiput(360, 130)(4,0){6}{\line(1,0){2}}
+% \multiput(348, 63)(0,-4){12}{\line(0,1){2}}
+% \multiput(360, 63)(0,-4){8}{\line(0,1){2}}
+% \put(355,22){\makebox(0,0)[bl]{|marginparwidth|}}
+% \put(345, 5){\makebox(0,0)[bl]{|marginparsep|}}
+% \end{picture}}
+% \caption[Sample layouts for \gpart{total body} with different
+% layout modes]{%
+% \begin{minipage}[t]{.8\textwidth}\small
+% Sample layouts for \gpart{total body} with different switches.
+% (a) |includeheadfoot|, (b) |includeall|, (c) |includefoot|
+% and (d) |includefoot,includemp|.
+% If |reversemp| is set to |true|, the location of the
+% marginal notes are swapped on every page.
+% Option |twoside| swaps both margins and marginal notes on verso pages.
+% Note that the marginal notes are printed on the page, even when
+% |ignoremp| or |includemp=false|, but can fall off the page in some cases.
+% \end{minipage}}
+% \label{fig:modes}
+% \end{figure}
+%
+% \subsection{Auto-Completion Scheme}\label{sec:completion}
+%
+% Suppose that the paper size is pre-defined in Equation~(\ref{eq:paperwidth})
+% or (\ref{eq:paperheight}), if two dimensions out of the three dimensions
+% in the right-hand side of each equation are specified, the rest of the
+% dimensions can be determined by the specified ones. However, when none or
+% only one of the three dimensions is specified, the rest of the dimensions
+% can't generally be determined without some assumptions.
+%
+% The \textsf{geometry} package has an auto-completion scheme with some
+% default parameters to determine the unspecified dimensions independently
+% for each direction. If the size of \gpart{total body} (i.e., |width| in
+% the horizontal direction) is specified, the margins (|left| and |right|)
+% can be determined with a default ratio of one margin to the other
+% (|left/right|).
+% If one margin is specified, the rest of dimensions can also be determined
+% by the default margin ratio.
+% Page margin setting by margin ratio was introduced in KOMA
+% script\footnote{CTAN:~\texttt{macros/latex/contrib/supported/koma-script}
+% by Frank Neukam and Markus Kohm.}.
+%
+% The default vertical margin ratio is $2/3$, namely,
+% \begin{equation}
+% |top| : |bottom| = 2 : 3 \qquad\textit{default}.
+% \end{equation}
+% As for the horizontal margin ratio, the default value depends on
+% whether the document is onesided or twosided,
+% \begin{equation}
+% |left|\;(|inner|) : |right|\;(|outer|)
+% = \left\{ \begin{array}{ll}
+% 1 : 1 \qquad\textit{default for oneside},\\
+% 2 : 3 \qquad\textit{default for twoside}.
+% \end{array}\right.
+% \end{equation}
+% Obviously the default horizontal margin ratio for oneside is `centering'.
+%
+% For example, if one specifies |right=2.4cm| with a \textit{twosided}
+% layout in A4 paper (21.0cm$\times$29.7cm), unspecified |left| and |width|
+% are automatically determined using the default horizontal margin ratio
+% (2/3) as follows:
+% \begin{eqnarray}
+% |left| &=& \langle\textsf{horizontal-margin-ratio}\rangle
+% \times |right| \nonumber\\
+% &=& |2/3| \times |2.4cm| = |1.6cm|\\[1ex]
+% |width| &=& |paperwidth| - |left| - |right| \nonumber\\
+% &=& |21.0cm| - |1.6cm| - |2.4cm| = |17.0cm|.
+% \end{eqnarray}
+% In this case, the vertical dimensions |top|, |height| and |bottom|
+% are determined by the default vertical margin ratio with 2:3
+% and the default size of \gpart{total body} with 70\% of the paper height:
+% \begin{eqnarray}\displaystyle
+% |height| &=& |0.7| \times |paperheight|\nonumber\\
+% &=& |0.7| \times |29.7cm| = |20.79cm| \\[1ex]
+% |top| &=& \frac{\langle\textsf{vertical-margin-ratio}\rangle}
+% {1+\langle\textsf{vertical-margin-ratio}\rangle}
+% \times (|paperheight| - |height|) \nonumber\\
+% &=& \frac{2}{2+3}\times(|29.7cm| - |20.79cm|)\nonumber\\[1ex]
+% &=& 0.4\times |8.91cm| = |3.564cm|\\[2ex]
+% |bottom| &=& 0.6\times |8.91cm| = |5.346cm|
+% \end{eqnarray}
+%
+% The auto-completion rules are shown in Table~\ref{tab:completion}
+% and Equation~(\ref{eq:completion}).
+% $A$, $B$ and $C$ in Table~\ref{tab:completion} are user-specified values,
+% $*$ denotes unspecified ones. The right-hand side table shows the
+% corresponding results of auto-completion. The unspecified values can be
+% determined by $A$, $B$ and $L$ (|paperwidth| or |paperheight|).
+% In Table~\ref{tab:completion}, functions ${\cal R}(x)$ and ${\cal M}(x)$
+% are defined as follows:
+% \begin{equation}
+% \begin{array}{rcl}
+% {\cal R}(x) &=& L-x\\
+% {\cal M}(x) &=& {\cal R}(x)\;/\;(1+\sigma)\\
+% \end{array}
+% \label{eq:completion}
+% \end{equation}
+% Here $\sigma$ denotes the ratio of left margin (inner) to right margin
+% (outer) or the ratio of top to bottom. To set $\sigma$ as a geometry option,
+% you can use \{|h|,|v|\}|marginratio| options with |a:b|-type value,
+% for example, |hmarginratio=2:3|.
+% \begin{eqnarray}
+% \label{eq:hratios}
+% |hmarginratio| &=& |left| : |right|\\
+% |vmarginratio| &=& |top| : |bottom|
+% \label{eq:vratios}
+% \end{eqnarray}
+% By default, $\sigma$ is 1/1 (=1) for oneside and 2/3 for twoside
+% in the horizontal direction, and 2/3 in the vertical.
+% If none of three dimensions is specified in each direction, the default
+% setting is used: width and height is set to 70\% of the paper width
+% and height respectively. If all the three dimensions would be specified,
+% margins remain and width or height is ignored.
+%
+% \begin{table}
+% \def\AST{\texttt{*}}\centering
+% \begin{tabular}{cccccccl}
+% \multicolumn{3}{c}{Settings}& &\multicolumn{3}{c}{Results}\\
+% \noalign{\vspace{.1em}}
+% \cline{1-3}\cline{5-7}
+% \parbox{3em}{\hfil\glen{left}}&\parbox{3em}{\hfil\glen{width}}&
+% \parbox{3em}{\hfil\glen{right}}&&%
+% \parbox{3em}{\hfil\glen{left}}&\parbox{3em}{\hfil\glen{width}}&
+% \parbox{3em}{\hfil\glen{right}}&\\
+% \cline{1-3}\cline{5-7}
+% \glen{top}&\glen{height}&\glen{bottom}&&%
+% \glen{top}&\glen{height}&\glen{bottom}&\\
+% \cline{1-3}\cline{5-7}
+% \noalign{\vspace{.2em}}
+% \AST & \AST & \AST && $\sigma{\cal M}(0.7L)$ & $0.7L$ & ${\cal M}(0.7L)$&\\
+% \AST & $A$ & \AST && $\sigma{\cal M}(A)$ & $A$ & ${\cal M}(A)$ &\\
+% $A$ & \AST & \AST && $A$ & ${\cal R}(A+A/\sigma)$ & $A/\sigma$ &\\
+% \AST & \AST & $A$ &$\Longrightarrow$%
+% & $\sigma A$ & ${\cal R}(A+\sigma{}A)$ & $A$ &\\
+% $A$ & $B$ & \AST && $A$ & $B$ & ${\cal R}(A+B)$ &\\
+% \AST & $A$ & $B$ && ${\cal R}(A+B)$ & $A$ & $B$ &\\
+% $A$ & \AST & $B$ && $A$ & ${\cal R}(A+B)$ & $B$ &\\
+% $A$ & $C$ & $B$ && $A$ & ${\cal R}(A+B)$ & $B$ &\\
+% \cline{1-3}\cline{5-7}
+% \end{tabular}
+% \caption[Auto-comletion rules]{%
+% \begin{minipage}[t]{.8\textwidth}\small
+% Auto-completion rules. The mark `|*|' in each row (left table) denotes
+% the dimensions not specified explicitly, which can be determined as the
+% corresponding Results (right table). $\sigma$ denotes the value of
+% margin ratio. Functions ${\cal R}(x)$ and ${\cal M}(x)$ are defined
+% in Equation~(\ref{eq:completion}). The bottom case shows
+% over-specification, which gives in the same result as the $A$-\AST-$B$ case.
+% \end{minipage}}
+% \label{tab:completion}
+% \end{table}
+%
+% \section{User Interface}
+% \subsection{General Features}
+%
+% The geometry options using the \textsf{keyval} interface
+% `\meta{key}=\meta{value}' can be set either in the optional argument to
+% the \cs{usepackage} command, or in the argument of the
+% \cs{geometry} macro. This macro, if necessary, should be used only in the
+% preamble, i.e., before |\begin{document}|.
+% In either case, the argument consists of a list of
+% comma-separated \textsf{keyval} options.
+% The main features of setting options are listed below.
+% \begin{itemize}\itemsep=0pt
+% \item Multiple lines are allowed. (But blank lines are not allowed.)
+% \item Any spaces between words are ignored.
+% \item Options are basically order-independent.\\
+% (There are some exceptions. See Section~\ref{sec:order-depend}
+% for details.)
+% \end{itemize}
+% For example,
+% \begin{quote}
+% |\usepackage[ a5paper , hmargin = { 3cm,|\\
+% | .8in } , height|\\
+% | = 10in ]{geometry}|
+% \end{quote}
+% is equivalent to
+% \begin{quote}
+% |\usepackage[height=10in,a5paper,hmargin={3cm,0.8in}]{geometry}|
+% \end{quote}
+% Some options are allowed to have sub-list, e.g. |{3cm,0.8in}|.
+% Note that the order of values in the sub-list is significant.
+% The above setting is also equivalent to the followings:
+% \begin{quote}
+% |\usepackage{geometry}|\\
+% |\geometry{height=10in,a5paper,hmargin={3cm,0.8in}}|
+% \end{quote}
+% or
+% \begin{quote}
+% |\usepackage[a5paper]{geometry}|\\
+% |\geometry{hmargin={3cm,0.8in},height=8in}|\\
+% |\geometry{height=10in}|.
+% \end{quote}
+% Thus, multiple use of \cs{geometry} just appends options.
+%
+% \textsf{Geometry} supports package
+% \textsl{calc}\footnote{CTAN:~\texttt{macros/latex/required/tools}}.
+% For example,
+% \begin{quote}
+% |\usepackage{calc}|\\
+% |\usepackage[textheight=20\baselineskip+10pt]{geometry}|
+% \end{quote}
+%
+% \subsection{Option Types}
+% \textsf{Geometry} options are categorized into four types:
+%
+% \begin{enumerate}\itemsep=0pt
+% \item \textbf{Boolean type}
+%
+% takes a boolean value (|true| or |false|). If no value,
+% |true| is set by default.
+% \begin{quote}
+% \meta{key}|=true|\OR|false|.\\
+% \meta{key} with no value is equivalent to
+% \meta{key}|=true|.
+% \end{quote}
+% \textit{Examples:}~ |verbose=true|, |includehead|,
+% |twoside=false|.\\
+% Paper name is the exception. The preferred paper name should be set
+% with no values. Whatever value is given, it is ignored. For
+% instance, |a4paper=XXX| is equivalent to |a4paper|.
+%
+% \item \textbf{Single-valued type}
+%
+% takes a mandatory value.
+% \begin{quote}
+% \meta{key}|=|\meta{value}.
+% \end{quote}
+% \textit{Examples:}~ |width=7in|, |left=1.25in|,
+% |footskip=1cm|, |height=.86\paperheight|.
+%
+% \item \textbf{Double-valued type}
+%
+% takes a pair of comma-separated values in braces. The two values can
+% be shortened to one value if they are identical.
+% \begin{quote}
+% \meta{key}|=|\argii{value1}{value2}.\\
+% \meta{key}|=|\meta{value} is equivalent to
+% \meta{key}|=|\argii{value}{value}.
+% \end{quote}
+% \textit{Examples:}~ |hmargin={1.5in,1in}|, |scale=0.8|,
+% |body={7in,10in}|.
+%
+% \item \textbf{Triple-valued type}
+%
+% takes three mandatory, comma-separated values in braces.
+% \begin{quote}
+% \meta{key}|=|\argiii{value1}{value2}{value3}
+% \end{quote}
+% Each value must be a dimension or null. When you give an empty value
+% or `|*|', it means null and leaves the appropriate value
+% to the auto-completion mechanism. You need to specify at least one
+% dimension, typically two dimensions. You can set nulls for all the
+% values, but it makes no sense.
+% \textit{Examples:}\\
+% \hspace*{2em} |hdivide={2cm,*,1cm}|, |vdivide={3cm,19cm, }|,
+% |divide={1in,*,1in}|.
+% \end{enumerate}
+%
+% \section{Option Specification}
+%
+% This section describes all the options provided by \textsf{geometry}.
+%
+% \subsection{Paper Size}
+%
+% The options below set paper/media size and orientation.
+% \begin{Options}
+% \item[paper\OR papername] ~\\
+% specifies a paper name. The paper names available in \textsf{geometry}.
+% |paper=|\meta{paper-name}. For example |paper=a4paper|, which is
+% equivalent to just |a4paper|.
+% \item[\vtop{
+% \hbox{a0paper, a1paper, a2paper, a3paper, a4paper, a5paper, a6paper}
+% \hbox{b0paper, b1paper, b2paper, b3paper, b4paper, b5paper, b6paper}
+% \hbox{letterpaper, executivepaper, legalpaper}}]~\\[1ex]
+% specifies paper name. They can typically be used with no values.
+% Note that whatever value (even |false|) is given to this option, the
+% value will be ignored. For example, the followings have the same effect:
+% |a5paper|, |a5paper=true|, |a5paper=false| and |a5paper=XXXX|.
+% \item[\New{3}screen] a special paper size with (W,H) = (225mm,180mm).
+% For presentation with PC and video projector, ``|screen,centering|''
+% with `slide' documentclass would be useful.
+% \item[paperwidth] width of the paper. |paperwidth=|\meta{length}.
+% \item[paperheight] height of the paper. |paperheight=|\meta{length}.
+% \item[papersize] width and height of the paper.\\
+% |papersize=|\argii{width}{height} or |papersize=|\meta{length}.
+% \item[landscape] switches the paper orientation to landscape mode.
+% \item[portrait] switches the paper orientation to portrait mode.
+% This is equivalent to |landscape=false|.
+% \end{Options}
+%
+% Options for paper names (e.g., |a4paper|) and orientation
+% (|portrait| and |landscape|) can be set as document class options.
+% For example, you can set |\documentclass[a4paper,landscape]{article}|,
+% then |a4paper| and |landscape| are processed in \textsf{geometry} as well.
+% This is also the case for |twoside| and |twocolumn|
+% (see also Section~\ref{sec:dimension}).
+%
+% \subsection{Body Size}\label{sec:body}
+%
+% The options specifying the size of \gpart{total body} are described in this
+% section.
+% \begin{Options}
+% \item[hscale]
+% ratio of width of \gpart{total body} to \cs{paperwidth}.
+% |hscale=|\meta{h-scale}, e.g., |hscale=0.8| is equivalent to
+% |width=0.8|\cs{paperwidth}. (|0.7| by default)
+% \item[vscale]
+% ratio of height of \gpart{total body} to \cs{paperheight}, e.g.,
+% |vscale=|\meta{v-scale}. (|0.7| by default) |vscale=0.9| is equivalent
+% to |height=0.9|\cs{paperheight}.
+% \item[scale] ratio of \gpart{total body} to the paper.
+% |scale=|\argii{h-scale}{v-scale} or |scale=|\meta{scale}.
+% (|0.7| by default)
+% \item[width\OR totalwidth] ~\\
+% width of \gpart{total body}. |width=|\meta{length} or
+% |totalwidth=|\meta{length}. This dimension should not be confused with
+% |textwidth|. Generally, |width| $\ge$ |textwidth| because |width|
+% includes the width of the marginal notes if |includemp| is set to |true|.
+% If |textwidth| and |width| are specified at the same time, |width| is
+% ignored.
+% \item[height\OR totalheight] ~\\
+% height of \gpart{total body}, excluding header and footer by default.
+% If |includehead| or |includefoot| is set, |height| includes
+% the head or foot of the page as well as |textheight|.
+% |height=|\meta{length} or |totalheight=|\meta{length}. If both
+% |textheight| and |height| are specified, |height| will be ignored.
+% \item[total] width and height of \gpart{total body}.\\
+% |total=|\argii{width}{height} or |total=|\meta{length}.
+% \item[textwidth] modifies \cs{textwidth}, the width of \gpart{body}
+% (the text are). |textwidth=|\meta{length}.
+% \item[textheight] modifies \cs{textheight}, the height of \gpart{body}.
+% |textheight=|\meta{length}.
+% \item[text\OR body] sets both \cs{textwidth} and \cs{textheight} of the body
+% of page. |body=|\argii{width}{height} or |text=|\meta{length}.
+% \item[\New{3}lines] enables users to specify \cs{textheight} by the number
+% of lines. |lines|=\meta{integer}.
+% \item[\New{3}includehead] includes the head of the page, \cs{headheight}
+% and \cs{headsep}, into \gpart{total body}. It is set to |false| by
+% default. It is opposite to |ignorehead|. See Figure~\ref{fig:includes}.
+% \item[\New{3}includefoot] includes the foot of the page, \cs{footskip},
+% into \gpart{body}. It is opposite to |ignorefoot|.
+% It is |false| by default. See Figure~\ref{fig:includes}.
+% \item[\New{3}includeheadfoot]~\\
+% sets both |includehead| and |includefoot| to |true|, which is opposite
+% to |ignoreheadfoot|. See Figure~\ref{fig:includes}.
+% \item[\Mod{3}includemp] includes the margin notes, \cs{marginparwidth}
+% and \cs{marginparsep}, into \gpart{body} when calculating horizontal
+% calculation. In version 3, |includemp| is independent of options
+% |marginparwidth| and |marginparsep|, and set to |false| by default.
+% \item[\New{3}includeall] sets both |includeheadfoot| and |includemp| to
+% |true|. See Figure~\ref{fig:includes} and Figure~\ref{fig:modes}.
+% \item[\New{3}ignorehead] disregards the head of the page,
+% |headheight| and |headsep|, in determining vertical layout, but does not
+% change those lengths. It is equivalent to |includehead=false|. It is set
+% to |true| by default. See also |includehead|.
+% \item[\New{3}ignorefoot] disregards the foot of page, |footskip|,
+% in determining vertical layout, but does not change that length.
+% This option is set to |true| by default. See also |includefoot|.
+% \item[\New{3}ignoreheadfoot]~\\ sets both |ignorehead| and |ignorefoot|
+% to |true|. See also |includeheadfoot|.
+% \item[\New{3}ignoremp] disregards the marginal notes in determining the
+% horizontal margins (|true| is set by default). If marginal notes fall off
+% the page, the warning message will be displayed when |verbose=true|.
+% See also Figure~\ref{fig:modes} and |includemp|.
+% \item[\New{3}ignoreall] sets both |ignoreheadfoot| and |ignoremp| to |true|.
+% See also |includeall|.
+% \item[\New{3}heightrounded]~\\
+% This option rounds \cs{textheight} to \textit{n}-times (\textit{n}:
+% an integer) of \cs{baselineskip} plus \cs{topskip} to avoid
+% ``underfull vbox'' in some cases. For example, if \cs{textheight} is
+% 486pt with \cs{baselineskip} 12pt and \cs{topskip} 10pt, then
+% \begin{quote}
+% $(39\times12\textrm{pt}+10\textrm{pt}=)\: 478\textrm{pt}
+% < 486\textrm{pt} <
+% 490\textrm{pt} \:(=40\times12\textrm{pt}+10\textrm{pt})$,
+% \end{quote}
+% as a result \cs{textheight} is rounded to 490pt. |heightrounded=false|
+% by default.
+% \end{Options}
+%
+% The following options can specify body and margins simultaneously with
+% three comma-separated values in braces.
+% \begin{Options}
+% \item[hdivide] horizontal partitions (left,width,right).
+% |hdivide=|\argiii{left margin}{width}{right margin}.
+% Note that you should not specify all of the three parameters.
+% The best way of using this option is to specify two of three and
+% leave the rest with null(nothing) or `|*|'. For example, when you set
+% |hdivide={2cm,15cm, }|, the margin from the right-side edge of page
+% will be determined calculating |paperwidth-2cm-15cm|.
+% \item[vdivide] vertical partitions (top,height,bottom).
+% |vdivide=|\argiii{top margin}{height}{bottom margin}.
+% \item[divide] |divide=|\vargiii{$A$}{$B$}{$C$} is interpreted as
+% |hdivide=|\vargiii{$A$}{$B$}{$C$} and |vdivide=|\vargiii{$A$}{$B$}{$C$}.
+% \end{Options}
+%
+% \subsection{Margin Size}\label{sec:margin}
+%
+% The options specifying the size of visible margins are listed below.
+% \begin{Options}
+% \item[left\OR lmargin\OR inner]~\\
+% left margin (for oneside) or inner margin (for twoside) of
+% \gpart{total body}. In other words, the distance between the left (inner)
+% edge of the paper and that of \gpart{total body}. |left=|\meta{length}.
+% |inner| has no special meaning, just an alias of |left| and |lmargin|.
+% \item[right\OR rmargin\OR outer]~\\
+% right or outer margin of \gpart{total body}. |right=|\meta{length}.
+% \item[top\OR tmargin] top margin of the page. |top=|\meta{length}.
+% Note this option has nothing to do with the native dimension
+% \cs{topmargin}.
+% \item[bottom\OR bmargin]~\\
+% bottom margin of the page. |bottom=|\meta{length}.
+% \item[hmargin] left and right margin.
+% |hmargin=|\argii{left margin}{right margin} or |hmargin=|\meta{length}.
+% \item[vmargin] top and bottom margin.
+% |vmargin=|\argii{top margin}{bottom margin} or |vmargin=|\meta{length}.
+% \item[margin] |margin=|\vargii{$A$}{$B$} is equivalent to
+% |hmargin=|\vargii{$A$}{$B$} and |vmargin=|\vargii{$A$}{$B$}.
+% |margin=|$A$ is automatically expanded to |hmargin=|$A$ and |vmargin=|$A$.
+% \item[\New{3}hmarginratio]
+% horizontal margin ratio of |left| (inner) to |right| (outer).
+% The value of \meta{ratio} should be specified with colon-separated
+% two values. Each value should be a positive integer less than 100
+% to prevent arithmetic overflow, e.g., |2:3| instead of |1:1.5|.
+% The default ratio is |1:1| for oneside, |2:3| for twoside.
+% \item[\New{3}vmarginratio]
+% vertical margin ratio of |top| to |bottom|. The default ratio is |2:3|.
+% \item[\New{3}marginratio\OR ratio]~\\
+% horizontal and vertical margin ratios.
+% |marginratio=|\argii{horizontal ratio}{vertical ratio} or
+% |marginratio=|\meta{ratio}.
+% \item[\New{3}hcentering] sets auto-centering horizontally and is
+% equivalent to |hmarginratio=1:1|. It is set to |true| by default for
+% oneside. See also |hmarginratio|.
+% \item[\New{3}vcentering] sets auto-centering vertically and is
+% equivalent to |vmarginratio=1:1|. The default is |false|.
+% See also |vmarginratio|.
+% \item[\New{3}centering] sets auto-centering and is equivalent to
+% |marginratio=1:1|. See also |marginratio|. The default is |false|.
+% See also |marginratio|.
+% \item[twoside] switches on twoside mode with left and right margins swapped
+% on verso pages. The option sets \cs{@twoside} and \cs{@mparswitch}
+% switches. See also |asymmetric|.
+% \item[\New{3}asymmetric] implements a twosided layout in which margins are
+% not swapped on alternate pages (by setting \cs{oddsidemargin} to
+% \cs{evensidemargin} |+| |bindingoffset|) and in which the marginal notes
+% stay always on the same side. This option can be used as an alternative
+% to the twoside option. See also |twoside|.
+% \item[\New{3}bindingoffset]~\\ removes a specified space
+% from the lefthand-side of the page for oneside or the inner-side for
+% twoside. |bindingoffset=|\meta{length}. This is useful if pages
+% are bound by a press binding (glued, stitched, stapled \ldots).
+% See Figure~\ref{fig:bindingoffset}.
+% \item[hdivide] See description in Section~\ref{sec:body}.
+% \item[vdivide] See description in Section~\ref{sec:body}.
+% \item[divide] See description in Section~\ref{sec:body}.
+% \end{Options}
+% \begin{figure}
+% \centering\small
+% {\unitlength=.65pt
+% \begin{picture}(500,270)(0,0)
+% \put(20,0){\framebox(170,230){}}
+% \put(20,255){\makebox(80,20)[l]{\textbf{a)}~every page for oneside or}}
+% \put(20,240){\makebox(80,20)[l]{\hspace{3ex}odd pages for twoside}}
+% \put(110,225){\makebox(80,20)[r]{\gpart{paper}}}
+% \put(55,37){\framebox(110,170)[tc]{\gpart{total body}}}
+% \multiput(38,0)(0,7){33}{\line(0,1){4}}
+% \put(38,100){\vector(1,0){17}}\put(55,100){\vector(-1,0){17}}
+% \put(60,95){\makebox(80,10)[l]{|left|}}
+% \put(60,80){\makebox(80,10)[l]{(|inner|)}}
+% \put(165,100){\vector(1,0){25}}\put(190,100){\vector(-1,0){25}}
+% \put(195,95){\makebox(80,10)[l]{|right|}}
+% \put(195,80){\makebox(80,10)[l]{(|outer|)}}
+% \put(20,16){\vector(1,0){18}}
+% \put(45,10){\makebox(80,10)[bl]{|bindingoffset|}}
+% \put(280,255){\makebox(80,20)[l]{\textbf{b)}~even (back) pages for twoside}}
+% \put(280,0){\framebox(170,230){}}
+% \put(370,225){\makebox(80,20)[r]{\gpart{paper}}}
+% \put(305,37){\framebox(110,170)[tc]{\gpart{total body}}}
+% \multiput(432,0)(0,7){33}{\line(0,1){4}}
+% \put(280,100){\vector(1,0){25}}\put(305,100){\vector(-1,0){25}}
+% \put(310,95){\makebox(80,10)[l]{|outer|}}
+% \put(310,80){\makebox(80,10)[l]{(|right|)}}
+% \put(415,100){\vector(1,0){17}}\put(432,100){\vector(-1,0){17}}
+% \put(373,95){\makebox(80,10)[l]{|inner|}}
+% \put(373,80){\makebox(80,10)[l]{(|left|)}}
+% \put(450,16){\vector(-1,0){18}}
+% \put(330,10){\makebox(80,10)[bl]{|bindingoffset|}}
+% \end{picture}}
+% \caption[\texttt{bindingoffset} option]{%
+% \begin{minipage}[t]{.8\textwidth}\raggedright\small
+% |bindingoffset| option. Note that |twoside| option swaps the horizontal
+% margins and the marginal notes together with |bindingoffset| on even
+% pages (see \textbf{b)}), but |asymmetric| option suppresses the swap
+% of the margins and marginal notes (but |bindingoffset| is still swapped).
+% \end{minipage}}
+% \label{fig:bindingoffset}
+% \end{figure}
+%
+% \subsection{Native Dimensions}\label{sec:dimension}
+%
+% The options below specify \LaTeX\ native dimensions and switches for page
+% layout. See Figure~\ref{fig:layout}. Note that unlike version 2.3,
+% |nohead|, |nofoot| and |noheadfoot| become overwritable, in other words,
+% just shorthand for setting the corresponding LaTeX dimensions
+% (\cs{headheight}, \cs{headsep} and \cs{footskip}) to 0pt.
+%
+% \begin{Options}
+% \item[headheight\OR head]~\\
+% modifies \cs{headheight}, height of header.
+% |headheight=|\meta{length} or |head=|\meta{length}.
+% \item[headsep] modifies \cs{headsep}, separation between header and text
+% (body). |headsep=|\meta{length}.
+% \item[footskip\OR foot]~\\ modifies \cs{footskip}, distance separation
+% between baseline of last line of text and baseline of footer.
+% |footskip=|\meta{length} or |foot=|\meta{length}.
+% \item[\Mod{3}nohead] eliminates spaces for the head of the page, which is
+% equivalent to both \cs{headheight}|=0pt| and \cs{headsep}|=0pt|.
+% \item[\Mod{3}nofoot] eliminates spaces for the foot of the page, which is
+% equivalent to \cs{footskip}|=0pt|.
+% \item[\Mod{3}noheadfoot] equivalent to |nohead| and |nofoot|.
+% \item[footnotesep] changes the dimension \cs{skip}\cs{footins}, separation
+% between the bottom of text body and the top of footnote text.
+% \cs{headheight}|=0pt|, \cs{headsep}|=0pt| and \cs{footskip}|=0pt|.
+% \item[\Mod{3}marginparwidth\OR marginpar]~\\
+% modifies \cs{marginparwidth}, width of the marginal notes.
+% |marginparwidth=|\meta{length}.
+% Unlike version 2.3, it does \textit{not} set |includemp=true|.
+% \item[\Mod{3}marginparsep] modifies \cs{marginparsep}, separation between
+% body and marginal notes. |marginparsep=|\meta{length}.
+% Unlike version 2.3, it does \textit{not} set |includemp=true|.
+% \item[\New{3}nomarginpar] shrinks spaces for marginal notes to 0pt, which
+% is equivalent to \cs{marginparwidth}|=0pt| and \cs{marginparsep}|=0pt|.
+% \item[columnsep] modifies \cs{columnsep}, the separation between two
+% columns in |twocolumn| mode.
+% \item[hoffset] modifies \cs{hoffset}. |hoffset=|\meta{length}.
+% \item[voffset] modifies \cs{voffset}. |voffset=|\meta{length}.
+% \item[offset] horizontal and vertical offset.\\
+% |offset=|\argii{hoffset}{voffset} or |offset=|\meta{length}.
+% \item[twocolumn] sets |twocolumn| mode with \cs{@twocolumntrue}.
+% |twocolumn=false| denotes onecolumn mode with\cs{@twocolumnfalse}.
+% \item[twoside] sets both \cs{@twosidetrue} and \cs{@mparswitchtrue}.
+% See Section~\ref{sec:margin}.
+% \item[textwidth] sets \cs{textwidth} directly. See Section~\ref{sec:body}.
+% \item[textheight] sets \cs{textheight} directly. See Section~\ref{sec:body}.
+% \item[\New{3}reversemp\OR reversemarginpar]~\\
+% makes the marginal notes appear in the left (inner) margin with
+% \cs{@reversemargintrue}. Unlike version 2.3 or earlier,
+% it does \textit{not} change |includemp| mode. This is |false| by default.
+% \end{Options}
+%
+% \subsection{Drivers}\label{sec:drivers}
+%
+% Package \textsf{geometry} supports \textsl{dvips}, \textsl{dvipdfm},
+% \textsl{pdflatex} and \textsl{V\TeX} environment. These driver options are
+% exclusive.
+%
+% \begin{Options}
+% \item[\Mod{3}dvips] writes the paper size in dvi output with the \cs{special}
+% macro. If you use \textsl{dvips} as a DVI-to-PS driver,
+% for example, to print a document with |\geometry{a3paper,landscape}|
+% on A3 paper in landscape orientation, you don't need options
+% ``|-t a3 -t landscape|'' to \textsl{dvips}.
+% In version 3, this option sets an addtional correction for landscape
+% documents so that PostScript outputs shouldn't be displayed upside down
+% by PostScript viewers, e.g., Ghostscript.
+% If you use \textsl{V\TeX} environment or \textsl{pdflatex} command,
+% this option is automatically deselected and changed to the corresponding
+% driver option. This option works with xdvi and \textsl{dviout}
+% (though you may get some warnings).
+% \item[\New{3}dvipdfm] works like |dvips| except landscape correction.
+% \item[pdftex] sets \cs{pdfpagewidth} and \cs{pdfpageheight} properly
+% if \textsl{pdflatex} command is used for typeset.
+% When \textsl{pdflatex} command is used, |pdftex| is automatically
+% selected. On the other hand when one is not using \textsl{pdflatex}
+% command this option is ineffective.
+% \item[vtex] sets dimensions \cs{mediawidth} and \cs{mediaheight}
+% for \textsl{V\TeX}.
+% This option is automatically selected when one is using \textsl{V\TeX}
+% environment. On the other hand when one is not using \textsl{V\TeX}
+% this option is ineffective.
+% \end{Options}
+%
+% Drivers options can be automatically changed depending on the typeset
+% environment.
+% \begin{center}
+% \begin{tabular}{ll@{\quad$\rightarrow$\quad}ll}
+% environment & given driver option & resulted option \\\hline
+% \textsl{latex} & |pdftex|~/~|vtex| & \textit{none} \\
+% \textsl{pdflatex} & \textit{any} & |pdftex| \\
+% \textsl{V\TeX} & \textit{any} & |vtex|. \\\hline
+% \end{tabular}
+% \end{center}
+%
+% \subsection{Other Options}
+%
+% The other useful options are described here.
+% \begin{Options}
+% \item[verbose] displays parameter results on the terminal.
+% |verbose=false| (default) still puts them into the log file.
+% \item[reset] sets back the layout dimensions and switches to the
+% settings before \textsf{geometry} is loaded. Options given in
+% |geometry.cfg| are also cleared.
+% Note that this cannot reset |pass| and |mag| with |truedimen|.
+% |reset=false| has no effect and cannot cancel the previous
+% |reset|(|=true|) if any. For example, when you go
+% \begin{quote}
+% |\documentclass[landscape]{article}|\\
+% |\usepackage[twoside,reset,left=2cm]{geometry}|
+% \end{quote}
+% with |\ExecuteOptions{scale=0.9}| in |geometry.cfg|,
+% then as a result, |landscape| and |left=2cm| remain effective,
+% and |scale=0.9| and |twoside| are ineffective.
+% \item[mag] sets magnification value (\cs{mag}) and automatically modifies
+% \cs{hoffset} and \cs{voffset} according to the magnification.
+% |mag=|\meta{value}. Note that \meta{value} should be an integer value
+% with 1000 as a normal size. For example, |mag=1414| with |a4paper|
+% provides an enlarged print fitting in |a3paper|, which is $1.414$
+% (=$\sqrt{2}$) times larger than |a4paper|. Font enlargement needs extra
+% disk space. \textbf{Note that you should not specify |mag| more than
+% once.} Multiple |mag| specification causes an error.
+% See also |truedimen| option.
+% \item[truedimen] changes all internal explicit dimension values into
+% \textit{true} dimensions, e.g., |1in| is changed to |1truein|.
+% Typically this option will be used together with |mag| option. Note that
+% this is ineffective against externally specified dimensions. For example,
+% when you set ``\texttt{mag=1440, margin=10pt, truedimen}'', margins are
+% not `true' but magnified. If you want to set exact margins, you should
+% set like ``\texttt{mag=1440, margin=10truept, truedimen}'' instead.
+% \item[\New{3}pass] disables all of the geometry options and calculations
+% except |verbose| and |showframe|. It can be used for checking
+% out the page layout of the documentclass, other packages and manual
+% settings without \textsf{geometry}.
+% \item[\New{3}showframe] shows visible frames for the text area and page,
+% and the lines for the head and foot on the first page.
+% \item[\New{3}compat2] sets all kind of options so that
+% |\usepackage[compat2]{geometry}| would behave as if one is using
+% the old version (v2.3) with the old default layout:
+% \texttt{[scale=\{0.8,0.9\}, centering, includeheadfoot]},
+% which is here expressed by options available in version 3.
+% Note this option should be set as a first option.
+% \end{Options}
+%
+% \section{Default Settings}
+%
+% \subsection{Default Layout}\label{sec:default}
+%
+% Let us recapitulate the default layout here.
+% The \textsf{geometry} package has the following default page layout
+% for onesided documents:
+% \begin{quote}
+% |scale=0.7, marginratio={1:1, 2:3}, ignoreall|
+% \end{quote}
+% For twoside, the horizontal margin ratio is also set |2:3|,
+% \begin{quote}
+% |scale=0.7, marginratio=2:3, ignoreall|.
+% \end{quote}
+% Of course, you don't need to set them explicitly. |\usepackage{geometry}|
+% will internally set the above options.
+% Additional options will overwrite the layout dimensions. For example,
+% \begin{quote}
+% |\usepackage[hmargin=2cm]{geometry}|
+% \end{quote}
+% will overwrite horizontal dimensions, but use the default for vertical
+% layout. Page dimensions specified by the documentclass being used
+% and other direct settings before \textsf{geometry} is loaded are passed
+% down to \textsf{geometry}.
+%
+% Note version 2.3 or earlier had default layout different from the
+% version 3. The old default options can be expressed with options
+% available in the current version:
+% \begin{quote}
+% |scale={0.8,0.9}, centering, includeheadfoot|.
+% \end{quote}
+% Adding |compat2| as a first option sets those options so that, for example,
+% \begin{quote}
+% |\usepackage[compat2, width=10cm]{geometry}|
+% \end{quote}
+% would behave as if one is using the old version (v2.3).
+%
+% \subsection{Configuration File}
+%
+% One can set up a configuration file to make default options. To do this,
+% produce a file |geometry.cfg| containing an \cs{ExecuteOptions} macro,
+% for example,
+% \begin{quote}
+% |\ExecuteOptions{a4paper,dvips}|
+% \end{quote}
+% and install it somewhere \TeX{} can find it.
+%
+% The options specified in the |geometry.cfg| can be cleared by
+% option |reset|.
+%
+% \section{Relations Between Options}
+% This section shows how complexity is solved when options are over-specified.
+%
+% \subsection{Order Dependence}\label{sec:order-depend}
+%
+% The \textsf{geometry} options are basically order-independent, but there
+% are some exceptions. For multiple specification of the same option,
+% the last setting is adopted. For example,
+% \begin{quote}
+% |verbose=true, verbose=false|
+% \end{quote}
+% obviously results in |verbose=false|.
+% If you set
+% \begin{quote}
+% |hmargin={3cm,2cm}, left=1cm|
+% \end{quote}
+% the left(or inner) margin is overwritten by |left=1cm|. As a result, it is
+% equivalent to |hmargin={1cm,2cm}|.
+%
+% The |reset| option removes all the geometry options (except |pass|)
+% before it. If you set
+% \begin{quote}
+% |\documentclass[landscape]{article}|\\
+% |\usepackage[margin=1cm,twoside]{geometry}|\\
+% |\geometry{a5paper, reset, left=2cm}|
+% \end{quote}
+% then |margin=1cm|, |twoside| and |a5paper| are removed.
+% As a result, this case is equivalent to
+% \begin{quote}
+% |\documentclass[landscape]{article}|\\
+% |\usepackage[left=2cm]{geometry}|
+% \end{quote}
+%
+% \subsection{Priority}
+%
+% There are several ways to set dimensions of the printable area:
+% |scale|, |total|, |text| and |lines|. Basically specification with the more
+% concrete dimension has the higher priority:
+% \[\begin{array}{c}
+% \textrm{low}\quad\longrightarrow\quad\textrm{high}
+% \quad(\textrm{priority})\\[1em]
+% \left\{\begin{array}{l}|hscale|\\|vscale|\\|scale|
+% \end{array}\right\} <
+% \left\{\begin{array}{l}|width|\\|height|\\|total|
+% \end{array}\right\} <
+% \left\{\begin{array}{l}|textwidth|\\|textheight|
+% \\|text|\end{array}\right\} < |lines|.
+% \end{array}\]
+% For example,
+% \begin{quote}
+% |\usepackage[hscale=0.8, textwidth=7in, width=18cm]{geometry}|
+% \end{quote}
+% is the same as |\usepackage[textwidth=7in]{geometry}|. Another example:
+% \begin{quote}
+% |\usepackage[lines=30, scale=0.8, text=7in]{geometry}|
+% \end{quote}
+% results in \texttt{[lines=30, textwidth=7in]}.
+%
+% Options determining margin size also have priority rule:
+% margin ratios versus margin length. For example, if both |marginratio=1:2|
+% and |margin=1cm| are set at the same time, |margin=1cm| wins because
+% |margin=1cm| is more concrete dimension than ratios. That is why normal
+% margin options work well with default margin ratios
+% (|marginratio={1:1, 2:3}| for oneside).
+% \[\begin{array}{c}
+% \textrm{low}\quad\longrightarrow\quad\textrm{high}
+% \quad(\textrm{priority})\\[1em]
+% \left\{\begin{array}{l}|hmarginratio|\\|vmarginratio|\\|marginratio|
+% \end{array}\right\} <
+% \left\{\begin{array}{l}
+% |hmargin|\:\textit{or}\:|left|\:\textrm{\&}\:|right|\\
+% |vmargin|\:\textit{or}\:|top|\:\textrm{\&}\:|bottom|\\
+% |margin|
+% \end{array}\right\}.
+% \end{array}\]
+%
+% \section{Examples}
+%
+% \begin{itemize}
+% \item A onesided page layout with the text area centered in the paper.
+% The examples below have the same result because the horizontal margin ratio
+% is set |1:1| for oneside by default.
+% \begin{itemize}
+% \item |centering|
+% \item |marginratio=1:1|
+% \item |vcentering|
+% \end{itemize}
+%
+% \item A twosided page layout with the inside offset for binding |1cm|.
+% \begin{itemize}
+% \item |twoside, bindingoffset=1cm|
+% \end{itemize}
+% In this case, |textwidth| is shorter than the case without
+% |bindingoffset=1cm| by $0.7\times|1cm|$ ($=$|0.7cm|).
+%
+% \item A layout with the left, right, and top margin |3cm|, |2cm| and
+% |2.5in| respectively, with textheight of 40 lines, and with the head and
+% foot of the page included in \gpart{total body}.
+% The two examples below have the same result.
+% \begin{itemize}
+% \item |left=3cm, right=2cm, lines=40, top=2.5in, includeheadfoot|
+% \item |hmargin={3cm,2cm}, tmargin=2.5in, lines=40, includeheadfoot|
+% \end{itemize}
+%
+% \item A layout with the height of \gpart{total body} |10in|, the bottom
+% margin |2cm|, and the default width. The top margin will be calculated
+% automatically. Each solution below results in the same page layout.
+% \begin{itemize}
+% \item |vdivide={*, 10in, 2cm}|
+% \item |bmargin=2cm, height=10in|
+% \item |bottom=2cm, textheight=10in|
+% \end{itemize}
+% Note that dimensions for \gpart{head} and \gpart{foot} are excluded from
+% |height| of \gpart{total body}. An additional |includefoot| makes
+% \cs{footskip} included in |totalheight|. Therefore, in the two cases below,
+% |textheight| in the former layout is shorter than the latter
+% (with 10in exactly) by \cs{footskip}. In other words,
+% |height| = |textheight| + |footskip| when |includefoot=true| in this case.
+% \begin{itemize}
+% \item |bmargin=2cm, height=10in, includefoot|
+% \item |bottom=2cm, textheight=10in, includefoot|
+% \end{itemize}
+%
+% \item A layout with \glen{textwidth} and \glen{textheight} 90\% of the
+% paper and with \gpart{body} centered.
+% Each solution below results in the same page layout.
+% \begin{itemize}
+% \item |scale=0.9, centering|
+% \item |text={.9\paperwidth,.9\paperheight}, ratio=1:1|
+% \item |width=.9\paperwidth, vmargin=.1\paperheight, marginratio=1:1|
+% \item |hdivide={*,0.9\paperwidth,*}, vdivide={*,0.9\paperheight,*}|
+% \item |margin={.1\paperwidth,.1\paperheight}, marginratio=1:1|
+% \end{itemize}
+% You can add |heightrounded| to avoid an ``underfull vbox warning'' like
+% \begin{quote}\small
+% |Underfull \vbox (badness 10000) has occurred while \output is active|.
+% \end{quote}
+% See Section~\ref{sec:body} for the detail description about |heightrounded|.
+%
+% \item A layout with the width of marginal notes |3cm| and included in the
+% width of \gpart{total body}. The following examples are the same.
+% \begin{itemize}
+% \item |marginparwidth=3cm, includemp|
+% \item |marginpar=3cm, igoremp=false|
+% \end{itemize}
+%
+% \item A layout the full scale \gpart{body} of the paper with A5 paper in
+% landscape. The following examples are the same.
+% \begin{itemize}
+% \item |a5paper, landscape, scale=1.0|
+% \item |landscape=TRUE, paper=a5paper, margin=0pt|
+% \end{itemize}
+%
+% \item A screen size layout appropriate to presentation with PC and video
+% projector.
+% \begin{verbatim}
+% \documentclass{slide}
+% \usepackage[screen,margin=0.8in]{geometry}
+% ...
+% \begin{slide}
+% ...
+% \end{slide}\end{verbatim}
+% \item A layout with fonts and spaces both enlarged from A4 to A3.
+% In the case below, the resulted paper size is A3.
+% \begin{itemize}
+% \item |a4paper, mag=1414|.
+% \end{itemize}
+% If you want to have a layout with two times bigger fonts, but without
+% changing paper size, you can go
+% \begin{itemize}
+% \item |letterpaper, mag=2000, truedimen|.
+% \end{itemize}
+% You can add |dvips| option, that is useful to preview it with proper
+% paper size by |dviout| or |xdvi|.
+%
+% \item An old style setting with v2.3 or earlier
+% \begin{verbatim}
+% \usepackage[a4paper,mag=1200,truedimen,margin=2cm,
+% twosideshift=10pt,
+% headsep=7pt,headheight=14.5pt,
+% marginparwidth=30pt]{geometry}\end{verbatim}
+% can be rewritten with options in version 3 without |compat2|:
+% \begin{verbatim}
+% \usepackage{calc}
+% \usepackage[a4paper,mag=1200,truedimen,margin=2cm,
+% twoside, left=2cm+10pt, right=2cm-10pt,
+% includeheadfoot, headsep=7pt,headheight=14.5pt,
+% includemp, marginparwidth=30pt]{geometry}\end{verbatim}
+% In this case, |includeall| can be used instead of |includeheadfoot| and
+% |includemp|.
+%
+% \item A complex page layout.
+% \begin{verbatim}
+% \usepackage[a5paper, landscape, twocolumn, twoside,
+% left=2cm, hmarginratio=2:1, includemp, marginparwidth=43pt,
+% bottom=1cm, foot=.7cm, includefoot, textheight=11cm, heightrounded,
+% columnsep=1cm, dvips, verbose]{geometry}\end{verbatim}
+% Try typesetting it and checking out the result yourself. |:-)|
+% \end{itemize}
+%
+% \section{Known Problems}
+% \begin{itemize}
+% \item With |pdftex=true|, |mag| $\neq 1000$ and |truedimen|,
+% |paperwidth| and |paperheight| shown in verbose mode are different
+% from the real size of the resulted PDF. The PDF itself is correct anyway.
+% \item With |pdftex=true|, |mag| $\neq 1000$, \textit{no} |truedimen|,
+% and \textsf{hyperref}, \textsf{hyperref} should be loaded
+% by \cs{usepackage} before \textsf{geometry}.
+% Otherwise the resulted PDF size will become wrong.
+% \item With \textsf{crop} package and |mag| $\neq 1000$,
+% |center| option of \textsf{crop} doesn't work well.
+% \end{itemize}
+%
+% \section{Acknowledgments}
+% I would like to thank the following people for their
+% pointing out bugs and suggesting, and for many helpful comments:~
+% Friedrich Flender, Piet van Oostrum, Keith
+% Reckdahl, Peter Riocreux, James Kilfiger, Jean-Marc Lasgouttes
+% Frank Bennett, Vladimir Volovich, Wlodzimierz Macewicz,
+% Jean-Bernard Addor, Michael Vulis (MicroPress), and
+% Rolf Niepraschk.
+%
+% I am deeply grateful to Frank Mittelbach for checking the codes patiently
+% and providing extremely helpful insight and suggestions for version 3.
+%
+% \StopEventually{%
+% \ifmulticols
+% \addtocontents{toc}{\protect\end{multicols}}
+% \fi
+% }
+%
+% \section{The Code}
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+% This package requires package \textsf{keyval} included in
+% \LaTeX\ graphics bundle.
+% \begin{macrocode}
+\RequirePackage{keyval}%
+% \end{macrocode}
+%
+% Internal switches are declared here.
+% \begin{macrocode}
+\newif\ifGm@verbose
+\newif\ifGm@landscape
+\newif\ifGm@includehead
+\newif\ifGm@includefoot
+\newif\ifGm@includemp
+\newif\ifGm@hbody
+\newif\ifGm@vbody
+\newif\ifGm@heightrounded
+\newif\ifGm@showframe
+\newif\ifGm@compatii
+\newif\ifGm@special
+\newif\ifGm@sworient\Gm@sworientfalse
+\newif\ifGm@pass\Gm@passfalse
+% \end{macrocode}
+% \begin{macro}{\Gm@cnth}
+% \begin{macro}{\Gm@cntv}
+% Counters for horizontal and vertical partitioning patterns.
+% \begin{macrocode}
+\newcount\Gm@cnth
+\newcount\Gm@cntv
+% \end{macrocode}
+% \end{macro}\end{macro}
+% \begin{macro}{\c@Gm@tempcnt}
+% The counter is used to set number with \textsf{calc}.
+% \begin{macrocode}
+\newcount\c@Gm@tempcnt
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Gm@bindingoffset}
+% An additional inner offset for binding.
+% \begin{macrocode}
+\newdimen\Gm@bindingoffset
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Gm@wd@mp}
+% \begin{macro}{\Gm@odd@mp}
+% \begin{macro}{\Gm@even@mp}
+% Correction lengths for \cs{textwidth}, \cs{oddsidemargin} and
+% \cs{evensidemargin} in |includemp| mode.
+% \begin{macrocode}
+\newdimen\Gm@wd@mp
+\newdimen\Gm@odd@mp
+\newdimen\Gm@even@mp
+% \end{macrocode}
+% \end{macro}\end{macro}\end{macro}
+% \begin{macro}{\Gm@dimlist}
+% Native dimension setting list.
+% \begin{macrocode}
+\newtoks\Gm@dimlist
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Gm@warning}
+% Macro for printing warning messages.
+% \begin{macrocode}
+\def\Gm@warning#1{\PackageWarningNoLine{geometry}{#1}}%
+\@onlypreamble\Gm@warning
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Gm@Dhratio}
+% \begin{macro}{\Gm@Dhratiotwo}
+% \begin{macro}{\Gm@Dvratio}
+% The default values for the horizontal and vertical \textsl{marginalratio}
+% are defined. \cs{Gm@Dhratiotwo} denotes the default value of
+% horizonal \textsl{marginratio} for twoside page layout with
+% left and right margins swapped on verso pages, which is
+% set by |twoside|.
+% \begin{macrocode}
+\def\Gm@Dhratio{1:1}% = left:right default for oneside
+\def\Gm@Dhratiotwo{2:3}% = inner:outer default for twoside.
+\def\Gm@Dvratio{2:3}% = top:bottom default
+\@onlypreamble\Gm@Dhratio
+\@onlypreamble\Gm@Dhratiotwo
+\@onlypreamble\Gm@Dvratio
+% \end{macrocode}
+% \end{macro}\end{macro}\end{macro}
+%
+% \begin{macro}{\Gm@Dhscale}
+% \begin{macro}{\Gm@Dvscale}
+% The default values for the horizontal and vertical \textsl{scale}
+% are defined. In version 3 the default scale has been changed from
+% \{0.8, 0.9\} to \{0.7, 0.7\} in each direction.
+% \begin{macrocode}
+\def\Gm@Dhscale{0.7}%
+\def\Gm@Dvscale{0.7}%
+\@onlypreamble\Gm@Dhscale
+\@onlypreamble\Gm@Dvscale
+% \end{macrocode}
+% \end{macro}\end{macro}
+%
+% \begin{macro}{\Gm@dvips}%
+% \begin{macro}{\Gm@dvipdfm}%
+% \begin{macro}{\Gm@pdftex}%
+% \begin{macro}{\Gm@vtex}%
+% The driver names.
+% \begin{macrocode}
+\def\Gm@dvips{dvips}%
+\def\Gm@dvipdfm{dvipdfm}%
+\def\Gm@pdftex{pdftex}%
+\def\Gm@vtex{vtex}%
+\@onlypreamble\Gm@dvips
+\@onlypreamble\Gm@dvipdfm
+\@onlypreamble\Gm@pdftex
+\@onlypreamble\Gm@vtex
+% \end{macrocode}
+% \end{macro}\end{macro}\end{macro}\end{macro}
+%
+% \begin{macro}{\Gm@true}%
+% \begin{macro}{\Gm@false}%
+% \begin{macrocode}
+\def\Gm@true{true}%
+\def\Gm@false{false}%
+% \end{macrocode}
+% \end{macro}\end{macro}
+%
+% \begin{macro}{\Gm@dorg}
+% The macro saves \LaTeX{} native dimensions and switches before
+% processing \textsf{geometry} options, and is called when |reset|
+% or |pass| is set.
+% \begin{macrocode}
+\edef\Gm@dorg{%
+ \noexpand\setlength{\paperwidth}{\the\paperwidth}%
+ \noexpand\setlength{\paperheight}{\the\paperheight}%
+ \noexpand\setlength{\textheight}{\the\textheight}%
+ \noexpand\setlength{\textwidth}{\the\textwidth}%
+ \noexpand\setlength{\oddsidemargin}{\the\oddsidemargin}%
+ \noexpand\setlength{\evensidemargin}{\the\evensidemargin}%
+ \noexpand\setlength{\topmargin}{\the\topmargin}%
+ \noexpand\setlength{\headsep}{\the\headsep}%
+ \noexpand\setlength{\headheight}{\the\headheight}%
+ \noexpand\setlength{\footskip}{\the\footskip}%
+ \noexpand\setlength{\marginparwidth}{\the\marginparwidth}%
+ \noexpand\setlength{\marginparsep}{\the\marginparsep}%
+ \noexpand\setlength{\columnsep}{\the\columnsep}%
+ \noexpand\setlength{\skip\footins}{\the\skip\footins}%
+ \noexpand\setlength{\hoffset}{\the\hoffset}%
+ \noexpand\setlength{\voffset}{\the\voffset}%
+ \expandafter\noexpand\csname @twocolumn\if@twocolumn
+ \Gm@true\else\Gm@false\fi\endcsname
+ \expandafter\noexpand\csname @twoside\if@twoside
+ \Gm@true\else\Gm@false\fi\endcsname
+ \expandafter\noexpand\csname @mparswitch\if@mparswitch
+ \Gm@true\else\Gm@false\fi\endcsname
+ \expandafter\noexpand\csname @reversemargin\if@reversemargin
+ \Gm@true\else\Gm@false\fi\endcsname
+ \noexpand\mag=\the\mag}%
+\@onlypreamble\Gm@dorg
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Gm@init}
+% The macro for initializing modes and flags is defined here. This macro
+% is called at the beginning of the package and when |reset| is specified.
+% \begin{macrocode}
+\def\Gm@init{%
+ \Gm@hbodyfalse\Gm@vbodyfalse
+ \Gm@includeheadfalse\Gm@includefootfalse\Gm@includempfalse
+ \Gm@landscapefalse\Gm@compatiifalse\Gm@heightroundedfalse
+ \Gm@verbosefalse\Gm@showframefalse\Gm@specialfalse
+ \let\Gm@paper\@undefined
+ \let\Gm@width\@undefined\let\Gm@height\@undefined
+ \let\Gm@textwidth\@undefined\let\Gm@textheight\@undefined
+ \let\Gm@hscale\@undefined\let\Gm@vscale\@undefined
+ \let\Gm@hmarginratio\@undefined\let\Gm@vmarginratio\@undefined
+ \let\Gm@lmargin\@undefined\let\Gm@rmargin\@undefined
+ \let\Gm@tmargin\@undefined\let\Gm@bmargin\@undefined
+ \let\Gm@driver\@empty\let\Gm@truedimen\@empty
+ \Gm@bindingoffset\z@\Gm@dimlist={}}%
+\@onlypreamble\Gm@init
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Gm@setdriver}
+% The macro sets the specified driver.
+% \begin{macrocode}
+\def\Gm@setdriver#1{%
+ \expandafter\let\expandafter\Gm@driver\csname Gm@#1\endcsname}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Gm@unsetdriver}
+% The macro unsets the specified driver if it has been set.
+% \begin{macrocode}
+\def\Gm@unsetdriver#1{%
+ \expandafter\ifx\csname Gm@#1\endcsname\Gm@driver
+ \let\Gm@driver\@empty
+ \fi}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Gm@setbool}
+% \begin{macro}{\Gm@setboolrev}
+% The macros set a boolean option.
+% \begin{macrocode}
+\def\Gm@setbool{\@dblarg\Gm@@setbool}%
+\def\Gm@setboolrev{\@dblarg\Gm@@setboolrev}%
+\def\Gm@@setbool[#1]#2#3{\Gm@doif{#1}{#3}{\csname Gm@#2\Gm@bool\endcsname}}%
+\def\Gm@@setboolrev[#1]#2#3{\Gm@doifelse{#1}{#3}%
+ {\csname Gm@#2\Gm@false\endcsname}{\csname Gm@#2\Gm@true\endcsname}}%
+\@onlypreamble\Gm@setbool
+\@onlypreamble\Gm@setboolrev
+\@onlypreamble\Gm@@setbool
+\@onlypreamble\Gm@@setboolrev
+% \end{macrocode}
+% \end{macro}\end{macro}
+% \begin{macro}{\Gm@doif}
+% \begin{macro}{\Gm@doifelse}
+% \cs{Gm@doif} excutes the third argument |#3| using a boolean value
+% |#2| of a option |#1|. \cs{Gm@doifelse} executes the third
+% argument |#3| if a boolean option |#1| with its value |#2| is |true|,
+% and executes the fourth argument |#4| if |false|.
+% \begin{macrocode}
+\def\Gm@doif#1#2#3{%
+ \lowercase{\def\Gm@bool{#2}}%
+ \ifx\Gm@bool\@empty
+ \let\Gm@bool\Gm@true
+ \fi
+ \ifx\Gm@bool\Gm@true
+ \else
+ \ifx\Gm@bool\Gm@false
+ \else
+ \let\Gm@bool\relax
+ \fi
+ \fi
+ \ifx\Gm@bool\relax
+ \Gm@warning{`#1' should be set to `true' or `false'}%
+ \else
+ #3
+ \fi}%
+\def\Gm@doifelse#1#2#3#4{%
+ \Gm@doif{#1}{#2}{\ifx\Gm@bool\Gm@true #3\else #4\fi}}%
+\@onlypreamble\Gm@doif
+\@onlypreamble\Gm@doifelse
+% \end{macrocode}
+% \end{macro}\end{macro}
+%
+% \begin{macro}{\Gm@reverse}
+% The macro reverses a bool value.
+% \begin{macrocode}
+\def\Gm@reverse#1{%
+ \csname ifGm@#1\endcsname
+ \csname Gm@#1false\endcsname\else\csname Gm@#1true\endcsname\fi}%
+\@onlypreamble\Gm@reverse
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Gm@checkbool}
+% The macro is used in \cs{Gm@showparams} to print |true| or nothing.
+% \begin{macrocode}
+\def\Gm@checkbool#1{#1: \csname ifGm@#1\endcsname true\else --\fi^^J}%
+\@onlypreamble\Gm@checkbool
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Gm@defbylen}
+% \begin{macro}{\Gm@defbycnt}
+% Macros \cs{Gm@defbylen} and \cs{Gm@defbycnt} can be used to define
+% \cs{Gm@xxxx} variables by length and counter respectively
+% with \textsf{calc} package.
+% \begin{macrocode}
+\def\Gm@defbylen#1#2{%
+ \setlength\@tempdima{#2}%
+ \expandafter\edef\csname Gm@#1\endcsname{\the\@tempdima}}%
+\def\Gm@defbycnt#1#2{%
+ \setcounter{Gm@tempcnt}{#2}%
+ \expandafter\edef\csname Gm@#1\endcsname{\the\value{Gm@tempcnt}}}%
+\@onlypreamble\Gm@defbylen
+\@onlypreamble\Gm@defbycnt
+% \end{macrocode}
+% \end{macro}\end{macro}
+% \begin{macro}{\Gm@set@ratio}
+% The macro parses the value of options specifying marginal ratios,
+% which is used in \cs{Gm@setbyratio} macro.
+% \begin{macrocode}
+\def\Gm@sep@ratio#1:#2{\@tempcnta=#1\@tempcntb=#2}%
+\@onlypreamble\Gm@set@ratio
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Gm@setbyratio}
+% The macro determines the dimension specified by |#4| calculating
+% |#3|$\times a / b$, where $a$ and $b$ are given by \cs{Gm@mratio}
+% with $a:b$ value. If |#1| in brackets is |b|, $a$ and $b$ are swapped.
+% The second argument with |h| or |v| denoting horizontal or vertical
+% is not used in this macro.
+% \begin{macrocode}
+\def\Gm@setbyratio[#1]#2#3#4{% determine #4 by ratio
+ \expandafter\Gm@sep@ratio\Gm@mratio\relax
+ \if#1b
+ \edef\@@tempa{\the\@tempcnta}%
+ \@tempcnta=\@tempcntb
+ \@tempcntb=\@@tempa\relax
+ \fi
+ \expandafter\setlength\expandafter\@tempdimb\expandafter
+ {\csname Gm@#3\endcsname}%
+ \ifnum\@tempcntb>\z@
+ \multiply\@tempdimb\@tempcnta
+ \divide\@tempdimb\@tempcntb
+ \fi
+ \expandafter\edef\csname Gm@#4\endcsname{\the\@tempdimb}}%
+\@onlypreamble\Gm@setbyratio
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Gm@detiv}
+% This macro determines the fourth length(|#4|) from |#1|(\glen{paperwidth}
+% or \glen{paperheight}), |#2| and |#3|. It is used in
+% \cs{Gm@detall} macro.
+% \begin{macrocode}
+\def\Gm@detiv#1#2#3#4{% determine #4.
+ \expandafter\setlength\expandafter\@tempdima\expandafter
+ {\csname paper#1\endcsname}%
+ \expandafter\setlength\expandafter\@tempdimb\expandafter
+ {\csname Gm@#2\endcsname}%
+ \addtolength\@tempdima{-\@tempdimb}%
+ \expandafter\setlength\expandafter\@tempdimb\expandafter
+ {\csname Gm@#3\endcsname}%
+ \addtolength\@tempdima{-\@tempdimb}%
+ \ifdim\@tempdima<\z@
+ \Gm@warning{`#4' results in NEGATIVE (\the\@tempdima).%
+ ^^J\@spaces `#2' or `#3' should be shortened in length}%
+ \fi
+ \expandafter\edef\csname Gm@#4\endcsname{\the\@tempdima}}%
+\@onlypreamble\Gm@detiv
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Gm@detiiandiii}
+% This macro determines |#2| and |#3| from |#1| with the first argument
+% (|#1|) can be |width| or |height|, which is expanded into dimensions
+% of paper and total body. It is used in \cs{Gm@detall} macro.
+% \begin{macrocode}
+\def\Gm@detiiandiii#1#2#3{% determine #2 and #3.
+ \expandafter\setlength\expandafter\@tempdima\expandafter
+ {\csname paper#1\endcsname}%
+ \expandafter\setlength\expandafter\@tempdimb\expandafter
+ {\csname Gm@#1\endcsname}%
+ \addtolength\@tempdima{-\@tempdimb}%
+ \ifdim\@tempdima<\z@
+ \Gm@warning{`#2' and `#3' result in NEGATIVE (\the\@tempdima).%
+ ^^J\@spaces `#1' should be shortened in length}%
+ \fi
+ \ifx\Gm@mratio\@undefined
+ \divide\@tempdima\tw@
+ \@tempdimb=\@tempdima
+ \else
+ \@tempdimb=\@tempdima
+ \expandafter\Gm@sep@ratio\Gm@mratio\relax
+ \advance\@tempcntb\@tempcnta
+ \ifnum\@tempcntb>\z@
+ \divide\@tempdima\@tempcntb
+ \multiply\@tempdima\@tempcnta
+ \advance\@tempdimb-\@tempdima
+ \else
+ \divide\@tempdima\tw@
+ \@tempdimb=\@tempdima
+ \fi
+ \fi
+ \expandafter\edef\csname Gm@#2\endcsname{\the\@tempdima}%
+ \expandafter\edef\csname Gm@#3\endcsname{\the\@tempdimb}}%
+\@onlypreamble\Gm@detiiandiii
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Gm@detall}
+% This macro determines partition of each direction.
+% The first argument (|#1|) should be |h| or |v|, the second (|#2|)
+% |width| or |height|, the third (|#3|) |lmargin| or |top|, and
+% the last (|#4|) |rmargin| or |bottom|.
+% \begin{macrocode}
+\def\Gm@detall#1#2#3#4{%
+ \@tempcnta\z@
+ \edef\Gm@mratio{\@nameuse{Gm@#1marginratio}}%
+% \end{macrocode}
+% \cs{@tempcnta} is treated as a three-digit binary value with
+% top, middle and bottom denoted |left|(|top|), |width|(|height|)
+% and |right|(|bottom|) margins user specified respectively.
+% \begin{macrocode}
+ \if#1h
+ \ifx\Gm@lmargin\@undefined\else\advance\@tempcnta4\relax\fi
+ \ifGm@hbody\advance\@tempcnta2\relax\fi
+ \ifx\Gm@rmargin\@undefined\else\advance\@tempcnta1\relax\fi
+ \Gm@cnth\@tempcnta
+ \else
+ \ifx\Gm@tmargin\@undefined\else\advance\@tempcnta4\relax\fi
+ \ifGm@vbody\advance\@tempcnta2\relax\fi
+ \ifx\Gm@bmargin\@undefined\else\advance\@tempcnta1\relax\fi
+ \Gm@cntv\@tempcnta
+ \fi
+% \end{macrocode}
+% Case the value is |000| (=0) with nothing fixed (default):
+% \begin{macrocode}
+ \ifcase\@tempcnta
+ \if#1h
+ \edef\Gm@width{\Gm@Dhscale\paperwidth}%
+ \else
+ \edef\Gm@height{\Gm@Dvscale\paperheight}%
+ \fi
+ \Gm@detiiandiii{#2}{#3}{#4}%
+% \end{macrocode}
+% Case |001| (=1) with |right|(|bottom|) fixed:
+% \begin{macrocode}
+ \or\Gm@setbyratio[f]{#1}{#4}{#3}\Gm@detiv{#2}{#3}{#4}{#2}%
+% \end{macrocode}
+% Case |010| (=2) with |width|(|height|) fixed:
+% \begin{macrocode}
+ \or\Gm@detiiandiii{#2}{#3}{#4}%
+% \end{macrocode}
+% Case |011| (=3) with both |width|(|height|) and |right|(|bottom|) fixed:
+% \begin{macrocode}
+ \or\Gm@detiv{#2}{#2}{#4}{#3}%
+% \end{macrocode}
+% Case |100| (=4) with |left|(|top|) fixed:
+% \begin{macrocode}
+ \or\Gm@setbyratio[b]{#1}{#3}{#4}\Gm@detiv{#2}{#3}{#4}{#2}%
+% \end{macrocode}
+% Case |101| (=5) with both |left|(|top|) and |right|(|bottom|) fixed:
+% \begin{macrocode}
+ \or\Gm@detiv{#2}{#3}{#4}{#2}%
+% \end{macrocode}
+% Case |110| (=6) with both |left|(|top|) and |width|(|height|) fixed:
+% \begin{macrocode}
+ \or\Gm@detiv{#2}{#2}{#3}{#4}%
+% \end{macrocode}
+% Case |111| (=7) with all fixed though it is over-specified:
+% \begin{macrocode}
+ \or\Gm@warning{Over-specification in `#1'-direction.%
+ ^^J\@spaces `#2' (\@nameuse{Gm@#2}) is ignored}%
+ \Gm@detiv{#2}{#3}{#4}{#2}%
+ \else\fi}%
+\@onlypreamble\Gm@detall
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Gm@clean}
+% The macro for setting unspecified dimensions to be \cs{@undefined}.
+% This is used by \cs{geometry} macro.
+% \begin{macrocode}
+\def\Gm@clean{%
+ \ifnum\Gm@cnth<4\let\Gm@lmargin\@undefined\fi
+ \ifodd\Gm@cnth\else\let\Gm@rmargin\@undefined\fi
+ \ifnum\Gm@cntv<4\let\Gm@tmargin\@undefined\fi
+ \ifodd\Gm@cntv\else\let\Gm@bmargin\@undefined\fi
+ \ifGm@hbody\else
+ \let\Gm@hscale\@undefined
+ \let\Gm@width\@undefined
+ \let\Gm@textwidth\@undefined
+ \fi
+ \ifGm@vbody\else
+ \let\Gm@vscale\@undefined
+ \let\Gm@height\@undefined
+ \let\Gm@textheight\@undefined
+ \fi
+ \if@twoside
+ \ifx\Gm@hmarginratio\Gm@Dhratiotwo
+ \let\Gm@hmarginratio\@undefined
+ \fi
+ \else
+ \ifx\Gm@hmarginratio\Gm@Dhratio
+ \let\Gm@hmarginratio\@undefined
+ \fi
+ \fi}%
+\@onlypreamble\Gm@clean
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Gm@parse@divide}
+% The macro parses (|h|,|v|)|divide| options.
+% \begin{macrocode}
+\def\Gm@parse@divide#1#2#3#4{%
+ \def\Gm@star{*}%
+ \@tempcnta\z@
+ \@for\Gm@tmp:=#1\do{%
+ \expandafter\KV@@sp@def\expandafter\Gm@frag\expandafter{\Gm@tmp}%
+ \edef\Gm@value{\Gm@frag}%
+ \ifcase\@tempcnta\relax\edef\Gm@key{#2}%
+ \or\edef\Gm@key{#3}%
+ \else\edef\Gm@key{#4}%
+ \fi
+ \@nameuse{Gm@set\Gm@key false}%
+ \ifx\empty\Gm@value\else
+ \ifx\Gm@star\Gm@value\else
+ \setkeys{Gm}{\Gm@key=\Gm@value}%
+ \fi\fi
+ \advance\@tempcnta\@ne}%
+ \let\Gm@star\relax}%
+\@onlypreamble\Gm@parse@divide
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Gm@branch}
+% The macro splits a value into the same two values.
+% \begin{macrocode}
+\def\Gm@branch#1#2#3{%
+ \@tempcnta\z@
+ \@for\Gm@tmp:=#1\do{%
+ \KV@@sp@def\Gm@frag{\Gm@tmp}%
+ \edef\Gm@value{\Gm@frag}%
+ \ifcase\@tempcnta\relax% cnta == 0
+ \setkeys{Gm}{#2=\Gm@value}%
+ \or% cnta == 1
+ \setkeys{Gm}{#3=\Gm@value}%
+ \else\fi
+ \advance\@tempcnta\@ne}%
+ \ifnum\@tempcnta=\@ne
+ \setkeys{Gm}{#3=\Gm@value}%
+ \fi}%
+\@onlypreamble\Gm@branch
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Gm@magtooffset}
+% This macro is used to adjust offsets by \cs{mag}.
+% \begin{macrocode}
+\def\Gm@magtooffset{%
+ \@tempdima=\mag\Gm@truedimen sp%
+ \@tempdimb=1\Gm@truedimen in%
+ \divide\@tempdimb\@tempdima
+ \multiply\@tempdimb\@m
+ \addtolength{\hoffset}{1\Gm@truedimen in}%
+ \addtolength{\voffset}{1\Gm@truedimen in}%
+ \addtolength{\hoffset}{-\the\@tempdimb}%
+ \addtolength{\voffset}{-\the\@tempdimb}}%
+\@onlypreamble\Gm@magtooffset
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Gm@setafter}
+% This macro stores \LaTeX{} native dimensions, which are stored and
+% set afterwards.
+% \begin{macrocode}
+\def\Gm@setafter#1#2{%
+ \let\Gm@len=\relax\let\Gm@td=\relax
+ \edef\addtolist{\noexpand\Gm@dimlist=%
+ {\the\Gm@dimlist \Gm@len{#1}{#2}}}\addtolist}%
+\@onlypreamble\Gm@setafter
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Gm@processdimlist}
+% This macro processes \cs{Gm@dimlist}.
+% \begin{macrocode}
+\def\Gm@processdimlist{%
+ \def\Gm@td{\Gm@truedimen}%
+ \def\Gm@len##1##2{\setlength{##1}{##2}}%
+ \the\Gm@dimlist}%
+\@onlypreamble\Gm@processdimlist
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Gm@setpaper}
+% The macro sets |paperwidth| and |paperheight| dimensions
+% using \cs{Gm@setafter} macro.
+% \begin{macrocode}
+\def\Gm@setpaper(#1,#2)#3{%
+ \let\Gm@td\relax
+ \Gm@setafter\paperwidth{#1\Gm@td #3}%
+ \Gm@setafter\paperheight{#2\Gm@td #3}%
+ \ifGm@landscape\Gm@sworienttrue\else\Gm@sworientfalse\fi}%
+\@onlypreamble\Gm@setpaper
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Gm@chpaper}
+% The macro changes the paper size.
+% \begin{macrocode}
+\def\Gm@chpaper{\@nameuse{Gm@\Gm@paper}}%
+\@onlypreamble\Gm@chpaper
+% \end{macrocode}
+% \end{macro}
+% Various paper size are defined here.
+% \begin{macrocode}
+\@namedef{Gm@a0paper}{\Gm@setpaper(841,1189){mm}}%
+\@namedef{Gm@a1paper}{\Gm@setpaper(595,841){mm}}%
+\@namedef{Gm@a2paper}{\Gm@setpaper(420,595){mm}}%
+\@namedef{Gm@a3paper}{\Gm@setpaper(297,420){mm}}%
+\@namedef{Gm@a4paper}{\Gm@setpaper(210,297){mm}}%
+\@namedef{Gm@a5paper}{\Gm@setpaper(149,210){mm}}%
+\@namedef{Gm@a6paper}{\Gm@setpaper(105,149){mm}}%
+\@namedef{Gm@b0paper}{\Gm@setpaper(1000,1414){mm}}%
+\@namedef{Gm@b1paper}{\Gm@setpaper(707,1000){mm}}%
+\@namedef{Gm@b2paper}{\Gm@setpaper(500,707){mm}}%
+\@namedef{Gm@b3paper}{\Gm@setpaper(353,500){mm}}%
+\@namedef{Gm@b4paper}{\Gm@setpaper(250,353){mm}}%
+\@namedef{Gm@b5paper}{\Gm@setpaper(176,250){mm}}%
+\@namedef{Gm@b6paper}{\Gm@setpaper(125,176){mm}}%
+\@namedef{Gm@letterpaper}{\Gm@setpaper(8.5,11){in}}%
+\@namedef{Gm@legalpaper}{\Gm@setpaper(8.5,14){in}}%
+\@namedef{Gm@executivepaper}{\Gm@setpaper(7.25,10.5){in}}%
+\@namedef{Gm@screen}{\Gm@setpaper(225,180){mm}}%
+% \end{macrocode}
+%
+% All the available options are defined below.
+% \begin{key}{Gm}{paper}
+% |paper| takes paper name as its value. Available paper names are listed
+% below.
+% \begin{macrocode}
+\define@key{Gm}{paper}{\setkeys{Gm}{#1}}%
+\let\KV@Gm@papername\KV@Gm@paper
+% \end{macrocode}
+% \end{key}
+% \begin{key}{Gm}{a[0-6]paper}
+% \begin{key}{Gm}{b[0-6]paper}
+% \begin{key}{Gm}{letterpaper}
+% \begin{key}{Gm}{legalpaper}
+% \begin{key}{Gm}{executivepaper}
+% \begin{key}{Gm}{screen}
+% The following paper names are available. |screen| is introduced
+% in version 3, which should not be specified in the class option list.
+% \begin{macrocode}
+\define@key{Gm}{a0paper}[true]{\def\Gm@paper{a0paper}\Gm@chpaper}%
+\define@key{Gm}{a1paper}[true]{\def\Gm@paper{a1paper}\Gm@chpaper}%
+\define@key{Gm}{a2paper}[true]{\def\Gm@paper{a2paper}\Gm@chpaper}%
+\define@key{Gm}{a3paper}[true]{\def\Gm@paper{a3paper}\Gm@chpaper}%
+\define@key{Gm}{a4paper}[true]{\def\Gm@paper{a4paper}\Gm@chpaper}%
+\define@key{Gm}{a5paper}[true]{\def\Gm@paper{a5paper}\Gm@chpaper}%
+\define@key{Gm}{a6paper}[true]{\def\Gm@paper{a6paper}\Gm@chpaper}%
+\define@key{Gm}{b0paper}[true]{\def\Gm@paper{b0paper}\Gm@chpaper}%
+\define@key{Gm}{b1paper}[true]{\def\Gm@paper{b1paper}\Gm@chpaper}%
+\define@key{Gm}{b2paper}[true]{\def\Gm@paper{b2paper}\Gm@chpaper}%
+\define@key{Gm}{b3paper}[true]{\def\Gm@paper{b3paper}\Gm@chpaper}%
+\define@key{Gm}{b4paper}[true]{\def\Gm@paper{b4paper}\Gm@chpaper}%
+\define@key{Gm}{b5paper}[true]{\def\Gm@paper{b5paper}\Gm@chpaper}%
+\define@key{Gm}{b6paper}[true]{\def\Gm@paper{b6paper}\Gm@chpaper}%
+\define@key{Gm}{letterpaper}[true]{\def\Gm@paper{letterpaper}\Gm@chpaper}%
+\define@key{Gm}{legalpaper}[true]{\def\Gm@paper{legalpaper}\Gm@chpaper}%
+\define@key{Gm}{executivepaper}[true]{\def\Gm@paper{executivepaper}%
+ \Gm@chpaper}%
+\define@key{Gm}{screen}[true]{\def\Gm@paper{screen}\Gm@chpaper}%
+% \end{macrocode}
+% \end{key}\end{key}\end{key}\end{key}\end{key}
+% \end{key}
+% \begin{key}{Gm}{paperwidth}
+% \begin{key}{Gm}{paperheight}
+% \begin{key}{Gm}{papersize}
+% Direct specification for paper size is also possible.
+% \begin{macrocode}
+\define@key{Gm}{paperwidth}{%
+ \Gm@setafter\paperwidth{#1}\def\Gm@paper{user defined}}%
+\define@key{Gm}{paperheight}{%
+ \Gm@setafter\paperheight{#1}\def\Gm@paper{user defined}}%
+\define@key{Gm}{papersize}{\Gm@branch{#1}{paperwidth}{paperheight}}%
+% \end{macrocode}
+% \end{key}\end{key}\end{key}
+% \begin{key}{Gm}{landscape}
+% \begin{key}{Gm}{portrait}
+% Paper orientation setting is also available.
+% \begin{macrocode}
+\define@key{Gm}{landscape}[true]{\Gm@doifelse{landscape}{#1}%
+ {\ifGm@landscape\else\Gm@landscapetrue\Gm@reverse{sworient}\fi}%
+ {\ifGm@landscape\Gm@landscapefalse\Gm@reverse{sworient}\fi}}%
+\define@key{Gm}{portrait}[true]{\Gm@doifelse{portrait}{#1}%
+ {\ifGm@landscape\Gm@landscapefalse\Gm@reverse{sworient}\fi}%
+ {\ifGm@landscape\else\Gm@landscapetrue\Gm@reverse{sworient}\fi}}%
+% \end{macrocode}
+% \end{key}\end{key}
+% \begin{key}{Gm}{hscale}
+% \begin{key}{Gm}{vscale}
+% \begin{key}{Gm}{scale}
+% These options can determine the length(s) of \gpart{total body}
+% giving \textit{scale(s)} against the paper size.
+% \begin{macrocode}
+\define@key{Gm}{hscale}{\Gm@hbodytrue\edef\Gm@hscale{#1}}%
+\define@key{Gm}{vscale}{\Gm@vbodytrue\edef\Gm@vscale{#1}}%
+\define@key{Gm}{scale}{\Gm@branch{#1}{hscale}{vscale}}%
+% \end{macrocode}
+% \end{key}\end{key}\end{key}
+% \begin{key}{Gm}{width}
+% \begin{key}{Gm}{height}
+% \begin{key}{Gm}{total}
+% \begin{key}{Gm}{totalwidth}
+% \begin{key}{Gm}{totalheight}
+% These options give concrete dimension(s) of \gpart{total body}.
+% |totalwidth| and |totalheight| are aliases of |width| and |height|
+% respectively.
+% \begin{macrocode}
+\define@key{Gm}{width}{\Gm@hbodytrue\Gm@defbylen{width}{#1}}%
+\define@key{Gm}{height}{\Gm@vbodytrue\Gm@defbylen{height}{#1}}%
+\define@key{Gm}{total}{\Gm@branch{#1}{width}{height}}%
+\let\KV@Gm@totalwidth\KV@Gm@width
+\let\KV@Gm@totalheight\KV@Gm@height
+% \end{macrocode}
+% \end{key}\end{key}\end{key}\end{key}\end{key}
+% \begin{key}{Gm}{textwidth}
+% \begin{key}{Gm}{textheight}
+% \begin{key}{Gm}{text}
+% \begin{key}{Gm}{body}
+% These options directly sets the dimensions \cs{textwidth} and
+% \cs{textheight}. |body| is an alias of |text|.
+% \begin{macrocode}
+\define@key{Gm}{textwidth}{\Gm@hbodytrue\Gm@defbylen{textwidth}{#1}}%
+\define@key{Gm}{textheight}{\Gm@vbodytrue\Gm@defbylen{textheight}{#1}}%
+\define@key{Gm}{text}{\Gm@branch{#1}{textwidth}{textheight}}%
+\let\KV@Gm@body\KV@Gm@text
+% \end{macrocode}
+% \end{key}\end{key}\end{key}\end{key}
+% \begin{key}{Gm}{lines}
+% The option sets \cs{textheight} with the number of lines.
+% \begin{macrocode}
+\define@key{Gm}{lines}{\Gm@vbodytrue\Gm@defbycnt{lines}{#1}}%
+% \end{macrocode}
+% \end{key}
+% \begin{key}{Gm}{includehead}
+% \begin{key}{Gm}{includefoot}
+% \begin{key}{Gm}{includeheadfoot}
+% \begin{key}{Gm}{includemp}
+% \begin{key}{Gm}{includeall}
+% |include*| options include the corresponding part(s) in
+% \gpart{total body}.
+% \begin{macrocode}
+\define@key{Gm}{includehead}[true]{\Gm@setbool{includehead}{#1}}%
+\define@key{Gm}{includefoot}[true]{\Gm@setbool{includefoot}{#1}}%
+\define@key{Gm}{includeheadfoot}[true]{\Gm@doifelse{includeheadfoot}{#1}%
+ {\Gm@includeheadtrue\Gm@includefoottrue}%
+ {\Gm@includeheadfalse\Gm@includefootfalse}}%
+\define@key{Gm}{includemp}[true]{\Gm@setbool{includemp}{#1}}%
+\define@key{Gm}{includeall}[true]{\Gm@doifelse{includeall}{#1}%
+ {\Gm@includeheadtrue\Gm@includefoottrue\Gm@includemptrue}%
+ {\Gm@includeheadfalse\Gm@includefootfalse\Gm@includempfalse}}%
+% \end{macrocode}
+% \end{key}\end{key}\end{key}\end{key}\end{key}
+% \begin{key}{Gm}{ignorehead}
+% \begin{key}{Gm}{ignorefoot}
+% \begin{key}{Gm}{ignoreheadfoot}
+% \begin{key}{Gm}{ignoremp}
+% \begin{key}{Gm}{ignoreall}
+% |ignore*| options disregard \gpart{head}, \gpart{foot}
+% and \gpart{marginpars} in determining the location of \gpart{total body}.
+% \begin{macrocode}
+\define@key{Gm}{ignorehead}[true]{%
+ \Gm@setboolrev[ignorehead]{includehead}{#1}}%
+\define@key{Gm}{ignorefoot}[true]{%
+ \Gm@setboolrev[ignorefoot]{includefoot}{#1}}%
+\define@key{Gm}{ignoreheadfoot}[true]{\Gm@doifelse{ignoreheadfoot}{#1}%
+ {\Gm@includeheadfalse\Gm@includefootfalse}%
+ {\Gm@includeheadtrue\Gm@includefoottrue}}%
+\define@key{Gm}{ignoremp}[true]{%
+ \Gm@setboolrev[ignoremp]{includemp}{#1}}%
+\define@key{Gm}{ignoreall}[true]{\Gm@doifelse{ignoreall}{#1}%
+ {\Gm@includeheadfalse\Gm@includefootfalse\Gm@includempfalse}%
+ {\Gm@includeheadtrue\Gm@includefoottrue\Gm@includemptrue}}%
+% \end{macrocode}
+% \end{key}\end{key}\end{key}\end{key}\end{key}
+% \begin{key}{Gm}{heightrounded}
+% The option rounds \cs{textheight} to n-times of \cs{baselineskip}
+% plus \cs{topskip}.
+% \begin{macrocode}
+\define@key{Gm}{heightrounded}[true]{\Gm@setbool{heightrounded}{#1}}%
+% \end{macrocode}
+% \end{key}
+% \begin{key}{Gm}{hdivide}
+% \begin{key}{Gm}{vdivide}
+% \begin{key}{Gm}{divide}
+% The options are useful to specify partitioning
+% in each direction of the paper.
+% \begin{macrocode}
+\define@key{Gm}{hdivide}{\Gm@parse@divide{#1}{lmargin}{width}{rmargin}}%
+\define@key{Gm}{vdivide}{\Gm@parse@divide{#1}{tmargin}{height}{bmargin}}%
+\define@key{Gm}{divide}{\Gm@parse@divide{#1}{lmargin}{width}{rmargin}%
+ \Gm@parse@divide{#1}{tmargin}{height}{bmargin}}%
+% \end{macrocode}
+% \end{key}\end{key}\end{key}
+%
+% \begin{key}{Gm}{lmargin}
+% \begin{key}{Gm}{rmargin}
+% \begin{key}{Gm}{tmargin}
+% \begin{key}{Gm}{bmargin}
+% \begin{key}{Gm}{left}
+% \begin{key}{Gm}{inner}
+% \begin{key}{Gm}{innermargin}
+% \begin{key}{Gm}{right}
+% \begin{key}{Gm}{outer}
+% \begin{key}{Gm}{outermargin}
+% \begin{key}{Gm}{top}
+% \begin{key}{Gm}{bottom}
+% These options set \gpart{margins}.
+% |left|, |inner|, |innermargin| are aliases of |lmargin|.
+% |right|, |outer|, |outermargin| are aliases of |rmargin|.
+% |top| and |bottom| are aliases of |tmargin| and |bmargin| respectively.
+% \begin{macrocode}
+\define@key{Gm}{lmargin}{\Gm@defbylen{lmargin}{#1}}%
+\define@key{Gm}{rmargin}{\Gm@defbylen{rmargin}{#1}}%
+\let\KV@Gm@left\KV@Gm@lmargin
+\let\KV@Gm@inner\KV@Gm@lmargin
+\let\KV@Gm@innermargin\KV@Gm@lmargin
+\let\KV@Gm@right\KV@Gm@rmargin
+\let\KV@Gm@outer\KV@Gm@rmargin
+\let\KV@Gm@outermargin\KV@Gm@rmargin
+\define@key{Gm}{tmargin}{\Gm@defbylen{tmargin}{#1}}%
+\define@key{Gm}{bmargin}{\Gm@defbylen{bmargin}{#1}}%
+\let\KV@Gm@top\KV@Gm@tmargin
+\let\KV@Gm@bottom\KV@Gm@bmargin
+% \end{macrocode}
+% \end{key}\end{key}\end{key}\end{key}\end{key}
+% \end{key}\end{key}\end{key}\end{key}\end{key}
+% \end{key}\end{key}
+% \begin{key}{Gm}{hmargin}
+% \begin{key}{Gm}{vmargin}
+% \begin{key}{Gm}{margin}
+% These options are shorthands for setting \gpart{margins}.
+% \begin{macrocode}
+\define@key{Gm}{hmargin}{\Gm@branch{#1}{lmargin}{rmargin}}%
+\define@key{Gm}{vmargin}{\Gm@branch{#1}{tmargin}{bmargin}}%
+\define@key{Gm}{margin}{\Gm@branch{#1}{lmargin}{tmargin}%
+ \Gm@branch{#1}{rmargin}{bmargin}}%
+% \end{macrocode}
+% \end{key}\end{key}\end{key}
+% \begin{key}{Gm}{hmarginratio}
+% \begin{key}{Gm}{vmarginratio}
+% \begin{key}{Gm}{marginratio}
+% \begin{key}{Gm}{hratio}
+% \begin{key}{Gm}{vratio}
+% \begin{key}{Gm}{ratio}
+% Options specifying the margin ratios.
+% \begin{macrocode}
+\define@key{Gm}{hmarginratio}{\edef\Gm@hmarginratio{#1}}%
+\define@key{Gm}{vmarginratio}{\edef\Gm@vmarginratio{#1}}%
+\define@key{Gm}{marginratio}{\Gm@branch{#1}{hmarginratio}{vmarginratio}}%
+\let\KV@Gm@hratio\KV@Gm@hmarginratio
+\let\KV@Gm@vratio\KV@Gm@vmarginratio
+\let\KV@Gm@ratio\KV@Gm@marginratio
+% \end{macrocode}
+% \end{key}\end{key}\end{key}
+% \end{key}\end{key}\end{key}
+% \begin{key}{Gm}{hcentering}
+% \begin{key}{Gm}{vcentering}
+% \begin{key}{Gm}{centering}
+% Useful shorthands to make \gpart{body} centered.
+% \begin{macrocode}
+\define@key{Gm}{hcentering}[true]{\Gm@doifelse{hcentering}{#1}%
+ {\def\Gm@hmarginratio{1:1}}{}}%
+\define@key{Gm}{vcentering}[true]{\Gm@doifelse{vcentering}{#1}%
+ {\def\Gm@vmarginratio{1:1}}{}}%
+\define@key{Gm}{centering}[true]{\Gm@doifelse{centering}{#1}%
+ {\def\Gm@hmarginratio{1:1}\def\Gm@vmarginratio{1:1}}{}}%
+% \end{macrocode}
+% \end{key}\end{key}\end{key}
+% \begin{key}{Gm}{twoside}
+% If |twoside=true|, \cs{@twoside} and \cs{@mparswitch} is set to |true|.
+% \begin{macrocode}
+\define@key{Gm}{twoside}[true]{\Gm@doifelse{twoside}{#1}%
+ {\@twosidetrue\@mparswitchtrue}{\@twosidefalse\@mparswitchfalse}}%
+% \end{macrocode}
+% \end{key}
+% \begin{key}{Gm}{asymmetric}
+% |asymmetric| sets \cs{@mparswitchfalse} and \cs{@twosidetrue}
+% A |asymmetric=false| has no effect.
+% \begin{macrocode}
+\define@key{Gm}{asymmetric}[true]{\Gm@doifelse{asymmetric}{#1}%
+ {\@twosidetrue\@mparswitchfalse}{}}%
+% \end{macrocode}
+% \end{key}
+% \begin{key}{Gm}{bindingoffset}
+% The macro specifies a white space added to the left or inner margin.
+% \begin{macrocode}
+\define@key{Gm}{bindingoffset}{\Gm@setafter\Gm@bindingoffset{#1}}%
+% \end{macrocode}
+% \end{key}
+% \begin{key}{Gm}{headheight}
+% \begin{key}{Gm}{headsep}
+% \begin{key}{Gm}{footskip}
+% \begin{key}{Gm}{head}
+% \begin{key}{Gm}{foot}
+% The direct settings of \gpart{head} and/or \gpart{foot} dimensions.
+% \begin{macrocode}
+\define@key{Gm}{headheight}{\Gm@setafter\headheight{#1}}%
+\define@key{Gm}{headsep}{\Gm@setafter\headsep{#1}}%
+\define@key{Gm}{footskip}{\Gm@setafter\footskip{#1}}%
+\let\KV@Gm@head\KV@Gm@headheight
+\let\KV@Gm@foot\KV@Gm@footskip
+% \end{macrocode}
+% \end{key}\end{key}\end{key}\end{key}\end{key}
+% \begin{key}{Gm}{nohead}
+% \begin{key}{Gm}{nofoot}
+% \begin{key}{Gm}{noheadfoot}
+% They are only shorthands to set \gpart{head} and/or \gpart{foot}
+% to be |0pt|.
+% \begin{macrocode}
+\define@key{Gm}{nohead}[true]{\Gm@doifelse{nohead}{#1}%
+ {\Gm@setafter\headheight\z@\Gm@setafter\headsep\z@}{}}%
+\define@key{Gm}{nofoot}[true]{\Gm@doifelse{nofoot}{#1}%
+ {\Gm@setafter\footskip\z@}{}}%
+\define@key{Gm}{noheadfoot}[true]{\Gm@doifelse{noheadfoot}{#1}%
+ {\Gm@setafter\headheight\z@\Gm@setafter\headsep
+ \z@\Gm@setafter\footskip\z@}{}}%
+% \end{macrocode}
+% \end{key}\end{key}\end{key}
+% \begin{key}{Gm}{footnotesep}
+% The option directly sets a native dimension \cs{footnotesep}.
+% \begin{macrocode}
+\define@key{Gm}{footnotesep}{\Gm@setafter{\skip\footins}{#1}}%
+% \end{macrocode}
+% \end{key}
+% \begin{key}{Gm}{marginparwidth}
+% \begin{key}{Gm}{marginpar}
+% \begin{key}{Gm}{marginparsep}
+% They directly set native dimensions \cs{marginparwidth} and
+% \cs{marginparsep}. For compatibility, |includemp| is set to |true|
+% if |compat2| is set.
+% \begin{macrocode}
+\define@key{Gm}{marginparwidth}{\ifGm@compatii\Gm@includemptrue\fi
+ \Gm@setafter\marginparwidth{#1}}%
+\let\KV@Gm@marginpar\KV@Gm@marginparwidth
+\define@key{Gm}{marginparsep}{\ifGm@compatii\Gm@includemptrue\fi
+ \Gm@setafter\marginparsep{#1}}%
+% \end{macrocode}
+% \end{key}\end{key}\end{key}
+% \begin{key}{Gm}{nomarginpar}
+% The macro is a shorthand for \cs{marginparwidth}|=0pt| and
+% \cs{marginparsep}|=0pt|.
+% \begin{macrocode}
+\define@key{Gm}{nomarginpar}[true]{\Gm@doifelse{nomarginpar}{#1}%
+ {\Gm@setafter\marginparwidth\z@\Gm@setafter\marginparsep\z@}{}}%
+% \end{macrocode}
+% \end{key}
+% \begin{key}{Gm}{columnsep}
+% The option sets a native dimension \cs{columnsep}.
+% \begin{macrocode}
+\define@key{Gm}{columnsep}{\Gm@setafter\columnsep{#1}}%
+% \end{macrocode}
+% \end{key}
+% \begin{key}{Gm}{hoffset}
+% \begin{key}{Gm}{voffset}
+% \begin{key}{Gm}{offset}
+% The former two options set native dimensions \cs{hoffset} and
+% \cs{voffset}. |offset| can set both of them with the same value.
+% \begin{macrocode}
+\define@key{Gm}{hoffset}{\Gm@setafter\hoffset{#1}}%
+\define@key{Gm}{voffset}{\Gm@setafter\voffset{#1}}%
+\define@key{Gm}{offset}{\Gm@branch{#1}{hoffset}{voffset}}%
+% \end{macrocode}
+% \end{key}\end{key}\end{key}
+% \begin{key}{Gm}{twocolumn}
+% The option sets \cs{twocolumn} switch.
+% \begin{macrocode}
+\define@key{Gm}{twocolumn}[true]{%
+ \Gm@doif{twocolumn}{#1}{\csname @twocolumn\Gm@bool\endcsname}}%
+% \end{macrocode}
+% \end{key}
+% \begin{key}{Gm}{reversemp}
+% \begin{key}{Gm}{reversemarginpar}
+% The both options set \cs{reversemargin}.
+% \begin{macrocode}
+\define@key{Gm}{reversemp}[true]{%
+ \Gm@doif{reversemp}{#1}{\csname @reversemargin\Gm@bool\endcsname}}%
+\define@key{Gm}{reversemarginpar}[true]{%
+ \Gm@doif{reversemarginpar}{#1}{\csname @reversemargin\Gm@bool\endcsname}}%
+% \end{macrocode}
+% \end{key}\end{key}
+% \begin{key}{Gm}{dviver}
+% \begin{macrocode}
+\define@key{Gm}{driver}{\edef\@@tempa{#1}%
+ \ifx\@@tempa\@empty\let\Gm@driver\@empty\else\setkeys{Gm}{#1}\fi}%
+% \end{macrocode}
+% \end{key}
+% \begin{key}{Gm}{dvips}
+% \begin{key}{Gm}{dvipdfm}
+% \begin{key}{Gm}{pdftex}
+% \begin{key}{Gm}{vtex}
+% The \textsf{geometry} package supports |dvips|, |dvipdfm|,
+% |pdflatex| and |vtex|. |dvipdfm| works like |dvips|.
+% \begin{macrocode}
+\define@key{Gm}{dvips}[true]{%
+ \Gm@doifelse{dvips}{#1}{\Gm@setdriver{dvips}}{\Gm@unsetdriver{dvips}}}%
+\define@key{Gm}{dvipdfm}[true]{%
+ \Gm@doifelse{dvipdfm}{#1}{\Gm@setdriver{dvipdfm}}{\Gm@unsetdriver{dvipdfm}}}%
+\define@key{Gm}{pdftex}[true]{%
+ \Gm@doifelse{pdftex}{#1}{\Gm@setdriver{pdftex}}{\Gm@unsetdriver{pdftex}}}%
+\define@key{Gm}{vtex}[true]{%
+ \Gm@doifelse{vtex}{#1}{\Gm@setdriver{vtex}}{\Gm@unsetdriver{vtex}}}%
+% \end{macrocode}
+% \end{key}\end{key}\end{key}\end{key}
+% \begin{key}{Gm}{verbose}
+% The verbose mode.
+% \begin{macrocode}
+\define@key{Gm}{verbose}[true]{\Gm@setbool{verbose}{#1}}%
+% \end{macrocode}
+% \end{key}
+% \begin{key}{Gm}{reset}
+% The option cancels all the options specified before |reset|,
+% except |pass|. |mag| ($\neq1000$) with |truedimen| cannot be also
+% reset.
+% \begin{macrocode}
+\define@key{Gm}{reset}[true]{\Gm@doifelse{reset}{#1}%
+ {\Gm@init\Gm@dorg\ProcessOptionsKV[c]{Gm}\Gm@setdefaultpaper}{}}%
+% \end{macrocode}
+% \end{key}
+% \begin{key}{Gm}{mag}
+% |mag| is expanded immediately when it is specified. So |reset| can't
+% reset |mag| when it is set with |truedimen|.
+% \begin{macrocode}
+\define@key{Gm}{mag}{\mag=#1}%
+% \end{macrocode}
+% \end{key}
+% \begin{key}{Gm}{truedimen}
+% If |truedimen| is set to |true|, all of the internal explicit dimensions
+% is changed to \textit{true} dimensions, e.g., |1in| is changed to
+% |1truein|.
+% \begin{macrocode}
+\define@key{Gm}{truedimen}[true]{\Gm@doifelse{truedimen}{#1}%
+ {\let\Gm@truedimen\Gm@true}{\let\Gm@truedimen\@empty}}%
+% \end{macrocode}
+% \end{key}
+% \begin{key}{Gm}{pass}
+% The option makes all the options specified ineffective except
+% verbose switch.
+% \begin{macrocode}
+\define@key{Gm}{pass}[true]{\Gm@setbool{pass}{#1}}%
+% \end{macrocode}
+% \end{key}
+% \begin{key}{Gm}{showframe}
+% The showframe option.
+% \begin{macrocode}
+\define@key{Gm}{showframe}[true]{\Gm@setbool{showframe}{#1}}%
+% \end{macrocode}
+% \end{key}
+% \begin{key}{Gm}{compat2}
+% The option sets the old default options for compatibility
+% with version 2. |compat2=false| does nothing.
+% \begin{macrocode}
+\define@key{Gm}{compat2}[true]{%
+ \Gm@doifelse{compat2}{#1}{\Gm@compatiitrue
+ \setkeys{Gm}{scale={0.8,0.9},centering,includeheadfoot}}{}}%
+% \end{macrocode}
+% \end{key}
+% Option |twosideshift| has been obsoleted. But for compatibility
+% with version 2, one can use |twosideshift| when |compat2| is set
+% to |true|.
+% \begin{macrocode}
+\define@key{Gm}{twosideshift}{%
+ \ifGm@compatii\@twosidetrue\@mparswitchtrue\Gm@defbylen{twosideshift}{#1}%
+ \else\Gm@warning{`twosideshift' is obsolete}%
+ \fi}%
+% \end{macrocode}
+%
+% \begin{macro}{\Gm@setdefaultpaper}
+% The macro stores paper dimensions.
+% This macro should be called after |\ProcessOptionsKV[c]{Gm}|.
+% \begin{macrocode}
+\def\Gm@setdefaultpaper{%
+ \ifx\Gm@paper\@undefined
+ \Gm@setpaper(\strip@pt\paperwidth,\strip@pt\paperheight){pt}%
+ \Gm@sworientfalse
+ \fi}%
+\@onlypreamble\Gm@setdefaultpaper
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Gm@checkpaper}
+% The macro checks if paperwidth/height is larger than 0pt,
+% which is used in \cs{Gm@process}.
+% \begin{macrocode}
+\def\Gm@checkpaper{%
+ \ifdim\paperwidth>\p@\else
+ \PackageError{geometry}{%
+ You must set \string\paperwidth\space properly}{%
+ Set your paper type (e.g., `a4paper' for A4) as a class option^^J%
+ or as a geometry package option.}%
+ \fi
+ \ifdim\paperheight>\p@\else
+ \PackageError{geometry}{%
+ You must set \string\paperheight\space properly}{%
+ Set your paper type (e.g., `a4paper' for A4) as a class option^^J%
+ or as a geometry package option.}%
+ \fi}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Gm@checkmp}
+% The macro checks if marginpars fall off the page.
+% \begin{macrocode}
+\def\Gm@checkmp{%
+ \ifGm@includemp\else
+ \@tempcnta\z@\@tempcntb\@ne
+ \if@twocolumn
+ \@tempcnta\@ne
+ \else
+ \if@reversemargin
+ \@tempcnta\@ne\@tempcntb\z@
+ \fi
+ \fi
+ \@tempdima\marginparwidth
+ \advance\@tempdima\marginparsep
+ \ifnum\@tempcnta=\@ne
+ \@tempdimc\@tempdima
+ \setlength\@tempdimb{\Gm@lmargin}%
+ \advance\@tempdimc-\@tempdimb
+ \ifdim\@tempdimc>\z@
+ \Gm@warning{The marginal notes would fall off the page.^^J
+ \@spaces Add \the\@tempdimc\space and more to the left margin}%
+ \fi
+ \fi
+ \ifnum\@tempcntb=\@ne
+ \@tempdimc\@tempdima
+ \setlength\@tempdimb{\Gm@rmargin}%
+ \advance\@tempdimc-\@tempdimb
+ \ifdim\@tempdimc>\z@
+ \Gm@warning{The marginal notes would fall off the page.^^J
+ \@spaces Add \the\@tempdimc\space and more to the right margin}%
+ \fi
+ \fi
+ \fi}%
+\@onlypreamble\Gm@checkmp
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Gm@checkdrivers}
+% The macro checks the typeset environment and changes the driver option
+% if necessary.
+% \begin{macrocode}
+\def\Gm@checkdrivers{%
+ \ifx\pdfpagewidth\@undefined\else
+ \ifnum\pdfoutput=\@ne
+ \Gm@setdriver{pdftex}%
+ \fi
+ \fi
+ \ifx\VTeXversion\@undefined\else
+ \ifnum\OpMode=\@ne
+ \Gm@setdriver{vtex}%
+ \else
+ \ifnum\OpMode=\tw@
+ \Gm@setdriver{vtex}%
+ \fi
+ \fi
+ \fi
+ \ifx\Gm@driver\Gm@dvips
+ \Gm@specialtrue
+ \else
+ \ifx\Gm@driver\Gm@dvipdfm
+ \Gm@specialtrue
+ \fi
+ \fi}%
+\@onlypreamble\Gm@checkdrivers
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Gm@mpfix}
+% The macro sets marginpar correction when |includemp| is set,
+% which is used in \cs{Gm@process}.
+% Local variables \cs{Gm@wd@mp}, \cs{Gm@odd@mp} and \cs{Gm@even@mp}
+% are set here. Note that \cs{Gm@even@mp} should be used only for twoside
+% layout.
+% \begin{macrocode}
+\def\Gm@mpfix{%
+ \@tempdimb\marginparwidth
+ \advance\@tempdimb\marginparsep
+ \Gm@wd@mp\@tempdimb
+ \Gm@odd@mp\z@
+ \Gm@even@mp\z@
+ \if@twocolumn
+ \Gm@wd@mp2\@tempdimb
+ \Gm@odd@mp\@tempdimb
+ \Gm@even@mp\@tempdimb
+ \else
+ \if@reversemargin
+ \Gm@odd@mp\@tempdimb
+ \if@mparswitch\else
+ \Gm@even@mp\@tempdimb
+ \fi
+ \else
+ \if@mparswitch
+ \Gm@even@mp\@tempdimb
+ \fi
+ \fi
+ \fi}%
+\@onlypreamble\Gm@mpfix
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Gm@process}
+% The main macro processing specified layout dimensions is defined.
+% \begin{macrocode}
+\def\Gm@process{%
+% \end{macrocode}
+% If |pass| is set, the original dimensions and switches are restored
+% and process is ended here.
+% \begin{macrocode}
+ \ifGm@pass
+ \Gm@dorg
+ \else
+% \end{macrocode}
+% The stored native dimension settings are processed here.
+% \begin{macrocode}
+ \Gm@processdimlist
+% \end{macrocode}
+% The margin ratios are set to the default if not specified.
+% \begin{macrocode}
+ \ifx\Gm@hmarginratio\@undefined
+ \if@twoside
+ \edef\Gm@hmarginratio{\Gm@Dhratiotwo}%
+ \else
+ \edef\Gm@hmarginratio{\Gm@Dhratio}%
+ \fi
+ \fi
+ \ifx\Gm@vmarginratio\@undefined
+ \edef\Gm@vmarginratio{\Gm@Dvratio}%
+ \fi
+% \end{macrocode}
+% The paper size is checked here.
+% \begin{macrocode}
+ \Gm@checkpaper
+% \end{macrocode}
+% The paper dimensions can be swapped when paper orientation
+% is changed over by |landscape| and |portrait| options.
+% \begin{macrocode}
+ \ifGm@sworient
+ \setlength\@tempdima{\paperwidth}%
+ \setlength\paperwidth{\paperheight}%
+ \setlength\paperheight{\@tempdima}%
+ \Gm@setpaper(\strip@pt\paperwidth,\strip@pt\paperheight){pt}%
+ \Gm@sworientfalse
+ \fi
+% \end{macrocode}
+% The bindingoffset value is removed from the paper width,
+% which will be set back after auto-completion calculation.
+% \begin{macrocode}
+ \addtolength\paperwidth{-\Gm@bindingoffset}%
+% \end{macrocode}
+% The local variables are set here for marginpar correction
+% \cs{Gm@wd@mp}, \cs{Gm@odd@mp} and \cs{Gm@even@mp}
+% when |includemp| is set.
+% \begin{macrocode}
+ \ifGm@includemp
+ \Gm@mpfix
+ \fi
+% \end{macrocode}
+% If the horizontal dimension of \gpart{body} is specified by user,
+% \cs{Gm@width} is set properly here.
+% \begin{macrocode}
+ \ifGm@hbody
+ \ifx\Gm@width\@undefined
+ \ifx\Gm@hscale\@undefined
+ \edef\Gm@width{\Gm@Dhscale\paperwidth}%
+ \else
+ \edef\Gm@width{\Gm@hscale\paperwidth}%
+ \fi
+ \fi
+ \ifx\Gm@textwidth\@undefined\else
+ \setlength\@tempdima{\Gm@textwidth}%
+ \ifGm@includemp
+ \advance\@tempdima\Gm@wd@mp
+ \fi
+ \edef\Gm@width{\the\@tempdima}%
+ \fi
+ \fi
+% \end{macrocode}
+% If the vertical dimension of \gpart{body} is specified by user,
+% \cs{Gm@height} is set properly here.
+% \begin{macrocode}
+ \ifGm@vbody
+ \ifx\Gm@height\@undefined
+ \ifx\Gm@vscale\@undefined
+ \edef\Gm@height{\Gm@Dvscale\paperheight}%
+ \else
+ \edef\Gm@height{\Gm@vscale\paperheight}%
+ \fi
+ \fi
+ \ifx\Gm@lines\@undefined\else
+ \setlength\@tempdima{\baselineskip}%
+ \multiply\@tempdima\Gm@lines
+ \addtolength\@tempdima{\topskip}%
+ \addtolength\@tempdima{-\baselineskip}%
+ \edef\Gm@textheight{\the\@tempdima}%
+ \fi
+ \ifx\Gm@textheight\@undefined\else
+ \setlength\@tempdima{\Gm@textheight}%
+ \ifGm@includehead
+ \addtolength\@tempdima{\headheight}%
+ \addtolength\@tempdima{\headsep}%
+ \fi
+ \ifGm@includefoot
+ \addtolength\@tempdima{\footskip}%
+ \fi
+ \edef\Gm@height{\the\@tempdima}%
+ \fi
+ \fi
+% \end{macrocode}
+% The auto-completion calculation is executed for each direction.
+% \begin{macrocode}
+ \Gm@detall{h}{width}{lmargin}{rmargin}%
+ \Gm@detall{v}{height}{tmargin}{bmargin}%
+% \end{macrocode}
+% The real dimensions are set properly according to the result
+% of the auto-completion calculation.
+% \begin{macrocode}
+ \setlength\textwidth{\Gm@width}%
+ \setlength\textheight{\Gm@height}%
+ \setlength\topmargin{\Gm@tmargin}%
+ \setlength\oddsidemargin{\Gm@lmargin}%
+ \addtolength\oddsidemargin{-1\Gm@truedimen in}%
+% \end{macrocode}
+% If |includemp| is set to |true|, \cs{textwidth} and \cs{oddsidemargin}
+% are adjusted.
+% \begin{macrocode}
+ \ifGm@includemp
+ \advance\textwidth-\Gm@wd@mp
+ \advance\oddsidemargin\Gm@odd@mp
+ \fi
+% \end{macrocode}
+% Determining \cs{evensidemargin}.
+% In the twoside page layout, the right margin value
+% \cs{Gm@rmargin} is used.
+% If the marginal note width is included,
+% \cs{evensidemargin} should be corrected by \cs{Gm@even@mp}.
+% \begin{macrocode}
+ \if@mparswitch
+ \setlength\evensidemargin{\Gm@rmargin}%
+ \addtolength\evensidemargin{-1\Gm@truedimen in}%
+ \ifGm@includemp
+ \advance\evensidemargin\Gm@even@mp
+ \fi
+ \ifGm@compatii
+ \ifx\Gm@twosideshift\@undefined
+ \def\Gm@twosideshift{20\Gm@truedimen pt}%
+ \fi
+ \addtolength\oddsidemargin{\Gm@twosideshift}%
+ \addtolength\evensidemargin{-\Gm@twosideshift}%
+ \fi
+ \else
+ \evensidemargin\oddsidemargin
+ \fi
+% \end{macrocode}
+% The bindingoffset correction for \cs{oddsidemargin}.
+% \begin{macrocode}
+ \advance\oddsidemargin\Gm@bindingoffset
+% \end{macrocode}
+% \cs{topmargin} is adjusted here.
+% \begin{macrocode}
+ \addtolength\topmargin{-1\Gm@truedimen in}%
+% \end{macrocode}
+% If the head of the page is included in \gpart{total body},
+% \cs{headheight} and \cs{headsep} are removed from \cs{textheight},
+% otherwise from \cs{topmargin}.
+% \begin{macrocode}
+ \ifGm@includehead
+ \addtolength\textheight{-\headheight}%
+ \addtolength\textheight{-\headsep}%
+ \else
+ \addtolength\topmargin{-\headheight}%
+ \addtolength\topmargin{-\headsep}%
+ \fi
+% \end{macrocode}
+% If the foot of the page is included in \gpart{total body},
+% \cs{footskip} is removed from \cs{textheight}.
+% \begin{macrocode}
+ \ifGm@includefoot
+ \addtolength\textheight{-\footskip}%
+ \fi
+% \end{macrocode}
+% If |heightrounded| is set, \cs{textheight} is rounded.
+% \begin{macrocode}
+ \ifGm@heightrounded
+ \setlength\@tempdima{\textheight}%
+ \addtolength\@tempdima{-\topskip}%
+ \@tempcnta\@tempdima
+ \@tempcntb\baselineskip
+ \divide\@tempcnta\@tempcntb
+ \setlength\@tempdimb{\baselineskip}%
+ \multiply\@tempdimb\@tempcnta
+ \advance\@tempdima-\@tempdimb
+ \multiply\@tempdima\tw@
+ \ifdim\@tempdima>\baselineskip
+ \addtolength\@tempdimb{\baselineskip}%
+ \fi
+ \addtolength\@tempdimb{\topskip}%
+ \textheight\@tempdimb
+ \fi
+% \end{macrocode}
+% The paper width is set back by adding \cs{Gm@bindingoffset}.
+% \begin{macrocode}
+ \addtolength\paperwidth{\Gm@bindingoffset}%
+ \fi}%
+\@onlypreamble\Gm@process
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Gm@showparam}
+% The macro for typeout of geometry status and native dimensions for
+% page layout.
+% \begin{macrocode}
+\def\Gm@showparams{%
+ -------------------- 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: \@ifundefined{Gm@lines}{--}{\Gm@lines}^^J%
+ \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%
+ -----------------------}%
+\@onlypreamble\Gm@showparams
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ProcessOptionsKV}
+% This macro can process class and package options using `key=value'
+% scheme. Only class options are processed with an optional argument `|c|',
+% package options with `|p|' , and both of them by default.
+% \begin{macrocode}
+\def\ProcessOptionsKV{\@ifnextchar[%]
+ {\@ProcessOptionsKV}{\@ProcessOptionsKV[]}}%
+\def\@ProcessOptionsKV[#1]#2{%
+ \let\@tempa\@empty
+ \@tempcnta\z@
+ \if#1p\@tempcnta\@ne\else\if#1c\@tempcnta\tw@\fi\fi
+ \ifodd\@tempcnta
+ \edef\@tempa{\@ptionlist{\@currname.\@currext}}%
+ \else
+ \@for\CurrentOption:=\@classoptionslist\do{%
+ \@ifundefined{KV@#2@\CurrentOption}%
+ {}{\edef\@tempa{\@tempa,\CurrentOption,}}}%
+ \ifnum\@tempcnta=\z@
+ \edef\@tempa{\@tempa,\@ptionlist{\@currname.\@currext}}%
+ \fi
+ \fi
+ \edef\@tempa{\noexpand\setkeys{#2}{\@tempa}}%
+ \@tempa
+ \AtEndOfPackage{\let\@unprocessedoptions\relax}}%
+\@onlypreamble\ProcessOptionsKV
+\@onlypreamble\@ProcessOptionsKV
+% \end{macrocode}
+% \end{macro}
+%
+% Geometry parameters are initialized here.
+% \cs{Gm@init} can be called by |reset| or |pass| options.
+% \begin{macrocode}
+\Gm@init
+% \end{macrocode}
+% The optional arguments to \cs{documentclass} are processed here.
+% \begin{macrocode}
+\ProcessOptionsKV[c]{Gm}%
+% \end{macrocode}
+% Paper dimensions given by class default are stored.
+% \begin{macrocode}
+\Gm@setdefaultpaper
+% \end{macrocode}
+% \begin{macro}{\Gm@setkey}
+% \cs{ExecuteOptions} is replaced with \cs{Gm@setkey} to make it
+% possible to deal with '\meta{key}=\meta{value}' as its argument.
+% \begin{macrocode}
+\def\Gm@setkeys{\setkeys{Gm}}%
+\@onlypreamble\Gm@setkeys
+\let\Gm@origExecuteOptions\ExecuteOptions
+\let\ExecuteOptions\Gm@setkeys
+% \end{macrocode}
+% \end{macro}
+% A local configuration file may define more options.
+% To set A4 paper as default, \texttt{geometry.cfg} needs to contain
+% |\ExecuteOptions{a4paper}|.
+% \begin{macrocode}
+\InputIfFileExists{geometry.cfg}{}{}%
+% \end{macrocode}
+% The original definition for \cs{ExecuteOptions} macro is restored.
+% \begin{macrocode}
+\let\ExecuteOptions\Gm@origExecuteOptions
+% \end{macrocode}
+% The optional arguments to \cs{usepackage} are processed here.
+% \begin{macrocode}
+\ProcessOptionsKV[p]{Gm}%
+% \end{macrocode}
+% Actual settings and calculation for layout dimensions are processed.
+% \begin{macrocode}
+\Gm@process
+% \end{macrocode}
+%
+% |verbose|, |showframe| and driver options are processed
+% at \cs{begin}|{document}|.
+% \begin{macrocode}
+\AtBeginDocument{%
+% \end{macrocode}
+% Paper size is temporally adjusted according to \cs{mag} for
+% printing devices.
+% \begin{macrocode}
+ \edef\Gm@orgw{\the\paperwidth}%
+ \edef\Gm@orgh{\the\paperheight}%
+% \end{macrocode}
+% If |pass| is set to |true|, no adjustment for page dimensions is done.
+% \begin{macrocode}
+ \ifGm@pass\else
+ \ifnum\mag=\@m\else
+ \Gm@magtooffset
+ \divide\paperwidth\@m
+ \multiply\paperwidth\the\mag
+ \divide\paperheight\@m
+ \multiply\paperheight\the\mag
+ \fi
+ \fi
+% \end{macrocode}
+% Checking the driver options.
+% \begin{macrocode}
+ \Gm@checkdrivers
+% \end{macrocode}
+% If |pdftex| is set to |true|, pdf-commands are set properly.
+% \begin{macrocode}
+ \ifx\Gm@driver\Gm@pdftex
+ \ifx\pdfpagewidth\@undefined
+ \Gm@warning{`pdftex' option is invalid in this environment}%
+ \else
+ \setlength\pdfpagewidth{\Gm@orgw}%
+ \setlength\pdfpageheight{\Gm@orgh}%
+ \ifnum\mag=\@m\else\ifx\Gm@truedimen\Gm@true
+ \setlength\paperwidth{\Gm@orgw}%
+ \setlength\paperheight{\Gm@orgh}%
+ \fi\fi
+ \fi
+ \fi
+% \end{macrocode}
+% With \textsl{V\TeX} environment, \textsl{V\TeX} variables are set here.
+% \begin{macrocode}
+ \ifx\Gm@driver\Gm@vtex
+ \ifx\VTeXversion\@undefined
+ \Gm@warning{`vtex' option is invalid in this environment}%
+ \else
+ \mediawidth=\paperwidth
+ \mediaheight=\paperheight
+ \fi
+ \fi
+% \end{macrocode}
+% If |dvips| or |dvipdfm| is set to |true|, paper size is embedded in dvi
+% file with \cs{special}. For dvips, a landscape correction is added
+% because a landscape document converted by dvips is upside-down in
+% PostScript viewers.
+% \begin{macrocode}
+ \ifGm@special
+ \AtBeginDvi{\special{papersize=\the\paperwidth,\the\paperheight}}%
+ \ifx\Gm@driver\Gm@dvips\ifGm@landscape
+ \AtBeginDvi{\special{! /landplus90 true store}}%
+ \fi\fi
+ \fi
+% \end{macrocode}
+% If |showframe=true|, page frames and lines are showed
+% on the first page.
+% \begin{macrocode}
+ \ifGm@showframe
+ \AtBeginDvi{%
+ \moveright\@themargin%
+ \vbox to\z@{\baselineskip\z@skip\lineskip\z@skip\lineskiplimit\z@%
+ \vskip\topmargin\vbox to\z@{\vss\hrule width\textwidth}%
+ \vskip\headheight\vbox to\z@{\vss\hrule width\textwidth}%
+ \vskip\headsep\vbox to\z@{\vss\hrule width\textwidth}%
+ \hbox to\textwidth{\llap{\vrule height\textheight}\hfil%
+ \vrule height\textheight}%
+ \vbox to\z@{\vss\hrule width\textwidth}%
+ \vskip\footskip\vbox to\z@{\vss\hrule width\textwidth}%
+ \vss}}%
+ \AtBeginDvi{%
+ \vbox to\z@{\baselineskip\z@skip\lineskip\z@skip\lineskiplimit\z@%
+ \vskip-1\Gm@truedimen in\rlap{\hskip-1\Gm@truedimen in%
+ \vbox to\z@{\vbox to\z@{\vss\hrule width\paperwidth}%
+ \hbox to \paperwidth{\llap{\vrule height\paperheight}\hfil%
+ \vrule height\paperheight}%
+ \vbox to\z@{\vss\hrule width\paperwidth}%
+ \vss}}\vss}}%
+ \fi
+% \end{macrocode}
+% If |verbose=true| and |pass=false|, the system checks
+% if marginpars fall off the page.
+% \begin{macrocode}
+ \ifGm@verbose\ifGm@pass\else\Gm@checkmp\fi\fi
+% \end{macrocode}
+% If |verbose=true| the parameter results are displayed on the terminal.
+% |verbose=false| (default) still puts them into the log file.
+% \begin{macrocode}
+ \ifGm@verbose\expandafter\typeout\else\expandafter\wlog\fi
+ {\Gm@showparams}%
+% \end{macrocode}
+% save memory.
+% \begin{macrocode}
+ \let\Gm@cnth\relax
+ \let\Gm@cntv\relax
+ \let\c@Gm@tempcnt\relax
+ \let\Gm@bindingoffset\relax
+ \let\Gm@wd@mp\relax
+ \let\Gm@odd@mp\relax
+ \let\Gm@even@mp\relax
+ \let\Gm@orgw\relax
+ \let\Gm@orgh\relax
+ \let\Gm@dimlist\relax}%
+% \end{macrocode}
+%
+% \begin{macro}{\geometry}
+% The user-interface macro \cs{geometry} is defined here.
+% This command should be used in the preamble.
+% \begin{macrocode}
+\def\geometry#1{%
+ \Gm@clean
+ \setkeys{Gm}{#1}%
+ \Gm@process}%
+\@onlypreamble\geometry
+%</package>
+% \end{macrocode}
+% \end{macro}
+%
+% In the configuration file |geometry.cfg|, one can use
+% \cs{ExecuteOptions} to set the site or user default settings.
+% \begin{macrocode}
+%<*config>
+
+%% Uncomment and edit the line below to set default options.
+%%\ExecuteOptions{a4paper,dvips}
+
+%</config>
+% \end{macrocode}
+%
+% \Finale
+%
+\endinput
diff --git a/Master/texmf-dist/source/latex/geometry/geometry.ins b/Master/texmf-dist/source/latex/geometry/geometry.ins
new file mode 100644
index 00000000000..a252c89b4c0
--- /dev/null
+++ b/Master/texmf-dist/source/latex/geometry/geometry.ins
@@ -0,0 +1,38 @@
+\def\batchfile{geometry.ins}
+\input docstrip
+
+\ifx\generate\undefined
+ \Msg{**********************************************}
+ \Msg{* This installation requires docstrip}
+ \Msg{* version 2.4 or later.}
+ \Msg{* An older version of docstrip has been input}
+ \Msg{**********************************************}
+ \errhelp{Move or rename old docstrip.tex and get a newer one.}
+ \errmessage{Old docstrip in input path}
+ \batchmode
+ \csname @@end\endcsname\end
+\fi
+
+\keepsilent
+\preamble
+\endpreamble
+\generateFile{geometry.sty}{f}{\from{geometry.dtx}{package}}
+\generateFile{geometry.cfg}{f}{\from{geometry.dtx}{config}}
+\generateFile{geometry.drv}{f}{\from{geometry.dtx}{driver}}
+\generateFile{manual.drv}{f}{\from{geometry.dtx}{manual}}
+
+\Msg{***************************************************************}
+\Msg{*}
+\Msg{* \space Copy the files listed below into a TeX searchable directory.}
+\Msg{* \@spaces geometry.sty}
+\Msg{* \@spaces geometry.cfg}
+\Msg{*}
+\Msg{* \space To get geometry documentation,}
+\Msg{* \@spaces latex geometry.drv \space or}
+\Msg{* \@spaces pdflatex manual.drv\space (for A4 PDF).}
+\Msg{* \space Repeat it three times to get cross-references right.}
+\Msg{*}
+\Msg{***************************************************************}
+
+\endinput
+
diff --git a/Master/texmf-dist/source/latex/geometry/manual.drv b/Master/texmf-dist/source/latex/geometry/manual.drv
new file mode 100644
index 00000000000..1b260e708d4
--- /dev/null
+++ b/Master/texmf-dist/source/latex/geometry/manual.drv
@@ -0,0 +1,38 @@
+%%
+%% This is file `manual.drv',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% geometry.dtx (with options: `manual')
+%%
+%% File: geometry.dtx Copyright (C) 1996-2002 Hideo Umeki
+%% (hideo.umeki@toshiba.co.jp)
+%%
+%% This package may be distributed under the terms of the LaTeX
+%% Project Public License, as described in lppl.txt in the base
+%% LaTeX distribution, either version 1.2 or (at your option)
+%% any later version.
+%%
+\ProvidesFile{manual.drv}
+ [Geometry manual driver file (A4 PDF)]
+\documentclass{ltxdoc}
+\usepackage{times}
+\def\ttdefault{cmtt}
+\usepackage[colorlinks, linkcolor=blue,
+ pdftitle={Geometry Manual}, pdfauthor={Hideo Umeki}]{hyperref}
+\usepackage[ hmargin={4cm,1.5cm},top=1.5cm, marginpar=3.5cm
+ ,a4paper,pdftex, hmargin=3cm, top=2cm
+ ]{geometry}
+\OnlyDescription
+\begin{document}
+ \GetFileInfo{geometry.sty}
+ \title{The \textsf{geometry} package}
+ \author{Hideo UMEKI\\\texttt{hideo.umeki@toshiba.co.jp}}
+ \date{\filedate~~\fileversion{}}
+ \maketitle
+ \DocInput{geometry.dtx}
+\end{document}
+\endinput
+%%
+%% End of file `manual.drv'.
diff --git a/Master/texmf-dist/source/latex/geometry/test/Makefile b/Master/texmf-dist/source/latex/geometry/test/Makefile
new file mode 100644
index 00000000000..ff46011bca7
--- /dev/null
+++ b/Master/texmf-dist/source/latex/geometry/test/Makefile
@@ -0,0 +1,26 @@
+RM=rm -f
+SHELL=sh
+VERSION=3.0
+JUNKS=*.aux *.toc *.idx *.drv *.dvi *.log *.lof *.ist *.ilg *.ind *.out
+
+all: test
+
+#
+# You need to put the new geometry.sty in
+# the current directory or a directory searched by LaTeX.
+#
+test:
+ @echo
+ @(for f in gtest*tex; do latex $$f; done)
+ @echo
+ @echo "--- Summary of Tests ---"
+ @(grep -h Test gtest*.log)
+ @echo "-------------------------"
+
+clean:
+ @$(RM) $(JUNKS) *~ \#*
+ @echo 'Test directory has been cleaned up except geometry.{sty,cfg}.'
+
+veryclean: clean
+ @$(RM) geometry.sty geometry.cfg
+ @echo Test directory has been cleaned up.
diff --git a/Master/texmf-dist/source/latex/geometry/test/gcheck.sty b/Master/texmf-dist/source/latex/geometry/test/gcheck.sty
new file mode 100644
index 00000000000..787e5e5b7c5
--- /dev/null
+++ b/Master/texmf-dist/source/latex/geometry/test/gcheck.sty
@@ -0,0 +1,49 @@
+\usepackage{calc}
+
+\newif\ifcheckpass
+\checkpasstrue
+
+\def\checkresults{%
+ \ifcheckpass
+ \typeout{---^^JTest (\jobname): success.^^J---}
+ \else
+ \typeout{---^^JTest (\jobname): FAILED.\@spaces Check \jobname.log.^^J---}
+ \fi
+}
+
+\def\dcheck#1#2{%
+ \setlength\@tempdima{#2}%
+ \setlength\@tempdimb{#2}%
+ \addtolength\@tempdimb{-#1}%
+ \@tempcnta=\z@
+ \ifdim\@tempdimb > -0.01pt
+ \ifdim\@tempdimb < 0.01pt
+ \@tempcnta=\@ne
+ \wlog{OK: #1= \the#1 (diff=\the\@tempdimb).}
+ \fi
+ \fi
+ \ifnum\@tempcnta=\z@
+ \checkpassfalse
+ \immediate\typeout{NG: #1= \the#1 (expected=\the\@tempdima).}
+ \fi}
+
+\def\ccheck#1#2{%
+ \edef\@@tempa{#2}
+ \@tempcnta=\@@tempa
+ \advance\@tempcnta-#1\relax
+ \ifnum\@tempcnta=\z@
+ \wlog{OK: #1= \the#1 (diff=\the\@tempcnta).}
+ \else
+ \checkpassfalse
+ \immediate\typeout{NG: #1= \the#1 (expected=\@@tempa).}
+ \fi}
+
+\def\nompstring{\renewcommand\mynote\relax}
+
+\newcommand\mynote{\marginpar%
+[\raggedright\rule{\marginparwidth}{.7pt}\\A left side note.]%
+{\raggedright\rule{\marginparwidth}{.7pt}\\A side note.}}%
+\def\fox{A quick brown fox jumps over the lazy dog. }
+\def\fivefoxes{\fox\fox\fox\fox\fox}
+\def\manyfoxes{\fivefoxes\mynote\fivefoxes\par\fivefoxes\fivefoxes\par}
+% \let\mynote\relax % removes marginal notes.
diff --git a/Master/texmf-dist/source/latex/geometry/test/gtest01.tex b/Master/texmf-dist/source/latex/geometry/test/gtest01.tex
new file mode 100644
index 00000000000..f10bf1f0d9b
--- /dev/null
+++ b/Master/texmf-dist/source/latex/geometry/test/gtest01.tex
@@ -0,0 +1,35 @@
+\documentclass{article}%
+
+\usepackage{gcheck}
+
+\usepackage[a5paper, landscape, twocolumn, twoside,
+ left=2cm, hmarginratio=2:1, includemp, marginparwidth=43pt,
+ bottom=1cm, foot=20pt, includefoot, textheight=300pt, heightrounded,
+ columnsep=1cm]{geometry}
+\geometry{showframe,dvips}
+
+\begin{document}
+
+\typeout{}
+\dcheck\paperwidth{597.50787pt}
+\dcheck\paperheight{423.94606pt}
+\dcheck\textwidth{404.14963pt}
+\dcheck\textheight{298.0pt}% because of 'heightrounded'
+\dcheck\oddsidemargin{38.63551pt}
+\dcheck\evensidemargin{10.18275pt}
+\dcheck\topmargin{-33.77667pt}
+\dcheck\headheight{12.0pt}
+\dcheck\headsep{25.0pt}
+\dcheck\footskip{20pt}
+\dcheck\marginparwidth{43.0pt}
+\dcheck\marginparsep{11.0pt}
+\dcheck\columnsep{28.45274pt}
+\dcheck\hoffset{0pt}
+\dcheck\voffset{0pt}
+\ccheck\mag{1000}
+\checkresults
+\typeout{}
+
+\manyfoxes\manyfoxes\manyfoxes\manyfoxes
+\manyfoxes\manyfoxes\manyfoxes\manyfoxes
+\end{document}
diff --git a/Master/texmf-dist/source/latex/geometry/test/gtest02.tex b/Master/texmf-dist/source/latex/geometry/test/gtest02.tex
new file mode 100644
index 00000000000..9c242e8de1d
--- /dev/null
+++ b/Master/texmf-dist/source/latex/geometry/test/gtest02.tex
@@ -0,0 +1,36 @@
+\documentclass[12pt,landscape,twoside]{book}
+\usepackage{gcheck}
+
+\usepackage[portrait]{geometry}
+\geometry{landscape=false, includemp, margin=1cm,
+ bindingoffset=1cm, heightrounded}
+\geometry{marginparwidth=3cm, includehead}
+\geometry{dvipdfm=false}
+\geometry{mag=1414, truedimen}
+\geometry{showframe}
+
+\begin{document}
+
+\typeout{}
+\dcheck\paperwidth{614.28824pt}
+\dcheck\paperheight{794.96506pt}
+\dcheck\textwidth{256.72127pt}
+\dcheck\textheight{476.0pt}
+\dcheck\oddsidemargin{5.79622pt}
+\dcheck\evensidemargin{69.70174pt}
+\dcheck\topmargin{-22.65652pt}
+\dcheck\headheight{12pt}
+\dcheck\headsep{19.8738pt}
+\dcheck\footskip{30pt}
+\dcheck\marginparwidth{85.35826pt}
+\dcheck\marginparsep{7pt}
+\dcheck\columnsep{10pt}
+\dcheck\hoffset{0pt}
+\dcheck\voffset{0pt}
+\ccheck\mag{1414}
+\checkresults
+\typeout{}
+
+\manyfoxes\manyfoxes\manyfoxes\manyfoxes
+\manyfoxes\manyfoxes\manyfoxes\manyfoxes
+\end{document}
diff --git a/Master/texmf-dist/source/latex/geometry/test/gtest03.tex b/Master/texmf-dist/source/latex/geometry/test/gtest03.tex
new file mode 100644
index 00000000000..4cea6af6a79
--- /dev/null
+++ b/Master/texmf-dist/source/latex/geometry/test/gtest03.tex
@@ -0,0 +1,32 @@
+\documentclass{report}
+\usepackage{gcheck}
+
+\usepackage[]{geometry}
+\geometry{margin=10pt}
+\geometry{showframe,dvips}
+
+\begin{document}
+
+\typeout{}
+\dcheck\paperwidth{614.28824pt}
+\dcheck\paperheight{794.96506pt}
+\dcheck\textwidth{594.295pt}
+\dcheck\textheight{774.96999pt}
+\dcheck\oddsidemargin{-62.26999pt}
+\dcheck\evensidemargin{-62.26999pt}
+\dcheck\topmargin{-99.26999pt}
+\dcheck\headheight{12pt}
+\dcheck\headsep{25pt}
+\dcheck\footskip{30pt}
+\dcheck\marginparwidth{65pt}
+\dcheck\marginparsep{11pt}
+\dcheck\columnsep{10pt}
+\dcheck\hoffset{0pt}
+\dcheck\voffset{0pt}
+\ccheck\mag{1000}
+\checkresults
+\typeout{}
+
+\manyfoxes\manyfoxes\manyfoxes\manyfoxes
+\manyfoxes\manyfoxes\manyfoxes\manyfoxes
+\end{document}
diff --git a/Master/texmf-dist/source/latex/geometry/test/gtest04.tex b/Master/texmf-dist/source/latex/geometry/test/gtest04.tex
new file mode 100644
index 00000000000..6e7b35bd864
--- /dev/null
+++ b/Master/texmf-dist/source/latex/geometry/test/gtest04.tex
@@ -0,0 +1,31 @@
+\documentclass{report}
+\usepackage{gcheck}
+
+\usepackage[dvips,showframe]{geometry}
+\geometry{screen,margin={50pt,30pt},foot=20pt}
+
+\begin{document}
+
+\typeout{}
+\dcheck\paperwidth{640.187pt}
+\dcheck\paperheight{512.1496pt}
+\dcheck\textwidth{540.187pt}
+\dcheck\textheight{452.1496pt}
+\dcheck\oddsidemargin{-22.26999pt}
+\dcheck\evensidemargin{-22.26999pt}
+\dcheck\topmargin{-79.26999pt}
+\dcheck\headheight{12pt}
+\dcheck\headsep{25pt}
+\dcheck\footskip{20pt}
+\dcheck\marginparwidth{65pt}
+\dcheck\marginparsep{11pt}
+\dcheck\columnsep{10pt}
+\dcheck\hoffset{0pt}
+\dcheck\voffset{0pt}
+\ccheck\mag{1000}
+\checkresults
+\typeout{}
+
+\manyfoxes\manyfoxes\manyfoxes\manyfoxes
+\manyfoxes\manyfoxes\manyfoxes\manyfoxes
+\end{document}
diff --git a/Master/texmf-dist/source/latex/geometry/test/gtest05.tex b/Master/texmf-dist/source/latex/geometry/test/gtest05.tex
new file mode 100644
index 00000000000..192a6b8f760
--- /dev/null
+++ b/Master/texmf-dist/source/latex/geometry/test/gtest05.tex
@@ -0,0 +1,32 @@
+\documentclass[twocolumn,twoside]{report}
+\usepackage{gcheck}
+
+\usepackage[reset]{geometry}
+\geometry{width=600pt,left=2cm,right=1cm}
+\geometry{dvips,showframe, columnsep=20pt}
+
+\begin{document}
+
+\typeout{}
+\dcheck\paperwidth{614.295pt}
+\dcheck\paperheight{794.96999pt}
+\dcheck\textwidth{528.93675pt}
+\dcheck\textheight{556.47656pt}
+\dcheck\oddsidemargin{-15.36449pt}
+\dcheck\evensidemargin{-43.81725pt}
+\dcheck\topmargin{-13.87262pt}
+\dcheck\headheight{12pt}
+\dcheck\headsep{25pt}
+\dcheck\footskip{30pt}
+\dcheck\marginparwidth{48pt}
+\dcheck\marginparsep{10pt}
+\dcheck\columnsep{20pt}
+\dcheck\hoffset{0pt}
+\dcheck\voffset{0pt}
+\ccheck\mag{1000}
+\checkresults
+\typeout{}
+
+\manyfoxes\manyfoxes\manyfoxes\manyfoxes
+\manyfoxes\manyfoxes\manyfoxes\manyfoxes
+\end{document}
diff --git a/Master/texmf-dist/source/latex/geometry/test/gtest06.tex b/Master/texmf-dist/source/latex/geometry/test/gtest06.tex
new file mode 100644
index 00000000000..7e928915528
--- /dev/null
+++ b/Master/texmf-dist/source/latex/geometry/test/gtest06.tex
@@ -0,0 +1,35 @@
+\documentclass[a4paper,twoside]{book}
+\usepackage{gcheck}
+
+\usepackage[margin=1cm,includehead]{geometry}
+\geometry{reset, a3paper, landscape}
+\geometry{a6paper, hmargin={1cm,0.5cm}, heightrounded}
+\geometry{portrait, a5paper, centering }
+% `centering' (marginratio=1:1) is ineffective `hmargin'.
+\geometry{dvips, showframe}
+
+\begin{document}
+
+\typeout{}
+\dcheck\paperwidth{423.94606pt}
+\dcheck\paperheight{597.50787pt}
+\dcheck\textwidth{381.26695pt}
+\dcheck\textheight{418.0pt}
+\dcheck\oddsidemargin{-43.81725pt}
+\dcheck\evensidemargin{-58.04362pt}
+\dcheck\topmargin{-12.71039pt}
+\dcheck\headheight{12pt}
+\dcheck\headsep{18.06749pt}
+\dcheck\footskip{25.29494pt}
+\dcheck\marginparwidth{115pt}
+\dcheck\marginparsep{7.0pt}
+\dcheck\columnsep{10pt}
+\dcheck\hoffset{0pt}
+\dcheck\voffset{0pt}
+\ccheck\mag{1000}
+\checkresults
+\typeout{}
+
+\manyfoxes\manyfoxes\manyfoxes\manyfoxes
+\manyfoxes\manyfoxes\manyfoxes\manyfoxes
+\end{document}
diff --git a/Master/texmf-dist/source/latex/geometry/test/gtest07.tex b/Master/texmf-dist/source/latex/geometry/test/gtest07.tex
new file mode 100644
index 00000000000..7b9be3ad845
--- /dev/null
+++ b/Master/texmf-dist/source/latex/geometry/test/gtest07.tex
@@ -0,0 +1,34 @@
+\documentclass[]{article}
+\usepackage{gcheck}
+
+\usepackage[a4paper,portrait,landscape,portrait,a4paper]{geometry}
+\geometry{landscape,landscape,portrait,a4paper}
+\geometry{top=2cm,twoside,twoside=false}
+\geometry{twoside}
+\geometry{dvips,showframe}
+
+\begin{document}
+
+\typeout{}
+\dcheck\paperwidth{597.50787pt}
+\dcheck\paperheight{845.04684pt}
+\dcheck\textwidth{418.25368pt}
+\dcheck\textheight{702.7831pt}
+\dcheck\oddsidemargin{-0.56833pt}
+\dcheck\evensidemargin{35.28255pt}
+\dcheck\topmargin{-52.36449pt}
+\dcheck\headheight{12pt}
+\dcheck\headsep{25.0pt}
+\dcheck\footskip{30pt}
+\dcheck\marginparwidth{65pt}
+\dcheck\marginparsep{11pt}
+\dcheck\columnsep{10pt}
+\dcheck\hoffset{0pt}
+\dcheck\voffset{0pt}
+\ccheck\mag{1000}
+\checkresults
+\typeout{}
+
+\manyfoxes\manyfoxes\manyfoxes\manyfoxes
+\manyfoxes\manyfoxes\manyfoxes\manyfoxes
+\end{document}
diff --git a/Master/texmf-dist/source/latex/geometry/test/gtest08.tex b/Master/texmf-dist/source/latex/geometry/test/gtest08.tex
new file mode 100644
index 00000000000..014f9beeaee
--- /dev/null
+++ b/Master/texmf-dist/source/latex/geometry/test/gtest08.tex
@@ -0,0 +1,32 @@
+\documentclass[]{article}
+\usepackage{gcheck}
+
+\usepackage[compat2,twosideshift=10pt, marginpar=50pt,
+ dvips, showframe]{geometry}
+\geometry{twosideshift=8pt}
+
+\begin{document}
+
+\typeout{}
+\dcheck\paperwidth{614.295pt}
+\dcheck\paperheight{794.96999pt}
+\dcheck\textwidth{430.43787pt}
+\dcheck\textheight{648.46812pt}
+\dcheck\oddsidemargin{-2.84143pt}
+\dcheck\evensidemargin{42.15858pt}
+\dcheck\topmargin{-32.51906pt}
+\dcheck\headheight{12pt}
+\dcheck\headsep{25.0pt}
+\dcheck\footskip{30pt}
+\dcheck\marginparwidth{50pt}
+\dcheck\marginparsep{11pt}
+\dcheck\columnsep{10pt}
+\dcheck\hoffset{0pt}
+\dcheck\voffset{0pt}
+\ccheck\mag{1000}
+\checkresults
+\typeout{}
+
+\manyfoxes\manyfoxes\manyfoxes\manyfoxes
+\manyfoxes\manyfoxes\manyfoxes\manyfoxes
+\end{document}
diff --git a/Master/texmf-dist/source/latex/geometry/test/gtest09.tex b/Master/texmf-dist/source/latex/geometry/test/gtest09.tex
new file mode 100644
index 00000000000..c0043ad0358
--- /dev/null
+++ b/Master/texmf-dist/source/latex/geometry/test/gtest09.tex
@@ -0,0 +1,36 @@
+\documentclass[twoside]{article}%
+
+\setlength{\headheight}{12pt}
+\setlength{\headsep}{10pt}
+
+\usepackage{gcheck}
+\usepackage[left=1in,top=1in, width=5in, asymmetric]{geometry}
+\geometry{bindingoffset=20pt}
+\geometry{showframe,dvips}
+
+\begin{document}
+
+\typeout{}
+\dcheck\paperwidth{8.5in}
+\dcheck\paperheight{11in}
+\dcheck\textwidth{361.34999pt}
+\dcheck\textheight{614.29501pt}
+\dcheck\oddsidemargin{20pt}% because of 'bindingoffset=20pt'
+\dcheck\evensidemargin{0pt}
+\dcheck\topmargin{-10pt-12pt}
+\dcheck\headheight{12.0pt}
+\dcheck\headsep{10pt}
+\dcheck\footskip{30pt}
+\dcheck\marginparwidth{121.0pt}
+\dcheck\marginparsep{11.0pt}
+\dcheck\columnsep{10pt}
+\dcheck\hoffset{0pt}
+\dcheck\voffset{0pt}
+\ccheck\mag{1000}
+\checkresults
+\typeout{}
+
+\manyfoxes\manyfoxes\manyfoxes\manyfoxes
+\manyfoxes\manyfoxes\manyfoxes\manyfoxes
+\manyfoxes\manyfoxes\manyfoxes\manyfoxes
+\end{document}
diff --git a/Master/texmf-dist/source/latex/geometry/test/gtest10.tex b/Master/texmf-dist/source/latex/geometry/test/gtest10.tex
new file mode 100644
index 00000000000..5f026a04d68
--- /dev/null
+++ b/Master/texmf-dist/source/latex/geometry/test/gtest10.tex
@@ -0,0 +1,31 @@
+\documentclass[]{book}%
+
+\usepackage{gcheck}
+
+\usepackage[a6paper,twoside]{geometry}
+\geometry{dvips,showframe}
+
+\begin{document}
+
+\typeout{}
+\dcheck\paperwidth{298.75394pt}
+\dcheck\paperheight{423.94606pt}
+\dcheck\textwidth{209.12683pt}
+\dcheck\textheight{296.76094pt}
+\dcheck\oddsidemargin{-36.41916pt}
+\dcheck\evensidemargin{-18.49371pt}
+\dcheck\topmargin{-51.46346pt}
+\dcheck\headheight{12.0pt}
+\dcheck\headsep{18.06749pt}
+\dcheck\footskip{25.29494pt}
+\dcheck\marginparwidth{125.0pt}
+\dcheck\marginparsep{7.0pt}
+\dcheck\columnsep{10pt}
+\dcheck\hoffset{0pt}
+\dcheck\voffset{0pt}
+\ccheck\mag{1000}
+\checkresults
+\typeout{}
+
+\manyfoxes\manyfoxes\manyfoxes
+\end{document}
diff --git a/Master/texmf-dist/source/latex/geometry/test/gtest11.tex b/Master/texmf-dist/source/latex/geometry/test/gtest11.tex
new file mode 100644
index 00000000000..7137567d396
--- /dev/null
+++ b/Master/texmf-dist/source/latex/geometry/test/gtest11.tex
@@ -0,0 +1,34 @@
+\documentclass[]{article}%
+
+\usepackage{gcheck}
+
+\usepackage[a6paper,asymmetric, bindingoffset=18pt,
+ marginparwidth=.8in, reversemp,
+ hmarginratio=2:1, vmarginratio=4:5,
+ left=1in, top=1in]{geometry}
+\geometry{dvips,showframe}
+
+\begin{document}
+
+\typeout{}
+\dcheck\paperwidth{298.75394pt}
+\dcheck\paperheight{423.94606pt}
+\dcheck\textwidth{172.34895pt}
+\dcheck\textheight{261.3386pt}
+\dcheck\oddsidemargin{18.0pt}
+\dcheck\evensidemargin{0pt}
+\dcheck\topmargin{-37.0pt}
+\dcheck\headheight{12.0pt}
+\dcheck\headsep{25.0pt}
+\dcheck\footskip{30pt}
+\dcheck\marginparwidth{57.81621pt}
+\dcheck\marginparsep{11.0pt}
+\dcheck\columnsep{10pt}
+\dcheck\hoffset{0pt}
+\dcheck\voffset{0pt}
+\ccheck\mag{1000}
+\checkresults
+\typeout{}
+
+\manyfoxes\manyfoxes
+\end{document}
diff --git a/Master/texmf-dist/source/latex/geometry/test/gtest12.tex b/Master/texmf-dist/source/latex/geometry/test/gtest12.tex
new file mode 100644
index 00000000000..5701c37d01d
--- /dev/null
+++ b/Master/texmf-dist/source/latex/geometry/test/gtest12.tex
@@ -0,0 +1,33 @@
+\documentclass[]{article}%
+
+\usepackage{gcheck}
+
+\usepackage[a6paper,landscape,
+ margin=1in,includeall]{geometry}
+\geometry{right=2in,ignoremp}
+\geometry{dvips,showframe}
+
+\begin{document}
+
+\typeout{}
+\dcheck\paperwidth{423.94606pt}
+\dcheck\paperheight{298.75394pt}
+\dcheck\textwidth{207.13608pt}
+\dcheck\textheight{87.21396pt}
+\dcheck\oddsidemargin{0pt}
+\dcheck\evensidemargin{0pt}
+\dcheck\topmargin{0pt}
+\dcheck\headheight{12pt}
+\dcheck\headsep{25pt}
+\dcheck\footskip{30pt}
+\dcheck\marginparwidth{65pt}
+\dcheck\marginparsep{11pt}
+\dcheck\columnsep{10pt}
+\dcheck\hoffset{0pt}
+\dcheck\voffset{0pt}
+\ccheck\mag{1000}
+\checkresults
+\typeout{}
+
+\manyfoxes
+\end{document}
diff --git a/Master/texmf-dist/source/latex/geometry/test/gtest13.tex b/Master/texmf-dist/source/latex/geometry/test/gtest13.tex
new file mode 100644
index 00000000000..a57d28b47da
--- /dev/null
+++ b/Master/texmf-dist/source/latex/geometry/test/gtest13.tex
@@ -0,0 +1,33 @@
+\documentclass[]{article}%
+
+\usepackage{gcheck}
+
+\usepackage[a5paper, papersize={14cm,20cm},
+ landscape, margin=1in]{geometry}
+\geometry{portrait,landscape}
+\geometry{dvips,showframe}
+
+\begin{document}
+
+\typeout{}
+\dcheck\paperwidth{569.05511pt}
+\dcheck\paperheight{398.33858pt}
+\dcheck\textwidth{424.51514pt}
+\dcheck\textheight{253.7986pt}
+\dcheck\oddsidemargin{0pt}
+\dcheck\evensidemargin{0pt}
+\dcheck\topmargin{-37.0pt}
+\dcheck\headheight{12pt}
+\dcheck\headsep{25pt}
+\dcheck\footskip{30pt}
+\dcheck\marginparwidth{65pt}
+\dcheck\marginparsep{11pt}
+\dcheck\columnsep{10pt}
+\dcheck\hoffset{0pt}
+\dcheck\voffset{0pt}
+\ccheck\mag{1000}
+\checkresults
+\typeout{}
+
+\manyfoxes
+\end{document}
diff --git a/Master/texmf-dist/source/latex/geometry/test/gtest14.tex b/Master/texmf-dist/source/latex/geometry/test/gtest14.tex
new file mode 100644
index 00000000000..93486ff959d
--- /dev/null
+++ b/Master/texmf-dist/source/latex/geometry/test/gtest14.tex
@@ -0,0 +1,43 @@
+\documentclass[10pt,a4paper,twoside]{article}
+
+\usepackage{gcheck}
+\usepackage{calc}
+\usepackage[showframe]{geometry}
+
+\geometry{textwidth=\widthof{\texttt{M}}*80,
+ lines=40+5*2-4, centering, includeheadfoot,
+ top=\heightof{\texttt{N}}*10}
+
+\setlength{\parindent}{0pt}
+\begin{document}
+{\ttfamily
+MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM%
+MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM%
+% 80 characters
+}
+
+\bigskip
+\manyfoxes\manyfoxes\manyfoxes\manyfoxes
+\manyfoxes\manyfoxes\manyfoxes\manyfoxes
+
+\typeout{}
+\dcheck\paperwidth{597.50787pt}
+\dcheck\paperheight{845.04684pt}
+\dcheck\textwidth{419.99634pt}
+\dcheck\textheight{550.0pt}
+\dcheck\oddsidemargin{16.48578pt}
+\dcheck\evensidemargin{16.48578pt}
+\dcheck\topmargin{-11.15884pt}
+\dcheck\headheight{12pt}
+\dcheck\headsep{25pt}
+\dcheck\footskip{30pt}
+\dcheck\marginparwidth{111.0pt}
+\dcheck\marginparsep{11pt}
+\dcheck\columnsep{10pt}
+\dcheck\hoffset{0pt}
+\dcheck\voffset{0pt}
+\ccheck\mag{1000}
+\checkresults
+\typeout{}
+
+\end{document}
diff --git a/Master/texmf-dist/source/latex/geometry/test/gtest15.tex b/Master/texmf-dist/source/latex/geometry/test/gtest15.tex
new file mode 100644
index 00000000000..576f955ae41
--- /dev/null
+++ b/Master/texmf-dist/source/latex/geometry/test/gtest15.tex
@@ -0,0 +1,40 @@
+\documentclass[]{article}
+
+\usepackage{gcheck}
+\usepackage{calc}
+\usepackage{geometry}
+
+% \geometry{compat2,a4paper,mag=1200,truedimen,margin=2cm,
+% twosideshift=10pt,headsep=7pt,headheight=14.5pt}
+% The case above can be rewritten without 'compat2' as follows:
+ \geometry{a4paper,mag=1200,truedimen,margin=2cm,
+ twoside, left=2cm+10pt, right=2cm-10pt,
+ includeheadfoot, headsep=7pt,headheight=14.5pt}
+
+\geometry{dvips,showframe}
+
+\begin{document}
+\manyfoxes\manyfoxes\manyfoxes\manyfoxes
+\manyfoxes\manyfoxes\manyfoxes\manyfoxes
+
+\typeout{}
+\dcheck\paperwidth{597.49146pt}
+\dcheck\paperheight{845.03174pt}
+\dcheck\textwidth{384.11221pt}
+\dcheck\textheight{538.8947pt}
+\dcheck\oddsidemargin{6.68088pt}
+\dcheck\evensidemargin{-13.31912pt}
+\dcheck\topmargin{-3.31912pt}
+\dcheck\headheight{14.5pt}
+\dcheck\headsep{7.0pt}
+\dcheck\footskip{30pt}
+\dcheck\marginparwidth{65.0pt}
+\dcheck\marginparsep{11pt}
+\dcheck\columnsep{10pt}
+\dcheck\hoffset{0.01344pt}
+\dcheck\voffset{0.01344pt}
+\ccheck\mag{1200}
+\checkresults
+\typeout{}
+
+\end{document}
diff --git a/Master/texmf-dist/source/latex/geometry/test/gtest16.tex b/Master/texmf-dist/source/latex/geometry/test/gtest16.tex
new file mode 100644
index 00000000000..a7b6bac8120
--- /dev/null
+++ b/Master/texmf-dist/source/latex/geometry/test/gtest16.tex
@@ -0,0 +1,37 @@
+\documentclass[a4paper]{article}
+
+\usepackage{gcheck}
+\usepackage[textwidth=15cm,textheight=20cm,
+ noheadfoot,nomarginpar,
+ marginratio={1:1,1:5}
+% hmarginratio=1:1, vmarginratio=1:5
+% ratio={1:1, 1:5}
+ ]{geometry}
+\geometry{showframe,dvips}
+
+\begin{document}
+\nompstring
+\manyfoxes\manyfoxes\manyfoxes\manyfoxes
+\manyfoxes\manyfoxes\manyfoxes\manyfoxes
+
+\typeout{}
+\dcheck\paperwidth{597.50787pt}
+\dcheck\paperheight{845.04684pt}
+\dcheck\textwidth{426.79134pt}
+\dcheck\textheight{569.05511pt}
+\dcheck\oddsidemargin{13.08827pt}
+\dcheck\evensidemargin{13.08827pt}
+\dcheck\topmargin{-26.27138pt}
+\dcheck\headheight{0pt}
+\dcheck\headsep{0pt}
+\dcheck\footskip{0pt}
+\dcheck\marginparwidth{0pt}
+\dcheck\marginparsep{0pt}
+\dcheck\columnsep{10pt}
+\dcheck\hoffset{0pt}
+\dcheck\voffset{0pt}
+\ccheck\mag{1000}
+\checkresults
+\typeout{}
+
+\end{document}