summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/eso-pic/eso-pic.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/eso-pic/eso-pic.dtx')
-rw-r--r--macros/latex/contrib/eso-pic/eso-pic.dtx719
1 files changed, 719 insertions, 0 deletions
diff --git a/macros/latex/contrib/eso-pic/eso-pic.dtx b/macros/latex/contrib/eso-pic/eso-pic.dtx
new file mode 100644
index 0000000000..5c7ec360c5
--- /dev/null
+++ b/macros/latex/contrib/eso-pic/eso-pic.dtx
@@ -0,0 +1,719 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 1998-2015 by Rolf Niepraschk <Rolf.Niepraschk@gmx.de>
+% -------------------------------------------------------------------
+%
+% This file may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.2
+% 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.2 or later is part of all distributions of LaTeX
+% version 1999/12/01 or later.
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "author-maintained".
+%
+% Please send error reports and suggestions for improvements to
+% Rolf Niepraschk <Rolf.Niepraschk@gmx.de>.
+%
+% \fi
+%
+% \iffalse
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{eso-pic}
+%<package> [2018/04/12 v2.0h eso-pic (RN)]
+%
+%<*driver>
+\documentclass[a4paper]{ltxdoc}
+\usepackage{eso-pic,array}
+\EnableCrossrefs\CodelineIndex\RecordChanges
+\begin{document}
+ \DocInput{eso-pic.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{778}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \iffalse meta-comment
+% ===================================================================
+% @LaTeX-package-file{
+% author = {Rolf Niepraschk},
+% version = "v2.0i",
+% date = "12 Apr 2018",
+% filename = "eso-pic.sty",
+% address = "",
+% telephone = "",
+% email = "Rolf.Niepraschk@gmx.de",
+% codetable = "ISO/ASCII",
+% keywords = "LaTeX2e, \shipout, picture",
+% dependences = "atbegshi",
+% supported = "yes",
+% docstring = "LaTeX package which makes it easy to add some
+% picture commands to every page."
+% }
+% ===================================================================
+% \fi
+%
+% \providecommand\env[1]{\textsf{#1}}
+% \providecommand\clsname[1]{\textsf{#1}}
+% \providecommand\pkgname[1]{\textsf{#1}}
+% \providecommand\optname[1]{\textsf{#1}}
+% \providecommand\progname[1]{\textsf{#1}}
+%
+% \setlength\emergencystretch{3em}
+%
+% \changes{v0.4}{1998/06/02}{Initial version}
+% \changes{v0.5}{1998/07/11}{Some bug corrections}
+% \changes{v0.6}{2000/05/13}{Some corrections for compatibility with
+% the \pkgname{html} package suggested by Ross Moore and a licence note}
+% \changes{v0.7}{2001/07/20}{New command \cmd{\AddToShipoutPicture*}}
+% \changes{v1.0}{2002/07/03}{New commands \cmd{\LenToUnit},%
+% \cmd{\AtPageUpperLeft}, \cmd{\AtPageCenter}, \cmd{\AtTextUpperLeft},
+% and \cmd{\AtTextCenter}.}
+% \changes{v1.0c}{2002/10/30}{New command \cmd{\AtTextLowerLeft} and
+% corrections to \cmd{\AtTextUpperLeft}.}
+% \changes{v1.1}{2002/11/07}{New commands and package options for
+% background grids.}
+% \changes{v1.1b}{2002/11/16}{New package options "texcoord" and "pscoord"}
+% \changes{v1.1b}{2002/11/16}{New command \cmd{\AtPageLowerLeft}}
+%
+% \GetFileInfo{eso-pic.sty}
+%
+% \DoNotIndex{\newcommand,\newenvironment}
+%
+% \title{The \pkgname{eso-pic} package\thanks{This document
+% corresponds to \pkgname{eso-pic}~\fileversion, dated \filedate.}}
+% \author{Rolf Niepraschk \\ \texttt{Rolf.Niepraschk@gmx.de}}
+%
+% \date{}
+%
+% \maketitle
+%
+% \section{Introduction}
+%
+% This package makes it easy to add some picture commands to every page
+% at absolute positions.
+% \section{Usage}
+% See also the example \LaTeX\ documents (|eso-*.tex|).
+%
+% \subsection{Basic commands for adding \LaTeX{} stuff to the page background}
+% \DescribeMacro{\AddToShipoutPictureBG} All the picture commands which are
+% parameters of an \cs{AddToShipoutPictureBG} command will be added to the
+% internal macro \cs{ESO@HookIBG}. This macro is part of a
+% zero-length \texttt{picture} environment with basepoint at the lower left
+% corner of the page (default) or at the upper left corner
+% (package option "texcoord"). The \texttt{picture} environment will be
+% shipped out at every new page.
+%
+% \DescribeMacro{\AddToShipoutPictureBG*} \cs{AddToShipoutPictureBG*} works like
+% \cs{AddToShipoutPictureBG} but only for the current page. It used the internal
+% macro \cs{ESO@HookIIBG} which contents will be removed
+% automatically.
+%
+% For compatibility the macros \cs{AddToShipoutPicture} and
+% \cs{AddToShipoutPicture*} are aliases for \cs{AddToShipoutPictureBG}
+% and \cs{AddToShipoutPictureBG*}.
+%
+% \DescribeMacro{\AddToShipoutPictureFG}
+% \DescribeMacro{\AddToShipoutPictureFG*} Works like
+% \cs{AddToShipoutPictureBG} but the picture commands are on the top
+% oft the normal document content.
+%
+% \DescribeMacro{\ClearShipoutPictureBG} A call of
+% \cs{ClearShipoutPictureBG}
+% clears the contents of \cs{ESO@HookIBG}.
+%
+% For compatibility the macro \cs{ClearShipoutPicture}
+% is an alias for \cs{ClearShipoutPictureBG}.
+%
+% \DescribeMacro{\ClearShipoutPictureFG} A call of
+% \cs{ClearShipoutPictureFG}
+% clears the contents of \cs{ESO@HookIFG}.
+%
+% \DescribeMacro{\LenToUnit} Allows a length as parameter to a picture
+% command. Note that this macro is no more necessary when using
+% |\usepackage{picture}|.
+%
+% \DescribeMacro{\gridSetup}
+% \cmd{\gridSetup}\oarg{gridunitname}\marg{gridunit}\marg{labelfactor}^^A
+% \marg{griddelta} \marg{gridDelta}\marg{gap}. For details see the
+% implementation section.\par\clearpage
+% \DescribeMacro{\AtPageUpperLeft}
+% \DescribeMacro{\AtPageLowerLeft}
+% \DescribeMacro{\AtPageCenter}
+% \DescribeMacro{\AtTextUpperLeft}
+% \DescribeMacro{\AtTextLowerLeft}
+% \DescribeMacro{\AtTextCenter}
+% \DescribeMacro{\AtStockUpperLeft}
+% \DescribeMacro{\AtStockLowerLeft}
+% \DescribeMacro{\AtStockCenter}
+% Helper macros for easier positioning on the page.
+%
+% \subsection{Package options}
+% \begin{center}
+% \begin{tabular}{@{}>{\ttfamily}llp{.5\textwidth}@{}}
+% \textnormal{Option} & Value & Comments \\ \hline
+% pscoord & empty or \textit{true}, \textit{false} & The zero point of
+% the coordinate system is the lower left corner of the page
+% (the default). \\
+% texcoord & empty or \textit{true}, \textit{false} & The zero point of
+% the coordinate system is the upper left corner of the page. \\
+% grid & empty or \textit{true}, \textit{false} & A grid is drawing;
+% default: false. \\
+% gridBG & empty or \textit{true}, \textit{false} & Put the grid in the
+% background; default: false.\\
+% gridunit & \textit{mm}, \textit{in}, \textit{bp}, \textit{pt} & Distance
+% between gridlines are multiples of \texttt{gridunit}. default: mm.\\
+% gridcolor & a valid color name & Color of the main gridlines;
+% default: black \\
+% subgridcolor & a valid color name & Color of the subgridlines;
+% default: black. \\
+% subgridstyle & \textit{solid} or \textit{dotted} & `dotted' is very slow!
+% default: solid. \\
+% colorgrid & empty or \textit{true}, \textit{false} & Shortcut for
+% `grid=true', `gridcolor=red' and `subgridcolor=green';
+% default: false.\\
+% dvips & empty or \textit{true}, \textit{false} & Is also true
+% if the package option \texttt{dvips} is
+% used by \pkgname{color} or \pkgname{graphics}. If true package
+% \pkgname{eepic} is loaded for better performance of dotted lines.
+%
+% \end{tabular}
+% \end{center}
+%
+% \StopEventually{\PrintChanges\PrintIndex}
+%
+% \section{Implementation}
+%
+% \subsection{The main functionality}
+%
+% \begin{macrocode}
+\RequirePackage{atbegshi}
+% \end{macrocode}
+% \begin{macro}{\LenToUnit}
+% \changes{v1.0d}{2006/07/14}{Using \cmd{\providecommand} instead of
+% \cmd{\newcommand} for \cmd{\LenToUnit}}
+% \changes{v2.0f}{2015/07/14}{Changed definition for better compatibility
+% with package \pkgname{curve2e} suggested by Claudio Beccari.}
+% \begin{macrocode}
+\providecommand*\LenToUnit[1]{\strip@pt\dimexpr#1*\p@/\unitlength}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ESO@isMEMOIR}
+% Support for the \clsname{memoir} class.
+% \begin{macrocode}
+\newcommand\ESO@isMEMOIR[2]{#2}
+\@ifclassloaded{memoir}{\renewcommand\ESO@isMEMOIR[2]{#1}}{}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\AtPageUpperLeft}
+% \begin{macrocode}
+\newcommand\AtPageUpperLeft[1]{%
+ \put(0,\LenToUnit{-\ESO@yoffsetI}){#1}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\AtPageLowerLeft}
+% \begin{macrocode}
+\newcommand\AtPageLowerLeft[1]{\AtPageUpperLeft{%
+ \put(0,\LenToUnit{-\paperheight}){#1}}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\AtPageCenter}
+% \begin{macrocode}
+\newcommand\AtPageCenter[1]{\AtPageUpperLeft{%
+ \put(\LenToUnit{.5\paperwidth},\LenToUnit{-.5\paperheight}){#1}}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\AtStockLowerLeft}
+% \changes{v2.0a}{2009/10/07}{New}
+% \begin{macrocode}
+\newcommand\AtStockLowerLeft{}
+\ESO@isMEMOIR{%
+ \renewcommand\AtStockLowerLeft[1]{%
+ \begingroup
+ \@tempdima=-\stockwidth
+ \advance\@tempdima\trimedge
+ \advance\@tempdima\paperwidth
+ \if@twoside\ifodd\c@page\else
+ \@tempdima=-\trimedge
+ \fi\fi
+ \@tempdimb=-\stockheight
+ \advance\@tempdimb\paperheight
+ \advance\@tempdimb\trimtop
+ \AtPageLowerLeft{%
+ \put(\LenToUnit{\@tempdima},\LenToUnit{\@tempdimb}){#1}%
+ }%
+ \endgroup
+ }
+}{%
+ \let\AtStockLowerLeft=\AtPageLowerLeft
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\AtStockUpperLeft}
+% \changes{v2.0a}{2009/10/07}{New}
+% \begin{macrocode}
+\newcommand\AtStockUpperLeft{}
+\ESO@isMEMOIR{%
+ \renewcommand\AtStockUpperLeft[1]{%
+ \AtStockLowerLeft{%
+ \put(0,\LenToUnit{\stockheight}){#1}%
+ }%
+ }%
+}{%
+ \let\AtStockUpperLeft=\AtPageUpperLeft
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\AtStockCenter}
+% \changes{v2.0a}{2009/10/07}{New}
+% \begin{macrocode}
+\newcommand\AtStockCenter{}
+\ESO@isMEMOIR{%
+ \renewcommand\AtStockCenter[1]{%
+ \AtStockLowerLeft{%
+ \put(\LenToUnit{.5\stockwidth},\LenToUnit{.5\stockheight}){#1}%
+ }%
+ }%
+}{%
+ \let\AtStockCenter=\AtPageCenter
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\AtTextUpperLeft}
+% \changes{v2.0a}{2009/10/07}{Works now for class \clsname{memoir}}
+% \changes{v2.0e}{2014/04/20}{Wrong horizontal position in one-column mode}
+% \begin{macrocode}
+\ESO@isMEMOIR{%
+ \newcommand\AtTextUpperLeft[1]{%
+ \begingroup
+ \ifodd\c@page
+ \@tempdima=\spinemargin
+ \else
+ \@tempdima=\paperwidth
+ \advance\@tempdima-\textwidth
+ \advance\@tempdima-\spinemargin
+ \fi
+ \@tempdimb=-\uppermargin
+ \AtPageUpperLeft{%
+ \put(\LenToUnit{\@tempdima},\LenToUnit{\@tempdimb}){#1}%
+ }%
+ \endgroup
+ }
+}{%
+ \newcommand\AtTextUpperLeft[1]{%
+ \begingroup
+ \@tempdima=1in\relax
+ \if@twoside
+ \ifodd\c@page
+ \advance\@tempdima\oddsidemargin
+ \else
+ \advance\@tempdima\evensidemargin
+ \fi
+ \else
+ \advance\@tempdima\oddsidemargin
+ \fi
+ \@tempdimb=-1in\relax
+ \advance\@tempdimb-\topmargin
+ \advance\@tempdimb-\headheight
+ \advance\@tempdimb-\headsep
+ \AtPageUpperLeft{%
+ \put(\LenToUnit{\@tempdima},\LenToUnit{\@tempdimb}){#1}%
+ }%
+ \endgroup
+ }
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\AtTextLowerLeft}
+% \begin{macrocode}
+\newcommand\AtTextLowerLeft[1]{\AtTextUpperLeft{%
+ \put(0,\LenToUnit{-\textheight}){#1}}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\AtTextCenter}
+% \begin{macrocode}
+\newcommand\AtTextCenter[1]{\AtTextUpperLeft{%
+ \put(\LenToUnit{.5\textwidth},\LenToUnit{-.5\textheight}){#1}}}
+% \end{macrocode}
+% \end{macro}
+% \DescribeMacro{\ESO@HookIBG}\DescribeMacro{\ESO@HookIIBG}
+% \DescribeMacro{\ESO@HookIIIBG}\DescribeMacro{\ESO@HookIFG}
+% \DescribeMacro{\ESO@HookIIFG}\DescribeMacro{\ESO@HookIIIFG}
+% \changes{v2.0g}{2015/07/21}{New macro \cmd{\ESO@HookIIIFG} for foreground grid.}
+% \begin{macrocode}
+\newcommand{\ESO@HookIBG}{}
+\newcommand{\ESO@HookIIBG}{}
+\newcommand{\ESO@HookIIIBG}{}
+\newcommand{\ESO@HookIFG}{}
+\newcommand{\ESO@HookIIFG}{}
+\newcommand{\ESO@HookIIIFG}{}
+\newcommand{\ESO@HookI}{}
+\newcommand{\ESO@HookII}{}
+\newcommand{\ESO@HookIII}{}
+\let\ESO@HookI=\ESO@HookIBG
+\let\ESO@HookII=\ESO@HookIIBG
+\let\ESO@HookIII=\ESO@HookIIIBG
+% \end{macrocode}
+% \begin{macro}{\AddToShipoutPictureBG}
+% \begin{macro}{\AddToShipoutPictureFG}
+% \changes{v2.0b}{2010/06/08}{New command \cmd{\AddToShipoutPictureFG}}
+% \begin{macrocode}
+\newcommand{\AddToShipoutPictureBG}{%
+ \@ifstar{\g@addto@macro\ESO@HookIIBG}{\g@addto@macro\ESO@HookIBG}}
+\newcommand{\AddToShipoutPicture}{}
+\let\AddToShipoutPicture=\AddToShipoutPictureBG
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\AddToShipoutPictureFG}
+% \begin{macrocode}
+\newcommand{\AddToShipoutPictureFG}{%
+ \@ifstar{\g@addto@macro\ESO@HookIIFG}{\g@addto@macro\ESO@HookIFG}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ClearShipoutPictureBG}
+% \begin{macro}{\ClearShipoutPicture}
+% \begin{macro}{\ClearShipoutPictureFG}
+% \changes{v1.0a}{2002/10/07}{Changed \cmd{\let} to
+% \cmd{\global}\cmd{\let} (suggested by Alberto Lusiani).}
+% \begin{macrocode}
+\newcommand{\ClearShipoutPictureBG}{\global\let\ESO@HookIBG\@empty}
+\newcommand{\ClearShipoutPicture}{}
+\let\ClearShipoutPicture=\ClearShipoutPictureBG
+\newcommand{\ClearShipoutPictureFG}{\global\let\ESO@HookIFG\@empty}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\AtBeginShipout}
+% \begin{macro}{\AtBeginShipoutUpperLeft}
+% \begin{macro}{\AtBeginShipoutUpperLeftForeground}
+% (see package \pkgname{atbegshi})
+% \changes{v2.0c}{2010/10/06}{bugfix for memoir class
+% (reported by YI Hoze)}
+% \begin{macrocode}
+\ESO@isMEMOIR{%
+ \AtBeginShipout{%
+ \@tempdima=-\trimedge
+ \advance\@tempdima-\paperwidth
+ \advance\@tempdima\stockwidth
+ \if@twoside\ifodd\c@page\else
+ \advance\@tempdima2\trimedge
+ \advance\@tempdima\paperwidth
+ \advance\@tempdima-\stockwidth
+ \fi\fi
+ \@tempdimb=\ESO@yoffsetI
+ \advance\@tempdimb-\trimtop
+ \nointerlineskip
+ \AtBeginShipoutUpperLeft{%
+ \put(\LenToUnit{\@tempdima},\LenToUnit{\@tempdimb}){%
+ \ESO@HookIIIBG\ESO@HookIBG\ESO@HookIIBG
+ \global\let\ESO@HookIIBG\@empty
+ }%
+ }%
+ \AtBeginShipoutUpperLeftForeground{%
+ \put(\LenToUnit{\@tempdima},\LenToUnit{\@tempdimb}){%
+ \ESO@HookIFG\ESO@HookIIFG\ESO@HookIIIFG
+ \global\let\ESO@HookIIFG\@empty
+ }%
+ }%
+ }
+}{%
+ \AtBeginShipout{%
+ \nointerlineskip
+ \AtBeginShipoutUpperLeft{%
+ \put(0,\LenToUnit{\ESO@yoffsetI}){%
+ \ESO@HookIIIBG\ESO@HookIBG\ESO@HookIIBG
+ \global\let\ESO@HookIIBG\@empty
+ }%
+ }%
+ \AtBeginShipoutUpperLeftForeground{%
+ \put(0,\LenToUnit{\ESO@yoffsetI}){%
+ \ESO@HookIFG\ESO@HookIIFG\ESO@HookIIIFG
+ \global\let\ESO@HookIIFG\@empty
+ }%
+ }%
+ }
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \subsection{The background grid}
+% \begin{macrocode}
+\RequirePackage{keyval}
+% \end{macrocode}
+% Initialising some macros
+% \changes{v2.0g}{2015/07/21}{New \cmd{\ifESO@gridBG} for foreground/background grid.}
+% \begin{macrocode}
+\newif\ifESO@dvips\ESO@dvipsfalse \newif\ifESO@grid\ESO@gridfalse
+\newif\ifESO@texcoord\ESO@texcoordfalse \newif\ifESO@gridBG\ESO@gridBGfalse
+\newcommand*\ESO@gridunitname{}
+\newcommand*\ESO@gridunit{}
+\newcommand*\ESO@labelfactor{}
+\newcommand*\ESO@griddelta{}\newcommand*\ESO@griddeltaY{}
+\newcommand*\ESO@gridDelta{}\newcommand*\ESO@gridDeltaY{}
+\newcommand*\ESO@gridcolor{}
+\newcommand*\ESO@subgridcolor{}
+\newcommand*\ESO@subgridstyle{dotted}% ???
+\newcommand*\ESO@gap{}
+\newcommand*\ESO@yoffsetI{}\newcommand*\ESO@yoffsetII{}
+\newcommand*\ESO@gridlines{\thinlines}
+\newcommand*\ESO@subgridlines{\thinlines}
+\newcommand*\ESO@hline[1]{\ESO@subgridlines\line(1,0){#1}}
+\newcommand*\ESO@vline[1]{\ESO@subgridlines\line(0,1){#1}}
+\newcommand*\ESO@Hline[1]{\ESO@gridlines\line(1,0){#1}}
+\newcommand*\ESO@Vline[1]{\ESO@gridlines\line(0,1){#1}}
+\newcommand\ESO@fcolorbox[3]{\fbox{#3}}
+\newcommand\ESO@color[1]{}
+\newcommand\ESO@colorbox[2]{%
+ \begingroup
+ \fboxrule=\z@\fbox{#2}%
+ \endgroup
+}
+% \end{macrocode}
+% \begin{macro}{\gridSetup}
+% \begin{macrocode}
+\newcommand\gridSetup[6][]{%
+ \edef\ESO@gridunitname{#1}\edef\ESO@gridunit{#2}
+ \edef\ESO@labelfactor{#3}\edef\ESO@griddelta{#4}
+ \edef\ESO@gridDelta{#5}\edef\ESO@gap{#6}}
+% \end{macrocode}
+% \end{macro}
+% All the key-value options
+% \changes{v2.0g}{2015/07/21}{New option `gridBG'.}
+% \begin{macrocode}
+\define@key{ESO}{texcoord}[true]{\csname ESO@texcoord#1\endcsname}
+\define@key{ESO}{pscoord}[true]{\csname @tempswa#1\endcsname
+ \if@tempswa\ESO@texcoordfalse\else\ESO@texcoordtrue\fi}
+\define@key{ESO}{dvips}[true]{\csname ESO@dvips#1\endcsname}
+\define@key{ESO}{grid}[true]{\csname ESO@grid#1\endcsname
+ \setkeys{ESO}{gridcolor=black,subgridcolor=black}}
+\define@key{ESO}{gridBG}[true]{\csname ESO@gridBG#1\endcsname}
+\define@key{ESO}{colorgrid}[true]{\csname ESO@grid#1\endcsname
+ \setkeys{ESO}{gridcolor=red,subgridcolor=green}}
+\define@key{ESO}{gridcolor}{\def\ESO@gridcolor{#1}}
+\define@key{ESO}{subgridcolor}{\def\ESO@subgridcolor{#1}}
+\define@key{ESO}{subgridstyle}{\def\ESO@subgridstyle{#1}}%
+\define@key{ESO}{gridunit}{%
+ \def\@tempa{#1}
+ \def\@tempb{bp}
+ \ifx\@tempa\@tempb
+ \gridSetup[\@tempa]{1bp}{1}{10}{50}{2}
+ \else
+ \def\@tempb{pt}
+ \ifx\@tempa\@tempb
+ \gridSetup[\@tempa]{\p@}{1}{10}{50}{2}
+ \else
+ \def\@tempb{in}
+ \ifx\@tempa\@tempb
+ \gridSetup[\@tempa]{.1in}{.1}{2}{10}{.5}
+ \else
+ \gridSetup[mm]{1mm}{1}{5}{20}{1}
+ \fi
+ \fi
+ \fi
+}
+\setkeys{ESO}{subgridstyle=solid,pscoord=true,gridunit=mm}
+% \end{macrocode}
+% \changes{v2.0h}{2018/04/12}{\cmd\@classoptionslist must not be \cmd\relax}
+% \begin{macrocode}
+\providecommand*\@classoptionslist{}
+% \end{macrocode}
+% \begin{macro}{\ProcessOptionsWithKV}
+% This macro can process package options using `key=value' syntax.
+% \begin{macrocode}
+\def\ProcessOptionsWithKV#1{%
+ \let\@tempc\@empty
+ \@for\CurrentOption:=\@classoptionslist\do{%
+ \@ifundefined{KV@#1@\CurrentOption}%
+ {}{\edef\@tempc{\@tempc,\CurrentOption,}}}%
+ \edef\@tempc{%
+ \noexpand\setkeys{#1}{\@tempc\@ptionlist{\@currname.\@currext}}}%
+ \@tempc
+ \AtEndOfPackage{\let\@unprocessedoptions\relax}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+\ProcessOptionsWithKV{ESO}%
+% \end{macrocode}
+% \begin{macro}{\ESO@div}
+% Divides length |#1| by |#2| \(\times\) \cmd{\ESO@gridunit} and adds one.
+% Result is in \cmd{\@tempcnta}.
+% \begin{macrocode}
+\newcommand\ESO@div[2]{%
+ \@tempdima=#1\relax\@tempdimb=\ESO@gridunit\relax
+ \@tempdimb=#2\@tempdimb\divide\@tempdima by \@tempdimb
+ \@tempcnta\@tempdima\advance\@tempcnta\@ne}
+% \end{macrocode}
+% \end{macro}
+% \changes{v1.1c}{2005/12/24}{Remove the disadvantageous check of
+% `pdfTeX'. Now using with Xe\LaTeX\ should be possible.}
+% \changes{v2.0a}{2009/10/07}{Better test of color/xcolor}
+% \changes{v2.0d}{2013/10/06}{Improved color commands}
+% \begin{macrocode}
+\@ifundefined{colorbox}{%
+ \IfFileExists{xcolor.sty}{\RequirePackage{xcolor}}%
+ {\RequirePackage{color}}%
+}{}%
+\let\ESO@color=\color
+\renewcommand\ESO@colorbox[2]{%
+ \begingroup
+ \fboxsep=.4ex %
+ \colorbox{#1}{#2}%
+ \endgroup
+}
+\renewcommand\ESO@fcolorbox[3]{%
+ \begingroup
+ \fboxsep=.5ex %
+ \fcolorbox{#1}{#2}{#3}%
+ \endgroup
+}
+\AtBeginDocument{%
+ \ESO@dvipsfalse
+ \@ifundefined{Gin@driver}{}%
+ {%
+ \ifx\Gin@driver\@empty\else%
+ \filename@parse{\Gin@driver}\def\reserved@a{dvips}%
+ \ifx\filename@base\reserved@a\ESO@dvipstrue\fi
+ \fi
+ }%
+ \ifESO@dvips\def\@tempb{eepic}\else\def\@tempb{epic}\fi
+ \def\@tempa{dotted}%\def\ESO@gap{\LenToUnit{6\@wholewidth}}%
+ \ifx\@tempa\ESO@subgridstyle
+ \IfFileExists{\@tempb.sty}%
+ {%
+ \RequirePackage{\@tempb}
+ \renewcommand*\ESO@hline[1]{\ESO@subgridlines\dottedline{\ESO@gap}%
+ (0,0)(##1,0)}
+ \renewcommand*\ESO@vline[1]{\ESO@subgridlines\dottedline{\ESO@gap}%
+ (0,0)(0,##1)}
+ }{}
+ \else
+ \ifx\ESO@gridcolor\ESO@subgridcolor
+ \renewcommand*\ESO@gridlines{\thicklines}
+ \fi
+ \fi
+}
+\ifESO@texcoord
+ \def\ESO@yoffsetI{\z@}\def\ESO@yoffsetII{-\paperheight}
+ \edef\ESO@griddeltaY{-\ESO@griddelta}\edef\ESO@gridDeltaY{-\ESO@gridDelta}
+\else
+ \def\ESO@yoffsetI{-\paperheight}\def\ESO@yoffsetII{\z@}
+ \edef\ESO@griddeltaY{\ESO@griddelta}\edef\ESO@gridDeltaY{\ESO@gridDelta}
+\fi
+% \end{macrocode}
+% \begin{macro}{\ESO@gridpicture}
+% \begin{macrocode}
+\newcommand\ESO@gridpicture{%
+ \begingroup
+ \setlength\unitlength{\ESO@gridunit}%
+ \ESO@color{\ESO@subgridcolor}%
+% \end{macrocode}
+% --- horizontal subgrid lines ---
+% \begin{macrocode}
+ \ESO@div{\paperheight}{\ESO@griddelta}%
+ \multiput(0,0)(0,\ESO@griddeltaY){\@tempcnta}%
+ {\ESO@hline{\LenToUnit{\paperwidth}}}%
+% \end{macrocode}
+% --- vertical subgrid lines ---
+% \begin{macrocode}
+ \ESO@div{\paperwidth}{\ESO@griddelta}%
+ \multiput(0,\LenToUnit{\ESO@yoffsetII})(\ESO@griddelta,0){\@tempcnta}%
+ {\ESO@vline{\LenToUnit{\paperheight}}}%
+ \ESO@color{\ESO@gridcolor}%
+% \end{macrocode}
+% --- horizontal grid lines ---
+% \begin{macrocode}
+ \ESO@div{\paperheight}{\ESO@gridDelta}%
+ \multiput(0,0)(0,\ESO@gridDeltaY){\@tempcnta}%
+ {\ESO@Hline{\LenToUnit{\paperwidth}}}%
+% \end{macrocode}
+% --- vertical grid lines ---
+% \begin{macrocode}
+ \ESO@div{\paperwidth}{\ESO@gridDelta}%
+ \multiput(0,\LenToUnit{\ESO@yoffsetII})(\ESO@gridDelta,0){\@tempcnta}%
+ {\ESO@Vline{\LenToUnit{\paperheight}}}%
+% \end{macrocode}
+% --- horizontal numbers ---
+% \changes{v1.1a}{2002/11/09}{Font setting added.}
+% \begin{macrocode}
+ \fontsize{10}{12}\normalfont%
+ \ESO@div{\paperwidth}{\ESO@gridDelta}%
+ \multiput(0,\ESO@gridDeltaY)(\ESO@gridDelta,0){\@tempcnta}{%
+ \@tempcntb=\@tempcnta\advance\@tempcntb-\@multicnt
+ \ifnum\@tempcntb>1\relax
+ \multiply\@tempcntb by \ESO@gridDelta\relax
+ \@tempdima=\@tempcntb sp\@tempdima=\ESO@labelfactor\@tempdima
+ \@tempcntb=\@tempdima%
+ \makebox(0,0)[c]{\ESO@colorbox{white}{\the\@tempcntb}}%
+ \fi}%
+% \end{macrocode}
+% --- vertical numbers ---
+% \begin{macrocode}
+ \ifx\ESO@gridunitname\@empty\def\@tempa{0}\else\def\@tempa{1}\fi
+ \ESO@div{\paperheight}{\ESO@gridDelta}%
+ \multiput(\ESO@gridDelta,0)(0,\ESO@gridDeltaY){\@tempcnta}{%
+ \@tempcntb=\@tempcnta\advance\@tempcntb-\@multicnt%
+ \ifnum\@tempcntb>\@tempa\relax
+ \multiply\@tempcntb by \ESO@gridDelta\relax%
+ \@tempdima=\@tempcntb sp\@tempdima=\ESO@labelfactor\@tempdima
+ \@tempcntb=\@tempdima
+ \makebox(0,0)[c]{\ESO@colorbox{white}{\the\@tempcntb}}%
+ \fi
+ }%
+% \end{macrocode}
+% --- the unit label ---
+% \begin{macrocode}
+ \ifx\ESO@gridunitname\@empty\else
+ \thicklines\fboxrule=\@wholewidth
+ \put(\ESO@gridDelta,\ESO@gridDeltaY){\makebox(0,0)[c]{%
+ \ESO@fcolorbox{\ESO@gridcolor}{white}{%
+ \textbf{\ESO@gridunitname}}}}%
+ \fi
+ \normalcolor%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+% Add the grid to the shipout picture (\cmd{\ESO@HookIIIFG} or
+% \cmd{\ESO@HookIIIBG}) is independed from the user commands
+% \cmd{\AddToShipoutPictureBG} and \cmd{\AddToShipoutPictureBG*}).
+% \changes{v2.0d}{2013/10/06}{grid should be in foreground}
+% \changes{v2.0g}{2015/07/21}{Foreground/background grid.}
+% \begin{macrocode}
+\ifESO@grid
+ \ifESO@gridBG
+ \g@addto@macro\ESO@HookIIIBG{\ESO@gridpicture}%
+ \else
+ \g@addto@macro\ESO@HookIIIFG{\ESO@gridpicture}%
+ \fi
+\fi
+% \end{macrocode}
+%
+% \Finale
+\endinput