% \iffalse meta-comment
%
% Copyright 2017-2020 by Tibor Tomacs
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% 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.3 or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
%
% This work has the LPPL maintenance status `maintained'.
% 
% The Current Maintainer of this work is Tibor Tomacs.
%
% \fi
%
% \iffalse
%<*driver>
\ProvidesFile{fgruler.dtx}
%</driver>
%<package>\NeedsTeXFormat{LaTeX2e}[2020/10/01]
%<package>\ProvidesPackage{fgruler}[2020/11/04 v1.3 Package for drawing rulers on the foreground or in the text]
%
%<*driver>
\documentclass{ltxdoc}
\OnlyDescription
\usepackage[a4paper,margin=25mm,marginparwidth=19mm,marginparsep=5mm,headsep=5mm,headheight=4mm,footskip=10mm]{geometry}
\usepackage[pdfstartview=FitH,colorlinks,allcolors=black,bookmarksnumbered,hyperfootnotes=false]{hyperref}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[english]{babel}
\usepackage{listings,fontawesome,fancyvrb}
\usepackage[type=none,color=red!80!black]{fgruler}

\flushbottom
\VerbatimFootnotes

\setlength{\labelsep}{0pt}

\lstnewenvironment{examplelst}{\lstset{
gobble=2,
belowskip=\bigskipamount,
basicstyle=\ttfamily,
backgroundcolor=\color{black!10},
frame=trbl,
framesep=3pt,
columns=fullflexible,
xleftmargin=3.4pt,
xrightmargin=3.4pt,
keepspaces}}{}

\newcommand{\commandinline}{\lstinline[
literate={<}{{$\langle$}}1{>}{{$\rangle$}}1,
delim={[is][\color{green!50!black}\normalfont\itshape]{!}{!}},
basicstyle=\color{blue!80!black}\ttfamily,
columns=fullflexible,
keepspaces]}

\begin{document}
    \DocInput{./fgruler.dtx}
\end{document}
%</driver>
% \fi
%
% \GetFileInfo{fgruler.sty}
%
% \title{The {\bfseries\sffamily fgruler} package\\{\large v1.3 (2020/11/04)}}
% \author{Tibor T\'{o}m\'{a}cs\\{\normalsize\url{tomacs.tibor@uni-eszterhazy.hu}}}
% \date{}
% \maketitle
% 
% \fgruler{upperleft}{0cm}{0cm}
% \noindent
% {\rulerparams{}{\scriptsize\sffamily\color{teal}}{blue}{}{}
% {\fgrulerdefnum{}\fgrulercaptioncm{}\ruler{rightdown}{\textwidth}}\\[2pt]
% \ruler{rightup}{\textwidth}}
% 
% \section{Introduction}
% The \texttt{fgruler} is an abbreviation for the \emph{foreground ruler}.
% This package draws a horizontal and a vertical ruler on the foreground of every (or a given) page at absolute position.
% In this way, you can check the page layout dimensions.
% 
% \medskip\noindent
% Besides, you can draw various rulers in the text, too.
% 
% \medskip\noindent
% The \texttt{fgruler} package requires the services of the following packages: \texttt{kvoptions}, \texttt{etoolbox}, \texttt{xcolor}, \texttt{graphicx}, \texttt{eso-pic}.
% 
% \section{Loading package}
% Load the package with
% \begin{flushleft}
% \commandinline|\usepackage[!<options>!]{fgruler}|
% \end{flushleft}
% or
% \begin{flushleft}
% \commandinline|\usepackage{fgruler}|\\
% \commandinline|\setfgruler{!<options>!}|
% \end{flushleft}
% The \verb|\setfgruler| command is usable in the \texttt{document} environment, too.
% 
% \section{Options}\label{sec:options}
% By default, the \texttt{fgruler} package draws a square ruler on the foreground of every page. The following package options set the parameters of these rulers.
% \begin{description}
% \item\commandinline|unit=!<unit>!|\\
% Ruler unit. The \commandinline|!<unit>!| legal values:
% \begin{description}
% \item\commandinline|cm| Metric ruler (centimeter). Default value.
% \item\commandinline|in| English ruler (inch).
% \end{description}
% 
% \item\commandinline|type=!<type name>!|\\
% Origin, directions and lengths of the ruler. The \commandinline|!<type name>!| legal values:
% \begin{description}
% \item\commandinline|upperleft  | Default value. Origin: upper left corner of the paper. Directions: down and right. Lengths: paper sizes.
% \item\commandinline|upperright | Origin: upper right corner of the paper. Directions: down and left. Lengths: paper sizes.
% \item\commandinline|lowerleft  | Origin: lower left corner of the paper. Directions: up and right. Lengths: paper sizes.
% \item\commandinline|lowerright | Origin: lower right corner of the paper. Directions: up and left. Lengths: paper sizes.
% \item\commandinline|upperleftT | Origin: upper left corner of the text area. Directions: down and right. Lengths: text area sizes.
% \item\commandinline|upperrightT| Origin: upper right corner of the text area. Directions: down and left. Lengths: text area sizes.
% \item\commandinline|lowerleftT | Origin: lower left corner of the text area. Directions: up and right. Lengths: text area sizes.
% \item\commandinline|lowerrightT| Origin: lower right corner of the text area. Directions: up and left. Lengths: text area sizes.
% \item\commandinline|none| Not drawing ruler.
% \item\commandinline|user| Each \commandinline|!<unit>!|--\commandinline|!<type name>!| pair activates an \commandinline|\fgruler@!<unit>!@!<type name>!@fg| command, which is equivalent to \commandinline|\fgrulertype{!<unit>!}{!<type name>!}|.\\
% You can control the effect of this option by redefining the \commandinline|\fgruler@!<unit>!@user@fg| commands, which are empty in the default case.\\
% \commandinline|\def\fgruler@cm@user@fg{!<code>!}| is equivalent to \commandinline|\fgrulerdefusercm{!<code>!}|.\\
% Similarly, \commandinline|\def\fgruler@in@user@fg{!<code>!}| is equivalent to \commandinline|\fgrulerdefuserin{!<code>!}|.\\
% See \ref{example:user-first}--\ref{example:user-last} examples.
% \end{description}
% 
% \item\commandinline|hshift=!<length>!|\\
% Horizontal shift of the ruler, if the \commandinline|!<type name>!| is \verb|upperleft|, \verb|lowerleft|, \verb|upperright| or \verb|lowerright|.
% The shift direction is right, if the \commandinline|!<type name>!| is \verb|upperleft| or \verb|lowerleft|.
% The shift direction is left, if the \commandinline|!<type name>!| is \verb|upperright| or \verb|lowerright|.
% Default: \verb|hshift=0cm|.
% 
% \item\commandinline|vshift=!<length>!|\\
% Vertical shift of the ruler, if the \commandinline|!<type name>!| is \verb|upperleft|, \verb|lowerleft|, \verb|upperright| or \verb|lowerright|.
% The shift direction is down, if the \commandinline|!<type name>!| is \verb|upperleft| or \verb|upperright|.
% The shift direction is up, if the \commandinline|!<type name>!| is \verb|lowerleft| or \verb|lowerright|.
% Default: \verb|vshift=0cm|.
% 
% \item\commandinline|color=!<color name>!|\\
% Ruler color (see \texttt{xcolor} package). Default: \verb|color=black|.
% 
% \item\commandinline|numsep=!<length>!|\\
% Separation between number and ruler. Default: \verb|numsep=3pt|.
% 
% \item\commandinline|markthick=!<length>!|\\
% Mark thickness. Default: \verb|markthick=0.4pt|.
% 
% \item\commandinline|marklength=!<length>!|\\
% Mark length at integer units (see the red marks):
% {\fgrulernoborderline\fgrulercaptioncm{}\fgrulerthickcm{}{}{1pt}\fgrulercolorcm{}{}{red}\ruler{rightup}{3cm}}
% Default: \verb|marklength=2mm|. See the length of the other marks in Section \ref{sec:additional}.
% 
% \item\commandinline|numfont=!<font type>!|\\
% Number font type. Default: \verb|numfont=\scriptsize\sffamily|. You can use this option only in \verb|\setfgruler| command.
% 
% \item\commandinline|showframe| or \commandinline|showframe=true|\\
% It draws visible frames for the text and margin area, and lines for the head and foot.
% Their color and thickness are determined by the \texttt{color} and the \texttt{markthick} options.
% 
% \item\commandinline|showframe=false|\\
% It deactivates the \texttt{showframe} option.
% 
% \item\commandinline|nonefgrulers|\\
% It kills all of the rulers on the foreground, including also those, which are generated by \verb|\fgruler| (see Section \ref{sec:givenpage}).
% But the rulers, which were drawn by \verb|\ruler| and \verb|\squareruler| (see Section \ref{sec:intext}), do not disappear.
% Furthermore it deactivates the \texttt{showframe} option, too.
% In this case the \texttt{fgruler} package does not load the \texttt{eso-pic} package.
% This option works only in preamble.
% 
% It is recommended to use in two cases:
% \begin{itemize}
% \item To draw rulers only in text, there is no need for the checking function.
% \item To halt the checking function temporarily.
% \end{itemize}
% 
% The \texttt{type=none} is not identical with \texttt{nonefgrulers} option. The differences:
% \begin{itemize}
% \item \texttt{type=none} does not kill the \verb|\fgruler| command and the \texttt{showframe} option.
% \item \texttt{type=none} is alterable in any point of the document.
% \item \texttt{type=none} works in document environment, too.
% \item The \texttt{fgruler} package loads the \texttt{eso-pic} package, if you use the \texttt{type=none} option without \texttt{nonefgrulers}.
% \end{itemize}
% \end{description}
% 
% \section{Drawing square rulers on the foreground of a given page}\label{sec:givenpage}
% \begin{description}
% \item\commandinline|\fgruler[!<unit!>]{!<type name>!}{!<hshift>!}{!<vshift>!}|\\
% It draws a square ruler on the foreground of that page, where this command is expanded.
% You can use more \verb|\fgruler| commands in the same page.
% 
% The package options (see Section \ref{sec:options}) also work on this command, except for \texttt{unit}, \texttt{type}, \texttt{hshift} and \texttt{vshift}, since these are the parameters of the \verb|\fgruler|.
% 
% If you use \texttt{nonefgrulers} option in preamble, then this command is effectless.
% \begin{description}
% \item\commandinline|!<unit!>| options:\\
% \commandinline|cm| Metric ruler (centimeter). Default option.\\
% \commandinline|in| English ruler (inch).
% 
% \item\commandinline|!<type name!>| parameters:\\
% \commandinline|upperleft | Origin: upper left corner. Directions: down and right.\\
% \commandinline|upperright| Origin: upper right corner. Directions: down and left.\\
% \commandinline|lowerleft | Origin: lower left corner. Directions: up and right.\\
% \commandinline|lowerright| Origin: lower right corner. Directions: up and left.
% 
% \item\commandinline|!<hshift>!|
% Horizontal shift.
% The shift direction is right, if the \commandinline|!<type name>!| is \verb|upperleft| or \verb|lowerleft|, otherwise it is left.
% 
% \item\commandinline|!<vshift>!|
% Vertical shift.
% The shift direction is down, if the \commandinline|!<type name>!| is \verb|upperleft| or \verb|upperright|, otherwise it is up.
% 
% \item Example:
% \verb|\fgruler[in]{upperright}{1in}{2.5in}|
% \end{description}
% \end{description}
% 
% \section{Drawing rulers in the text}\label{sec:intext}
% \begin{description}
% \item\commandinline|\ruler[!<unit!>]{!<type name>!}{!<length>!}|\\
% It draws a horizontal or a vertical ruler.
% The bottom of the ruler is aligned to the baseline of the surrounding text.
% The package options (see Section \ref{sec:options}) do not work on this command.
% \begin{description}
% \item\commandinline|!<unit!>| options:\\
% \commandinline|cm| Metric ruler (centimeter). Default option.\\
% \commandinline|in| English ruler (inch).
% 
% \item\commandinline|!<type name!>| parameters:\\
% \commandinline|downright | Direction: down. The numbers are on the right side.\\
% \commandinline|downleft  | Direction: down. The numbers are on the left side.\\
% \commandinline|upright   | Direction: up. The numbers are on the right side.\\
% \commandinline|upleft    | Direction: up. The numbers are on the left side.\\
% \commandinline|rightdown | Direction: right. The numbers are on the down side.\\
% \commandinline|rightup   | Direction: right. The numbers are on the up side.\\
% \commandinline|leftdown  | Direction: left. The numbers are on the down side.\\
% \commandinline|leftup    | Direction: left. The numbers are on the up side.
% 
% \item\commandinline|!<length>!|
% Ruler length.
% 
% \item Example:
% \verb|\ruler{rightdown}{5cm}|
% \ruler{rightdown}{5cm}
% \end{description}
% 
% \item\commandinline|\ruler*[!<unit!>]{!<type name>!}{!<length>!}|\\
% It works like \verb|\ruler|, but the top of the ruler is aligned to the baseline of the surrounding text.
% 
% Example:
% \verb|\ruler*{rightdown}{5cm}|
% \ruler*{rightdown}{5cm}
% 
% \item\commandinline|\squareruler[!<unit!>]{!<type name>!}{!<width>!}{!<height>!}|\\
% It draws a square ruler.
% The bottom of the square ruler is aligned to the baseline of the surrounding text.
% The package options (see Section \ref{sec:options}) do not work on this command.
% \begin{description}
% \item\commandinline|!<unit!>| options:\\
% \commandinline|cm| Metric ruler (centimeter). Default option.\\
% \commandinline|in| English ruler (inch).
% 
% \item\commandinline|!<type name!>| parameters:\\
% \commandinline|upperleft | Directions: down and right.\\
% \commandinline|upperright| Directions: down and left.\\
% \commandinline|lowerleft | Directions: up and right.\\
% \commandinline|lowerright| Directions: up and left.
% 
% \item\commandinline|!<width>!|
% Square ruler width.
% 
% \item\commandinline|!<height>!|
% Square ruler height.
% 
% \item Example:
% \verb|\squareruler{upperleft}{5cm}{1cm}|
% \squareruler{upperleft}{5cm}{1cm}
% \end{description}
% 
% \item\commandinline|\squareruler*[!<unit!>]{!<type name>!}{!<width>!}{!<height>!}|\\
% It works like \verb|\squareruler|, but the top of the square ruler is aligned to the baseline of the surrounding text.
% 
% Example:
% \verb|\squareruler*{upperleft}{5cm}{1cm}|
% \squareruler*{upperleft}{5cm}{1cm}
% 
% \item\commandinline|\rulerparams{!<markthick>!}{!<numfont>!}{!<color>!}{!<marklength>!}{!<numsep>!}|\\
% It sets the parameters of the rulers, which are drawn by \verb|\ruler| or \verb|\squareruler|. 
% If an argument is empty, then that parameter will not be changed.
% \begin{description}
% \item\commandinline|!<markthick>!| Mark thickness. Default: \verb|0.4pt|
% \item\commandinline|!<numfont>!| Number font type. Default: \verb|\scriptsize\sffamily|
% \item\commandinline|!<color>!| Ruler line color. Default: \verb|black|
% \item\commandinline|!<marklength>!| Mark length at integer units. Default: \verb|2mm|
% \item\commandinline|!<numsep>!| Separation between number and ruler. Default: \verb|3pt|
% \item For example, \verb|\rulerparams{}{}{red}{}{}| changes the ruler color to red.
% \end{description}
% 
% \item\commandinline|\rulerparamsfromfg|\\
% It sets the ruler parameters from the actual foreground ruler parameters.
% 
% \item\commandinline|\rulernorotatenum|\\
% By default, the numbers of the vertical rulers (which were generated by \verb|\ruler| or \verb|\squareruler|) are rotated by 90$^\circ$.
% It kills this action.
% This command is usable only in \texttt{document} environment.
% 
% Example: \verb|{\rulernorotatenum\ruler{upright}{1cm}}| {\rulernorotatenum\ruler{upright}{1cm}}
% 
% \item\commandinline|\rulerrotatenum|\\
% After \verb|\rulernorotatenum|, it reactivates the number rotating.
% This command is usable only in \texttt{document} environment.
% \end{description}
% 
% \section{Additional setting commands}\label{sec:additional}
% The following commands can work on all of the rulers, which are drawn by \texttt{fgruler} package.
% \begin{description}
% \item\commandinline|\fgrulerstartnum{!<num>!}|\\
% The \commandinline|!<num>!| is a nonnegative integer, which will be the starting number on the horizontal and vertical rulers.
% Default: \verb|\fgrulerstartnum{0}|
% 
% Example: \verb|{\fgrulerstartnum{5}\squareruler{lowerleft}{3cm}{1cm}}| {\fgrulerstartnum{5}\squareruler{lowerleft}{3cm}{1cm}}
% 
% \item\commandinline|\fgrulerstartnumh{!<num>!}|\\
% The \commandinline|!<num>!| is a nonnegative integer, which will be the starting number on the horizontal rulers.
% Default: \verb|\fgrulerstartnumh{0}|
% 
% Example: \verb|{\fgrulerstartnumh{5}\squareruler{lowerleft}{3cm}{1cm}}| {\fgrulerstartnumh{5}\squareruler{lowerleft}{3cm}{1cm}}
% 
% \item\commandinline|\fgrulerstartnumv{!<num>!}|\\
% The \commandinline|!<num>!| is a nonnegative integer, which will be the starting number on the vertical rulers.
% Default: \verb|\fgrulerstartnumv{0}|
% 
% Example: \verb|{\fgrulerstartnumv{5}\squareruler{lowerleft}{3cm}{1cm}}| {\fgrulerstartnumv{5}\squareruler{lowerleft}{3cm}{1cm}}
% 
% \item\commandinline|\fgrulernoborderline|\\
% By default, there is a borderline on one side of the ruler.
% It disappears by this command.
% 
% Example: \verb|{\fgrulernoborderline\ruler{rightup}{3cm}}| {\fgrulernoborderline\ruler{rightup}{3cm}}
% 
% \item\commandinline|\fgrulerborderline|\\
% After \verb|\fgrulernoborderline|, it reactivates the previous default effect.
% 
% \item\commandinline|\fgrulercaptioncm{!<caption>!}|\\
% Unit caption in metric ruler.
% Default: \verb|\fgrulercaptioncm{cm}|
% 
% Example: \verb|{\fgrulercaptioncm{}\ruler{rightup}{3cm}}| {\fgrulercaptioncm{}\ruler{rightup}{3cm}}
% 
% \item\commandinline|\fgrulercaptionin{!<caption>!}|\\
% Unit caption in English ruler.
% Default: \verb|\fgrulercaptionin{inch}|
% 
% \item\commandinline|\fgrulerdefnum{!<definition>!}|\\
% The ruler numbers are determined by the \commandinline|fgrulernum| counter.
% Its current value is printed by the \commandinline|\thefgrulernum|.
% Its default definition is \verb|\def\thefgrulernum{\arabic{fgrulernum}}|, which is equivalent to \verb|\fgrulerdefnum{\arabic{fgrulernum}}|.
% 
% Example: \verb|{\fgrulerdefnum{}\fgrulercaptioncm{}\ruler{rightdown}{2cm}}| {\fgrulerdefnum{}\fgrulercaptioncm{}\ruler{rightdown}{2cm}}
% 
% \item\commandinline|\fgrulerratiocm{!<ratio1>!}{!<ratio2>!}|\\
% Mark length ratios in metric rulers.
% If an argument is empty, then that parameter will not be changed.
% \begin{description}
% \item\commandinline|!<ratio1>!|
% Mark length ratio at $k/10$\,cm, where $k$ is positive integer and not divisible by 5.\\
% {\fgrulerthickcm{1pt}{}{}\fgrulercolorcm{red}{}{}\ruler{rightup}{3cm}}\\
% For example, if this ratio is 0.5 and the mark length at integer unit is 2\,mm, then this mark length will be $0.5\cdot 2\,\mathrm{mm}=1\,\mathrm{mm}$.
% 
% \item\commandinline|!<ratio2>!|
% Mark length ratio at $k/2$\,cm, where $k$ is positive odd integer.\\
% {\fgrulerthickcm{}{1pt}{}\fgrulercolorcm{}{red}{}\ruler{rightup}{3cm}}
% 
% \item Default: \verb|\fgrulerratiocm{0.5}{0.75}|
% \end{description}
% 
% \item\commandinline|\fgrulerratioin{!<ratio1>!}{!<ratio2>!}{!<ratio3>!}{!<ratio4>!}|\\
% Mark length ratios in English rulers.
% If an argument is empty, then that parameter will not be changed.
% \begin{description}
% \item\commandinline|!<ratio1>!|
% Mark length ratio at $k/16$\,inch, where $k$ is positive odd integer.\\
% {\fgrulerthickin{1pt}{}{}{}{}\fgrulercolorin{red}{}{}{}{}\ruler[in]{rightup}{2in}}
% 
% \item\commandinline|!<ratio2>!|
% Mark length ratio at $k/8$\,inch, where $k$ is positive odd integer.\\
% {\fgrulerthickin{}{1pt}{}{}{}\fgrulercolorin{}{red}{}{}{}\ruler[in]{rightup}{2in}}
% 
% \item\commandinline|!<ratio3>!|
% Mark length ratio at $k/4$\,inch, where $k$ is positive odd integer.\\
% {\fgrulerthickin{}{}{1pt}{}{}\fgrulercolorin{}{}{red}{}{}\ruler[in]{rightup}{2in}}
% 
% \item\commandinline|!<ratio4>!|
% Mark length ratio at $k/2$\,inch, where $k$ is positive odd integer.\\
% {\fgrulerthickin{}{}{}{1pt}{}\fgrulercolorin{}{}{}{red}{}\ruler[in]{rightup}{2in}}
% 
% \item Default: \verb|\fgrulerratioin{0.25}{0.375}{0.625}{0.75}|
% \end{description}
% 
% \item\commandinline|\fgrulerthickcm{!<thick1>!}{!<thick2>!}{!<thick3>!}|\\
% Mark thicknesses in metric rulers.
% If an argument is empty, then that parameter will not be changed.
% \begin{description}
% \item\commandinline|!<thick1>!|
% Mark thickness at $k/10$\,cm, where $k$ is positive integer and not divisible by 5.
% 
% \item\commandinline|!<thick2>!|
% Mark thickness at $k/2$\,cm, where $k$ is positive odd integer.
% 
% \item\commandinline|!<thick3>!|
% Mark thickness at integer units.
% 
% \item The default values are given by \commandinline|!<markthick>!| of \verb|\rulerparams|, respectively by \texttt{markthick} option.
% 
% \item Example:\\
% \verb|{\fgrulerthickcm{}{}{2pt}|\\
% \verb|\rulerparams{}{}{}{5mm}{}|\\
% \verb|\fgrulernoborderline|\\
% \verb|\ruler{rightdown}{3cm}}|\\[2mm]
% {\fgrulerthickcm{}{}{2pt}
% \rulerparams{}{}{}{5mm}{}
% \fgrulernoborderline
% \ruler{rightdown}{3cm}}
% \end{description}
% 
% \item\commandinline|\fgrulerthickin{!<thick1>!}{!<thick2>!}{!<thick3>!}{!<thick4>!}{!<thick5>!}|\\
% Mark thicknesses in English rulers.
% If an argument is empty, then that parameter will not be changed.
% \begin{description}
% \item\commandinline|!<thick1>!|
% Mark thickness at $k/16$\,inch, where $k$ is positive odd integer.
% 
% \item\commandinline|!<thick2>!|
% Mark thickness at $k/8$\,inch, where $k$ is positive odd integer.
% 
% \item\commandinline|!<thick3>!|
% Mark thickness at $k/4$\,inch, where $k$ is positive odd integer.
% 
% \item\commandinline|!<thick4>!|
% Mark thickness at $k/2$\,inch, where $k$ is positive odd integer.
% 
% \item\commandinline|!<thick5>!|
% Mark thickness at integer units.
% 
% \item The default values are given by \commandinline|!<markthick>!| of \verb|\rulerparams|, respectively by \texttt{markthick} option.
% 
% \item Example:\\
% \verb|{\fgrulerthickin{}{}{}{}{2pt}|\\
% \verb|\rulerparams{}{}{}{5mm}{}|\\
% \verb|\fgrulernoborderline|\\
% \verb|\ruler[in]{rightdown}{3in}}|\\[2mm]
% {\fgrulerthickin{}{}{}{}{2pt}
% \rulerparams{}{}{}{5mm}{}
% \fgrulernoborderline
% \ruler[in]{rightdown}{3in}}
% \end{description}
% 
% \item\commandinline|\fgrulercolorcm{!<color1>!}{!<color2>!}{!<color3>!}|\\
% Mark colors in metric rulers.
% If an argument is empty, then that parameter will not be changed.
% \begin{description}
% \item\commandinline|!<color1>!|
% Mark color at $k/10$\,cm, where $k$ is positive integer and not divisible by 5.
% 
% \item\commandinline|!<color2>!|
% Mark color at $k/2$\,cm, where $k$ is positive odd integer.
% 
% \item\commandinline|!<color3>!|
% Mark color at integer units.
% 
% \item The default values are given by \commandinline|!<color>!| of \verb|\rulerparams|, respectively by \texttt{color} option.
% 
% \item Example:\\
% \verb|{\fgrulercolorcm{green}{blue}{red}|\\
% \verb|\rulerparams{1pt}{}{}{5mm}{}|\\
% \verb|\fgrulernoborderline|\\
% \verb|\ruler{rightdown}{3cm}}|\\[2mm]
% {\fgrulernoborderline
% \fgrulercolorcm{green}{blue}{red}
% \rulerparams{1pt}{}{}{5mm}{}
% \ruler{rightdown}{3cm}}
% \end{description}
% 
% \item\commandinline|\fgrulercolorin{!<color1>!}{!<color2>!}{!<color3>!}{!<color4>!}{!<color5>!}|\\
% Mark color in English rulers.
% If an argument is empty, then that parameter will not be changed.
% \begin{description}
% \item\commandinline|!<color1>!|
% Mark color at $k/16$\,inch, where $k$ is positive odd integer.
% 
% \item\commandinline|!<color2>!|
% Mark color at $k/8$\,inch, where $k$ is positive odd integer.
% 
% \item\commandinline|!<color3>!|
% Mark color at $k/4$\,inch, where $k$ is positive odd integer.
% 
% \item\commandinline|!<color4>!|
% Mark color at $k/2$\,inch, where $k$ is positive odd integer.
% 
% \item\commandinline|!<color5>!|
% Mark color at integer units.
% 
% \item The default values are given by \commandinline|!<color>!| of \verb|\rulerparams|, respectively by \texttt{color} option.
% 
% \item Example:\\
% \verb|{\fgrulercolorin{yellow}{orange}{green}{blue}{red}|\\
% \verb|\rulerparams{1pt}{}{}{5mm}{}|\\
% \verb|\fgrulernoborderline|\\
% \verb|\ruler[in]{rightdown}{3in}}|\\[2mm]
% {\fgrulernoborderline
% \fgrulercolorin{yellow}{orange}{green}{blue}{red}
% \rulerparams{1pt}{}{}{5mm}{}
% \ruler[in]{rightdown}{3in}}
% \end{description}
% 
% \item\commandinline|\fgrulerreset|\\
% It sets all options and parameters to default values.
% This command is usable only in \texttt{document} environment.
% \end{description}
% 
% \medskip\noindent\textcolor{red}{\faWarning}
% All setting commands obey the normal scoping rules, i.e.\ if you use them inside a group, then the changing of the parameters is not valid outside the group.
% 
% \newpage\fgrulerreset
% \section{Examples}
% \subsection{Deafult case}
% The output of the following example is the ruler in this page. It is the default case.
% \begin{examplelst}
% \documentclass{article}
% \usepackage{fgruler}
% \begin{document}
% ...
% \end{document}
% \end{examplelst}
% 
% \newpage\fgrulerreset
% \subsection{The \texttt{showframe} and \texttt{color} options}
% \setfgruler{color=red,showframe}
% \begin{examplelst}
% \documentclass{article}
% \usepackage[color=red,showframe]{fgruler}
% \begin{document}
% ...
% \end{document}
% \end{examplelst}
% 
% \newpage\fgrulerreset
% \subsection{Shift in default case}
% \setfgruler{hshift=1cm,vshift=2cm}
% \begin{examplelst}
% \documentclass{article}
% \usepackage[hshift=1cm,vshift=2cm]{fgruler}
% \begin{document}
% ...
% \end{document}
% \end{examplelst}
% 
% \newpage\fgrulerreset
% \subsection{Shift in case \texttt{type=upperright} option}
% \setfgruler{type=upperright,hshift=1cm,vshift=2cm}
% \begin{examplelst}
% \documentclass{article}
% \usepackage[type=upperright,hshift=1cm,vshift=2cm]{fgruler}
% \begin{document}
% ...
% \end{document}
% \end{examplelst}
% 
% \newpage\fgrulerreset
% \subsection{Shift in case \texttt{type=lowerleft} option}
% \setfgruler{type=lowerleft,hshift=1cm,vshift=2cm}
% \begin{examplelst}
% \documentclass{article}
% \usepackage[type=lowerleft,hshift=1cm,vshift=2cm]{fgruler}
% \begin{document}
% ...
% \end{document}
% \end{examplelst}
% 
% \newpage\fgrulerreset
% \subsection{Shift in case \texttt{type=lowerright} option}
% \setfgruler{type=lowerright,hshift=1cm,vshift=2cm}
% \begin{examplelst}
% \documentclass{article}
% \usepackage[type=lowerright,hshift=1cm,vshift=2cm]{fgruler}
% \begin{document}
% ...
% \end{document}
% \end{examplelst}
% 
% \newpage\fgrulerreset
% \subsection{The \texttt{type=upperleftT} option}
% \setfgruler{type=upperleftT}
% \begin{examplelst}
% \documentclass{article}
% \usepackage[type=upperleftT]{fgruler}
% \begin{document}
% ...
% \end{document}
% \end{examplelst}
% 
% \newpage\fgrulerreset
% \subsection{Setting the \texttt{type=user} option}\label{example:user-first}
% In the next example the \texttt{type=user} option activates \texttt{type=upperright} or \texttt{type=upperleft}, depending on the page number is odd or even.
% \setfgruler{type=none}
% \begin{examplelst}
% \documentclass{article}
% \usepackage[type=user]{fgruler}
% \fgrulerdefusercm{%
%     \ifodd\value{page}\fgrulertype{cm}{upperright}%
%         \else\fgrulertype{cm}{upperleft}\fi}
% \fgrulerdefuserin{%
%     \ifodd\value{page}\fgrulertype{in}{upperright}%
%         \else\fgrulertype{in}{upperleft}\fi}
% \begin{document}
% ...
% \end{document}
% \end{examplelst}
% 
% \newpage\fgrulerreset
% \subsection{Setting the \texttt{type=user} option}
% In the next example the \texttt{type=user} option combines the effect of \texttt{type=upperleft} and \texttt{type=upperleftT}.
% \setfgruler{type=user}
% \fgrulerdefusercm{\fgrulertype{cm}{upperleft}\fgrulertype{cm}{upperleftT}}
% \begin{examplelst}
% \documentclass{article}
% \usepackage[type=user]{fgruler}
% \fgrulerdefusercm{\fgrulertype{cm}{upperleft}\fgrulertype{cm}{upperleftT}}
% \fgrulerdefuserin{\fgrulertype{in}{upperleft}\fgrulertype{in}{upperleftT}}
% \begin{document}
% ...
% \end{document}
% \end{examplelst}
%
% \newpage\fgrulerreset
% \subsection{Setting the \texttt{type=user} option}
% In this example the \texttt{type=user} option combines the effect of \texttt{type=upperleftT} and \texttt{type=lowerrightT}.
% \setfgruler{type=user}
% \fgrulerdefusercm{\fgrulertype{cm}{upperleftT}\fgrulertype{cm}{lowerrightT}}
% \begin{examplelst}
% \documentclass{article}
% \usepackage[type=user]{fgruler}
% \fgrulerdefusercm{\fgrulertype{cm}{upperleftT}\fgrulertype{cm}{lowerrightT}}
% \fgrulerdefuserin{\fgrulertype{in}{upperleftT}\fgrulertype{in}{lowerrightT}}
% \begin{document}
% ...
% \end{document}
% \end{examplelst}
% 
% \newpage\fgrulerreset
% \subsection{Setting the \texttt{type=user} option}
% In the next example the \texttt{type=user} option places a vertical ruler at the left border of the text area.
% \setfgruler{type=user}
%\fgrulerdefusercm{\AtTextLowerLeft{\ignorespaces\rulerparamsfromfg\llap{\ruler{downleft}{\textheight}}}}
% \begin{examplelst}
% \documentclass{article}
% \usepackage[type=user]{fgruler}
% \newcommand{\fgruleruser}[1]{%
%     \AtTextLowerLeft{% See eso-pic package!
%         \rulerparamsfromfg%
%         \llap{\ruler[#1]{downleft}{\textheight}}%
%     }%
% }
% \fgrulerdefusercm{\fgruleruser{cm}}
% \fgrulerdefuserin{\fgruleruser{in}}
% \begin{document}
% ...
% \end{document}
% \end{examplelst}
% 
% \newpage\fgrulerreset
% \subsection{Setting the \texttt{type=user} option}
% In the next example the \texttt{type=user} option places rulers at the right and bottom borders of the text area.
% \setfgruler{type=user}
%\fgrulerdefusercm{\AtTextLowerLeft{\ignorespaces\rulerparamsfromfg\rulernorotatenum\llap{\ruler{downleft}{\textheight}}\ruler*{rightdown}{\textwidth}}}
% \begin{examplelst}
% \documentclass{article}
% \usepackage[type=user]{fgruler}
% \newcommand{\fgruleruser}[1]{%
%     \AtTextLowerLeft{% See eso-pic package!
%         \rulerparamsfromfg%
%         \rulernorotatenum%
%         \llap{\ruler[#1]{downleft}{\textheight}}%
%         \ruler*[#1]{rightdown}{\textwidth}%
%     }%
% }
% \fgrulerdefusercm{\fgruleruser{cm}}
% \fgrulerdefuserin{\fgruleruser{in}}
% \begin{document}
% ...
% \end{document}
% \end{examplelst}
% 
% \newpage\fgrulerreset
% \subsection{Setting the \texttt{type=user} option}\label{example:user-last}
% In the next example the \texttt{type=user} option places rulers at the right and top borders of the text area.
% \setfgruler{type=user}
%\fgrulerdefusercm{\AtTextUpperLeft{\ignorespaces%
%\rulerparamsfromfg\ruler{rightup}{\textwidth}\ignorespaces%
%\rulernorotatenum\fgrulercaptioncm{}\ignorespaces\ruler*{downright}{\textheight}}}
% \begin{examplelst}
% \documentclass{article}
% \usepackage[type=user]{fgruler}
% \newcommand{\fgruleruser}[1]{%
%     \AtTextUpperLeft{% See eso-pic package!
%         \rulerparamsfromfg%
%         \ruler[#1]{rightup}{\textwidth}%
%         \rulernorotatenum\fgrulercaptioncm{}\fgrulercaptionin{}%
%         \ruler*[#1]{downright}{\textheight}%
%     }%
% }
% \fgrulerdefusercm{\fgruleruser{cm}}
% \fgrulerdefuserin{\fgruleruser{in}}
% \begin{document}
% ...
% \end{document}
% \end{examplelst}
%
% \newpage\fgrulerreset
% \subsection{Rulers on the foreground of a given page, and in text}
% \setfgruler{color=blue}
% \fgruler{upperleft}{1cm}{1.5cm}
% \noindent
% text
% \rulerparams{}{\color{red}\tiny\ttfamily}{green}{}{}
% {\fgrulernoborderline\ruler{rightdown}{3cm}}
% text
% \ruler*{rightdown}{3cm}
% text
% \rotatebox[origin=tl]{30}{\ruler*{rightdown}{3cm}}
% 
% \bigskip
% \begin{examplelst}
% \documentclass{article}
% \usepackage[color=blue]{fgruler}
% \begin{document}
%     \fgruler{upperleft}{1cm}{1.5cm}
%     \noindent
%     text
%     \rulerparams{}{\color{red}\tiny\ttfamily}{green}{}{}
%     {\fgrulernoborderline\ruler{rightdown}{3cm}}
%     text
%     \ruler*{rightdown}{3cm}
%     text
%     \rotatebox[origin=tl]{30}{\ruler*{rightdown}{3cm}} 
%     % \rotatebox is defined in graphicx package
% \end{document}
% \end{examplelst}
% 
% \newpage\fgrulerreset
% \subsection{Ruler types in text}
% \setfgruler{type=none}
% \noindent
% \rulerparams{}{}{red}{}{1pt}
% \ruler{rightdown}{3cm}
% \hfill
% \ruler{rightup}{3cm}
% \hfill
% \ruler{leftup}{3cm}
% \hfill
% \ruler{leftdown}{3cm}
% 
% \bigskip\noindent
% \rulerparams{}{}{green}{}{}
% {\rulernorotatenum\ruler{upright}{3cm}}
% \hfill
% \ruler{downright}{3cm}
% \hfill
% \ruler{upleft}{3cm}
% \hfill
% \ruler{downleft}{3cm}
% 
% \bigskip\noindent
% \rulerparams{}{}{blue!50!black}{}{}
% {\rulernorotatenum\fgrulercaptioncm{}\squareruler{upperleft}{2cm}{3cm}}
% \hfill
% \squareruler{lowerright}{2cm}{3cm}
% \hfill
% \squareruler{lowerleft}{2cm}{3cm}
% \hfill
% \squareruler{upperright}{2cm}{3cm}
% \hfill
% {\rulerparams{}{\footnotesize\bfseries\color{red}}{}{5mm}{-8pt}\squareruler[in]{lowerleft}{2in}{3cm}}
% 
% \bigskip
% \begin{examplelst}
% \documentclass{article}
% \usepackage[nonefgrulers]{fgruler}
% \begin{document}
%     \noindent
%     \rulerparams{}{}{red}{}{1pt}
%     \ruler{rightdown}{3cm}
%     \hfill
%     \ruler{rightup}{3cm}
%     \hfill
%     \ruler{leftup}{3cm}
%     \hfill
%     \ruler{leftdown}{3cm}
%     
%     \bigskip\noindent
%     \rulerparams{}{}{green}{}{}
%     {\rulernorotatenum\ruler{upright}{3cm}}
%     \hfill
%     \ruler{downright}{3cm}
%     \hfill
%     \ruler{upleft}{3cm}
%     \hfill
%     \ruler{downleft}{3cm}
%     
%     \bigskip\noindent
%     \rulerparams{}{}{blue!50!black}{}{}
%     {\rulernorotatenum\fgrulercaptioncm{}\squareruler{upperleft}{2cm}{3cm}}
%     \hfill
%     \squareruler{lowerright}{2cm}{3cm}
%     \hfill
%     \squareruler{lowerleft}{2cm}{3cm}
%     \hfill
%     \squareruler{upperright}{2cm}{3cm}
%     \hfill
%     {\rulerparams{}{\footnotesize\bfseries\color{red}}{}{5mm}{-8pt}
%     \squareruler[in]{lowerleft}{2in}{3cm}}
% \end{document}
% \end{examplelst}
% 
% \newpage\fgrulerreset
% \subsection{Mark length and rotating}
% \setfgruler{type=none}
% \noindent
% {\fgrulerdefnum{\rotatebox{45}{\arabic{fgrulernum}\,cm}}
% \fgrulercaptioncm{}
% \rulerparams{}{\tiny\color{red}}{blue}{8mm}{}
% \fgrulercolorcm{}{}{black}
% \rotatebox{-45}{\ruler{rightup}{10cm}}\\
% \ruler{rightup}{5cm}}
% 
% \bigskip
% \begin{examplelst}
% \documentclass{article}
% \usepackage[nonefgrulers]{fgruler}
% \begin{document}
%     \noindent
%     {\fgrulerdefnum{\rotatebox{45}{\arabic{fgrulernum}\,cm}}
%     \fgrulercaptioncm{}
%     \rulerparams{}{\tiny\color{red}}{blue}{8mm}{}
%     \fgrulercolorcm{}{}{black}
%     \rotatebox{-45}{\ruler{rightup}{10cm}}\\
%     \ruler{rightup}{5cm}}
% \end{document}
% \end{examplelst}
% 
% \newpage\fgrulerreset
% \subsection{Coordinate system}
% \setfgruler{type=none}
% \noindent
% \rulernorotatenum
% \fgrulercaptioncm{}
% \fgrulercolorcm{}{}{red}
% \rulerparams{}{\scriptsize\color{red}}{}{}{}
% {\fgrulerdefnum{$-\arabic{fgrulernum}$}\squareruler*{upperright}{3cm}{3cm}}\ignorespaces
% \squareruler{lowerleft}{13cm}{6cm}
% 
% \bigskip
% \begin{examplelst}
% \documentclass{article}
% \usepackage[nonefgrulers]{fgruler}
% \begin{document}
%     \noindent
%     \rulernorotatenum
%     \fgrulercaptioncm{}
%     \fgrulercolorcm{}{}{red}
%     \rulerparams{}{\scriptsize\color{red}}{}{}{}
%     {\fgrulerdefnum{$-\arabic{fgrulernum}$}\squareruler*{upperright}{3cm}{3cm}}%
%     \squareruler{lowerleft}{13cm}{6cm}
% \end{document}
% \end{examplelst}
% 
% \newpage\fgrulerreset
% \subsection{Tape measure}
% \setfgruler{type=none}
% 
% \newcommand{\tapemeasure}[1]{%
%     \parbox{#1}{%
%     {\fgrulerdefnum{}\fgrulercaptioncm{}\ruler{rightdown}{#1}}\\[2pt]
%     \ruler{rightup}{#1}}}
% \noindent\ignorespaces
% \tapemeasure{\textwidth}\\[2pt]
% \rotatebox[origin=br]{-90}{\tapemeasure{3cm}}
% \tapemeasure{10cm}
% 
% \bigskip
% \begin{examplelst}
% \documentclass{article}
% \usepackage[a4paper,margin=25mm]{geometry}
% \usepackage[nonefgrulers]{fgruler}
% \newcommand{\tapemeasure}[1]{%
%     \parbox{#1}{%
%     {\fgrulerdefnum{}\fgrulercaptioncm{}\ruler{rightdown}{#1}}\\[2pt]
%     \ruler{rightup}{#1}}}
% \begin{document}
%     \noindent
%     \tapemeasure{\textwidth}\\[2pt]
%     \rotatebox[origin=br]{-90}{\tapemeasure{3cm}}
%     \tapemeasure{10cm}
% \end{document}
% \end{examplelst}
%
% \newpage\fgrulerreset
% \subsection{A new square ruler type}
% \setfgruler{type=none}
% {\rulernorotatenum\fgrulercaptioncm{}\ruler*{downleft}{5cm}}\ruler{rightup}{3cm}
% 
% \bigskip
% \begin{examplelst}
% \documentclass{article}
% \usepackage[type=none]{fgruler}
% \newcommand{\usersquareruler}[2]{%
%     {\rulernorotatenum\fgrulercaptioncm{}\ruler*{downleft}{#2}}%
%     \ruler{rightup}{#1}%
% }
% \begin{document}
% \usersquareruler{3cm}{5cm}
% \end{document}
% \end{examplelst}
%
% \StopEventually
%
%    \begin{macrocode}
%%
\@ifpackageloaded{kvoptions}{}{\RequirePackage{kvoptions}}
\@ifpackageloaded{etoolbox}{}{\RequirePackage{etoolbox}}

\SetupKeyvalOptions{family=fgruler,prefix=fgruler@}
\DeclareStringOption[.4pt]{markthick}
\DeclareStringOption[\scriptsize\sffamily]{numfont}
\DeclareStringOption[black]{color}
\DeclareStringOption[2mm]{marklength}
\DeclareStringOption[3pt]{numsep}
\DeclareStringOption[0pt]{hshift}
\DeclareStringOption[0pt]{vshift}
\DeclareStringOption[upperleft]{type}
\DeclareStringOption[cm]{unit}
\DeclareBoolOption{nonefgrulers}
\DeclareBoolOption{showframe}
\ProcessKeyvalOptions{fgruler}

\newlength{\fgruler@marklth}
\newlength{\fgruler@sep}
\newlength{\fgruler@width}
\newlength{\fgruler@fg@width}
\newlength{\fgruler@fg@height}

\def\fgruler@set#1#2#3#4#5{%
\def\fgruler@markthickness{\linethickness{#1}}%
\def\fgruler@font{#2}%
\def\fgruler@rulercolor{\color{#3}}%
\setlength{\fgruler@marklth}{#4}%
\setlength{\fgruler@sep}{#5}%
\def\fgruler@font@{\normalfont\normalsize\fgruler@font}%
\addtolength{\fgruler@sep}{\fgruler@marklth}%
\ifx\thefgrulernum\@empty\setlength{\fgruler@width}{\fgruler@marklth}\else%
\settoheight{\fgruler@width}{\fgruler@font@\thefgrulernum}%
\addtolength{\fgruler@width}{\fgruler@sep}\fi}

\def\rulerparams#1#2#3#4#5{%
\ifx#1\@empty\else\def\fgruler@markthick@{#1}\fi%
\ifx#2\@empty\else\def\fgruler@numfont@{#2}\fi%
\ifx#3\@empty\else\def\fgruler@color@{#3}\fi%
\ifx#4\@empty\else\def\fgruler@marklength@{#4}\fi%
\ifx#5\@empty\else\def\fgruler@numsep@{#5}\fi%
\ignorespaces}

\rulerparams{.4pt}{\scriptsize\sffamily}{black}{2mm}{3pt}

\def\rulerparamsfromfg{\rulerparams{\fgruler@markthick}{\fgruler@numfont}{\fgruler@color}{\fgruler@marklength}{\fgruler@numsep}}

\def\fgruler@fgsetting{%
\fgruler@set{\fgruler@markthick}{\fgruler@numfont}{\fgruler@color}{\fgruler@marklength}{\fgruler@numsep}%
\rulernorotatenum}

\def\fgruler@intextsetting{%
\fgruler@set{\fgruler@markthick@}{\fgruler@numfont@}{\fgruler@color@}{\fgruler@marklength@}{\fgruler@numsep@}}

\def\fgruler@activate@type{%
\def\fgruler@check{cm}\ifx\fgruler@unit\fgruler@check\else%
\def\fgruler@check{in}\ifx\fgruler@unit\fgruler@check\else%
\PackageError{fgruler}{\fgruler@unit\space is invalid unit}{Valid units: cm, in}%
\fi\fi%
\def\fgruler@check{upperleft}\ifx\fgruler@type\fgruler@check\else%
\def\fgruler@check{upperright}\ifx\fgruler@type\fgruler@check\else%
\def\fgruler@check{lowerleft}\ifx\fgruler@type\fgruler@check\else%
\def\fgruler@check{lowerright}\ifx\fgruler@type\fgruler@check\else%
\def\fgruler@check{upperleftT}\ifx\fgruler@type\fgruler@check\else%
\def\fgruler@check{upperrightT}\ifx\fgruler@type\fgruler@check\else%
\def\fgruler@check{lowerleftT}\ifx\fgruler@type\fgruler@check\else%
\def\fgruler@check{lowerrightT}\ifx\fgruler@type\fgruler@check\else%
\def\fgruler@check{none}\ifx\fgruler@type\fgruler@check\else%
\def\fgruler@check{user}\ifx\fgruler@type\fgruler@check\else%
\PackageError{fgruler}{\fgruler@type\space is invalid type}%
{Valid types:\MessageBreak
upperleft, upperright, lowerleft, lowerright,\MessageBreak
upperleftT, upperrightT, lowerleftT, lowerrightT,\MessageBreak
user, none}%
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
\def\fgruler@output{\csname fgruler@\fgruler@unit @\fgruler@type @fg\endcsname}}

\def\fgrulerratiocm#1#2{%
\ifx#1\@empty\else\def\fgruler@cm@ratio@i{#1}\fi%
\ifx#2\@empty\else\def\fgruler@cm@ratio@ii{#2}\fi%
\ignorespaces}

\fgrulerratiocm{.5}{.75}

\def\fgrulerratioin#1#2#3#4{%
\ifx#1\@empty\else\def\fgruler@in@ratio@i{#1}\fi%
\ifx#2\@empty\else\def\fgruler@in@ratio@ii{#2}\fi%
\ifx#3\@empty\else\def\fgruler@in@ratio@iii{#3}\fi%
\ifx#4\@empty\else\def\fgruler@in@ratio@iv{#4}\fi%
\ignorespaces}

\fgrulerratioin{.25}{.375}{.625}{.75}

\def\fgrulerthickcm#1#2#3{%
\ifx#1\@empty\else\def\fgruler@cm@thick@i{\linethickness{#1}}\fi%
\ifx#2\@empty\else\def\fgruler@cm@thick@ii{\linethickness{#2}}\fi%
\ifx#3\@empty\else\def\fgruler@cm@thick@iii{\linethickness{#3}}\fi%
\ignorespaces}

\def\fgruler@cm@thick@i{}
\def\fgruler@cm@thick@ii{}
\def\fgruler@cm@thick@iii{}

\def\fgrulerthickin#1#2#3#4#5{%
\ifx#1\@empty\else\def\fgruler@in@thick@i{\linethickness{#1}}\fi%
\ifx#2\@empty\else\def\fgruler@in@thick@ii{\linethickness{#2}}\fi%
\ifx#3\@empty\else\def\fgruler@in@thick@iii{\linethickness{#3}}\fi%
\ifx#4\@empty\else\def\fgruler@in@thick@iv{\linethickness{#4}}\fi%
\ifx#5\@empty\else\def\fgruler@in@thick@v{\linethickness{#5}}\fi%
\ignorespaces}

\def\fgruler@in@thick@i{}
\def\fgruler@in@thick@ii{}
\def\fgruler@in@thick@iii{}
\def\fgruler@in@thick@iv{}
\def\fgruler@in@thick@v{}

\def\fgrulercolorcm#1#2#3{%
\ifx#1\@empty\else\def\fgruler@cm@color@i{\color{#1}}\fi%
\ifx#2\@empty\else\def\fgruler@cm@color@ii{\color{#2}}\fi%
\ifx#3\@empty\else\def\fgruler@cm@color@iii{\color{#3}}\fi%
\ignorespaces}

\def\fgruler@cm@color@i{}
\def\fgruler@cm@color@ii{}
\def\fgruler@cm@color@iii{}

\def\fgrulercolorin#1#2#3#4#5{%
\ifx#1\@empty\else\def\fgruler@in@color@i{\color{#1}}\fi%
\ifx#2\@empty\else\def\fgruler@in@color@ii{\color{#2}}\fi%
\ifx#3\@empty\else\def\fgruler@in@color@iii{\color{#3}}\fi%
\ifx#4\@empty\else\def\fgruler@in@color@iv{\color{#4}}\fi%
\ifx#5\@empty\else\def\fgruler@in@color@v{\color{#5}}\fi%
\ignorespaces}

\def\fgruler@in@color@i{}
\def\fgruler@in@color@ii{}
\def\fgruler@in@color@iii{}
\def\fgruler@in@color@iv{}
\def\fgruler@in@color@v{}

\def\setfgruler#1{\setkeys{fgruler}{#1}\fgruler@activate@type\ignorespaces}

\newdimen\fgruler@tempdima
\newdimen\fgruler@tempdimb

\newcommand\fgruler@div[2]{%
\fgruler@tempdima=#1\relax\fgruler@tempdimb=\unitlength\relax
\fgruler@tempdimb=#2\fgruler@tempdimb\divide\fgruler@tempdima by \fgruler@tempdimb
\@tempcnta\fgruler@tempdima\advance\@tempcnta\@ne}

\def\fgruler@check@param#1#2{%
\def\fgruler@param{#1}%
\def\fgruler@check{cm}\ifx\fgruler@param\fgruler@check\else%
\def\fgruler@check{in}\ifx\fgruler@param\fgruler@check\else%
\PackageError{fgruler}{\fgruler@param\space is invalid parameter}{Valid parameters: cm, in}%
\fi\fi%
\def\fgruler@param{#2}%
\def\fgruler@check{rightdown}\ifx\fgruler@param\fgruler@check\else%
\def\fgruler@check{rightup}\ifx\fgruler@param\fgruler@check\else%
\def\fgruler@check{leftdown}\ifx\fgruler@param\fgruler@check\else%
\def\fgruler@check{leftup}\ifx\fgruler@param\fgruler@check\else%
\def\fgruler@check{downright}\ifx\fgruler@param\fgruler@check\else%
\def\fgruler@check{downleft}\ifx\fgruler@param\fgruler@check\else%
\def\fgruler@check{upright}\ifx\fgruler@param\fgruler@check\else%
\def\fgruler@check{upleft}\ifx\fgruler@param\fgruler@check\else%
\PackageError{fgruler}{\fgruler@param\space is invalid parameter}%
{Valid parameters:\MessageBreak
rightdown, rightup, leftdown, leftup,\MessageBreak
downright, downleft, upright, upleft}%
\fi\fi\fi\fi\fi\fi\fi\fi}

\def\fgruler@check@param@#1#2{%
\def\fgruler@param{#1}%
\def\fgruler@check{cm}\ifx\fgruler@param\fgruler@check\else%
\def\fgruler@check{in}\ifx\fgruler@param\fgruler@check\else%
\PackageError{fgruler}{\fgruler@param\space is invalid parameter}{Valid parameters: cm, in}%
\fi\fi%
\def\fgruler@param{#2}%
\def\fgruler@check{upperleft}\ifx\fgruler@param\fgruler@check\else%
\def\fgruler@check{upperright}\ifx\fgruler@param\fgruler@check\else%
\def\fgruler@check{lowerleft}\ifx\fgruler@param\fgruler@check\else%
\def\fgruler@check{lowerright}\ifx\fgruler@param\fgruler@check\else%
\PackageError{fgruler}{\fgruler@param\space is invalid parameter}%
{Valid parameters:\MessageBreak
upperleft, upperright, lowerleft, lowerright}%
\fi\fi\fi\fi}

\newcommand{\fgruler@ruler}[3][cm]{\fgruler@check@param{#1}{#2}\fgruler@intextsetting\csname fgruler@#1@#2@\endcsname{#3}}
\newcommand{\fgruler@ruler@}[3][cm]{\fgruler@check@param{#1}{#2}\fgruler@intextsetting\csname fgruler@#1@#2@@\endcsname{#3}}
\def\ruler{\@ifstar{\fgruler@ruler@}{\fgruler@ruler}}

\newcommand{\fgruler@squareruler}[4][cm]{\fgruler@check@param@{#1}{#2}\fgruler@intextsetting\csname fgruler@#1@#2@\endcsname{#3}{#4}}
\newcommand{\fgruler@squareruler@}[4][cm]{\fgruler@check@param@{#1}{#2}\fgruler@intextsetting\csname fgruler@#1@#2@@\endcsname{#3}{#4}}
\def\squareruler{\@ifstar{\fgruler@squareruler@}{\fgruler@squareruler}}

\newcommand{\fgruler}[4][cm]{\fgruler@check@param@{#1}{#2}\g@addto@macro\fgruler@output@{\csname fgruler@#1@#2@fg@\endcsname{#3}{#4}}}

\def\fgrulercaptioncm#1{\def\fgruler@caption@cm{#1}\ignorespaces}
\def\fgruler@caption@cm{cm}
\def\fgrulercaptionin#1{\def\fgruler@caption@in{#1}\ignorespaces}
\def\fgruler@caption@in{inch}

\newif\iffgruler@borderline
\def\fgrulernoborderline{\fgruler@borderlinefalse\ignorespaces}
\def\fgrulerborderline{\fgruler@borderlinetrue\ignorespaces}
\fgruler@borderlinetrue

\newcounter{fgrulernum}
\newcounter{fgruler@check}

\def\fgruler@ifnot@divisible@five#1{%
\setcounter{fgruler@check}{\value{fgrulernum}}%
\divide\value{fgruler@check}by5\relax%
\multiply\value{fgruler@check}by5\relax%
\ifnum\value{fgruler@check}=\value{fgrulernum}\else#1\fi\stepcounter{fgrulernum}}

\def\fgruler@ifodd#1{\ifodd\value{fgrulernum}#1\fi\stepcounter{fgrulernum}}

\def\fgrulerstartnum#1{\def\fgruler@startnumh{#1}\def\fgruler@startnumv{#1}\ignorespaces}
\def\fgrulerstartnumh#1{\def\fgruler@startnumh{#1}\ignorespaces}
\def\fgrulerstartnumv#1{\def\fgruler@startnumv{#1}\ignorespaces}
\def\fgruler@startnumh{0}
\def\fgruler@startnumv{0}

\def\fgrulerdefnum#1{\def\thefgrulernum{#1}\ignorespaces}

\def\fgruler@rotatebox#1#2{#2}%

\def\rulernorotatenum{%
\ifx\@onlypreamble\@notprerr%
\def\fgruler@rotatebox##1##2{##2}%
\else\PackageError{fgruler}{Don't use \protect\rulernorotatenum\space in preamble!}{}\fi%
\ignorespaces}

\def\rulerrotatenum{%
\ifx\@onlypreamble\@notprerr%
\def\fgruler@rotatebox##1##2{\rotatebox{##1}{##2}}%
\else\PackageError{fgruler}{Don't use \protect\rulerrotatenum\space in preamble!}{}\fi%
\ignorespaces}

\def\fgrulerreset{%
\ifx\@onlypreamble\@notprerr%
\def\fgruler@cm@ratio@i{.5}%
\def\fgruler@cm@ratio@ii{.75}%
\def\fgruler@in@ratio@i{.25}%
\def\fgruler@in@ratio@ii{.375}%
\def\fgruler@in@ratio@iii{.625}%
\def\fgruler@in@ratio@iv{.75}%
\def\fgruler@cm@thick@i{}%
\def\fgruler@cm@thick@ii{}%
\def\fgruler@cm@thick@iii{}%
\def\fgruler@in@thick@i{}%
\def\fgruler@in@thick@ii{}%
\def\fgruler@in@thick@iii{}%
\def\fgruler@in@thick@iv{}%
\def\fgruler@in@thick@v{}%
\def\fgruler@cm@color@i{}%
\def\fgruler@cm@color@ii{}%
\def\fgruler@cm@color@iii{}%
\def\fgruler@in@color@i{}%
\def\fgruler@in@color@ii{}%
\def\fgruler@in@color@iii{}%
\def\fgruler@in@color@iv{}%
\def\fgruler@in@color@v{}%
\def\fgruler@rotatebox##1##2{\rotatebox{##1}{##2}}%
\def\fgruler@markthick@{.4pt}%
\def\fgruler@numfont@{\scriptsize\sffamily}%
\def\fgruler@color@{black}%
\def\fgruler@marklength@{2mm}%
\def\fgruler@numsep@{3pt}%
\def\fgruler@type{upperleft}%
\def\fgruler@unit{cm}%
\def\fgruler@markthick{.4pt}%
\def\fgruler@numfont{\scriptsize\sffamily}%
\def\fgruler@color{black}%
\def\fgruler@marklength{2mm}%
\def\fgruler@hshift{0pt}%
\def\fgruler@vshift{0pt}%
\def\fgruler@numsep{3pt}%
\def\thefgrulernum{\arabic{fgrulernum}}%
\def\fgruler@caption@cm{cm}%
\def\fgruler@caption@in{inch}%
\def\fgruler@startnumh{0}%
\def\fgruler@startnumv{0}%
\fgruler@borderlinetrue%
\fgruler@showframefalse%
\else\PackageError{fgruler}{Don't use \protect\fgrulerreset\space in preamble!}{}\fi%
\ignorespaces}

\AtEndPreamble{

\@ifpackageloaded{xcolor}{}{\RequirePackage{xcolor}}
\@ifpackageloaded{graphicx}{}{\RequirePackage{graphicx}}

\def\fgruler@rotatebox#1#2{\rotatebox{#1}{#2}}

\iffgruler@nonefgrulers

\renewcommand{\fgruler}[4][]{}

\else

\@ifpackageloaded{eso-pic}{}{\RequirePackage{eso-pic}[2020/10/14]}

\def\fgruler@frame{%
  \begingroup
    \fgruler@fgsetting
    \fgruler@rulercolor%
    \fgruler@markthickness%
    \AtPageLowerLeft{%
      \framebox(\paperwidth,\paperheight){}}%
    \AtTextLowerLeft{%
      \framebox(\textwidth,\textheight){}}%
    \AtTextUpperLeft{%
      \put(0,\headsep){%
        \framebox(\textwidth,\headheight){}}}%
    \AtTextLowerLeft{%
      \put(0,-\footskip){%
        \line(1,0){\textwidth}}}%
    \AtTextLowerLeft{%
      \fgruler@tempdima=\textwidth\advance\fgruler@tempdima\marginparsep%
      \if@twoside
        \ifodd\c@page\else
          \if@mparswitch
            \fgruler@tempdima=-\marginparsep\advance\fgruler@tempdima-\marginparwidth
          \fi
        \fi
      \fi
      \put(\fgruler@tempdima,0)%
        {\framebox(\marginparwidth,\textheight){}}%
    }%
  \endgroup
}

\def\fgruler@output@{}

\ESO@isMEMOIR{%
  \AddToHook{shipout/foreground}{%
    \ESO@MEMOIR@corr
    \put(\ESO@tempdima,\ESO@tempdimb){%
      \iffgruler@showframe\fgruler@frame\fi%
      \fgruler@output\fgruler@output@%
      \global\let\fgruler@output@\@empty%
    }%
  }%
}{%
  \AddToHook{shipout/foreground}{%
    \put(0,\ESO@yoffsetI){%
      \iffgruler@showframe\fgruler@frame\fi%
      \fgruler@output\fgruler@output@%
      \global\let\fgruler@output@\@empty%
    }%
  }%
}

\fgruler@activate@type

\fi
}

%% RIGHTDOWN CM
\def\fgruler@cm@rightdown#1{%
\fgruler@rulercolor%
\fgruler@markthickness%
\fgruler@div{#1}{1}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(1,0){\@tempcnta}{\fgruler@ifnot@divisible@five{\fgruler@cm@thick@i\fgruler@cm@color@i\line(0,-1){\fgruler@cm@ratio@i\fgruler@marklth}}}%
\fgruler@div{#1}{5}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(5,0){\@tempcnta}{\fgruler@ifodd{\fgruler@cm@thick@ii\fgruler@cm@color@ii\line(0,-1){\fgruler@cm@ratio@ii\fgruler@marklth}}}%
\fgruler@div{#1}{10}%
\multiput(0,0)(10,0){\@tempcnta}{\fgruler@cm@thick@iii\fgruler@cm@color@iii\line(0,-1){\fgruler@marklth}}%
\iffgruler@borderline\put(0,0){\line(1,0){#1}}\fi%
\setcounter{fgrulernum}{\fgruler@startnumh}\stepcounter{fgrulernum}%
\multiput(10,-\fgruler@sep)(10,0){\fgruler@tempdima}{\makebox(0,0)[t]{\fgruler@font@\thefgrulernum\stepcounter{fgrulernum}}}}

\def\fgruler@cm@rightdown@#1{%
\setlength{\unitlength}{1mm}%
\begin{picture}(#1,\fgruler@width)(0,-\fgruler@width)%
\fgruler@cm@rightdown{#1}%
\setcounter{fgrulernum}{\fgruler@startnumh}%
\put(0,-\fgruler@sep){\makebox(0,0)[t]{\fgruler@font@\thefgrulernum}}%
\ifdim#1>.5cm\put(5,-\fgruler@sep){\makebox(0,0)[t]{\fgruler@font@\fgruler@caption@cm}}\fi%
\end{picture}}

\def\fgruler@cm@rightdown@@#1{\leavevmode\hbox{}\lower\fgruler@width\hbox{\fgruler@cm@rightdown@{#1}}}

%% RIGHTDOWN IN
\def\fgruler@in@rightdown#1{%
\fgruler@rulercolor%
\fgruler@markthickness%
\fgruler@div{#1}{1}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(1,0){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@i\fgruler@in@color@i\line(0,-1){\fgruler@in@ratio@i\fgruler@marklth}}}%
\fgruler@div{#1}{2}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(2,0){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@ii\fgruler@in@color@ii\line(0,-1){\fgruler@in@ratio@ii\fgruler@marklth}}}%
\fgruler@div{#1}{4}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(4,0){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@iii\fgruler@in@color@iii\line(0,-1){\fgruler@in@ratio@iii\fgruler@marklth}}}%
\fgruler@div{#1}{8}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(8,0){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@iv\fgruler@in@color@iv\line(0,-1){\fgruler@in@ratio@iv\fgruler@marklth}}}%
\fgruler@div{#1}{16}%
\multiput(0,0)(16,0){\@tempcnta}{\fgruler@in@thick@v\fgruler@in@color@v\line(0,-1){\fgruler@marklth}}%
\iffgruler@borderline\put(0,0){\line(1,0){#1}}\fi%
\setcounter{fgrulernum}{\fgruler@startnumh}\stepcounter{fgrulernum}%
\multiput(16,-\fgruler@sep)(16,0){\fgruler@tempdima}{\makebox(0,0)[t]{\fgruler@font@\thefgrulernum\stepcounter{fgrulernum}}}}

\def\fgruler@in@rightdown@#1{%
\setlength{\unitlength}{.0625in}%
\begin{picture}(#1,\fgruler@width)(0,-\fgruler@width)%
\fgruler@in@rightdown{#1}%
\setcounter{fgrulernum}{\fgruler@startnumh}%
\put(0,-\fgruler@sep){\makebox(0,0)[t]{\fgruler@font@\thefgrulernum}}%
\ifdim#1>.5in\put(8,-\fgruler@sep){\makebox(0,0)[t]{\fgruler@font@\fgruler@caption@in}}\fi%
\end{picture}}

\def\fgruler@in@rightdown@@#1{\leavevmode\hbox{}\lower\fgruler@width\hbox{\fgruler@in@rightdown@{#1}}}

%% RIGHTUP CM
\def\fgruler@cm@rightup#1{%
\fgruler@rulercolor%
\fgruler@markthickness%
\fgruler@div{#1}{1}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(1,0){\@tempcnta}{\fgruler@ifnot@divisible@five{\fgruler@cm@thick@i\fgruler@cm@color@i\line(0,1){\fgruler@cm@ratio@i\fgruler@marklth}}}%
\fgruler@div{#1}{5}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(5,0){\@tempcnta}{\fgruler@ifodd{\fgruler@cm@thick@ii\fgruler@cm@color@ii\line(0,1){\fgruler@cm@ratio@ii\fgruler@marklth}}}%
\fgruler@div{#1}{10}%
\multiput(0,0)(10,0){\@tempcnta}{\fgruler@cm@thick@iii\fgruler@cm@color@iii\line(0,1){\fgruler@marklth}}%
\iffgruler@borderline\put(0,0){\line(1,0){#1}}\fi%
\setcounter{fgrulernum}{\fgruler@startnumh}\stepcounter{fgrulernum}%
\multiput(10,\fgruler@sep)(10,0){\fgruler@tempdima}{\makebox(0,0)[b]{\fgruler@font@\thefgrulernum\stepcounter{fgrulernum}}}}

\def\fgruler@cm@rightup@#1{%
\setlength{\unitlength}{1mm}%
\begin{picture}(#1,\fgruler@width)%
\fgruler@cm@rightup{#1}%
\setcounter{fgrulernum}{\fgruler@startnumh}%
\put(0,\fgruler@sep){\makebox(0,0)[b]{\fgruler@font@\thefgrulernum}}%
\ifdim#1>.5cm\put(5,\fgruler@sep){\makebox(0,0)[b]{\fgruler@font@\fgruler@caption@cm}}\fi%
\end{picture}}

\def\fgruler@cm@rightup@@#1{\leavevmode\hbox{}\lower\fgruler@width\hbox{\fgruler@cm@rightup@{#1}}}

%% RIGHTUP IN
\def\fgruler@in@rightup#1{%
\fgruler@rulercolor%
\fgruler@markthickness%
\fgruler@div{#1}{1}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(1,0){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@i\fgruler@in@color@i\line(0,1){\fgruler@in@ratio@i\fgruler@marklth}}}%
\fgruler@div{#1}{2}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(2,0){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@ii\fgruler@in@color@ii\line(0,1){\fgruler@in@ratio@ii\fgruler@marklth}}}%
\fgruler@div{#1}{4}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(4,0){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@iii\fgruler@in@color@iii\line(0,1){\fgruler@in@ratio@iii\fgruler@marklth}}}%
\fgruler@div{#1}{8}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(8,0){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@iv\fgruler@in@color@iv\line(0,1){\fgruler@in@ratio@iv\fgruler@marklth}}}%
\fgruler@div{#1}{16}%
\multiput(0,0)(16,0){\@tempcnta}{\fgruler@in@thick@v\fgruler@in@color@v\line(0,1){\fgruler@marklth}}%
\iffgruler@borderline\put(0,0){\line(1,0){#1}}\fi%
\setcounter{fgrulernum}{\fgruler@startnumh}\stepcounter{fgrulernum}%
\multiput(16,\fgruler@sep)(16,0){\fgruler@tempdima}{\makebox(0,0)[b]{\fgruler@font@\thefgrulernum\stepcounter{fgrulernum}}}}

\def\fgruler@in@rightup@#1{%
\setlength{\unitlength}{.0625in}%
\begin{picture}(#1,\fgruler@width)%
\fgruler@in@rightup{#1}%
\setcounter{fgrulernum}{\fgruler@startnumh}%
\put(0,\fgruler@sep){\makebox(0,0)[b]{\fgruler@font@\thefgrulernum}}%
\ifdim#1>.5in\put(8,\fgruler@sep){\makebox(0,0)[b]{\fgruler@font@\fgruler@caption@in}}\fi%
\end{picture}}

\def\fgruler@in@rightup@@#1{\leavevmode\hbox{}\lower\fgruler@width\hbox{\fgruler@in@rightup@{#1}}}

%% LEFTDOWN CM
\def\fgruler@cm@leftdown#1{%
\fgruler@rulercolor%
\fgruler@markthickness%
\fgruler@div{#1}{1}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(-1,0){\@tempcnta}{\fgruler@ifnot@divisible@five{\fgruler@cm@thick@i\fgruler@cm@color@i\line(0,-1){\fgruler@cm@ratio@i\fgruler@marklth}}}%
\fgruler@div{#1}{5}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(-5,0){\@tempcnta}{\fgruler@ifodd{\fgruler@cm@thick@ii\fgruler@cm@color@ii\line(0,-1){\fgruler@cm@ratio@ii\fgruler@marklth}}}%
\fgruler@div{#1}{10}%
\multiput(0,0)(-10,0){\@tempcnta}{\fgruler@cm@thick@iii\fgruler@cm@color@iii\line(0,-1){\fgruler@marklth}}%
\iffgruler@borderline\put(0,0){\line(-1,0){#1}}\fi%
\setcounter{fgrulernum}{\fgruler@startnumh}\stepcounter{fgrulernum}%
\multiput(-10,-\fgruler@sep)(-10,0){\fgruler@tempdima}{\makebox(0,0)[t]{\fgruler@font@\thefgrulernum\stepcounter{fgrulernum}}}}

\def\fgruler@cm@leftdown@#1{%
\setlength{\unitlength}{1mm}%
\begin{picture}(#1,\fgruler@width)(-#1,-\fgruler@width)%
\fgruler@cm@leftdown{#1}%
\setcounter{fgrulernum}{\fgruler@startnumh}%
\put(0,-\fgruler@sep){\makebox(0,0)[t]{\fgruler@font@\thefgrulernum}}%
\ifdim#1>.5cm\put(-5,-\fgruler@sep){\makebox(0,0)[t]{\fgruler@font@\fgruler@caption@cm}}\fi%
\end{picture}}

\def\fgruler@cm@leftdown@@#1{\leavevmode\hbox{}\lower\fgruler@width\hbox{\fgruler@cm@leftdown@{#1}}}

%% LEFTDOWN IN
\def\fgruler@in@leftdown#1{%
\fgruler@rulercolor%
\fgruler@markthickness%
\fgruler@div{#1}{1}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(-1,0){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@i\fgruler@in@color@i\line(0,-1){\fgruler@in@ratio@i\fgruler@marklth}}}%
\fgruler@div{#1}{2}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(-2,0){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@ii\fgruler@in@color@ii\line(0,-1){\fgruler@in@ratio@ii\fgruler@marklth}}}%
\fgruler@div{#1}{4}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(-4,0){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@iii\fgruler@in@color@iii\line(0,-1){\fgruler@in@ratio@iii\fgruler@marklth}}}%
\fgruler@div{#1}{8}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(-8,0){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@iv\fgruler@in@color@iv\line(0,-1){\fgruler@in@ratio@iv\fgruler@marklth}}}%
\fgruler@div{#1}{16}%
\multiput(0,0)(-16,0){\@tempcnta}{\fgruler@in@thick@v\fgruler@in@color@v\line(0,-1){\fgruler@marklth}}%
\iffgruler@borderline\put(0,0){\line(-1,0){#1}}\fi%
\setcounter{fgrulernum}{\fgruler@startnumh}\stepcounter{fgrulernum}%
\multiput(-16,-\fgruler@sep)(-16,0){\fgruler@tempdima}{\makebox(0,0)[t]{\fgruler@font@\thefgrulernum\stepcounter{fgrulernum}}}}

\def\fgruler@in@leftdown@#1{%
\setlength{\unitlength}{.0625in}%
\begin{picture}(#1,\fgruler@width)(-#1,-\fgruler@width)%
\fgruler@in@leftdown{#1}%
\setcounter{fgrulernum}{\fgruler@startnumh}%
\put(0,-\fgruler@sep){\makebox(0,0)[t]{\fgruler@font@\thefgrulernum}}%
\ifdim#1>.5in\put(-8,-\fgruler@sep){\makebox(0,0)[t]{\fgruler@font@\fgruler@caption@in}}\fi%
\end{picture}}

\def\fgruler@in@leftdown@@#1{\leavevmode\hbox{}\lower\fgruler@width\hbox{\fgruler@in@leftdown@{#1}}}

%% LEFTUP CM
\def\fgruler@cm@leftup#1{%
\fgruler@rulercolor%
\fgruler@markthickness%
\fgruler@div{#1}{1}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(-1,0){\@tempcnta}{\fgruler@ifnot@divisible@five{\fgruler@cm@thick@i\fgruler@cm@color@i\line(0,1){\fgruler@cm@ratio@i\fgruler@marklth}}}%
\fgruler@div{#1}{5}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(-5,0){\@tempcnta}{\fgruler@ifodd{\fgruler@cm@thick@ii\fgruler@cm@color@ii\line(0,1){\fgruler@cm@ratio@ii\fgruler@marklth}}}%
\fgruler@div{#1}{10}%
\multiput(0,0)(-10,0){\@tempcnta}{\fgruler@cm@thick@iii\fgruler@cm@color@iii\line(0,1){\fgruler@marklth}}%
\iffgruler@borderline\put(0,0){\line(-1,0){#1}}\fi%
\setcounter{fgrulernum}{\fgruler@startnumh}\stepcounter{fgrulernum}%
\multiput(-10,\fgruler@sep)(-10,0){\fgruler@tempdima}{\makebox(0,0)[b]{\fgruler@font@\thefgrulernum\stepcounter{fgrulernum}}}}

\def\fgruler@cm@leftup@#1{%
\setlength{\unitlength}{1mm}%
\begin{picture}(#1,\fgruler@width)(-#1,0)%
\fgruler@cm@leftup{#1}%
\setcounter{fgrulernum}{\fgruler@startnumh}%
\put(0,\fgruler@sep){\makebox(0,0)[b]{\fgruler@font@\thefgrulernum}}%
\ifdim#1>.5cm\put(-5,\fgruler@sep){\makebox(0,0)[b]{\fgruler@font@\fgruler@caption@cm}}\fi%
\end{picture}}

\def\fgruler@cm@leftup@@#1{\leavevmode\hbox{}\lower\fgruler@width\hbox{\fgruler@cm@leftup@{#1}}}

%% LEFTUP IN
\def\fgruler@in@leftup#1{%
\fgruler@rulercolor%
\fgruler@markthickness%
\fgruler@div{#1}{1}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(-1,0){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@i\fgruler@in@color@i\line(0,1){\fgruler@in@ratio@i\fgruler@marklth}}}%
\fgruler@div{#1}{2}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(-2,0){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@ii\fgruler@in@color@ii\line(0,1){\fgruler@in@ratio@ii\fgruler@marklth}}}%
\fgruler@div{#1}{4}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(-4,0){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@iii\fgruler@in@color@iii\line(0,1){\fgruler@in@ratio@iii\fgruler@marklth}}}%
\fgruler@div{#1}{8}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(-8,0){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@iv\fgruler@in@color@iv\line(0,1){\fgruler@in@ratio@iv\fgruler@marklth}}}%
\fgruler@div{#1}{16}%
\multiput(0,0)(-16,0){\@tempcnta}{\fgruler@in@thick@v\fgruler@in@color@v\line(0,1){\fgruler@marklth}}%
\iffgruler@borderline\put(0,0){\line(-1,0){#1}}\fi%
\setcounter{fgrulernum}{\fgruler@startnumh}\stepcounter{fgrulernum}%
\multiput(-16,\fgruler@sep)(-16,0){\fgruler@tempdima}{\makebox(0,0)[b]{\fgruler@font@\thefgrulernum\stepcounter{fgrulernum}}}}

\def\fgruler@in@leftup@#1{%
\setlength{\unitlength}{.0625in}%
\begin{picture}(#1,\fgruler@width)(-#1,0)%
\fgruler@in@leftup{#1}%
\setcounter{fgrulernum}{\fgruler@startnumh}%
\put(0,\fgruler@sep){\makebox(0,0)[b]{\fgruler@font@\thefgrulernum}}%
\ifdim#1>.5in\put(-8,\fgruler@sep){\makebox(0,0)[b]{\fgruler@font@\fgruler@caption@in}}\fi%
\end{picture}}

\def\fgruler@in@leftup@@#1{\leavevmode\hbox{}\lower\fgruler@width\hbox{\fgruler@in@leftup@{#1}}}

%% DOWNRIGHT CM
\def\fgruler@cm@downright#1{%
\fgruler@rulercolor%
\fgruler@markthickness%
\fgruler@div{#1}{1}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(0,-1){\@tempcnta}{\fgruler@ifnot@divisible@five{\fgruler@cm@thick@i\fgruler@cm@color@i\line(1,0){\fgruler@cm@ratio@i\fgruler@marklth}}}%
\fgruler@div{#1}{5}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(0,-5){\@tempcnta}{\fgruler@ifodd{\fgruler@cm@thick@ii\fgruler@cm@color@ii\line(1,0){\fgruler@cm@ratio@ii\fgruler@marklth}}}%
\fgruler@div{#1}{10}%
\multiput(0,0)(0,-10){\@tempcnta}{\fgruler@cm@thick@iii\fgruler@cm@color@iii\line(1,0){\fgruler@marklth}}%
\iffgruler@borderline\put(0,0){\line(0,-1){#1}}\fi%
\setcounter{fgrulernum}{\fgruler@startnumv}\stepcounter{fgrulernum}%
\multiput(\fgruler@sep,-10)(0,-10){\fgruler@tempdima}{\makebox(0,0)[l]{\fgruler@rotatebox{90}{\fgruler@font@\thefgrulernum\stepcounter{fgrulernum}}}}}

\def\fgruler@cm@downright@#1{%
\setlength{\unitlength}{1mm}%
\begin{picture}(\fgruler@width,#1)(0,-#1)%
\fgruler@cm@downright{#1}%
\setcounter{fgrulernum}{\fgruler@startnumv}%
\put(\fgruler@sep,0){\makebox(0,0)[l]{\fgruler@rotatebox{90}{\fgruler@font@\thefgrulernum}}}%
\ifdim#1>.5cm\put(\fgruler@sep,-5){\makebox(0,0)[l]{\fgruler@rotatebox{90}{\fgruler@font@\fgruler@caption@cm}}}\fi%
\end{picture}}

\def\fgruler@cm@downright@@#1{\leavevmode\hbox{}\lower#1\hbox{\fgruler@cm@downright@{#1}}}

%% DOWNRIGHT IN
\def\fgruler@in@downright#1{%
\fgruler@rulercolor%
\fgruler@markthickness%
\fgruler@div{#1}{1}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(0,-1){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@i\fgruler@in@color@i\line(1,0){\fgruler@in@ratio@i\fgruler@marklth}}}%
\fgruler@div{#1}{2}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(0,-2){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@ii\fgruler@in@color@ii\line(1,0){\fgruler@in@ratio@ii\fgruler@marklth}}}%
\fgruler@div{#1}{4}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(0,-4){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@iii\fgruler@in@color@iii\line(1,0){\fgruler@in@ratio@iii\fgruler@marklth}}}%
\fgruler@div{#1}{8}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(0,-8){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@iv\fgruler@in@color@iv\line(1,0){\fgruler@in@ratio@iv\fgruler@marklth}}}%
\fgruler@div{#1}{16}%
\multiput(0,0)(0,-16){\@tempcnta}{\fgruler@in@thick@v\fgruler@in@color@v\line(1,0){\fgruler@marklth}}%
\iffgruler@borderline\put(0,0){\line(0,-1){#1}}\fi%
\setcounter{fgrulernum}{\fgruler@startnumv}\stepcounter{fgrulernum}%
\multiput(\fgruler@sep,-16)(0,-16){\fgruler@tempdima}{\makebox(0,0)[l]{\fgruler@rotatebox{90}{\fgruler@font@\thefgrulernum\stepcounter{fgrulernum}}}}}

\def\fgruler@in@downright@#1{%
\setlength{\unitlength}{.0625in}%
\begin{picture}(\fgruler@width,#1)(0,-#1)%
\fgruler@in@downright{#1}%
\setcounter{fgrulernum}{\fgruler@startnumv}%
\put(\fgruler@sep,0){\makebox(0,0)[l]{\fgruler@rotatebox{90}{\fgruler@font@\thefgrulernum}}}%
\ifdim#1>.5in\put(\fgruler@sep,-8){\makebox(0,0)[l]{\fgruler@rotatebox{90}{\fgruler@font@\fgruler@caption@in}}}\fi%
\end{picture}}

\def\fgruler@in@downright@@#1{\leavevmode\hbox{}\lower#1\hbox{\fgruler@in@downright@{#1}}}

%% DOWNLEFT CM
\def\fgruler@cm@downleft#1{%
\fgruler@rulercolor%
\fgruler@markthickness%
\fgruler@div{#1}{1}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(0,-1){\@tempcnta}{\fgruler@ifnot@divisible@five{\fgruler@cm@thick@i\fgruler@cm@color@i\line(-1,0){\fgruler@cm@ratio@i\fgruler@marklth}}}%
\fgruler@div{#1}{5}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(0,-5){\@tempcnta}{\fgruler@ifodd{\fgruler@cm@thick@ii\fgruler@cm@color@ii\line(-1,0){\fgruler@cm@ratio@ii\fgruler@marklth}}}%
\fgruler@div{#1}{10}%
\multiput(0,0)(0,-10){\@tempcnta}{\fgruler@cm@thick@iii\fgruler@cm@color@iii\line(-1,0){\fgruler@marklth}}%
\iffgruler@borderline\put(0,0){\line(0,-1){#1}}\fi%
\setcounter{fgrulernum}{\fgruler@startnumv}\stepcounter{fgrulernum}%
\multiput(-\fgruler@sep,-10)(0,-10){\fgruler@tempdima}{\makebox(0,0)[r]{\fgruler@rotatebox{-90}{\fgruler@font@\thefgrulernum\stepcounter{fgrulernum}}}}}

\def\fgruler@cm@downleft@#1{%
\setlength{\unitlength}{1mm}%
\begin{picture}(\fgruler@width,#1)(-\fgruler@width,-#1)%
\fgruler@cm@downleft{#1}%
\setcounter{fgrulernum}{\fgruler@startnumv}%
\put(-\fgruler@sep,0){\makebox(0,0)[r]{\fgruler@rotatebox{-90}{\fgruler@font@\thefgrulernum}}}%
\ifdim#1>.5cm\put(-\fgruler@sep,-5){\makebox(0,0)[r]{\fgruler@rotatebox{-90}{\fgruler@font@\fgruler@caption@cm}}}\fi%
\end{picture}}

\def\fgruler@cm@downleft@@#1{\leavevmode\hbox{}\lower#1\hbox{\fgruler@cm@downleft@{#1}}}

%% DOWNLEFT IN
\def\fgruler@in@downleft#1{%
\fgruler@rulercolor%
\fgruler@markthickness%
\fgruler@div{#1}{1}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(0,-1){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@i\fgruler@in@color@i\line(-1,0){\fgruler@in@ratio@i\fgruler@marklth}}}%
\fgruler@div{#1}{2}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(0,-2){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@ii\fgruler@in@color@ii\line(-1,0){\fgruler@in@ratio@ii\fgruler@marklth}}}%
\fgruler@div{#1}{4}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(0,-4){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@iii\fgruler@in@color@iii\line(-1,0){\fgruler@in@ratio@iii\fgruler@marklth}}}%
\fgruler@div{#1}{8}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(0,-8){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@iv\fgruler@in@color@iv\line(-1,0){\fgruler@in@ratio@iv\fgruler@marklth}}}%
\fgruler@div{#1}{16}%
\multiput(0,0)(0,-16){\@tempcnta}{\fgruler@in@thick@v\fgruler@in@color@v\line(-1,0){\fgruler@marklth}}%
\iffgruler@borderline\put(0,0){\line(0,-1){#1}}\fi%
\setcounter{fgrulernum}{\fgruler@startnumv}\stepcounter{fgrulernum}%
\multiput(-\fgruler@sep,-16)(0,-16){\fgruler@tempdima}{\makebox(0,0)[r]{\fgruler@rotatebox{-90}{\fgruler@font@\thefgrulernum\stepcounter{fgrulernum}}}}}

\def\fgruler@in@downleft@#1{%
\setlength{\unitlength}{.0625in}%
\begin{picture}(\fgruler@width,#1)(-\fgruler@width,-#1)%
\fgruler@in@downleft{#1}%
\setcounter{fgrulernum}{\fgruler@startnumv}%
\put(-\fgruler@sep,0){\makebox(0,0)[r]{\fgruler@rotatebox{-90}{\fgruler@font@\thefgrulernum}}}%
\ifdim#1>.5in\put(-\fgruler@sep,-8){\makebox(0,0)[r]{\fgruler@rotatebox{-90}{\fgruler@font@\fgruler@caption@in}}}\fi%
\end{picture}}

\def\fgruler@in@downleft@@#1{\leavevmode\hbox{}\lower#1\hbox{\fgruler@in@downleft@{#1}}}

%% UPRIGHT CM
\def\fgruler@cm@upright#1{%
\fgruler@rulercolor%
\fgruler@markthickness%
\fgruler@div{#1}{1}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(0,1){\@tempcnta}{\fgruler@ifnot@divisible@five{\fgruler@cm@thick@i\fgruler@cm@color@i\line(1,0){\fgruler@cm@ratio@i\fgruler@marklth}}}%
\fgruler@div{#1}{5}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(0,5){\@tempcnta}{\fgruler@ifodd{\fgruler@cm@thick@ii\fgruler@cm@color@ii\line(1,0){\fgruler@cm@ratio@ii\fgruler@marklth}}}%
\fgruler@div{#1}{10}%
\multiput(0,0)(0,10){\@tempcnta}{\fgruler@cm@thick@iii\fgruler@cm@color@iii\line(1,0){\fgruler@marklth}}%
\iffgruler@borderline\put(0,0){\line(0,1){#1}}\fi%
\setcounter{fgrulernum}{\fgruler@startnumv}\stepcounter{fgrulernum}%
\multiput(\fgruler@sep,10)(0,10){\fgruler@tempdima}{\makebox(0,0)[l]{\fgruler@rotatebox{90}{\fgruler@font@\thefgrulernum\stepcounter{fgrulernum}}}}}

\def\fgruler@cm@upright@#1{%
\setlength{\unitlength}{1mm}%
\begin{picture}(\fgruler@width,#1)%
\fgruler@cm@upright{#1}%
\setcounter{fgrulernum}{\fgruler@startnumv}%
\put(\fgruler@sep,0){\makebox(0,0)[l]{\fgruler@rotatebox{90}{\fgruler@font@\thefgrulernum}}}%
\ifdim#1>.5cm\put(\fgruler@sep,5){\makebox(0,0)[l]{\fgruler@rotatebox{90}{\fgruler@font@\fgruler@caption@cm}}}\fi%
\end{picture}}

\def\fgruler@cm@upright@@#1{\leavevmode\hbox{}\lower#1\hbox{\fgruler@cm@upright@{#1}}}

%% UPRIGHT IN
\def\fgruler@in@upright#1{%
\fgruler@rulercolor%
\fgruler@markthickness%
\fgruler@div{#1}{1}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(0,1){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@i\fgruler@in@color@i\line(1,0){\fgruler@in@ratio@i\fgruler@marklth}}}%
\fgruler@div{#1}{2}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(0,2){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@ii\fgruler@in@color@ii\line(1,0){\fgruler@in@ratio@ii\fgruler@marklth}}}%
\fgruler@div{#1}{4}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(0,4){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@iii\fgruler@in@color@iii\line(1,0){\fgruler@in@ratio@iii\fgruler@marklth}}}%
\fgruler@div{#1}{8}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(0,8){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@iv\fgruler@in@color@iv\line(1,0){\fgruler@in@ratio@iv\fgruler@marklth}}}%
\fgruler@div{#1}{16}%
\multiput(0,0)(0,16){\@tempcnta}{\fgruler@in@thick@v\fgruler@in@color@v\line(1,0){\fgruler@marklth}}%
\iffgruler@borderline\put(0,0){\line(0,1){#1}}\fi%
\setcounter{fgrulernum}{\fgruler@startnumv}\stepcounter{fgrulernum}%
\multiput(\fgruler@sep,16)(0,16){\fgruler@tempdima}{\makebox(0,0)[l]{\fgruler@rotatebox{90}{\fgruler@font@\thefgrulernum\stepcounter{fgrulernum}}}}}

\def\fgruler@in@upright@#1{%
\setlength{\unitlength}{.0625in}%
\begin{picture}(\fgruler@width,#1)%
\fgruler@in@upright{#1}%
\setcounter{fgrulernum}{\fgruler@startnumv}%
\put(\fgruler@sep,0){\makebox(0,0)[l]{\fgruler@rotatebox{90}{\fgruler@font@\thefgrulernum}}}%
\ifdim#1>.5in\put(\fgruler@sep,8){\makebox(0,0)[l]{\fgruler@rotatebox{90}{\fgruler@font@\fgruler@caption@in}}}\fi%
\end{picture}}

\def\fgruler@in@upright@@#1{\leavevmode\hbox{}\lower#1\hbox{\fgruler@in@upright@{#1}}}

%% UPLEFT CM
\def\fgruler@cm@upleft#1{%
\fgruler@rulercolor%
\fgruler@markthickness%
\fgruler@div{#1}{1}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(0,1){\@tempcnta}{\fgruler@ifnot@divisible@five{\fgruler@cm@thick@i\fgruler@cm@color@i\line(-1,0){\fgruler@cm@ratio@i\fgruler@marklth}}}%
\fgruler@div{#1}{5}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(0,5){\@tempcnta}{\fgruler@ifodd{\fgruler@cm@thick@ii\fgruler@cm@color@ii\line(-1,0){\fgruler@cm@ratio@ii\fgruler@marklth}}}%
\fgruler@div{#1}{10}%
\multiput(0,0)(0,10){\@tempcnta}{\fgruler@cm@thick@iii\fgruler@cm@color@iii\line(-1,0){\fgruler@marklth}}%
\iffgruler@borderline\put(0,0){\line(0,1){#1}}\fi%
\setcounter{fgrulernum}{\fgruler@startnumv}\stepcounter{fgrulernum}%
\multiput(-\fgruler@sep,10)(0,10){\fgruler@tempdima}{\makebox(0,0)[r]{\fgruler@rotatebox{-90}{\fgruler@font@\thefgrulernum\stepcounter{fgrulernum}}}}}

\def\fgruler@cm@upleft@#1{%
\setlength{\unitlength}{1mm}%
\begin{picture}(\fgruler@width,#1)(-\fgruler@width,0)%
\fgruler@cm@upleft{#1}%
\setcounter{fgrulernum}{\fgruler@startnumv}%
\put(-\fgruler@sep,0){\makebox(0,0)[r]{\fgruler@rotatebox{-90}{\fgruler@font@\thefgrulernum}}}%
\ifdim#1>.5cm\put(-\fgruler@sep,5){\makebox(0,0)[r]{\fgruler@rotatebox{-90}{\fgruler@font@\fgruler@caption@cm}}}\fi%
\end{picture}}

\def\fgruler@cm@upleft@@#1{\leavevmode\hbox{}\lower#1\hbox{\fgruler@cm@upleft@{#1}}}

%% UPLEFT IN
\def\fgruler@in@upleft#1{%
\fgruler@rulercolor%
\fgruler@markthickness%
\fgruler@div{#1}{1}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(0,1){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@i\fgruler@in@color@i\line(-1,0){\fgruler@in@ratio@i\fgruler@marklth}}}%
\fgruler@div{#1}{2}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(0,2){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@ii\fgruler@in@color@ii\line(-1,0){\fgruler@in@ratio@ii\fgruler@marklth}}}%
\fgruler@div{#1}{4}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(0,4){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@iii\fgruler@in@color@iii\line(-1,0){\fgruler@in@ratio@iii\fgruler@marklth}}}%
\fgruler@div{#1}{8}%
\setcounter{fgrulernum}{0}%
\multiput(0,0)(0,8){\@tempcnta}{\fgruler@ifodd{\fgruler@in@thick@iv\fgruler@in@color@iv\line(-1,0){\fgruler@in@ratio@iv\fgruler@marklth}}}%
\fgruler@div{#1}{16}%
\multiput(0,0)(0,16){\@tempcnta}{\fgruler@in@thick@v\fgruler@in@color@v\line(-1,0){\fgruler@marklth}}%
\iffgruler@borderline\put(0,0){\line(0,1){#1}}\fi%
\setcounter{fgrulernum}{\fgruler@startnumv}\stepcounter{fgrulernum}%
\multiput(-\fgruler@sep,16)(0,16){\fgruler@tempdima}{\makebox(0,0)[r]{\fgruler@rotatebox{-90}{\fgruler@font@\thefgrulernum\stepcounter{fgrulernum}}}}}

\def\fgruler@in@upleft@#1{%
\setlength{\unitlength}{.0625in}%
\begin{picture}(\fgruler@width,#1)(-\fgruler@width,0)%
\fgruler@in@upleft{#1}%
\setcounter{fgrulernum}{\fgruler@startnumv}%
\put(-\fgruler@sep,0){\makebox(0,0)[r]{\fgruler@rotatebox{-90}{\fgruler@font@\thefgrulernum}}}%
\ifdim#1>.5in\put(-\fgruler@sep,8){\makebox(0,0)[r]{\fgruler@rotatebox{-90}{\fgruler@font@\fgruler@caption@in}}}\fi%
\end{picture}}

\def\fgruler@in@upleft@@#1{\leavevmode\hbox{}\lower#1\hbox{\fgruler@in@upleft@{#1}}}

%% UPPERLEFT CM
\def\fgruler@cm@upperleft@#1#2{%
\setlength{\unitlength}{1mm}%
\begin{picture}(#1,#2)(0,-#2)%
\fgruler@cm@rightdown{#1}%
\fgruler@cm@downright{#2}%
\ifdim#1>.5cm\put(5,-\fgruler@sep){\makebox(0,0)[t]{\fgruler@font@\fgruler@caption@cm}}\fi%
\end{picture}}

\def\fgruler@cm@upperleft@@#1#2{\leavevmode\hbox{}\lower#2\hbox{\fgruler@cm@upperleft@{#1}{#2}}}

\def\fgruler@cm@upperleft@fg@#1#2{%
\begingroup%
\setlength{\fgruler@fg@width}{\paperwidth}%
\addtolength{\fgruler@fg@width}{-#1}%
\setlength{\fgruler@fg@height}{\paperheight}%
\addtolength{\fgruler@fg@height}{-#2}%
\fgruler@fgsetting%
\AtPageLowerLeft{\put(#1,0){%
\fgruler@cm@upperleft@{\fgruler@fg@width}{\fgruler@fg@height}}}%
\endgroup}

\def\fgruler@cm@upperleft@fg{\fgruler@cm@upperleft@fg@{\fgruler@hshift}{\fgruler@vshift}}

%% UPPERLEFT IN
\def\fgruler@in@upperleft@#1#2{%
\setlength{\unitlength}{.0625in}%
\begin{picture}(#1,#2)(0,-#2)%
\fgruler@in@rightdown{#1}%
\fgruler@in@downright{#2}%
\ifdim#1>.5in\put(8,-\fgruler@sep){\makebox(0,0)[t]{\fgruler@font@\fgruler@caption@in}}\fi%
\end{picture}}

\def\fgruler@in@upperleft@@#1#2{\leavevmode\hbox{}\lower#2\hbox{\fgruler@in@upperleft@{#1}{#2}}}

\def\fgruler@in@upperleft@fg@#1#2{%
\begingroup%
\setlength{\fgruler@fg@width}{\paperwidth}%
\addtolength{\fgruler@fg@width}{-#1}%
\setlength{\fgruler@fg@height}{\paperheight}%
\addtolength{\fgruler@fg@height}{-#2}%
\fgruler@fgsetting%
\AtPageLowerLeft{\put(#1,0){%
\fgruler@in@upperleft@{\fgruler@fg@width}{\fgruler@fg@height}}}%
\endgroup}

\def\fgruler@in@upperleft@fg{\fgruler@in@upperleft@fg@{\fgruler@hshift}{\fgruler@vshift}}

%% UPPERRIGHT CM
\def\fgruler@cm@upperright@#1#2{%
\setlength{\unitlength}{1mm}%
\begin{picture}(#1,#2)(-#1,-#2)%
\fgruler@cm@leftdown{#1}%
\fgruler@cm@downleft{#2}%
\ifdim#1>.5cm\put(-5,-\fgruler@sep){\makebox(0,0)[t]{\fgruler@font@\fgruler@caption@cm}}\fi%
\end{picture}}

\def\fgruler@cm@upperright@@#1#2{\leavevmode\hbox{}\lower#2\hbox{\fgruler@cm@upperright@{#1}{#2}}}

\def\fgruler@cm@upperright@fg@#1#2{%
\begingroup%
\setlength{\fgruler@fg@width}{\paperwidth}%
\addtolength{\fgruler@fg@width}{-#1}%
\setlength{\fgruler@fg@height}{\paperheight}%
\addtolength{\fgruler@fg@height}{-#2}%
\fgruler@fgsetting%
\AtPageLowerLeft{\fgruler@cm@upperright@{\fgruler@fg@width}{\fgruler@fg@height}}%
\endgroup}

\def\fgruler@cm@upperright@fg{\fgruler@cm@upperright@fg@{\fgruler@hshift}{\fgruler@vshift}}

%% UPPERRIGHT IN
\def\fgruler@in@upperright@#1#2{%
\setlength{\unitlength}{.0625in}%
\begin{picture}(#1,#2)(-#1,-#2)%
\fgruler@in@leftdown{#1}%
\fgruler@in@downleft{#2}%
\ifdim#1>.5in\put(-8,-\fgruler@sep){\makebox(0,0)[t]{\fgruler@font@\fgruler@caption@in}}\fi%
\end{picture}}

\def\fgruler@in@upperright@@#1#2{\leavevmode\hbox{}\lower#2\hbox{\fgruler@in@upperright@{#1}{#2}}}

\def\fgruler@in@upperright@fg@#1#2{%
\begingroup%
\setlength{\fgruler@fg@width}{\paperwidth}%
\addtolength{\fgruler@fg@width}{-#1}%
\setlength{\fgruler@fg@height}{\paperheight}%
\addtolength{\fgruler@fg@height}{-#2}%
\fgruler@fgsetting%
\AtPageLowerLeft{\fgruler@in@upperright@{\fgruler@fg@width}{\fgruler@fg@height}}%
\endgroup}

\def\fgruler@in@upperright@fg{\fgruler@in@upperright@fg@{\fgruler@hshift}{\fgruler@vshift}}

%% LOWERLEFT CM
\def\fgruler@cm@lowerleft@#1#2{%
\setlength{\unitlength}{1mm}%
\begin{picture}(#1,#2)%
\fgruler@cm@rightup{#1}%
\fgruler@cm@upright{#2}%
\ifdim#1>.5cm\put(5,\fgruler@sep){\makebox(0,0)[b]{\fgruler@font@\fgruler@caption@cm}}\fi%
\end{picture}}

\def\fgruler@cm@lowerleft@@#1#2{\leavevmode\hbox{}\lower#2\hbox{\fgruler@cm@lowerleft@{#1}{#2}}}

\def\fgruler@cm@lowerleft@fg@#1#2{%
\begingroup%
\setlength{\fgruler@fg@width}{\paperwidth}%
\addtolength{\fgruler@fg@width}{-#1}%
\setlength{\fgruler@fg@height}{\paperheight}%
\addtolength{\fgruler@fg@height}{-#2}%
\fgruler@fgsetting%
\AtPageLowerLeft{\put(#1,#2){%
\fgruler@cm@lowerleft@{\fgruler@fg@width}{\fgruler@fg@height}}}%
\endgroup}

\def\fgruler@cm@lowerleft@fg{\fgruler@cm@lowerleft@fg@{\fgruler@hshift}{\fgruler@vshift}}

%% LOWERLEFT IN
\def\fgruler@in@lowerleft@#1#2{%
\setlength{\unitlength}{.0625in}%
\begin{picture}(#1,#2)%
\fgruler@in@rightup{#1}%
\fgruler@in@upright{#2}%
\ifdim#1>.5in\put(8,\fgruler@sep){\makebox(0,0)[b]{\fgruler@font@\fgruler@caption@in}}\fi%
\end{picture}}

\def\fgruler@in@lowerleft@@#1#2{\leavevmode\hbox{}\lower#2\hbox{\fgruler@in@lowerleft@{#1}{#2}}}

\def\fgruler@in@lowerleft@fg@#1#2{%
\begingroup%
\setlength{\fgruler@fg@width}{\paperwidth}%
\addtolength{\fgruler@fg@width}{-#1}%
\setlength{\fgruler@fg@height}{\paperheight}%
\addtolength{\fgruler@fg@height}{-#2}%
\fgruler@fgsetting%
\AtPageLowerLeft{\put(#1,#2){%
\fgruler@in@lowerleft@{\fgruler@fg@width}{\fgruler@fg@height}}}%
\endgroup}

\def\fgruler@in@lowerleft@fg{\fgruler@in@lowerleft@fg@{\fgruler@hshift}{\fgruler@vshift}}

%% LOWERRIGHT CM
\def\fgruler@cm@lowerright@#1#2{%
\setlength{\unitlength}{1mm}%
\begin{picture}(#1,#2)(-#1,0)%
\fgruler@cm@leftup{#1}%
\fgruler@cm@upleft{#2}%
\ifdim#1>.5cm\put(-5,\fgruler@sep){\makebox(0,0)[b]{\fgruler@font@\fgruler@caption@cm}}\fi%
\end{picture}}

\def\fgruler@cm@lowerright@@#1#2{\leavevmode\hbox{}\lower#2\hbox{\fgruler@cm@lowerright@{#1}{#2}}}

\def\fgruler@cm@lowerright@fg@#1#2{%
\begingroup%
\setlength{\fgruler@fg@width}{\paperwidth}%
\addtolength{\fgruler@fg@width}{-#1}%
\setlength{\fgruler@fg@height}{\paperheight}%
\addtolength{\fgruler@fg@height}{-#2}%
\fgruler@fgsetting%
\AtPageLowerLeft{\put(0,#2){%
\fgruler@cm@lowerright@{\fgruler@fg@width}{\fgruler@fg@height}}}%
\endgroup}

\def\fgruler@cm@lowerright@fg{\fgruler@cm@lowerright@fg@{\fgruler@hshift}{\fgruler@vshift}}

%% LOWERRIGHT IN
\def\fgruler@in@lowerright@#1#2{%
\setlength{\unitlength}{.0625in}%
\begin{picture}(#1,#2)(-#1,0)%
\fgruler@in@leftup{#1}%
\fgruler@in@upleft{#2}%
\ifdim#1>.5in\put(-8,\fgruler@sep){\makebox(0,0)[b]{\fgruler@font@\fgruler@caption@in}}\fi%
\end{picture}}

\def\fgruler@in@lowerright@@#1#2{\leavevmode\hbox{}\lower#2\hbox{\fgruler@in@lowerright@{#1}{#2}}}

\def\fgruler@in@lowerright@fg@#1#2{%
\begingroup%
\setlength{\fgruler@fg@width}{\paperwidth}%
\addtolength{\fgruler@fg@width}{-#1}%
\setlength{\fgruler@fg@height}{\paperheight}%
\addtolength{\fgruler@fg@height}{-#2}%
\fgruler@fgsetting%
\AtPageLowerLeft{\put(0,#2){%
\fgruler@in@lowerright@{\fgruler@fg@width}{\fgruler@fg@height}}}%
\endgroup}

\def\fgruler@in@lowerright@fg{\fgruler@in@lowerright@fg@{\fgruler@hshift}{\fgruler@vshift}}

%% UPPERLEFTT CM
\def\fgruler@cm@upperleftT@fg{%
\AtTextLowerLeft{%
\setlength{\unitlength}{1mm}%
\fgruler@fgsetting%
\begin{picture}(\textwidth,\textheight)(0,-\textheight)%
\fgruler@cm@rightup{\textwidth}%
\fgruler@cm@downleft{\textheight}%
\put(5,\fgruler@sep){\makebox(0,0)[b]{\fgruler@font@\fgruler@caption@cm}}%
\setcounter{fgrulernum}{\fgruler@startnumh}%
\put(0,\fgruler@sep){\makebox(0,0)[b]{\fgruler@font@\thefgrulernum}}%
\setcounter{fgrulernum}{\fgruler@startnumv}%
\put(-\fgruler@sep,0){\makebox(0,0)[r]{\fgruler@font@\thefgrulernum}}%
\end{picture}}}

%% UPPERLEFTT IN
\def\fgruler@in@upperleftT@fg{%
\AtTextLowerLeft{%
\setlength{\unitlength}{.0625in}%
\fgruler@fgsetting%
\begin{picture}(\textwidth,\textheight)(0,-\textheight)%
\fgruler@in@rightup{\textwidth}%
\fgruler@in@downleft{\textheight}%
\put(8,\fgruler@sep){\makebox(0,0)[b]{\fgruler@font@\fgruler@caption@in}}%
\setcounter{fgrulernum}{\fgruler@startnumh}%
\put(0,\fgruler@sep){\makebox(0,0)[b]{\fgruler@font@\thefgrulernum}}%
\setcounter{fgrulernum}{\fgruler@startnumv}%
\put(-\fgruler@sep,0){\makebox(0,0)[r]{\fgruler@font@\thefgrulernum}}%
\end{picture}}}

%% UPPERRIGHTT CM
\def\fgruler@cm@upperrightT@fg{%
\AtTextLowerLeft{%
\setlength{\unitlength}{1mm}%
\fgruler@fgsetting%
\begin{picture}(\textwidth,\textheight)(-\textwidth,-\textheight)%
\fgruler@cm@leftup{\textwidth}%
\fgruler@cm@downright{\textheight}%
\put(-5,\fgruler@sep){\makebox(0,0)[b]{\fgruler@font@\fgruler@caption@cm}}%
\setcounter{fgrulernum}{\fgruler@startnumh}%
\put(0,\fgruler@sep){\makebox(0,0)[b]{\fgruler@font@\thefgrulernum}}%
\setcounter{fgrulernum}{\fgruler@startnumv}%
\put(\fgruler@sep,0){\makebox(0,0)[l]{\fgruler@font@\thefgrulernum}}%
\end{picture}}}

%% UPPERRIGHTT IN
\def\fgruler@in@upperrightT@fg{%
\AtTextLowerLeft{%
\setlength{\unitlength}{.0625in}%
\fgruler@fgsetting%
\begin{picture}(\textwidth,\textheight)(-\textwidth,-\textheight)%
\fgruler@in@leftup{\textwidth}%
\fgruler@in@downright{\textheight}%
\put(-8,\fgruler@sep){\makebox(0,0)[b]{\fgruler@font@\fgruler@caption@in}}%
\setcounter{fgrulernum}{\fgruler@startnumh}%
\put(0,\fgruler@sep){\makebox(0,0)[b]{\fgruler@font@\thefgrulernum}}%
\setcounter{fgrulernum}{\fgruler@startnumv}%
\put(\fgruler@sep,0){\makebox(0,0)[l]{\fgruler@font@\thefgrulernum}}%
\end{picture}}}

%% LOWERLEFTT CM
\def\fgruler@cm@lowerleftT@fg{%
\AtTextLowerLeft{%
\setlength{\unitlength}{1mm}%
\fgruler@fgsetting%
\begin{picture}(\textwidth,\textheight)(0,0)%
\fgruler@cm@rightdown{\textwidth}%
\fgruler@cm@upleft{\textheight}%
\put(5,-\fgruler@sep){\makebox(0,0)[t]{\fgruler@font@\fgruler@caption@cm}}%
\setcounter{fgrulernum}{\fgruler@startnumh}%
\put(0,-\fgruler@sep){\makebox(0,0)[t]{\fgruler@font@\thefgrulernum}}%
\setcounter{fgrulernum}{\fgruler@startnumv}%
\put(-\fgruler@sep,0){\makebox(0,0)[r]{\fgruler@font@\thefgrulernum}}%
\end{picture}}}

%% LOWERLEFTT IN
\def\fgruler@in@lowerleftT@fg{%
\AtTextLowerLeft{%
\setlength{\unitlength}{.0625in}%
\fgruler@fgsetting%
\begin{picture}(\textwidth,\textheight)(0,0)%
\fgruler@in@rightdown{\textwidth}%
\fgruler@in@upleft{\textheight}%
\put(8,-\fgruler@sep){\makebox(0,0)[t]{\fgruler@font@\fgruler@caption@in}}%
\setcounter{fgrulernum}{\fgruler@startnumh}%
\put(0,-\fgruler@sep){\makebox(0,0)[t]{\fgruler@font@\thefgrulernum}}%
\setcounter{fgrulernum}{\fgruler@startnumv}%
\put(-\fgruler@sep,0){\makebox(0,0)[r]{\fgruler@font@\thefgrulernum}}%
\end{picture}}}

%% LOWERRIGHTT CM
\def\fgruler@cm@lowerrightT@fg{%
\AtTextLowerLeft{%
\setlength{\unitlength}{1mm}%
\fgruler@fgsetting%
\begin{picture}(\textwidth,\textheight)(-\textwidth,0)%
\fgruler@cm@leftdown{\textwidth}%
\fgruler@cm@upright{\textheight}%
\put(-5,-\fgruler@sep){\makebox(0,0)[t]{\fgruler@font@\fgruler@caption@cm}}%
\setcounter{fgrulernum}{\fgruler@startnumh}%
\put(0,-\fgruler@sep){\makebox(0,0)[t]{\fgruler@font@\thefgrulernum}}%
\setcounter{fgrulernum}{\fgruler@startnumv}%
\put(\fgruler@sep,0){\makebox(0,0)[l]{\fgruler@font@\thefgrulernum}}%
\end{picture}}}

%% LOWERRIGHTT IN
\def\fgruler@in@lowerrightT@fg{%
\AtTextLowerLeft{%
\setlength{\unitlength}{.0625in}%
\fgruler@fgsetting%
\begin{picture}(\textwidth,\textheight)(-\textwidth,0)%
\fgruler@in@leftdown{\textwidth}%
\fgruler@in@upright{\textheight}%
\put(-8,-\fgruler@sep){\makebox(0,0)[t]{\fgruler@font@\fgruler@caption@in}}%
\setcounter{fgrulernum}{\fgruler@startnumh}%
\put(0,-\fgruler@sep){\makebox(0,0)[t]{\fgruler@font@\thefgrulernum}}%
\setcounter{fgrulernum}{\fgruler@startnumv}%
\put(\fgruler@sep,0){\makebox(0,0)[l]{\fgruler@font@\thefgrulernum}}%
\end{picture}}}

%% USER
\def\fgruler@cm@user@fg{}
\def\fgruler@in@user@fg{}
\def\fgrulertype#1#2{\csname fgruler@#1@#2@fg\endcsname}
\def\fgrulerdefusercm#1{\def\fgruler@cm@user@fg{#1}}
\def\fgrulerdefuserin#1{\def\fgruler@in@user@fg{#1}}
%    \end{macrocode}
% \Finale
\endinput