%%
%% This is file `gridpapers.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% gridpapers.dtx  (with options: `package')
%% 
%% This is a generated file.
%% 
%% Copyright (C) 2021 by Robert McNees <rmcnees@luc.edu>, Leo C. Stein <leo.stein@gmail.com>
%% --------------------------------------------------------------------------
%% 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.
%% 

\NeedsTeXFormat{LaTeX2e}[1994/06/01]
\ProvidesPackage{gridpapers}
    [2021/03/14 v1.0.0 Graph paper backgrounds]

\RequirePackage{xkeyval}
\RequirePackage{kvoptions}
\RequirePackage{xcolor}
\RequirePackage{tikz}
\usetikzlibrary{patterns.meta,calc}
\RequirePackage{tikzpagenodes}
%% everypage has been superseded -- try to use the new builtin
%% approach, but fall back to everypage-1x if needed
%% This code is roughly taken from the new everypage code
\@ifundefined{AddToHook}{%
  \RequirePackage{everypage-1x}
}{%
  \newcommand*{\AddEverypageHook}[1]{%
  \AddToHook{shipout/background}{\put(1in,-1in){#1}}}
}
\RequirePackage{pagecolor}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Option parsing
%% Declare switches for processing the options.

\newif\ifGP@geometrypreviouslyloaded
\newif\ifGP@fullnessset
\newif\ifGP@fullpage
\newif\ifGP@textarea
\GP@geometrypreviouslyloadedfalse
\GP@fullnesssetfalse
\GP@fullpagefalse
\GP@textareafalse

\SetupKeyvalOptions{%
  family=GP,%
  prefix=GPOpt@%
}

\DeclareStringOption[std]{pattern}
\DeclareStringOption[std]{colorset}

\DeclareStringOption{majorcolor}
\DeclareStringOption{minorcolor}
\DeclareStringOption{bgcolor}

\DeclareStringOption{patternsize}
\DeclareStringOption[.7pt]{dotsize}

\DeclareVoidOption{fullpage}{\GP@fullpagetrue}
\DeclareVoidOption{textarea}{\GP@textareatrue}

\DeclareStringOption{geometry}

\ProcessKeyvalOptions*

%% Can only have one of fullpage or textarea
\ifGP@fullpage
  \ifGP@textarea
    \PackageError{gridpapers}{%
      Can not specify both fullpage and textarea, please remove one option}{}
    \fi
  \GP@fullnesssettrue
\fi

\ifGP@textarea
  \GP@fullnesssettrue
\fi

%% We keep track of this to know whether or not we would be overriding
%% a previously-set page geometry
\@ifpackageloaded{geometry}
  {\GP@geometrypreviouslyloadedtrue}
  {\GP@geometrypreviouslyloadedfalse%
    \PassOptionsToPackage{\GPOpt@geometry}{geometry}%
    \RequirePackage{geometry}%
  }

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Actual package code
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Some nice colors.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\definecolor{plum}{rgb}{0.36078, 0.20784, 0.4}
\definecolor{chameleon}{rgb}{0.30588, 0.60392, 0.023529}
\definecolor{cornflower}{rgb}{0.12549, 0.29020, 0.52941}
\definecolor{scarlet}{rgb}{0.8, 0, 0}
\definecolor{brick}{rgb}{0.64314, 0, 0}
\definecolor{sunrise}{rgb}{0.80784, 0.36078, 0}
\definecolor{rosiebg}{RGB}{250,247,232}
\definecolor{rosiegrid}{RGB}{186,137,113}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% The color to use for the null directions when drawing lightcones.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\colorlet{lightlines}{scarlet!30}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Pre-defined Color schemes
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Here are some pre-defined color schemes for the paper background
%% and the major and minor grid lines.  These are switched by using
%% the option colorset=<name>.  The allowed values for colorset are in
%% the list below.
\define@choicekey*{GP}{colorset}[\val\nr]%
  %% Allowed values for colorset:
  {std,precocious,brickred,engineer,plumpad}[std]{%
  \ifcase\nr\relax
    %% std
    \colorlet{minorcolor}{cornflower!30}
    \colorlet{majorcolor}{cornflower!50}
    \colorlet{bgcolor}{white}
  \or
    %% precocious
    \colorlet{minorcolor}{rosiegrid!50}
    \colorlet{majorcolor}{rosiegrid}
    \colorlet{bgcolor}{rosiebg}
  \or
    %% brickred
    \colorlet{minorcolor}{brick!35}
    \colorlet{majorcolor}{brick!60}
    \colorlet{bgcolor}{scarlet!8}
  \or
    %% engineer
    \colorlet{minorcolor}{chameleon!50}
    \colorlet{majorcolor}{chameleon!80}
    \colorlet{bgcolor}{chameleon!10}
  \or
    %% plumpad
    \colorlet{minorcolor}{cornflower!40}
    \colorlet{majorcolor}{cornflower!70}
    \colorlet{bgcolor}{plum!10}
  \fi
}

%% Get the specified color set from the options
\def\@setkeyhelper#1#2{%
  \setkeys{GP}{#2=#1}
}
\expandafter\@setkeyhelper\expandafter{\GPOpt@colorset}{colorset}

%% If the user further specified majorcolor, minorcolor, and/or
%% bgcolor, we now override the selected colorset
\ifx\GPOpt@majorcolor\@empty
\else
  \colorlet{majorcolor}{\GPOpt@majorcolor}
\fi
\ifx\GPOpt@minorcolor\@empty
\else
  \colorlet{minorcolor}{\GPOpt@minorcolor}
\fi
\ifx\GPOpt@bgcolor\@empty
\else
  \colorlet{bgcolor}{\GPOpt@bgcolor}
\fi

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% The size parameter -- different meanings for different patterns
%% Will be reset by pattern code
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\GP@patternsize}{0.1in}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% This section sets up a routine for filling a shape with
%% hexagons. Uses code from:
%% http://tex.stackexchange.com/questions/6019/drawing-hexagons/6128#6128
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% We have to delay this definition until after \GP@patternsize is
%% redefined (by the pattern selection and/or user override)
\newcommand{\GP@declarehexpat}{
\pgfdeclarepatternformonly
  {hexagons}%% name
  {\pgfpointorigin}%% lower left
  {\pgfpoint{3*\GP@patternsize}{0.866025*2*\GP@patternsize}}
  {\pgfpoint{3*\GP@patternsize}{0.866025*2*\GP@patternsize}}
  {
    \pgfsetlinewidth{0.6pt}
    \pgftransformshift{\pgfpoint{0mm}{0.866025*\GP@patternsize}}
    \pgfpathmoveto{\pgfpoint{0mm}{0mm}}
    \pgfpathlineto{\pgfpoint{0.5*\GP@patternsize}{0mm}}
    \pgfpathlineto{\pgfpoint{\GP@patternsize}{-0.866025*\GP@patternsize}}
    \pgfpathlineto{\pgfpoint{2*\GP@patternsize}{-0.866025*\GP@patternsize}}
    \pgfpathlineto{\pgfpoint{2.5*\GP@patternsize}{0mm}}
    \pgfpathlineto{\pgfpoint{3*\GP@patternsize}{0mm}}
    \pgfpathmoveto{\pgfpoint{0.5*\GP@patternsize}{0mm}}
    \pgfpathlineto{\pgfpoint{\GP@patternsize}{0.866025*\GP@patternsize}}
    \pgfpathlineto{\pgfpoint{2*\GP@patternsize}{0.866025*\GP@patternsize}}
    \pgfpathlineto{\pgfpoint{2.5*\GP@patternsize}{0mm}}
    \pgfusepath{stroke}
  }
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% This section sets up a routine for filling a shape with
%% triangles.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% We have to delay this definition until after \GP@patternsize is
%% redefined (by the pattern selection and/or user override)
\newcommand{\GP@declaretripat}{
\pgfdeclarepatternformonly
  %% Name of the pattern
  {triangles}
  %% Set the lower left corner of the pattern
  {\pgfpointorigin}
  %% Set the upper right corner of the pattern
  {\pgfpoint{\GP@patternsize}{2*0.8660254*\GP@patternsize}}
  %% Declare the size of the pattern blocks
  {\pgfpoint{\GP@patternsize}{2*0.8660254*\GP@patternsize}}
  %% Draw the pattern
  {
    \pgfsetlinewidth{0.6pt}
  \pgfpathmoveto{\pgfpoint{0mm}{0mm}}
  \pgfpathlineto{\pgfpoint{\GP@patternsize}{2*0.8660254*\GP@patternsize}}
  \pgfpathlineto{\pgfpoint{0mm}{2*0.8660254*\GP@patternsize}}
    \pgfpathmoveto{\pgfpoint{0mm}{0.8660254*\GP@patternsize}}
  \pgfpathlineto{\pgfpoint{\GP@patternsize}{0.8660254*\GP@patternsize}}
    \pgfpathmoveto{\pgfpoint{0mm}{2*0.8660254*\GP@patternsize}}
  \pgfpathlineto{\pgfpoint{\GP@patternsize}{0mm}}
  \pgfpathlineto{\pgfpoint{0mm}{0mm}}
    \pgfusepath{stroke}
  }
}
\newcommand{\GP@declareisopat}{
\pgfdeclarepatternformonly
  %% Name of the pattern
  {isometric}
  %% Set the lower left corner of the pattern
  {\pgfpointorigin}
  %% Set the upper right corner of the pattern
  {\pgfpoint{2*0.8660254*\GP@patternsize}{\GP@patternsize}}
  %% Declare the size of the pattern blocks
  {\pgfpoint{2*0.8660254*\GP@patternsize}{\GP@patternsize}}
  %% Draw the pattern
  {
    \pgfsetlinewidth{0.6pt}
  \pgfpathmoveto{\pgfpoint{0mm}{0mm}}
  \pgfpathlineto{\pgfpoint{2*0.8660254*\GP@patternsize}{\GP@patternsize}}
  \pgfpathlineto{\pgfpoint{2*0.8660254*\GP@patternsize}{0mm}}
  \pgfpathlineto{\pgfpoint{0mm}{\GP@patternsize}}
  \pgfpathlineto{\pgfpoint{0mm}{0mm}}
    \pgfpathmoveto{\pgfpoint{0.8660254*\GP@patternsize}{0mm}}
    \pgfpathlineto{\pgfpoint{0.8660254*\GP@patternsize}{\GP@patternsize}}
    \pgfusepath{stroke}
  }
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% This section sets up a routine for filling the squares in a
%% grid with null lines.
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TODO Still can't figure out the correct pattern shift!!
\newcommand{\GP@declarelightconepat}{
\pgfkeys{
  /pgf/pattern keys/myshift/.store in=\myshift,
  /pgf/pattern keys/myshift/.initial={(0,0)},
}
\tikzdeclarepattern{
  name=lightcones,
  type=uncolored,
  parameters={\myshift},
  bounding box={(0,0) and (\GP@patternsize,\GP@patternsize)},
  tile size={(\GP@patternsize, \GP@patternsize)},
  tile transformation={
    shift=\myshift,
  },
  defaults={
    myshift/.store in=\myshift,myshift={(0,0)},
  },
  code={
    %% TODO Make the dashing an option
    \tikzset{lightlines/.style={line width=0.4pt,dash=on 0.05cm off 0.05cm phase 0.025cm}}
    \draw [lightlines] (0,0) -- (\GP@patternsize,\GP@patternsize);
    \draw [lightlines] (0,\GP@patternsize) -- (\GP@patternsize,0);
  },
}
}
%% \pgfdeclarepatternformonly
%%   {lightcones}% name
%%   {\pgfpointorigin}% lower left
%%   {\pgfpoint{\GP@patternsize}{\GP@patternsize}}%  upper right
%%   {\pgfpoint{\GP@patternsize}{\GP@patternsize}}%  tile size
%%   {% shape description
%%     \pgfsetlinewidth{0.4pt}
%%     %% TODO Make an option
%%     %Comment out this line for solid lines on light cones, instead of dashes.
%%     \pgfsetdash{{0.05cm}{0.05cm}}{0.025cm}
%%     \pgfpathmoveto{\pgfpoint{0in}{0in}}
%%     \pgfpathlineto{\pgfpoint{\GP@patternsize}{\GP@patternsize}}
%%     \pgfpathmoveto{\pgfpoint{0in}{\GP@patternsize}}
%%     \pgfpathlineto{\pgfpoint{\GP@patternsize}{0in}}
%%     \pgfusepath{stroke}
%%   }

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% This section sets up a routine for filling a region with dots
%% Slightly modified version of code added by Leo
%% Stein (@duetosymmetry on Twitter).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% We have to delay this definition until after \GP@patternsize is
%% redefined (by the pattern selection and/or user override)
\newcommand{\GP@declaredotpat}{
\pgfdeclarepatternformonly
  {dotgrid}%% name
  {\pgfpoint{-0.5*\GP@patternsize}{-0.5*\GP@patternsize}}%% lower left
  {\pgfpoint{0.5*\GP@patternsize}{0.5*\GP@patternsize}}%%  upper right
  {\pgfpoint{\GP@patternsize}{\GP@patternsize}}%%  tile size
  {%% shape description
    \pgfpathcircle{\pgfqpoint{0pt}{0pt}}{\GPOpt@dotsize}
    \pgfusepath{fill}
  }
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Begin pattern execution infrastructure
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% This inner code will be set by the choicekey pattern=...
\newcommand{\GP@innerpatterncode}{}
%% This is the "outer" code to hook into every page
\newcommand{\GP@patterncode}{% No blank lines in this code!
\begin{tikzpicture}[remember picture, overlay]
%%
%% Change "thin" to "very thin" if the lines are too thick.
\tikzset{
  minorgrid/.style={minorcolor, thin},
  majorgrid/.style={majorcolor, thin},
}
\ifGP@fullpage%
\coordinate (a) at (current page.south west);
\coordinate (b) at (current page.north east);
\else%
\coordinate (a) at (current page text area.south west);
\coordinate (b) at (current page text area.north east);
\fi
%%
\GP@innerpatterncode%
%%
\end{tikzpicture}
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Begin pattern definition code
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\define@boolkey{GP}{patterndefaultfullness}{}
\newcommand{\GP@patterndefaultgeometry}{}
\newcommand{\GP@patterndefaultsize}{}

%% Pattern-definer-helper
%% The interface is:
%% \GP@setpattern
%%   {<true for default fullpage, false for default textarea>}
%%   {<default geometry config>}
%%   {<default pattern size>}  %% NOTE, not tile length
%%   {<contents of inner pattern code>}
\newcommand{\GP@setpattern}[4]{%
\setkeys{GP}{patterndefaultfullness=#1}
\renewcommand{\GP@patterndefaultgeometry}{#2}
\renewcommand{\GP@patterndefaultsize}{#3}
\renewcommand{\GP@innerpatterncode}{#4}
}

\define@choicekey*{GP}{pattern}[\val\nr]%
  %% Allowed values for pattern:
  {std,stdeight,majmin,dot,hex,tri,iso,lightcone,ruled,doubleruled}{%
  \ifcase\nr\relax
    %% std
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Quadrille, ten squares per inch.
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \GP@setpattern{false}{letterpaper, margin=0.2in}{0.1in}{%
%% Draw a grid with 10 squares per inch.
\draw[style=minorgrid, shift={(a)}] (0,0) grid [step=\GP@patternsize] (b);
%%
%% Draw a frame around the grid.
\draw[style=majorgrid] (a) rectangle (b);
    }
  \or
    %% stdeight
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Quadrille, eight squares per inch.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \GP@setpattern{false}{letterpaper, margin=0.1875in}{0.125in}{%
%% Draw a grid with 10 squares per inch.
\draw[style=minorgrid, shift={(a)}] (0,0) grid [step=\GP@patternsize] (b);
%%
%% Draw a frame around the grid.
\draw[style=majorgrid] (a) rectangle (b);
    }
  \or
    %% majmin
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Graph paper, eight squares per inch with a major grid
%% every half-inch.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \GP@setpattern{false}{letterpaper, margin=0.25in}{0.125in}{%
%% Draw a grid with 10 squares per inch.
\draw[style=minorgrid, shift={(a)}] (0,0) grid [step=\GP@patternsize] (b);
%%
\draw[style=majorgrid, shift={(a)}] (0,0) grid [step=4*\GP@patternsize]   (b);
%%
%% Draw a frame around the grid.
\draw[style=majorgrid] (a) rectangle (b);
    }
  \or
    %% dot
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Dot grid
%% Slightly modified version of code added by Leo
%% Stein (@duetosymmetry).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \GP@setpattern{true}{}{0.1in}{%
    \fill [pattern=dotgrid,pattern color=minorcolor] (a) rectangle (b);
    }
  \or
    %% hex
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Hex grid
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \GP@setpattern{true}{}{0.1666in}{%
    \fill [pattern=hexagons,pattern color=minorcolor] (a) rectangle (b);
    }
  \or
    %% tri
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Triangle grid, adjust triangle size in the preamble
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \GP@setpattern{true}{}{0.25in}{%
      \fill [pattern=triangles,pattern color=minorcolor] (a) rectangle (b);
    }
  \or
    %% iso
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Isometric grid
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \GP@setpattern{true}{}{0.25in}{%
      \fill [pattern=isometric, pattern color=minorcolor] (a) rectangle (b);
    }
  \or
    %% lightcone
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% A grid with light cones.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \GP@setpattern{false}{letterpaper, margin=.125in}{0.25in}{%
%% Draw a grid with 4 squares per inch.
\draw[style=minorgrid, shift={(a)}] (0,0) coordinate grid [step=\GP@patternsize] (b);
%%
%% Draw a border around the grid.
\draw[style=majorgrid, pattern={lightcones[myshift={(a)}]}, pattern color=lightlines] (a) rectangle (b);
    }
  \or
    %% ruled
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Ruled page with bold lines every 0.2in or 0.25in
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \GP@setpattern{false}{letterpaper, body={8in,10.8in}}{0.2in}{%
%% Draw a ruled page with lines every 0.2in
\draw[style=majorgrid, shift={(a)}] (0,0) grid [ystep=\GP@patternsize, xstep=\paperwidth] (b);
%% Draw a frame around the grid.
\draw[style=majorgrid] (a) rectangle (b);
    }
  \or
    %% doubleruled
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Ruled page with bold lines every 0.25in and light lines
%% every 0.125 in.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \GP@setpattern{false}{letterpaper, margin=.25in}{0.125in}{%
%% Draw a ruled pattern with thin lines every 0.125 in and bold lines every 0.25 in.
\draw[style=minorgrid, shift={(a)}] (0,0) grid [ystep=\GP@patternsize, xstep=\paperwidth] (b);
%%
\draw[style=majorgrid, shift={(a)}] (0,0) grid [ystep=2*\GP@patternsize, xstep=\paperwidth] (b);
%%
%% Draw a frame around the grid.
\draw[style=majorgrid] (a) rectangle (b);
    }
  \fi
}

%% Use the passed package option to set the above key
\expandafter\@setkeyhelper\expandafter{\GPOpt@pattern}{pattern}

%% Determine whether or not to (re)set fullpage vs textarea
\ifGP@fullnessset
%% Respect their choice
\else
  %% Reset the value of \GP@fullpage based on the pattern's default
  %% There's probably a more idiomatic way to do this but I can't
  %% figure it out
  \ifKV@GP@patterndefaultfullness
    \GP@fullpagetrue
  \else
    \GP@fullpagefalse
  \fi
\fi

%% Determine whether or not to fiddle with the page geometry
\ifGP@geometrypreviouslyloaded
%% Respect their previous choice
\PackageWarning{gridpapers}{'geometry' package was previously loaded, will not use pattern defaults.}
\else
  %% Use the pattern's defaults,
  \expandafter\geometry\expandafter{\GP@patterndefaultgeometry}
  %% And then override with any more specific settings passed by the user
  \expandafter\geometry\expandafter{\GPOpt@geometry}
\fi

%% Determine the correct pattern length
\ifx\GPOpt@patternsize\@empty
  % Use the pattern's preferred length
  \renewcommand{\GP@patternsize}{\GP@patterndefaultsize}
\else
  % Override with the user's choice
  \renewcommand{\GP@patternsize}{\GPOpt@patternsize}
\fi

%% Now that everything has been set up, we can finally define the
%% patterns with the correct lengths.
\GP@declarehexpat
\GP@declaretripat
\GP@declareisopat
\GP@declarelightconepat
\GP@declaredotpat

%% Set the background color.
\AtBeginDocument{\pagecolor{bgcolor}}
%% Actually hook it in!
\AddEverypageHook{%
\GP@patterncode%
}

\endinput
%%
%% End of file `gridpapers.sty'.
