summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/geometry
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-01-03 03:00:55 +0000
committerNorbert Preining <norbert@preining.info>2020-01-03 03:00:55 +0000
commit7e18665e4aef9a8a3a8e42eac34504a9914b15cf (patch)
tree40a90e8c80f0b6a9e0f8c298ef515f97504fbc3b /macros/latex/contrib/geometry
parentaf7bc18edca6890fb1addbeb6a34672275532e3b (diff)
CTAN sync 202001030300
Diffstat (limited to 'macros/latex/contrib/geometry')
-rw-r--r--macros/latex/contrib/geometry/README.md16
-rw-r--r--macros/latex/contrib/geometry/changes.txt4
-rw-r--r--macros/latex/contrib/geometry/geometry-de.dtx3865
-rw-r--r--macros/latex/contrib/geometry/geometry-de.pdfbin0 -> 465858 bytes
-rw-r--r--macros/latex/contrib/geometry/geometry-samples.tex73
-rw-r--r--macros/latex/contrib/geometry/geometry.dtx20
-rw-r--r--macros/latex/contrib/geometry/geometry.pdfbin442423 -> 440535 bytes
7 files changed, 3891 insertions, 87 deletions
diff --git a/macros/latex/contrib/geometry/README.md b/macros/latex/contrib/geometry/README.md
index ebdb25bf4d..1b88d80647 100644
--- a/macros/latex/contrib/geometry/README.md
+++ b/macros/latex/contrib/geometry/README.md
@@ -1,10 +1,10 @@
-LaTeX Package: Geometry 2010/09/12 v5.6
+LaTeX Package: Geometry 2020/01/02 v5.9
----------------------------------------
Flexible and complete interface to document dimensions.
Copyright (C) 1996-2010
by Hideo Umeki <latexgeometry@gmail.com>
-Copyright (C) 2018
+Copyright (C) 2018-202
Hideo Umeki and David Carlisle https://github.com/davidcarlisle/geometry
Abstract:
@@ -18,6 +18,10 @@ CTAN: macros/latex/contrib/geometry
Recent changes:
+[Release 5.9]
+Do not load ifxetex and ifpdf packages (use combined iftex package)
+Include German translation of the documentation.
+
[Release 5.8]
Add xdvipdfmx and dvipdfmx alias for dvipdfm option.
@@ -28,9 +32,11 @@ Add support for luatex (with new comand names introduced in luatex 0.85)
Files:
* README.md - this file
- * changes.txt - history of changes
- * geometry.dtx - including sources and documentation
- * geometry.pdf - print-ready documentation
+ * changes.txt - history of changes
+ * geometry.dtx - including sources and documentation
+ * geometry.pdf - print-ready documentation
+ * geometry-de.dtx - German translation
+ * geometry-de.pdf - German translation
Installation:
[manual installation]
diff --git a/macros/latex/contrib/geometry/changes.txt b/macros/latex/contrib/geometry/changes.txt
index c463344438..75efb2d6b2 100644
--- a/macros/latex/contrib/geometry/changes.txt
+++ b/macros/latex/contrib/geometry/changes.txt
@@ -1,3 +1,7 @@
+2020-01-02 Release 5.9
+ * Include German translation (previously distributed as geometry-de on ctan)
+ * Use iftex versions of \ifxetex, \ifpdf
+
2018-04-16 Release 5.8
* Documentation fixes.
* (x)dvipdfmx alias for dvipdfm otion.
diff --git a/macros/latex/contrib/geometry/geometry-de.dtx b/macros/latex/contrib/geometry/geometry-de.dtx
new file mode 100644
index 0000000000..56079df68e
--- /dev/null
+++ b/macros/latex/contrib/geometry/geometry-de.dtx
@@ -0,0 +1,3865 @@
+% \iffalse meta-comment
+%
+% Copyright 1996-2010 by Hideo Umeki <latexgeometry@gmail.com>
+% Copyright 2018 Hideo Umeki and David Carlisle
+%
+% LaTeX Package: Geometry
+% -----------------------
+%
+% This work may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License, either version 1.3c of this license
+% or (at your option) any later version. The latest version of this
+% license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work is "maintained" (as per the LPPL maintenance status)
+% by David Carlisle
+%
+% This work consists of the files geometry.dtx and
+% the derived files: geometry.{sty,ins,drv}, geometry-samples.tex.
+%
+% * Distribution
+% CTAN: macros/latex/contrib/geometry/README.md
+% CTAN: macros/latex/contrib/geometry/changes.txt
+% CTAN: macros/latex/contrib/geometry/geometry.ins
+% CTAN: macros/latex/contrib/geometry/geometry.dtx
+% CTAN: macros/latex/contrib/geometry/geometry.pdf
+% CTAN: macros/latex/contrib/geometry/geometry-de.dtx
+% CTAN: macros/latex/contrib/geometry/geometry-de.pdf
+%
+% * See README for installation.
+%
+%<*ignore>
+\begingroup
+ \def\x{LaTeX2e}
+\expandafter\endgroup
+\ifcase 0\ifx\install y1\fi\expandafter
+ \ifx\csname processbatchFile\endcsname\relax\else1\fi
+ \ifx\fmtname\x\else 1\fi\relax
+\else\csname fi\endcsname
+%</ignore>
+%<package|driver>\NeedsTeXFormat{LaTeX2e}
+%<package>\ProvidesPackage{geometry}
+%<package> [2020/01/02 v5.9 Page Geometry]
+%<*install>
+\input docstrip.tex
+\Msg{************************************************************************}
+\Msg{* Installation}
+\Msg{* Package: geometry 2020/01/02 v5.9 Page Geometry}
+\Msg{************************************************************************}
+
+\keepsilent
+\askforoverwritefalse
+\preamble
+
+Copyright (C) 1996-2010
+by Hideo Umeki <latexgeometry@gmail.com>
+Copyright (C) 2018-2020
+by Hideo Umeki and David Carlisle https://github.com/davidcarlisle/geometry
+
+This work may be distributed and/or modified under the conditions of
+the LaTeX Project Public License, either version 1.3c of this license
+or (at your option) any later version. The latest version of this
+license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3c or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+This work is "maintained" (as per the LPPL maintenance status)
+by David Carlisle.
+
+This work consists of the files geometry.dtx and
+the derived files: geometry.{sty,ins,drv}, geometry-samples.tex.
+
+\endpreamble
+
+\generate{%
+ \file{geometry-de.ins}{\from{geometry-de.dtx}{install}}%
+ \file{geometry-de.drv}{\from{geometry-de.dtx}{driver}}%
+ \usedir{tex/latex/geometry}%
+% \file{geometry-de.sty}{\from{geometry-de.dtx}{package}}%
+% \file{geometry-de.cfg}{\from{geometry-de.dtx}{config}}%
+ \file{geometry-samples-de.tex}{\from{geometry-de.dtx}{samples}}%
+}
+
+\obeyspaces
+\Msg{************************************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the following}
+\Msg{* file into a directory searched by LaTeX:}
+\Msg{*}
+\Msg{* \space\space geometry.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the file `geometry.drv'}
+\Msg{* through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*}
+\Msg{************************************************************************}
+\endbatchfile
+%</install>
+%<*ignore>
+\fi
+%</ignore>
+%<*driver>
+\ProvidesFile{geometry.drv}
+\documentclass{ltxdoc}
+\usepackage[colorlinks, linkcolor=blue]{hyperref}
+\usepackage{graphicx}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[ngerman]{babel}
+\usepackage[a4paper, hmargin=2.5cm, vmargin=1cm, includeheadfoot]{geometry}
+\usepackage{charter}
+\DeclareRobustCommand\XeTeX{%
+ X\lower.5ex\hbox{\kern-.07em\reflectbox{E}}%
+ \kern-.15em\TeX}
+\DeclareRobustCommand\XeLaTeX{%
+ X\lower.5ex\hbox{\kern-.07em\reflectbox{E}}%
+ \kern-.15em\LaTeX}
+\begin{document}
+ \DocInput{geometry-de.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+%
+% \GetFileInfo{geometry.sty}
+%
+% \title{Das \textsf{geometry} Paket}
+% \date{\filedate\ \fileversion}
+% \author{Hideo Umeki\\\url{https://github.com/davidcarlisle/geometry}\\\begin{small}Die Übersetzung wurde angefertigt von Hans-Martin Haase
+% (\texttt{hmhaase@pclinuxosusers.de})\end{small}}
+%
+% \MakeShortVerb{|}
+%
+% \def\OpenB{{\ttfamily\char`\{}}
+% \def\Comma{{\ttfamily\char`,}}
+% \def\CloseB{{\ttfamily\char`\}}}
+% \def\Gm{\textsf{geometry}}
+% \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]{\textsf{\textsl{\color[rgb]{.0,.45,.7}#1}}}%
+% \newcommand\glen[1]{\textsf{#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}}
+% \newenvironment{Spec}%
+% {\begin{list}{}{%
+% \renewcommand{\makelabel}[1]{\fbox{##1}\hfil}%
+% \setlength{\itemsep}{-.5\parsep}
+% \settowidth{\labelwidth}{\texttt{S(x,x)}}%
+% \setlength{\leftmargin}{\labelwidth}%
+% \addtolength{\leftmargin}{\labelsep}%
+% \addtolength{\leftmargin}{2em}%
+% \setlength{\rightmargin}{2em}}%
+% \raggedright}
+% {\end{list}}
+% \def\Ss(#1,#2){\textsf{S(#1,#2)}}%
+% \def\Sp(#1,#2,#3){\mbox{|(#1,#2,#3)|}}%
+% \def\onlypre{\llap{$^{\dagger\:}$}}%
+%
+% \maketitle
+%
+% \begin{abstract}
+% Dieses Paket bietet einen flexiblen und einfachen Weg die Seitenmaße zu verändern.
+% Sie können das Seitenlayout mit intuitiven Parametern verändern. Ein Beispiel,
+% wenn Sie den Abstand von jedem Rand der Seite auf 2\,cm setzen möchten,
+% können Sie einfach |\usepackage[margin=2cm]{geometry}| eingeben.
+% Das Seitenlayout kann in der Mitte des Dokuments verändert werden, mit dem Befehl
+% |\newgeometry|.
+% \end{abstract}
+%
+% \section{Vorwort zu Version 5}
+%
+% \begin{itemize}
+% \item \textbf{Das Seitenlayout in der Mitte des Dokuments ändern.}\par
+% Die neuen Befehle \cs{newgeometry\{$\cdots$\}} und
+% \cs{restoregeometry} erlauben es dem Benutzer, die Seitenmaße in der Mitte
+% des Dokuments zu verändern. \cs{newgeometry} stimmt fast mit
+% \cs{geometry} überein, ausgenommen das \cs{newgeometry} alle Optionen,
+% die in der Präambel spezifiziert sind, deaktiviert und überspringt die Optionen, die sich auf die Seitengröße beziehen:
+% |landscape|, |portrait| und die Seitengrößenoptionen (solche wie
+% |papersize|, |paper=a4paper| und andere).
+% \item \textbf{Eine neue Reihe von Optionen, um den Layoutbereich zu spezifizieren.}\par
+% Die Optionen, die für den Bereich angegeben wurden, in dem die Seitenmaße
+% berechnet werden, sind hinzugefügt wurden: \textsf{layout}, \textsf{layoutsize},
+% \textsf{layoutwidth}, \textsf{layoutheight} und weitere.
+% Diese Möglichkeiten sind hilfreich, falls das angegebene Layout auf eine andere
+% Papiergröße angewendet soll. Wenn beispielsweise |a4paper|
+% und |layout=a5paper| verwendet wird, dann benutzt das \Gm\ Paket das `A5' statt `A4' Layout, um
+% die Ränder für die Papiergröße zu berechen.
+% \item \textbf{Eine neue Treiberoption |xetex|.}\par
+% Die neue Treiberoption |xetex| wurde hinzugefügt. Die Routine für die automatische Treiberdetektion
+% ist überarbeitet worden, sodass ein Fehler mit einer nicht definierten
+% Kontrollsequenz vermieden werden konnte. Beachte, dass `geometry.cfg' in \TeX{} Live, welches
+% die Autodetektionsroutine deaktiviert und |pdftex| benutzt, nicht mehr
+% nötig ist und es keine Probleme gibt, obwohl dies dennoch existiert.
+% Um |xetex| einzustellen, ist es dringend empfohlen \XeLaTeX{} zu verwenden.
+% \item \textbf{Neue Papiergröße für JIS B-Serien und ISO C-Serien.}\par
+% Die Papiergrößenvoreinstellungen |b0j| bis |b6j| für JIS (Japanese Industrial Standards) B-Serien und
+% |c0paper| bis |c6paper| für ISO C-Serien
+% (v5.4$\sim$) wurden hinzugefügt.
+% \item \textbf{Veränderung des Standards für nicht angegebenen Rand.}\par
+% In der Vorversion wurde dann, wenn man nur einen Rand angab, z.\,B.
+% |bottom=1cm|, von \Gm\ der andere Rand mit
+% diesem Randverhältnis (1:1 standardmäßig für die vertikalen Maße) gesetzt
+% und man bekam in diesem Fall |top=1cm|.
+% Die Version 5 stellt die Textkörpergröße auf den |scale|
+% ($=0.7$) ein und bestimmt den nicht angegebenen Rand. (Siehe Kapitel~\ref{sec:rules})
+% \item \textbf{Die Optionen |showframe| und |showcrop| arbeiten auf jeder Seite.}\par
+% Mit der |showframe| Option werden die Seitenränder auf jeder Seite angezeigt.
+% Des Weiteren druckt die neue |showcrop| Option Schittmarken auf jede Ecke des
+% Layoutbereichs auf jeder Seite. Bedenken sie, dass die Marken unsichtbar sein werden,
+% solange die Layoutgröße nicht schmaler wie die Papiergröße gemacht wird.
+% Version 5.4 führt einen neuen |\shipout| Überladeprozess ein, der das
+% \textsf{atbegshi} Paket benutzt, so wird das \textsf{atbegshi} Paket
+% benötigt, wenn die showframe oder showcrop Option angegeben wird.
+% \item \textbf{Laden von geometry.cfg vor der Verarbeitung der Klassenoptionen.}\par
+% In der Vorgängerversion wurde \textsf{geometry.cfg} nach dem
+% Verarbeiten der Dokumentklassenoptionen geladen. Jetzt, da die Konfigurationsdatei vor der Abarbeitung der
+% Klassenoptionen geladen wird, können sie das Verhalten,
+% wie es in \textsf{geometry.cfg} angegeben ist, durch das Hinzufügen von
+% Optionen in der |\documentclass| oder genauso gut in |\usepackage| und |\geometry| verändern.
+% \item \textbf{Beseitigte Optionen: |compat2| und |twosideshift|.}
+% Die Version 5 ist nicht länger mit den Vorgängerversionen kompatibel.
+% |compat2| und |twisideshift| wurden zur Vereinfachung entfernt.
+% \end{itemize}
+%
+% \section{Einführung}
+%
+% Die Maße für das Seitenlayout in \LaTeX\ einzustellen ist nicht so einfach.
+% Sie müssen dafür verschiedene ursprüngliche \LaTeX -Maße anpassen, um einen Textbereich
+% dort zu platzieren, wo sie ihn angezeigt haben möchten.
+% Wenn sie einen Textbereich ihres Dokuments zentrieren wollen,
+% dann müssen sie beispielsweise die systemeigenen Maße wie folgt angeben:
+% \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}
+% Ohne das Paket \texttt{calc} würde das obere Beispiel noch
+% schwierigere Einstellungen benötigen. Das Paket \Gm\ bietet einen einfachen
+% Weg, die Parameter des Seitenlayouts zu konfigurieren. In diesem Fall müssen sie nur
+% dies einstellen:
+% \begin{quote}
+% |\usepackage[text={7in,10in},centering]{geometry}|.
+% \end{quote}
+% Neben dem Zentrierungsproblem, ist das Einstellen der Ränder von jeder Kante des Blattes aus
+% ebenso problematisch. Aber \Gm\ erledigt dies ebenso einfach.
+% Wenn sie jeden Rand auf 1.5\,in setzen wollen, dann können sie
+% \begin{quote}
+% |\usepackage[margin=1.5in]{geometry}|
+% \end{quote}
+% eingeben.
+% Weil das geometry Paket eine Autovervollständigung besitzt,
+% werden nicht angegebene Maße automatisch festgelegt.
+% Das \Gm\ Paket wird auch nützlich sein, wenn sie das Seitenlayout beispielsweise nach
+% den folgenden strikten Instruktionen einstellen müssen:
+% \begin{quote}\slshape
+% Die vollständig erlaubte Breite des Textbereiches ist $6.5$, bei einer Höhe von $8.75$
+% Inches (englische Zoll). Der obere Rand auf jeder Seite soll $1.2$ Inches von
+% der oberen Kante der Seite aus betragen. Der linke Rand sollte $0.9$ Inch von der linken Kante entfernt sein.
+% Die Fußzeile mit der Seitenzahl sollte am unteren Ende des Textbereiches sein.
+% \end{quote}
+% In diesem Fall können sie bei der Benutzung von \Gm\
+% \begin{quote}
+% |\usepackage[total={6.5in,8.75in},|\\
+% | top=1.2in, left=0.9in, includefoot]{geometry}|.
+% \end{quote}
+% eingeben.
+%
+% Die Konfiguration eines Textbereiches in einem Schriftstück mit dem Textsatzprogramm hat einige
+% Ähnlichkeiten mit dem Platzieren eines Fensters auf dem Hintergrund beim Fenstermanager des Betriebssystems.
+% Der Name `geometry' kommt von der |geometry|-Option, die genutzt wird, um die Größe und Lokalisierung eines Fensters
+% beim X-Window-System anzugeben.
+%
+% \section{Seitengeometrie}
+%
+% Abbildung~\ref{fig:layout} zeigt die Seitenlayoutsmaße , die
+% im \Gm\ Paket definiert sind.
+% Das Seitenlayout beinhaltet einen \gpart{total body} (druckbaren Bereich) und \gpart{margins} (Ränder).
+% Der \gpart{total body} besteht aus einem \gpart{body} (Textbereich) mit einem optionalen
+% \gpart{header} (Kopf), \gpart{footer} (Fuß) und Randbemerkungen (\gpart{marginpar}).
+% Es gibt vier Ränder: \gpart{left} (links), \gpart{right} (rechts), \gpart{top} (oben) und
+% \gpart{bottom} (unten). Für zweiseitige Dokumente, sollten horizontale Ränder \gpart{inner} (innen) und \gpart{outer}
+% (außen) genannt werden.
+% \begin{quote}
+% \begin{tabular}{rcl}
+% \gpart{paper}&:&\gpart{total body} und
+% \gpart{margins}\\
+% \gpart{total body}&:&\gpart{body} (Textbereich)\quad
+% (optionaler \gpart{head}, \gpart{foot} und \gpart{marginpar})\\
+% \gpart{margins}&:&\gpart{left} (\gpart{inner}),
+% \gpart{right} (\gpart{outer}), \gpart{top} und \gpart{bottom}
+% \end{tabular}
+% \end{quote}
+% Jeder Rand wird von der korrespondierenden Kante des Blattes gemessen.
+% Zum Beispiel, linker Rand (innerer Rand) meint eine horizontale Entfernung
+% zwischen der linken (inneren) Kante des Blattes und der des \emph{total body} (druckbaren Bereichs).
+% Deshalb sind der linke und obere Rand in \Gm\ anders als das natürliche Maß
+% \cs{leftmargin} und \cs{topmargin} definiert.
+% Die Größe eines Body (Textbereichs) kann durch \cs{textwidth} (Textbreite) und
+% \cs{textheight} (Texthöhe) angepasst werden.
+% Die Maße für die Seite, den druckbaren Bereich und die Ränder stehen in folgenden Beziehungen.
+% \begin{eqnarray}
+% \label{eq:paperwidth}
+% |paperwidth (Seitenbreite)| &=& |left (links)|+|width (Breite)|+|right (rechts)| \\
+% |paperheight (Seitenhöhe)| &=& |top (oben)|+|height (Höhe)|+|bottom (unten)|
+% \label{eq:paperheight}
+% \end{eqnarray}
+%
+% \begin{figure}[h]
+% \centering\small
+% {\unitlength=.65pt
+% \begin{picture}(450,250)(0,-10)
+% \put(20,0){\framebox(170,230){}}
+% \put(20,235){\makebox(170,230)[br]{\gpart{Seite}}}
+% \begingroup\thicklines
+% \put(40,30){\framebox(120,170){}}\endgroup
+% \put(40,30){\makebox(120,165)[tr]{\gpart{druckbarer Bereich}~}}
+% \put(45,30){\makebox(0,170)[l]{|Höhe|}}
+% \put(40,35){\makebox(120,0)[bc]{|Breite|}}
+% \put(50,-20){\makebox(120,0)[bc]{|Seitenbreite|}}
+% \put(10,45){\makebox(0,170)[r]{|Seitenhöhe|}}
+% \put(90,200){\makebox(0,30)[lc]{|oben|}}
+% \put(90,0){\makebox(0,30)[lc]{|unten|}}
+% \put(10,70){\makebox(0,0)[r]{|links|}}
+% \put(10,55){\makebox(0,0)[r]{(|innen|)}}
+% \put(200,70){\makebox(0,0)[l]{|rechts|}}
+% \put(200,55){\makebox(0,0)[l]{(|außen|)}}
+% \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}}
+% \begingroup\thicklines
+% \put(280,30){\framebox(120,170){}}\endgroup
+% \put(283,133){\makebox(0,12)[l]{|Texthöhe|}}
+% \put(295,130){\vector(0,-1){100}}\put(295,150){\vector(0,1){50}}
+% \multiput(280,220)(5,0){24}{\line(1,0){3}}
+% \put(280,208){\makebox(120,20)[bc]{\gpart{Kopf}}}
+% \multiput(280,207)(5,0){24}{\line(1,0){3}}
+% \put(420,225){\makebox(0,0)[l]{|Kopfhöhe|}}
+% \put(418,225){\line(-2,-1){20}}
+% \put(420,213){\makebox(0,0)[l]{|Kopftrennung|}}
+% \put(418,213){\line(-2,-1){20}}
+% \put(420,12){\makebox(0,0)[l]{|Fußbereich|}}
+% \put(418,12){\line(-2,1){20}}
+% \put(280,40){\makebox(120,140)[c]{\gpart{Textkörper}}}
+% \put(305,45){\vector(-1,0){25}}\put(375,45){\vector(1,0){25}}
+% \put(80,230){\vector(0,-1){30}}\put(80,30){\vector(0,-1){30}}
+% \put(280,48){\makebox(120,0)[c]{|Textbreite|}}
+% \put(280,15){\makebox(120,10)[c]{\gpart{Fuß}}}
+% \multiput(280,14)(5,0){24}{\line(1,0){2}}
+% \put(410,30){\dashbox{3}(30,170){}}
+% \put(415,30){\makebox(30,170)[l]{\gpart{Randnotiz}}}
+% \put(425,45){\vector(-1,0){15}}\put(425,45){\vector(1,0){15}}
+% \put(450,70){\makebox(0,0)[l]{|Randnotiztrennung|}}
+% \put(448,70){\line(-3,-1){43}}
+% \put(450,45){\makebox(0,0)[l]{|Randnotizbreite|}}
+% \end{picture}}
+% \caption[Namen der Maße für \Gm]{%
+% \begin{minipage}[t]{.8\textwidth}\raggedright\small
+% Namen von Maßen, die im \Gm\ Paket genutzt werden:
+% |width| $=$ |textwidth (Textbreite)| und |height| $=$ |textheight (Texthöhe)| sind Standard.
+% |left (links)|, |right (rechts)|, |top (oben)| und |bottom (unten)| sind Ränder.
+% Wenn die Ränder auf der Rückseite durch die |twoside (Zweiseitigkeit)| Option getauscht werden,
+% dann werden die Ränder, die mit |left| und |right| angegeben wurden, für die inneren und äußeren Ränder genutzt.
+% |inner (innen)| und |outer (außen)| sind Pseudonyme für |left| und |right|.
+% \end{minipage}}
+% \label{fig:layout}
+% \end{figure}
+%
+% \begin{figure}[h]
+% \centering\small
+% {\unitlength=.65pt
+% \begin{picture}(490,280)(0,-10)
+% \put(60,250){\makebox(120,0)[bl]{\textbf{(a)}~\textit{Standard}}}%
+% \put(20,0){\framebox(170,230){}}
+% \put(20,230){\makebox(170,15)[r]{\gpart{Seite}}}
+% \begingroup\thicklines
+% \put(40,30){\framebox(120,165){}}\endgroup
+% \put(70,165){\vector(0,1){30}}
+% \put(55,145){\makebox(0,20)[lc]{|Texthöhe|}}
+% \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{Kopf}}}
+% \put(40,40){\makebox(120,140)[c]{\gpart{Textkörper}}}
+% \put(40,11){\makebox(120,10)[c]{\gpart{Fuß}}}
+% \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]{|oben|}}
+% \put(160,0){\makebox(0,30)[lc]{|unten|}}
+% \multiput(160,30)(5,0){24}{\line(1,0){2}}
+% \multiput(160,195)(5,0){24}{\line(1,0){2}}
+% \put(255,250){\makebox(120,0)[bl]
+% {\textbf{(b)}~|includehead| und |includefoot|}}%
+% \put(260,0){\framebox(170,230){}}
+% \put(260,230){\makebox(170,15)[r]{\gpart{Seite}}}
+% \begingroup\thicklines
+% \put(280,30){\framebox(120,165){}}\endgroup
+% \put(310,152){\vector(0,1){25}}
+% \put(295,130){\makebox(0,20)[lc]{|Texthöhe|}}
+% \put(310,130){\vector(0,-1){80}}
+% \multiput(280,184)(5,0){24}{\line(1,0){3}}
+% \multiput(280,177)(5,0){24}{\line(1,0){3}}
+% \multiput(280,50)(5,0){24}{\line(1,0){3}}
+% \put(280,184){\makebox(120,10)[c]{\gpart{Kopf}}}
+% \put(280,40){\makebox(120,140)[c]{\gpart{Textkörper}}}
+% \put(400,140){\line(1,1){45}}
+% \put(437,187){\makebox(50,10)[l]{\gpart{druckbarer Bereich}}}
+% \put(280,31){\makebox(120,10)[c]{\gpart{Fuß}}}
+% \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]{|oben|}}
+% \put(380,0){\makebox(0,30)[lc]{|unten|}}
+% \end{picture}}
+% \caption[Ein Effekt von \texttt{includehead} und \texttt{includefoot}.]{%
+% \begin{minipage}[t]{.8\textwidth}\raggedright\small
+% |includehead| und |includefoot| schließen den Kopf und den Fuß mit
+% in den \gpart{total body} (druckbaren Bereich) ein. \textbf{(a)} |height| $=$ |textheight| (Standard).
+% \textbf{(b)} |height| $=$ |textheight| $+$ |headheight| $+$ |headsep| $+$
+% |footskip|, wenn |includehead| und |includefoot| aktiv. Wenn der obere und untere Rand angegeben ist
+% führt |includehead| und |includefoot| dazu, dass die |Texthöhe| verringert wird.
+% \end{minipage}}
+% \label{fig:includes}
+% \end{figure}
+%
+% Die |Breite| und |Höhe| des druckbaren Bereichs wird definiert:
+% \begin{eqnarray}
+% \label{eq:width}
+% |width| &:=& |textwidth| \quad( +\> |marginparsep|* + |marginparwidth|** )\\
+% |height| &:=& |textheight| \quad(+\> |headheight|*** + |headsep|**** + |footskip|***** )
+% \label{eq:height}
+% \end{eqnarray}
+% * Randnotiztrennung
+% ** Randnotizbreite
+% *** Kopfhöhe
+% **** Kopftrennung
+% ***** Fußbereich\\
+% In Gleichung (\ref{eq:width}) ist standardmäßig |width:=textwidth|,
+% während |marginparsep| und |marginparwidth| nur in der |width (Breite)| enthalten sind,
+% wenn die |includemp| Option auf |true| gesetzt ist.
+% In Gleichung (\ref{eq:height}) ist standardmäßig |height:=textheight|.
+% Falls |includehead| auf |true| gesetzt ist, dann werden |headheight| und |headsep|
+% als Teil der Höhe (|height|) betrachtet.
+% Auf dem selben Weg, nimmt |includefoot| |footskip| in |height| auf.
+% Abbildung~\ref{fig:includes} zeigt, wie diese Optionen
+% in der vertikalen Richtung arbeiten.
+%
+% Folglich besteht das Seitenlayout aus drei Teilen (Längen) in jeder
+% Richtung: ein Textkörper und zwei Ränder. Wenn zwei der Ränder explizit angegeben sind,
+% dann sind die anderen offensichtlich und müssen nicht angegeben werden.
+% Abbildung~\ref{fig:Labc} zeigt ein einfaches Modell der Seitenmaße.
+% Falls eine Länge |L| gegeben ist und eingeteilt ist in den Textkörper |b|, die Ränder |a| und |c|, dann ist offensichtlich,
+% dass
+% \begin{equation}
+% |L|=|a|+|b|+|c| \label{eq:Labc}
+% \end{equation}
+% Die Spezifikation mit zwei von drei (|a|, |b| und |c|) festgelegten, ist explizit lösbar.
+% Wenn zwei oder mehr der übrigen nicht angegeben sind, kann
+% Gleichung~(\ref{eq:Labc}) nicht ohne eine andere Beziehung zwischen ihnen gelöst werden.
+% Falls alle Werte angegeben sind, dann muss überprüft werden, ob diese Gleichung ~(\ref{eq:Labc}) genügen,
+% da es zu viele Angaben sind oder es ist `überspezifiziert'.
+%
+% \begin{figure}[h]
+% \centering
+% {\unitlength=0.8pt
+% \begin{picture}(300,60)(0,-5)
+% \begingroup\linethickness{5pt}
+% \put(0,5){\textcolor{green}{\line(1,0){60}}}
+% \put(60,5){\textcolor{black}{\line(1,0){160}}}
+% \put(220,5){\textcolor{green}{\line(1,0){80}}}
+% \endgroup
+% \put(0,15){\makebox(60,10)[b]{|a|}}
+% \put(60,0){\line(0,1){20}}
+% \put(60,15){\makebox(160,10)[b]{|b|}}
+% \put(220,0){\line(0,1){20}}
+% \put(220,15){\makebox(80,10)[b]{|c|}}
+% \put(0,0){\line(0,1){50}}
+% \put(150,35){\vector(-1,0){150}}
+% \put(0,40){\makebox(300,10){|L|}}
+% \put(150,35){\vector(1,0){150}}
+% \put(300,0){\line(0,1){50}}
+% \end{picture}}
+% \caption{Ein einfaches Modell der Seitenmaße.}
+% \label{fig:Labc}
+% \end{figure}
+%
+% Das \Gm\ Paket besitzt einen Autovervollständigungsmechanismus, der vor dem
+% Ärger der Angabe von Seitenlayoutmaßen schützt. Zum Beispiel
+% können sie das Folgende
+% \begin{quote}
+% |\usepackage[width=14cm, left=3cm]{geometry}|
+% \end{quote}
+% auf A4-Papier einstellen. In diesem Fall müssen sie den rechten Rand nicht angeben.
+% Die Details der Autovervollständigung werden in Kapitel~\ref{sec:rules} beschrieben.
+%
+%
+%
+%
+%
+% \section{Benutzerschnittstelle}
+%
+% \subsection{Befehle}
+%
+% Das \Gm\ Paket unterstützt die folgenden Befehle:
+% \begin{itemize}\setlength{\itemsep}{-.5\parsep}
+% \item |\geometry{|\meta{Optionen}|}|
+% \item |\newgeometry{|\meta{Optionen}|}| und |\restoregeometry|
+% \item |\savegeometry{|\meta{Name}|}| und |\loadgeometry{|\meta{Name}|}|
+% \end{itemize}
+%
+% |\geometry{|\meta{Optionen}|}|
+% verändert das Seitenlayout entsprechend den angegebenen Optionen im Argument.
+% Dieser Befehl, wenn überhaupt, sollte nur in der Präambel platziert werden
+% (vor |\begin{document}|).
+%
+% Das \Gm\ Paket kann als Teil einer Klasse oder eines weiteren Pakets, das sie im Dokument benutzen,
+% genutzt werden. Der Befehl \cs{geometry} kann einige der Einstellungen in der Präambel
+% überschreiben. Eine mehrfache Nutzung von \cs{geometry}
+% ist erlaubt und wird dann mit den verbundenen Optionen ausgeführt.
+% Wenn \Gm\ noch nicht geladen ist, können sie nur
+% |\usepackage[|\meta{Optionen}|]{geometry}| anstelle von \cs{geometry} nutzen.
+%
+% \medskip
+% |\newgeometry{|\meta{Optionen}|}|
+% verändert das Seitenlayout innerhalb des Dokuments. \cs{newgeometry} ist fast
+% gleich mit \cs{geometry}, ausgenommen, dass \cs{newgeometry} alle Optionen,
+% die von \cs{usepackage} und \cs{geometry} in
+% der Präambel vorgenommen wurden, deaktiviert.
+% \cs{restoregeometry}
+% stellt das Seitenlayout, wie es in der Präambel angegeben ist, wieder her. Dieser Befehl
+% besitzt keine Argumente. Lesen sie Kapitel~\ref{sec:midchange} für Details.
+%
+% \medskip
+% |\savegeometry{|\meta{Name}|}|
+% speichert die Seitenmaße als \meta{Name}, wo sie
+% diesen Befehl nutzen.\\
+% |\loadgeometry{|\meta{Name}|}|
+% lädt die Seitenmaße, die als \meta{Name} gespeichert wurden. Lesen sie
+% Kapitel~\ref{sec:midchange} für Details.
+%
+% \subsection{Optionales Argument}
+%
+% Das \Gm\ Paket übernimmt die \textsf{keyval} Schnittstelle
+% `\meta{Schlüssel}=\meta{Wert}' für das optionale Argument von
+% \cs{usepackage}, \cs{geometry} und \cs{newgeometry}.
+%
+% Das Argument beinhaltet eine Liste von kommaseparierten \textsf{keyval}
+% Optionen und besitzt folgende Grundregeln:
+% \begin{itemize}\setlength{\itemsep}{-.5\parsep}
+% \item Mehrfache Zeilen sind erlaubt, während es leere nicht sind.
+% \item Jedes Leerzeichen zwischen den Wörtern wird ignoriert.
+% \item Die Reihenfolge der Optionen ist grundlegend unabhängig.
+% (Es gibt einige Ausnahmen. Lesen sie Kapitel~\ref{sec:optionorder} für Details.)
+% \end{itemize}
+% Zum Beispiel ist
+% \begin{quote}
+% |\usepackage[ a5paper , hmargin = { 3cm,|\\
+% | .8in } , height|\\
+% | = 10in ]{geometry}|
+% \end{quote}
+% äquivalent zu
+% \begin{quote}
+% |\usepackage[height=10in,a5paper,hmargin={3cm,0.8in}]{geometry}|
+% \end{quote}
+% Einigen Optionen ist es erlaubt, Unterlisten zu haben, z.\,B. |{3cm,0.8in}|.
+% Beachten sie, dass die Reihenfolge der Werte in der Liste bedeutsam ist.
+% Die obere Einstellung ist ebenso äquivalent zu Folgendem:
+% \begin{quote}
+% |\usepackage{geometry}|\\
+% |\geometry{height=10in,a5paper,hmargin={3cm,0.8in}}|
+% \end{quote}
+% oder
+% \begin{quote}
+% |\usepackage[a5paper]{geometry}|\\
+% |\geometry{hmargin={3cm,0.8in},height=8in}|\\
+% |\geometry{height=10in}|.
+% \end{quote}
+% Folglich hängt die mehrfache Nutzung von \cs{geometry} die Optionen aneinander.
+%
+% \Gm\ unterstützt das Paket
+% \textsl{calc}\footnote{CTAN:~\texttt{macros/latex/required/tools}}.
+% Zum Beispiel,
+% \begin{quote}
+% |\usepackage{calc}|\\
+% |\usepackage[textheight=20\baselineskip+10pt]{geometry}|
+% \end{quote}
+%
+% \subsection{Optionstypen}
+% \Gm\ Optionen sind in vier Typen eingeteilt:
+%
+% \begin{enumerate}\itemsep=0pt
+% \item \textbf{Wahrheitswerttyp}
+%
+% Er nimmt einen Wahrheitswert an (|true (wahr)| oder |false (falsch)|). Falls kein Wert angegeben ist,
+% wird standardmäßig |true (wahr)| eingesetzt.
+% \begin{quote}
+% \meta{Schlüssel}|=true|\OR|false|.\\
+% \meta{Schlüssel} ohne Wert ist äquivalent zu
+% \meta{Schlüssel}|=true|.
+% \end{quote}
+% \textit{Beispiele:}~ |verbose=true|, |includehead|,
+% |twoside=false|.\\
+% Der Papiername ist eine Ausnahme. Der bevorzugte Papiername sollte ohne Wert
+% angegeben werden. Welcher Wert auch immer gegeben ist er wird ignoriert. Zum
+% Beispiel ist |a4paper=XXX| äquivalent zu |a4paper|.
+%
+% \item \textbf{Typ mit einzelnem Wert}
+%
+% Man benötigt einen zwingenden Wert.
+% \begin{quote}
+% \meta{Schlüssel}|=|\meta{Wert}.
+% \end{quote}
+% \textit{Beispiele:}~ |width=7in|, |left=1.25in|,
+% |footskip=1cm|, |height=.86\paperheight|.
+%
+% \item \textbf{Typ mit zwei Werten}
+%
+% Man benötigt ein Paar von kommagetrennten Werten in geschweiften Klammern. Die zwei Werte können
+% zu einem gekürzt werden, wenn beide identisch sind.
+% \begin{quote}
+% \meta{Schlüssel}|=|\argii{Wert1}{Wert2}.\\
+% \meta{Schlüssel}|=|\meta{Wert} ist äquivalent zu
+% \meta{Schlüssel}|=|\argii{Wert}{Wert}.
+% \end{quote}
+% \textit{Beispiele:}~ |hmargin={1.5in,1in}|, |scale=0.8|,
+% |body={7in,10in}|.
+%
+% \item \textbf{Typ mit drei Werten}
+%
+% Man benötigt drei zwingende Werte, kommagetrennte Werte in geschweiften Klammern.
+% \begin{quote}
+% \meta{Schlüssel}|=|\argiii{Wert1}{Wert2}{Wert3}
+% \end{quote}
+% Jeder Wert muss ein Maß sein oder Null. Falls sie einen leeren Wert angeben
+% oder `|*|', dies bedeutet Null, dann wird der übergebene Wert dem Autovervollständigungsmechanismus zugeführt.
+% Sie müssen mindestens ein Maß angeben, typischerweise aber zwei.
+% Sie können für alle Werte Null einsetzen,
+% aber das macht keinen Sinn.
+% \textit{Beispiele:}\\
+% \hspace*{2em} |hdivide={2cm,*,1cm}|, |vdivide={3cm,19cm, }|,
+% |divide={1in,*,1in}|.
+% \end{enumerate}
+%
+% \section{Details zu Optionen}
+%
+% Dieses Kapitel beschreibt alle Optionen, die in \Gm{} verfügbar sind.
+% Optionen mit einem Dolch $^\dagger$ sind nicht vorhanden
+% als Argumente von \cs{newgeometry} (Lesen sie Kapitel~\ref{sec:midchange}).
+%
+% \subsection{Papiergröße}\label{sec:paper}
+%
+% Die Optionen unten dienen zum Einstellen der Größe des Papiers/Mediums und der Orientierung.
+% \begin{Options}
+% \item[\onlypre paper (Papier)\OR papername (Papiername)] ~\\
+% gibt die Papiergröße anhand des Namens an. |paper=|\meta{Papiername}.
+% Für besseren Komfort können sie den Papiernamen ohne |paper=| angeben.
+% |a4paper| ist beispielsweise äquivalent zu |paper=a4paper|.
+% \item[\onlypre \vtop{
+% \hbox{a0paper, a1paper, a2paper, a3paper, a4paper, a5paper, a6paper,}
+% \hbox{b0paper, b1paper, b2paper, b3paper, b4paper, b5paper, b6paper,}
+% \hbox{c0paper, c1paper, c2paper, c3paper, c4paper, c5paper, c6paper,}
+% \hbox{b0j, b1j, b2j, b3j, b4j, b5j, b6j,}
+% \hbox{ansiapaper, ansibpaper, ansicpaper, ansidpaper, ansiepaper,}
+% \hbox{letterpaper, executivepaper, legalpaper}}]~\\[1ex]
+% gibt den Papiernamen an. Der Wert wird ignoriert, sogar wenn einer angegeben wird.
+% Beispielsweise hat das Folgende den gleichen Effekt:
+% |a5paper|, |a5paper=true|, |a5paper=false| und so weiter.
+% |a[0-6]paper|, |b[0-6]paper| und |c[0-6]paper| sind ISO A, B und C
+% Serien von Papiergrößen.
+% Die JIS (Japanischer Industriestandard) A-Serien ist identisch zu den
+% ISO A-Serien, aber die JIS B-Serien sind von den ISO B-Serien verschieden.
+% |b[0-6]j| sollte für die JIS B-Serien genutzt werden.
+% \item[\onlypre screen] eine spezielle Papiergröße mit (B,H) = (225\,mm,180\,mm).
+% Für Präsentationen mit dem PC und einem Beamer kann ``|screen,centering|'',
+% in Verbindung mit `slide' in der Dokumentklasse nützlich sein.
+% \item[\onlypre paperwidth] Breite des Papiers. |paperwidth=|\meta{Länge}.
+% \item[\onlypre paperheight] Höhe des Papiers. |paperheight=|\meta{Länge}.
+% \item[\onlypre papersize] Breite und Höhe des Papiers.
+% |papersize=|\argii{Breite}{Höhe} oder |papersize=|\meta{Länge}.
+% \item[\onlypre landscape] wechselt die Papierorientierung in den Landschaftsmodus.
+% \item[\onlypre portrait] wechselt die Papierorientierung in den Portraitsmodus.
+% Dies ist das Gleiche wie |landscape=false|.
+% \end{Options}
+%
+% Die Optionen für den Papiernamen (z.\,B., |a4paper|) und die Orientierung
+% (|portrait| und |landscape|) können als Dokumentklassenoptionen benutzt werden.
+% Zum Beispiel können sie\\ |\documentclass[a4paper,landscape]{article}| eingeben,
+% dann werden |a4paper| und |landscape| auch in \Gm\ abgearbeitet.
+% Dies ist ebenso im Fall von |twoside (zweiseitig)| und |twocolumn (zweispaltig)|
+% (Lesen sie auch Kapitel~\ref{sec:dimension}).
+%
+% \subsection{Layoutgröße}
+%
+% Sie können den Layoutbereich mit den Optionen, die in diesem Kapitel beschrieben sind, ungeachtet der Papiergröße, angeben.
+% Die Optionen helfen das angegebene Layout auf unterschiedlichen
+% Papiergrößen zu drucken. Wenn sie beispielsweise |a4paper| und |layout=a5paper| nutzen, dann
+% benutzt das Paket das `A5' Layout, um die Ränder auf dem `A4' Papier zu berechnen.
+% Die Layoutgröße wird genauso groß wie die des Papiers.
+% Die Optionen für die Layoutgröße sind mittels \cs{newgeometry} erreichbar,
+% sodass sie die Layoutgröße in der Mitte des Dokuments verändern können.
+% Die Papiergröße selbst kann so nicht geändert werden.
+% Abbildung~\ref{fig:layoutandpaper} zeigt, was die Unterschiede zwischen
+% |layout| und |paper| sind.
+% \begin{Options}
+% \item[layout] gibt die Layoutgröße vom Papiernamen an.
+% |layout=|\meta{Papiername}. Alle Papiernamen, die in \Gm\ definiert sind, sind wählbar.
+% Lesen sie auch Kapitel~\ref{sec:paper} für mehr Details.
+% \item[layoutwidth] Breite des Layouts. |layoutwidth=|\meta{Länge}.
+% \item[layoutheight] Höhe des Layouts. |layoutheight=|\meta{Länge}.
+% \item[layoutsize] Breite und Höhe des Layouts.
+% |layoutsize=|\argii{Breite}{Höhe} oder |layoutsize=|\meta{Länge}.
+% \item[layouthoffset] gibt den horizontalen Versatz von der linken Kante des Papiers an.
+% |layouthoffset=|\meta{Länge}.
+% \item[layoutvoffset] gibt den vertikalen Versatz von der oberen Kante des Papiers an.
+% |layoutvoffset=|\meta{Länge}.
+% \item[layoutoffset] gibt beides, horizontalen und vertikalen Versatz an.
+% |layoutoffset=|\argii{hoffset}{voffset} oder |layoutsize=|\meta{Länge}.
+% \end{Options}
+% \begin{figure}[h]
+% \centering\small
+% {\unitlength=.6pt
+% \begin{picture}(450,250)(0,-10)
+% \put(20,0){\makebox(168,12)[r]{\gpart{Papier}}}
+% \put(20,0){\framebox(170,230){}}
+% \put(21,40){\dashbox{3}(140,189){}}
+% \put(21,28){\makebox(140,12)[r]{\gpart{Layout}}}
+% \put(40,50){\makebox(100,10){\gpart{Fuß}}}
+% \put(40,50){\line(1,0){100}}
+% \put(40,65){\framebox(100,125){\gpart{Textbereich}}}
+% \put(40,200){\framebox(100,10){\gpart{Kopf}}}
+% \put(20,230){\makebox(140,20){|Layoutbreite|}}
+% \put(40,240){\vector(-1,0){20}}
+% \put(140,240){\vector(1,0){20}}
+% \put(10,145){\vector(0,1){85}}
+% \put(15,125){\makebox(0,20)[r]{|Layouthöhe|}}
+% \put(10,125){\vector(0,-1){85}}
+% \put(280,0){\makebox(168,12)[r]{\gpart{Papier}}}
+% \put(280,0){\framebox(170,230){}}
+% \put(293,35){\dashbox{3}(140,189){}}
+% \put(293,23){\makebox(140,12)[r]{\gpart{Layout}}}
+% \put(312,45){\makebox(100,10){\gpart{Fuß}}}
+% \put(312,45){\line(1,0){100}}
+% \put(312,60){\framebox(100,125){\gpart{Textbereich}}}
+% \put(312,195){\framebox(100,10){\gpart{Kopf}}}
+% \put(235,230){\makebox(80,20)[l]{|layouthoffset|}}
+% \put(260,210){\vector(1,0){20}}
+% \put(308,210){\vector(-1,0){15}}
+% \put(260,210){\line(-1,2){10}}
+% \put(355,230){\makebox(100,20){|layoutvoffset|}}
+% \put(350,250){\vector(0,-1){20}}
+% \put(350,209){\vector(0,1){15}}
+% \end{picture}}
+% \caption[Layout und Papier]{%
+% \begin{minipage}[t]{.7\textwidth}\raggedright\small
+% Die Maße sind mit denen der Layoutgröße verwandt. Beachte, dass die Layoutgrößenvorgaben
+% zu der Größe des Papiers korrespondieren, sodass sie die meisten layoutbezogenen Optionen
+% nicht explizit angeben müssen.
+% \end{minipage}}
+% \label{fig:layoutandpaper}
+% \end{figure}
+%
+% \subsection{Größe des Textbereichs}\label{sec:body}
+%
+% Die Optionen, die die Größe des \gpart{druckbaren Bereichs} angeben, werden in diesem Kapitel beschrieben.
+%
+% \begin{Options}
+% \item[hscale]
+% Verhältnis der Breite des \gpart{druckbaren Bereichs} zur \cs{paperwidth (Papierbreite)}.
+% |hscale=|\meta{h-scale}, z.\,B. |hscale=0.8| ist äquivalent zu
+% |width=0.8|\cs{paperwidth (Papierbreite)}. (|0.7| ist der Standard)
+% \item[vscale]
+% Verhältnis der Höhe des \gpart{druckbaren Bereichs} zur \cs{paperheight (Papierhöhe)}, z.\,B.
+% |vscale=|\meta{v-scale}. (|0.7| ist der Standard) |vscale=0.9| ist äquivalent
+% zu |height=0.9|\cs{paperheight (Papierhöhe)}.
+% \item[scale] Verhältnis des \gpart{druckbaren Bereichs} zum Papier.
+% |scale=|\argii{h-scale}{v-scale} oder |scale=|\meta{scale}.
+% (|0.7| ist der Standard)
+% \item[width\OR totalwidth] ~\\
+% Breite des \gpart{druckbaren Bereichs}. |width=|\meta{Länge} oder
+% |totalwidth=|\meta{Länge}. Dieses Maß korrespondiert zur |textwidth (Textbreite)|,
+% aber wenn |includemp| auf |true| gesetzt ist, dann ist die |Breite| $\ge$ |Textbreite|,
+% weil die |Breite| die Breite der Randnotizen beinhaltet.
+% Wenn die |Textbreite| und die |Breite| gleichzeitig angegeben werden,
+% dann hat die |Textbreite| eine höhere Priorität als die |Breite|.
+% \item[height\OR totalheight] ~\\
+% Höhe des \gpart{druckbaren Bereichs}, wobei Kopf und Fuß standardmäßig ausgeschlossen sind.
+% Wenn |includehead| oder |includefoot| gesetzt ist, dann beinhaltet die |height (Höhe)|
+% den Kopf oder den Fuß der Seite sowie die |textheight (Texthöhe)|.
+% |height=|\meta{Länge} oder |totalheight=|\meta{Länge}. Falls beide,
+% |textheight (Texthöhe)| und |height (Höhe)|, angegeben sind, wird die |height (Höhe)| ignoriert werden.
+% \item[total] Breite und Höhe des \gpart{druckbaren Bereichs}.\\
+% |total=|\argii{Breite}{Höhe} oder |total=|\meta{Länge}.
+% \item[textwidth] gibt die \cs{textwidth (Textbreite)}, die Breite des \gpart{Körpers}
+% (der Textbereich) an. |textwidth=|\meta{Länge}.
+% \item[textheight] gibt die \cs{textheight (Texthöhe)}, die Höhe des
+% \gpart{Körpers} (der Textkörper) an. |textheight=|\meta{Länge}.
+% \item[text\OR body] gibt beides, die \cs{textwidth (Textbreite)} und \cs{textheight (Texthöhe)}
+% des Körpers der Seite an. |body=|\argii{Breite}{Höhe} oder
+% |text=|\meta{Länge}.
+% \item[lines] erlaubt dem Benutzer, die \cs{textheight (Texthöhe)} durch die Anzahl
+% der Zeilen anzugeben. |lines|=\meta{ganzzahliger Wert}.
+% \item[includehead] schließt den Kopf der Seite, die \cs{headheight (Kopfhöhe)}
+% und \cs{headsep (Kopftrennung)} in den \gpart{druckbaren Bereich} ein. Diese Option ist in den Voreinstellungen durch
+% |false| deaktiviert. Es ist das Gegenteil von |ignorehead|. Betrachten sie auch
+% Abbildung~\ref{fig:includes} und Abbildung~\ref{fig:modes}.
+% \item[includefoot] schließt den Fuß der Seite, \cs{footskip (Fußbereich)},
+% in den \gpart{druckbaren Bereich} ein. Es ist das Gegenteil von |ignorefoot|.
+% Die Voreinstellung ist |false| (deaktiviert). Betrachten sie auch Abbildung~\ref{fig:includes} und
+% Abbildung~\ref{fig:modes}.
+% \item[includeheadfoot]~\\
+% setzt beides, |includehead| und |includefoot|, auf |true|, dies ist das Gegenteil
+% von |ignoreheadfoot|. Betrachten sie auch Abbildung~\ref{fig:includes} und
+% Abbildung~\ref{fig:modes}.
+% \item[includemp] schließt die Randnotizen, die \cs{marginparwidth (Randnotizbreite)}
+% und \cs{marginparsep (Randnotiztrennung)} in den \gpart{Körper} ein, wenn die horizontalen Maße
+% berechnet werden.
+% \item[includeall] setzt beides, |includeheadfoot| und |includemp| auf
+% |true| (aktiv). Betrachten sie auch Abbildung~\ref{fig:modes}.
+% \item[ignorehead] missachtet den Kopf der Seite,
+% |headheight (Kopfhöhe)| und |headsep (Kopftrennung)|, sind ausschlaggebend für das vertikale Layout, aber diese ändern
+% dessen Längen nichts. Es ist äquivalent zu |includehead=false|. Diese Option ist mit
+% |true| voreingestellt. Lesen sie auch |includehead|.
+% \item[ignorefoot] missachtet den Fuß der Seite, der |footskip (Fußbereich)|,
+% ist ausschlaggebend für das vertikale Layout, aber dies ändert die Länge nicht.
+% Diese Voreinstellung der Option ist |true|. Lesen sie auch |includefoot|.
+% \item[ignoreheadfoot]~\\ setzt beides, |ignorehead| und |ignorefoot|
+% auf |true|. Lesen sie auch |includeheadfoot|.
+% \item[ignoremp] vernachlässigt die Randnotizen bei der Berechnung der horizontalen
+% Ränder (der Standard ist |true|). Wenn die Randnotizen die Seite überfüllen,
+% dann wird eine Warnmeldung angezeigt werden, wenn |verbose=true| aktiviert ist.
+% Sehen sie auch |includemp| und Abbildung~\ref{fig:modes}.
+% \item[ignoreall] setzt beides, |ignoreheadfoot| und |ignoremp| auf |true|.
+% Lesen sie auch |includeall|.
+% \item[heightrounded]~\\
+% Diese Option rundet die \cs{textheight (Texthöhe)}, um \textit{n}-Mal mehr (\textit{n}:
+% ist eine ganze Zahl) \cs{baselineskip} plus \cs{topskip}, um
+% ``underfull vbox'' in manchen Fällen zu vermeiden. Zum Beispiel, wenn die \cs{textheight (Texthöhe)}
+% 486pt ist, mit \cs{baselineskip} 12pt und \cs{topskip} 10pt, dann
+% \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}
+% als Ergebnis wird die \cs{textheight (Texthöhe)} auf 490\,pt aufgerundet. |heightrounded=false|
+% ist voreingestellt.
+% \end{Options}
+%
+% Abbildung~\ref{fig:modes} illustriert die verschiedenen Layouttypen mit den verschiedenen Layoutmodi.
+% Die Maße für einen Kopf und einen Fuß können durch den
+% |nohead|- oder |nofoot|-Modus kontrolliert werden, dies setzt jede Länge auf 0\,pt.
+% Auf der anderen Seite verändern Optionen mit dem Präfix |ignore| \textit{nicht}
+% die korrespondierenden, ursprünglichen Maße.
+%
+%
+% Die folgenden Optionen können den Körper und die Ränder gleichzeitig angeben, mit
+% drei kommagetrennten Werten in geschweiften Klammern.
+%
+% \begin{figure}[h]
+% \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{druckbarer Bereich}}}
+% \put( 20,335){\makebox(120,0)[bc]{|Textbreite|}}
+% \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]{|Fußbereich|}}
+% \put( 10,460){\makebox(120,20)[bc]{\gpart{Kopf}}}
+% \put( 10,320){\makebox(120,140)[c]{\gpart{Körper}}}
+% \put( 10,310){\makebox(120,10)[c]{\gpart{Fuß}}}
+% \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{druckbarer Bereich}}}
+% \put(250,460){\makebox(95,20)[bc]{\gpart{Kopf}}}
+% \put(250,320){\makebox(95,140)[c]{\gpart{Fuß}}}
+% \put(385,390){\makebox(95,0)[cl]%
+% {\gpart{\shortstack[l]{Rand-\\notiz}}}}
+% \put(250,310){\makebox(95,10)[c]{\gpart{Fuß}}}
+% \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{druckbarer Bereich}}}
+% \put(150,130){\makebox(0,0)[l]{|textheight|}}
+% \put(150, 50){\makebox(0,0)[l]{|footskip|}}
+% \put( 20, 50){\makebox(120,160)[c]{\gpart{Körper}}}
+% \put( 20, 40){\makebox(120,10)[c]{\gpart{Fuß}}}
+% \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{druckbarer Bereich}}}
+% \put(250, 50){\makebox(95,160)[c]{\gpart{Körper}}}
+% \put(385,130){\makebox(95,0)[cl]%
+% {\gpart{\shortstack[l]{Rand-\\notiz}}}}
+% \put(250, 40){\makebox(95,10)[c]{\gpart{Fuß}}}
+% \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[Musterlayout für den \gpart{druckbaren Bereich} mit verschiedenen
+% Layoutmodi]{%
+% \begin{minipage}[t]{.8\textwidth}\small
+% Musterlayouts für den \gpart{druckbaren Bereich} mit verschiedenen Veränderungen.
+% (a) |includeheadfoot|, (b) |includeall|, (c) |includefoot|
+% und (d) |includefoot,includemp|.
+% Wenn |reversemp| auf |true| gesetzt ist, dann werden die Orte
+% für die Randnotizen auf jeder Seite getauscht.
+% Die Option |twoside| tauscht beides, die Ränder und die Randnotizen auf der Rückseite.
+% Beachten sie, dass die Randnotiz gedruckt wird, falls vorhanden, trotz das
+% |ignoremp| oder |includemp=false| und Überlauf der Seite, in einigen Fällen.
+% \end{minipage}}
+% \label{fig:modes}
+% \end{figure}
+%
+% \begin{Options}
+% \item[hdivide] horizontale Aufteilung (links,Breite,rechts).
+% |hdivide=|\argiii{linker Rand}{Breite}{rechter Rand}.
+% Beachten sie, dass sie nicht alle drei Parameter eingeben sollten.
+% Die beste Möglichkeit der Nutzung dieser Option ist die Angabe von zwei der drei Parameter und
+% das Freilassen des verbliebenen mit Null(nichts) oder `|*|'. Zum Beispiel, wenn sie
+% |hdivide={2cm,15cm, }| einstellen, dann wird der Rand von der rechtsseitigen Kante der Seite
+% die Rechnung bestimmen |paperwidth-2cm-15cm|.
+% \item[vdivide] vertikale Aufteilung (oben,Höhe,unten).
+% |vdivide=|\argiii{oberer Rand}{Höhe}{unterer Rand}.
+% \item[divide] |divide=|\vargiii{$A$}{$B$}{$C$} wird interpretiert als
+% |hdivide=|\vargiii{$A$}{$B$}{$C$} und |vdivide=|\vargiii{$A$}{$B$}{$C$}.
+% \end{Options}
+%
+% \subsection{Randgröße}\label{sec:margin}
+%
+% Die Optionen zum Spezifizieren der Größe der Ränder sind unten aufgelistet.
+%
+% \begin{Options}
+% \item[left\OR lmargin\OR inner]~\\
+% linker Rand (für einseitige Dokumente) oder innerer Rand (für zweiseitige Dokumente) des
+% \gpart{druckbaren Bereichs}. Mit anderen Worten, es ist die Distanz zwischen der linken (inneren)
+% Kante des Papiers und der des \gpart{druckbaren Bereichs}. |left=|\meta{Länge}.
+% |inner (innen)| hat keine besondere Bedeutung, nur eine alternative für |left| und |lmargin|.
+% \item[right\OR rmargin\OR outer]~\\
+% rechter oder äußerer Rand des \gpart{druckbaren Bereichs}. |right=|\meta{Länge}.
+% \item[top\OR tmargin] oberer Rand der Seite. |top=|\meta{Länge}.
+% Beachten sie, dass diese Option nichts mit dem ursprünglichen Maß
+% \cs{topmargin} zu tun hat.
+% \item[bottom\OR bmargin]~\\
+% unterer Rand der Seite. |bottom=|\meta{Länge}.
+% \item[hmargin] linker und rechter Rand.
+% |hmargin=|\argii{linker Rand}{rechter Rand} oder |hmargin=|\meta{Länge}.
+% \item[vmargin] oberer und unterer Rand.
+% |vmargin=|\argii{oberer Rand}{unterer Rand} oder |vmargin=|\meta{Länge}.
+% \item[margin] |margin=|\vargii{$A$}{$B$} ist äquivalent zu
+% |hmargin=|\vargii{$A$}{$B$} und |vmargin=|\vargii{$A$}{$B$}.
+% |margin=|$A$ wird automatisch erweitert zu |hmargin=|$A$ und |vmargin=|$A$.
+% \item[hmarginratio]
+% Verhältnis des horizontalen Rands des |linken| (inneren) zum |rechten| (äußeren).
+% Der Wert des \meta{Verhältnisses} sollte mit zwei Werten, die durch einen Doppelpunkt getrennt sind,
+% angegeben werden. Jeder Wert sollte eine positive ganze Zahl kleiner 100 sein,
+% um einen arithmetischen Überlauf zu verhindern, z.\,B. |2:3| anstatt |1:1.5|.
+% Das Standardverhältnis ist |1:1| für einseitige Dokumente, |2:3| für zweiseitige.
+% \item[vmarginratio]
+% Verhältnis des vertikalen Randes, des |oberen| Randes zum |unteren|. Das Standardverhältnis ist |2:3|.
+% \item[marginratio\OR ratio]~\\
+% horizontale und vertikale Randverhältnisse.
+% |marginratio=|\argii{horizontales Verhältnis}{vertikales Verhältnis} oder
+% |marginratio=|\meta{Verhältnis}.
+% \item[hcentering] aktiviert die automatische horizontale Zentrierung und ist
+% äquivalent zu |hmarginratio=1:1|. Es ist für die Option oneside auf |true| gesetzt.
+% Lesen sie auch |hmarginratio|.
+% \item[vcentering] aktiviert die automatische vertikale Zentrierung und ist
+% äquivalent zu |vmarginratio=1:1|. Diese Option ist standardmäßig auf |false| gesetzt.
+% Lesen sie auch |vmarginratio|.
+% \item[centering] aktiviert die automatische Zentrierung und ist äquivalent zu
+% |marginratio=1:1|. Lesen sie auch |marginratio|. Der Standard ist |false|.
+% \item[twoside] wechselt das Layout in den twoside (zweiseitigen) Modus, wobei der linke und der rechte Rand auf der
+% Rückseite vertauscht wird. Die Option setzt einen \cs{@twoside} und \cs{@mparswitch}
+% Schalter. Lesen sie auch |asymmetric|.
+% \item[asymmetric] führt ein zweiseitiges Layout ein, wobei die Ränder nicht getauscht werden
+% auf alternativen Seiten (durch die Einstellung \cs{oddsidemargin} zu
+% \cs{evensidemargin} |+| |bindingoffset|) und die Randnotizen
+% immer auf der selben Seite bleiben. Diese Option kann als Alternative für die
+% twoside Option genutzt werden. Lesen sie auch |twoside|.
+% \item[bindingoffset]~\\ entfernt einen angegeben Raum
+% von der linken Seite bei oneside oder der inneren Seite bei
+% twoside. |bindingoffset=|\meta{Länge}. Dies ist nützlich, wenn die Seiten durch eine
+% Pressbindung verbunden sind (glued, stitched, stapled \ldots).
+% Betrachten sie auch Abbildung~\ref{fig:bindingoffset}.
+% \item[hdivide] Siehe Beschreibung im Kapitel~\ref{sec:body}.
+% \item[vdivide] Siehe Beschreibung im Kapitel~\ref{sec:body}.
+% \item[divide] Siehe Beschreibung im Kapitel~\ref{sec:body}.
+% \end{Options}
+% \begin{figure}[h]
+% \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)}~jede Seite für oneside oder}}
+% \put(20,240){\makebox(80,20)[l]{\hspace{3ex}eine einzelne Seite für twoside}}
+% \put(110,225){\makebox(80,20)[r]{\gpart{Papier}}}
+% \put(55,37){\framebox(110,170)[tc]{\gpart{druckbarer Bereich}}}
+% \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)}~ (Rück-) Seiten für twoside}}
+% \put(280,0){\framebox(170,230){}}
+% \put(370,225){\makebox(80,20)[r]{\gpart{Papier}}}
+% \put(305,37){\framebox(110,170)[tc]{\gpart{druckbarer Bereich}}}
+% \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
+% Die Option |bindingoffset| fügt eine angegebene Länge zum inneren Rand hinzu.
+% Beachten sie, dass die |twoside| Option die horizontalen Ränder und die Randnotizen
+% zusammen mit |bindingoffset| auf jeder Seite tauscht (siehe
+% \textbf{b)}), aber die |asymmetric| Option unterdrücke den Tausch der Ränder und der Randnotizen
+% (aber |bindingoffset| wird dennoch getauscht).
+% \end{minipage}}
+% \label{fig:bindingoffset}
+% \end{figure}
+%
+% \subsection{Ursprüngliche Maße}\label{sec:dimension}
+%
+% Die unteren Optionen überschreiben die ursprünglichen Maße von \LaTeX\ und die Veränderungen für das Seitenlayout
+% (Betrachten sie auch die rechte Seite in Abbildung~\ref{fig:layout}).
+%
+% \begin{Options}
+% \item[headheight\OR head]~\\
+% modifiziert die \cs{headheight}, die Höhe des Kopfes.
+% |headheight=|\meta{Länge} oder |head=|\meta{Länge}.
+% \item[headsep] modifiziert die \cs{headsep}, die Abtrennung zwischen dem Kopfbereich und dem Text
+% (body). |headsep=|\meta{Länge}.
+% \item[footskip\OR foot]~\\ modifiziert den \cs{footskip}, die Distanzabtrennung zwischen
+% der Grundlinie der letzten Zeile des Textes und der Grundlinie des Fußes.
+% |footskip=|\meta{Länge} oder |foot=|\meta{Länge}.
+% \item[nohead] entfernt den Platz für den Kopf der Seite, dies ist äquivalent zu
+% \cs{headheight}|=0pt| und \cs{headsep}|=0pt|.
+% \item[nofoot] entfernt den Platz für den Fuß der Seite, dies ist äquivalent zu
+% \cs{footskip}|=0\,pt|.
+% \item[noheadfoot] ist äquivalent zu |nohead| und |nofoot|, dies bedeutet, dass
+% \cs{headheight}, \cs{headsep} und \cs{footskip} alle auf |0pt| eingestellt werden.
+% \item[footnotesep] verändert die Maße \cs{skip}\cs{footins}, die Abtrennung zwischen
+% dem unteren Ende des Textkörpers und dem oberen Ende des Fußnotentextes.
+% \item[marginparwidth\OR marginpar]~\\
+% modifiziert die \cs{marginparwidth}, die Breite der Randnotizen.
+% |marginparwidth=|\meta{Länge}.
+% \item[marginparsep] modifiziert die \cs{marginparsep}, die Abtrennung zwischen
+% dem Körper und den Randnotizen. |marginparsep=|\meta{Länge}.
+% \item[nomarginpar] schrumpft den Platz für die Randnotizen auf 0\,pt, dies
+% ist äquivalent zu \cs{marginparwidth}|=0pt| und \cs{marginparsep}|=0pt|.
+% \item[columnsep] modifiziert die \cs{columnsep}, die Abtrennung zwischen zwei
+% Spalten im |twocolumn| Modus.
+% \item[hoffset] modifiziert \cs{hoffset}. |hoffset=|\meta{Länge}.
+% \item[voffset] modifiziert \cs{voffset}. |voffset=|\meta{Länge}.
+% \item[offset] horizontaler und vertikaler Versatz.\\
+% |offset=|\argii{hoffset}{voffset} oder |offset=|\meta{Länge}.
+% \item[twocolumn] aktiviert den |twocolumn| Modus mit \cs{@twocolumntrue}.
+% |twocolumn=false| bezeichnet den onecolumn Modus (Modus mit einer Spalte) mit \cs{@twocolumnfalse}.
+% Anstatt |twocolumn=false|, können sie |onecolumn| angeben (die Vorgabe ist
+% |true|)
+% \item[onecolumn] arbeitet als |twocolumn=false|. Auf der anderen Seite ist
+% |onecolumn=false| äquivalent zu |twocolumn|.
+% \item[twoside] aktiviert beides, \cs{@twosidetrue} und \cs{@mparswitchtrue}.
+% Lesen sie auch Kapitel~\ref{sec:margin}.
+% \item[textwidth] lässt sie die \cs{textwidth (Textbreite)} direkt einstellen. Lesen sie auch Kapitel~\ref{sec:body}.
+% \item[textheight] lässt sie die \cs{textheight (Texthöhe)} direkt einstellen. Lesen sie auch Kapitel~\ref{sec:body}.
+% \item[reversemp\OR reversemarginpar]~\\
+% sorgt dafür, dass die Randnotizen am (inneren) linken Rand erscheinen, mit
+% \cs{@reversemargintrue}. Die Option verändert nichts am |includemp| Modus.
+% Diese Option ist mit |false| voreingestellt.
+% \end{Options}
+%
+% \subsection{Treiber}\label{sec:drivers}
+%
+% Dieses Paket unterstützt die Treiber |dvips|, |dvipdfm|, |pdftex|, |luatex|, |xetex| und
+% |vtex|. Sie können auch |dvipdfm| für \textsf{dvipdfmx} einstellen und
+% \textsf{xdvipdfmx}. |pdftex| für \textsf{pdflatex}, und |vtex| für die
+% V\TeX{} Umgebung.
+% Die Treiberoptionen sind exklusiv. Der Treiber kann durch beides eingestellt werden,
+% |driver=|\meta{Treibername} oder die direkte Angabe eines Treibers wie |pdftex|.
+% Standardmäßig nimmt \Gm\ den Treiber, der am besten zum benutzten System passt.
+% Deshalb müssen sie in den meisten Fällen keinen Treiber angeben.
+% Wie auch immer, wenn sie |dvipdfm| benutzen wollen, dann sollten sie dies explizit angeben.
+%
+% \begin{Options}
+% \item[\onlypre driver] gibt den Treibernamen mit |driver=|\meta{Treibername} an.
+% |dvips|, |dvipdfm|, |pdftex|, |vtex|, |xetex|, |auto| und |none| sind
+% als Treibername einsetzbar. Außer den Namen für |auto| und |none| können
+% alle Treiber direkt mit dem Namen, ohne |driver=|, angegeben werden.
+% |driver=auto| schaltet die automatische Detektion ein, egal was die vorherigen Einstellungen waren.
+% |driver=none| schaltet die automatische Detektion ab und es wird kein Treiber gewählt. Dies
+% könnte nützlich sein, wenn sie wollen, dass andere Pakete die Treibereinstellungen herausfinden sollen.
+% Ein Beispiel: Wenn sie das \textsf{crop} Paket mit \Gm{} nutzen wollen,
+% dann sollten sie |\usepackage[driver=none]{geometry}| aufrufen, bevor
+% sie das \textsf{crop} Paket aufrufen.
+% \item[\onlypre dvips] schreibt die Papiergröße in die dvi Ausgabe, mit dem \cs{special}
+% Makro. Wenn sie \textsl{dvips} als DVI-zu-PS Treiber nutzen, dann
+% brauchen sie, wenn sie beispielsweise ein Dokument mit |\geometry{a3paper,landscape}|
+% auf A3-Papier mit der landscape Orientierung drucken wollen, die Optionen
+% ``|-t a3 -t landscape|'' für \textsl{dvips} nicht.
+% \item[\onlypre dvipdfm] arbeitet wie |dvips|, ausgenommen die landscape Korrektur.
+% Sie können diese Option einschalten, wenn sie \textsf{dvipdfmx} nutzen und
+% \textsf{xdvipdfmx}, um die dvi Ausgabe zu erzeugen.
+% \item[\onlypre pdftex] setzt \cs{pdfpagewidth} und \cs{pdfpageheight}
+% intern.
+% \item[\onlypre xetex] ist dasselbe wie |pdftex|, ausgenommen das Ignorieren von
+% |\pdf{h,v}origin|, das in \XeLaTeX{} nicht definiert ist. Diese Option wurde in 5. Version eingeführt.
+% Beachten sie, dass die `geometry.cfg' in \TeX{} Live, welche die
+% automatische Detektionsroutine deaktiviert und |pdftex| einstellt, nicht länger notwendig ist.
+% Trotzdem gibt es keine Probleme, sogar wenn die Datei nicht gelöscht wird.
+% Anstatt |xetex|, können sie |dvipdfm| angeben, mit \XeLaTeX{},
+% wenn sie die Besonderheiten von dvipdfm nutzen wollen, die \XeTeX{} unterstützt.
+% \item[\onlypre vtex] setzt die Maße \cs{mediawidth} und \cs{mediaheight}
+% für V\TeX. Wenn dieser Treiber ausgewählt ist (explizit oder automatisch),
+% wird \Gm\ den Ausgabemodus (DVI, PDF oder PS), der in V\TeX gewählt ist, selbstständig herausfinden
+% und die richtigen Einstellungen für ihn machen.
+% \end{Options}
+% Wenn der explizit angegebene Treiber nicht zum benutzten Textsatzprogramm passt,
+% dann wird der Standardtreiber |dvips| ausgewählt.
+%
+% \subsection{Sonstige Optionen}
+%
+% Die sonstigen nützlichen Optionen werden jetzt beschrieben.
+%
+% \begin{Options}
+% \item[\onlypre verbose] zeigt die Parameterergebnisse im Terminal an.
+% |verbose=false| (Standard) schreibt diese nur in die Log-Datei.
+% \item[\onlypre reset] setzt die Layoutmaße zurück und nimmt die Einstellungen an,
+% die vor dem Laden von \Gm\ vorgegeben waren. Die Optionen, die in
+% |geometry.cfg| angegeben sind, werden auch entfernt.
+% Beachten sie, dass dies nicht |pass| und |mag| mit |truedimen| zurücksetzen kann.
+% |reset=false| hat keine Auswirkungen und kann ein vorheriges
+% |reset|(|=true|), falls es dies gibt, nicht aufheben. Zum Beispiel, wenn sie
+% \begin{quote}
+% |\documentclass[landscape]{article}|\\
+% |\usepackage[twoside,reset,left=2cm]{geometry}|
+% \end{quote}
+% eingeben, mit |\ExecuteOptions{scale=0.9}| in |geometry.cfg|,
+% dann bleiben |landscape| und |left=2cm| wirksam
+% und |scale=0.9| und |twoside| sind unwirksam.
+% \item[\onlypre mag] setzt den Vergrößerungswert (\cs{mag}) und modifiziert automatisch
+% \cs{hoffset} und \cs{voffset} entsprechend der Vergrößerung.
+% |mag=|\meta{Wert}. Beachten sie, dass \meta{Wert} ein ganzzahliger Wert sein sollte,
+% wobei 1000 die Normalgröße ist. Ein Beispiel: |mag=1414| mit |a4paper|
+% bietet eine erweiterte Druckgröße in |a3paper|, welches $1.414$
+% (=$\sqrt{2}$) mal größer als |a4paper| ist. Die Vergrößerung der Schriftart benötigt extra
+% Speicherplatz. \textbf{Beachten sie, dass die Einstellung über jeder anderen
+% Einstellung mit `true' Maßen stehen sollte, solchen Maßen wie |1.5truein|, |2truecm|
+% und so weiter.} Lesen sie auch die |truedimen| Option.
+% \item[\onlypre truedimen] verändert alle internen expliziten Maßwerte in
+% \textit{true} Maße, z.\,B. wird |1in| zu |1truein|.
+% Typischerweise wird diese Option zusammen mit der |mag| Option genutzt. Beachten sie, dass
+% dies unwirksam gegenüber extern angegebenen Maßen ist. Ein Beispiel:
+% Wenn sie ``\texttt{mag=1440, margin=10pt, truedimen}'' einstellen, dann sind die Ränder nicht
+% `true' aber vergrößert. Wenn sie exakte Ränder wollen, dann sollten sie stattdessen wie folgt definieren
+% ``\texttt{mag=1440, margin=10truept, truedimen}''.
+% \item[\onlypre pass] deaktiviert alle geometry Optionen und Berechnungen,
+% ausgenommen |verbose| und |showframe|. Es ist unabhängig von der Reihenfolge und kann
+% für das Überprüfen des Seitenlayouts der Dokumentklasse, sonstiger Pakete
+% und manuellen Einstellungen ohne \Gm\ genutzt werden.
+% \item[\onlypre showframe] zeigt sichtbare Ränder um den Textbereich und die Seite
+% und die Linien für den Kopf und den Fuß auf der ersten Seite.
+% \item[\onlypre showcrop] druckt Schnittmarken auf jede Ecke des benutzerdefinierten
+% Layoutbereichs.
+% \end{Options}
+%
+% \section{Verarbeitungsoptionen}\label{sec:process}
+%
+% \subsection{Reihenfolge des Ladens}\label{sec:loadorder}
+%
+% Wenn es eine |geometry.cfg| gibt, irgendwo wo es \TeX{} finden kann, dann lädt \Gm\ diese
+% zuerst. Ein Beispiel: In |geometry.cfg| können sie
+% |\ExecuteOptions{a4paper}| schreiben, welches A4-Format als das Standardpapier angibt.
+% Grundlegend können sie alle Optionen, die in \Gm\ definiert sind, mit
+% |\ExecuteOptions{}| nutzen.
+%
+% Die Reihenfolge des Ladens in der Präambel ihres Dokuments ist wie folgt:
+% \begin{enumerate}
+% \item |geometry.cfg|, wenn sie existiert.
+% \item Optionen, die mit |\documentclass[|\meta{Optionen}|]{...}| angegeben werden.
+% \item Optionen, die mit |\usepackage[|\meta{Optionen}|]{geometry}| angegeben werden.
+% \item Optionen, die mit |\geometry{|\meta{Optionen}|}| angegeben werden. Die jeweilige Option
+% kann mehrfach aufgerufen werden. (Die |reset| Option wird alle Optionen,
+% die in |\usepackage{geometry}| oder |\geometry| angegeben wurden,
+% zurücksetzen.)
+% \end{enumerate}
+%
+% \subsection{Reihenfolge der Optionen}\label{sec:optionorder}
+%
+% Die Spezifikation der \Gm\ Optionen ist unabhängig von der Reihenfolge
+% und überschreibt die vorherigen gleichartigen Einstellungen.
+% Ein Beispiel:
+% \begin{center}
+% |[left=2cm, right=3cm]| ist äquivalent zu
+% |[right=3cm, left=2cm]|.
+% \end{center}
+% Der mehrfache Aufruf der Optionen überschreibt die jeweiligen vorherigen
+% Einstellungen. Auch hier ein Beispiel:
+% \begin{center}
+% |[verbose=true, verbose=false]| das Ergebnis ist |verbose=false|.
+% \end{center}
+% |[hmargin={3cm,2cm}, left=1cm]| ist das Gleiche wie |hmargin={1cm,2cm}|,
+% wobei der linke (oder innere) Rand durch |left=1cm| überschrieben wird.
+%
+% |reset| und |mag| sind Ausnahmen.
+% Die |reset| Option entfernt alle geometry Optionen (ausgenommen |pass|)
+% davor. Wenn sie
+% \begin{quote}
+% |\documentclass[landscape]{article}|\\
+% |\usepackage[margin=1cm,twoside]{geometry}|\\
+% |\geometry{a5paper, reset, left=2cm}|
+% \end{quote}
+% einstellen, dann werden |margin=1cm| (Rand), |twoside| und |a5paper| entfernt und
+% ist gelegentlich äquivalent zu
+% \begin{quote}
+% |\documentclass[landscape]{article}|\\
+% |\usepackage[left=2cm]{geometry}|
+% \end{quote}
+%
+% Die |mag| Option sollte vor jeder anderen Einstellungen mit
+% `true' Länge, solche wie |left=1.5truecm|, |width=5truein| und so weiter, stehen.
+% Die |\mag| Option kann vor dem Aufruf dieses Pakets stehen.
+%
+% \subsection{Priorität}\label{sec:priority}
+%
+% Es gibt verschiedene Wege die Maße des \gpart{Körpers} einzustellen:
+% |scale|, |total|, |text| und |lines|. Das \Gm\ Paket gibt den konkreteren Spezifikationen
+% eine höhere Priorität. Hier ist die Prioritätsregel
+% für den \gpart{Textkörper}.
+% \[\begin{array}{c}
+% \textrm{Priorität:}\qquad\textrm{niedrig}\quad
+% \longrightarrow\quad\textrm{hoch}\\[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}\]
+% Ein Beispiel:
+% \begin{quote}
+% |\usepackage[hscale=0.8, textwidth=7in, width=18cm]{geometry}|
+% \end{quote}
+% ist das Gleiche wie |\usepackage[textwidth=7in]{geometry}|. Ein weiteres Beispiel:
+% \begin{quote}
+% |\usepackage[lines=30, scale=0.8, text=7in]{geometry}|
+% \end{quote}
+% resultiert in \texttt{[lines=30, textwidth=7in]}.
+%
+% \subsection{Standards}\label{sec:defaults}
+%
+% Dieses Kapitel summiert die Standardeinstellungen für die automatische Vervollständigung,
+% die später beschrieben wird.
+%
+% Das Standardverhältnis für den vertikalen Rand ist $2/3$, namentlich,
+% \begin{equation}
+% |top| : |bottom| = 2 : 3 \qquad\textit{Standard}.
+% \end{equation}
+% Was den horizontalen Rand betrifft, hängen die Standardwerte davon ab,
+% ob das Dokument einseitig oder zweiseitig ist,
+% \begin{equation}
+% |left|\;(|inner|) : |right|\;(|outer|)
+% = \left\{ \begin{array}{ll}
+% 1 : 1 \qquad\textit{Standard für oneside},\\
+% 2 : 3 \qquad\textit{Standard für twoside}.
+% \end{array}\right.
+% \end{equation}
+% Offensichtlich ist, dass der Standard für den horizontalen Rand für einseitig (oneside) `centering' ist.
+%
+% Das \Gm\ Paket besitzt folgende Standardeinstellungen für
+% \textit{onesided (einseitige)} Dokumente:
+% \begin{itemize}\setlength{\itemsep}{-.5\parsep}
+% \item |scale=0.7| (\gpart{Textkörper} ist $0.7 \times \gpart{Papier}$)
+% \item |marginratio={1:1, 2:3}| (1:1 für horizontal und 2:3 für vertikale Ränder)
+% \item |ignoreall| (der Kopf, der Fuß, die Randnotizen sind ausgeschlossen,
+% wenn die Größe des \gpart{Körpers (body)} berechnet wird.)
+% \end{itemize}
+% Für \textit{twosided (zweiseitige)} Dokumente mit der |twoside| Option, ist die Standardeinstellung
+% die gleiche, wie bei \textit{onesided (einseitigen)}, ausgenommen, dass das horizontale Randverhältnis
+% auf |2:3| gesetzt wird.
+%
+% Zusätzliche Optionen überschreiben die vorher angegebenen Maße.\\
+%
+% \subsection{Autovervollständigung} \label{sec:rules}
+%
+% Abbildung~\ref{fig:specrule} zeigt schematisch, wie viele Spezifikationsmuster
+% existieren und wie sie die Zweideutigkeiten der Spezifikationen lösen können.
+% Jede Achse zeigt die Anzahl der Längen,
+% die explizit für den Körper und die Ränder angegeben werden müssen. \Ss($m$,$b$) zeigt die
+% Spezifikation mit einer Menge an Zahlen $(\gpart{Rand},\gpart{Körper})=(m,b)$.
+%
+% Ein Beispiel: Die Spezifikation |width=14cm, left=3cm| ist kategorisiert in
+% \Ss(1,1), welches eine ad\-äquate Spezifikation ist. Wenn sie
+% |right=4cm| hinzufügen, dann wird es \Ss(2,1) sein und überspezifiziert.
+% Wenn nur |width=14cm| gegeben ist, dann ist es in \Ss(0,1) unterspezifiziert.
+%
+% Das \Gm\ Paket besitzt einen Autovervollständigungsmechanismus, der, wenn
+% die Layoutparameter unter- oder überspezifiziert sind,
+% die Unstimmigkeiten herausarbeitet und dann die Standards nutzt und andere
+% Verhältnisse. Hier sind die Spezifikationen und die Vervollständigungsregeln.
+%
+% \begin{figure}[h]
+% \centering
+% {\unitlength=1pt
+% \begin{picture}(400,150)(40,0)
+% \put(1,49){\makebox(90,49)[r]{\large 0}}
+% \put(1,1){\makebox(70,99)[r]{\large \gpart{Textkörper}}}
+% \put(1,1){\makebox(90,49)[r]{\large 1}}
+% \put(100,100){\makebox(99,20){\large 0}}
+% \put(100,50){\framebox(99,49){}}
+% \put(100,80){\makebox(99,15){\Ss(0,0)}}
+% \put(100,50){\makebox(99,49){benutze |scale|}}
+% {\linethickness{1pt}%
+% \put(150,35){\line(0,1){30}}
+% \put(150,35){\line(-1,3){4}}
+% \put(150,35){\line(1,3){4}}}
+% \put(100,0){\framebox(99,49){}}
+% \put(100,2){\makebox(99,15){\Ss(0,1)}}
+% \put(100,0){\makebox(99,49){nutze |marginratio|}}
+% \put(200,120){\makebox(99,12){\large \gpart{Rand}}}
+% \put(200,100){\makebox(99,20){\large 1}}
+% \put(200,50){\framebox(99,49){benutze |scale|}}
+% \put(200,55){\makebox(89,10)[r]{\scriptsize\shortstack[l]{wenn |ratio|\\angegeben}}}
+% \put(200,2){\makebox(99,15){\Ss(1,1)}}
+% {\linethickness{1pt}%
+% \put(250,35){\line(0,1){30}}
+% \put(250,35){\line(-1,3){4}}
+% \put(250,35){\line(1,3){4}}}
+% {\linethickness{1pt}%
+% \put(225,25){\line(-1,0){35}}
+% \put(225,25){\line(-3,-1){12}}
+% \put(225,25){\line(-3,1){12}}}
+% \put(200,80){\makebox(99,15){\Ss(1,0)}}
+% \put(200,0){\framebox(99,49){\textcolor{red}{\textit{lösbar}}}}
+% \put(300,100){\makebox(99,20){\large 2}}
+% \put(300,80){\makebox(99,15){\Ss(2,0)}}
+% \put(300,50){\framebox(99,49){\textcolor{red}{\textit{lösbar}}}}
+% \put(300,0){\framebox(99,49){vergesse den |body|}}
+% \put(300,2){\makebox(99,15){\Ss(2,1)}}
+% {\linethickness{1pt}%
+% \multiput(290,65)(5,0){6}{\line(1,0){3}}
+% \put(320,65){\line(-3,-1){12}}
+% \put(320,65){\line(-3,1){12}}}
+% {\linethickness{1pt}%
+% \put(350,65){\line(0,-1){30}}
+% \put(350,65){\line(-1,-3){4}}
+% \put(350,65){\line(1,-3){4}}}
+% \end{picture}}
+% \caption[Spezifikationen und Komplettierungsregeln]{%
+% \begin{minipage}[t]{.7\textwidth}\raggedright\small
+% Die Spezifikationen \Ss(0,0) zu \Ss(2,1) und die Komplettierungsregeln
+% (Pfeile). Spalten- und Zeilennummern bezeichnen die Anzahl der explizit
+% angegebenen Längen für den Rand und den Körper. \Ss($m$,$b$) bezeichnet eine
+% Spezifikation mit einer Menge an Zahlen $(\gpart{Rand},\gpart{Körper})=(m,b)$.
+% \end{minipage}}
+% \label{fig:specrule}
+% \end{figure}
+%
+% \begin{Spec}
+% \item[\Ss(0,0)]
+% Es ist nichts angegeben. Das \Gm\ Paket gibt für den \gpart{body (Körper)} den
+% Standard |scale| ($=0.7$) vor. \\ Ein Beispiel: |width (Breite)| wird auf
+% $|0.7|\times|layoutwidth|$ eingestellt. Beachten sie, dass standardmäßig die |layoutwidth|
+% und |layoutheight| (Layoutbreite und -höhe) gleich der |\paperwidth| und |\paperheight| (Papierbreite und -höhe)
+% sein werden.
+% Demnach wird \Ss(0,0) zu \Ss(0,1). Siehe auch \Ss(0,1).
+% \bigskip
+%
+% \item[\Ss(0,1)]
+% Nur der \gpart{body} ist angegeben, wie z.\,B. |width=7in|, |lines=20|,
+% |body={20cm,24cm}|, |scale=0.9| und so weiter.
+% Dann setzt \Gm\ die Ränder mithilfe des Randverhältnisses.
+% Falls kein Verhältnis angegeben ist, wird das Standardverhältnis genutzt.
+% Das Standardverhältnis für das vertikale Randverhältnis ist wie folgt definiert:
+% \begin{equation}
+% |top| : |bottom| = 2 : 3 \qquad\textit{Standard}.
+% \end{equation}
+% Was das horizontale Verhältnis betrifft, hängt das Standardverhältnis davon ab,
+% ob das Dokument einseitig oder zweiseitig ist.
+% \begin{equation}
+% |left|\;(|inner|) : |right|\;(|outer|)
+% = \left\{ \begin{array}{ll}
+% 1 : 1 \qquad\textit{Der Standard bei einseitig},\\
+% 2 : 3 \qquad\textit{Der Standard bei zweiseitig}.
+% \end{array}\right.
+% \end{equation}
+% Wenn zum Beispiel auf A4-Papier die |height=22cm| angegeben ist,
+% dann berechnet \Gm\ den |top (oberen)| Rand wie folgt:
+% \begin{equation}
+% \begin{array}{ll}
+% |top| &= ( |layoutheight| - |height| ) \times 2/5 \\
+% &= (29.7-22)\times2/5 = 3.08\textrm{(cm)}
+% \end{array}
+% \end{equation}
+% Demnach sind der |top (obere)| Rand und die |height (Höhe)| des Körpers bestimmt wurden, die
+% Spezifikation für die Vertikale wird also zu \Ss(1,1) und
+% alle Parameter können gelöst werden.
+% \bigskip
+%
+% \item[\Ss(1,0)]
+% Nur ein Rand ist angegeben, wie |bottom=2cm|, |left=1in|,
+% |top=3cm| und so weiter.
+%
+% \begin{itemize}
+% \item \textbf{Wenn das Randverhältnis \textit{nicht} angegeben ist}, dann nimmt \Gm\
+% den Standard für |scale| ($=0.7$) für den \gpart{body} an.
+% Wenn beispielsweise |top=2.4cm| angegeben ist, dann setzt \Gm\
+% \begin{center}
+% $|height|= |0.7|\times|layoutheight|$
+% ~~($=|0.7\paperheight|$ by default),
+% \end{center}
+% dann wird \Ss(1,0) zu \Ss(1,1), wobei der |bottom| mit
+% $|layoutheight|-(|height|+|top|)$ berechnet wird und in 6.51\,cm auf A4-Papier resultiert,
+% wenn die Layoutgröße gleich der Papiergröße ist.
+% \medskip
+% \item \textbf{Wenn das Randverhältnis angegeben ist}, wie
+% |hmarginratio={1:2}|, |vratio={3:4}| und so weiter,
+% dann setzt \Gm\ die anderen% Ränder mit dem gegebenen Randverhältnis.
+% Falls z.\,B. eine Menge an Optionen ``|top=2.4cm,vratio={3:4}|'' spezifiziert wurde,
+% dann setzt \Gm\ den |bottom| auf den berechneten Wert von |3.2cm|
+% \begin{center}
+% $|bottom|= |top|/3\times4 = 3.2\textrm{cm}$
+% \end{center}
+% Demnach wird \Ss(1,0) zu \Ss(2,0).
+% \end{itemize}
+%
+% Beachten sie, dass in der Version 4 oder früher das Berechnungsverfahren ein anderes war.
+% Deshalb wird, wenn sie in Version 5 und 4 die gleichen Werte eingeben,
+% das Ergebnis nicht gleich sein.
+% Wenn nur |top=2.4cm| gegeben ist,
+% dann bekommen sie in Version 4 oder früher |bottom=2.4cm|, aber sie werden
+% |bottom=6.51cm| bei Version 5 erhalten.
+% \bigskip
+%
+% \item[\Ss(2,1)]
+% Der \gpart{body (Körper)} und zwei \gpart{margins (Ränder)} sind angegeben, wie z.\,B.
+% |vdivide={1in,8in,1.5in}|, ``|left=3cm,width=13cm,right=4cm|'' und
+% so weiter. Seit \Gm\ grundsätzlich die Priorität an die \gpart{margins} gibt,
+% wenn die Maße überspezifiziert sind, vergisst \Gm\ den \gpart{body} und setzt diesen zurück.
+% Ein Beispiel: Wenn sie
+% \begin{center}
+% |\usepackage[a4paper,left=3cm,width=13cm,right=4cm]{geometry}|,
+% \end{center}
+% angeben, dann wird die |width (Breite)| auf 14\,cm zurückgesetzt, da die Breite von A4-Papier 21\,cm
+% ist.
+% \end{Spec}
+%
+% \section{Verändern des Layouts innerhalb des Dokuments}\label{sec:midchange}
+%
+% Die Version 5 bietet die neuen Befehle \cs{newgeometry\{$\cdots$\}} und
+% und \cs{restoregeometry} an, welche es ihnen erlauben, das Seitenlayout im Dokuments zu verändern.
+% Nicht wie \cs{geometry} in der Präambel,
+% ist \cs{newgeometry} nur nach |\begin{document}| verfügbar.
+% Es setzt alle Optionen zurück, ausgenommen die,
+% die sich auf die Papiergröße beziehen -- |landscape|, |portrait| -- und Papiergrößenoptionen
+% (wie |papersize|, |paper=a4paper| und so weiter), die nicht
+% durch \cs{newgeometry} geändert werden können.
+%
+% Der Befehl \cs{restoregeometry} sichert das in der Präambel (vor |\begin{document}|) angegebene Seitenlayout,
+% welches mit |\usepackage{geometry}|, \cs{geometry} und deren Optionen erzeugt wurde.
+%
+% Beachten sie, dass beide, \cs{newgeometry} und \cs{restoregeometry}, ein
+% |\clearpage| einfügen, da wo sie aufgerufen werden.
+%
+% Es folgt ein Beispiel für das Verändern des Layouts im Dokument. Das Layout L1 wird wie folgt angegeben:
+% |hmargin=3cm| (|left (linker)| und |right (rechter)| Rand sind |3cm|
+% lang), dies wird in L2 in |left=3cm|, |right=1cm| und
+% |bottom=0.1cm| geändert. Das Layout L1 wird mit \cs{restoregeometry}
+% gesichert.
+% \begin{center}
+% \begin{minipage}{.8\textwidth}
+% |\usepackage[hmargin=3cm]{geometry}|\\
+% |\begin{document}|\\
+% \medskip
+% \hspace{1cm}\fbox{Layout L1}\\
+% \medskip
+% |\newgeometry{left=3cm,right=1cm,bottom=0.1cm}|\\
+% \medskip
+% \hspace{1cm}\fbox{Layout L2 (neu)}\\
+% \medskip
+% |\restoregeometry|\\
+% \medskip
+% \hspace{1cm}\fbox{Layout L1 (wiederhergestellt)}\\
+% \medskip
+% |\newgeometry{margin=1cm,includefoot}|\\
+% \medskip
+% \hspace{1cm}\fbox{Layout L3 (neu)}\\
+% \medskip
+% |\end{document}|
+% \end{minipage}%
+% \end{center}
+% \begin{center}
+% \centering\small
+% {\unitlength=.8pt
+% \begin{picture}(450,180)(0,0)
+% \put(0,165){\makebox(95,12){(gesichert)}}
+% \put(15,135){\framebox(65,10){\gpart{Kopf}}}
+% \put(15,60){\framebox(65,70){\gpart{Textkörper}}}
+% \put(15,45){\makebox(65,12){\gpart{Fuß}}}
+% \put(15,45){\line(1,0){65}}
+% \put(0,20){\framebox(95,140){}}
+% \put(0,0){\makebox(95,20){L1}}
+% \put(104,90){\circle*{4}}
+% \put(110,90){\circle*{4}}
+% \put(116,90){\circle*{4}}
+% \put(125,165){\makebox(95,12){\cs{newgeometry}}}
+% \put(140,135){\framebox(71,10){\gpart{Kopf}}}
+% \put(140,33){\framebox(71,97){\gpart{Textkörper}}}
+% \put(140,21){\makebox(71,12){\gpart{Fuß}}}
+% \put(125,20){\framebox(95,140){}}
+% \put(125,0){\makebox(95,20){L2 (neu)}}
+% \put(229,90){\circle*{4}}
+% \put(235,90){\circle*{4}}
+% \put(241,90){\circle*{4}}
+% \put(250,165){\makebox(95,12){\cs{restoregeometry}}}
+% \put(265,135){\framebox(65,10){\gpart{Kopf}}}
+% \put(265,60){\framebox(65,70){\gpart{Textkörper}}}
+% \put(265,45){\makebox(65,12){\gpart{Fuß}}}
+% \put(265,45){\line(1,0){65}}
+% \put(250,20){\framebox(95,140){}}
+% \put(250,0){\makebox(95,20){L1 (wiederhergestellt)}}
+% \put(354,90){\circle*{4}}
+% \put(360,90){\circle*{4}}
+% \put(366,90){\circle*{4}}
+% \put(375,165){\makebox(95,12){\cs{newgeometry}}}
+% \put(383,41){\framebox(80,111){\gpart{Textkörper}}}
+% \put(383,29){\makebox(80,12){\gpart{Fuß}}}
+% \put(383,29){\line(1,0){80}}
+% \put(375,20){\framebox(95,140){}}
+% \put(375,0){\makebox(95,20){L3 (neu)}}
+% \end{picture}}
+% \end{center}
+%
+% Eine Menge von Befehlen |\savegeometry{|\meta{Name}|}| und
+% |\loadgeometry{|\meta{Name}|}| ist nützlich, wenn sie mehrere
+% verschiedene Layouts in ihrem Dokument nutzen wollen.
+% Ein Beispiel:
+% \begin{center}
+% \begin{verbatim}
+% \usepackage[hmargin=3cm]{geometry}
+% \begin{document}
+% L1
+% \newgeometry{left=3cm,right=1cm,bottom=0.1cm}
+% \savegeometry{L2}
+% L2 (neu, gespeichert)
+% \restoregeometry
+% L1 (wiederhergestellt)
+% \newgeometry{margin=1cm,includefoot}
+% L3 (neu)
+% \loadgeometry{L2}
+% L2 (geladen)
+% \end{document}
+% \end{verbatim}
+% \end{center}
+%
+% \section{Beispiele}
+%
+% \begin{enumerate}
+% \item Ein einseitiges Seitenlayout mit einem zentrierten Textbereich auf dem Papier:\\
+% Das sich anschließende Beispiel hat das gleiche Ergebnis, weil das horizontale Randverhältnis
+% auf |1:1| gesetzt ist, wie es bei einseitigen Dokumenten der Standard ist.
+% \begin{itemize}
+% \item |centering|
+% \item |marginratio=1:1|
+% \item |vcentering|
+% \end{itemize}
+%
+% \item Ein zweiseitiges Layout mit einem Versatz von 1\,cm für das Binden auf der Innenseite:\\
+% \begin{itemize}
+% \item |twoside, bindingoffset=1cm|
+% \end{itemize}
+% In diesem Fall ist die |textwidth (Textbreite)| kürzer als der Standard bei zweiseitigen Dokumenten
+% $0.7\times|1cm|$ ($=|0.7cm|$), weil die Standardbreite des
+% \gpart{body (Körpers)} mit |scale=0.7| eingestellt ist, was bedeutet,
+% $|width|=|0.7|\times|layoutwidth|$ ($=|0.7\paperwidth|$ standardmäßig).
+%
+% \item Ein Layout mit linkem, rechtem und oberem Rand (3\,cm, 2\,cm und
+% 2.5\,in), mit einer Texthöhe von 40 Zeilen und der Einbeziehung des Kopfes
+% und des Fußes auf der Seite in den \gpart{druckbaren Bereich}:\\
+% Die zwei Beispiele haben das gleiche Ergebnis.
+% \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 Ein Layout mit einer Höhe des \gpart{druckbaren Bereichs} von 10\,in, einem unteren Rand von
+% 2\,cm und der Standardbreite:\\ Der obere Rand wird automatisch berechnet.
+% Jede der unteren Lösungen erzeugt das gleiche Layout.
+% \begin{itemize}
+% \item |vdivide={*, 10in, 2cm}|
+% \item |bmargin=2cm, height=10in|
+% \item |bottom=2cm, textheight=10in|
+% \end{itemize}
+% Beachten sie, dass die Maße für \gpart{Kopf} and \gpart{Fuß} von der |Höhe|
+% des \gpart{druckbaren Bereichs} ausgeschlossen sind. Ein zusätzliches |includefoot| sorgt dafür,
+% dass der \cs{footskip (Fußbereich)} in die |totalheight (Gesamthöhe)| einbezogen wird. Deshalb ist in den unteren zwei
+% Fällen die |textheight (Texthöhe)| im vorhergehenden Layout kürzer als in letzterem
+% (mit exakt 10\,in) über dem \cs{footskip}. In anderen Worten,
+% |height| = |textheight| + |footskip| falls |includefoot=true| ist, in diesem Falle.
+% \begin{itemize}
+% \item |bmargin=2cm, height=10in, includefoot|
+% \item |bottom=2cm, textheight=10in, includefoot|
+% \end{itemize}
+%
+% \item Ein Layout mit einer \glen{textwidth (Textbreite)} und \glen{textheight (Texthöhe)} von 90\% des
+% Papiers und einem zentrierten \gpart{body}:
+% Jede der unteren Lösungen erzeugt das gleiche Seitenlayout, sofern
+% die |layoutwidth (Layoutbreite)| und die |layoutheight (Layouthöhe)| nicht geändert werden, also der Standard beibehalten
+% wird.
+% \begin{itemize}
+% \item |scale=0.9, centering|
+% \item |text={.9\paperwidth,.9\paperheight}, ratio=1:1|
+% \item |width=.9\paperwidth, vmargin=.05\paperheight, marginratio=1:1|
+% \item |hdivide={*,0.9\paperwidth,*}, vdivide={*,0.9\paperheight,*}|
+% (für einseitige Dokumente)
+% \item |margin={0.05\paperwidth,0.05\paperheight}|
+% \end{itemize}
+% Sie können ein |heightrounded| hinzufügen, um eine ``underfull vbox warning'' (Warnmeldung) wie
+% \begin{quote}\small
+% |Underfull \vbox (badness 10000) has occurred while \output is active|.
+% \end{quote}
+% zu vermeiden.
+% Lesen sie auch Kapitel~\ref{sec:body} für eine detaillierte Beschreibung zu |heightrounded|.
+%
+% \item Ein Layout, bei dem die Breite für die Randnotizen auf 3\,cm eingestellt ist und in
+% die Breite des \gpart{druckbaren Bereichs} einbezogen ist:\\ Die folgenden Beispiele erzeugen das Gleiche.
+% \begin{itemize}
+% \item |marginparwidth=3cm, includemp|
+% \item |marginpar=3cm, ignoremp=false|
+% \end{itemize}
+%
+% \item Ein Layout, bei dem der \gpart{body} das ganze Papier (A5-Papier im |landscape| Modus) einnimmt:\\
+% Die folgenden Beispiele sind gleich.
+% \begin{itemize}
+% \item |a5paper, landscape, scale=1.0|
+% \item |landscape=TRUE, paper=a5paper, margin=0pt|
+% \end{itemize}
+%
+% \item Ein Bildschirmgrößenlayout, verwendbar für Präsentationen mit dem PC oder dem Beamer:
+% \begin{verbatim}
+% \documentclass{slide}
+% \usepackage[screen,margin=0.8in]{geometry}
+% ...
+% \begin{slide}
+% ...
+% \end{slide}\end{verbatim}
+% \item Ein Layout mit vergrößerter Schrift und Zwischenräumen, von A4 auf A3:\\
+% Im unteren Fall ist die sich ergebende Papiergröße A3.
+% \begin{itemize}
+% \item |a4paper, mag=1414|.
+% \end{itemize}
+% Wenn sie ein Layout mit doppelt so großer Schriftgröße, aber ohne das
+% Verändern der Papiergröße wollen, dann tippen sie
+% \begin{itemize}
+% \item |letterpaper, mag=2000, truedimen|.
+% \end{itemize}
+% Sie können die |dvips| Option hinzufügen, das ist nützlich, um eine Vorschau der eigenen
+% Papiergröße zu betrachten, die durch |dviout| oder |xdvi| erzeugt wird.
+%
+% \item Verändern des Layouts auf der ersten Seite und Beibehalten der anderen Einstellungen
+% vor dem Laden von \Gm:\\ Benutzen sie die |pass| Option, |\newgeometry|
+% und |\restoregeometry|.
+% \begin{verbatim}
+% \documentclass{book}
+% \usepackage[pass]{geometry}
+% % 'pass' vernachlässigt das Paketlayout,
+% % so wird das originale 'book' Layout gespeichert.
+% \begin{document}
+% \newgeometry{margin=1cm}% Verändert die Maße der ersten Seite.
+% Seite 1
+% \restoregeometry % stellt das 'book' Layout wieder her.
+% Seite 2 und folgende
+% \end{document}\end{verbatim}
+%
+% \item Ein komplexes Seitenlayout:
+% \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}
+% Probieren sie das Layoutsetzen selbst und überprüfen sie, wie das Ergebnis ist. |:-)|
+% \end{enumerate}
+%
+% \section{Bekannte Probleme}
+% \begin{itemize}
+% \item Mit |mag| $\neq 1000$ und |truedimen|,
+% |paperwidth| und |paperheight| ist die Anzeige im verbose-Modus verschieden von der
+% wirklichen Größe der resultierenden PDF. Die PDF ist aber korrekt.
+%
+% \item Mit |mag| $\neq 1000$, \textit{no} |truedimen|
+% und \textsf{hyperref} sollte \textsf{hyperref} vor \Gm\ geladen werden.
+% Andernfalls wird die PDF-Größe fehlerhaft.
+%
+% \item Mit dem \textsf{crop} Paket und |mag| $\neq 1000$
+% arbeitet die |center|-Option von \textsf{crop} nicht gut.
+%
+% \end{itemize}
+%
+% \section{Danksagungen}
+% Der Autor würdigt hiermit die hilfreichen Vorschläge und Kommentare Vieler (in alphabetischer Reihenfolge ihrer
+% Familennamen):
+% Jean-Bernard Addor,
+% Frank Bennett,
+% Alexis Dimitriadis,
+% Friedrich Flender,
+% Adrian Heathcote,
+% Stephan Hennig,
+% Morten H\o{}gholm,
+% Jonathan Kew,
+% James Kilfiger,
+% Yusuke Kuroki,
+% Jean-Marc Lasgouttes,
+% Wlodzimierz Macewicz,
+% Frank Mittelbach,
+% Eckhard Neber,
+% Rolf Niepraschk,
+% Hans Fr.~Nordhaug,
+% Heiko Oberdiek,
+% Keith Reckdahl,
+% Peter Riocreux,
+% Will Robertson,
+% Pablo Rodriguez,
+% Nico Schlöemer,
+% Perry C.~Stearns,
+% Frank Stengel,
+% Plamen Tanovski,
+% Petr Uher,
+% Piet van Oostrum,
+% Vladimir Volovich,
+% Michael Vulis.
+%
+% \StopEventually{%
+% }
+%
+% \newgeometry{hmargin={4.8cm,1.2cm}, vmargin={1cm,1cm}, includeheadfoot, marginpar=3.8cm}
+% \section{Implementierung}
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+% This package requires the following packages:
+% \textsf{keyval}, \textsf{ifvtex}.
+% \begin{macrocode}
+\RequirePackage{keyval}%
+\RequirePackage{ifvtex}%
+% \end{macrocode}
+%
+% Internal switches are declared here.
+% \begin{macrocode}
+\newif\ifGm@verbose
+\newif\ifGm@landscape
+\newif\ifGm@swap@papersize
+\newif\ifGm@includehead
+\newif\ifGm@includefoot
+\newif\ifGm@includemp
+\newif\ifGm@hbody
+\newif\ifGm@vbody
+\newif\ifGm@heightrounded
+\newif\ifGm@showframe
+\newif\ifGm@showcrop
+\newif\ifGm@pass
+\newif\ifGm@resetpaper
+\newif\ifGm@layout
+\newif\ifGm@newgm
+% \end{macrocode}
+% \begin{macro}{\Gm@cnth}
+% \begin{macro}{\Gm@cntv}
+% The 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}
+% The binding offset for the inner margin.
+% \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@layoutwidth}
+% \begin{macro}{\Gm@layoutheight}
+% \begin{macro}{\Gm@layouthoffset}
+% \begin{macro}{\Gm@layoutvoffset}
+% The dimensions for the layout area.
+% \begin{macrocode}
+\newdimen\Gm@layoutwidth
+\newdimen\Gm@layoutheight
+\newdimen\Gm@layouthoffset
+\newdimen\Gm@layoutvoffset
+% \end{macrocode}
+% \end{macro}\end{macro}\end{macro}\end{macro}
+% \begin{macro}{\Gm@dimlist}
+% The token in which \LaTeX{} native dimensions can be stored.
+% \begin{macrocode}
+\newtoks\Gm@dimlist
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Gm@warning}
+% The macro to print warning messages.
+% \begin{macrocode}
+\def\Gm@warning#1{\PackageWarningNoLine{geometry}{#1}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifGm@preamble}
+% The macro executes the option given as an argument
+% only if it's specified in the preamble, as the options of
+% |\usepackage| and/or the argument of |\geometry|. Otherwise,
+% the macro would print the warning message and ignores
+% the option setting.
+% \begin{macrocode}
+\def\ifGm@preamble#1{%
+ \ifGm@newgm
+ \Gm@warning{`#1': not available in `\string\newgeometry'; skipped}%
+ \else
+ \expandafter\@firstofone
+ \fi}%
+% \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 horizontal \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
+% \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 with $0.7$.
+% \begin{macrocode}
+\def\Gm@Dhscale{0.7}%
+\def\Gm@Dvscale{0.7}%
+% \end{macrocode}
+% \end{macro}\end{macro}
+% \begin{macro}{\Gm@dvips}%
+% \begin{macro}{\Gm@dvipdfm}%
+% \begin{macro}{\Gm@pdftex}%
+% \begin{macro}{\Gm@luatex}%
+% \begin{macro}{\Gm@xetex}%
+% \begin{macro}{\Gm@vtex}%
+% The driver names.
+% \begin{macrocode}
+\def\Gm@dvips{dvips}%
+\def\Gm@dvipdfm{dvipdfm}%
+\def\Gm@pdftex{pdftex}%
+\def\Gm@luatex{luatex}%
+\def\Gm@xetex{xetex}%
+\def\Gm@vtex{vtex}%
+% \end{macrocode}
+% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro}
+% \begin{macro}{\Gm@true}%
+% \begin{macro}{\Gm@false}%
+% The macros for |true| and |false|.
+% \begin{macrocode}
+\def\Gm@true{true}%
+\def\Gm@false{false}%
+% \end{macrocode}
+% \end{macro}\end{macro}
+% \begin{macro}{\Gm@orgpw}
+% \begin{macro}{\Gm@orgph}
+% These macros keep original paper (media) size intact.
+% \begin{macrocode}
+\edef\Gm@orgpw{\the\paperwidth}%
+\edef\Gm@orgph{\the\paperheight}%
+% \end{macrocode}
+% \end{macro}\end{macro}
+% \begin{macro}{\Gm@savelength}
+% The macro saves the specified length to |\Gm@restore|.
+% \begin{macrocode}
+\def\Gm@savelength#1{%
+ \g@addto@macro\Gm@restore{\expandafter\noexpand\expandafter\csname
+ #1\endcsname\expandafter=\expandafter\the\csname #1\endcsname\relax}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Gm@saveboolean}
+% The macro saves the specified boolean to |\Gm@restore|.
+% \begin{macrocode}
+\def\Gm@saveboolean#1{%
+ \csname if#1\endcsname
+ \g@addto@macro\Gm@restore{\expandafter\noexpand\csname #1true\endcsname}%
+ \else
+ \g@addto@macro\Gm@restore{\expandafter\noexpand\csname #1false\endcsname}%
+ \fi}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Gm@restore}
+% The initialization for |\Gm@restore|.
+% \begin{macrocode}
+\def\Gm@restore{}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Gm@save}
+% The definition of the macro saving the real lengths
+% \LaTeX\ options.
+% \begin{macrocode}
+\def\Gm@save{%
+ \Gm@savelength{paperwidth}%
+ \Gm@savelength{paperheight}%
+ \Gm@savelength{textwidth}%
+ \Gm@savelength{textheight}%
+ \Gm@savelength{evensidemargin}%
+ \Gm@savelength{oddsidemargin}%
+ \Gm@savelength{topmargin}%
+ \Gm@savelength{headheight}%
+ \Gm@savelength{headsep}%
+ \Gm@savelength{topskip}%
+ \Gm@savelength{footskip}%
+ \Gm@savelength{baselineskip}%
+ \Gm@savelength{marginparwidth}%
+ \Gm@savelength{marginparsep}%
+ \Gm@savelength{columnsep}%
+ \Gm@savelength{hoffset}%
+ \Gm@savelength{voffset}
+ \Gm@savelength{Gm@layoutwidth}%
+ \Gm@savelength{Gm@layoutheight}%
+ \Gm@savelength{Gm@layouthoffset}%
+ \Gm@savelength{Gm@layoutvoffset}%
+ \Gm@saveboolean{@twocolumn}%
+ \Gm@saveboolean{@twoside}%
+ \Gm@saveboolean{@mparswitch}%
+ \Gm@saveboolean{@reversemargin}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Gm@initnewgm}
+% The macro initializes the parameters for layout
+% in |\newgeometry|.
+% \begin{macrocode}
+\def\Gm@initnewgm{%
+ \Gm@passfalse
+ \Gm@swap@papersizefalse
+ \Gm@dimlist={}
+ \Gm@hbodyfalse
+ \Gm@vbodyfalse
+ \Gm@heightroundedfalse
+ \Gm@includeheadfalse
+ \Gm@includefootfalse
+ \Gm@includempfalse
+ \let\Gm@width\@undefined
+ \let\Gm@height\@undefined
+ \let\Gm@textwidth\@undefined
+ \let\Gm@textheight\@undefined
+ \let\Gm@lines\@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
+ \Gm@layoutfalse
+ \Gm@layouthoffset\z@
+ \Gm@layoutvoffset\z@
+ \Gm@bindingoffset\z@}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Gm@initall}
+% This initialization is called as soon as the package is load
+% It's also called as soon as |reset| option is specified.
+% \begin{macrocode}
+\def\Gm@initall{%
+ \let\Gm@driver\@empty
+ \let\Gm@truedimen\@empty
+ \let\Gm@paper\@undefined
+ \Gm@resetpaperfalse
+ \Gm@landscapefalse
+ \Gm@verbosefalse
+ \Gm@showframefalse
+ \Gm@showcropfalse
+ \Gm@newgmfalse
+ \Gm@initnewgm}%
+% \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 for boolean option processing.
+% \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}}%
+% \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| |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}}%
+% \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}%
+% \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{%
+ \begingroup\setlength\@tempdima{#2}%
+ \expandafter\xdef\csname Gm@#1\endcsname{\the\@tempdima}\endgroup}%
+\def\Gm@defbycnt#1#2{%
+ \begingroup\setcounter{Gm@tempcnt}{#2}%
+ \expandafter\xdef\csname Gm@#1\endcsname{\the\value{Gm@tempcnt}}\endgroup}%
+% \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}%
+% \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}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Gm@detiv}
+% This macro determines the fourth length(|#4|) from |#1|(\glen{layoutwidth}
+% or \glen{layoutheight}), |#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 Gm@layout#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}}%
+% \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 Gm@layout#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
+ \expandafter\Gm@sep@ratio\Gm@Dmratio\relax
+ \else
+ \expandafter\Gm@sep@ratio\Gm@mratio\relax
+ \ifnum\@tempcntb>\z@\else
+ \Gm@warning{margin ratio a:b should be non-zero; default used}%
+ \expandafter\Gm@sep@ratio\Gm@Dmratio\relax
+ \fi
+ \fi
+ \@tempdimb=\@tempdima
+ \advance\@tempcntb\@tempcnta
+ \divide\@tempdima\@tempcntb
+ \multiply\@tempdima\@tempcnta
+ \advance\@tempdimb-\@tempdima
+ \expandafter\edef\csname Gm@#2\endcsname{\the\@tempdima}%
+ \expandafter\edef\csname Gm@#3\endcsname{\the\@tempdimb}}%
+% \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@
+ \if#1h
+ \let\Gm@mratio\Gm@hmarginratio
+ \edef\Gm@Dmratio{\if@twoside\Gm@Dhratiotwo\else\Gm@Dhratio\fi}%
+ \else
+ \let\Gm@mratio\Gm@vmarginratio
+ \edef\Gm@Dmratio{\Gm@Dvratio}%
+ \fi
+% \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
+ \Gm@defbylen{width}{\Gm@Dhscale\Gm@layoutwidth}%
+ \else
+ \Gm@defbylen{height}{\Gm@Dvscale\Gm@layoutheight}%
+ \fi
+ \Gm@detiiandiii{#2}{#3}{#4}%
+% \end{macrocode}
+% Case |001| (=1) with |right|(|bottom|) fixed:
+% \begin{macrocode}
+ \or
+ \ifx\Gm@mratio\@undefined
+ \if#1h
+ \Gm@defbylen{width}{\Gm@Dhscale\Gm@layoutwidth}%
+ \else
+ \Gm@defbylen{height}{\Gm@Dvscale\Gm@layoutheight}%
+ \fi
+ \setlength\@tempdimc{\@nameuse{Gm@#4}}%
+ \Gm@detiiandiii{#2}{#3}{#4}%
+ \expandafter\let\csname Gm@#2\endcsname\@undefined
+ \Gm@defbylen{#4}{\@tempdimc}%
+ \else
+ \Gm@setbyratio[f]{#1}{#4}{#3}%
+ \fi
+ \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
+ \ifx\Gm@mratio\@undefined
+ \if#1h
+ \Gm@defbylen{width}{\Gm@Dhscale\Gm@layoutwidth}%
+ \else
+ \Gm@defbylen{height}{\Gm@Dvscale\Gm@layoutheight}%
+ \fi
+ \setlength\@tempdimc{\@nameuse{Gm@#3}}%
+ \Gm@detiiandiii{#2}{#4}{#3}%
+ \expandafter\let\csname Gm@#2\endcsname\@undefined
+ \Gm@defbylen{#3}{\@tempdimc}%
+ \else
+ \Gm@setbyratio[b]{#1}{#3}{#4}%
+ \fi
+ \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}%
+% \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
+ }%
+% \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}%
+% \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}%
+% \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}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Gm@setlength}
+% This macro stores \LaTeX{} native dimensions, which are stored and
+% set afterwards.
+% \begin{macrocode}
+\def\Gm@setlength#1#2{%
+ \let\Gm@len=\relax\let\Gm@td=\relax
+ \edef\addtolist{\noexpand\Gm@dimlist=%
+ {\the\Gm@dimlist \Gm@len{#1}{#2}}}\addtolist}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Gm@expandlengths}
+% This macro processes \cs{Gm@dimlist}.
+% \begin{macrocode}
+\def\Gm@expandlengths{%
+ \def\Gm@td{\Gm@truedimen}%
+ \def\Gm@len##1##2{\setlength{##1}{##2}}%
+ \the\Gm@dimlist}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Gm@setsize}
+% The macro sets |paperwidth| and |paperheight| dimensions
+% using \cs{Gm@setlength} macro.
+% \begin{macrocode}
+\def\Gm@setsize#1(#2,#3)#4{%
+ \let\Gm@td\relax
+ \expandafter\Gm@setlength\csname #1width\endcsname{#2\Gm@td #4}%
+ \expandafter\Gm@setlength\csname #1height\endcsname{#3\Gm@td #4}%
+ \ifGm@landscape\Gm@swap@papersizetrue\else\Gm@swap@papersizefalse\fi}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Gm@setpaper@ifpre}
+% The macro changes the paper size.
+% \begin{macrocode}
+\def\Gm@setpaper@ifpre#1{%
+ \ifGm@preamble{#1}{\def\Gm@paper{#1}\@nameuse{Gm@#1}{paper}}}%
+% \end{macrocode}
+% \end{macro}
+% Various paper size are defined here.
+% \begin{macrocode}
+\@namedef{Gm@a0paper}#1{\Gm@setsize{#1}(841,1189){mm}}% ISO A0
+\@namedef{Gm@a1paper}#1{\Gm@setsize{#1}(594,841){mm}}% ISO A1
+\@namedef{Gm@a2paper}#1{\Gm@setsize{#1}(420,594){mm}}% ISO A2
+\@namedef{Gm@a3paper}#1{\Gm@setsize{#1}(297,420){mm}}% ISO A3
+\@namedef{Gm@a4paper}#1{\Gm@setsize{#1}(210,297){mm}}% ISO A4
+\@namedef{Gm@a5paper}#1{\Gm@setsize{#1}(148,210){mm}}% ISO A5
+\@namedef{Gm@a6paper}#1{\Gm@setsize{#1}(105,148){mm}}% ISO A6
+\@namedef{Gm@b0paper}#1{\Gm@setsize{#1}(1000,1414){mm}}% ISO B0
+\@namedef{Gm@b1paper}#1{\Gm@setsize{#1}(707,1000){mm}}% ISO B1
+\@namedef{Gm@b2paper}#1{\Gm@setsize{#1}(500,707){mm}}% ISO B2
+\@namedef{Gm@b3paper}#1{\Gm@setsize{#1}(353,500){mm}}% ISO B3
+\@namedef{Gm@b4paper}#1{\Gm@setsize{#1}(250,353){mm}}% ISO B4
+\@namedef{Gm@b5paper}#1{\Gm@setsize{#1}(176,250){mm}}% ISO B5
+\@namedef{Gm@b6paper}#1{\Gm@setsize{#1}(125,176){mm}}% ISO B6
+\@namedef{Gm@c0paper}#1{\Gm@setsize{#1}(917,1297){mm}}% ISO C0
+\@namedef{Gm@c1paper}#1{\Gm@setsize{#1}(648,917){mm}}% ISO C1
+\@namedef{Gm@c2paper}#1{\Gm@setsize{#1}(458,648){mm}}% ISO C2
+\@namedef{Gm@c3paper}#1{\Gm@setsize{#1}(324,458){mm}}% ISO C3
+\@namedef{Gm@c4paper}#1{\Gm@setsize{#1}(229,324){mm}}% ISO C4
+\@namedef{Gm@c5paper}#1{\Gm@setsize{#1}(162,229){mm}}% ISO C5
+\@namedef{Gm@c6paper}#1{\Gm@setsize{#1}(114,162){mm}}% ISO C6
+\@namedef{Gm@b0j}#1{\Gm@setsize{#1}(1030,1456){mm}}% JIS B0
+\@namedef{Gm@b1j}#1{\Gm@setsize{#1}(728,1030){mm}}% JIS B1
+\@namedef{Gm@b2j}#1{\Gm@setsize{#1}(515,728){mm}}% JIS B2
+\@namedef{Gm@b3j}#1{\Gm@setsize{#1}(364,515){mm}}% JIS B3
+\@namedef{Gm@b4j}#1{\Gm@setsize{#1}(257,364){mm}}% JIS B4
+\@namedef{Gm@b5j}#1{\Gm@setsize{#1}(182,257){mm}}% JIS B5
+\@namedef{Gm@b6j}#1{\Gm@setsize{#1}(128,182){mm}}% JIS B6
+\@namedef{Gm@ansiapaper}#1{\Gm@setsize{#1}(8.5,11){in}}%
+\@namedef{Gm@ansibpaper}#1{\Gm@setsize{#1}(11,17){in}}%
+\@namedef{Gm@ansicpaper}#1{\Gm@setsize{#1}(17,22){in}}%
+\@namedef{Gm@ansidpaper}#1{\Gm@setsize{#1}(22,34){in}}%
+\@namedef{Gm@ansiepaper}#1{\Gm@setsize{#1}(34,44){in}}%
+\@namedef{Gm@letterpaper}#1{\Gm@setsize{#1}(8.5,11){in}}%
+\@namedef{Gm@legalpaper}#1{\Gm@setsize{#1}(8.5,14){in}}%
+\@namedef{Gm@executivepaper}#1{\Gm@setsize{#1}(7.25,10.5){in}}%
+\@namedef{Gm@screen}#1{\Gm@setsize{#1}(225,180){mm}}%
+% \end{macrocode}
+%
+% \begin{key}{Gm}{paper}
+% |paper| takes a paper name as its value.
+% \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}{b[0-6]j}
+% \begin{key}{Gm}{ansi[a-e]paper}
+% \begin{key}{Gm}{letterpaper}
+% \begin{key}{Gm}{legalpaper}
+% \begin{key}{Gm}{executivepaper}
+% \begin{key}{Gm}{screen}
+% The following paper names are available.
+% \begin{macrocode}
+\define@key{Gm}{a0paper}[true]{\Gm@setpaper@ifpre{a0paper}}%
+\define@key{Gm}{a1paper}[true]{\Gm@setpaper@ifpre{a1paper}}%
+\define@key{Gm}{a2paper}[true]{\Gm@setpaper@ifpre{a2paper}}%
+\define@key{Gm}{a3paper}[true]{\Gm@setpaper@ifpre{a3paper}}%
+\define@key{Gm}{a4paper}[true]{\Gm@setpaper@ifpre{a4paper}}%
+\define@key{Gm}{a5paper}[true]{\Gm@setpaper@ifpre{a5paper}}%
+\define@key{Gm}{a6paper}[true]{\Gm@setpaper@ifpre{a6paper}}%
+\define@key{Gm}{b0paper}[true]{\Gm@setpaper@ifpre{b0paper}}%
+\define@key{Gm}{b1paper}[true]{\Gm@setpaper@ifpre{b1paper}}%
+\define@key{Gm}{b2paper}[true]{\Gm@setpaper@ifpre{b2paper}}%
+\define@key{Gm}{b3paper}[true]{\Gm@setpaper@ifpre{b3paper}}%
+\define@key{Gm}{b4paper}[true]{\Gm@setpaper@ifpre{b4paper}}%
+\define@key{Gm}{b5paper}[true]{\Gm@setpaper@ifpre{b5paper}}%
+\define@key{Gm}{b6paper}[true]{\Gm@setpaper@ifpre{b6paper}}%
+\define@key{Gm}{c0paper}[true]{\Gm@setpaper@ifpre{c0paper}}%
+\define@key{Gm}{c1paper}[true]{\Gm@setpaper@ifpre{c1paper}}%
+\define@key{Gm}{c2paper}[true]{\Gm@setpaper@ifpre{c2paper}}%
+\define@key{Gm}{c3paper}[true]{\Gm@setpaper@ifpre{c3paper}}%
+\define@key{Gm}{c4paper}[true]{\Gm@setpaper@ifpre{c4paper}}%
+\define@key{Gm}{c5paper}[true]{\Gm@setpaper@ifpre{c5paper}}%
+\define@key{Gm}{c6paper}[true]{\Gm@setpaper@ifpre{c6paper}}%
+\define@key{Gm}{b0j}[true]{\Gm@setpaper@ifpre{b0j}}%
+\define@key{Gm}{b1j}[true]{\Gm@setpaper@ifpre{b1j}}%
+\define@key{Gm}{b2j}[true]{\Gm@setpaper@ifpre{b2j}}%
+\define@key{Gm}{b3j}[true]{\Gm@setpaper@ifpre{b3j}}%
+\define@key{Gm}{b4j}[true]{\Gm@setpaper@ifpre{b4j}}%
+\define@key{Gm}{b5j}[true]{\Gm@setpaper@ifpre{b5j}}%
+\define@key{Gm}{b6j}[true]{\Gm@setpaper@ifpre{b6j}}%
+\define@key{Gm}{ansiapaper}[true]{\Gm@setpaper@ifpre{ansiapaper}}%
+\define@key{Gm}{ansibpaper}[true]{\Gm@setpaper@ifpre{ansibpaper}}%
+\define@key{Gm}{ansicpaper}[true]{\Gm@setpaper@ifpre{ansicpaper}}%
+\define@key{Gm}{ansidpaper}[true]{\Gm@setpaper@ifpre{ansidpaper}}%
+\define@key{Gm}{ansiepaper}[true]{\Gm@setpaper@ifpre{ansiepaper}}%
+\define@key{Gm}{letterpaper}[true]{\Gm@setpaper@ifpre{letterpaper}}%
+\define@key{Gm}{legalpaper}[true]{\Gm@setpaper@ifpre{legalpaper}}%
+\define@key{Gm}{executivepaper}[true]{\Gm@setpaper@ifpre{executivepaper}}%
+\define@key{Gm}{screen}[true]{\Gm@setpaper@ifpre{screen}}%
+% \end{macrocode}
+% \end{key}\end{key}\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}{\ifGm@preamble{paperwidth}{%
+ \def\Gm@paper{custom}\Gm@setlength\paperwidth{#1}}}%
+\define@key{Gm}{paperheight}{\ifGm@preamble{paperheight}{%
+ \def\Gm@paper{custom}\Gm@setlength\paperheight{#1}}}%
+\define@key{Gm}{papersize}{\ifGm@preamble{papersize}{%
+ \def\Gm@paper{custom}\Gm@branch{#1}{paperwidth}{paperheight}}}%
+% \end{macrocode}
+% \end{key}\end{key}\end{key}
+% \begin{key}{Gm}{layout}
+% \begin{key}{Gm}{layoutwidth}
+% \begin{key}{Gm}{layoutheight}
+% \begin{key}{Gm}{layoutsize}
+% Direct specification for layout size is also possible.
+% \begin{macrocode}
+\define@key{Gm}{layout}{\Gm@layouttrue\@nameuse{Gm@#1}{Gm@layout}}%
+\let\KV@Gm@layoutname\KV@Gm@layout
+\define@key{Gm}{layoutwidth}{\Gm@layouttrue\Gm@setlength\Gm@layoutwidth{#1}}%
+\define@key{Gm}{layoutheight}{\Gm@layouttrue\Gm@setlength\Gm@layoutheight{#1}}%
+\define@key{Gm}{layoutsize}{\Gm@branch{#1}{layoutwidth}{layoutheight}}%
+% \end{macrocode}
+% \end{key}\end{key}\end{key}\end{key}
+% \begin{key}{Gm}{landscape}
+% \begin{key}{Gm}{portrait}
+% Paper orientation setting.
+% \begin{macrocode}
+\define@key{Gm}{landscape}[true]{\ifGm@preamble{landscape}{%
+ \Gm@doifelse{landscape}{#1}%
+ {\ifGm@landscape\else\Gm@landscapetrue\Gm@reverse{swap@papersize}\fi}%
+ {\ifGm@landscape\Gm@landscapefalse\Gm@reverse{swap@papersize}\fi}}}%
+\define@key{Gm}{portrait}[true]{\ifGm@preamble{portrait}{%
+ \Gm@doifelse{portrait}{#1}%
+ {\ifGm@landscape\Gm@landscapefalse\Gm@reverse{swap@papersize}\fi}%
+ {\ifGm@landscape\else\Gm@landscapetrue\Gm@reverse{swap@papersize}\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}
+% The options take the corresponding dimensions as part of
+% \gpart{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}
+% These options exclude \gpart{head}, \gpart{foot}
+% and \gpart{marginpars} when determining \gpart{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 place \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 adds the specified space to the inner margin.
+% \begin{macrocode}
+\define@key{Gm}{bindingoffset}{\Gm@setlength\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@setlength\headheight{#1}}%
+\define@key{Gm}{headsep}{\Gm@setlength\headsep{#1}}%
+\define@key{Gm}{footskip}{\Gm@setlength\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@setlength\headheight\z@\Gm@setlength\headsep\z@}{}}%
+\define@key{Gm}{nofoot}[true]{\Gm@doifelse{nofoot}{#1}%
+ {\Gm@setlength\footskip\z@}{}}%
+\define@key{Gm}{noheadfoot}[true]{\Gm@doifelse{noheadfoot}{#1}%
+ {\Gm@setlength\headheight\z@\Gm@setlength\headsep
+ \z@\Gm@setlength\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@setlength{\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}.
+% \begin{macrocode}
+\define@key{Gm}{marginparwidth}{\Gm@setlength\marginparwidth{#1}}%
+\let\KV@Gm@marginpar\KV@Gm@marginparwidth
+\define@key{Gm}{marginparsep}{\Gm@setlength\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@setlength\marginparwidth\z@\Gm@setlength\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@setlength\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@setlength\hoffset{#1}}%
+\define@key{Gm}{voffset}{\Gm@setlength\voffset{#1}}%
+\define@key{Gm}{offset}{\Gm@branch{#1}{hoffset}{voffset}}%
+% \end{macrocode}
+% \end{key}\end{key}\end{key}
+% \begin{key}{Gm}{layouthoffset}
+% \begin{key}{Gm}{layoutvoffset}
+% \begin{key}{Gm}{layoutoffset}
+% \begin{macrocode}
+\define@key{Gm}{layouthoffset}{\Gm@setlength\Gm@layouthoffset{#1}}%
+\define@key{Gm}{layoutvoffset}{\Gm@setlength\Gm@layoutvoffset{#1}}%
+\define@key{Gm}{layoutoffset}{\Gm@branch{#1}{layouthoffset}{layoutvoffset}}%
+% \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}{onecolumn}
+% This option has the reverse effect of |twocolumn| option.
+% \begin{macrocode}
+\define@key{Gm}{onecolumn}[true]{%
+ \Gm@doifelse{onecolumn}{#1}{\@twocolumnfalse}{\@twocolumntrue}}%
+% \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}{\ifGm@preamble{driver}{%
+ \edef\@@tempa{#1}\edef\@@auto{auto}\edef\@@none{none}%
+ \ifx\@@tempa\@empty\let\Gm@driver\relax\else
+ \ifx\@@tempa\@@none\let\Gm@driver\relax\else
+ \ifx\@@tempa\@@auto\let\Gm@driver\@empty\else
+ \setkeys{Gm}{#1}\fi\fi\fi\let\@@auto\relax\let\@@none\relax}}%
+% \end{macrocode}
+% \end{key}
+% \begin{key}{Gm}{dvips}
+% \begin{key}{Gm}{dvipdfm}\begin{key}{Gm}{dvipdfmx}\begin{key}{Gm}{xdvipdfmx}
+% \begin{key}{Gm}{pdftex}
+% \begin{key}{Gm}{luatex}
+% \begin{key}{Gm}{xetex}
+% \begin{key}{Gm}{vtex}
+% The \Gm\ package supports |dvips|, |dvipdfm|,
+% |pdflatex|, |luatex| and |vtex|. |dvipdfm| works like |dvips|.
+% \begin{macrocode}
+\define@key{Gm}{dvips}[true]{\ifGm@preamble{dvips}{%
+ \Gm@doifelse{dvips}{#1}{\Gm@setdriver{dvips}}{\Gm@unsetdriver{dvips}}}}%
+\define@key{Gm}{dvipdfm}[true]{\ifGm@preamble{dvipdfm}{%
+ \Gm@doifelse{dvipdfm}{#1}{\Gm@setdriver{dvipdfm}}{\Gm@unsetdriver{dvipdfm}}}}%
+\define@key{Gm}{dvipdfmx}[true]{\ifGm@preamble{dvipdfm}{%
+ \Gm@doifelse{dvipdfm}{#1}{\Gm@setdriver{dvipdfm}}{\Gm@unsetdriver{dvipdfm}}}}%
+\define@key{Gm}{xdvipdfmx}[true]{\ifGm@preamble{dvipdfm}{%
+ \Gm@doifelse{dvipdfm}{#1}{\Gm@setdriver{dvipdfm}}{\Gm@unsetdriver{dvipdfm}}}}%
+\define@key{Gm}{pdftex}[true]{\ifGm@preamble{pdftex}{%
+ \Gm@doifelse{pdftex}{#1}{\Gm@setdriver{pdftex}}{\Gm@unsetdriver{pdftex}}}}%
+\define@key{Gm}{luatex}[true]{\ifGm@preamble{luatex}{%
+ \Gm@doifelse{luatex}{#1}{\Gm@setdriver{luatex}}{\Gm@unsetdriver{luatex}}}}%
+\define@key{Gm}{xetex}[true]{\ifGm@preamble{xetex}{%
+ \Gm@doifelse{xetex}{#1}{\Gm@setdriver{xetex}}{\Gm@unsetdriver{xetex}}}}%
+\define@key{Gm}{vtex}[true]{\ifGm@preamble{vtex}{%
+ \Gm@doifelse{vtex}{#1}{\Gm@setdriver{vtex}}{\Gm@unsetdriver{vtex}}}}%
+% \end{macrocode}
+% \end{key}\end{key}\end{key}\end{key}\end{key}\end{key}\end{key}\end{key}
+% \begin{key}{Gm}{verbose}
+% The verbose mode.
+% \begin{macrocode}
+\define@key{Gm}{verbose}[true]{\ifGm@preamble{verbose}{\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]{\ifGm@preamble{reset}{%
+ \Gm@doifelse{reset}{#1}{\Gm@restore@org\Gm@initall
+ \ProcessOptionsKV[c]{Gm}\Gm@setdefaultpaper}{}}}%
+% \end{macrocode}
+% \end{key}
+% \begin{key}{Gm}{resetpaper}
+% If |resetpaper| is set to |true|, the paper size redefined in the package
+% is discarded and the original one is restored. This option may be useful
+% to print nonstandard sized documents with normal printers and papers.
+% \begin{macrocode}
+\define@key{Gm}{resetpaper}[true]{\ifGm@preamble{resetpaper}{%
+ \Gm@setbool{resetpaper}{#1}}}%
+% \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}{\ifGm@preamble{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]{\ifGm@preamble{truedimen}{%
+ \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]{\ifGm@preamble{pass}{\Gm@setbool{pass}{#1}}}%
+% \end{macrocode}
+% \end{key}
+% \begin{key}{Gm}{showframe}
+% The showframe option prints page frames to help you understand
+% what the resulting layout is like.
+% \begin{macrocode}
+\define@key{Gm}{showframe}[true]{\Gm@setbool{showframe}{#1}}%
+% \end{macrocode}
+% \end{key}
+% \begin{key}{Gm}{showcrop}
+% The showcrop option prints crop marks at each corner of the layout area.
+% \begin{macrocode}
+\define@key{Gm}{showcrop}[true]{\Gm@setbool{showcrop}{#1}}%
+% \end{macrocode}
+% \end{key}
+% \begin{macro}{\Gm@setdefaultpaper}
+% The macro stores paper dimensions.
+% This macro should be called after |\ProcessOptionsKV[c]{Gm}|.
+% If the |landscape| option in |\documentclass| is
+% specified, the class immediately swaps the paper dimensions.
+% \begin{macrocode}
+\def\Gm@setdefaultpaper{%
+ \ifx\Gm@paper\@undefined
+ \Gm@setsize{paper}(\strip@pt\paperwidth,\strip@pt\paperheight){pt}%
+ \Gm@setsize{Gm@layout}(\strip@pt\paperwidth,\strip@pt\paperheight){pt}%
+ \Gm@swap@papersizefalse
+ \fi}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Gm@adjustpaper}
+% The macro checks if paperwidth/height is larger than 0pt,
+% which is used in \cs{Gm@process}.
+% The paper dimensions can be swapped when paper orientation
+% is changed over by |landscape| and |portrait| options.
+% \begin{macrocode}
+\def\Gm@adjustpaper{%
+ \ifdim\paperwidth>\p@\else
+ \PackageError{geometry}{%
+ \string\paperwidth\space(\the\paperwidth) too short}{%
+ Set a paper type (e.g., `a4paper').}%
+ \fi
+ \ifdim\paperheight>\p@\else
+ \PackageError{geometry}{%
+ \string\paperheight\space(\the\paperheight) too short}{%
+ Set a paper type (e.g., `a4paper').}%
+ \fi
+ \ifGm@swap@papersize
+ \setlength\@tempdima{\paperwidth}%
+ \setlength\paperwidth{\paperheight}%
+ \setlength\paperheight{\@tempdima}%
+ \fi
+ \ifGm@layout\else
+ \setlength\Gm@layoutwidth{\paperwidth}%
+ \setlength\Gm@layoutheight{\paperheight}%
+ \fi}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Gm@checkmp}
+% The macro checks whether or not the marginpars overrun 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 overrun the paper edge.^^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 overrun the paper.^^J
+ \@spaces Add \the\@tempdimc\space and more to the right margin}%
+ \fi
+ \fi
+ \fi}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Gm@adjustmp}
+% The macro sets marginpar correction when |includemp| is set,
+% which is used in \cs{Gm@process}. The 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@adjustmp{%
+ \ifGm@includemp
+ \@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
+ \fi}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Gm@adjustbody}
+% If the horizontal dimension of \gpart{body} is specified by user,
+% \cs{Gm@width} is set properly here.
+% \begin{macrocode}
+\def\Gm@adjustbody{
+ \ifGm@hbody
+ \ifx\Gm@width\@undefined
+ \ifx\Gm@hscale\@undefined
+ \Gm@defbylen{width}{\Gm@Dhscale\Gm@layoutwidth}%
+ \else
+ \Gm@defbylen{width}{\Gm@hscale\Gm@layoutwidth}%
+ \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
+ \Gm@defbylen{height}{\Gm@Dvscale\Gm@layoutheight}%
+ \else
+ \Gm@defbylen{height}{\Gm@vscale\Gm@layoutheight}%
+ \fi
+ \fi
+ \ifx\Gm@lines\@undefined\else
+% \end{macrocode}
+% \cs{topskip} has to be adjusted so that the formula
+% ``$\cs{textheight} = (lines - 1) \times \cs{baselineskip} + \cs{topskip}$''
+% to be correct even if large font sizes are specified by users.
+% If \cs{topskip} is smaller than \cs{ht}\cs{strutbox}, then \cs{topskip}
+% is set to \cs{ht}\cs{strutbox}.
+% \begin{macrocode}
+ \ifdim\topskip<\ht\strutbox
+ \setlength\@tempdima{\topskip}%
+ \setlength\topskip{\ht\strutbox}%
+ \Gm@warning{\noexpand\topskip was changed from \the\@tempdima\space
+ to \the\topskip}%
+ \fi
+ \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}
+% \end{macro}
+% \begin{macro}{\Gm@process}
+% The main macro processing the specified 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@restore@org
+ \else
+ \Gm@@process
+ \fi}%
+% \end{macrocode}
+% The main processing macro.
+% \begin{macrocode}
+\def\Gm@@process{%
+ \Gm@expandlengths
+ \Gm@adjustpaper
+ \addtolength\Gm@layoutwidth{-\Gm@bindingoffset}%
+ \Gm@adjustmp
+ \Gm@adjustbody
+ \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
+ \else
+ \evensidemargin\oddsidemargin
+ \fi
+% \end{macrocode}
+% The bindingoffset correction for \cs{oddsidemargin}.
+% \begin{macrocode}
+ \advance\oddsidemargin\Gm@bindingoffset
+ \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}
+ \advance\oddsidemargin\Gm@layouthoffset%
+ \advance\evensidemargin\Gm@layouthoffset%
+ \advance\topmargin\Gm@layoutvoffset%
+ \addtolength\Gm@layoutwidth{\Gm@bindingoffset}%
+ }% end of \Gm@@process
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Gm@detectdriver}
+% The macro checks the typeset environment and changes the driver option
+% if necessary. To make the engine detection more robust, the macro is
+% rewritten with packages \textsf{ifpdf}, \textsf{ifvtex} and
+% \textsf{ifxetex}.
+% \begin{macrocode}
+\def\Gm@detectdriver{%
+% \end{macrocode}
+% If the driver option is not specified explicitly, then driver
+% auto-detection works.
+% \begin{macrocode}
+ \ifx\Gm@driver\@empty
+ \typeout{*geometry* driver: auto-detecting}%
+% \end{macrocode}
+% \cs{ifpdf} is defined in \textsf{ifpdf} package in `oberdiek' bundle.
+% \begin{macrocode}
+ \ifpdf
+ \ifx\pdfextension\@undefined
+ \Gm@setdriver{pdftex}%
+ \else
+ \Gm@setdriver{luatex}%
+ \fi
+ \else
+ \Gm@setdriver{dvips}%
+ \fi
+% \end{macrocode}
+% \cs{ifvtex} is defined in \textsf{ifvtex} package in `oberdiek'
+% bundle.
+% \begin{macrocode}
+ \ifvtex
+ \Gm@setdriver{vtex}%
+ \fi
+% \end{macrocode}
+% \cs{ifxetex} is defined in \textsf{ifxetex} package written by
+% Will Robertson.
+% \begin{macrocode}
+ \ifxetex
+ \Gm@setdriver{xetex}
+ \fi
+% \end{macrocode}
+% When the driver option is set by the user, check if it is valid or not.
+% \begin{macrocode}
+ \else
+ \ifx\Gm@driver\Gm@xetex %%
+ \ifxetex\else
+ \Gm@warning{Wrong driver setting: `xetex'; trying `pdftex' driver}%
+ \Gm@setdriver{pdftex}
+ \fi
+ \fi
+ \ifx\Gm@driver\Gm@vtex
+ \ifvtex\else
+ \Gm@warning{Wrong driver setting: `vtex'; trying `dvips' driver}%
+ \Gm@setdriver{dvips}%
+ \fi
+ \fi
+ \fi
+ \ifx\Gm@driver\relax
+ \typeout{*geometry* detected driver: <none>}%
+ \else
+ \typeout{*geometry* detected driver: \Gm@driver}%
+ \fi}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Gm@showparams}
+% Prints the resulted parammeters and dimensions to STDOUT
+% if |verbose| is true.
+% |\Gm@width| and |\Gm@height| are expanded to get the real size.
+% \begin{macrocode}
+\def\Gm@showparams#1{%
+ \ifGm@verbose\expandafter\typeout\else\expandafter\wlog\fi
+ {\Gm@logcontent{#1}}}%
+\def\Gm@showdim#1{* \string#1=\the#1^^J}%
+\def\Gm@showbool#1{\@nameuse{ifGm@#1}#1\space\fi}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Gm@logcontent}
+% The content of geometry paramenters and native dimensions for the
+% page layout.
+% \begin{macrocode}
+\def\Gm@logcontent#1{%
+ *geometry* verbose mode - [ #1 ] result:^^J%
+ \ifGm@pass * pass: disregarded the geometry package!^^J%
+ \else
+ * driver: \if\Gm@driver<none>\else\Gm@driver\fi^^J%
+ * paper: \ifx\Gm@paper\@undefined<default>\else\Gm@paper\fi^^J%
+ * layout: \ifGm@layout<custom>\else<same size as paper>\fi^^J%
+ \ifGm@layout
+ * layout(width,height): (\the\Gm@layoutwidth,\the\Gm@layoutheight)^^J%
+ \fi
+ * layoutoffset:(h,v)=(\the\Gm@layouthoffset,\the\Gm@layoutvoffset)^^J%
+ \@ifundefined{Gm@lines}{}{* lines: \Gm@lines^^J}%
+ \@ifundefined{Gm@hmarginratio}{}{* hratio: \Gm@hmarginratio^^J}%
+ \@ifundefined{Gm@vmarginratio}{}{* vratio: \Gm@vmarginratio^^J}%
+ \ifdim\Gm@bindingoffset=\z@\else
+ * bindingoffset: \the\Gm@bindingoffset^^J\fi
+ * modes: %
+ \Gm@showbool{landscape}%
+ \Gm@showbool{includehead}%
+ \Gm@showbool{includefoot}%
+ \Gm@showbool{includemp}%
+ \if@twoside twoside\space\fi%
+ \if@mparswitch\else\if@twoside asymmetric\space\fi\fi%
+ \Gm@showbool{heightrounded}%
+ \ifx\Gm@truedimen\@empty\else truedimen\space\fi%
+ \Gm@showbool{showframe}%
+ \Gm@showbool{showcrop}%
+ ^^J%
+ * h-part:(L,W,R)=(\Gm@lmargin, \Gm@width, \Gm@rmargin)^^J%
+ * v-part:(T,H,B)=(\Gm@tmargin, \Gm@height, \Gm@bmargin)^^J%
+ \fi
+ \Gm@showdim{\paperwidth}%
+ \Gm@showdim{\paperheight}%
+ \Gm@showdim{\textwidth}%
+ \Gm@showdim{\textheight}%
+ \Gm@showdim{\oddsidemargin}%
+ \Gm@showdim{\evensidemargin}%
+ \Gm@showdim{\topmargin}%
+ \Gm@showdim{\headheight}%
+ \Gm@showdim{\headsep}%
+ \Gm@showdim{\topskip}%
+ \Gm@showdim{\footskip}%
+ \Gm@showdim{\marginparwidth}%
+ \Gm@showdim{\marginparsep}%
+ \Gm@showdim{\columnsep}%
+ * \string\skip\string\footins=\the\skip\footins^^J%
+ \Gm@showdim{\hoffset}%
+ \Gm@showdim{\voffset}%
+ \Gm@showdim{\mag}%
+ * \string\@twocolumn\if@twocolumn true\else false\fi^^J%
+ * \string\@twoside\if@twoside true\else false\fi^^J%
+ * \string\@mparswitch\if@mparswitch true\else false\fi^^J%
+ * \string\@reversemargin\if@reversemargin true\else false\fi^^J%
+ * (1in=72.27pt=25.4mm, 1cm=28.453pt)^^J}%
+% \end{macrocode}
+% \end{macro}
+%
+% Macros for the page frames and cropmarks.
+% \begin{macrocode}
+\def\Gm@cropmark(#1,#2,#3,#4){%
+ \begin{picture}(0,0)
+ \setlength\unitlength{1truemm}%
+ \linethickness{0.25pt}%
+ \put(#3,0){\line(#1,0){17}}%
+ \put(0,#4){\line(0,#2){17}}%
+ \end{picture}}%
+\providecommand*\vb@xt@{\vbox to}%
+\def\Gm@vrule{\vrule width 0.2pt height\textheight depth\z@}%
+\def\Gm@hrule{\hrule height 0.2pt depth\z@ width\textwidth}%
+\def\Gm@hruled{\hrule height\z@ depth0.2pt width\textwidth}%
+\newcommand*{\Gm@vrules@mpi}{%
+ \hb@xt@\@tempdima{\llap{\Gm@vrule}\ignorespaces
+ \hskip \textwidth\Gm@vrule\hskip \marginparsep
+ \llap{\Gm@vrule}\hfil\Gm@vrule}}%
+\newcommand*{\Gm@vrules@mpii}{%
+ \hb@xt@\@tempdima{\hskip-\marginparwidth\hskip-\marginparsep
+ \llap{\Gm@vrule}\ignorespaces
+ \hskip \marginparwidth\rlap{\Gm@vrule}\hskip \marginparsep
+ \llap{\Gm@vrule}\hskip\textwidth\rlap{\Gm@vrule}\hss}}%
+\newcommand*{\Gm@pageframes}{%
+ \vb@xt@\z@{%
+ \ifGm@showcrop
+ \vb@xt@\z@{\vskip-1\Gm@truedimen in\vskip\Gm@layoutvoffset%
+ \hb@xt@\z@{\hskip-1\Gm@truedimen in\hskip\Gm@layouthoffset%
+ \vb@xt@\Gm@layoutheight{%
+ \let\protect\relax
+ \hb@xt@\Gm@layoutwidth{\Gm@cropmark(-1,1,-3,3)\hfil\Gm@cropmark(1,1,3,3)}%
+ \vfil
+ \hb@xt@\Gm@layoutwidth{\Gm@cropmark(-1,-1,-3,-3)\hfil\Gm@cropmark(1,-1,3,-3)}}%
+ \hss}%
+ \vss}%
+ \fi%
+ \ifGm@showframe
+ \if@twoside
+ \ifodd\count\z@
+ \let\@themargin\oddsidemargin
+ \else
+ \let\@themargin\evensidemargin
+ \fi
+ \fi
+ \moveright\@themargin%
+ \vb@xt@\z@{%
+ \vskip\topmargin\vb@xt@\z@{\vss\Gm@hrule}%
+ \vskip\headheight\vb@xt@\z@{\vss\Gm@hruled}%
+ \vskip\headsep\vb@xt@\z@{\vss\Gm@hrule}%
+ \@tempdima\textwidth
+ \advance\@tempdima by \marginparsep
+ \advance\@tempdima by \marginparwidth
+ \if@mparswitch
+ \ifodd\count\z@
+ \Gm@vrules@mpi
+ \else
+ \Gm@vrules@mpii
+ \fi
+ \else
+ \Gm@vrules@mpi
+ \fi
+ \vb@xt@\z@{\vss\Gm@hrule}%
+ \vskip\footskip\vb@xt@\z@{\vss\Gm@hruled}%
+ \vss}%
+ \fi%
+ }}%
+% \end{macrocode}
+%
+% \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}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+\def\Gm@setkeys{\setkeys{Gm}}%
+% \end{macrocode}
+% \begin{macro}{\Gm@processconf}
+% \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@processconfig{%
+ \let\Gm@origExecuteOptions\ExecuteOptions
+ \let\ExecuteOptions\Gm@setkeys
+ \InputIfFileExists{geometry.cfg}{}{}
+ \let\ExecuteOptions\Gm@origExecuteOptions}%
+% \end{macrocode}
+% \end{macro}
+%
+% The original page layout before loading \Gm\ is saved here.
+% |\Gm@restore@org| is defined here for |reset| option.
+% \begin{macrocode}
+\Gm@save
+\edef\Gm@restore@org{\Gm@restore}%
+\Gm@initall
+% \end{macrocode}
+% Processing config file.
+% \begin{macrocode}
+\Gm@processconfig
+% \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}
+% 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}
+%
+% \begin{macro}{\AtBeginDocument}
+% The processes for |verbose|, |showframe| and drivers are added to
+% |\AtBeginDocument|.
+% |\Gm@restore@org| is redefined here with the paper size specified
+% in the preamble for |\newgeometry| to use it. This should be done
+% before magnifying the paper size with |\mag| because the layout
+% calculation would be affected by changing the paper size.
+% \begin{macrocode}
+\AtBeginDocument{%
+ \Gm@savelength{paperwidth}%
+ \Gm@savelength{paperheight}%
+ \edef\Gm@restore@org{\Gm@restore}%
+% \end{macrocode}
+% The original paper size is used if |resetpaper|.
+% \begin{macrocode}
+ \ifGm@resetpaper
+ \edef\Gm@pw{\Gm@orgpw}%
+ \edef\Gm@ph{\Gm@orgph}%
+ \else
+ \edef\Gm@pw{\the\paperwidth}%
+ \edef\Gm@ph{\the\paperheight}%
+ \fi
+% \end{macrocode}
+% If |pass| is not set, the paper size is multiplied
+% according to the specified |mag|.
+% \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@detectdriver
+% \end{macrocode}
+% If |xetex| and |\pdfpagewidth| is defined,
+% |\pdfpagewidth| and |\pdfpageheight| would be set.
+% \begin{macrocode}
+ \ifx\Gm@driver\Gm@xetex
+ \@ifundefined{pdfpagewidth}{}{%
+ \setlength\pdfpagewidth{\Gm@pw}%
+ \setlength\pdfpageheight{\Gm@ph}}%
+ \ifnum\mag=\@m\else
+ \ifx\Gm@truedimen\Gm@true
+ \setlength\paperwidth{\Gm@pw}%
+ \setlength\paperheight{\Gm@ph}%
+ \fi
+ \fi
+ \fi
+% \end{macrocode}
+% If |pdftex| is set to |true|, pdf-commands are set properly.
+% To avoid |pdftex| magnification problem, \cs{pdfhorigin} and
+% \cs{pdfvorigin} are adjusted for \cs{mag}.
+% \begin{macrocode}
+ \ifx\Gm@driver\Gm@pdftex
+ \@ifundefined{pdfpagewidth}{}{%
+ \setlength\pdfpagewidth{\Gm@pw}%
+ \setlength\pdfpageheight{\Gm@ph}}%
+ \ifnum\mag=\@m\else
+ \@tempdima=\mag sp%
+ \@ifundefined{pdfhorigin}{}{%
+ \divide\pdfhorigin\@tempdima
+ \multiply\pdfhorigin\@m
+ \divide\pdfvorigin\@tempdima
+ \multiply\pdfvorigin\@m}%
+ \ifx\Gm@truedimen\Gm@true
+ \setlength\paperwidth{\Gm@pw}%
+ \setlength\paperheight{\Gm@ph}%
+ \fi
+ \fi
+ \fi
+% \end{macrocode}
+% If |luatex| is set to |true|, pdf-commands are set properly.
+% To avoid |luatex| magnification problem, \cs{horigin} and
+% \cs{vorigin} are adjusted for \cs{mag}.
+% \begin{macrocode}
+ \ifx\Gm@driver\Gm@luatex
+ \setlength\pagewidth{\Gm@pw}%
+ \setlength\pageheight{\Gm@ph}%
+ \ifnum\mag=\@m\else
+ \@tempdima=\mag sp
+ \edef\Gm@horigin{\pdfvariable horigin}%
+ \edef\Gm@vorigin{\pdfvariable vorigin}%
+ \divide\Gm@horigin\@tempdima
+ \multiply\Gm@horigin\@m
+ \divide\Gm@vorigin\@tempdima
+ \multiply\Gm@vorigin\@m
+ \ifx\Gm@truedimen\Gm@true
+ \setlength\paperwidth{\Gm@pw}%
+ \setlength\paperheight{\Gm@ph}%
+ \fi
+ \fi
+ \fi
+% \end{macrocode}
+% With V\TeX{} environment, V\TeX{} variables are set here.
+% \begin{macrocode}
+ \ifx\Gm@driver\Gm@vtex
+ \@ifundefined{mediawidth}{}{%
+ \mediawidth=\paperwidth
+ \mediaheight=\paperheight}%
+ \ifvtexdvi
+ \AtBeginDvi{\special{papersize=\the\paperwidth,\the\paperheight}}%
+ \fi
+ \fi
+% \end{macrocode}
+% If |dvips| or |dvipdfm| is specified, 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}
+ \ifx\Gm@driver\Gm@dvips
+ \AtBeginDvi{\special{papersize=\the\paperwidth,\the\paperheight}}%
+ \ifx\Gm@driver\Gm@dvips\ifGm@landscape
+ \AtBeginDvi{\special{! /landplus90 true store}}%
+ \fi\fi
+% \end{macrocode}
+% If |dvipdfm| is specified and \textsf{atbegshi} package in
+% `oberdiek' bundle is loaded, \cs{AtBeginShipoutFirst} is used
+% instead of \cs{AtBeginDvi} for compatibility with \textsf{hyperref}
+% and |dvipdfm| program.
+% \begin{macrocode}
+ \else\ifx\Gm@driver\Gm@dvipdfm
+ \ifcase\ifx\AtBeginShipoutFirst\relax\@ne\else
+ \ifx\AtBeginShipoutFirst\@undefined\@ne\else\z@\fi\fi
+ \AtBeginShipoutFirst{\special{papersize=\the\paperwidth,\the\paperheight}}%
+ \or
+ \AtBeginDvi{\special{papersize=\the\paperwidth,\the\paperheight}}%
+ \fi
+ \fi\fi
+% \end{macrocode}
+% Page frames are shipped out when |showframe=true|, cropmarks for |showcrop=true|
+% on each page. The \textsf{atbegshi} package is used for overloading |\shipout|.
+% \begin{macrocode}
+ \@tempswafalse
+ \ifGm@showframe
+ \@tempswatrue
+ \else\ifGm@showcrop
+ \@tempswatrue
+ \fi\fi
+ \if@tempswa
+ \RequirePackage{atbegshi}%
+ \AtBeginShipout{\setbox\AtBeginShipoutBox=\vbox{%
+ \baselineskip\z@skip\lineskip\z@skip\lineskiplimit\z@
+ \Gm@pageframes\box\AtBeginShipoutBox}}%
+ \fi
+% \end{macrocode}
+% The layout dimensions for \cs{restoregeometry} are saved
+% at the end of the \cs{AtBeginDocument}.
+% \begin{macrocode}
+ \Gm@save
+ \edef\Gm@restore@pkg{\Gm@restore}%
+% \end{macrocode}
+% The package checks whether or not the marginpars overrun the page,
+% if |verbose| and unless |pass|.
+% \begin{macrocode}
+ \ifGm@verbose\ifGm@pass\else\Gm@checkmp\fi\fi
+% \end{macrocode}
+% |\Gm@showparams| puts the resulting parameters and dimensions
+% into the log file. With |verbose|, they are shown on the terminal
+% as well.
+% \begin{macrocode}
+ \Gm@showparams{preamble}%
+% \end{macrocode}
+% The following lines free the memories no longer needed.
+% \begin{macrocode}
+ \let\Gm@pw\relax
+ \let\Gm@ph\relax
+ }% end of \AtBeginDocument
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\geometry}
+% The macro \cs{geometry} can be called multiple times
+% in the preamble (before |\begin{document}|).
+% \begin{macrocode}
+\newcommand{\geometry}[1]{%
+ \Gm@clean
+ \setkeys{Gm}{#1}%
+ \Gm@process}%
+\@onlypreamble\geometry
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Gm@changelayout}
+% The macro, which can be called from |\newgeometry|,
+% |\restoregeometry| and |\loadgeometry|, changes the layout
+% in the middle of the document.
+% \begin{macrocode}
+\DeclareRobustCommand\Gm@changelayout{%
+ \setlength{\@colht}{\textheight}
+ \setlength{\@colroom}{\textheight}%
+ \setlength{\vsize}{\textheight}
+ \setlength{\columnwidth}{\textwidth}%
+ \if@twocolumn%
+ \advance\columnwidth-\columnsep
+ \divide\columnwidth\tw@%
+ \@firstcolumntrue%
+ \fi%
+ \setlength{\hsize}{\columnwidth}%
+ \setlength{\linewidth}{\hsize}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\newgeometry}
+% The macro |\newgeometry|, which changes the layout,
+% can be used only in the document.
+% It would reset the options specified in the preamble except for
+% paper size options and |\mag|.
+% \begin{macrocode}
+\newcommand{\newgeometry}[1]{%
+ \clearpage
+ \Gm@restore@org
+ \Gm@initnewgm
+ \Gm@newgmtrue
+ \setkeys{Gm}{#1}%
+ \Gm@newgmfalse
+ \Gm@process
+ \ifnum\mag=\@m\else\Gm@magtooffset\fi
+ \Gm@changelayout
+ \Gm@showparams{newgeometry}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\restoregeometry}
+% The macro restores the resulting layout specified in the preamble,
+% namely the first-page layout right after |\begin{document}|.
+% \begin{macrocode}
+\newcommand{\restoregeometry}{%
+ \clearpage
+ \Gm@restore@pkg
+ \Gm@changelayout}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\savegeometry}
+% The macro saves the layout with the name specified
+% with the argument. The saved layout can be loaded
+% with |\loadgeometry{|\meta{name}|}|.
+% \begin{macrocode}
+\newcommand*{\savegeometry}[1]{%
+ \Gm@save
+ \expandafter\edef\csname Gm@restore@@#1\endcsname{\Gm@restore}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\loadgeometry}
+% The macro loads the layout saved with |\savegeometry{|\meta{name}|}|.
+% If the name is not found, the macro would warn it and
+% do nothing for the layout.
+% \begin{macrocode}
+\newcommand*{\loadgeometry}[1]{%
+ \clearpage
+ \@ifundefined{Gm@restore@@#1}{%
+ \PackageError{geometry}{%
+ \string\loadgeometry : name `#1' undefined}{%
+ The name `#1' should be predefined with \string\savegeometry}%
+ }{\@nameuse{Gm@restore@@#1}%
+ \Gm@changelayout}}%
+%</package>
+% \end{macrocode}
+% \end{macro}
+%
+% \section{Config file}
+% In the configuration file |geometry.cfg|, one can use
+% \cs{ExecuteOptions} to set the site or user default settings.
+% \begin{macrocode}
+%<*config>
+%<<SAVE_INTACT
+
+% Uncomment and edit the line below to set default options.
+%\ExecuteOptions{a4paper}
+
+%SAVE_INTACT
+%</config>
+% \end{macrocode}
+%
+% \section{Sample file}
+% Here is a sample document for the \Gm\ package.
+% \begin{macrocode}
+%<*samples>
+%<<SAVE_INTACT
+\documentclass[12pt]{article}% uses letterpaper by default
+% \documentclass[12pt,a4paper]{article}% for A4 paper
+%---------------------------------------------------------------
+% Edit and uncomment one of the settings below
+%---------------------------------------------------------------
+% \usepackage{geometry}
+% \usepackage[centering]{geometry}
+% \usepackage[width=10cm,vscale=.7]{geometry}
+% \usepackage[margin=1cm, papersize={12cm,19cm}, resetpaper]{geometry}
+% \usepackage[margin=1cm,includeheadfoot]{geometry}
+\usepackage[margin=1cm,includeheadfoot,includemp]{geometry}
+% \usepackage[margin=1cm,bindingoffset=1cm,twoside]{geometry}
+% \usepackage[hmarginratio=2:1, vmargin=2cm]{geometry}
+% \usepackage[hscale=0.5,twoside]{geometry}
+% \usepackage[hscale=0.5,asymmetric]{geometry}
+% \usepackage[hscale=0.5,heightrounded]{geometry}
+% \usepackage[left=1cm,right=4cm,top=2cm,includefoot]{geometry}
+% \usepackage[lines=20,left=2cm,right=6cm,top=2cm,twoside]{geometry}
+% \usepackage[width=15cm, marginparwidth=3cm, includemp]{geometry}
+% \usepackage[hdivide={1cm,,2cm}, vdivide={3cm,8in,}, nohead]{geometry}
+% \usepackage[headsep=20pt, head=40pt,foot=20pt,includeheadfoot]{geometry}
+% \usepackage[text={6in,8in}, top=2cm, left=2cm]{geometry}
+% \usepackage[centering,includemp,twoside,landscape]{geometry}
+% \usepackage[mag=1414,margin=2cm]{geometry}
+% \usepackage[mag=1414,margin=2truecm,truedimen]{geometry}
+% \usepackage[a5paper, landscape, twocolumn, twoside,
+% left=2cm, hmarginratio=2:1, includemp, marginparwidth=43pt,
+% bottom=1cm, foot=.7cm, includefoot, textheight=11cm, heightrounded,
+% columnsep=1cm,verbose]{geometry}
+%---------------------------------------------------------------
+% No need to change below
+%---------------------------------------------------------------
+\geometry{verbose,showframe}% the options appended.
+\usepackage{lipsum}% for dummy text of 150 paragraphs
+\newcommand\mynote{\marginpar[\raggedright
+A sample margin note in the left side.]%
+{\raggedright A sample margin note.}}%
+\newcommand\myfootnote{\footnote{This is a sample footnote text.}}
+\begin{document}
+\lipsum[1-2]\mynote\lipsum[3-4]\mynote
+\lipsum[5-11]\mynote\lipsum[12]\myfootnote
+\lipsum[13-22]\mynote\lipsum[23-32]
+\end{document}
+%SAVE_INTACT
+%</samples>
+% \end{macrocode}
+%
+% \Finale
+%
+\endinput
diff --git a/macros/latex/contrib/geometry/geometry-de.pdf b/macros/latex/contrib/geometry/geometry-de.pdf
new file mode 100644
index 0000000000..d3b6408dd2
--- /dev/null
+++ b/macros/latex/contrib/geometry/geometry-de.pdf
Binary files differ
diff --git a/macros/latex/contrib/geometry/geometry-samples.tex b/macros/latex/contrib/geometry/geometry-samples.tex
deleted file mode 100644
index 7425041e29..0000000000
--- a/macros/latex/contrib/geometry/geometry-samples.tex
+++ /dev/null
@@ -1,73 +0,0 @@
-%%
-%% This is file `geometry-samples.tex',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% geometry.dtx (with options: `samples')
-%%
-%% Copyright (C) 1996-2010
-%% by Hideo Umeki <latexgeometry@gmail.com>
-%% Copyright (C) 2018
-%% by Hideo Umeki and David Carlisle https://github.com/davidcarlisle/geometry
-%%
-%% This work may be distributed and/or modified under the conditions of
-%% the LaTeX Project Public License, either version 1.3c of this license
-%% or (at your option) any later version. The latest version of this
-%% license is in
-%% http://www.latex-project.org/lppl.txt
-%% and version 1.3c or later is part of all distributions of LaTeX
-%% version 2005/12/01 or later.
-%%
-%% This work is "maintained" (as per the LPPL maintenance status)
-%% by David Carlisle.
-%%
-%% This work consists of the files geometry.dtx and
-%% the derived files: geometry.{sty,ins,drv}, geometry-samples.tex.
-%%
-\documentclass[12pt]{article}% uses letterpaper by default
-% \documentclass[12pt,a4paper]{article}% for A4 paper
-%---------------------------------------------------------------
-% Edit and uncomment one of the settings below
-%---------------------------------------------------------------
-% \usepackage{geometry}
-% \usepackage[centering]{geometry}
-% \usepackage[width=10cm,vscale=.7]{geometry}
-% \usepackage[margin=1cm, papersize={12cm,19cm}, resetpaper]{geometry}
-% \usepackage[margin=1cm,includeheadfoot]{geometry}
-\usepackage[margin=1cm,includeheadfoot,includemp]{geometry}
-% \usepackage[margin=1cm,bindingoffset=1cm,twoside]{geometry}
-% \usepackage[hmarginratio=2:1, vmargin=2cm]{geometry}
-% \usepackage[hscale=0.5,twoside]{geometry}
-% \usepackage[hscale=0.5,asymmetric]{geometry}
-% \usepackage[hscale=0.5,heightrounded]{geometry}
-% \usepackage[left=1cm,right=4cm,top=2cm,includefoot]{geometry}
-% \usepackage[lines=20,left=2cm,right=6cm,top=2cm,twoside]{geometry}
-% \usepackage[width=15cm, marginparwidth=3cm, includemp]{geometry}
-% \usepackage[hdivide={1cm,,2cm}, vdivide={3cm,8in,}, nohead]{geometry}
-% \usepackage[headsep=20pt, head=40pt,foot=20pt,includeheadfoot]{geometry}
-% \usepackage[text={6in,8in}, top=2cm, left=2cm]{geometry}
-% \usepackage[centering,includemp,twoside,landscape]{geometry}
-% \usepackage[mag=1414,margin=2cm]{geometry}
-% \usepackage[mag=1414,margin=2truecm,truedimen]{geometry}
-% \usepackage[a5paper, landscape, twocolumn, twoside,
-% left=2cm, hmarginratio=2:1, includemp, marginparwidth=43pt,
-% bottom=1cm, foot=.7cm, includefoot, textheight=11cm, heightrounded,
-% columnsep=1cm,verbose]{geometry}
-%---------------------------------------------------------------
-% No need to change below
-%---------------------------------------------------------------
-\geometry{verbose,showframe}% the options appended.
-\usepackage{lipsum}% for dummy text of 150 paragraphs
-\newcommand\mynote{\marginpar[\raggedright
-A sample margin note in the left side.]%
-{\raggedright A sample margin note.}}%
-\newcommand\myfootnote{\footnote{This is a sample footnote text.}}
-\begin{document}
-\lipsum[1-2]\mynote\lipsum[3-4]\mynote
-\lipsum[5-11]\mynote\lipsum[12]\myfootnote
-\lipsum[13-22]\mynote\lipsum[23-32]
-\end{document}
-\endinput
-%%
-%% End of file `geometry-samples.tex'.
diff --git a/macros/latex/contrib/geometry/geometry.dtx b/macros/latex/contrib/geometry/geometry.dtx
index 964b901888..aea76ff55b 100644
--- a/macros/latex/contrib/geometry/geometry.dtx
+++ b/macros/latex/contrib/geometry/geometry.dtx
@@ -26,6 +26,8 @@
% CTAN: macros/latex/contrib/geometry/geometry.ins
% CTAN: macros/latex/contrib/geometry/geometry.dtx
% CTAN: macros/latex/contrib/geometry/geometry.pdf
+% CTAN: macros/latex/contrib/geometry/geometry-de.dtx
+% CTAN: macros/latex/contrib/geometry/geometry-de.pdf
%
% * See README for installation.
%
@@ -40,12 +42,12 @@
%</ignore>
%<package|driver>\NeedsTeXFormat{LaTeX2e}
%<package>\ProvidesPackage{geometry}
-%<package> [2018/04/16 v5.8 Page Geometry]
+%<package> [2020/01/02 v5.9 Page Geometry]
%<*install>
\input docstrip.tex
\Msg{************************************************************************}
\Msg{* Installation}
-\Msg{* Package: geometry 2018/04/16 v5.8 Page Geometry}
+\Msg{* Package: geometry 2020/01/02 v5.9 Page Geometry}
\Msg{************************************************************************}
\keepsilent
@@ -54,7 +56,7 @@
Copyright (C) 1996-2010
by Hideo Umeki <latexgeometry@gmail.com>
-Copyright (C) 2018
+Copyright (C) 2018-2020
by Hideo Umeki and David Carlisle https://github.com/davidcarlisle/geometry
This work may be distributed and/or modified under the conditions of
@@ -125,7 +127,7 @@ the derived files: geometry.{sty,ins,drv}, geometry-samples.tex.
%
% \title{The \textsf{geometry} package}
% \date{\filedate\ \fileversion}
-% \author{Hideo Umeki\\\texttt{latexgeometry@gmail.com}}
+% \author{Hideo Umeki\\\url{https://github.com/davidcarlisle/geometry}}
%
% \MakeShortVerb{|}
%
@@ -1118,7 +1120,9 @@ the derived files: geometry.{sty,ins,drv}, geometry-samples.tex.
%
% The package supports drivers |dvips|, |dvipdfm|, |pdftex|, |luatex|,
% |xetex| and |vtex|. You can also set |dvipdfm| for \textsf{dvipdfmx} and
-% \textsf{xdvipdfmx}. |pdftex| for \textsf{pdflatex}, and |vtex| for
+% \textsf{xdvipdfmx} The options |dvipdfmx| and |xdvipdfmx| are also supported
+% as aliases for the |dvipdfm| option.
+% |pdftex| for \textsf{pdflatex}, and |vtex| for
% V\TeX{} environment.
% The driver options are exclusive. The driver can be set by either
% |driver=|\meta{driver name} or any of the drivers directly like |pdftex|.
@@ -1785,12 +1789,10 @@ the derived files: geometry.{sty,ins,drv}, geometry-samples.tex.
%<*package>
% \end{macrocode}
% This package requires the following packages:
-% \textsf{keyval}, \textsf{ifpdf}, \textsf{ifvtex} and \textsf{ifxetex}.
+% \textsf{keyval}, \textsf{ifvtex}.
% \begin{macrocode}
\RequirePackage{keyval}%
-\RequirePackage{ifpdf}%
\RequirePackage{ifvtex}%
-\RequirePackage{ifxetex}%
% \end{macrocode}
%
% Internal switches are declared here.
@@ -3591,7 +3593,7 @@ the derived files: geometry.{sty,ins,drv}, geometry-samples.tex.
\setlength\pdfpagewidth{\Gm@pw}%
\setlength\pdfpageheight{\Gm@ph}}%
\ifnum\mag=\@m\else
- \@tempdima=\mag sp
+ \@tempdima=\mag sp%
\@ifundefined{pdfhorigin}{}{%
\divide\pdfhorigin\@tempdima
\multiply\pdfhorigin\@m
diff --git a/macros/latex/contrib/geometry/geometry.pdf b/macros/latex/contrib/geometry/geometry.pdf
index 66f3c55c4e..8bb0d97210 100644
--- a/macros/latex/contrib/geometry/geometry.pdf
+++ b/macros/latex/contrib/geometry/geometry.pdf
Binary files differ