% \iffalse meta-comment
%
% Copyright (C) 2013 by Scott Lawrence <bytbox@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.
%
% This work has the LPPL maintenance status `maintained'.
%
% The Current Maintainer of this work is Scott Lawrence.
%
% This work consists of the files vgrid.dtx and vgrid.ins
% and the derived filebase vgrid.sty.
%
% \fi
%
% \iffalse
%<*driver>
\ProvidesFile{vgrid.dtx}
%</driver>
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{vgrid}
%<*package>
    [2013/12/20 0.1 Overlays a vertical grid]
%</package>
%
%<*driver>
\documentclass{ltxdoc}
\EnableCrossrefs
\CodelineIndex
\RecordChanges
\usepackage{vgrid}
\begin{document}
  \DocInput{vgrid.dtx}
  \PrintChanges
  \PrintIndex
\end{document}
%</driver>
% \fi
%
% \CheckSum{72}
%
% \CharacterTable
%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%   Digits        \0\1\2\3\4\5\6\7\8\9
%   Exclamation   \!     Double quote  \"     Hash (number) \#
%   Dollar        \$     Percent       \%     Ampersand     \&
%   Acute accent  \'     Left paren    \(     Right paren   \)
%   Asterisk      \*     Plus          \+     Comma         \,
%   Minus         \-     Point         \.     Solidus       \/
%   Colon         \:     Semicolon     \;     Less than     \<
%   Equals        \=     Greater than  \>     Question mark \?
%   Commercial at \@     Left bracket  \[     Backslash     \\
%   Right bracket \]     Circumflex    \^     Underscore    \_
%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%   Right brace   \}     Tilde         \~}
%
%
% \changes{1}{2013/12/20}{Converted to DTX file}
%
% \DoNotIndex{\newcommand,\newenvironment}
%
% \GetFileInfo{vgrid.dtx}
% \title{The \textsf{vgrid} package}
% \author{Scott Lawrence\\ \texttt{bytbox@gmail.com}}
% \date{\fileversion~from \filedate}
%
% \maketitle
%
% \section{Introduction}
%
% The \texttt{vgrid} package overlays a grid intended to help the author
% enforce vertical rhythm on each page.  The spacing of the grid is taken from
% \verb|\baselineskip|, with the first line at the top of the text area.
%
% Note that \texttt{vgrid} itself does not change any spacing -- other packages
% (or careful font settings) must be used to achieve vertical rhythm. This document, for example, can be clearly seen to not have vertical rhythm.
%
% \section{Usage}
%
% To add a grid to each page, just place \verb|\usepackage{vgrid}| in your
% document's preamble. As of this version, there is no fine-grained control to
% allow grids to be excluded from certain pages. The grid will use
% \verb|\baselineskip| as the line height.
%

%
% \StopEventually{}
%
% \section{Implementation}
%
% \iffalse
%<*package>
% \fi
%
%    \begin{macrocode}
\RequirePackage{everypage}
\RequirePackage{tikz}
\RequirePackage{ifoddpage}
\newlength\vgrid@l \setlength\vgrid@l{\baselineskip}
\newlength\vgrid@y
\AddEverypageHook{
%    \end{macrocode}
% For every page, we need to re-calculate the coordinates of the grid.
%    \begin{macrocode}
	\def\@csm{\ifoddpageoroneside\oddsidemargin\else\evensidemargin\fi}
	\def\@left{\hoffset+\@csm}
	\def\@right{\@left+\textwidth}
	\def\@top{-\voffset-\topmargin-\headheight-\headsep}
	\def\@gridline{\draw [thin, gray]}
	\begin{tikzpicture}[overlay]
		\def\y{\@top-\vgrid@y}
		\@gridline (\@left, \@top) -- (\@left, \@top-\textheight);
		\@gridline (\@right, \@top) -- (\@right, \@top-\textheight);
		\setlength\vgrid@y{0pt}
		\@whiledim\vgrid@y<\textheight\do{
			\@gridline (\@left, \y) -- (\@right, \y);
			\addtolength{\vgrid@y}{\vgrid@l}
		}
		\@gridline (\@left, \y) -- (\@right, \y);
	\end{tikzpicture}
}
%    \end{macrocode}

%
% \iffalse
%</package>
% \fi
%
% \Finale
\endinput