% \CheckSum{907}
% \iffalse meta-comment
% 
% ============================================================================
% 
%  TUD-Script
%  Copyright (c) Falk Hanisch <tudscr@gmail.com>, 2012-2016
% 
% ============================================================================
% 
%  This work may be distributed and/or modified under the conditions of the
%  LaTeX Project Public License, version 1.3c of the license. The latest
%  version of this license is in http://www.latex-project.org/lppl.txt and 
%  version 1.3c or later is part of all distributions of LaTeX 2005/12/01
%  or later and of this work. This work has the LPPL maintenance status 
%  "author-maintained". The current maintainer and author of this work
%  is Falk Hanisch.
% 
% ----------------------------------------------------------------------------
% 
%  Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz
%  in der Version 1.3c, verteilt und/oder veraendert werden. Die aktuelle 
%  Version dieser Lizenz ist http://www.latex-project.org/lppl.txt und 
%  Version 1.3c oder spaeter ist Teil aller Verteilungen von LaTeX 2005/12/01 
%  oder spaeter und dieses Werks. Dieses Werk hat den LPPL-Verwaltungs-Status 
%  "author-maintained", wird somit allein durch den Autor verwaltet. Der 
%  aktuelle Verwalter und Autor dieses Werkes ist Falk Hanisch.
% 
% ============================================================================
%
% \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         \~}
%
% \iffalse
%%% From File: tudscr-misc.dtx
%<*driver>
\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi
\ProvidesFile{tudscr-misc.dtx}[%
  2016/09/22 v2.05d TUD-Script (miscellaneous)%
]
\RequirePackage[ngerman=ngerman-x-latest]{hyphsubst}
\documentclass[english,ngerman,xindy]{tudscrdoc}
\usepackage{selinput}\SelectInputMappings{adieresis={ä},germandbls={ß}}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{tudscrfonts} % only load this package, if the fonts are installed
\KOMAoptions{parskip=half-}
\usepackage{microtype}
\usepackage{bookmark}
\CodelineIndex
\RecordChanges
\GetFileInfo{tudscr-misc.dtx}
\begin{document}
  \maketitle
  \DocInput{\filename}
\end{document}
%</driver>
% \fi
%
% \selectlanguage{ngerman}
%
% \changes{v2.02}{2014/06/23}{Paket \pkg{titlepage} nicht weiter unterstützt}^^A
% \changes{v2.02}{2014/07/08}{\cs{FamilyKeyState} wird von Optionen genutzt}^^A
% \changes{v2.05}{2015/07/06}{Bugfix für \pkg{multicol}}^^A
%
% \section{Verschiedenes für das \TUDScript-Bundle}
%
% Alles, wofür sich eine separate Datei nicht lohnt, landet hier.
%
% \StopEventually{\PrintIndex\PrintChanges\PrintToDos}
%
% \iffalse
%<*!xindy>
% \fi
%
% \subsection{Sukkzessives Abarbeiten von Layoutoptionen im Dokument}
%
% Werden mit \cs{TUDoptions} nach \cs{begin\{document\}} mehrere Layoutoptionen 
% gleichzeitig angegeben, muss dafür Sorge getragen werden, dass diese in der 
% korrekten Reihenfolge abgearbeitet werden. 
%
% Das Makro \cs{TUD@SpecialOptionAtDocument} kann innerhalb von \cs{TUD@key} 
% verwendet werden, um einen im obligatorischen Argument angegebenen Schalter 
% zu aktivieren. Dabei wird über \cs{tud@atdocument@hook} garantiert, dass der 
% Befehl \cs{tud@atdocument@process}, welcher für die Abarbeitung der einzelnen 
% Makros in der richtigen Reihenfolge verantwortlich ist, lediglich einmal über 
% \cs{AtEndOfFamilyOptions} ausgeführt wird.
% \ToDo{%
%   Problem bei \cs{TUDoptions} mit \cs{AtEndOfFamilyOptions} beheben
% }[v2.06]
% \ToDo{Überarbeiten: \cs{AtEndOfOuterFamilyOptions}}[v3.22]
%
% \begin{macro}{\TUD@SpecialOptionAtDocument}
% \changes{v2.05}{2016/06/14}{neu}^^A
% \begin{macro}{\tud@atdocument@hook}
% \changes{v2.05}{2016/06/14}{neu}^^A
%    \begin{macrocode}
%<*execute&(class&!inherit|package&fonts)>
\newcommand*\TUD@SpecialOptionAtDocument[1]{}
%</execute&(class&!inherit|package&fonts)>
%<*body>
\newcommand*\tud@atdocument@hook{}
\let\tud@atdocument@hook\relax
\AtBeginDocument{%
  \renewcommand*\TUD@SpecialOptionAtDocument[1]{%
    \ifx\tud@atdocument@hook\relax%
      \gdef\tud@atdocument@hook{\global\let\tud@atdocument@hook\relax}%
      \AtEndOfFamilyOptions{%
        \tud@atdocument@hook%
        \tud@atdocument@process%
      }%
    \fi%
    \gappto\tud@atdocument@hook{\global\booltrue{@#1}}%
  }%
}
%</body>
%    \end{macrocode}
% \end{macro}^^A \tud@atdocument@hook
% \end{macro}^^A \TUD@SpecialOptionAtDocument
%
% \iffalse
%<*body>
% \fi
%
% \begin{macro}{\tud@atdocument@process}
% \changes{v2.05}{2016/06/14}{neu}^^A
% \begin{macro}{\if@tud@font@set}
% \changes{v2.05}{2016/06/14}{neu}^^A
% \begin{macro}{\if@tud@font@math@set}
% \changes{v2.05}{2016/06/14}{neu}^^A
% \begin{macro}{\if@tud@font@skip@set}
% \changes{v2.05}{2016/06/14}{neu}^^A
% \begin{macro}{\if@tud@x@scr@headings@reset}
% \changes{v2.05}{2016/06/14}{neu}^^A
% \begin{macro}{\if@tud@layout@process}
% \changes{v2.05}{2016/06/14}{neu}^^A
% \begin{macro}{\if@tud@cdgeometry@process}
% \changes{v2.05}{2016/06/14}{neu}^^A
% \begin{macro}{\if@tud@cdgeometry@@process}
% \changes{v2.05}{2016/06/14}{neu}^^A
% Das Makro \cs{tud@atdocument@process} wird im Dokument ausgeführt, wenn 
% mindestens eine Option gesetzt wurde, welche \cs{TUD@SpecialOptionAtDocument} 
% verwendet. Je nachdem, welche Schalter insgesamt aktiviert wurden, werden die 
% dazugehörigen Befehle für die Einstellungen von Schriften, Layout und/oder 
% Satzspiegel in der richtigen Reihenfolge ausgeführt.
%    \begin{macrocode}
\newif\if@tud@font@set
\newif\if@tud@font@math@set
\newif\if@tud@font@skip@set
\newif\if@tud@x@scr@headings@reset
\newif\if@tud@layout@process
\newif\if@tud@cdgeometry@process
\newif\if@tud@cdgeometry@@process
\newcommand*\tud@atdocument@process{%
  \if@tud@font@set%
    \tud@font@set%
    \global\@tud@font@setfalse%
    \global\@tud@font@math@setfalse%
    \global\@tud@font@skip@setfalse%
    \global\@tud@layout@processfalse%
  \fi%
  \if@tud@font@math@set%
    \tud@font@math@set%
    \global\@tud@font@math@setfalse%
  \fi%
  \if@tud@font@skip@set%
    \tud@font@skip@set%
    \global\@tud@font@skip@setfalse%
  \fi%
%<*class>
  \if@tud@x@scr@headings@reset%
    \tud@x@scr@headings@reset%
    \global\@tud@x@scr@headings@resetfalse%
    \global\@tud@layout@processfalse%
  \fi%
  \if@tud@layout@process%
    \tud@layout@process%
    \global\@tud@layout@processfalse%
  \fi%
  \if@tud@cdgeometry@process%
    \tud@cdgeometry@process%
    \global\@tud@cdgeometry@processfalse%
    \global\@tud@cdgeometry@@processfalse%
  \fi%
  \if@tud@cdgeometry@@process%
    \tud@cdgeometry@@process%
    \global\@tud@cdgeometry@@processfalse%
  \fi%
%</class>
}
%    \end{macrocode}
% \end{macro}^^A \if@tud@cdgeometry@@process
% \end{macro}^^A \if@tud@cdgeometry@process
% \end{macro}^^A \if@tud@layout@process
% \end{macro}^^A \if@tud@x@scr@headings@reset
% \end{macro}^^A \if@tud@font@skip@set
% \end{macro}^^A \if@tud@font@math@set
% \end{macro}^^A \if@tud@font@set
% \end{macro}^^A \tud@atdocument@process
%
% \iffalse
%</body>
%<*class&option>
% \fi
%
% \subsection{Papierformat und Schriftgröße}
%
% Insbesondere für Poster aber auch für alle anderen \TUDScript-Klassen wird
% überprüft, ob nach einer Änderung des Standardpapierformates auch die
% Schriftgröße durch den Anwender angepasst wurde. Diese wird jedoch nicht auf
% Plausibilität geprüft, da der Aufwand hierfür relativ hoch wäre. Vielmehr 
% wird davon ausgegangen, dass die explizite Angabe der Schriftgröße bewusst 
% und dem Papierformat sowie den verwendeten Textspalten entsprechend erfolgt.
%
% Die nachfolgend definierten Optionen und Befehle orientieren sich dabei stark 
% an internen \KOMAScript-Makros.
% \ToDo{%
%   Wie mit \opt{layout} von \pkg{geometry} umgehen? Wann Papierformat prüfen?
%   Vielleicht mit \cs{KOMAoptionOf\{paper\}} prüfen? Oder ganz raus?
% }[v2.06]
%
% \begin{option}{paper}
% \changes{v2.05}{2015/07/24}{neu}^^A
% \begin{macro}{\if@tud@x@scr@paper@set}
% \changes{v2.05}{2015/07/24}{neu}^^A
% Da die \KOMAScript-Option \opt{paper} eine Menge an Einstellmöglichkeiten 
% bietet, müssen die relevanten hier abgefangen werden.
%    \begin{macrocode}
\newif\if@tud@x@scr@paper@set
\TUD@key{paper}{%
  \tud@lowerstring{\@tempa}{#1}%
%    \end{macrocode}
% Sowohl ISO/DIN-Formate\dots
%    \begin{macrocode}
  \def\@tempb##1##2\@nil{%
    \@tempswafalse%
    \if ##1a\@tempswatrue%
      \else\if ##1b\@tempswatrue%
        \else\if ##1c\@tempswatrue%
          \else\if ##1d\@tempswatrue%
    \fi\fi\fi\fi%
    \if@tempswa%
      \ifnumber{##2}{}{\@tempswafalse}%
    \fi%
  }%
  \expandafter\@tempb\@tempa\@nil%
%    \end{macrocode}
% \dots als auch frei gewählte Papierformate werden erkannt.
%    \begin{macrocode}
  \if@tempswa\else%
    \def\@tempb##1:##2:##3\@nil{%
      \edef\@tempc{##1}%
      \ifx\@tempc\@empty\@tempswafalse\else%
        \edef\@tempc{##2}%
        \ifx\@tempc\@empty\@tempswafalse\else\@tempswatrue\fi%
      \fi%
    }%
    \expandafter\@tempb\@tempa::\@nil%
  \fi%
%    \end{macrocode}
% Die Standardpapiergröße spielt allerdings keine Rolle für eine Warnung.
%    \begin{macrocode}
  \@tud@x@scr@paper@setfalse%
  \if@tempswa%
    \ifstr{\@tempa}{a4}{}{\@tud@x@scr@paper@settrue}%
    \FamilyKeyStateProcessed%
  \else%
    \FamilyKeyStateUnknownValue%
  \fi%
}
%    \end{macrocode}
% \end{macro}^^A \if@tud@x@scr@paper@set
% \end{option}^^A paper
% \begin{option}{fontsize}
% \changes{v2.05}{2015/07/24}{neu}^^A
% \begin{macro}{\if@tud@fontsize@set}
% \changes{v2.05}{2015/07/24}{neu}^^A
% Bei der Schriftgröße ist das bloße Erkennen und Weiterreichen der Option an 
% die Klasse ausreichend.
%    \begin{macrocode}
\newif\if@tud@fontsize@set
\TUD@key{fontsize}{%
  \@tud@fontsize@settrue%
  \PassOptionsToClass{fontsize=#1}{\TUD@Class@KOMA}%
  \FamilyKeyStateProcessed%
}
%    \end{macrocode}
% \end{macro}^^A \if@tud@fontsize@set
% \end{option}^^A fontsize
% Die Schlüssel sollen lediglich beim Laden der Dokumentklasse die angegebenen 
% Optionen abfangen. Wurde das Papierformat jedoch nicht die Schriftgröße 
% geändert, wird nun eine Warnung erzeugt.
% \ToDo{%
%   Warnung überarbeiten erst zu Dokumentbeginn prüfen, \opt{layout} beachten!%
% }[v2.06]
%    \begin{macrocode}
\AtEndOfClass{%
  \RelaxFamilyKey{TUD}{paper}%
  \RelaxFamilyKey{TUD}{fontsize}%
  \ifboolexpr{bool {@tud@x@scr@paper@set} or bool {@landscape}}{%
    \if@tud@fontsize@set\else%
      \ClassWarningNoLine{\TUD@Class@Name}{%
        You've set a paper size, which is different from\MessageBreak%
        default (paper=a4, paper=portrait). Therefore you\MessageBreak%
        should additionally specify an explicit font size.\MessageBreak%
        See the manual for further information.%
      }%
    \fi%
  }{}%
}
%    \end{macrocode}
%
% \iffalse
%</class&option>
%<*class&execute&!inherit>
% \fi
%
% \begin{macro}{\tud@x@scr@paper}
% \changes{v2.05}{2015/07/24}{neu}^^A
% \begin{macro}{\tud@x@scr@@paper}
% \changes{v2.05}{2015/07/24}{neu}^^A
% Um die Änderung des Papierformats auch über die \LaTeX-Standardoptionen wie 
% beispielsweise \opt{a5paper} abfangen zu können, müssen auch die äquivalent 
% zu \KOMAScript{} ausgewertet werden.
%    \begin{macrocode}
\newcommand*\tud@x@scr@paper{%
  \expandafter\tud@x@scr@@paper\CurrentOption paper\tud@x@scr@@paper%
}
\newcommand*\tud@x@scr@@paper{}
\def\tud@x@scr@@paper #1#2paper#3\tud@x@scr@@paper{%
  \@tempswafalse%
  \ifstr{#3}{paper}{\ifnumber{#2}{%
    \ifstr{#1}{a}{\@tempswatrue}{%
    \ifstr{#1}{b}{\@tempswatrue}{%
    \ifstr{#1}{c}{\@tempswatrue}{%
    \ifstr{#1}{d}{\@tempswatrue}{%
    }}}}%
  }{}}{}%
  \if@tempswa\TUDExecuteOptions{#3=#1#2}\fi%
  \PassOptionsToClass{\CurrentOption}{\TUD@Class@KOMA}%
}
%    \end{macrocode}
% \end{macro}^^A \tud@x@scr@@paper
% \end{macro}^^A \tud@x@scr@paper
%
% \iffalse
%</class&execute&!inherit>
%<*class&option>
% \fi
%
% \subsection{Sprungmarken}
%
% \begin{option}{tudbookmarks}
% \begin{macro}{\if@tud@bookmarks}
% Wird das Paket \pkg{hyperref} geladen, so kann die Option \opt{tudbookmarks}
% genutzt werden, um zu steuern, ob für Titel und Inhaltsverzeichnis
% automatisch ein Eintrag für die Sprungmarken erzeugt werden soll.
%    \begin{macrocode}
\newif\if@tud@bookmarks
\TUD@ifkey{tudbookmarks}{@tud@bookmarks}
%    \end{macrocode}
% \end{macro}^^A \if@tud@bookmarks
% \end{option}^^A tudbookmarks
%
% \iffalse
%</class&option>
%<*class&body>
% \fi
%
% \begin{macro}{\tudbookmark}
% \begin{macro}{\tud@x@hyperref@realfootnotes}
% Die Befehle zum Eintragen der Sprungmarken. Im Dokument kann auch der Befehl
% \cs{tudbookmark} vom Anwender genutzt werden, um manuell weitere Lesezeichen
% zu erzeugen.
%
% Für die Titelseite werden~-- wie auch durch das Paket \pkg{hyperref}~-- die 
% Fußnoten mit dem Befehl \cs{tud@x@hyperref@realfootnotes} auf den originalen 
% Zustand zurückgesetzt.
%    \begin{macrocode}
\newcommand*\tudbookmark[1][]{\@gobbletwo}
\newcommand*\tud@x@hyperref@realfootnotes{}
\AfterPackage{hyperref}{%
  \renewcommand*\tudbookmark[3][]{%
    \relax%
    \if@tud@bookmarks%
      \phantomsection%
      \ifblank{#1}{\pdfbookmark{#2}{#3}}{\pdfbookmark[#1]{#2}{#3}}%
    \fi%
  }%
  \renewcommand*\tud@x@hyperref@realfootnotes{%
    \let\Hy@saved@footnotemark\@footnotemark%
    \let\Hy@saved@footnotetext\@footnotetext%
    \let\@footnotemark\H@@footnotemark%
    \let\@footnotetext\H@@footnotetext%
  }%
  \pdfstringdefDisableCommands{\let\NoCaseChange\@firstofone}%
}
%    \end{macrocode}
% \end{macro}^^A \tud@x@hyperref@realfootnotes
% \end{macro}^^A \tudbookmark
% \begin{macro}{\tud@x@bookmark@startatroot}
% \changes{v2.05}{2015/08/05}{neu}^^A
% Wird das Paket \pkg{bookmark} geladen, können die erzeugten Outlines gezielt 
% auf der obersten Ebene erzeugt werden.
%    \begin{macrocode}
\newcommand*\tud@x@bookmark@startatroot{\relax}
\AfterPackage{bookmark}{%
  \renewcommand*\tud@x@bookmark@startatroot{%
    \if@tud@bookmarks\bookmarksetup{startatroot}\fi%
  }%
}
%    \end{macrocode}
% \end{macro}^^A \tud@x@bookmark@startatroot
% \begin{environment}{titlepage}
% \changes{v2.05}{2015/08/05}{neu}^^A
% \begin{macro}{\@maketitle}
% \changes{v2.05}{2015/08/05}{neu}^^A
% \begin{macro}{\tud@make@titlehead}
% \changes{v2.05}{2015/08/05}{neu}^^A
% Ist die Option \opt{tudbookmarks} aktiviert, werden für Umschlag- und 
% Titelseite PDF"=Lesezeichen bzw. Outline-Einträge erzeugt.
%    \begin{macrocode}
%<*book|report|article>
\apptocmd{\titlepage}{%
  \tud@x@bookmark@startatroot%
  \if@tud@cover%
    \tudbookmark[%
%<book|report>    0%
%<article>    1%
    ]{\coverpagename}{cover}%
  \else%
    \tudbookmark[%
%<book|report>    0%
%<article>    1%
    ]{\titlepagename}{title}%
  \fi%
}{}{\tud@patch@wrn{titlepage}}
%</book|report|article>
%    \end{macrocode}
% Dies geschieht außerdem auch für die Titelköpfe.
%    \begin{macrocode}
\pretocmd{\tud@make@titlehead}{%
  \tud@x@bookmark@startatroot%
  \tudbookmark[%
%<book|report>  0%
%<article|poster>  1%
  ]{\titlename}{title}%
}{}{\tud@patch@wrn{tud@make@titlehead}}
\pretocmd{\@maketitle}{%
  \tud@x@bookmark@startatroot%
  \tudbookmark[%
%<book|report>  0%
%<article|poster>  1%
  ]{\titlename}{title}%
}{}{\tud@patch@wrn{@maketitle}}
%    \end{macrocode}
% \end{macro}^^A \tud@make@titlehead
% \end{macro}^^A \@maketitle
% \end{environment}^^A titlepage
% \begin{macro}{\tableofcontents}
% \begin{macro}{\listoffigures}
% \begin{macro}{\listoftables}
% Für die Verzeichnisse geschieht dies auch. Für das Inhaltsverzeichnis ist 
% hierfür etwas mehr Aufwand notwendig. Für dieses wird im Normalfall keine 
% PDF-Outline erzeugt. Deshalb ist hier ein wenig Trickserei notwendig, um zwar 
% einen Outline-Eintrag für das Inhaltsverzeichnis zu erzeugen, dieses dabei
% aber nicht in sich selbst einzutragen.
%    \begin{macrocode}
\BeforeTOCHead[toc]{%
  \tud@x@bookmark@startatroot%
  \let\@tempc\relax%
  \iftocfeature{toc}{totoc}{}{%
    \if@tud@bookmarks%
      \setuptoc{toc}{totoc}%
      \tud@cmd@store{addtocontents}%
      \def\@tempc{%
        \unsettoc{toc}{totoc}%
        \tud@cmd@restore{addtocontents}%
      }%
      \let\addtocontents\@gobbletwo%
    \fi%
  }%
}
\AfterTOCHead[toc]{\@tempc}
\BeforeTOCHead[lof]{\tud@x@bookmark@startatroot}
\BeforeTOCHead[lot]{\tud@x@bookmark@startatroot}
%    \end{macrocode}
% \end{macro}^^A \listoftables
% \end{macro}^^A \listoffigures
% \end{macro}^^A \tableofcontents
%
% \subsection{Bugfixing für das Paket \pkg{tocloft}}
%
% Das Paket \pkg{tocloft} verursacht allerlei Probleme. Wird es geladen, so 
% erscheint eine entsprechende Warnung.
%    \begin{macrocode}
\BeforePackage{tocloft}{%
  \ClassWarningNoLine{\TUD@Class@Name}{%
    It is absolutely not recommended to use package\MessageBreak%
    `tocloft'. Loading the package will certainly lead\MessageBreak%
    to problems with table of contents and any list of\MessageBreak%
    floats. You should use the appropriate options of\MessageBreak%
    the KOMA-Script classes%
  }%
}
%    \end{macrocode}
%
% \iffalse
%</class&body>
%<*class&option>
% \fi
%
% \subsection{Fußnoten in Überschriften}
%
% \begin{option}{footnotes}
% \changes{v2.02}{2014/06/27}{neu}^^A
% \begin{macro}{\if@tud@symbolheadings}
% \changes{v2.02}{2014/06/27}{neu}^^A
% Die \KOMAScript-Option \opt{footnotes} wird um den Schlüssel 
% \val{symbolheadings} erweitert, mit welchem eingestellt werden kann, ob in den
% Überschriften Symbole für die Fußnoten anstelle von Zahlen verwendet werden
% sollen.
% \ToDo{\opt{footnotes=symbolheadings} komplett überarbeiten}[v2.06]
%    \begin{macrocode}
\newif\if@tud@symbolheadings
\TUD@key{footnotes}{%
  \TUD@set@numkey{footnotes}{@tempa}{%
    {nosymbolheadings}{0},{numberheadings}{0},%
    {symbolheadings}{1}%
  }{#1}%
  \ifx\FamilyKeyState\FamilyKeyStateProcessed%
    \ifcase\@tempa\relax% nosymbolheadings
      \@tud@symbolheadingsfalse%
    \or% symbolheadings
      \@tud@symbolheadingstrue%
    \fi%
  \fi%
}
%    \end{macrocode}
% \end{macro}^^A \if@tud@symbolheadings
% \end{option}^^A footnotes
% \begin{counter}{symbolheadings}
% \changes{v2.02}{2014/06/27}{neu}^^A
% Dieser Zähler wird bei aktivierter Option \opt{footnotes=symbolheadings} für 
% die Symboleauswahl von Fußnoten in Überschirften inkrementiert.
%    \begin{macrocode}
\AtEndOfClass{%
%<book|report>  \newcounter{symbolheadings}[chapter]
%<article|poster>  \newcounter{symbolheadings}
}
%    \end{macrocode}
% \end{counter}^^A symbolheadings
%
% \iffalse
%</class&option>
%<*body>
% \fi
%
% \begin{macro}{\tud@x@textcase@uclcnotmath}
% \changes{v2.02}{2014/06/27}{\pkg{textcase}: Ignorieren von Fußnoten im 
%   Argument des Befehls \cs{MakeTextUppercase}}^^A
% \changes{v2.03}{2015/01/21}{\pkg{textcase}: Ignorieren des Befehls 
%   \cs{@mkboth} im Argument des Befehls \cs{MakeTextUppercase}}^^A
% \begin{macro}{\@uclcnotmath}
% Damit Fußnoten nicht automatisch in Majuskeln gesetzt werden, wird der
% interne Befehl \cs{@uclcnotmath} aus dem Paket \pkg{textcase} angepasst.
%    \begin{macrocode}
\CheckCommand*\@uclcnotmath[4]{%
  \begingroup
    #1%
    \def\({$}\let\)\(%
    \def\NoCaseChange##1{\noexpand\NoCaseChange{\noexpand##1}}%
    \@nonchangecase\label
    \@nonchangecase\ref
    \@nonchangecase\ensuremath
    \def\cite##1##{\toks@{\noexpand\cite##1}\@citex}%
    \def\@citex##1{\NoCaseChange{\the\toks@{##1}}}%
    \def\reserved@a##1##2{\let#2\reserved@a}%
    \expandafter\reserved@a\@uclclist\reserved@b{\reserved@b\@gobble}%
    \protected@edef\reserved@a{%
      \endgroup
      \noexpand\@skipmath#3#4$\valign$%
    }%
  \reserved@a%
}
\newcommand*\tud@x@textcase@uclcnotmath{%
  \def\footnote##1##{\toks@{\noexpand\footnote##1}\@footnote}%
  \def\@footnote##1{\NoCaseChange{\the\toks@{##1}}}%
  \def\@mkboth##1##2{\NoCaseChange{\@mkboth{##1}{##2}}}%
}
\patchcmd{\@uclcnotmath}{\@nonchangecase\ensuremath}{%
  \@nonchangecase\ensuremath\tud@x@textcase@uclcnotmath%
}{}{\tud@patch@wrn{@uclcnotmath}}
%    \end{macrocode}
% \end{macro}^^A \@uclcnotmath
% \end{macro}^^A \tud@x@textcase@uclcnotmath
%
% \iffalse
%</body>
%<*execute>
% \fi
%
% \subsection{Durchreichen von Optionen und Standardoptionen}
%
% Durchreichen aller Klassenoptionen an die \KOMAScript-Klasse bzw. an die
% genutzte \TUDScript-Elternklasse. Für Klassen wird vor dem Durchreichen noch 
% geprüft, ob ein spezielles Papierformat angegeben wurde.
%    \begin{macrocode}
%<class&!inherit>\DeclareOption*{\tud@x@scr@paper}
%<*class&inherit>
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{\TUD@Class@Parent}}
%</class&inherit>
%<package&fonts>\DeclareOption*{\KOMAoptions{\CurrentOption}}
%<package&comp>\DeclareOption*{\TUDoptions{\CurrentOption}}
%    \end{macrocode}
% Es werden die Standardoptionen ausgeführt. Für die Klasse \cls{tudscrposter} 
% werden die Farben aktiviert.
%    \begin{macrocode}
%<*class&!inherit>
\TUDExecuteOptions{%
%<book|report|article>  cd=true,relspacing=true,tudbookmarks=true%
%<poster>  cd=bicolor,relspacing=true,tudbookmarks=false,cdfont=ultrabold%
}
%</class&!inherit>
%<*package&tutorial>
\KOMAoptions{headings=small}
\TUDoptions{cdfoot=true}
\TUDExecuteOptions{ToDo=true}
%</package&tutorial>
\TUDProcessOptions\relax
%    \end{macrocode}
% Die korrespindierende \KOMAScript-Klasse bzw. \TUDScript-Elternklasse wird 
% geladen.
%    \begin{macrocode}
%<*class&!inherit>
\LoadClass{\TUD@Class@KOMA}[2015/04/23]
%</class&!inherit>
%<*class&inherit>
\LoadClass{\TUD@Class@Parent}
%</class&inherit>
%    \end{macrocode}
%
% \iffalse
%</execute>
%</!xindy>
%<*xindy>
% \fi
%
% \subsection{Stildateien für \texorpdfstring{\app{texindy}}{texindy}}
%
% Für die Dokumentationsklassen und -pakete wird zur Sortierung \app{texindy} 
% verwendet. Da das Programm die die Dateien nicht in einem \val{TEXPATH} nach 
% den Stildateien sucht, werden diese zur Laufzeit im Arbeitsverzeichnis 
% erstellt. Nachfolgend wird die zu erstellenden \app{texindy}-Stildatei kurz
% beschrieben.
% \begin{macro}{\@hashchar}
% \changes{v2.05}{2016/04/25}{neu}^^A
% Das Hash-Zeichen.
%    \begin{macrocode}
%<*doc>
\catcode`\#=12
\newcommand*\@hashchar{#}
\catcode`\#=6
%</doc>
%    \end{macrocode}
% \begin{macro}{\tud@lst@def}
% \changes{v2.05}{2016/04/25}{neu}^^A
% \begin{macro}{\tud@lst@values}
% \changes{v2.05}{2016/04/25}{neu}^^A
% \begin{macro}{\if@tud@lst@multi}
% \changes{v2.05}{2016/04/25}{neu}^^A
% \begin{macro}{\tud@lst@init}
% \changes{v2.05}{2016/04/25}{neu}^^A
% \begin{macro}{\tud@lst@add}
% \changes{v2.05}{2016/04/25}{neu}^^A
% \begin{macro}{\tud@lst@process}
% \changes{v2.05}{2016/04/25}{neu}^^A
% Für die Änderungsliste in \cls{tudscrdoc} wird bei der Beschreibung von 
% Einträgen nur dann eine dritte Ebene verwendet, wenn es einem Eintrag mehrere 
% Angaben existieren. Sollte nur eine Anmerkung vorhanden sein, wird diese 
% direkt in der zweiten Ebene nach dem Eintrag selbst ausgegeben.
%    \begin{macrocode}
%<*doc>
\newcommand*\tud@lst@def{%
  \newcommand*\tud@lst@values{}%
  \newif\if@tud@lst@multi%
  \newcommand*\tud@lst@init{%
    \let\tud@lst@values\relax%
    \@tud@lst@multifalse%
  }%
  \newcommand*\tud@lst@add[1]{%
    \ifx\tud@lst@values\relax\else%
      \@tud@lst@multitrue%
    \fi%
    \listadd\tud@lst@values{##1}%
  }%
  \newcommand*\tud@lst@process{%
    \def\tud@reserved{}%
    \if@tud@lst@multi%
      \def\tud@reserved{\subsubitem}%
      \efill%
    \fi%
    \forlistloop\tud@reserved{\tud@lst@values}%
  }%
}
%</doc>
%    \end{macrocode}
% \end{macro}^^A \tud@lst@process
% \end{macro}^^A \tud@lst@add
% \end{macro}^^A \tud@lst@init
% \end{macro}^^A \if@tud@lst@multi
% \end{macro}^^A \tud@lst@values
% \end{macro}^^A \tud@lst@def
% \end{macro}^^A \@hashchar
% \begin{macro}{\tud@xdy@create}
% \changes{v2.05}{2016/04/24}{neu}^^A
% \begin{macro}{\tud@write@xdy}
% \changes{v2.05}{2016/04/24}{neu}^^A
% \begin{macro}{\if@tud@xdy@glo}
% \changes{v2.05}{2016/04/25}{neu}^^A
% Dies sind die Hilfsmakros für die Erzeugung der notwendigen Dateien.
%    \begin{macrocode}
\begingroup
%<doc>\ifdef{\tudxdyflag}{%
\newcommand*\tud@write@xdy{}
\newwrite\tud@write@xdy
\newif\if@tud@xdy@glo
\newcommand*\tud@xdy@create[2][theindex]{%
  \IfFileExists{\@currname-#2.xdy}{}{%
  \ifstr{#1}{theglossary}{\@tud@xdy@glotrue}{\@tud@xdy@glofalse}%
  \openout\tud@write@xdy=\@currname-#2.xdy\relax%
%    \end{macrocode}
% Als erstes wird Standard-\LaTeX-Modul geladen.
%    \begin{macrocode}
  \write\tud@write@xdy{(require "texindy.xdy")}%
%    \end{macrocode}
%
% \subsubsection{Defintion der verwendeten Umgebung}
%
% Für die Klasse \cls{tudscrdoc} sind zwei sehr ähnliche Stildateien notwendig. 
% Die beiden unterschieden sich lediglich in der verwendeten Umgebung.
% \begingroup%
% \makeatletter%
% \@bsphack\scan@allowedfalse\@esphack%
% \makeatother%
%    \begin{macrocode}
%<*doc>
  \write\tud@write@xdy{%
    (markup-index^^J%
    \space\space:open^^J%
    "\string\begin{#1}^^J%
    \space\space%
    \string\providecommand*\string\lettergroupDefault[1]{\@percentchar^^J%
    \@spaces\string\par%
    \string\centerline{\string\textbf{\string\textsf{Symbole}}}%
    \string\par\@percentchar^^J%
    \@spaces\string\nopagebreak\@percentchar^^J%
    \space\space}\@percentchar^^J%
    \space\space%
    \string\providecommand*\string\lettergroup[1]{\@percentchar^^J%
    \@spaces\string\par%
    \string\centerline{\string\textbf{\string\textsf{\@hashchar1}}}%
    \string\par\@percentchar^^J%
    \@spaces\string\nopagebreak\@percentchar^^J%
    \space\space}\@percentchar^^J%
    \space\space\string\makeatletter\@percentchar^^J%
    \space\space\string\scan@allowedfalse\@percentchar%
  }%
%    \end{macrocode}
% Für die Änderungsliste erfolgt die GRuppierung anhand der Versionsnummer. Da 
% diese auf der ersten Ebene angegeben ist (\cs{item}) muss das Ganze mit einem 
% terminierten Befehl erfolgen. Hierfür wird \cs{@lettergroup} definiert. 
% Außerdem werden mit \cs{tud@lst@def} die benötigten Befehle zur selektiven 
% Anzeige der Änderungseinträge definiert.
%    \begin{macrocode}
  \if@tud@xdy@glo%
  \write\tud@write@xdy{%
    \space\space\string\newcommand*\string\@lettergroup{}\@percentchar^^J%
    \space\space%
    \string\def\string\@lettergroup\@hashchar1\string\relax%
    {\string\lettergroup{\@hashchar1}}\@percentchar^^J%
    \space\space\string\tud@lst@def\@percentchar%
  }%
  \fi%
%    \end{macrocode}
% Der Abschluss der Umgebungsdefinition.
%    \begin{macrocode}
  \write\tud@write@xdy{%
    "^^J%
    \space\space:close "\string~n\string~n\string\end{#1}\string~n"^^J%
    \space\space:hierdepth 3^^J%
    )%
  }%
%</doc>
%    \end{macrocode}
%
% \subsubsection{Defintion und Markup der Seitenzahlen}
%
% Leider lässt sich für Seitenzahlbereiche via \val{:attr} (noch) kein Markup 
% für angehängte \enquote{f.} sowie \enquote{ff.} einstellen. Diese würden 
% deshalb bei kursiven oder fetten Seitenzahlen trotzdem in normaler Schrift
% erscheinen, weshalb auf die Auszeichnung folgender Seiten verzichtet wird.
%    \begin{macrocode}
%^^A  \write\tud@write@xdy{(require "ff-ranges.xdy")}%
%    \end{macrocode}
% Seitenbereiche werden sofort zusammengefasst, wobei als Trennzeichen ein
% Halbgeviertstrich verwendet wird. Für \cls{tudscrdoc} werden die Seitenzahlen 
% beim Einbinden der einzelnen \file{dtx}-Dateien mit einem alphanumerischen 
% Präfix versehen, wofür eine eigene \val{location-class} erstellt wird.
%    \begin{macrocode}
  \write\tud@write@xdy{%
    (define-location-class^^J%
    \space\space"arabic-page-numbers" ("arabic-numbers")%
    \space:min-range-length 1^^J%
    )^^J%
%<*doc>
    (define-alphabet "AlphaExtended"^^J%
    \space(^^J%
    \space\space"A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M"^^J%
    \space\space"N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"^^J%
    \space\space"a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m"^^J%
    \space\space"n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"^^J%
    \space\space"?"^^J%
    \space)^^J%
    )^^J%
    (define-location-class^^J%
    \space\space"part" ("AlphaExtended" :sep "-" "arabic-numbers")%
    \space:min-range-length 1^^J%
    )^^J%
%</doc>
    (markup-range :sep "--")%
  }%
%    \end{macrocode}
%
% \subsubsection{Markup des Füllbereichs zwischen Eintrag und Seitenzahlen}
%
% Punkte zwischen Eintrag und Seitenzahl. Das schließende \cs{relax} wird für 
% die smarte Definition des Befehls \cs{cleversee} benötigt, welcher nach den 
% beiden obligatorischen Argument die nachfolgenden Seitenzahlen sucht und 
% dabei durch \cs{relax} begrenzt wird. Für die Klasse \cls{tudscrdoc} wird in
% der Änderungsliste der Hyperlink für die Seitenzahl respektive die Codezeile 
% direkt erzeugt.
%    \begin{macrocode}
%<*doc>
  \if@tud@xdy@glo%
  \write\tud@write@xdy{%
    (markup-locclass-list%
    \space:open "\string\pfill\string\hypersourceref{" :close "}\string\relax"%
    )%
  }%
  \else%
%</doc>
  \write\tud@write@xdy{%
    (markup-locclass-list%
%<!doc>    \space:open "\string\,\string\dotfill\string\,"%
%<doc>    \space:open "\string\pfill\space"%
    \space:close "\string\relax"%
    )%
  }%
%<doc>  \fi%
%    \end{macrocode}
%
% \subsubsection{Ignorieren von bestimmten Anteilen bei der Sortierung}
%
% Alle Argumente in eckigen Klammern werden ignoriert. Dies wird bei einigen
% Indexbefehlen genutzt, um die nicht beachteten RegExp-Regeln auszugleichen, 
% siehe den nächsten Absatz. In der Klasse \cls{tudscrdoc} werden außerdem ein 
% oder mehrere vorangestellte \val{@}-Zeichen ignoriert.
%    \begin{macrocode}
  \write\tud@write@xdy{%
    (merge-rule "\@backslashchar[(.*)\@backslashchar]" "" :eregexp)%
%<*doc>
    ^^J%
    (merge-rule%
    \space"\string^(@+)([\string^@~n]*)"%
    \space"\string\2\string~e\string\1"%
    \space:eregexp :again%
    )^^J%
    (merge-rule%
    \space"(.*)(@@@@)([\string^@~n]*)"%
    \space"\string\1@@@\string\3\string~e"%
    \space:again :eregexp%
    )^^J%
    (merge-rule%
    \space"(.*)(@@@)([\string^@~n]*)"%
    \space"\string\1@@\string\3\string~e"%
    \space:again :eregexp%
    )^^J%
    (merge-rule%
    \space"(.*)(@@)([\string^@~n]*)"%
    \space"\string\1@\string\3\string~e"%
    \space:eregexp :again%
    )^^J%
    (merge-rule%
    \space"(.*?)(@)([\string^@~n]*)"%
    \space"\string\1\string~b\string\3"%
    \space:eregexp :again%
    )
%</doc>
  }%
%    \end{macrocode}
% Innerhalb ausgewählter Auszeichnungs- und Textbefehle sollten die Befehle
% selbst, nicht jedoch die Argumente verworfen werden. Leider werden die 
% manuell erstellten RegExp-Regeln durch \app{texindy} zu spät genutzt 
% (\url{http://sourceforge.net/p/xindy/bugs/22/}).
%    \begin{macrocode}
%<*!doc>
%^^A  \write\tud@write@xdy{%
%^^A    (merge-rule "\\hologo\{(.*)\}" "/1" :eregexp)^^J%
%^^A    (merge-rule "\\texttt\{(.*)\}" "/1" :eregexp)^^J%
%^^A    (merge-rule "\\textsbn\{(.*)\}" "/1" :eregexp)^^J%
%^^A    (merge-rule "\\textsbs\{(.*)\}" "/1" :eregexp)^^J%
%^^A  }%
%</!doc>
%    \end{macrocode}
%
% \subsubsection{Markup der einzelnen Einträge}
%
% Für die Änderungsliste werden Untereinträge bis zur fünften Ebene unterstützt.
%    \begin{macrocode}
%<*!doc&class>
  \write\tud@write@xdy{%
    (markup-indexentry :open "~n \string\subsubsubitem " :depth 3)%
  }%
%</!doc&class>
%    \end{macrocode}
% Für die Änderungsliste erfolgt die Gruppierung anhand der Versionsnummer. Das 
% bedeutet, das das Markup für die eigentliche \val{letter-group} unterdrückt 
% und die erste Ebene dafür verwendet wird. 
%    \begin{macrocode}
%<*doc>
  \if@tud@xdy@glo%
  \write\tud@write@xdy{%
    (markup-letter-group%
    \space:open-head "\string~n\space\space\string\@gobble{"%
    \space:close-head "}"%
    )^^J%
%    \end{macrocode}
% Leider gibt es für die Eintragsebenen keine Schlüssel \val{open-head} und
% \val{close-head}, weshalb für die Änderungsliste etwas getrickst werden muss. 
% Zwischen Einträgen der ersten Ebene soll äquivalent zu \val{letter-group} 
% etwas Abstand eingefügt werden.
%    \begin{macrocode}
    (markup-indexentry-list%
    \space:sep "\string~n\string~n\space\space\string\indexspace\string~n"%
    \space:depth 0%
    )^^J%
%    \end{macrocode}
% Da jeder Eintrag in der Änderungsliste aus mindestens drei Ebenen besteht, 
% wird vor der ersten Ebene der Beginn des Markupbefehls gesetzt\dots
%    \begin{macrocode}
    (markup-indexentry\@spaces\space\space%
    :open "\string~n\space\space\string\@lettergroup\space"\space:depth 0%
    )^^J%
%    \end{macrocode}
% \dots und vor Beginn der zweiten Ebene mit \cs{relax} terminiert.
%    \begin{macrocode}
    (markup-indexentry-list :open "\string\relax" :depth 1)^^J%
%    \end{macrocode}
% Anschließend werden die zweite sowie die dritte Ebene mit \cs{item} und
% \cs{subitem} ausgezeichnet.
%    \begin{macrocode}
    (markup-indexentry\@spaces\space\space%
    :open "\string~n\space\space\string\item\space" :depth 1%
    )^^J%
    (markup-indexentry-list :open "\string\efill" :depth 2)^^J%
    (markup-indexentry\@spaces\space\space%
    :open "\string~n\@spaces\string\subitem\space" :depth 2%
    )^^J%
%    \end{macrocode}
% Im Implemetierungsteil soll eine einzelne Änderungsnotiz für einen Eintrag
% direkt danach ausgegeben werden. Exisitieren für diesen jedoch mehrere
% Anmerkungen, so sollen diese in der nächsten Ebene ausgegeben werden. Da die
% Anzahl aller Anmerkungen zu einem einzelnen Eintrag zu Beginn noch unbekannt
% ist, werden alle dazugehörigen Änderungsnotizen zunächst mit \cs{tud@lst@add}
% in der~-- zuvor mit dem Makro \cs{tud@lst@init} initialisierten~-- Liste
% \cs{tud@lst@values} gesammelt und diese am Ende des jeweiligen Eintrags durch
% \cs{tud@lst@process} ausgewertet.
%    \begin{macrocode}
    (markup-indexentry-list^^J%
    \space\space:open \space"\string\tud@lst@init"^^J%
    \space\space:close "\string~n \@spaces\space\string\tud@lst@process"^^J%
    \space\space:depth 3^^J%
    )^^J%
    (markup-indexentry^^J%
    \space\space:open \space"\string~n\@spaces\space\string\tud@lst@add{"^^J%
    \space\space:close "}"^^J%
    \space\space:depth 3^^J%
    )%
  }%
%    \end{macrocode}
% Für den Index aller Eintragstypen ist nur auf zu leere \cs{hbox} zu achten.
%    \begin{macrocode}
  \else%
  \write\tud@write@xdy{%
    (markup-indexentry-list :open "\string\efill" :depth 1)%
  }%
  \fi%
%</doc>
%    \end{macrocode}
%
% \subsubsection{Attribute für Einträge}
%
% Es werden die Attribute \emph{declare} mit der Abkürzung \emph{!} sowie
% \emph{important} mit der Abkürzung \emph{?} und \emph{default} definiert, 
% welche hierarchisch gleichgestellt sind.
%
% \iffalse
%<*!doc>
% \fi
%
%    \begin{macrocode}
  \write\tud@write@xdy{%
    (define-attributes (("declare" "!" "important" "?" "default")))^^J%
%    \end{macrocode}
% Eine Alternative wäre, diese in der Hierarchie zu unterscheiden, allerdings
% war eine Bildung von zufriedenstellenden Seitenbereichen dabei nicht möglich
% und wurde deshalb verworfen.
%    \begin{macrocode}
%^^A    (markup-attribute-group-list :sep ", ")^^J%
%^^A    (define-attributes (("declare" "!") ("important" "?")("default")))^^J%
%    \end{macrocode}
% Einträge, die als wichtig oder als Deklaration festgelegt wurden, könnten
% auch für normale Indexeinträge zur Bereichsbildung verwendet werden. 
% Allerdings führt dies auch zur Erzeugung redundanter Einträge, falls es sich 
% bei den Sondereinträgen bereits um einen Seitenbereich handelt.
%    \begin{macrocode}
%^^A    (merge-to "declare" "default")^^J%
%^^A    (merge-to "!" "default")^^J%
%^^A    (merge-to "important" "default")^^J%
%^^A    (merge-to "?" "default")^^J%
%    \end{macrocode}
% Hier erfolgt die Definition der Auszeichnugen der Attribute. Deklarationen 
% werden fett gedruckt, wichtige Einträge erscheinen kursiv. Außerdem wird ein
% entsprechnder Link auf die Seite eingefügt.
%    \begin{macrocode}
    (markup-locref%
    \space:attr "declare"\space\space%
    \space:open "\string\textbf{\string\hyperpage{"%
    \space:close "}}"%
    )^^J%
    (markup-locref%
    \space:attr "!"\@spaces\@spaces%
    \space:open "\string\textbf{\string\hyperpage{"%
    \space:close "}}"%
    )^^J%
    (markup-locref%
    \space:attr "important"%
    \space:open "\string\textsl{\string\hyperpage{"%
    \space:close "}}"%
    )^^J%
    (markup-locref%
    \space:attr "?"\@spaces\@spaces%
    \space:open "\string\textsl{\string\hyperpage{"%
    \space:close "}}"%
    )^^J%
    (markup-locref%
    \space:attr "default"\space\space%
    \space:open "\string\hyperpage{"\@spaces\@spaces%
    \space:close "}"%
    )%
  }%
%    \end{macrocode}
%
% \iffalse
%</!doc>
%<*doc>
% \fi
%
% Für \cls{tudscrdoc} erfolgen die Auszeichnungen für den Index im Stile von
% \pkg{doc} mit den Attribute \emph{main} und \emph{usage}.
%    \begin{macrocode}
  \if@tud@xdy@glo\else%
  \write\tud@write@xdy{%
    (define-attributes (("main" "usage" "default")))^^J%
    (markup-locref :attr "main"%
    \space\space:open "\string\main{"\space\space:close "}"%
    )^^J%
    (markup-locref :attr "usage"%
    \space:open "\string\usage{"\space:close "}"%
    )%
  }%
  \fi%
%    \end{macrocode}
%
% \iffalse
%</doc>
%<*!doc>
% \fi
%
% \subsubsection{Querverweise im Index}
%
% Mit \val{see}\marg{Eintrag} erzeugte Querverweise im Index prüfen, ob 
% außerdem noch Seitenzahlangaben existent sind.
%    \begin{macrocode}
  \write\tud@write@xdy{%
    (markup-crossref-list :class "see"^^J%
    \space\space:open "\string\cleversee{" \@spaces:sep "; " :close "}"^^J%
    )^^J%
    (markup-crossref-list :class "seealso"^^J%
    \space\space:open "\string\cleverseealso{" :sep "; " :close "}"^^J%
    )%
  }%
%    \end{macrocode}
%
% \iffalse
%<*class>
% \fi
%
% Um Querverweise ohne Prüfung des Zieleintrags erzeugen zu können, wird der 
% Typ \val{seeunverified} definiert.
%    \begin{macrocode}
  \write\tud@write@xdy{%
    (define-crossref-class "seeunverified" :unverified)^^J%
    (markup-crossref-list :class "seeunverified"^^J%
    \space\space:open "\string\cleversee{" \@spaces:sep "; " :close "}"^^J%
    )%
  }%
%    \end{macrocode}
% Dieser Querverweistyp wird speziell im allgemeinen Index verwendet, um auf 
% einen Spezialindex zu verweisen. Dabei dient \val{:unverified} zum 
% Unterdrücken von Warnungen durch \app{texindy} aufgrund eines fehlenden 
% Ziels für den Querverweis.
%    \begin{macrocode}
  \write\tud@write@xdy{%
    (define-crossref-class "seeidx" :unverified)^^J%
    (markup-crossref-list :class "seeidx"^^J%
    \space\space:open "\string\seeidx{"\@spaces\@spaces:sep "; "%
    \space:close "}{}"^^J%
    )%
  }%
%    \end{macrocode}
% Damit die Makros \cs{cleversee} und \cs{cleverseealso} sowie \cs{seeidx} auf
% nachfolgende Seitenzahlen suchen können, müssen diese vor selbigen im Index
% aufgerufen werden.
%    \begin{macrocode}
  \write\tud@write@xdy{%
    (define-location-class-order^^J%
    \space\space(^^J%
    \@spaces"see" "seealso" "seeidx" "seeunverified"^^J%
    \@spaces"roman-page-numbers" "arabic-page-numbers" "alpha-page-numbers"^^J%
    \@spaces"Roman-page-numbers" "Alpha-page-numbers"^^J%
    \space\space)^^J%
    )%
  }%
%    \end{macrocode}
%
% \iffalse
%</class>
% \fi
%
% Werden mit \val{see}\marg{Eintrag!Untereintrag} gezielte Querverweise auf
% Untereinträge im Index erstellt, so werden diese nicht standardmäßig mit 
% einem Komma sondern mit \enquote{\,\textbar\,} getrennt.
%    \begin{macrocode}
  \write\tud@write@xdy{%
    (markup-crossref-layer-list :class "see"%
    \@spaces\space:sep "\string\,\string\textbar\string\,"%
    )^^J%
    (markup-crossref-layer-list :class "seealso"%
    \space:sep "\string\,\string\textbar\string\,"%
    )%
  }%
%    \end{macrocode}
%
% \iffalse
%</!doc>
% \fi
%
% Damit ist die \app{texindy}-Stildatei fertig und kann mit \cs{tud@xdy@create} 
% erstellt werden.
% \endgroup
%    \begin{macrocode}
  \closeout\tud@write@xdy%
  }%
}
\tud@xdy@create{ind}
%<doc>\tud@xdy@create[theglossary]{gls}
%<doc>}{}
\endgroup
%    \end{macrocode}
% \end{macro}^^A \if@tud@xdy@glo
% \end{macro}^^A \tud@write@xdy
% \end{macro}^^A \tud@xdy@create
%
% \iffalse
%</xindy>
% \fi
%
% \Finale
%
\endinput
