% \iffalse ********************************************* METACOMMENT
%
%                   TeX this file with LaTeX2e !
%
%       The following files will be written:
%
%       ==> xword.dvi       Documentation (read this first)
%
%       --> xword.sty       package file
%
%% Copyright :  Kai-Uwe Bux
%% ---------    Norderneystra�e 26
%%              D-26419 Schortens/Heidm�hle (Germany)
%%
%% *****************************************************************
% >>>>>>>>>  !! Proliferation of UNCHANGED versions of !!  <<<<<<<<<
%            !! this file is permitted                 !!
%
% >>>>>>>>>  !! Don't change this file without changing !! <<<<<<<<<
%            !! it's name                               !!
% ******************************************************************
%
%    \begin{macrocode}
\def\FileVersion{$\alpha$-Test}
\def\FileDate{1999/08/25}
\def\FileDescription{Kreuzwortr�tsel}
%    \end{macrocode}
%
% ********************************************** END METACOMMENT \fi
%
% \CheckSum{523}
%
% \iffalse ********************************************* METACOMMENT
%    \begin{macrocode}
%<*driver>
\NeedsTeXFormat{LaTeX2e}[1998/06/01]
\let\ThisVersion\FileVersion
\let\ThisDate\FileDate
%</driver>
%    \end{macrocode}
% ********************************************** END METACOMMENT \fi
%
% \iffalse ******************************************** METATCOMMENT
%
%   Dieser Abschnitt erscheint nicht in der Dokumentation
%
%   \Section{Installation}
%     Was jetzt kommt, ist ein wenig trickreich, da wir diese
%     Datei zugleich als DocStrip-Batch benutzen m"ussen.
%     Das hei"st, wir m"ussen daf"ur sorgen, da"s sie auch
%     bei zeilenweiser Bearbeitung sinnvoll bleibt.
%    \begin{macrocode}
%<*installation>
\ifx\undefined\batchfile\begingroup\newtoks\List\fi
  \def\batchfile{xword.dtx}
  \makeatletter
  \let\@@end=\relax
  \List={}
\def\File#1#2{\List=\expandafter{\the\List\file{#1}{\from{xword.dtx}{#2}}}}
  \File{xword.sty}{xword}
\def\G{\expandafter\expandafter\expandafter\generate\expandafter{\the\List}}
  \def\GenerateAll{\G\let\GenerateAll\relax}
  \def\StopInput{\endinput\let\StopInput\relax}
  \input docstrip.tex
  \GenerateAll
  \StopInput
\endgroup
%    \end{macrocode}
%     Jetzt liegen die folgenden Dateien vor:
%     \begin{enumerate}
%       \item \file{xword.sty}
%     \end{enumerate}
%     Diese Dateien geh"oren allesamt in ein Verzeichnis,
%     wo \TeX\ nach Paketen sucht.
%
%     Jetzt basteln wir uns noch das Inhaltsverzeichnis und die
%     Hilfsdatei zusammen, damit nachher ein \LaTeX-Lauf reicht.
%    \begin{macroccode}
\begin{filecontents}{xword.toc}
\IfFileExists{babel.sty}{%
  \select@language {german}
}{}
\contentsline {section}{\numberline {1}Die Benutzerschnittstelle}{2}
\contentsline {subsection}{\numberline {1.1}Einbindung}{2}
\contentsline {subsection}{\numberline {1.2}Parameter}{2}
\contentsline {subsection}{\numberline {1.3}Makros und Umgebungen}{2}
\contentsline {subsubsection}{\numberline {1.3.1}Vorbemerkung}{2}
\contentsline {subsubsection}{\numberline {1.3.2}Eingabe des Kreuzwortr"atsels}{2}
\contentsline {subsubsection}{\numberline {1.3.3}Das Gitter}{3}
\contentsline {subsubsection}{\numberline {1.3.4}Die Umschreibungen}{4}
\contentsline {subsubsection}{\numberline {1.3.5}Die Auf{\kern 0pt}l"osung}{4}
\contentsline {section}{\numberline {2}Die Implementierung}{6}
\end{filecontents}
\begin{filecontents}{xword.aux}
\relax 
\IfFileExists{babel.sty}{%
  \select@language{german}
  \@writefile{toc}{\select@language{german}}
  \@writefile{lof}{\select@language{german}}
  \@writefile{lot}{\select@language{german}}
}{}
\@writefile{toc}{\contentsline {section}{\numberline {1}Die Benutzerschnittstelle}{2}}
\@writefile{toc}{\contentsline {subsection}{\numberline {1.1}Einbindung}{2}}
\@writefile{toc}{\contentsline {subsection}{\numberline {1.2}Parameter}{2}}
\@writefile{toc}{\contentsline {subsection}{\numberline {1.3}Makros und Umgebungen}{2}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {1.3.1}Vorbemerkung}{2}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {1.3.2}Eingabe des Kreuzwortr"atsels}{2}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {1.3.3}Das Gitter}{3}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {1.3.4}Die Umschreibungen}{4}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {1.3.5}Die Auf{\kern 0pt}l"osung}{4}}
\@writefile{toc}{\contentsline {section}{\numberline {2}Die Implementierung}{6}}
\end{filecontents}
%</installation>
%    \end{macrocode}
%
% ********************************************** END METACOMMENT \fi
% 
% \iffalse ********************************************* METACOMMENT
%
% Dieser Abschnitt erscheint nicht in der Dokumentation
%
%   \Section{Die Erzeugung der Dokumentation}
%     Nun liegen also alle Dateien vor. Jetzt sollte die Beschreibung
%     erfolgen. Zum Gl"uck k"onnen wir die Pakete schon benutzen.
%
%    \begin{macrocode}
%<*driver>
\documentclass[12pt]{ltxdoc}
  \IfFileExists{babel.sty}{%
    \usepackage[german]{babel}
  }{%
    \usepackage{german}
  }
  \usepackage{xword}
  
  \newcommand{\pkg}[1]{\textsf{#1}}
  \newcommand{\cls}[1]{\textsf{#1}}
  \newcommand{\file}[1]{\texttt{#1}}
  \newcommand{\env}[1]{\texttt{#1}}
  \newcommand{\opt}[1]{\textsf{#1}}
  \newcommand{\sect}[1]{{#1}}
  \newcommand{\sty}[1]{\emph{#1}}
  \newcommand{\ARG}[1]{\emph{#1}}
  \newcommand{\GobbleOne}[1]{}
  \newcommand{\Section}{\newpage\section}
  \newcommand{\finalnopagebreak}{\nopagebreak}
  \newcommand{\finalpagebreak}{\pagebreak}
  \OnlyDescription
\begin{document}
  \title{Kreuzwortr"atsel mit \LaTeX\\
         Das \pkg{xword}-Paket}
  \author{Kai-Uwe Bux}
  \date{\begin{tabular}{ll}
           Datum:   & \ThisDate\\
           Version: & \ThisVersion
        \end{tabular}}
  \maketitle\thispagestyle{empty}\newpage
  \setcounter{page}{1}\tableofcontents
  \DocInput{xword.dtx}
\end{document}
%</driver>
%    \end{macrocode}
%
% ********************************************** END METACOMMENT \fi
%
% \Section{Die Benutzerschnittstelle}
%   \subsection{Einbindung}
%     Das \pkg{xword}-Paket kennt keine Optionen. Daher bindet
%     man es einfach mit
%     \begin{verbatim}
%       \usepackage{xword}
%     \end{verbatim}
%     in der Pr"aambel eines \LaTeX-Dokumentes ein.
%
%   \subsection{Parameter}
%     Das \pkg{xword}-Paket definiert einen L"angenparameter:
%     \begin{verbatim}
%       \XwordGridWidth
%     \end{verbatim}
%     Er gibt die Breite an, in der Kreuzwortr"atsel und ihre
%     L"osungen gesetzt werden.
%     Der Benutzer kann ihn mit |\setlength| ver"andern, das
%     Paket gibt als Wert die Textbreite des Satzspiegels
%     (|\textwidth|) vor.
%
%   \subsection{Makros und Umgebungen}
%     \subsubsection{Vorbemerkung}
%       Alle Makros und Umgebungen haben genau ein optionales
%       Argument, das dazu dient, ein Kreuzwortr"atsel unter
%       einem bestimmten Namen zu definieren. Dies ist f"ur Dokumente
%       n"otig, die mehr als ein Kreuzwortr"atsel enthalten.
%
%     \subsubsection{Eingabe des Kreuzwortr"atsels}
%       Die Angaben, die ein Kreuzwortr"atsel erfordert, sind
%       \begin{itemize}
%         \item das rechteckige Feld von Buchstaben und geschw"arzten Feldern,
%         \item die Felder, die nummeriert werden m"ussen,
%               weil dort ein Wort anf"angt, und
%         \item die Umschreibungen der einzelnen W"orter.
%       \end{itemize}
%       Das \pkg{xword}-Paket stellt die \env{xword}-Umgebung zur
%       Verf"ugung, mit deren Hilfe, diese Angaben eingegeben werden k"onnen.
%       F"ur jedes nummerierte Wort mu� ein Eintrag angegeben werden, der
%       die Koordinaten des Feldes angibt. Die allgemeine Syntax eines
%       Eintrages ist
%       \begin{quote}
%         |\entry(|\ARG{spalte}|,|\ARG{zeile}|)| \ldots\ |\endentry|
%       \end{quote}
%       Der hier ausgelassene Teil enth"alt Angaben "uber die W"orter,
%       waagerecht wie senkrecht, die in diesem Feld anfangen:
%       \begin{quote}
%         |\acr{|\ARG{waagerechtes Wort}|}{|\ARG{Umschreibung}|}|\\
%         |\dwn{|\ARG{senkrechtes Wort}|}{|\ARG{Umschreibung}|}|
%       \end{quote}
%
%       Ein kleines Beispiel wird das klar machen:
%       \begin{verbatim}
%         \begin{xword}[beispiel]
%           \entry(1,1)\dwn{DTX}{Extension dieser Datei.}\endentry
%           \entry(1,2)\acr{TEX}{Unser aller Lieblingsprogramm.}\endentry
%         \end{xword}
%       \end{verbatim}
%       \begin{xword}[beispiel]
%         \entry(1,1)\dwn{DTX}{Extension dieser Datei.}\endentry
%         \entry(2,1)\acr{TEX}{Unser aller Lieblingsprogramm.}\endentry
%       \end{xword}
%       Durch dieses Konstrukt wird ein Kreuzwortr"atsel unter dem
%       Namen ">beispiel"< definiert. Mit sp"ater behandelten Makros
%       kann f"ur dieses Kreuzwortr"atsel das Gitter, die Umschreibungen
%       und seine L"osung gesetzt werden.
%
%       \textbf{Hinweis:} Beim Lesen dieser Umgebung, legt \LaTeX\ eine
%       Reihe von Hilfsdateien an. Diese werden bei erneutem \TeX{}en
%       allerdings nur dann "uberschrieben, wenn die \file{.aux}-Datei
%       gel"oscht wird. Das spart bei Dokumenten, die mehrere Durchl"aufe
%       ben"otigen, Zeit. Es f"uhrt aber dazu, da� �nderungen im
%       Kreuzwortr"atsel nur ber"ucksichtigt werden, wenn man die
%       \file{.aux}-Datei hernach l"oscht.
%
%     \subsubsection{Das Gitter}
%       Das Makro |\XwordPrintGrid| setzt das eigentliche Kreuzwortr"atsel.
%       Also, um bei unserem Beispiel zu bleiben,
%       \begin{verbatim}
%         \setlength{\XwordGridWidth}{3cm}%
%         \begin{center}
%           \XwordPrintGrid[beispiel]
%         \end{center}
%       \end{verbatim}
%       liefert
%       \setlength{\XwordGridWidth}{3cm}%
%       \begin{center}
%         \XwordPrintGrid[beispiel]
%       \end{center}
%
%     \subsubsection{Die Umschreibungen}
%       Umschreibungen werden durch |\XwordPrintClues| gedruckt:
%       \begin{verbatim}
%         \par\noindent\XwordPrintClues[beispiel]
%       \end{verbatim}
%       liefert
%       \par\noindent\XwordPrintClues[beispiel]
%
%       Man kann mit |\XwordRef| auf eine Umschreibung verweisen.
%       Dabei dient das umschriebene Wort als Label. Mit
%       \begin{verbatim}
%         \XwordRef[beispiel]{TEX}
%       \end{verbatim}
%       erzeugt man also den Hinweis auf den
%       Eintrag~\XwordRef[beispiel]{TEX}.
%       Dieses Makro kann "ubrigens auch in den Umschreibungen
%       Verwendet werden, was eine gewisse Selbstbez"uglichkeit des
%       Kreuzwortr"atsels erschafft.
%
%     \subsubsection{Die Auf{\kern0pt}l"osung}
%       Schlie�lich kann man mit |\XwordPrintSolution| die L"osung
%       setzen:
%       \begin{verbatim}
%         \setlength{\XwordGridWidth}{3cm}%
%         \begin{center}
%           \XwordPrintSolution[beispiel]
%         \end{center}
%       \end{verbatim}
%       Das ergibt
%       \setlength{\XwordGridWidth}{3cm}%
%       \begin{center}
%         \XwordPrintSolution[beispiel]
%       \end{center}
%
%
% \Section{Die Implementierung}
%   Dieser Abschnitt ist nicht dokumentiert.
% \StopEventually{}
%    \begin{macrocode}
%<*xword>
\NeedsTeXFormat{LaTeX2e}[1998/06/01]
\ProvidesPackage{xword}[\FileDate LaTeX Kreuzwortraetsel Paket]
\RequirePackage{ifthen}
\newcounter{rowposition}
\newcounter{colposition}
\newcounter{rowlength}
\newcounter{collength}
\newcounter{lastrowpos}
\newcounter{lastcolpos}
\newcounter{maxrowpos}
\newcounter{maxcolpos}
\newcounter{entrycntr}
\newwrite{\xword@grd}
\newwrite{\xword@acr}
\newwrite{\xword@dwn}
\newwrite{\xword@ref}
\newlength{\XwordGridWidth}
\setlength{\XwordGridWidth}{\textwidth}

  \newcommand{\xword@size}{%
    \string\xword@setsize{\current@xword}{\arabic{maxcolpos}}{\arabic{maxrowpos}}%
  }%

\newcommand{\@xword}[1]{%
  \typeout{Entering xword ``#1''.}%
  \def\protect{\string\protect\string}
  \ignorespaces
  \immediate\openout\xword@grd #1.grd
  \immediate\openout\xword@acr #1.acr
  \immediate\openout\xword@dwn #1.dwn
  \immediate\openout\xword@ref #1.ref
  \setcounter{lastrowpos}{0}%
  \setcounter{lastcolpos}{0}%
  \setcounter{maxrowpos}{0}%
  \setcounter{maxcolpos}{0}%
  \setcounter{entrycntr}{0}%
  \newcommand{\entry}{%
    \begingroup
      \xword@catcodes
    \expandafter\endgroup\entr@
  }%
    \newcommand{\xword@catcodes}{%
       \@tempcnta=128
       \loop\ifnum\@tempcnta<256
         \catcode\@tempcnta=12
         \advance\@tempcnta\@ne
       \repeat
%       \catcode`\~=12
       \catcode`\"=12
    }%
  \def\entr@(##1,##2)##3\endentry{%
    \addtocounter{entrycntr}{1}%
    \setcounter{colposition}{##1}%
    \setcounter{rowposition}{##2}%
    \ifthenelse{ \value{lastcolpos} > \value{colposition} }{%
      \OrderingError
    }{%
      \ifthenelse{ \( \value{lastcolpos} = \value{colposition} \)
                   \and
                   \not \( \value{lastrowpos} < \value{rowposition} \) }{%
        \OrderingError
      }{%
        \@namedef{ent@\roman{rowposition}:\roman{colposition}}{}%
        \setcounter{lastrowpos}{\value{rowposition}}%
        \setcounter{lastcolpos}{\value{colposition}}%
        \entryok{##1}{##2}{##3}%
      }%
    }%
  }%
    \newcommand{\ErrorPos}{    Entry Nr. \arabic{entrycntr},
      Field (\arabic{lastcolpos},\arabic{lastrowpos})%
    }
    \newcommand{\OrderingError}{%
      \typeout{\ErrorPos: Order Error}%
    }%
    \newcommand{\entryok}[3]{%
      ##3%
    }%
  \newcommand{\acr}{%
    \@ifnextchar[{\@acr}{\@acr[\xword@argtwo]}%
  }
  \def\@acr[##1]##2##3{%
    \def\xword@argtwo{##2}%
    \setcounter{colposition}{\value{lastcolpos}}%
    \rowdef ##2\end
    \setcounter{rowlength}{\value{rowposition}}%
    \addtocounter{rowlength}{-\value{lastrowpos}}%
    \ifthenelse{ \value{maxrowpos} > \value{rowposition} }{%
    }{%
      \setcounter{maxrowpos}{\value{rowposition}}%
    }%
    \write@entry{acr}{##1}{##2}{##3}{\arabic{rowlength}}%
  }
  \newcommand{\dwn}{%
    \@ifnextchar[{\@dwn}{\@dwn[\xword@argtwo]}%
  }
  \def\@dwn[##1]##2##3{%
    \def\xword@argtwo{##2}%
    \setcounter{colposition}{\value{lastcolpos}}%
    \setcounter{rowposition}{\value{lastrowpos}}%
    \coldef ##2\end
    \setcounter{collength}{\value{colposition}}%
    \addtocounter{collength}{-\value{lastcolpos}}%
    \ifthenelse{ \value{maxcolpos} > \value{colposition} }{%
    }{%
      \setcounter{maxcolpos}{\value{colposition}}%
    }%
    \write@entry{dwn}{##1}{##2}{##3}{\arabic{collength}}%
  }%
    \newcommand{\rowdef}[1]{% increments <rowposition> by length of <word> !
      \def\@tempa{##1}%
      \def\@tempb{\end}%
      \ifx\@tempa\@tempb
        \let\next\relax
      \else
        \fielddef{rowposition}{colposition}{##1}%
        \addtocounter{rowposition}{1}%
        \def\next{\rowdef}%
      \fi
      \next
    }%
    \newcommand{\coldef}[1]{%
      \def\@tempa{##1}%
      \def\@tempb{\end}%
      \ifx\@tempa\@tempb
        \let\next\relax
      \else
        \fielddef{rowposition}{colposition}{##1}%
        \addtocounter{colposition}{1}%
        \def\next{\coldef}%
      \fi
      \next
    }%
    \newcommand{\fielddef}[3]{%
      \@ifundefined{xword@\roman{##1}:\roman{##2}}{%
        \@namedef{xword@\roman{##1}:\roman{##2}}{##3}%
%        \typeout{Field (\arabic{##1},\arabic{##2}) --> ##3}%
      }{%
        \def\@tempa{##3}%
        \edef\@tempb{\csname xword@\roman{##1}:\roman{##2}\endcsname}%
        \ifx\@tempa\@tempb
        \else
          \CrosswordError{##1}{##2}{##3}%
        \fi
      }%
    }%
      \newcommand{\CrosswordError}[3]{%
        \typeout{%
          \ErrorPos:
          Letter mistaken (\arabic{##1},\arabic{##2}) -->%
          \@nameuse{xword@\roman{##1}:\roman{##2}} - ##3%
        }%
      }%
  \newcommand{\write@entry}[5]{%
%    \typeout{\space\space{##1}{##2}{##3}{##4}{##5}}
    \immediate\write\xword@ref{\string\xword@label{#1}{##2}{\arabic{entrycntr}}{##1}}
    \immediate\write\csname xword@##1\endcsname{%
      \string\entryline
      {\arabic{entrycntr}}%
      {\arabic{lastcolpos}}%
      {\arabic{lastrowpos}}%
      {##5}{##3}{##4}{##1}%
    }%
  }%
    \newcommand{\PrintField}[2]{%
      \@ifundefined{xword@\roman{##1}:\roman{##2}}{%
        \immediate\write\xword@grd{\string\xword@black}%
      }{%
        \@ifundefined{ent@\roman{##1}:\roman{##2}}{%
          \immediate\write\xword@grd{\string\xword@white{\@nameuse{xword@\roman{##1}:\roman{##2}}}}%
        }{%
          \immediate\write\xword@grd{\string\xword@entry{\@nameuse{xword@\roman{##1}:\roman{##2}}}}%
        }%
      }%
    }%
  \newcommand{\@end@xword}{%
    \setcounter{colposition}{1}%
    \whiledo{ \value{colposition} < \value{maxcolpos} }{%
      \setcounter{rowposition}{1}%
      \whiledo{ \value{rowposition} < \value{maxrowpos} }{%
        \PrintField{rowposition}{colposition}%
        \addtocounter{rowposition}{1}%
      }%
      \addtocounter{colposition}{1}%
      \ifthenelse{ \value{colposition} < \value{maxcolpos} }{%
        \immediate\write\xword@grd{\string\par}%
      }{%
        \immediate\write\xword@grd{\string\endinput}%
      }%
    }%
    \addtocounter{maxcolpos}{-1}%
    \addtocounter{maxrowpos}{-1}%
    \immediate\write\@auxout{\xword@size}
    \immediate\closeout\xword@grd
    \immediate\closeout\xword@acr
    \immediate\closeout\xword@dwn
    \immediate\closeout\xword@ref
    \typeout{Size: \arabic{maxcolpos} columns x \arabic{maxrowpos} rows}%
    \typeout{Number of entries: \arabic{entrycntr}}%
    \typeout{Leaving xword.}%
  }%
}


\newenvironment{xword}[1][\jobname]{%
  \def\current@xword{#1}%
  \@ifundefined{xword@#1@size}{\@xword{#1}}{%
    \@nameuse{xword@#1@size}%
    \immediate\write\@auxout{\xword@size}%
    \def\entry##1\endentry{\relax}%
  }%
}{%
  \@ifundefined{xword@\current@xword @size}{\@end@xword}{%
  }%
}%

  \newcommand{\xword@square}[1]{%
    \begingroup
      \setbox2=\hbox{%
       \fbox{%
          \parbox[b][\dimen4][c]{\dimen2}{%
            \makebox[\dimen2][c]{%
              #1%
            }%
          }%
        }%
      }%
      \parbox[b][\dimen4][c]{\dimen2}{%
        \makebox[\dimen2][c]{\box2}%
      }%
    \endgroup
    \ignorespaces
  }%

  \newcommand{\xword@gridstart}[1]{%
    \makeatletter
    \@nameuse{xword@#1@size}%
    \addtolength{\XwordGridWidth}{-\fboxrule}%
    \setlength{\fboxsep}{-0.5\fboxrule}%
    \dimen2=\XwordGridWidth
    \divide\dimen2 by \value{maxrowpos}%
    \dimen4=\dimen2
    \xword@adjust
    \setcounter{entrycntr}{0}%
    \setbox2=\hbox{\parbox[b]{\XwordGridWidth}{%
      \baselineskip=0pt
      \lineskip=0pt
      \lineskiplimit=0pt
      \parskip=0pt
      \parindent=0pt
      \InputIfFileExists{#1.grd}{}{}%
    }}%
    \addtolength{\XwordGridWidth}{\fboxrule}%
    \raisebox{\depth}{%
      \makebox[\XwordGridWidth][c]{\box2}%
    }%
  }%

\newcommand{\XwordPrintGrid}[1][\jobname]{%
  \begingroup
    \typeout{Generating the grid of xword ``#1''\space ...}%
    \newcommand{\xword@black}{%
      \xword@square{\rule{\dimen2}{\dimen4}}%
    }%
    \newcommand{\xword@white}[1]{%
      \xword@square{}%
    }%
    \newcommand{\xword@entry}[1]{%
      \addtocounter{entrycntr}{1}%
      \xword@square{%
        \parbox[t][\dimen4][t]{\dimen2}{%
          \vspace*{1pt}%
          \hspace*{1pt}\footnotesize\arabic{entrycntr}%
        }%
      }%
    }%
    \newcommand{\xword@adjust}{%
      \ifthenelse{ \lengthtest{ \dimen4 > 12mm } }{%
        \dimen4=12mm%
      }{}%
      \ifthenelse{ \lengthtest{ \dimen4 < 8mm } }{%
        \dimen4=8mm%
      }{}%
    }%
    \xword@gridstart{#1}%
  \endgroup
}%

\newcommand{\XwordPrintSolution}[1][\jobname]{%
  \begingroup
    \typeout{Printing the solution of xword ``#1''\space ...}%
    \newcommand{\xword@black}{%
      \xword@square{\rule{\dimen2}{\dimen4}}%
    }%
    \newcommand{\xword@white}{\xword@entry}%
    \newcommand{\xword@entry}[1]{%
      \xword@square{##1}%
    }%
    \newcommand{\xword@adjust}{\relax}%
    \xword@gridstart{#1}%
  \endgroup
}%

\newcommand{\XwordPrintClues}[1][\jobname]{%
  \begingroup
    \makeatletter
    \typeout{Printing the clues for xword ``#1''\space ...}%
    \newcommand{\entryline}[7]{%
      ##1)~##6
    }%
    \noindent\textbf{Waagerecht:}
    \InputIfFileExists{#1.acr}{}{}
    \medskip
    \par
    \noindent\textbf{Senkrecht:}
    \InputIfFileExists{#1.dwn}{}{}
  \endgroup
}%

\newcommand{\xword@label}[4]{%
  \expandafter\gdef\csname xword@#1@#2@label\endcsname{\xword@printref{#3}{#4}}%
  \ignorespaces
}%
\newcommand{\xword@refload}[1]{%
  \@ifundefined{xword@ref@#1@loaded}{%
    \@namedef{xword@ref@#1@loaded}{}%
    \begingroup
      \makeatletter
      \InputIfFileExists{#1.ref}{}{}%
    \endgroup
  }{}%
}
\newcommand{\xword@printref}[2]{%
  \begingroup
    \def\acr{w}%
    \def\dwn{s}%
    #1\csname #2\endcsname)%
  \endgroup
}
\DeclareRobustCommand{\XwordRef}[2][\jobname]{%
  \xword@refload{#1}%
  \@nameuse{xword@#1@#2@label}%
}

\newcommand{\xword@setsize}[3]{%
  \expandafter\gdef\csname xword@#1@size\endcsname{%
    \setcounter{maxcolpos}{#2}%
    \setcounter{maxrowpos}{#3}%
  }%
}%
%</xword>
%    \end{macrocode}
%
% \iffalse ********************************************* METACOMMENT
% Die folgende Section erscheint nicht in der Dokumentation!
% ------------------------------------------------------------------
% \Section{Die CharacterTable}
%   Das hier dient nur dazu, die CharacterTable aus den generierten
%   Dateien rauszuhalten.
%    \begin{macrocode}
%<*installation>
\endinput
%</installation>
%    \end{macrocode}
%   |\endinput| veranla"st |\generateFile| zum Abbruch der
%   Bearbeitung.
% ------------------------------------------------------------------
% ********************************************** END METACOMMENT \fi
%
%% \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         \~}
%%
% \Finale
