summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/gridset
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/gridset
Initial commit
Diffstat (limited to 'macros/latex/contrib/gridset')
-rw-r--r--macros/latex/contrib/gridset/README50
-rw-r--r--macros/latex/contrib/gridset/VERSION1
-rw-r--r--macros/latex/contrib/gridset/gridset.dtx572
-rw-r--r--macros/latex/contrib/gridset/gridset.ins90
-rw-r--r--macros/latex/contrib/gridset/gridset.pdfbin0 -> 122125 bytes
5 files changed, 713 insertions, 0 deletions
diff --git a/macros/latex/contrib/gridset/README b/macros/latex/contrib/gridset/README
new file mode 100644
index 0000000000..29029249a3
--- /dev/null
+++ b/macros/latex/contrib/gridset/README
@@ -0,0 +1,50 @@
+----------------------------------------------------------------------------
+Package gridset
+Copyright (c) Markus Kohm, 2008
+Licence: LPPL
+Version: 2008/11/12 v0.1
+----------------------------------------------------------------------------
+This package provides commands to save positions to and restore positions
+from aux-file. This may be used for grid setting (aka strict in-register
+setting). The package needs pdfTeX at least version 1.40.
+----------------------------------------------------------------------------
+If you have a distribution of gridset with an archive containing the files
+
+ doc/
+ doc/latex/gridset
+ doc/latex/gridset/gridset.pdf
+ source/
+ source/latex/
+ source/latex/gridset/
+ source/latex/gridset/gridset.dtx
+ source/latex/gridset/README
+ tex/
+ tex/latex/
+ tex/latex/gridset
+ tex/latex/gridset/gridset.sty
+ tex/latex/gridset/gridsetexample.tex
+
+you may simply extract this archive at your local texmf tree (local TDS tree)
+that may be e.g. C:\localtexmf or /usr/local/share/texmf or
+/usr/TeX/texmf-local. On some systems you may ask for the local TDS tree
+using: `kpsewhich -var-value=TEXMFLOCAL'. After extraction you should update
+your File Name DataBase e.g. using the MiKTeX Options dialog or texhash.
+
+If the files are at a root directory gridset the distributor has changed my
+original distribution archive and you have to copy the files yourself into
+the appropriate directories at one of your texmf trees and update your File
+Name DataBase.
+
+If you instead of this have only the files gridset.dtx, README, and
+gridset.pdf (optional), you have to call:
+ tex gridset.dtx
+and follow the instructions.
+
+Notes:
+- If you only want to test gridset without installation, you may simply use
+ a copy of gridset.dtx renamed to gridset.sty.
+- README is not a user documentation file, but only needed until
+ installation has been done. Because of this, I declare it to be a
+ source file. Nevertheless distrbutors may install it as an additional
+ documentation file.
+----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/gridset/VERSION b/macros/latex/contrib/gridset/VERSION
new file mode 100644
index 0000000000..f2f17f4db2
--- /dev/null
+++ b/macros/latex/contrib/gridset/VERSION
@@ -0,0 +1 @@
+2008/11/12 v0.1
diff --git a/macros/latex/contrib/gridset/gridset.dtx b/macros/latex/contrib/gridset/gridset.dtx
new file mode 100644
index 0000000000..67adeb198b
--- /dev/null
+++ b/macros/latex/contrib/gridset/gridset.dtx
@@ -0,0 +1,572 @@
+% \CheckSum{416}
+% \iffalse meta-comment
+%
+% gridset.dtx
+%
+%% 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 2003/12/01 or later.
+%%
+%% This work has the LPPL maintenance status "maintained".
+%%
+%% The author of the initial version of these work was
+%% Markus Kohm <komascript@gmx.info>
+%%
+%% This work consists of the files gridset.dtx and README.
+%%
+%% Important Recommendation:
+%% The LPPL requires that distributions of the Work contain all the files of
+%% the Work (see ``Important Recommendations'' at lppl.txt).
+%%
+%
+%<*dtx>
+\def\FmtName{LaTeX2e}
+\ifx\FmtName\fmtname
+ % Give me the package or the documentation
+ \ifnum \catcode`\@=12\relax
+ % Give me the documentation
+ \ProvidesFile{gridset.dtx}
+%</dtx>
+%<*dtx|tex|package|example>
+%<package>\ProvidesPackage{gridset}
+%<tex>\ProvidesFile{gridset.tex}
+%<example>\ProvidesFile{gridsetexample.tex}
+ [2008/11/12 v0.1 grid - aka in-register - setting]
+%</dtx|tex|package|example>
+%<*dtx|tex>
+ \documentclass{ltxdoc}
+ \begin{document}
+ \RecordChanges
+%<*!tex>
+ \GetFileInfo{gridset.dtx}
+%</!tex>
+%<tex> \GetFileInfo{gridset.tex}
+ \DocInput{gridset.dtx}
+%<tex>\end{document}
+%</dtx|tex>
+%<*dtx>
+ \expandafter\expandafter\expandafter\enddocument
+ \fi
+\else
+ % Make the package
+ \def\batchfile{gridset.dtx}
+ \let\batchendinput\endinput
+%</dtx>
+%<*ins>
+%<ins>\def\batchfile{gridset.ins}
+ \input docstrip.tex
+
+ \ifToplevel{%
+ \let\ifalpha\iffalse
+ }
+ \keepsilent
+ \askforoverwritefalse
+ \usedir{tex/latex/gridset}
+ \preamble
+Copyright (c) Markus Kohm 2008
+
+IMPORTANT NOTE:
+
+This is a generated file and you are not allowed to distribute it
+without the source ot the work. See below about more informations
+about the files the work consists of.
+
+\endpreamble
+
+ \generate{%
+ \file{gridset.tex}{\from{gridset.dtx}{tex}}%
+ \file{gridset.ins}{\from{gridset.dtx}{ins}}%
+ \file{gridsetx.sty}{\from{gridset.dtx}{package}}%
+ \file{gridsetexample.tex}{\from{gridset.dtx}{example}}%
+ }
+
+ \ifToplevel{%
+ \Msg{*********************************************************************}
+ \Msg{*}
+ \Msg{* gridset}
+ \Msg{* =======}
+ \Msg{*}
+ \ifalpha% ALPHA
+ \Msg{* THIS IS AN ALPHA VERSION!}
+ \Msg{* DON'T USE IT ONLY TEST IT!}
+ \Msg{*}
+ \fi
+ \Msg{* To finish the installation run}
+ \Msg{* \space\space latex gridset.dtx}
+ \Msg{* or}
+ \Msg{* \space\space pdflatex gridset.dtx}
+ \Msg{* and then copy}
+ \Msg{* \space\space gridset.sty to .../tex/latex/gridset/}
+ \Msg{* \space\space gridset.dvi or gridset.pdf to .../doc/latex/gridset/}
+ \Msg{* \space\space gridset.dtx and README to .../source/latex/gridset/}
+ \Msg{* where .../ is your local TDS tree.}
+ \Msg{* On some systems you'll get the local TDS tree using:}
+ \Msg{* \space\space kpsewhich -var-value=TEXMFLOCAL}
+ \Msg{*}
+ \Msg{*********************************************************************}
+%<*!ins>
+ \csname fi\endcsname\csname fi\endcsname\endinput
+%</!ins>
+ }
+
+%</ins>
+%<*dtx>
+\fi
+\csname batchendinput\endcsname
+%</dtx>
+% \fi ^^A meta-comment
+%
+% \title{Semi-Manual Grid Setting Using \textsf{gridset}\iftrue^^A ALPHA
+% \footnote{This is an alpha version! Don't use it! Only test it! There's no
+% support and everything may change!}\fi
+% }
+% \author{Markus Kohm}
+% \date{\filedate~\fileversion}
+% \maketitle
+% \begin{abstract}
+% Grid setting\,---\,also known as strict in-register setting\,---\,is
+% something, that should be done for a lot of documents but is not easy
+% using \LaTeX{}. Package \textsf{gridset} helps to get the information
+% needed for grid setting. It does not implement auto grid setting, but
+% there is a command \cs{vskipnextgrid}, that moves to the next grid
+% position. This may be enough under some circumstances. In other
+% circumstances it may fail. So \textsf{gridset} is only one more step for
+% grid setting not a complete solution.
+% \end{abstract}
+% \tableofcontents
+% \section{User Manual}
+%
+% \DescribeMacro{\gridinterval}%
+% This macro contains a number without unit! The number is the distance
+% between two grid lines in unit `scale points' (sp). You may set it so
+% another value using, e.g.
+% \begin{flushleft}
+% |\newlength{\|\meta{name of your length}|}|\\
+% |\setlength{\|\meta{name of your length}|}{|\meta{new length value}|}|\\
+% |\newcounter{\|\meta{name of your counter}|}|\\
+% |\setcounter{\|\meta{name of your counter}|}{\|\meta{name of your
+% length}|}|\\
+% |\edef\gridinterval{\|\meta{name of your length}|}|\\
+% \end{flushleft}
+%
+% \DescribeMacro{\gridbase}%
+% This macro contains an integer number, that represents the y-coordinate of
+% the upper start of the grid. If you want to change it, just save a position
+% and \cs{edef} the \cs{gridbase} to the y-pos of that position.
+%
+% Most time you don't need to change \cs{gridinterval} and \cs{gridposition},
+% because they are initialized to a base line grid at start of first page.
+% Because of this, it doesn't matter, that changing them is not really user
+% friendly.
+%
+% \DescribeMacro{\savepos}%
+% \cs{savepos}\marg{unique name} saves informations about the current position
+% to the \texttt{aux}-file. These informations are read at next \LaTeX{} run
+% and may be used (see \cs{the\dots} commands below) then. The \meta{unique
+% name} has to be a position name, that is unique for all saved position
+% informations of the current document.
+%
+% \DescribeMacro{\vskipnextgrid}
+% This command moves to the next grid position. To achieve this, a position
+% information is saved at this and used at next \LaTeX{} run. The used name
+% of the position information is \texttt{vb!\meta{number of
+% skip}}. \meta{number of skip} is the number of the current
+% \cs{vskipnextgrid} usage. Counter \texttt{gridcnt} is used to number the
+% usage of \cs{vskipnextgrid}.
+%
+% \DescribeMacro{\thegridinfo}
+% \cs{thegridinfo}\marg{name} outputs
+% \begin{itemize}
+% \item arabic page number of the named position,
+% \item grid base, that was valid saving the information of the named
+% position,
+% \item grid interval, that was valid saving the information of the named
+% position,
+% \item x-coordinate of the named position,
+% \item y-coordinate of the named position.
+% \end{itemize}
+% The coordinates and intervals are numbers without units. The unit is `scale
+% points' (sp).
+%
+% \DescribeMacro{\theposinfo}
+% \cs{theposinfo}\marg{name} outputs
+% \begin{itemize}
+% \item y-coordinate of the named position,
+% \item grid line number (first is 0) of the next grid position,
+% \item offset of the next grid position from grid base,
+% \item distance to the next grid position.
+% \end{itemize}
+% The coordinates, offsets and distances are numbers without units. The unit
+% is `scale points' (sp).
+%
+% \DescribeMacro{\theypos}
+% \cs{theypos}\marg{name} outputs the y-coordinate of the named position.
+%
+%
+% \StopEventually{\PrintIndex\PrintChanges}
+%
+% \section{Implementation}
+%
+% \iffalse meta-comment
+%<*package>
+% \fi ^^A meta-comment
+% \begin{macrocode}
+%<package>\ProvidesPackage{gridset}[\fileversion\space (package)]
+% \end{macrocode}
+%
+% \begin{macro}{\gridbase}
+% \begin{macro}{\gridinterval}
+% These contain the grid information. \cs{gridbase} is a integer number
+% representing the absolute y coordinate of the upper end of the
+% grid relative to the same reference point \cs{pdfsavepos}
+% uses. \cs{gridinterval} is a integer number representing the distance of
+% two grid lines. The unit is `scaled point' (sp) both time.
+% \begin{macrocode}
+\newcommand*{\gridbase}{}
+\newcommand*{\gridinterval}{}
+% \end{macrocode}
+% \cs{gridbase} and \cs{gridinterval} need to be initialized at the start of
+% the first page (fixme: shouldn't this be done at the start of every
+% page?). We use this occasion to also initialize \cs{pdfpageheight} and
+% \cs{pdfpagewidth} if this hasn't been done already.
+% \begin{macrocode}
+\AtBeginDocument{%
+ \ifdim\pdfpageheight=\z@
+ \pdfpageheight=\pageheight
+ \fi
+ \ifdim\pdfpagewidth=\z@
+ \pdfpagewidth=\pagewidth
+ \fi
+ \begingroup
+ \@tempdima=\dimexpr \pdfpageheight - \topmargin - 1in
+ - \headheight - \headsep
+ - \topskip \relax
+ \@tempcnta=\@tempdima
+ \xdef\gridbase{\the\@tempcnta}%
+ \@tempcnta=\baselineskip
+ \xdef\gridinterval{\the\@tempcnta}%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\savepos}
+% Save current position on the page to the \texttt{aux}-file. The argument
+% is a unique name for the position. The saved informations are:
+% \begin{itemize}
+% \item the name of the position,
+% \item the arabic page number of the page with the position,
+% \item the grid base, that was valid for this position,
+% \item the grid interval, that was valid for this position,
+% \item the x-coordinate of the absolute position,
+% \item the y-coordinate of the absolute position.
+% \end{itemize}
+% \begin{macrocode}
+\newcommand*{\savepos}[1]{%
+ \begingroup
+ \pdfsavepos
+ \protected@write\@auxout{}{%
+ \protect\newpos{#1}{\the\count\z@}{\gridbase}{\gridinterval}{%
+ \noexpand\number\pdflastxpos
+ }{%
+ \noexpand\number\pdflastypos
+ }%
+ }%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\newpos}
+% This is the command, that has been written to the \texttt{aux}-file.
+% Reading the \texttt{aux}-file it defines several position dependant macros
+% to store the position information. Reading the \texttt{aux}-file while
+% \cs{begin{document}} a double definition test is done. Reading the
+% \texttt{aux}-file while \cs{end{document}} a test is done, if the position
+% has been changed and notes the user about needed additional \LaTeX{} runs.
+% (fixme: shouldn't the test be done with the x- and the y-coordinate
+% instead of the vskip only?)
+% The defined macros are:
+% \begin{description}
+% \item[\cs{pos@\meta{position name}@page}] the arabic page number of the
+% position
+% \item[\cs{pos@\meta{position name}@base}] the valid grid base while
+% saving the position
+% \item[\cs{pos@\meta{position name}@interval}] the valid grid interval
+% while saving the position
+% \item[\cs{pos@\meta{position name}@x}] the x-coordinate of the position
+% \item[\cs{pos@\meta{position name}@y}] the y-coordinate of the postion
+% \item[\cs{pos@\meta{position name}@line}] the number of the next grid line
+% for the position (first grid line has number 0)
+% \item[\cs{pos@\meta{position name}@offset}] distance of the next grid line
+% from the grid base
+% \item[\cs{pos@\meta{position name}@vskip}] distance to the next grid line
+% for the position
+% \end{description}
+% All values are integers. The unit to all values is `scaled points'
+% (sp). See \cs{pdfsavepos} at the pdf\TeX{} user manual for more
+% information.
+% \begin{macrocode}
+\newcommand*{\newpos}[6]{%
+ \grid@unique@test{#1}{#2}%
+ \expandafter\global\@namedef{pos@#1@page}{#2}%
+ \expandafter\global\@namedef{pos@#1@base}{#3}%
+ \expandafter\global\@namedef{pos@#1@interval}{#4}%
+ \expandafter\global\@namedef{pos@#1@x}{#5}%
+ \expandafter\global\@namedef{pos@#1@y}{#6}%
+ \begingroup
+ \@tempcnta=\numexpr \@nameuse{pos@#1@base} - \@nameuse{pos@#1@y}\relax
+ \@tempcnta=\numexpr \@tempcnta + \@nameuse{pos@#1@interval} - 1\relax
+ \divide\@tempcnta by\@nameuse{pos@#1@interval}\relax
+ \expandafter\xdef\csname pos@#1@line\endcsname{\the\@tempcnta}%
+ \@tempcnta=\numexpr \@tempcnta * \@nameuse{pos@#1@interval}\relax
+ \expandafter\xdef\csname pos@#1@offset\endcsname{\the\@tempcnta}%
+ \@tempcnta=\numexpr \@nameuse{pos@#1@y}
+ - ( \@nameuse{pos@#1@base} - \@tempcnta )\relax
+ \expandafter\let\expandafter\@tempa\csname pos@#1@vskip\endcsname%
+ \expandafter\xdef\csname pos@#1@vskip\endcsname{\the\@tempcnta}%
+ \expandafter\ifx\csname pos@#1@vskip\endcsname\@tempa\else
+ \grid@ReRunMessage
+ \fi
+ \endgroup
+}
+% \end{macrocode}
+% \begin{macro}{\grid@unique@test}
+% A very simple test to warn if a position name isn't unique.
+% \begin{macrocode}
+\newcommand*{\grid@unique@test}[2]{%
+ \expandafter\ifx\csname pos@#1@page\endcsname\relax\else
+ \PackageError{gridset}{position `#1' is not unique.\@gobble}{%
+ You have used the position name `#1' you are using on page
+ `#2'\MessageBreak
+ already on page `\csname pos@#1@page\endcsname'.\MessageBreak
+ You should stop processing, remove the aux-files and correct the
+ names.\MessageBreak
+ If you'd continue, this will result in grid position
+ failures,\MessageBreak
+ that won't be reported!}%
+ \fi
+}
+\AtBeginDocument{%
+ \global\let\grid@unique@test\@gobble
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\grid@ReRunMessage}
+% The change test will be done for each \cs{newpos} but one user information
+% at the end of the document should be enough. So we use a message macro,
+% that destroys itself after first usage.
+% \begin{macrocode}
+\newcommand*\grid@ReRunMessage{}
+\AtBeginDocument{%
+ \renewcommand*\grid@ReRunMessage{%
+ \PackageWarningNoLine{gridset}{Grid position labels may have
+ changed.\MessageBreak
+ Rerun to get grid positions right}%
+ \global\let\grid@ReRunMessage\relax
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\vskipnextgrid}
+% \begin{macro}{gridcnt}
+% Move to next grid position. The counter \texttt{gridcnt} is used to give
+% every move to position a unique position name. The names are
+% `\texttt{vp!\meta{number of the move to position}}'. You may use this to
+% get informations e.g. about the last move to position.
+% \begin{macrocode}
+\newcounter{gridcnt}
+\newcommand*{\vskipnextgrid}{%
+ \begingroup
+ \stepcounter{gridcnt}\edef\@tempa{vp!\thegridcnt}%
+ \ifvmode
+% \end{macrocode}
+% \cs{pdfsavepos} in vertical mode is a problem, because the base line
+% alignment will be done at least at paragraph breaking. Because of this,
+% we have to leave the vertical mode and do it then. But remark: If you
+% change the base line skip e.g. changing the font size, the next line would
+% not be grid aligned!
+% \begin{macrocode}
+ \leavevmode\savepos{\@tempa}%
+ \expandafter\ifx\csname pos@\@tempa @vskip\endcsname\relax
+ \else
+ \expandafter\ifnum \csname pos@\@tempa @vskip\endcsname =\z@\else
+ \PackageInfo{gridset}{%
+ vmode \string\vskip\csname pos@\@tempa @vskip\endcsname sp%
+ }%
+ \vskip -\parskip\vskip -\baselineskip
+ \expandafter\vskip\csname pos@\@tempa @vskip\endcsname sp\relax
+ \fi
+ \fi
+ \else
+% \end{macrocode}
+% \cs{pdfsavepos} in horizontal mode is a problem too, because we have to
+% enter the vertical mode to do vertical skips. Because of this, the remark
+% is the same like the vertical mode remark.
+% \begin{macrocode}
+ \parskip=\z@
+ \savepos{vp!\thegridcnt}%
+ \expandafter\ifx\csname pos@\@tempa @vskip\endcsname\relax
+ \else
+ \expandafter\ifnum \csname pos@\@tempa @vskip\endcsname =\z@\else
+ \PackageInfo{gridset}{%
+ hmode \string\vskip\csname pos@\@tempa @vskip\endcsname sp%
+ }%
+ \vskip -\baselineskip
+ \expandafter\vskip\csname pos@\@tempa @vskip\endcsname sp\relax
+ \if@twoside
+ \expandafter\ifodd\csname pos@\@tempa @page\endcsname\relax
+ \leavevmode\hskip \dimexpr - 1in - \oddsidemargin - \parindent
+ + \csname pos@\@tempa @x\endcsname sp\relax
+ \else
+ \leavevmode\hskip \dimexpr - 1in - \evensidemargin - \parindent
+ + \csname pos@\@tempa @x\endcsname sp\relax
+ \fi
+ \else
+ \leavevmode\hskip \dimexpr - 1in - \oddsidemargin - \parindent
+ + \csname pos@\@tempa @x\endcsname sp\relax
+ \fi
+ \fi
+ \fi
+ \fi
+ \endgroup
+}
+% \end{macrocode}
+% (fixme: A better solution would be to first move and then set the
+% position. But that solution needs some more tests and maybe some more
+% ideas, because after moving the position is on grid and so the saved x-pos
+% would be on grid.)
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\thegridinfo}
+% \begin{macro}{\theposinfo}
+% \begin{macro}{\theypos}
+% Some informations about the grid (valid for a position) or the position.
+% \begin{macrocode}
+\newcommand*{\thegridinfo}[1]{%
+ page=\@nameuse{pos@#1@page},
+ base=\@nameuse{pos@#1@base},
+ interval=\@nameuse{pos@#1@interval},
+ x=\@nameuse{pos@#1@x},
+ y=\@nameuse{pos@#1@y}%
+}
+\newcommand*{\theposinfo}[1]{%
+ y=\@nameuse{pos@#1@y},
+ gridline=\@nameuse{pos@#1@line},
+ gridoffset=\@nameuse{pos@#1@offset},
+ movedown=\@nameuse{pos@#1@vskip}%
+}
+\newcommand*{\theypos}[1]{\@nameuse{pos@#1@y}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \iffalse meta-comment
+%<*FALSE>
+\csname endinput\endcsname
+%</FALSE>
+%</package>
+% \fi ^^A meta-comment
+%
+% \section{Example}
+%
+% You may try the following example document. You have to do several \LaTeX{}
+% runs until no new rerun warning occurs.
+% \iffalse meta-comment
+%<*example>
+% \fi ^^A meta-comment
+% \begin{macrocode}
+\documentclass[a4paper,12pt]{article}
+\usepackage{gridset}
+\usepackage{blindtext}
+\raggedbottom
+
+\pagestyle{myheadings}
+
+\begin{document}
+\markright{gridbase=\gridbase, gridinterval=\gridinterval\ without move down}%
+\newcounter{Zeile}%
+\makeatletter
+\@whilenum \value{Zeile}<40\do {%
+ \stepcounter{Zeile}%
+ \theZeile. Zeile:
+ \savepos{\thepage.\theZeile}\thegridinfo{\thepage.\theZeile}\par
+}%
+\makeatother
+\clearpage
+\setcounter{Zeile}{0}
+\makeatletter
+\@whilenum \value{Zeile}<20\do {%
+ \stepcounter{Zeile}%
+ \theZeile. Zeile:
+ \savepos{\thepage.\theZeile}\theposinfo{\thepage.\theZeile}\par
+}%
+\makeatother
+\clearpage
+\parskip=.5\baselineskip
+\setcounter{Zeile}{0}
+\makeatletter
+\@whilenum \value{Zeile}<20\do {%
+ \stepcounter{Zeile}%
+ \theZeile. Zeile:
+ \savepos{\thepage.\theZeile}\theposinfo{\thepage.\theZeile}\par
+}%
+\makeatother
+\clearpage
+\markright{gridbase=\gridbase, gridinterval=\gridinterval\ with real move down
+at vmode}%
+\parskip=.5\baselineskip
+\setcounter{Zeile}{0}
+\makeatletter
+\@whilenum \value{Zeile}<25\do {%
+ \stepcounter{Zeile}%
+ \vskipnextgrid\theZeile. Zeile: \theposinfo{vp!\thegridcnt}\par
+}%
+\makeatother
+\clearpage
+\markright{gridbase=\gridbase, gridinterval=\gridinterval\ with real move down
+at hmode}%
+\parskip=.5\baselineskip
+\setcounter{Zeile}{0}
+\makeatletter
+\@whilenum \value{Zeile}<25\do {%
+ \stepcounter{Zeile}%
+ \theZeile. Zeile: \vskipnextgrid\theposinfo{vp!\thegridcnt}\par
+}%
+\makeatother
+\clearpage
+\parskip=0pt
+\blindtext
+\begin{itemize}
+\item Test
+\item Test
+\end{itemize}
+\vskipnextgrid\theposinfo{vp!\thegridcnt}\blindtext
+
+\end{document}
+% \end{macrocode}
+% \iffalse meta-comment
+%</example>
+% \fi ^^A meta-comment
+%
+% \Finale
+%
+\endinput
+%
+% end of `gridset.dtx'
+%
+% \iffalse meta-comment
+%%% Local Variables:
+%%% mode: docTeX
+%%% TeX-master: t
+%%% End:
+% \fi ^^A meta-comment
diff --git a/macros/latex/contrib/gridset/gridset.ins b/macros/latex/contrib/gridset/gridset.ins
new file mode 100644
index 0000000000..8e0abd49d9
--- /dev/null
+++ b/macros/latex/contrib/gridset/gridset.ins
@@ -0,0 +1,90 @@
+%%
+%% This is file `gridset.ins',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% gridset.dtx (with options: `ins')
+%% Copyright (c) Markus Kohm 2008
+%%
+%% IMPORTANT NOTE:
+%%
+%% This is a generated file and you are not allowed to distribute it
+%% without the source ot the work. See below about more informations
+%% about the files the work consists of.
+%%
+%% 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 2003/12/01 or later.
+%%
+%% This work has the LPPL maintenance status "maintained".
+%%
+%% The author of the initial version of these work was
+%% Markus Kohm <komascript@gmx.info>
+%%
+%% This work consists of the files gridset.dtx and README.
+%%
+%% Important Recommendation:
+%% The LPPL requires that distributions of the Work contain all the files of
+%% the Work (see ``Important Recommendations'' at lppl.txt).
+%%
+\def\batchfile{gridset.ins}
+ \input docstrip.tex
+
+ \ifToplevel{%
+ \let\ifalpha\iffalse
+ }
+ \keepsilent
+ \askforoverwritefalse
+ \usedir{tex/latex/gridset}
+ \preamble
+Copyright (c) Markus Kohm 2008
+
+IMPORTANT NOTE:
+
+This is a generated file and you are not allowed to distribute it
+without the source ot the work. See below about more informations
+about the files the work consists of.
+
+\endpreamble
+
+ \generate{%
+ \file{gridset.tex}{\from{gridset.dtx}{tex}}%
+ \file{gridset.ins}{\from{gridset.dtx}{ins}}%
+ \file{gridsetx.sty}{\from{gridset.dtx}{package}}%
+ \file{gridsetexample.tex}{\from{gridset.dtx}{example}}%
+ }
+
+ \ifToplevel{%
+ \Msg{*********************************************************************}
+ \Msg{*}
+ \Msg{* gridset}
+ \Msg{* =======}
+ \Msg{*}
+ \ifalpha% ALPHA
+ \Msg{* THIS IS AN ALPHA VERSION!}
+ \Msg{* DON'T USE IT ONLY TEST IT!}
+ \Msg{*}
+ \fi
+ \Msg{* To finish the installation run}
+ \Msg{* \space\space latex gridset.dtx}
+ \Msg{* or}
+ \Msg{* \space\space pdflatex gridset.dtx}
+ \Msg{* and then copy}
+ \Msg{* \space\space gridset.sty to .../tex/latex/gridset/}
+ \Msg{* \space\space gridset.dvi or gridset.pdf to .../doc/latex/gridset/}
+ \Msg{* \space\space gridset.dtx and README to .../source/latex/gridset/}
+ \Msg{* where .../ is your local TDS tree.}
+ \Msg{* On some systems you'll get the local TDS tree using:}
+ \Msg{* \space\space kpsewhich -var-value=TEXMFLOCAL}
+ \Msg{*}
+ \Msg{*********************************************************************}
+ }
+
+\endinput
+%%
+%% End of file `gridset.ins'.
diff --git a/macros/latex/contrib/gridset/gridset.pdf b/macros/latex/contrib/gridset/gridset.pdf
new file mode 100644
index 0000000000..dbe5ddfbdb
--- /dev/null
+++ b/macros/latex/contrib/gridset/gridset.pdf
Binary files differ