% \iffalse meta comment % File: typogrid.dtx Copyright (C) 2003, 2011 Harald Harders, Rolf Niepraschk % \fi % % \iffalse %<*driver> \listfiles \documentclass[a4paper]{ltxdoc} \usepackage[T1]{fontenc} \IfFileExists{typogrid.sty}{% \usepackage[draft,columns=4,margin=false,headings=true]{typogrid} }{% \GenericWarning{typogrid.dtx}{Package file typogrid.sty not found (Documentation will be messed up!^^J^^A Generate typogrid.sty by (La)TeXing typogrid.ins, process typogrid.dtx again)^^J}\stop } %% \GetFileInfo{typogrid.sty} \title{The \texttt{typogrid} package} \author{% Harald Harders (\texttt{h.harders@tu-bs.de}),\\ Rolf Niepraschk (\texttt{rolf.niepraschk@ptb.de})} \date{File Version \fileversion, \filedate, printed \today} %% \EnableCrossrefs \CodelineIndex \DoNotIndex{\def,\edef,\let,\newcommand,\newenvironment,\newcounter} \DoNotIndex{\setcounter,\space,\if,\else,\fi,\empty,\@empty,\ifx,\fi} \DoNotIndex{\ifnum,\fi,\expandafter,\csname,\endcsname,\the} \DoNotIndex{\MessageBreak,\message,\newlength,\newif,\xdef,\newcount} \DoNotIndex{\begingroup,\endgroup,\,,\@tempcnta,\@tempdima,\advance} \DoNotIndex{\ensuremath,\filedate,\fileversion,\docdate} \DoNotIndex{\mathit,\mathrm,\mathsf,\nprt@tmp,\nprt@tmpnum,\relax} \DoNotIndex{\protect,\renewcommand,\setlength,\settowidth,\stepcounter} \DoNotIndex{\string,\put,\multiput} \CodelineNumbered \RecordChanges \CheckSum{219} \begin{document} \DocInput{typogrid.dtx} \end{document} % % \fi % % \changes{0.21}{2011/12/31}{Update Makefile}% % \changes{0.21}{2011/12/31}{Set date and version explicitly in % \cs{ProvidesPackage}}% % \changes{0.20}{2003/11/09}{Reimplementation with respect to % \texttt{showframe.sty} by Rolf Niepraschk}% % \changes{0.10}{2003/10/30}{First version}% % % \maketitle % \begin{abstract} % \noindent % This package produces a typographic grid on every page of the % document. % That grid consists of vertical lines that devide the text block into % columns. % This may be useful to get the horizontal measures (distances etc.) % into good values. % \end{abstract} % % \tableofcontents % % \section*{Copyright} % Copyright 2003, 2011 Harald Harders, Rolf Niepraschk. % % This program can be redistributed and/or modified under the terms % of the LaTeX Project Public License Distributed from CTAN % archives in directory macros/latex/base/lppl.txt; either % version 1 of the License, or any later version. % % \section{Usage} % % Load the package using the % \begin{quote} % \cs{usepackage}\oarg{options}|{typogrid}| % \end{quote} % command. % Valid options are |final|, |draft|, % |columns=|\meta{value}, |headings=|\meta{true,false}, and % |margin=|\meta{true,false}. % The options |final| and |draft| may be given explicitely or % implicitely from the document-class options. % % When |draft| is given the typographic grid is switched on; if % |final| or none of the above is given it is switched off. % % The |columns| option determines the number of columns printed. % If it is not given, a default of 12 is used. % % If |headings=true| is given, a grid is printed for the head line and % the foot line, too (this is the default, you may also omit it). % If |headings=false| is given, no grid is printed for the headings. % % With |margin=false|, you can switch off printing a frame around the % area for margin notes (default is to print the frame). % % \DescribeMacro{\typogridsetup} % There is a second possibility to change the typographic grid. % You may use the \cs{typogridsetup} command that takes a keyval list % as argument. % The same keywords are allowed as in the \cs{usepackage} line, e.g., % \begin{quote} % |\typogridsetup{columns=4}| % \end{quote} % You may use this command within the text in order to change the grid % at arbitrary position of the document. % The change takes effect on the next page. % % \DescribeMacro{\typogrid} % If you have switched off printing of the grid, you may get a grid % for single pages using % \begin{quote} % |\AddToShipoutPicture*{\typogrid}| % \end{quote} % % The package defines the length \cs{gridwidth} which is as long as % the space between too grid lines. % You may use it to scale pictures to fit to the grid, for instance. % % % \section{Shortcomings} % % \begin{itemize} % \item Calculation of position and size of the headings and the % margin works for standard cases, only. % \item If the text width changes from one page to the next, the grid % width is wrong on the first page after the change. % \end{itemize} % % % \StopEventually{\PrintChanges \PrintIndex} % % % \section{The implementation} % \iffalse %<*package> % \fi % Heading of the package: % \begin{macrocode} \ProvidesPackage{typogrid} [2011/12/31 v0.21 Typographic grid] \RequirePackage{calc} \RequirePackage{keyval} % \end{macrocode} % Introduce the used lengths. % \begin{macrocode} \newlength{\gridwidth}% % \end{macrocode} % Introduce the used counters and set the default number of columns. % \begin{macrocode} \newcount\tpg@blocks% \newcounter{tpg@blocks@new}% \setcounter{tpg@blocks@new}{12}% % \end{macrocode} % \begin{macro}{\typogridsetup} % Declare a command that can be used to change the appearence of the % typographic grid. % The argument takes a list of keyval options. % \begin{macrocode} \newcommand*\typogridsetup[1]{% \expandafter\setkeys\expandafter{typogrid}{#1}} % \end{macrocode} % \end{macro} % Define the key |columns| that takes the number of columns. % \begin{macrocode} \define@key{typogrid}{columns}{% \setcounter{tpg@blocks@new}{#1}% \ifnum\the\c@tpg@blocks@new<1\relax \PackageError{typogrid}{Less than 1 column given}{You have to declare at least 1 column.}% \setcounter{tpg@blocks@new}{1}% \fi } % \end{macrocode} % Define the key |headings| to switch on or off a frame around the % headings. % \begin{macrocode} \newif\iftpg@headings \newif\iftpg@headings@new \tpg@headings@newtrue \define@key{typogrid}{headings}[true]{% \csname tpg@headings@new#1\endcsname } % \end{macrocode} % Define the key |margin| to switch on or off a frame around the % margin. % \begin{macrocode} \newif\iftpg@margin \newif\iftpg@margin@new \tpg@margin@newtrue \define@key{typogrid}{margin}[true]{% \csname tpg@margin@new#1\endcsname } % \end{macrocode} % Package options: % \begin{macrocode} \newif\iftpg@draft \DeclareOption{draft}{\tpg@drafttrue} \DeclareOption{final}{\tpg@draftfalse} \DeclareOption{colorgrid}{\PassOptionsToPackage{\CurrentOption}{eso-pic}} \DeclareOption{grid}{\PassOptionsToPackage{\CurrentOption}{eso-pic}} \DeclareOption*{\expandafter\typogridsetup\expandafter{\CurrentOption}} % \end{macrocode} % Default is no grid. % \begin{macrocode} \ExecuteOptions{final} \ProcessOptions\relax % \end{macrocode} % Load this package after processing the options. % \begin{macrocode} \RequirePackage{eso-pic}[2002/11/16] % \end{macrocode} % \begin{macro}{\typogrid} % Define the command that produces the grid. % \begin{macrocode} \newcommand*\typogrid{% % \end{macrocode} % Switch to black and thin lines. % \begin{macrocode} \begingroup \normalcolor \thinlines % \end{macrocode} % Calculate the number of lines to be printed. % \begin{macrocode} \@tempcnta=\tpg@blocks \advance\@tempcnta by -1% % \end{macrocode} % Print a frame around the text block. % \begin{macrocode} \AtTextLowerLeft{% \put(0,0){% \framebox(\LenToUnit{\textwidth},\LenToUnit{\textheight}){}}% % \end{macrocode} % Print the vertical lines for the grid. % \begin{macrocode} \multiput(\LenToUnit{\gridwidth},0)% (\LenToUnit{\gridwidth},0){\the\@tempcnta}{% \line(0,1){\LenToUnit{\textheight}}}% }% % \end{macrocode} % Print a frame around the head line if wanted. % \begin{macrocode} \iftpg@headings \AtTextUpperLeft{% \put(0,\LenToUnit{\headsep}){% \framebox(\LenToUnit{\textwidth},\LenToUnit{\headheight}){}}% % \end{macrocode} % Print the grid. % \begin{macrocode} \multiput(\LenToUnit{\gridwidth},\LenToUnit{\headsep})% (\LenToUnit{\gridwidth},0){\the\@tempcnta}{% \line(0,1){\LenToUnit{\headheight}}}% }% % \end{macrocode} % Print a line below the foot line if wanted (the height of the foot % line is not available). % \begin{macrocode} \AtTextLowerLeft{% \put(0,\LenToUnit{-\footskip}){% \line(1,0){\LenToUnit{\textwidth}}}% % \end{macrocode} % Print the grid. % \begin{macrocode} \put(0,\LenToUnit{-\footskip}){% \line(0,1){\LenToUnit{\baselineskip}}}% \put(\LenToUnit{\textwidth},\LenToUnit{-\footskip}){% \line(0,1){\LenToUnit{\baselineskip}}}% \multiput(\LenToUnit{\gridwidth},\LenToUnit{-\footskip})% (\LenToUnit{\gridwidth},0){\the\@tempcnta}{% \line(0,1){\LenToUnit{\baselineskip}}}% }% \fi % \end{macrocode} % Print a frame around the margin if wanted. % \begin{macrocode} \iftpg@margin \AtTextLowerLeft{% \@tempdima=\textwidth\advance\@tempdima\marginparsep% \if@twoside% \ifodd\c@page \else \@tempdima=-\marginparsep\advance\@tempdima-\marginparwidth% \fi% \fi% \put(\LenToUnit{\@tempdima},0){% \framebox(\LenToUnit{\marginparwidth},% \LenToUnit{\textheight}){}}% }% \fi \endgroup % \end{macrocode} % Calculate the width of each grid. % Store it globally to be able to use it inside the document. % \begin{macrocode} \setlength\gridwidth{\textwidth/\arabic{tpg@blocks@new}}% \global\gridwidth=\gridwidth \global\tpg@blocks=\arabic{tpg@blocks@new}% \iftpg@headings@new \global\tpg@headingstrue \else \global\tpg@headingsfalse \fi \iftpg@margin@new \global\tpg@margintrue \else \global\tpg@marginfalse \fi } % \end{macrocode} % \end{macro} % Start the grid at \cs{begin\{document\}}. % Do it that late to enable the author to switch between |draft| and % |final| before that position. % \begin{macrocode} \AtBeginDocument{% % \end{macrocode} % Print the grid on any page if wanted. % \begin{macrocode} \iftpg@draft \typeout{Typographic grid switched on}% \AddToShipoutPicture{\typogrid}% \else \typeout{Typographic grid switched off}% \fi % \end{macrocode} % Declare width of grid for first page of document. % \begin{macrocode} \setlength\gridwidth{\textwidth/\arabic{tpg@blocks@new}}% \global\tpg@blocks=\arabic{tpg@blocks@new}% \iftpg@headings@new \tpg@headingstrue \else \tpg@headingsfalse \fi \iftpg@margin@new \tpg@margintrue \else \tpg@marginfalse \fi } % \end{macrocode} % % \iffalse % % \fi % \Finale