%%^^A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\iffalse
%% Purpose:
%%      A package for typesetting Information Maps.
%%
%% Documentation:
%%      The documentation  can be generated  from  the  original  file
%%      limap.dtx with the doc class/package. LaTeX the file limap.tex
%%      to get the full documentation in pdf format.
%%
%% Author: Gerd Neugebauer
%%         Brechklinge 10
%%         69256 Mauer (Germany)
%% Mail:   gene@gerd-neugebauer.de
%%
%% Copyright (C) 1999-2026 Gerd Neugebauer
%%
%% limap.dtx may be  distributed under the terms of  the LaTeX Project
%% Public License version  1.3c, as described in lppl.txt.
%%
%% This class is still under development and  may be replaced with a
%% new version which provides an enhanced functionality.
%%
%\fi
%^^A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% \title{\texttt{limap}: A \LaTeX\ Package and Class for Typesetting Information Maps} 
% \author{Gerd Neugebauer\\\normalsize
%	  Net: \texttt{\href{mailto:gene@gerd-neugebauer.de}{gene@gerd-neugebauer.de}}}
% \hypersetup{
%  pdftitle    = {limap},
%  pdfsubject  = {A LaTeX Package for Typesetting Information Maps},
%  pdfauthor   = {Gerd Neugebauer},
% }
%
% \date{This file documents \filename\ version \fileversion\ as of
% \filedate.\\ Documentation date: \docdate}
%
% \maketitle
%
%^^A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \changes{1.0}{2000/03/01}{First public release.}
% \changes{2.0}{2016/04/16}{Fix in |MapTableofContents|: Trailing percent made unnecessary}
% \changes{2.0}{2016/04/16}{Extensions integrated into the package.
%                           Documentation improved.}
% \changes{2.0}{2016/04/14}{Renamed |MapTOCemph| to |MapTOCheadfont|.}
% \changes{2.0}{2016/04/15}{Renamed |MapTitleSize| to |MapTitleFont|.}
% \changes{2.0}{2016/04/16}{Renamed |MapTitlefraction| to |MapTitleFraction|.}
% \changes{2.0}{2016/04/16}{Environment |MapTabular| added}
% \changes{2.0}{2016/04/16}{Renamed |MapTextfraction| to |MapTextFraction|.}
% \changes{2.0}{2016/04/16}{Parameter |MapBlockLabelFont| introduced.}
% \changes{2.0}{2016/04/16}{Parameter |MapBlockLabelFont| introduced.}
% \changes{2.0}{2016/04/17}{Renamed |MapTitleContinuedSize| to |MapTitleContinuedFont|.} 
% \changes{2.0}{2016/05/22}{TOC Re-engineered to allow
%        interaction with hyperref.}
% \changes{2.0}{2016/05/22}{Option |nolines| added.}
% \changes{2.1}{2016/05/24}{|WideBlock| fixed and samples added.}
% \changes{2.1}{2016/05/26}{|MapTabularFraction| added.}
% \changes{2.2}{2026/05/17}{Contact updated.}
% \changes{2.3}{2026/05/20}{Repository migrated.}
%^^A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% \DoNotIndex{\ ,\",\',\.,\[,\\,\],\^,\`,\~,\@,\@author,\@auxout}
% \DoNotIndex{\@currentlabel,\@currenvir,\@date}
% \DoNotIndex{\@dottedtocline,\@gobble,\@gobbletwo,\@highpenalty}
% \DoNotIndex{\@ifnextchar,\@ifstar,\@ifundefined}
% \DoNotIndex{\@namedef,\@nameuse,\@pnumwidth,\@startsection,\@starttoc}
% \DoNotIndex{\@tempdima,\@title,\@thefnmark,\@undefined}
% \DoNotIndex{\@ixpt,\@vpt,\@vipt,\@viipt,\@viiipt}
% \DoNotIndex{\@xpt,\@xipt,\@xiipt,\@xivpt,\@xvii,\@xxpt,\@xxvpt}
% \DoNotIndex{\AA,\AE,\CodelineIndex,\CurrentOption}
% \DoNotIndex{\DescribeEnv,\DescribeMacro,\DeclareOption,\DeleteShortVerb,\DocInput}
% \DoNotIndex{\EnableCrossrefs,\H,\InputIfFileExists}
% \DoNotIndex{\L,\LARGE,\LaTeX,\Large}
% \DoNotIndex{\LoadClass,\NeedsTeXFormat,\O,\OE,\OptionNotUsed}
% \DoNotIndex{\PackageError,\PackageWarning,\PassOptionsToClass}
% \DoNotIndex{\ProcessOptions,\ProvidesClass,\PrintDescribeEnv,\PrintDescribeMacro}
% \DoNotIndex{\PrintChanges,\PrintIndex}
% \DoNotIndex{\ProvidesPackage,\R,\RecordChanges,\RequirePackage,\TeX}
% \DoNotIndex{\SpecialEnvIndex,\SpecialUsageIndex}
% \DoNotIndex{\aa,\addcontentsline,\addpenalty,\addtolength,\advance}
% \DoNotIndex{\addvspace,\ae,\ast,\arabic}
% \DoNotIndex{\b,\baselineskip,\begin,\begingroup,\bfseries,\bgroup}
% \DoNotIndex{\bigskip,\bottomrule,\box,\bullet}
% \DoNotIndex{\c,\cal,\catcode,\centering,\chapter,\chardef,\circ}
% \DoNotIndex{\cfoot,\clearpage,\closein,\closeout}
% \DoNotIndex{\clubpenalty,\color,\csname}
% \DoNotIndex{\d,\def,\dimen,\diamond,\divide,\documentclass,\dots,\dp}
% \DoNotIndex{\definecolor}
% \DoNotIndex{\edef,\egroup,\else,\em,\emph,\empty,\end,\endcsname}
% \DoNotIndex{\endgroup,\endinput,\endlist}
% \DoNotIndex{\expandafter,\fbox,\fi,\footnotesize,\footskip,\framebox}
% \DoNotIndex{\frenchspacing,\futurelet,\gdef,\global,\gobble}
% \DoNotIndex{\hangafter,\hangindent,\hbox,\headheight,\headsep,\hfil}
% \DoNotIndex{\hfill,\hrule,\hskip,\hspace,\hss,\ht,\huge,\hypersetup}
% \DoNotIndex{\ifcat,\ifeof}
% \DoNotIndex{\ifdim,\ifnum,\iftrue,\ifx,\ignorespaces,\immediate,\index}
% \DoNotIndex{\input,\it}
% \DoNotIndex{\itemindent,\itemsep,\jobname,\kern,\l,\labelsep,\labelwidth}
% \DoNotIndex{\large,\leavevmode,\leftmark,\leftskip,\let,\lhead,\list}
% \DoNotIndex{\llap,\long,\lower}
% \DoNotIndex{\makeatletter,\makeatother}
% \DoNotIndex{\m@th,\makebox,\magstep,\makeindex,\markboth,\mbox,\medskip}
% \DoNotIndex{\marginpar,\midrule,\multicolumn}
% \DoNotIndex{\newblock,\newcommand,\newcount,\newenvironment,\newfont}
% \DoNotIndex{\newif,\newlength,\newline,\newpage,\newread,\newwrite}
% \DoNotIndex{\nobreak,\noindent,\normalsize,\null}
% \DoNotIndex{\o,\oddsidemargin,\oe,\openin,\openout,\or}
% \DoNotIndex{\pagestyle,\par,\paragraph,\parbox}
% \DoNotIndex{\parfillskip,\parindent,\parsep,\parskip,\part,\partopsep}
% \DoNotIndex{\penalty,\providecommand,\quad}
% \DoNotIndex{\raggedbottom,\raggedright,\raise,\raisebox,\refstepcounter}
% \DoNotIndex{\relax,\renewcommand,\renewenvironment,\rhead}
% \DoNotIndex{\rightskip,\rm,\rule}
% \DoNotIndex{\sbox,\sc,\section,\setcounter,\setlength,\settowidth}
% \DoNotIndex{\sf,\sfcode,\sl}
% \DoNotIndex{\sloppy,\small,\space,\ss,\string}
% \DoNotIndex{\setsansfont,\setmonofont,\setmainfont}
% \DoNotIndex{\subparagraph,\subsubparagraph}
% \DoNotIndex{\subsection,\subsubsection,\symbol}
% \DoNotIndex{\t,\tenex,\textheight,\textit,\textsf,\textstyle,\textwidth}
% \DoNotIndex{\textrm,\the,\thepage,\thispagestyle,\textregistered}
% \DoNotIndex{\topmargin,\toprule,\topsep,\tt,\typeout}
% \DoNotIndex{\u,\unitlength,\usecounter,\usepackage,\usetikzlibrary}
% \DoNotIndex{\v,\varepsilon,\vbox}
% \DoNotIndex{\vfill,\vsize,\voffset,\vskip,\vspace,\vss}
% \DoNotIndex{\wd,\widowpenalty,\write,\xdef,\z@,\(,\)}
%
%^^A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%    \CheckSum{813}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%  \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         \~}
%%
%^^A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%    \begin{Abstract}
%      The Information Mapping\R method provides a methodology for
%      structuring and presenting information. It claims to be useful
%      for readers who are more concerned about finding the right
%      information than reading the document as a whole. Thus short,
%      highly structured, and context free pieces of information are
%      used.
%
%      \texttt{limap} provides a \LaTeX{} package and a \LaTeX{}
%      class. The package contains definitions to typeset maps and
%      blocks according to the Information Mapping\R method. The class
%      provides all definitions to typeset a whole document.
%    \end{Abstract}
%
%    \newpage
%    \begin{Map}{}
%      \vspace*{-6ex}%
%      \Block{Copyright}%
%      Copyright \textcopyright\ 1999–2026
%      \href{http://www.gerd-neugebauer.de}{Gerd Neugebauer}
%
%      \Block{Licenses}%
%      The source files of |limap| and the derived files
%      \begin{itemize}\itemsep=0pt
%      \item |limap.dtx|
%      \item |limap.ins|
%      \item |README.md|
%      \item |Makefile|
%      \item |limap.sty|
%      \item |limap.cls|
%      \item |limap.pdf|
%      \end{itemize}
%      may be distributed under the terms of the \LaTeX\ Project
%      Public License version 1.3c, as described in the file
%      |lppl.txt|.
%
%      The documentation can be used under the
%      \href{http://creativecommons.org/licenses/by-sa/4.0/}{Creative
%      Commons Attributation-Share Alike 4.0 License} (CC BY-SA 4.0).
%
%      The files in the |samples| directory are distributed unter
%      \href{http://creativecommons/zero/1.0}{Creative Commons CC0 
%      1.0 Universal}.
%
%      \Block{Net}%
%      The sources of |limap| are hosted on Sourceforge as part of the
%      project \texttt{gene-tex-lib}. The sources can be found under
%      the URL
%      \url{https://sourceforge.net/p/gene-tex-lib/svn/HEAD/tree/limap/}.
%      
%      A bundled distribution can be obtained via CTAN under the
%      package URL
%      \url{https://www.ctan.org/pkg/limap} or from the package's home
%      page under \url{http://www.gerd-neugebauer.de/sowftware/TeX/limap}.
%
%      \Block{Contact}%
%      The author can be contacted under the following coordinates:
%
%      \begin{minipage}{.6\linewidth}\parindent=2em
%        Gerd Neugebauer	\medskip\par
%        Brechklinge 10 	\par
%        69256 Mauer		\par
%        Germany		\medskip\par
%        \href{mailto:gene@gerd-neugebauer.de}{gene@gerd-neugebauer.de}
%      \end{minipage}
%    \end{Map}
%    \newpage
%    \tableofcontents
%    \newpage
%    
%    
%    \begin{Map}{Motivation}
%    
%      \Block{Methodology}%
%      The information mapping\R method provides a methodology to
%      structure information in a special way. The aim is to help a
%      reader who uses the document to search for relevant information
%      instead of consuming it from start to end. The information
%      mapping method also claims to raise the productivity of
%      writers.
%
%      \Block{No tutorial}%
%      This document does not include an introduction to the
%      information mapping method itself. The reader is referred to
%      other documents. Maybe an accompanying document will be
%      distributed along with this package.
%
%      Unfortunately the methodology – or the name – is protected by
%      a trademark. Thus the teaching of the methodology is restricted
%      to licensed institutions.
%
%      \Block{Principles}%
%      \begin{center}
%        \begin{tikzpicture}[mindmap,concept color=blue!16]\bfseries\scriptsize
%          \node [concept,ball color=blue!8] {Information Mapping\R}
%            child[grow=150,concept color=blue!20!black] {%
%            node[concept,ball color=blue!20!black] {\color{white}Principles}
%            child[grow=30,concept color=blue!48] {%
%            node[concept,ball color=blue!48] {Chunking}}
%            child[grow=80,concept color=blue!48] {%
%            node[concept,ball color=blue!48] {Relevance}}
%            child[grow=130,concept color=blue!48] {%
%            node[concept,ball color=blue!48] {Labelling}}
%            child[grow=180,concept color=blue!48] {%
%            node[concept,ball color=blue!48] {Consistency}}
%            child[grow=230,concept color=blue!48] {%
%            node[concept,ball color=blue!48] {Accessible details}}
%            child[grow=280,concept color=blue!48] {%
%            node[concept,ball color=blue!48] {Integrated graphics}}
%          };
%        \end{tikzpicture}
%      \end{center}
%
%      \Block{Information Type}%
%      
%      \begin{center}
%        \begin{tikzpicture}[mindmap,concept color=blue!48]\bfseries\scriptsize
%          \node [concept,ball color=blue!8] {Information Mapping\R}
%            child[grow=-30,concept color=blue!20!black] {%
%            node[concept,ball color=blue!20!black] {\color{white}Infor-mation Type}
%            child[grow=100,concept color=blue!48] {%
%            node[concept,ball color=blue!48] {Procedure}}
%            child[grow=50,concept color=blue!48] {%
%            node[concept,ball color=blue!48] {Process}}
%            child[grow=0,concept color=blue!48] {%
%            node[concept,ball color=blue!48] {Principle}}
%            child[grow=-50,concept color=blue!48] {%
%            node[concept,ball color=blue!48] {Concept}}
%            child[grow=-110,concept color=blue!48] {%
%            node[concept,ball color=blue!48] {Structure}}
%            child[grow=-160,concept color=blue!48] {%
%            node[concept,ball color=blue!48] {Fact}}
%          };
%        \end{tikzpicture}
%      \end{center}
%
%      \Block{Problems of restructuring}%
%      You as \LaTeX\ user may have encountered the problem when
%      restructuring a document: The sections know exactly the level
%      they belong to. If you introduce a new section and put another
%      section into it you have to change all sectioning commands to
%      reflect the new level of the section and their subsections.
%    
%      The macros of |limap| abstract away the level of the document
%      structuring. Any structuring unit is a “Block”. It may contain
%      text or other blocks. Such blocks are the replacement or the
%      sectioning commands. When you restructure your document you
%      simply shift the block and anything it contains to the new
%      place and you are done.
%    
%      The same mechanism can help you to include the same material in
%      several documents – at different sectioning levels!
%
%      \Block{Structure and constituents}%
%      The general approach focuses very much on the structure of
%      the document. The following diagram illustrates the terminology
%      used within this documentation.
%
%      \begin{center}\small
%        \tikzstyle{class}=[rectangle,
%                           text centered,
%                           minimum width=6em,
%                           minimum height=3em,
%                           draw=black!60!red,
%                           drop shadow,
%                           top color=yellow!92!red!10!white,
%                           bottom color=yellow!92!red!40!white]
%        \tikzstyle{arrow}=[draw=black!60!red, thick]
%        \begin{tikzpicture}
%          \path (3.75,6) node(doc) [class]{\bfseries Document}
%                (3.75,4) node(map) [class]{\bfseries Map}
%                (3.75,2) node(block) [class]{\bfseries Block}
%                (0,0) node(text) [class]{\bfseries Text}
%                (2.5,0) node(table) [class]{\bfseries Table}
%                (5,0) node(image) [class]{\bfseries Image}
%                (7.5,0) node(figure) [class]{\bfseries Diagram};
%          \draw[arrow,very thick,->] (doc) -- (map);
%          \node[left] at ($(doc)!.6!(map)$) {\scriptsize 1..*};
%          \draw[arrow,very thick,->] (map) -- (block);
%          \node[left] at ($(map)!.6!(block)$) {\scriptsize 1..9};
%          \draw[arrow,very thick,->] (map) -- +(1.5,0) -- +(1.5,1) -- +(.75,1) -- (map);
%          \draw (4.75,4.75) node {\scriptsize 0..*};
%          \draw[arrow,very thick,->] (block) -- (text);
%          \node[left] at ($(block)!.6!(text)$) {\scriptsize 0..*};
%          \draw[arrow,very thick,->] (block) -- (table);
%          \node[left] at ($(block)!.6!(table)$) {\scriptsize 0..1};
%          \draw[arrow,very thick,->] (block) -- (image);
%          \node[right] at ($(block)!.6!(image)$) {\scriptsize 0..1};
%          \draw[arrow,very thick,->] (block) -- (figure);
%          \node[right] at ($(block)!.6!(figure)$) {\scriptsize 0..1};
%        \end{tikzpicture}
%      \end{center}
%
%      \Block{Class or package}%
%      To support the information mapping\R method several \LaTeX{}
%      macros and environments are provided which allow you to enter a
%      logical description of the relevant concepts. Those macros are
%      provided in the package and class file. It is up to you to
%      choose one of them.
%    
%      \Block{Interoperabilty with other classes and packages}%
%      The main part of the user interface is inherited from \LaTeX.
%      The major differences are the sectioning commands which are
%      made obsolete in parts by the information mapping\R method.
%      Thus most packages can be used to typeset contents of a block.
%    \end{Map}
%
%    \begin{Map}{Getting Started}
%    
%      \Block{Introduction}%
%      If you are starting to use |limap| you should be vaguely
%      familiar with the underlying methodology. This documentation
%      does not provide an introduction.
%    
%      When you start using this class or package you should say
%      “Good bye” to the classical document structuring macros in
%      the \LaTeX\ standard classes.
%
%      \Block{Class or package}%
%      First of all you should decide whether to use the |limap| class
%      or the |limap| package. The class is meant for a complete document.
%      The package allows to combine |limap| with arbitrary other
%      document classes.
%
%      \Block{Contents}%
%      In the maps contained herein you will find an introduction on
%      the use of the |limap| macros and environments. They are
%      accompanied by illustrating sample code.
%      \MapTableOfContents
%
%      \begin{Map}{Using the Document Class}
%
%        \Block{Using the document class}%
%        This package provides both a class file as well as a package.
%        The package contains the definitions of maps, blocks, and
%        others. They can be used together with any base class. This
%        is illustrated in the following preamble:
%    \begin{verbatim}
%  \documentclass{book}
%  \usepackage{limap}
%  \begin{document}     \end{verbatim}
%
%        \Block{Suppressing the block lines}%
%        This class option |nolines| can be used to suppress the line
%        above and below block. This  is illustrated in the following
%        preamble:
%    \begin{verbatim}
%  \documentclass[nolines]{limap}
%  \begin{document}     \end{verbatim}
%
%        \Block{Other options}%
%        Any option not processed by |limap.cls| is passed to the
%        underlying document class used. Thus it is possible to
%        customize the underlying class any further.
%
%        \Block{Several types of options}%
%         In the maps contained herein you will find the supported
%         options for the document class |limap|.
%        \MapTableOfContents
%
%      \begin{Map}{Document Class Options for Language Selection}
%
%        \Block{Introduction}%
%        The document class |limap| inserts some words. Thus it has to
%        know the language it is supposed to use. Thus the language
%        has to be specified as one document class option.
%    \begin{verbatim}
%  \documentclass[german]{limap}
%  \begin{document}     \end{verbatim}
%
%        \Block{Supported languages}%
%        First, we describe the settings influencing the language
%        specific settings. They do not make provisions to use the
%        appropriate hyphenation patterns. They just arrange things
%        such that the internally used texts are displayed in the
%        chosen language.
%
%        \begin{MapTabular}{@{\tt }lp{.75\linewidth}}\toprule
%          \rm Option & Description\\\midrule
%          austrian   & Activate the language specific text
%                       fragments for the Austrian language (in fact
%                       German with one minor modification).\\
%          english    & Activate the language specific text fragments
%                       for the English language.\\
%          french     & Activate the language specific text fragments
%                       for the French language.\\
%          german     & Activate the language specific text fragments
%                       for the German language.\\
%          USenglish  & Activate the language specific text
%                       fragments for the American
%                       English.\\\bottomrule 
%        \end{MapTabular}
%    
%        \Block{Default language}%
%        The default language is |english|. It is used if no language
%        is set.
%    
%        \Block{Beware of hyphenation}%
%        Note that the hyphenation patterns are not loaded
%        automatically. You have to load the hyphenation patterns,
%        for instance with the
%        \href{https://www.ctan.org/pkg/babel}{babel} package.
%
%        This behavior has been chosen to allow you to select the
%        language package of your choice. Also you can pass in
%        additional options to this package more easily.
%      \end{Map}
%
%      \begin{Map}{Document Class Options for Variant Selection}
%
%        \Block{Introduction}%
%        The document class |limap| is based on another document
%        class. Thus you can use the well-known macros and
%        environments defined there and take advantage of the
%        extensions provided by |limap|.
%
%    \begin{verbatim}
%  \documentclass{limap}
%  \begin{document}     \end{verbatim}
%        \Block{Variants}%
%        The class has two additional options to determine the base
%        class to be used. The first option is the variant. It can take
%        the following values:
%    
%        \begin{MapTabular}{@{\tt }ll}\toprule
%          \rm Option & Description\\\midrule
%          base & Use the base set of classes. This is the default.\\
%          koma & Use the set of classes from
%                 \href{https://www.ctan.org/pkg/koma-script}{koma-script}.\\\bottomrule
%        \end{MapTabular}
%
%        \Block{Default variant}%
%        If no document class option is used then |base| is the
%        default variant.
%      \end{Map}
%
%      \begin{Map}{Document Class Options for Base Class Selection}
%
%        \Block{Introduction}%
%        The document class |limap| follows the logic introduced in
%        the \LaTeX\ standard document classes. The type of the base
%        document class can be given as argument to the |limap| class.
%
%    \begin{verbatim}
%  \documentclass[book]{limap}
%  \begin{document}     \end{verbatim}
%    
%
%        \Block{Class type}%
%        The second option is the class type. It determines which kind of
%        document to typeset. It can take the following values:
%
%        \begin{MapTabular}{@{\tt }ll}\toprule
%          \rm Option & Description\\\midrule
%          book       & Typeset a book type document.\\
%          report     & Typeset a report type document.\\
%          article    & Typeset an article type document.\\
%          letter     & Typeset a letter type document.\\\bottomrule
%        \end{MapTabular}
%      
%        \Block{Mapping of variant and type}%
%        The following table shows which base classes are loaded according
%        to the given values:
%    
%        \begin{MapTabular}{@{\tt }lcc}\toprule
%          \rm Type /variant  & \emph{base}	& \emph{koma}	\\\midrule
%          book		      & book		& scrbook	\\
%          report	      & report  	& scrreprt	\\
%          article	      & article 	& scrartcl	\\
%          letter	      & letter  	& scrlettr	\\\bottomrule
%        \end{MapTabular}
%
%        \Block{Default type}%
%        The default type is |report|. It is used if no type is set.
%      \end{Map}
%      \end{Map}
%
%      \begin{Map}{Using the Package}
%        \Block{Introduction}%
%        The package |limap| can be used together with most document
%        classes. An exception are classes for slides like the
%        \href{https://www.ctan.org/pkg/beamer}{beamer} class.
%
%        As usual it is declared in the document preamble.
%    
%    \begin{verbatim}
%  \documentclass{report}
%  \usepackage{limap}
%  \begin{document}    \end{verbatim}
%        \Block{Content}%
%        The following additional information is available.
%        \MapTableOfContents
%
%      \begin{Map}{Package Options for Language Selection}
%
%        \Block{Introduction}%
%        The package |limap| inserts some words. Thus it has to
%        know the language it is supposed to use. Thus the language
%        has to be specified as package option.
%    \begin{verbatim}
%  \usepackage[german]{limap}
%  \begin{document}     \end{verbatim}
%
%        \Block{Inheritance of document class options}%
%        Alternatively the language selecting option can be specified
%        as document class option. Thus several packages can share the
%        same setting.
%    \begin{verbatim}
%  \documentclass[german]{scrbook}
%  \documentclass{limap}
%  \begin{document}     \end{verbatim}
%
%        \Block{Supported languages}%
%        Here we describe the settings influencing the language
%        specific settings. They do not make provisions to use the
%        appropriate hyphenation patterns. They just arrange things
%        such that the internally used texts are displayed in the
%        chosen language.
%
%        \begin{MapTabular}{@{\tt }lp{.75\linewidth}}\toprule
%          \rm Option & Description\\\midrule
%          austrian   & Activate the language specific text
%                       fragments for the Austrian language (in fact
%                       German with one minor modification).\\
%          english    & Activate the language specific text fragments
%                       for the English language.\\
%          french     & Activate the language specific text fragments
%                       for the French language.\\
%          german     & Activate the language specific text fragments
%                       for the German language.\\
%          USenglish  & Activate the language specific text
%                       fragments for the American English.\\\bottomrule
%        \end{MapTabular}
%    
%        \Block{Default language}%
%        The default language is |english|. It is used if no language
%        is set.
%    
%        \Block{Beware of hyphenation}%
%        Note that the hyphenation patterns are not loaded
%        automatically. You have to load the hyphenation patterns,
%        for instance with the
%        \href{https://www.ctan.org/pkg/babel}{babel} package.
%
%        This behavior has been chosen to allow you to select the
%        language package of your choice. Also you can pass in
%        additional options to this package more easily.
%      \end{Map}
%    \end{Map}
%    \end{Map}
%    
%    \begin{Map}{The Block}\label{map:block}
%    
%      \Block{Meaning}%
%      A “block” is the essential building units of the |limap|
%      package. You can think of it as paragraph with a title.
%    
%      \Block{Appearance}%
%      The blocks are usually typeset with the block label on the left
%      side and the contents to its right. They are surrounded by
%      white-space and a thin line above and below.
%    
%      \DescribeMacro{\Block}
%      The macro |\Block| can be used to typeset an block. It
%      takes one argument which is the block label.
%
%      This is a shorthand for denoting a block. The end mark can be
%      omitted if you use the macro instead of the environment.
%      Nevertheless this is depreciated.
%
%      \Block{Example}%
%      The following sample illustrates how to enter a block.
%    \begin{verbatim}
%  \Block{Block Label}
%  And now comes the block text. It can consist of one or more 
%  classical paragraphs, or tables, or pictures, or something
%  else.     \end{verbatim}
%    
%      \Block{Just in a map}%
%      Note that the macro |\Block| can be used inside a map only. If
%      you try to use it outside the scope of a map you will get an
%      error.
%
%      \Block{More on blocks}%
%      Several more aspects of blocks are covered in the following
%      maps.
%      \MapTableOfContents
%
%    \begin{Map}{Configuring Blocks}
%
%      \DescribeMacro{\MapBlockLabelFont}
%        The macro |\MapBlockLabelFont| determines the font changing
%        command to be used for typesetting the block label. The
%        default is empty.
%
%      \Block{Colored block labels}%
%      The macro |\MapBlockLabelFont| can for instance be used to achieve
%      colored block labels. For this purpose we can include the package
%      |xcolor| in the preamble and select for instance a named color
%      for the rule.
%      This is illustrated in the following example.
%    \begin{verbatim}
%  \usepackage[svgnames]{xcolor}
%  \renewcommand\MapBlockLabelFont{\color{Navy}}     \end{verbatim}
%      \DescribeMacro{\MapParskip}
%      The macro |\MapParskip| determines the vertical distance of the
%      text from the separating rules. The default is \MapParskip.
%    \begin{verbatim}
%  \renewcommand\MapParskip{.25ex}     \end{verbatim}
%
%      \DescribeMacro{\MapTitleFraction}
%      The macro |\MapTitleFraction| determines the part of the page
%      width devoted to the block label area. It is a fraction in the
%      range from 0 to 1. The default value of |\MapTitleFraction| is
%      0\MapTitleFraction.
%    \begin{verbatim}
%  \renewcommand\MapTitleFraction{.25}     \end{verbatim}
%
%      \DescribeMacro{\MapTextFraction}
%      This macro determines the part of the page width devoted to the
%      text area. It is a fraction in the range from 0 to 1. The
%      default value of |\MapTextFraction| is 0\MapTextFraction.
%
%      |\MapTitleFraction| and |\MapTextFraction| should add up to
%      something less or equal to 1. Otherwise you will get some
%      “overfull hbox” messages.
%    \begin{verbatim}
%  \renewcommand\MapTextFraction{.8}     \end{verbatim}
%      \vspace*{-\MapParskip}
%    \end{Map}
%
%    \begin{Map}{Configuring the Rules of Blocks}
%    
%      \Block{Motivation}%
%      Blocks are usually surrounded by horizontal rules. The
%      appearance of these rules can be influenced by some macros.
%
%      \DescribeMacro{\MapRuleWidth} The macro |\MapRuleWidth|
%      determines the width of the rules drawn between blocks. It is
%      defined as a macro containig a length. The default is
%      \MapRuleWidth.
%
%    \begin{verbatim}
%  \setlength\MapRuleWidth{1mm}     \end{verbatim}
%
%      \Block{Suppress visible rules}%
%      For some people the rules are distracting since they emphasize
%      the structure too much. In such situations the rule width might
%      be reduced. In the extreme case it can even be set to 0pt to
%      suppress the lines at all as in the following example:
%      
%    \begin{verbatim}
%  \renewcommand\MapRuleWidth{0pt}     \end{verbatim}
%
%      \DescribeMacro{\MapRuleStart}
%      The macro |\MapRuleStart| is inserted before rules around
%      blocks. It can be used to inject some code before the rule is
%      typeset.  Initially it is empty.
%
%      \Block{Colored rules}%
%      The macro |\MapRuleStart| can for instance be used to achieve
%      colored rules. For this purpose we can include the package
%      |xcolor| in the preamble and select a named color for the rule.
%      This is illustrated in the following example.
%    \begin{verbatim}
%  \usepackage[svgnames]{xcolor}
%  \renewcommand\MapRuleStart{\color{Silver}}     \end{verbatim}
%	\vspace*{-3ex}
%    \end{Map}
%    
%    \begin{Map}{A Wide Block}
%    
%      \Block{Motivation}%
%      Sometimes it is necessary to extend the content of a block to
%      the whole width of the page. This can be the case for
%      illustrations or large tables.
%
%      \DescribeMacro{\WideBlock}
%      The macro |\WideBlock| can be used to typeset a piece of
%      information on the whole page width. It is normally used after an
%      initiating block containing the title of the whole construction.
%      
%      The macro |\WideBlock| takes one argument which contains the
%      material to span the whole page width.
%
%      \Block{Example}%
%      The following sample illustrates how to enter a wide block.
%    \begin{verbatim}
%  \Block{Block Label}
%  And now comes the block text.
%  \WideBlock{\includegraphics{images/overview.svg}}     \end{verbatim}
%
%      \Block{Block Label}
%      And now comes the wide block produced with the help of
%      Ti\textit{kZ} and its decoration with random steps.
%
%      \vspace*{-\MapParskip}
%      \WideBlock{\centering
%      \begin{tikzpicture}
%        \node [draw=black!50!white,
%               ball color=yellow!85!red!12!white,draw,thick,
%               minimum height=20mm, minimum width=147mm,
%               decorate, decoration={random steps,
%               segment length=5pt,amplitude=4pt}]
%              {\it A very, very, very, very, very, very, very, very, very, very, very, very, very
%               wide block content};
%      \end{tikzpicture}}\\
%      \vspace*{-\MapParskip}
%    \end{Map}
%    \end{Map}
%
%    \begin{Map}{The Map}\label{map:map}
%    
%      \Block{Structuring documents}%
%      The maps are the structuring units of the |limap| package. Maps
%      may recursively contain maps and other material. The other
%      material is usually named a block. This recursive structure is
%      illustrated in the following figure.
%    
%      \newcount\picX
%      \newcount\picY
%      \newcount\picW
%      \picX=0
%      \picY=0
%      \picW=20
%      \long\def\picMap(#1)#2{%
%        \put(\the\picX,\the\picY){\framebox(\the\picW,#1)[tl]{Map}}
%        \begingroup\advance\picW-2
%        \advance\picY1  \advance\picX1
%        #2
%        \endgroup
%        \advance\picY#1 \advance\picY2
%      }%
%      \def\picBlock{%
%        \put(\the\picX,\the\picY){\makebox(\the\picW,3)[tl]{\tiny Block}}
%        \put(\the\picX,\the\picY){\line(1,0){\the\picW}}
%        \begingroup \advance\picX6
%        \advance\picY1
%        \advance\picW-6
%        \multiput(\the\picX,\the\picY)(0,.5){5}{\line(1,0){\the\picW}}
%        \endgroup
%        \advance\picY4
%        \put(\the\picX,\the\picY){\line(1,0){\the\picW}}
%      }%
%      \begin{center}\unitlength=1mm
%        \begin{picture}(20,72)\sf\scriptsize
%          \picMap(71){
%          \picMap(21){
%            \picMap(16){
%              \picBlock
%              \picBlock
%              \picBlock
%            }
%          }
%          \picMap(16){
%            \picBlock
%            \picBlock
%            \picBlock
%          }
%          \picMap(16){
%            \picBlock
%            \picBlock
%            \picBlock
%          }
%          \picBlock
%          \picBlock
%        }
%        \end{picture}
%      \end{center}
%    
%      \DescribeEnv{Map}
%      The environment |Map| can be used to typeset a map. It
%      takes a single argument which contains the map title. The map
%      title is typeset above the map and is repeated on each
%      continuation page.
%
%      \Block{Example}%
%    
%    \begin{verbatim}
%  \begin{Map}{Map Title}
%    \Block{Block Label}
%     And now comes the block text. It can  consist of
%    one or more classical paragraphs, or tables, or 
%    pictures, or something else.
%  \end{Map}    \end{verbatim}
%
%      \Block{To at most 12~cascaded Maps}
%      There is a technical restriction in the current implementation
%      of Maps. This restriction does not allow more than 12 cascaded
%      Maps, i.e. Maps in Maps \ldots in Maps.
%
%      According to the good old 7$\pm$2 rule a full populated
%      document of this level would contain 282\,429\,536\,481 Maps. I
%      think it should take some time until this limit is reached.
%    
%      \Block{More on maps}%
%      Some more aspects are covered in the following pages.
%      \MapTableOfContents
%
%    \begin{Map}{Referencing Maps}
%    
%      \Block{Referencing maps}%
%      Maps can be referenced in the usual \LaTeX\ way. For this
%      purpose you place a macro invocation of |\label| right behind
%      the beginning of the |Map|.
%
%      Then you can add references somewhere in the document with
%      |\ref| and |\pageref|. For backward references two \LaTeX\ runs
%      are required.
%
%      \Block{Example}%
%    \begin{verbatim}
%  \begin{Map}{Map Title}\label{my.label}
%    \Block{Block Label}
%    As said on page~\pageref{my.label}...    \end{verbatim}
%      \Block{Caveat emptor}%
%      |limap| automatically labels any map with a label of the form
%      \texttt{Map|@|}\textsl{n} where \textsl{n} is a
%      sequence number. Thus avoid to use such labels yourself.
%    \end{Map}
%
%    \begin{Map}{Configuring Maps}
%      
%      \DescribeMacro{\MapFont}
%      The macro |\MapFont| determines the font changing command to be
%      used when starting a new map. 
%    \begin{verbatim}
%  \renewcommand\MapFont{\tt}    \end{verbatim}
%
%      \DescribeMacro{\MapTitleFont}
%      The macro |\MapTitleFont| determines the font changing command to
%      be used when typesetting the title of a map. The default is |\Large|.
%    \begin{verbatim}
%  \renewcommand\MapTitleFont{\huge\bfseries}    \end{verbatim}
%    
%      \DescribeMacro{\MapContinued}
%      The macro |\MapContinued| contains the text appearing at the end
%      of map which are continued on the next page. It is initiated
%      when the class or package is loaded. It can overwritten
%      afterwards – for instance in the preamble.
%    \begin{verbatim}
%  \renewcommand\MapContinued{}    \end{verbatim}
%
%      \DescribeMacro{\MapContinuing}
%      The macro |\MapContinuing| contains the text appearing at the
%      beginning of map which are continued from the previous page. It
%      is typeset after the map title. It is initiated
%      when the class or package is loaded. It can overwritten
%      afterwards – for instance in the preamble.
%    \begin{verbatim}
%  \renewcommand\MapContinuing{}    \end{verbatim}
%
%      \DescribeMacro{\MapTitleContinuedFont}
%      This macro determines the font changing command to be used for
%      typesetting the additional text after titles on followup pages of
%      multi-page maps.
%
%      The default value is |\small|.
%    \begin{verbatim}
%  \renewcommand\MapTitleContinuedFont{\normalsize}    \end{verbatim}
%
%      \DescribeMacro{\MapNewpage}
%      The macro |\MapNewpage| is expanded whenever a new page is
%      required between maps. Thus it can be used to suppress the
%      newpages by |\let|ing it to |\relax|. Note that this is not in
%      the spirit of the Information Mapping\R method.
%
%      \DescribeMacro{\MapTOC} 
%      The macro |\MapTOC| is expanded to generate the entry in the
%      table of contents. It can be redefined to allow another
%      behavior.
%    \end{Map}
%    \end{Map}
%    
%    \begin{Map}{The Table of Contents}
%    
%      \Block{Everything is local}%
%      The concept of the underlying methodology is that everything
%      should be addressed relative to the current location. We see
%      this when dealing with maps (see page~\pageref{map:map}). The
%      same principle is applied to the table of contents.
%
%      \Block{Direct children are included}%
%      The table of contents includes all maps contained in the map in
%      which it appears. This means the immediate children of the map
%      are shown.
%
%      \Block{Block context required}%
%      The table of contents is typeset inside a block (see
%      page~\pageref{map:block}).
%
%      \DescribeMacro{\MapTableOfContents}
%      The macro |\MapTableOfContents| can be used to typeset the table
%      of contents for a map. This table of contents includes all
%      sub-maps of the map it is contained in – not recursively but
%      only one level deeper.
%
%      The macro |\MapTableOfContents| does not take any argument.
%
%      \Block{Example}%
%    \begin{verbatim}
%  \Block{Contents}
%  And some wise words about the table of contents.
%  \MapTableOfContents    \end{verbatim}
%    
%      \DescribeMacro{\MapTableOfContentsStyle}
%      The macro |\MapTableOfContentsStyle| can be used to determine
%      the style of the |\MapTableOfContents| The default style is an
%      open layout utilizing the package
%      \href{https://www.ctan.org/pkg/booktabs}{booktabs}.
%
%      The macro |\MapTableOfContentsStyle| takes one argument. This
%      argument may have one of the following values:
%
%      \begin{MapTabular}{ll}\toprule
%        Argument & Meaning \\\midrule
%        open     & an open style for the TOC\\\hline
%        boxed    & a boxed style for the TOC\\\bottomrule
%      \end{MapTabular}%
%      \vspace*{-5ex}
%    \begin{Map}{Blocks in the Table of Contents}
%    
%      \Block{Motivation}%
%      Sometimes it can be desirable to add the blocks to the global
%      table of contents. Here we will see how this can be achieved.
%
%      \DescribeMacro{\MapBlockStartHook}
%      The macro |\MapBlockStartHook| is expanded at the beginning of
%      each block it if is defined. It takes a single argument which
%      is the title of the block.
%
%      \DescribeMacro{\MapBlockTOC}
%      The macro |\MapBlockTOC| is a macro which adds one line to the
%      table of contents. It takes one argument which is the text to
%      be added. 
%
%      \Block{Example}%
%      Put the following code in the preamble to get the blocks into
%      the table of contents.
%    \begin{verbatim}
%  \let\MapBlockStartHook\MapBlockTOC    \end{verbatim}
%    
%      %\vspace*{-5ex}
%    \end{Map}
%    \end{Map}
%    \begin{Map}{Tables}
%
%      \Block{Introduction}%
%      Tables play an important role as part of maps. Usually they are
%      included into a block and preceded by some useful introduction.
%
%      \Block{Combination with booktabs}%
%      The document class |limap| and the package |limap|
%      automatically include the package
%      \href{https://www.ctan.org/pkg/booktabs}{booktabs}. This
%      package contains some support for typesetting proper tables.
%      You should have a look at the documentation of |booktabs| and
%      follow the recommendations given there.
%
%      |booktabs| is automatically loaded by |limap| upon start-up.
%
%      \DescribeEnv{MapTabular}
%      The environment |MapTabular| provides a convenient way to
%      include a table into a block. It produces a |tabular*|
%      environment and sets the width to the width of the text column
%      of the block.
%
%      \Block{Example}%
%    \begin{verbatim}
%  \Block{Table block}
%  Sheding some insight on the following table.
%
%  \begin{MapTabular}{lll}\toprule
%    a & b & \\\midrule
%    x & y & Z\\\hline
%    X & Y & Z\\\bottomrule
%  \end{MapTabular}    \end{verbatim}
%      \DescribeMacro{\MapTabularFraction}
%      The tabular is always centered in the text column of the block. The
%      macro |\MapTabularFraction| contains a factor for the line
%      width occupied by the tabular. This value is used to determine
%      the width of the tabular. The default value for the macro
%      |\MapTabularFraction| is 0\MapTabularFraction.
%    \begin{verbatim}
%  \renewcommand\MapTabularFraction{.7}    \end{verbatim}
%      \vspace*{-4ex}
%    \end{Map}
%    
%    \begin{Map}{Configuration}
%
%      \Block{Introduction}%
%      |limap| is designed with a set of extension points. Those are
%      mainly definition which can be overwritten to achieve a certain
%      effect.
%
%      \Block{Configuration in the preamble}%
%      Any configuration change performed in the preamble of a
%      document is global. It lasts until oberwritten within the
%      document. 
%
%      \Block{Configuration in the document}%
%      The configuration parameters can be overwritten in the document
%      just before they are needed. This is not recommended since it
%      makes it harder to achieve consistency.
%
%      \Block{External configuration}%
%      The confiration can be externalised. For this purpose a special
%      file |limap.cfg| is loaded with the class or package in case it
%      exists. This file can contain configuration options for
%      |limap|. Thus it is possible to share the same appearance
%      among different documents.
%
%      \Block{Contents}%
%      The following maps contain the various aspects of the
%      configuration of |limap|.
%      \MapTableOfContents
%
%    \begin{Map}{The Configuration File limap.cfg}
%
%      \Block{Default configuration file}%
%      When the class or package is loaded as a last action a
%      configuration file is loaded if it can be found. The name of
%      the configuration file is \texttt{limap.cfg}. This file can
%      contain re-definitions of the several macros to adjust the
%      behavior of |limap| on a per directory, per user or per
%      installation base.
%
%      \Block{Note}%
%      Some settings are activated before the configuration file is
%      loaded. Thus some settings may not have any effect at all.
%    \end{Map}
%    
%    \begin{Map}{Changing or Adding Language Specific Settings}
%
%      \Block{Overview}%
%      Several strings are used automatically by the current class or
%      package. Default values for several languages are hardwired in
%      the implementation. Nevertheless it is possible to change those
%      language specific settings.
%
%      If you create settings for a new language it is highly
%      recommended to contact the author to integrate them into the
%      default distribution.
%
%      The following macros can be redefined in the preamble after the
%      package or class has been loaded to reset the language specific
%      text.
%
%      \DescribeMacro{\MapTOCname}
%      The macro |\MapTOCname| contains the text of the heading in table
%      of contents of maps for the column of map titles. It is initiated
%      when the class or package is loaded. It can overwritten
%      afterwards – for instance in the preamble.
%      \begin{verbatim}
%  \renewcommand\MapTOCname{Issue}    \end{verbatim}
%
%      \DescribeMacro{\MapTOCpage}
%      The macro |\MapTOCpage| contains the text of the heading in table
%      of contents of maps for the column of page numbers. It is initiated
%      when the class or package is loaded. It can overwritten
%      afterwards – for instance in the preamble.
%      \begin{verbatim}
%  \renewcommand\MapTOCname{Reference}    \end{verbatim}
%
%      \Block{Providing a new language}%
%      If you want to provide a new language \textit{lang} you can
%      define the macro |\LIMAP@SelectLanguage@|\textit{lang} which
%      redefines the macros given above. This definition has to be
%      present before the package is loaded.
%
%      Note that the macro name contains the @ character. Thus the
%      definition should be made in a package of its own.
%    \end{Map}
%    \end{Map}
%    
%
%^^A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%    \StopEventually{}
%    \newpage
%    \if@undefined\environment
%    \newenvironment{environment}[1]{}{}
%    \fi
%    
%    \begin{Map}{The Implementation}
%      \Block{Overview}%
%      This part of the document describes the implementation. Usually
%      it is not meant for the casual user. Nevertheless it might be
%      fruitful for those searching for inspiration or for tricks when
%      using this class or package.
%
%      \Block{Contents}%
%      \MapTableOfContents
%
%    \begin{Map}{The Version Information}
%
%      \Block{Purpose}%
%      The version information is included for printing it on the
%      documentation and at start-up when the class or package is
%      loaded. It has to preceed the documentation driver to properly
%      include this information into the printed manual.
%    
%      \Block{}%
%      \begin{macro}{\filename}
%        |\filename| is the name of the dtx file containing this class
%        and package.
%    \begin{macrocode}
\def\filename{limap.dtx}
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\fileversion}
%        |\fileversion| is the version number of the |dtx| file. It is
%        used as a version number for the class and package.
%    \begin{macrocode}
\def\fileversion{2.3}
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\filedate}
%        |\filedate| is the change date of the |dtx| file. It is used
%        as a version date and documentation date.
%    \begin{macrocode}
\def\filedate{2026/05/20}
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\docversion}
%        |\docversion| is the version number of the documentation. It
%        is identical to the version number of the |dtx| file.
%    \begin{macrocode}
\let\docversion=\fileversion
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\docdate}
%        |\docdate| is the change date of the documentation. It is
%        identical to the change date of the |dtx| file.
%    \begin{macrocode}
\let\docdate=\filedate
%    \end{macrocode}
%      \end{macro}
%    \end{Map}
%
%    \begin{Map}{The Documentation Driver}
%      \Block{Purpose}%
%      The documentation driver is necessary to provide a self
%      documenting |dtx| file. With this construction the dtx file can
%      be run through \LaTeX\ to produce the documentation.
%
%      The driver section contains a complete \LaTeX\ document which
%      loads the |dtx| file. The special class |ltxdoc| is used and
%      some arrangements are made for this purpose.
%
%      \Block{Driver code}%
%      The driver code is not exported by the installer.
%
%    \begin{macrocode}
%<*driver>
\documentclass[a4paper]{ltxdoc}
\RequirePackage{textcomp}
\usepackage{limap}
\let\LimapFilename\filename
\let\LimapFileversion\fileversion
\let\LimapFiledate\filedate
\let\LimapDocdate\docdate
%    \end{macrocode}
%      \Block{Page Layout}%
%    \begin{macrocode}
\oddsidemargin=10pt
\evensidemargin=10pt
\textwidth=430pt
\textheight=650pt
\voffset=-12mm
%    \end{macrocode}
%      \Block{Headings}%
%    \begin{macrocode}
\usepackage{fancyhdr}
\addtolength{\headheight}{2ex}%
\pagestyle{fancy}%
\cfoot{}
\rhead{\small\sf\thepage}
\lhead{\textit{\footnotesize limap} – Package and Class}
%    \end{macrocode}
%      \Block{Links and such}%
%    \begin{macrocode}
\usepackage{hyperref}
%    \end{macrocode}
%      \Block{Fonts}%
%    \begin{macrocode}
\usepackage{fontspec}
\setmainfont{TeX Gyre Heros}
\setsansfont{TeX Gyre Heros}%[Scale=MatchLowercase]
\setmonofont{Inconsolatazi4}%[Scale=MatchLowercase]
%    \end{macrocode}
%      \Block{Coloring}%
%    \begin{macrocode}
\usepackage[svgnames]{xcolor}
\renewcommand\MapTitleFont{\Large\bfseries\color{Navy}}
\renewcommand\MapBlockLabelFont{\bfseries\color{Navy}}
\definecolor{linkColor}{rgb}{.66,.2,.2}
\hypersetup{colorlinks, 
            citecolor=linkColor,
            filecolor=linkColor,
            linkcolor=linkColor,
            urlcolor=linkColor}
\renewcommand\MapRuleStart{\color{Navy}}
\renewcommand\MapRuleWidth{1pt}
%    \end{macrocode}
%      \Block{Graphics}%
%    \begin{macrocode}
\usepackage{tikz}
\usetikzlibrary{decorations.pathmorphing}
\usetikzlibrary{shadows}
\usetikzlibrary{mindmap}
\usetikzlibrary{calc}
%    \end{macrocode}
%      \Block{Saving version}%
%    \begin{macrocode}
\let\filename\LimapFilename
\let\fileversion\LimapFileversion
\let\filedate\LimapFiledate
\let\docdate\LimapDocdate
%    \end{macrocode}
%      \Block{Adapting doc.sty}%
%    \begin{macrocode}
\def\theCodelineNo{\color{DarkGreen}\rmfamily\scriptsize\arabic{CodelineNo}}%
\makeatletter
\renewcommand\DescribeMacro{\catcode`\\=12\Describe@@Macro}
\def\Describe@@Macro#1{\Block{\PrintDescribeMacro{#1}}%
  \SpecialUsageIndex{#1}\@esphack\ignorespaces}
\renewcommand\DescribeEnv{\catcode`\\=12\Describe@@Env}
\def\Describe@@Env#1{\Block{\PrintDescribeEnv{#1}}%
  \SpecialEnvIndex{#1}\@esphack\ignorespaces}
\makeatother
\let\maketitle\MakeTitle
%    \end{macrocode}
%      \Block{Some additions}%
%    \begin{macrocode}
\newcommand\R{\(^{\textrm{\footnotesize\textregistered}}\) }
\let\marginpar\Block
\InputIfFileExists{limap.dcf}{}{}
\RecordChanges
\EnableCrossrefs
\CodelineIndex
%    \end{macrocode}
%      \Block{The content}%
%      Now everything is prepared. Let the show begin\ldots
%    \begin{macrocode}
\begin{document}
\DeleteShortVerb{|}
\DocInput{\filename}
%\newpage
%\PrintChanges
\newpage
\setcounter{IndexColumns}{2}
\PrintIndex
\end{document}
%</driver>
%    \end{macrocode}
%    \end{Map}
%    
%
%    \begin{Map}{The \TeX\ Code}
%
%      \Block{Overview}%
%      The rest of the document describes the implementation. Usually
%      it is not meant for the casual user. Nevertheless it might be
%      fruitful for those searching for inspiration or for tricks when
%      using this class or package.
%
%      \Block{Contents}%
%      \MapTableOfContents
%
%    \begin{Map}{The Package and Class Declarations}
%
%      \Block{Preliminaries}%
%      First of all we request a descent version of \LaTeX\ to be
%      used. I don't think it does have to be too new.
%
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
%    \end{macrocode}
%
%      \Block{Package identification}%
%      When the package is generated, the package identification is
%      included.
%    \begin{macrocode}
%<*package>
\ProvidesPackage{limap}[\filedate\space Gerd Neugebauer]
%</package>
%    \end{macrocode}
%
%      \Block{Class identification}%
%      When the class is generated, the class identification is
%      included. 
%    \begin{macrocode}
%<*class>
\ProvidesClass{limap}[\filedate\space Gerd Neugebauer]
%</class>
%    \end{macrocode}
%    \end{Map}
%
%    \begin{Map}{Language Specific Macros}
%
%      \Block{Introduction}%
%      This section contains internal macros used to implement the
%      functionality. New languages can be easily be added. For this
%      purpose only a new macro has to be defined and a package/class
%      option for the convenience of the user.
%
%      Consider you want to add a new language “latin” then you have
%      to provide the command |\LIMAP@SelectLanguage@latin|. This
%      macro should simply redefine the macros containing strings of
%      the language specific texts. Examples for other languages are
%      provided in this section.
%
%      To enable the language settings for “latin” the macro
%      |\LIMAP@Language| has to be defined to contain the value
%      “latin”. Usually this is accomplished by providing a
%      convenient option to the package or class.
%
%      \Block{}%
%      \begin{macro}{\defineLimapLanguage}
%        Provide the definitions for a language. The different texts
%        to be used are stored in a macro which defines the target
%        macros when expanded.
%    \begin{macrocode}
\def\defineLimapLanguage#1#2#3#4#5{%
  \expandafter\def\csname LIMAP@SelectLanguage@#1\endcsname{%
    \def\MapContinued{#2}%
    \def\MapContinuing{#3}%
    \def\MapTOCname{#4}%
    \def\MapTOCpage{#5}%
  }%
}
%    \end{macrocode}
%      \end{macro}
%
%      \Block{Definitions for the language “austrian“}%
%    \begin{macrocode}
\defineLimapLanguage{austrian}%
  { Fortsetzung}{Fortsetzung\dots}%
  {Titel}{Seite}
%    \end{macrocode}
%
%      \Block{Definitions for the language “german“}%
%    \begin{macrocode}
\defineLimapLanguage{german}%
  { Fortsetzung}{Fortsetzung\dots}%
  {Titel}{Seite}
%    \end{macrocode}
%
%      \Block{Definitions for the language “english“}%
%    \begin{macrocode}
\defineLimapLanguage{english}%
  { Continued}{Continuing\dots}%
  {Title}{Page}
%    \end{macrocode}
%
%      \Block{Definitions for the language “USenglish“}%
%    \begin{macrocode}
\defineLimapLanguage{USenglish}%
  { Continued}{Continuing\dots}%
  {Title}{Page}
%    \end{macrocode}
%
%      \Block{Definitions for the language “french“}%
%    \begin{macrocode}
\defineLimapLanguage{french}%
  { continuation}{continuation\dots}%
  {Intitulé}{Page}
%    \end{macrocode}
%
%      \Block{}%
%      \begin{macro}{\LIMAP@Language}
%        The macro |\LIMAP@Language| determines the language to be
%        used for several small text fragments to be inserted at
%        certain places. It is redefined by package/class options and
%        evaluated at the end to activate the selected settings.
%    \begin{macrocode}
\providecommand\LIMAP@Language{english}
%    \end{macrocode}
%      \end{macro}
%    
%      \Block{}%
%    \begin{macrocode}
\DeclareOption{austrian}{\renewcommand\LIMAP@Language{austrian}}
\DeclareOption{german}{\renewcommand\LIMAP@Language{german}}
\DeclareOption{french}{\renewcommand\LIMAP@Language{french}}
\DeclareOption{english}{\renewcommand\LIMAP@Language{english}}
\DeclareOption{USenglish}{\renewcommand\LIMAP@Language{USenglish}}
%    \end{macrocode}
%
%      \Block{}%
%      \begin{macro}{\ifLIMAP@strict}
%        The boolean |\ifLIMAP@strict| determines if the lower
%        sectioning macros should be disabled in the class.
%    \begin{macrocode}
\newif\ifLIMAP@strict \LIMAP@stricttrue
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%    \begin{macrocode}
\DeclareOption{nonstrict}{\LIMAP@strictfalse}
%    \end{macrocode}
%    
%      \Block{}%
%    \begin{macrocode}
\DeclareOption{nolines}{\def\MapRuleWidth{0pt}\ignorespaces}
%    \end{macrocode}
%    
%    \begin{Map}{Determining the Appropriate Base Class}
%
%      \Block{}%
%    \begin{macrocode}
%<*class>
%    \end{macrocode}
%
%      \begin{macro}{\LIMAP@ClassType}
%        The macro |\LIMAP@ClassType| determines the type of the class
%        to be used. Usually it can take the values |book|, |report|,
%        |article|, and |letter| (for completeness). This macro is
%        redefined when the options of the class are evaluated.
%        Finally this macro helps to select the appropriate base
%        class.
%    \begin{macrocode}
\providecommand\LIMAP@ClassType{report}
%    \end{macrocode}
%      \end{macro}
%    
%      \Block{}%
%    \begin{macrocode}
\DeclareOption{book}{\renewcommand\LIMAP@ClassType{book}}
\DeclareOption{report}{\renewcommand\LIMAP@ClassType{report}}
\DeclareOption{article}{\renewcommand\LIMAP@ClassType{article}}
\DeclareOption{letter}{\renewcommand\LIMAP@ClassType{letter}}
%    \end{macrocode}
%    
%      \Block{}%
%      \begin{macro}{\LIMAP@Variant}
%        The macro |\LIMAP@Variant| determines the variant of the
%        class to be used. Usually it can take the values |base| and
%        |koma|. This macro is redefined when the options of the class
%        are evaluated. Finally this macro helps to select the
%        appropriate base class.
%    \begin{macrocode}
\providecommand\LIMAP@Variant{base}
%    \end{macrocode}
%      \end{macro}
%    
%      \Block{Options for selecting the variant}%
%    \begin{macrocode}
\DeclareOption{koma}{\renewcommand\LIMAP@Variant{koma}}
\DeclareOption{base}{\renewcommand\LIMAP@Variant{base}}
%    \end{macrocode}
%
%      \Block{Mapping to document class}%
%      Define a mapping between the variant and class type to the class
%      name to be used.
%    \begin{macrocode}
\newcommand\LIMAP@Class@base@article{article}
\newcommand\LIMAP@Class@base@report{report}
\newcommand\LIMAP@Class@base@book{book}
\newcommand\LIMAP@Class@base@letter{letter}
\newcommand\LIMAP@Class@koma@article{scrartcl}
\newcommand\LIMAP@Class@koma@report{scrreprt}
\newcommand\LIMAP@Class@koma@book{scrbook}
\newcommand\LIMAP@Class@koma@letter{scrlettr}
%</class>
%    \end{macrocode}
%
%      \Block{Pass on the unknown options}%
%    \begin{macrocode}
%<*class>
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{%
    \csname LIMAP@Class@\LIMAP@Variant @\LIMAP@ClassType\endcsname}%
  }
%</class>
%    \end{macrocode}
%
%      Thus the class specific options are completed.
%    
%      Now we can process all options. 
%    \begin{macrocode}
\ProcessOptions
%    \end{macrocode}
%
%      \Block{}%
%    \begin{macrocode}
%<*class>
%    \end{macrocode}
%    The requested class is loaded and the options remaining are
%    processed. 
%    \begin{macrocode}
\LoadClass{\csname
  LIMAP@Class@\LIMAP@Variant @\LIMAP@ClassType\endcsname}
%</class>
%    \end{macrocode}
%    \end{Map}
%
%    \begin{Map}{Loading Required Packages}
%
%      \Block{longtable for breakable tables}%
%      The package
%      \href{https://www.ctan.org/pkg/longtable}{longtable} is used
%      internally to implement a part of the required functionality.
%      Thus we need to ensure that it is loaded.
%    \begin{macrocode}
\RequirePackage{longtable}
%    \end{macrocode}
%      \Block{etoolbox}%
%    \begin{macrocode}
\RequirePackage{etoolbox}
%    \end{macrocode}
%
%      \Block{booktabs for nice tables}%
%      The package \href{https://www.ctan.org/pkg/booktabs}{booktabs}
%      is used internally to implement a part of the required
%      functionality. Thus we need to ensure that it is loaded.
%    \begin{macrocode}
\RequirePackage{booktabs}
%    \end{macrocode}
%    
%      \Block{fancyhdr for head and foot lines}%
%    
%    \begin{macrocode}
%<*class>
\RequirePackage{fancyhdr}
\addtolength{\headheight}{2ex}%
\pagestyle{fancy}%
\cfoot{}
\rhead{\small\thepage}
\lhead{\textit{\footnotesize\@title}}
\def\@title{}
%</class>
%    \end{macrocode}
%
%      \Block{No vertical adjustment of pages}%
%      Since the blocks are not supposed to line up at the end of the
%      page we declare |\raggedbottom|.
%    \begin{macrocode}
\raggedbottom
%    \end{macrocode}
%    \end{Map}
%    \end{Map}
%
%    \begin{Map}{Layout Parameters}
%
%      \Block{Overview}%
%      The layout can be influenced by a large number of parameters.
%      Thus the design decisions have been made transparent (to a
%      certain degree at least). These options are not meant to be
%      changed except when a new layout is being designed and
%      implemented.
%
%      \Block{}%
%      \begin{macro}{\MapRuleWidth}
%        The macro |\MapRuleWidth| determines the width of the rules
%        drawn between blocks.
%    \begin{macrocode}
\providecommand\MapRuleWidth{.25pt}
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\MapRuleStart}
%        The macro |\MapRuleStart| is inserted before the rules
%        drawn between blocks.
%    \begin{macrocode}
\newcommand\MapRuleStart{}
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\MapContinued}
%        This macro determines the text to be used in the title of
%        continued maps. This macro is reset when the language
%        specific initializations are performed.
%    \begin{macrocode}
\newcommand\MapContinued{}
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\MapContinuing}
%        The macro |\MapContinuing| determines the text to be used at
%        the bottom of the map which is continued. This macro is reset
%        when the language specific initializations are performed.
%    \begin{macrocode}
\newcommand\MapContinuing{}
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\MapContinuingFormat}
%        This macro determines the format of the bottom line on
%        continued maps. I.e. it includes the text as well as font
%        changing commands. The text is passed to this command as
%        argument 1.
%    \begin{macrocode}
\newcommand\MapContinuingFormat[1]{\textit{\footnotesize #1}}
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\MapContinuedFormat}
%        This macro determines the format of the bottom line on
%        continued maps. I.e. it includes the text passed to it as
%        argument 1 as well as font changing commands.
%    \begin{macrocode}
\newcommand\MapContinuedFormat[1]{, {\MapTitleContinuedFont #1}}
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\MapFont}
%        The macro |\MapFont| determines the font changing command to
%        be used when starting a new map.
%    \begin{macrocode}
\let\MapFont\textsf
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\MapTitleFont}
%        The macro |\MapTitleFont| determines the size changing
%        command to be used when typesetting the title of a map.
%    \begin{macrocode}
\let\MapTitleFont\Large
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\MapTitleContinuedFont}
%        This macro determines the font changing command to be used
%        for typesetting the additional text after titles on followup
%        pages of multipage maps.
%    \begin{macrocode}
\let\MapTitleContinuedFont\small
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\MapBlockLabelFont}
%        This macro determines the font changing command to be used
%        for typesetting the block label.
%    \begin{macrocode}
\def\MapBlockLabelFont{}
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\MapParskip}
%        The macro |\MapParskip| determines the distance of the text
%        from the separating rules.
%    \begin{macrocode}
\newcommand\MapParskip{2ex}
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\MapTitleFraction}
%        The macro |\MapTitleFraction| determines the part of the page
%        width devoted to the title area. It is a fraction in the
%        range from 0 to 1.
%    \begin{macrocode}
\newcommand\MapTitleFraction{.2}
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\MapTextFraction}
%        This macro determines the part of the page width devoted to
%        the text area. It is a fraction in the range from 0 to 1.
%        |\MapTitleFraction| and |\MapTextFraction| should add up to
%        something less or equal to 1. Otherwise you will get some
%        “overfull hbox” messages.
%    \begin{macrocode}
\newcommand\MapTextFraction{.75}
%    \end{macrocode}
%    \end{macro}
%    \end{Map}
%
%    \begin{Map}{Adaptable Macros}
%
%      \Block{Overview}%
%
%      \begin{macro}{\MapNewpage}
%        The macro |\MapNewpage| is expanded whenever a new page is
%        required between maps. Thus it can be used to suppress the
%        newpages by |\let|ing it to |\relax|.
%    \begin{macrocode}
\let\MapNewpage\newpage
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\MapTOC}
%        The macro |\MapTOC| is expanded to generate the entry in the
%        table of contents. It can be redefined to allow another
%        behavior.
%    \begin{macrocode}
\newcommand\MapTOC[1]{%
  \refstepcounter{\@nameuse{Map@TOC@name\the\Map@level}}%
  \addcontentsline{toc}{\@nameuse{Map@TOC@name\the\Map@level}}{#1}%
}
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\MapBlockTOC}
%        The macro |\MapBlockTOC| can be used to add an entry for a
%        block to the table of contents.
%        \changes{2.2}{2017/07/20}{new}
%    \begin{macrocode}
\newcommand\MapBlockTOC[1]{%
  \begingroup\count0=\Map@level \advance\count0 1%
    \addcontentsline{toc}{\@nameuse{Map@TOC@name\the\count0}}{#1}%
  \endgroup
}
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\MapTOCname}
%        The macro |\MapTOCname| contains the heading for the section
%        title in contents blocks. This macro is reset when the
%        language specific initializations are performed.
%    \begin{macrocode}
\newcommand\MapTOCname{}
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\MapTOCpage}
%        The macro |\MapTOCpage| contains the heading for the page
%        number in contents blocks. This macro is reset when the
%        language specific initializations are performed.
%    \begin{macrocode}
\newcommand\MapTOCpage{}
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\MapTOCheadfont}
%        The macro |\MapTOCheadfont| contains the font switching
%        command for typesetting the head line of map table of
%        contents.
%    \begin{macrocode}
\newcommand\MapTOCheadfont{\scriptsize\emph}
%    \end{macrocode}
%      \end{macro}
%    \end{Map}
%
%    \begin{Map}{Internal Macros, Lengths, and Counters}
%
%      \Block{}%
%      This section contains internal macros used to implement the
%      functionality.
%
%      \Block{}%
%      \begin{macro}{\Map@length}
%        The length register |\Map@length| is allocated to store the
%        width of the space between the columns of a block.
%    \begin{macrocode}
\newlength{\Map@length}
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\Map@level}
%        The macro |\Map@level| determines the level of inclusion of
%        maps. It is used to determine the appearance in the table of
%        contents.
%    \begin{macrocode}
\newcount\Map@level
\Map@level=0
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\Map@blockcount}
%        The macro |\Map@blockcount| is used to count the blocks per
%        map to issue a package warning if required.
%    \begin{macrocode}
\newcount\Map@blockcount
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\LT@final@warn}
%        The macro |\LT@final@warn| is defined in |longtable|. It is
%        redefined to show |limap| are originator.
%    \begin{macrocode}
\def\LT@final@warn{%
  \AtEndDocument{%
    \PackageWarning{limap}%
    {Table \@width s have changed. Rerun LaTeX.\@gobbletwo}}%
  \global\let\LT@final@warn\relax}
%    \end{macrocode}
%      \end{macro}
%    \end{Map}
%
%    \begin{Map}{Typesetting a Map}
%
%      \Block{}%
%      \begin{environment}{Map}
%        The environment |Map|determines the appearance of a map. It is
%        implemented as a |longtable| environment which takes care for
%        the page breaks and inserts material at the end of the page
%        and the beginning of the new page upon page break.
%      \end{environment}
%    \begin{macrocode}
\def\Map#1{%
%    \end{macrocode}
%        First the messages of |longtable| are modified to show this
%        package name instead.
%    \begin{macrocode}
  \def\LT@err{\PackageError{limap}}%
  \def\LT@warn{\PackageWarning{limap}}%
%    \end{macrocode}
%      \Block{}%
%        The map local macro |\Block| is
%        activated. The counter for blocks is reset.
%    \begin{macrocode}
  \let\Block\Map@Block
  \let\endBlock\Map@endBlock
  \Map@blockcount=0
%    \end{macrocode}
%      \Block{}%
%      The number of the map in the internal counting is set by
%      incrementing the old value.
%    \begin{macrocode}
  \global\advance\Map@no1
%    \end{macrocode}
%      \Block{}%
%    
%    \begin{macrocode}
  \ifx\Map@UP\empty\else
    \immediate\write\@auxout
      {\string\expandafter\string\xdef\string\csname\space
        Map@parts@\Map@UP\string\endcsname{\string\csname\space 
          Map@parts@\Map@UP\string\endcsname\the\Map@no:}}%
  \fi
%    \end{macrocode}
%      \Block{}%
%    
%    \begin{macrocode}
  \edef\Map@UP{\the\Map@no}%
  \ifnum\Map@level>0
    \xdef\Map@@up{\Map@UP}% Just to save the value across blocks.
    \endgroup
    \Map@end
    \begingroup
    \edef\Map@UP{\Map@@up}%
    \def\@currenvir{Map}%
  \fi
  \edef\Map@this{\the\Map@no}%
%    \end{macrocode}
%      \Block{}%
%      The entries for future use of sub-maps are written to the |aux| file.
%    \begin{macrocode}
  \immediate\write\@auxout
    {\string\global\string\@namedef{Map@parts@\the\Map@no}{}}%
%    \end{macrocode}
%      \Block{}%
%    
%    \begin{macrocode}
  \global\advance\Map@level1
  \def\Map@TITLE{#1}%
  \Map@start
  }
%    \end{macrocode}
%      \Block{}%
%
%    \begin{macrocode}
\def\endMap{%
  \Map@end
  \global\advance\Map@level-1
  \ignorespaces
}
%    \end{macrocode}
%
%      \Block{}%
%      \begin{macro}{\ifMap@open@}
%        The conditional |\ifMap@open@| is used to record the opening
%        and closing of the |longtable| environment, since can not be
%        used inside itself. Thus it can be closed before a new
%        instance is opened.
%    \begin{macrocode}
\newif\ifMap@open@
\Map@open@false
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\Map@TOC@name}
%        The macros |\Map@TOC@name|\dots provide a mapping between a
%        number and a sectioning unit. This mapping is used when the
%        entry in the table of contents is generated.
%    \begin{macrocode}
\@namedef{Map@TOC@name0}{chapter}
\@namedef{Map@TOC@name1}{section}
\@namedef{Map@TOC@name2}{subsection}
\@namedef{Map@TOC@name3}{subsubsection}
\@namedef{Map@TOC@name4}{paragraph}
\@namedef{Map@TOC@name5}{subparagraph}
\@namedef{Map@TOC@name6}{subsubparagraph}
\@namedef{Map@TOC@name7}{subsubparagraph}
\@namedef{Map@TOC@name8}{subsubparagraph}
\@namedef{Map@TOC@name9}{subsubparagraph}
\@namedef{Map@TOC@name10}{subsubparagraph}
\@namedef{Map@TOC@name11}{subsubparagraph}
\@namedef{Map@TOC@name12}{subsubparagraph}
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\Map@start}
%        The macro |\Map@start| is used to initiate the use of a map.
%        It takes no arguments. The map title is passed in via the
%        macro |\Map@TITLE|.
%
%        It uses the |longtable| environment to perform the page
%        breaking and marking of continued pages.
%    \begin{macrocode}
\newcommand\Map@start{%
  \advance\Map@counter1
  \setlength{\Map@length}{\textwidth}%
  \addtolength{\Map@length}{-\MapTitleFraction\textwidth}%
  \addtolength{\Map@length}{-\MapTextFraction\textwidth}%
  \ifx\Map@TITLE\empty\else
    \MapTOC{\Map@TITLE}%
  \fi
  \longtable
    {@{}p{\MapTitleFraction\textwidth}@{\hspace{\Map@length}}
        p{\MapTextFraction\textwidth}@{}}%
      \multicolumn{2}{@{}p{\textwidth}@{}}{%
        \MapFont{\MapTitleFont\rule{0pt}{3ex}%
          \Map@TITLE}}
    \endfirsthead
      \multicolumn{2}{@{}p{\textwidth}@{}}{%
        \MapFont{\MapTitleFont\rule{0pt}{3ex}%
          \Map@TITLE\MapContinuedFormat{\MapContinued}}}%
    \endhead
    \\
      &\MapRuleStart
       \rule{\MapTextFraction\textwidth}{\MapRuleWidth}\newline
       \mbox{}\hfill
       \raisebox{3pt}{\MapContinuingFormat{\MapContinuing}}
    \endfoot
      &\MapRuleStart
       \rule{\MapTextFraction\textwidth}{\MapRuleWidth}%
       \vspace{\MapParskip}
    \endlastfoot
    \xdef\@currentlabel{\Map@TITLE}%
    \label{Map@\the\Map@no}%
    \global\Map@open@true
}
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\Map@end}
%        The macro |\Map@end| is expanded when the end of the end of
%        the |longtable| environment might be needed. The boolean
%        |\ifMap@open@| determines whether such an environment is
%        really open.
%    \begin{macrocode}
\newcommand\Map@end{%
  \ifMap@open@\vspace*{1.5ex}
    \global\Map@open@false
    \endlongtable
    \MapNewpage
  \fi
  \iftrue
   \ifnum\Map@blockcount>9
    \PackageWarning{limap}%
    {*** The current map contains too much blocks:
         \the\Map@blockcount}%
   \else\ifnum\Map@blockcount>7
    \PackageWarning{limap}%
    {--- The current map contains \the\Map@blockcount blocks.}%
   \fi\fi
  \fi
}
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\Map@UP}
%        The macro |\Map@UP| contains the number of the parent map or
%        the empty string.
%    \begin{macrocode}
\newcommand\Map@UP{}
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\Map@no}
%        The counter |\Map@no| contains the sequence number for all
%        maps. This value is used internally to reference single maps.
%    \begin{macrocode}
\newcount\Map@no
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\Map@counter}
%        The counter |\Map@counter| contains the number of a map in
%        the context of the containing map .
%    \begin{macrocode}
\newcount\Map@counter
\Map@counter=0
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\Map@parts@}
%        The macro |\Map@parts@| is used to store the parts of the
%        top-level maps. This is the initialization of a feature
%        otherwise used in the aux file.
%    \begin{macrocode}
\@namedef{Map@parts@}{}
%    \end{macrocode}
%    \end{macro}
%    \end{Map}
%
%    \begin{Map}{Typesetting a Block}
%
%      \Block{}%
%      Blocks are the basic building unit of maps. Here the Block is
%      defined in all it's beauty.
%
%      \begin{environment}{Map@Block}
%        This macro is used to typeset a block inside a Map. To avoid
%        abuse outside of a map it is activated within a Map only.
%        \changes{2.2}{2017/07/20}{|MapBlockStartHook| added.}
%    \begin{macrocode}
\newenvironment{Map@Block}[1]{\par
  \vspace*{-\parskip}\vspace*{-1ex}%
  \\\null\par
  \vspace*{\MapParskip}%
  \raggedright\hspace{0pt}\MapFont{\MapBlockLabelFont{#1}}%
  \gdef\@currentlabel{#1}%
  &\parskip=\MapParskip
  {\MapRuleStart
    \rule{\MapTextFraction\textwidth}{\MapRuleWidth}}\par
    \ifx\@undefined\MapBlockStartHook\else
      \MapBlockStartHook{#1}%
    \fi
%    \end{macrocode}
%
%      The final action is empty. Thus the block can be used as a simple
%      macro as well. 
%    \begin{macrocode}
}{%
}
%    \end{macrocode}
%      \end{environment}
%
%      \Block{}%
%      \begin{macro}{\Block}
%        The macro |\Block| issues an error when used outside of a Map
%        environment.
%    \begin{macrocode}
\newcommand\Block[1]{\PackageWarning{limap}{The sectioning command 
      `Block' has been encountered outside the scope of a Map
      environment.}}
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\WideBlock}
%        The macro |\WideBlock| takes one argument which is added to
%        the current block where the whole width of the table is used.
%    \begin{macrocode}
\newcommand\WideBlock{\\\multicolumn2{@{}l@{}}}
%    \end{macrocode}
%      \end{macro}
%    \end{Map}
%
%    \begin{Map}{Typesetting a Table of Contents}
%
%
%      \Block{}%
%    \begin{macrocode}
\newif\if@Map@toc@sep@
%    \end{macrocode}
%
%      \Block{}%
%      \begin{macro}{\MapTableOfContents@open}
%        The macro |\MapTableOfContents@open| produces the table of
%        contents for the current map. It produces a tabular
%        containing the titles and pages of all maps directly
%        contained in the current map. It utilizes a tabular
%        environment and booktabs.
%    \begin{macrocode}
\def\MapTableOfContents@open{%
  \centering
  \begin{tabular}{p{.6\textwidth}r}\toprule
    \MapTOCheadfont{\MapTOCname}&
    \MapTOCheadfont{\MapTOCpage}\\\midrule
    \ifcsdef{Map@parts@\the\Map@no}{
      \edef\Map@tmp@{\csname Map@parts@\the\Map@no\endcsname:}%
      \expandafter\Map@toc@loop\Map@tmp@
      \\\bottomrule
    }{}
  \end{tabular}
}
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\MapTableOfContents@boxed}
%        The macro |MapTableOfContents@boxed| produces the table of
%        contents for the current map. It produces a tabular
%        containing the titles and pages of all maps directly
%        contained in the current map. It utilizes a tabular
%        environment and booktabs.
%    \begin{macrocode}
\def\MapTableOfContents@boxed{%
  \centering
  \begin{tabular}{|p{.6\textwidth}|r|}\hline
    \MapTOCheadfont{\MapTOCname}&
    \MapTOCheadfont{\MapTOCpage}\\\hline
    \ifcsdef{Map@parts@\the\Map@no}{
      \edef\Map@tmp@{\csname Map@parts@\the\Map@no\endcsname:}%
      \expandafter\Map@toc@loop\Map@tmp@
      \\\hline
    }{}
  \end{tabular}
}
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\MapTableOfContentsStyle}
%        The macro |MapTableOfContentsStyle| determines the style of
%        the TOCs. It can take the values |open| or |boxed|.
%    \begin{macrocode}
\newcommand\MapTableOfContentsStyle{open}
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\MapTableOfContents}
%        The macro |MapTableOfContents| produces the table of
%        contents for the current map. It produces a tabular
%        containing the titles and pages of all maps directly
%        contained in the current map.
%    \begin{macrocode}
\newcommand\MapTableOfContents{\par
  \global\@Map@toc@sep@false
  \csname MapTableOfContents@\MapTableOfContentsStyle\endcsname
  \vspace*{-1.5\parskip}\par\ignorespaces
}
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{macro}{\Map@toc@loop}
%        The macro |\Map@toc@loop| is a recursive solution to loop
%        through all elements of a list of children. The argment is
%        expected to be a colon separated list of numbers. The end is
%        marked by two colons in row.
%
%        Each number is a reference to a map. The respective line in
%        the toc table is produced.
%    \begin{macrocode}
\def\Map@toc@loop#1:{%
  \def\Map@tmp@{#1}%
  \ifx\Map@tmp@\empty
    \global\let\Map@next@=\relax
  \else
    \if@Map@toc@sep@
    \gdef\Map@next@{\\
    \ref{Map@#1}&\pageref{Map@#1}%
    \Map@toc@loop}%
    \else
    \gdef\Map@next@{%
    \ref{Map@#1}&\pageref{Map@#1}%
    \Map@toc@loop}%
    \global\@Map@toc@sep@true
    \fi
  \fi
  \Map@next@
}
%    \end{macrocode}
%    \end{macro}
%    \end{Map}
%
%    \begin{Map}{Typesetting a Table}
%
%      \Block{}%
%      \begin{macro}{\MapTabularFraction}
%        The macro |\MapTabularFraction| contains a factor for the line
%        width. This is used to determine the width of the table. The
%        tabular is centered in the text column.
%    \begin{macrocode}
\newcommand\MapTabularFraction{.95}
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{environment}{MapTabular}
%        The environment |MapTabular| produces the |tabular| environment
%        with the width of the text column.
%    \begin{macrocode}
\newenvironment{MapTabular}{%
  \begin{center}
    \begin{tabular*}{\MapTabularFraction\linewidth}%
}{%
    \end{tabular*}
  \end{center}\ignorespaces
}
%    \end{macrocode}
%    \end{environment}
%    \end{Map}
%
%    \begin{Map}{Typesetting the Title Page}
%
%      \Block{}%
%      \begin{macro}{\MakeTitle}
%        The macro |\MakeTitle| can be used as a replacement for the
%        |\maketitle| macro.
%    \begin{macrocode}
\newcommand\MakeTitle{\thispagestyle{empty}
  \rule{0pt}{.25\textheight}\par
  \mbox{}\hfill
  \begin{minipage}{\MapTextFraction\textwidth}
    \raggedright
    \rule{\textwidth}{2pt}\par
    \vspace*{2.5\MapParskip}%
    \sf{\huge \@title\par}%
    \vspace*{2.5\MapParskip}%
    \rule{\textwidth}{2pt}\par
    \vspace*{2.5\MapParskip}%
    \MapFont{\large \@author}	\par
    \vspace*{2.5\MapParskip}%
    \MapFont{\footnotesize \@date}
    \vspace*{\MapParskip}%
  \end{minipage}%
  \vspace*{-22ex}%
  \par
}
%    \end{macrocode}
%      \end{macro}
%
%      \Block{}%
%      \begin{environment}{Abstract}
%        This macro is used to typeset the abstract.
%    \begin{macrocode}
\newenvironment{Abstract}{\vfill
  \par
  \mbox{}\hfill
  \begin{minipage}{\MapTextFraction\textwidth}\parskip=1ex
    \rule{\textwidth}{1pt}\medskip\par
%    \end{macrocode}
%
%    \begin{macrocode}
}{\par\rule{\textwidth}{1pt}
  \end{minipage}%
  \par
}
%    \end{macrocode}
%      \end{environment}
%
%      \Block{Use maketitle and abstract}%
%      The new |\maketitle| macro is activated for the class.
%
%    \begin{macrocode}
%<*class>
\let\maketitle\MakeTitle
\let\abstract\Abstract
\let\endabstract\endAbstract
%</class>
%    \end{macrocode}
%    \end{Map}
%
%    \begin{Map}{Final Actions}
%
%      \Block{Local configuration}%
%      Load the configuration file at the end if it can be found.
%    \begin{macrocode}
\InputIfFileExists{limap.cfg}{}{}
%    \end{macrocode}
%
%      \Block{}%
%      Finally we have to activate the proper settings for the chosen
%      language.
%    \begin{macrocode}
\csname LIMAP@SelectLanguage@\LIMAP@Language\endcsname
%    \end{macrocode}
%
%    \begin{macrocode}
\ifLIMAP@strict
  \def\chapter{\PackageWarning{limap}{The sectioning command 
      `chapter' is not available.}}
%  \def\section{\PackageWarning{limap}{The sectioning command 
%      `section' is not available.}}
  \def\subsection{\PackageWarning{limap}{The sectioning command
      `subsection' is not available.}}
  \def\subsubsection{\PackageWarning{limap}{The sectioning command
      `subsubsection' is not available.}}
  \def\paragraph{\PackageWarning{limap}{The sectioning command
      `paragraph' is not available.}}
  \def\subparagraph{\PackageWarning{limap}{The sectioning command
      `subparagraph' is not available.}}
  \def\subsubparagraph{\PackageWarning{limap}{The sectioning command
      `subsubparagraph' is not available.}}
\fi
%    \end{macrocode}
%
%      \Block{Finale}%
%      That's all for this time.
%    \end{Map}
%    \end{Map}
%    \end{Map}
%
%    \Finale
%
\endinput
%
% Local Variables: 
% mode: latex
% TeX-master: "limap.dtx"
% End: 
