% \iffalse meta-comment
%/GitFileInfo=tudscr-fields.dtx
%
%  TUD-Script -- Corporate Design of Technische Universität Dresden
% ----------------------------------------------------------------------------
%
%  Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2022
%
% ----------------------------------------------------------------------------
%
%  This work may be distributed and/or modified under the conditions of the
%  LaTeX Project Public License, either version 1.3c of this license or
%  any later version. 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 version 2008-05-04 or later.
%
%  This work has the LPPL maintenance status "maintained".
%
%  The current maintainer and author of this work is Falk Hanisch.
%
% ----------------------------------------------------------------------------
%
% \fi
%
% \iffalse ins:batch + dtx:driver
%<*ins>
\ifx\documentclass\undefined
  \input docstrip.tex
  \ifToplevel{\batchinput{tudscr.ins}}
\else
  \let\endbatchfile\relax
\fi
\endbatchfile
%</ins>
%<*dtx>
\ProvidesFile{tudscr-fields.dtx}[2022/08/09]
\RequirePackage{tudscr-gitinfo}
\documentclass[english,ngerman,xindy]{tudscrdoc}
\iftutex
  \usepackage{fontspec}
\else
  \usepackage[T1]{fontenc}
  \usepackage[ngerman=ngerman-x-latest]{hyphsubst}
\fi
\usepackage{babel}
\usepackage{tudscrfonts}
\usepackage[babel]{microtype}

\GitHubBase{\TUDScriptRepository}
\begin{document}
  \author{Falk Hanisch\TUDScriptContactTitle}
  \maketitle
  \tableofcontents
  \DocInput{\filename}
\end{document}
%</dtx>
% \fi
%
% \selectlanguage{ngerman}
%
% \changes{v2.02}{2014/06/23}{Paket \pkg{titlepage} nicht weiter unterstützt}^^A
%
%
%
% \section{Anwenderbefehle für Eingabefelder}
%
% Das \TUDScript-Bundle für das \TUDCD definieren mehrere Felder, welche durch
% den Anwender festgelegt werden können und dadurch auf der Titelseite bzw. auf
% der Aufgabenstellung~-- falls das Paket \pkg{tudscrsupervisor} zum Einsatz 
% kommt~-- ausgegeben werden. Ein Großteil der definierten Felder wird unter 
% anderem für den Satz der Titelseite benötigt.
%
% Das Setzen einer speziellen Titelseite mit \LaTeX{} ist eines der häufigsten
% anliegen. Dafür ist von Markus Kohm\footnote{Autor von \KOMAScript} das
% \pkg{titlepage}-Paket entworfen worden. Um gleichzeitig konsistent zu diesem
% Paket zu sein, werden für die entsprechenden Felder Alias-Befehle definiert.
%
% \iffalse
%<*class&!manual>
% \fi
%
% \begin{macro}{\getfield}
% \changes{v2.06}{2018/08/20}{neu}^^A
% Hiermit wird der Inhalt des im zweiten (obligatorischen) Argument namentlich 
% genannten Feldes in die im ersten (optionalen) Argument gegebene Anweisung 
% expandiert.
% \ToDo{getfield für thesis etc. überarbeiten}[v2.07]
% \ToDo{getfield nur für festgelegte Felder (Liste) zulassen}[v2.07]
% \ToDo{Ausgabe von definition und expandierte Version unterscheiden}[v2.07]
%    \begin{macrocode}
\newcommand*\getfield[2][\@firstofone]{%
  \begingroup%
    \def\tud@res@b{#1}%
    \ifcsdef{@@#2}{%
      \letcs\tud@res@a{@@#2}%
    }{%
      \ifcsdef{@#2}{%
        \letcs\tud@res@a{@#2}%
      }{%
        \let\tud@res@a\@empty%
        \ClassWarning{\TUD@Class@Name}{%
          The internal field `@#2' does not exist%
        }%
      }%
    }%
    \edef\tud@res@a{%
      \endgroup%
      \expandonce\tud@res@b{\expandonce\tud@res@a}%
    }%
  \tud@res@a%
}
%    \end{macrocode}
% \end{macro}^^A \getfield
%
% \subsection{Textfelder für die \TUDScript-Klassen}
%
% Von den Klassen benötigte Formularfelder werden definiert. Für das Setzen von 
% Feldern werden mit dem Makro \cs{trim@spaces} aus dem Paket \pkg{trimspaces} 
% bei einem übergebenen Argument führende und angehängte Leerzeichen beseitigt.
% \begin{macro}{\faculty}
% \begin{field}{\@faculty}
% \begin{field}{\@facultyfoot}
% \changes{v2.05}{2015/07/06}{neu}^^A
% \begin{macro}{\department}
% \begin{field}{\@department}
% \begin{field}{\@departmentfoot}
% \changes{v2.05}{2015/07/06}{neu}^^A
% \begin{macro}{\institute}
% \begin{field}{\@institute}
% \begin{field}{\@institutefoot}
% \changes{v2.05}{2015/07/06}{neu}^^A
% \begin{macro}{\chair}
% \begin{field}{\@chair}
% \begin{field}{\@chairfoot}
% \changes{v2.05}{2015/07/06}{neu}^^A
% Für die für die TUD-Kopfzeile kann mit \cs{faculty}\marg{Fakultät} die 
% Fakultät angegeben werden, welche im Makro \cs{@faculty} gespeichert wird. 
% Das gilt ebenso für die Angabe von Einrichtung, Institut und Lehrstuhls bzw.
% Professur. Dies erfolgt mit den Makros \cs{department}\marg{Fachrichtung}, 
% \cs{institute}\marg{Institut} sowie \cs{chair}\marg{Lehrstuhl}, welche in 
% \cs{@department}, \cs{@institute} und \cs{@chair} gespeichert werden.
%
% Das optionale Argument wird zur Kompatibilität zur Klasse \cls{tudscrposter}
% vorgehalten. Wird diese Klasse geladen, kann mit dem optionalen Argument die 
% Angabe der Struktureinheiten im Fußbereich variiert werden. Dafür werden die 
% Felder \cs{@facultyfoot}, \cs{@departmentfoot}, \cs{@institutefoot} sowie 
% \cs{@chairfoot} definiert.
%    \begin{macrocode}
\newcommand*\@faculty{}
\newcommand*\@department{}
\newcommand*\@institute{}
\newcommand*\@chair{}
%<*poster>
\newcommand*\@facultyfoot{}
\newcommand*\@departmentfoot{}
\newcommand*\@institutefoot{}
\newcommand*\@chairfoot{}
%</poster>
\newcommand*\faculty{\@dblarg{\tud@head@text@field{faculty}}}
\newcommand*\department{\@dblarg{\tud@head@text@field{department}}}
\newcommand*\institute{\@dblarg{\tud@head@text@field{institute}}}
\newcommand*\chair{\@dblarg{\tud@head@text@field{chair}}} 
%    \end{macrocode}
% \end{field}^^A \@chairfoot
% \end{field}^^A \@chair
% \end{macro}^^A \chair
% \end{field}^^A \@institutefoot
% \end{field}^^A \@institute
% \end{macro}^^A \institute
% \end{field}^^A \@departmentfoot
% \end{field}^^A \@department
% \end{macro}^^A \department
% \end{field}^^A \@facultyfoot
% \end{field}^^A \@faculty
% \end{macro}^^A \faculty
% \begin{macro}{\extraheadline}
% \begin{field}{\@extraheadline}
% Für die Angabe weiteren, freien Textzeile im Kopf. Dies ist laut \CD nur in
% besonderen Ausnahmefällen gestattet.
%    \begin{macrocode}
\newcommand*\@extraheadline{}
\newcommand*\extraheadline[1]{\tud@head@text@field{extraheadline}[]{#1}}
%    \end{macrocode}
% \end{field}^^A \@extraheadline
% \end{macro}^^A \extraheadline
% \begin{macro}{\tud@head@text@field}
% \changes{v2.05}{2015/11/26}{neu}^^A
% \begin{macro}{\tud@foot@line@write}
% \changes{v2.05}{2015/07/06}{neu}^^A
% Mit \cs{tud@head@text@field} wird der Inhalt eines Feldes in |\@|\meta{Feld} 
% gespeichert. Der Befehl erwartet als erstes obligatorisches Argument den
% Feldnamen und als letztes den Inhalt. Wird ein Feld gesetzt, muss die 
% Kopfzeile neu erstellt werden.
%
% Das (optionale) Argument dazwischen befüllt |\@|\meta{Feld}|foot| und wird 
% mit \cs{@dblarg} standardmäßig auf den Inhalt von |\@|\meta{Feld} gesetzt.
% Damit wird es für Poster möglich, die Befehle \cs{faculty}, \cs{department}, 
% \cs{institute}, \cs{chair} und \cs{professor} dahingehend zu erweitern, dass 
% unterschiedliche Angaben für die Kopf- und Fußzeile gemacht werden können.
% Wird eines der zuvor genannten Makros lediglich mit einem obligatorischen
% Argument verwendet, so enthalten Kopf und Fuß den gleichen Eintrag. Wird
% jedoch zusätzlich das optionale Argument genutzt, so wird dessen Inhalt im 
% Fußbereich mit \cs{tud@foot@line@write} ausgegeben.
%    \begin{macrocode}
\newcommand*\tud@head@text@field{}
\def\tud@head@text@field#1[#2]#3{%
  \expandafter\tud@trim@field\csname @#1\endcsname{#3}%
%<*poster>
  \expandafter\tud@trim@field\csname @#1foot\endcsname{#2}%
%</poster>
  \global\@tud@head@text@settrue%
}
%<*poster>
\newcommand*\tud@foot@line@write[1]{%
  \protected@edef\@tempa{\csuse{@#1foot}}%
  \ifx\@tempa\@empty\else\newline\mbox{\csuse{@#1foot}}\fi%
}
%</poster>
%    \end{macrocode}
% \end{macro}^^A \tud@foot@line@write
% \end{macro}^^A \tud@head@text@field
% \begin{macro}{\tud@trim@field}
% Hiermit werden Feldinhalte gegebenenfalls um unnötige Leerzeichen befreit.
% \changes{v2.06o}{2022/08/03}{neu}^^A
%    \begin{macrocode}
\newcommand*\tud@trim@field[2]{%
  \def#1{#2}%
  \trim@spaces@in#1%
  \global\let#1#1%
}
%    \end{macrocode}
% \end{macro}^^A \tud@trim@field
% \begin{macro}{\title}
% \begin{field}{\@title}
% \begin{field}{\@@title}
% \changes{v2.02}{2014/11/06}{\cs{protected@xdef} genutzt}^^A
% Für die spätere Verwendung im Dokument des Titels~-- beispielsweise für die
% Aufgabenstellung oder die Selbstständigkeitserklärung~-- wird das Feld
% \cs{@@title} definiert. In diesem wird der mit \cs{title} gesicherte Eintrag
% ohne die etwaigen Fußnoten gespeichert. 
%    \begin{macrocode}
\newcommand*\@@title{}
\robustify\@title
\renewcommand*\title[1]{%
  \tud@trim@field\@title{#1}%
  \begingroup%
    \let\thanks\@gobble%
    \let\footnote\@gobble%
    \def\newline{\space\ignorespaces}%
    \def\\{\space\ignorespaces}%
    \protected@xdef\@@title{\trim@spaces{#1}}%
  \endgroup%
}
%    \end{macrocode}
% \end{field}^^A \@@title
% \end{field}^^A \@title
% \end{macro}^^A \title
% \begin{macro}{\author}
% \begin{field}{\@author}
% \begin{field}{\@@author}
% \begin{macro}{\authormore}
% \begin{field}{\@authormore}
% Die Ausgabe einer zusätzlichen Zeile mit \cs{authormore}\marg{Textzeile}
% direkt unterhalb der Angabe des Autors auf der Titelseite, wird im Makro
% \cs{@authormore} gespeichert.
% \ToDo{Anrede als optionales Argument?}[v2.07]
%    \begin{macrocode}
\newcommand*\@@author{}
\renewcommand*\author[1]{%
  \tud@trim@field\@author{#1}%
%    \end{macrocode}
% Das Feld \cs{@@author} soll lediglich die Autoren ohne weitere Anmerkungen 
% enthalten. Deshalb werden die gewöhnlichen Formatierungsbefehle des Titels
% temporär unschädlich gemacht.
%    \begin{macrocode}
  \begingroup%
    \let\thanks\@gobble%
    \let\footnote\@gobble%
    \def\newline{\space\ignorespaces}%
    \def\\{\space\ignorespaces}%
%    \end{macrocode}
% Die Makros aus \cs{tud@split@author@list} werden zu \cs{@tempc} gesetzt, um 
% diese nach der Expansion weiter zu behandeln.
%    \begin{macrocode}
    \let\@tempc\relax%
    \def\@tempa##1{\csedef{##1}####1{\@tempc}}%
    \let\@tempb\tud@split@author@list%
    \ifx\and\relax\else%
      \robustify\and%
    \fi%
    \expandafter\forcsvlist\expandafter\@tempa\expandafter{\@tempb}%
%    \end{macrocode}
% Da die Befehle für Zusatzinformationen unter Umständen ungewollte Leerzeichen 
% im Feld \cs{@@author} hinterlassen, werden diese entfernt.
%    \begin{macrocode}
    \def\@tempa##1##2{%
      \def\@tempb####1##2####2\@nil{%
        \IfArgIsEmpty{####2}{%
          \def##1{####1}%
        }{%
          \@tempb####1####2\@nil%
        }%
      }%
      \expandafter\@tempb##1##2\@nil%
    }%
    \protected@edef\@@author{#1}%
%    \end{macrocode}
% Zuletzt werden alle eingefügten \cs{@tempc} entfernt.
%    \begin{macrocode}
    \@tempa{\@@author}{ \@tempc }%
    \@tempa{\@@author}{\@tempc }%
    \@tempa{\@@author}{ \@tempc}%
    \@tempa{\@@author}{\@tempc}%
    \xdef\@@author{\expandonce\@@author}%
  \endgroup%
}
\newcommand*\@authormore{}
\newrobustcmd*\authormore[1]{\tud@trim@field\@authormore{#1}}
%    \end{macrocode}
% \end{field}^^A \@authormore
% \end{macro}^^A \authormore
% \end{field}^^A \@@author
% \end{field}^^A \@author
% \end{macro}^^A \author
% \begin{macro}{\emailaddress}
% \changes{v2.02}{2014/05/16}{neu, Umbenennung des Makros \cs{email}}^^A
% \begin{field}{\@emailaddress}
% \changes{v2.02}{2014/05/16}{neu, Umbenennung des Makros \cs{@email}}^^A
% \begin{macro}{\tud@emailaddress@simple}
% \changes{v2.05}{2016/07/09}{neu}^^A
% \begin{macro}{\tud@emailaddress@hyper}
% \changes{v2.05}{2016/07/09}{neu}^^A
%    \begin{macrocode}
\newcommand*\@emailaddress{}
\newrobustcmd*\emailaddress[2][]{%
  \kernel@ifstar%
    {\tud@emailaddress@simple{#2}}%
    {\tud@emailaddress@hyper[{#1}]{#2}}%
}
\newrobustcmd*\tud@emailaddress@simple[1]{\tud@trim@field\@emailaddress{#1}}
\newrobustcmd*\tud@emailaddress@hyper[2][]{\tud@trim@field\@emailaddress{#2}}
\AfterPackage{hyperref}{%
  \renewrobustcmd*\tud@emailaddress@hyper[2][hidelinks]{%
    \tud@trim@field\@emailaddress{#2}%
    \xdef\@emailaddress{%
      \begingroup%
        \noexpand\urlstyle{same}%
        \unexpanded{\hypersetup{#1}}%
        \noexpand\href%
          {mailto:\expandonce\@emailaddress}%
          {\noexpand\nolinkurl{\expandonce\@emailaddress}}%
      \endgroup%
    }%
  }%
}
%    \end{macrocode}
% \end{macro}^^A \tud@emailaddress@hyper
% \end{macro}^^A \tud@emailaddress@simple
% \end{field}^^A \@emailaddress
% \end{macro}^^A \emailaddress
% \begin{macro}{\course}
% \begin{field}{\@course}
% Studiengang für den Titel sowie den Kopf der Aufgabenstellung, wird im Makro 
% \cs{@course} gespeichert.
%    \begin{macrocode}
\newcommand*\@course{}
\newrobustcmd*\course[1]{\tud@trim@field\@course{#1}}
%    \end{macrocode}
% \end{field}^^A \@course
% \end{macro}^^A \course
% \begin{macro}{\discipline}
% \changes{v2.02}{2014/05/16}{neu, von \cs{branch} umbenannt}^^A
% \begin{field}{\@discipline}
% \changes{v2.02}{2014/05/16}{neu, von \cs{@branch} umbenannt}^^A
% Studienrichtung bzw. Fachrichtung für Titel und Kopf der Aufgabenstellung,
% wird im Makro \cs{@discipline} gespeichert.
%    \begin{macrocode}
\newcommand*\@discipline{}
\newrobustcmd*\discipline[1]{\tud@trim@field\@discipline{#1}}
%    \end{macrocode}
% \end{field}^^A \@discipline
% \end{macro}^^A \discipline
%
% \iffalse
%<*book|report|article>
% \fi
%
% \begin{macro}{\matriculationnumber}
% \begin{field}{\@matriculationnumber}
% Die Matrikelnummer für Titelseite und Aufgabenstellung, wird in 
% \cs{@matriculationid} gespeichert.
%    \begin{macrocode}
\newcommand*\@matriculationnumber{}
\newrobustcmd*\matriculationnumber[1]{\tud@trim@field\@matriculationnumber{#1}}
%    \end{macrocode}
% \end{field}^^A \@matriculationnumber
% \end{macro}^^A \matriculationnumber
% \begin{macro}{\matriculationyear}
% \begin{field}{\@matriculationyear}
% Das Immatrikulationsjahr für den Titel wird in \cs{@matriculationyear}
% gespeichert.
%    \begin{macrocode}
\newcommand*\@matriculationyear{}
\newrobustcmd*\matriculationyear[1]{\tud@trim@field\@matriculationyear{#1}}
%    \end{macrocode}
% \end{field}^^A \@matriculationyear
% \end{macro}^^A \matriculationyear
% \begin{macro}{\placeofbirth}
% \begin{field}{\@placeofbirth}
% Der Geburtsort für den Titel wird in \cs{@placeofbirth} gespeichert.
%    \begin{macrocode}
\newcommand*\@placeofbirth{}
\newrobustcmd*\placeofbirth[1]{\tud@trim@field\@placeofbirth{#1}}
%    \end{macrocode}
% \end{field}^^A \@placeofbirth
% \end{macro}^^A \placeofbirth
% \begin{macro}{\thesis}
% \begin{field}{\@thesis}
% \changes{v2.02}{2014/11/06}{\cs{protected@xdef} genutzt}^^A
% \begin{field}{\@@thesis}
% \changes{v2.02}{2014/11/06}{\cs{protected@xdef} genutzt}^^A
% \begin{macro}{\subject}
% \begin{field}{\@subject}
% \begin{field}{\@@subject}
% \begin{macro}{\tud@thesis@evaluate}
% Art bzw. Typ der Abschlussarbeit kann \cs{thesis}\marg{Abschlussarbeit}
% angegeben werden und wird im Makro \cs{@thesis} gespeichert. Alternativ
% dazu kann auch der Befehl \cs{subject} verwendet werden. Mit dem Befehl
% \cs{tud@thesis@evaluate} wird in den Feldern \cs{@thesis} respektive 
% \cs{@subject} nach bestimmten Schlagwörtern für Abschlussarbeiten o.\,ä. 
% gesucht. Bei einem Treffer wird der entsprechende Bezeichner für dieses Feld
% gesetzt. In \cs{@@subject} beziehungsweise \cs{@@thesis} wird der gegebene 
% oder substituierte Inhalt ohne etwaige Fußnoten gespeichert.
% \ToDo{Option thesis}[v2.07]
%    \begin{macrocode}
\newcommand*\@thesis{}
\newcommand*\@@thesis{}
\newcommand*\thesis[1]{\tud@thesis@evaluate{thesis}{#1}}
\CheckCommand*\subject[1]{\gdef\@subject{#1}}
\newcommand*\@@subject{}
\renewcommand*\subject[1]{\tud@thesis@evaluate{subject}{#1}}
\newcommand*\tud@thesis@evaluate[2]{%
  \begingroup%
    \expandafter\tud@trim@field\csname @#1\endcsname{#2}%
%    \end{macrocode}
% Der Inhalt des Befehls \cs{thanks} wird durch das Setzen einer temporären Box 
% in ein temporäres Makro gesichert. Nach der Verarbeitung des Feldinhalts und
% der möglichen Substitution durch den gewünschten Bezeichner wird \cs{thanks}
% wieder hinzugefügt.
%    \begin{macrocode}
    \let\tud@res@c\@empty%
    \def\thanks##1{\listgadd\tud@res@c{##1}}%
    \let\footnote\thanks%
    \sbox\z@{#2}%
    \let\thanks\@gobble%
    \let\footnote\@gobble%
    \protected@csxdef{@@#1}{\trim@spaces{#2}}%
    \letcs\tud@res@a{@@#1}%
    \TUD@set@numkey{thesis}{@tempa}{%
      {habil}{0},
      {diss}{1},{doctoral}{1},{phd}{1},
      {diploma}{2},
      {master}{3},
      {bachelor}{4},
      {student}{5},
      {evidence}{6},
      {project}{7},
      {seminar}{8},
      {term}{9},
      {research}{10},
      {log}{11},
      {report}{12},
      {internship}{13}
    }{\tud@res@a}%
    \ifx\FamilyKeyState\FamilyKeyStateProcessed%
      \ifcase\@tempa\relax% habil
        \def\tud@res@a{\habilitationname}%
      \or% diss
        \def\tud@res@a{\dissertationname}%
      \or% diploma
        \def\tud@res@a{\diplomathesisname}%
      \or% master
        \def\tud@res@a{\masterthesisname}%
      \or% bachelor
        \def\tud@res@a{\bachelorthesisname}%
      \or% student
        \def\tud@res@a{\studentthesisname}%
      \or% evidence
        \def\tud@res@a{\studentresearchname}%
      \or% project
        \def\tud@res@a{\projectpapername}%
      \or% seminar
        \def\tud@res@a{\seminarpapername}%
      \or% term
        \def\tud@res@a{\termpapername}%
      \or% research
        \def\tud@res@a{\researchname}%
      \or% log
        \def\tud@res@a{\logname}%
      \or% report
        \def\tud@res@a{\reportname}%
      \or% internship
        \def\tud@res@a{\internshipname}%
      \else%
        \FamilyKeyStateUnknownValue%
      \fi%
    \fi%
    \ifx\FamilyKeyState\FamilyKeyStateProcessed%
      \global\cslet{@@#1}\tud@res@a%
      \tud@if@strequal{#1}{subject}{%
        \ifx\@@thesis\@empty\global\let\@@thesis\@@subject\fi%
      }{}%
      \def\do##1{\appto\tud@res@a{\thanks{##1}}}%
      \dolistloop{\tud@res@c}%
    \fi%
    \edef\tud@res@a{%
      \endgroup%
      \ifx\FamilyKeyState\FamilyKeyStateProcessed%
        \noexpand\csgdef{@#1}{\expandonce\tud@res@a}%
      \fi%
    }%
  \tud@res@a%
}
%    \end{macrocode}
% \end{macro}^^A \tud@thesis@evaluate
% \end{field}^^A \@@subject
% \end{field}^^A \@subject
% \end{macro}^^A \subject
% \end{field}^^A \@@thesis
% \end{field}^^A \@thesis
% \end{macro}^^A \thesis
% \begin{macro}{\graduation}
% \changes{v2.02}{2014/05/16}{neu, von \cs{degree} umbenannt}^^A
% \begin{field}{\@graduation}
% \changes{v2.02}{2014/05/16}{neu, von \cs{@degree} umbenannt}^^A
% \begin{field}{\@graduationabbreviation}
% \changes{v2.02}{2014/05/16}{neu, \cs{@degreeabbr} umbenannt}^^A
% Der angestrebte Abschluss bzw. der zu erwerbende akademische Grad, welcher
% auf der Titelseite ausgegeben werden soll, wird im Makro \cs{@graduation}
% gespeichert. Zusätzlich kann als optionales Argument die Kurzform des
% akademischen Grades angegeben werden, wird in \cs{@graduationabbr} 
% gespeichert.
%    \begin{macrocode}
\newcommand*\@graduation{}
\newcommand*\@graduationabbreviation{}
\newcommand*\graduation[2][]{%
  \tud@trim@field\@graduationabbreviation{#1}%
  \tud@trim@field\@graduation{#2}%
}
%    \end{macrocode}
% \end{field}^^A \@graduationabbreviation
% \end{field}^^A \@graduation
% \end{macro}^^A \graduation
%
% \iffalse
%</book|report|article>
% \fi
%
% \begin{macro}{\professor}
% \begin{field}{\@professor}
% \begin{field}{\@professorfoot}
% \changes{v2.05}{2015/07/06}{neu}^^A
% Angabe des verantwortlichen Hochschullehrers für Titel und Aufgabenstellung,
% wird im Makro \cs{@professor} gespeichert.
%    \begin{macrocode}
%<*book|report|article>
\newcommand*\@professor{}
\newcommand*\professor[1]{\tud@trim@field\@professor{#1}}
%</book|report|article>
%<*poster>
\newcommand*\@professorfoot{}
\newcommand*\professor[1]{\tud@trim@field\@professorfoot{#1}}
%</poster>
%    \end{macrocode}
% \end{field}^^A \@professorfoot
% \end{field}^^A \@professor
% \end{macro}^^A \professor
% \begin{macro}{\supervisor}
% \changes{v2.02}{2014/05/16}{erzeugter Eintrag der Betreuer mit
%   \cs{supervisor} für Selbstständigkeitserklärung verworfen}^^A
% \begin{field}{\@supervisor}
% (Erst- und Zweit"~)Betreuer bei Abschlussarbeiten, wird in \cs{@supervisor}
% gespeichert. Mehrere Betreuer werden durch \cs{and} getrennt. Für Poster kann 
% der Befehl als Äquivalent zu \cs{contactperson} genutzt werden.
%    \begin{macrocode}
%<*book|report|article>
\newcommand*\@supervisor{}
\newcommand*\supervisor[1]{\tud@trim@field\@supervisor{#1}}
%</book|report|article>
%<*poster>
\newcommand*\supervisor[1]{}
%</poster>
%    \end{macrocode}
% \end{field}^^A \@supervisor
% \end{macro}^^A \supervisor
%
% \iffalse
%<*book|report|article>
% \fi
%
% \begin{macro}{\supporter}
% \changes{v2.02}{2014/05/16}{erzeugter Eintrag der Betreuer mit
%   \cs{supporter} für Selbstständigkeitserklärung verworfen}^^A
% \begin{field}{\@supporter}
% Diese Feld ist für die Hilfesteller bei der Anfertigung der Abschlussarbeit,
% welche auf der Selbstständigkeitserklärung aufgeführt werden. Mehrere 
% Hilfesteller werden durch \cs{and} voneinander getrennt.
%    \begin{macrocode}
\newcommand*\@supporter{}
\newcommand*\supporter[1]{\tud@trim@field\@supporter{#1}}
%    \end{macrocode}
% \end{field}^^A \@supporter
% \end{macro}^^A \supporter
% \begin{macro}{\company}
% \begin{field}{\@company}
% Angabe einer externen Firma, wird im Makro \cs{@company} gespeichert.
%    \begin{macrocode}
\newcommand*\@company{}
\newcommand*\company[1]{\tud@trim@field\@company{#1}}
%    \end{macrocode}
% \end{field}^^A \@company
% \end{macro}^^A \company
% \begin{macro}{\referee}
% \begin{field}{\@referee}
% Gutachter bei einer Dissertation, werden im Makro \cs{@referee} gespeichert.
% Mehrere Gutachter werden durch \cs{and} getrennt.
%    \begin{macrocode}
\newcommand*\@referee{}
\newcommand*\referee[1]{\tud@trim@field\@referee{#1}}
%    \end{macrocode}
% \end{field}^^A \@referee
% \end{macro}^^A \referee
% \begin{macro}{\advisor}
% \begin{field}{\@advisor}
% Fachreferenten bei einer Dissertation, werden im Makro \cs{@advisor}
% gespeichert. Mehrere Fachreferenten werden durch \cs{and} getrennt.
%    \begin{macrocode}
\newcommand*\@advisor{}
\newcommand*\advisor[1]{\tud@trim@field\@advisor{#1}}
%    \end{macrocode}
% \end{field}^^A \@advisor
% \end{macro}^^A \advisor
% \begin{length}{\tud@glue@signaturevskip}
% \changes{v2.04}{2015/05/06}{neu}^^A
% Für alle Formatvorlagen, welche eine Unterschriftenzeile bereitstellen, wird 
% ein einheitlicher Abstand verwendet.
%    \begin{macrocode}
\tud@newglue\tud@glue@signaturevskip
\tud@setglue\tud@glue@signaturevskip{8ex plus 6ex minus 6ex}
%    \end{macrocode}
% \end{length}^^A \tud@glue@signaturevskip
% \begin{macro}{\confirmationclosing}
% \begin{field}{\@confirmationclosing}
% Als Abschluss der Selbstständigkeitserklärung für Ort und Unterschrift.
%    \begin{macrocode}
\newcommand*\@confirmationclosing{%
  \tud@date@check%
  \ifx\@date\@empty\else%
    \medskip\noindent%
    \ifx\@place\@empty\else\@place,\nobreakspace\fi\@date%
  \fi%
  \vskip\tud@glue@signaturevskip\noindent%
  \begingroup%
    \let\and\hfil%
    \@@author\hfil%
  \endgroup%
}
\newcommand*\confirmationclosing[1]{\tud@trim@field\@confirmationclosing{#1}}
%    \end{macrocode}
% \end{field}^^A \@confirmationclosing
% \end{macro}^^A \confirmationclosing
% \begin{macro}{\place}
% \begin{field}{\@place}
% Die Angabe des Ortes mit \cs{place} für die Selbstständigkeitserklärung und 
% ggf. das Datum wird im Makro \cs{@place} gespeichert und standardmäßig mit
% \enquote{Dresden} gesetzt.
%    \begin{macrocode}
\newcommand*\@place{Dresden}
\newcommand*\place[1]{\tud@trim@field\@place{#1}}
%    \end{macrocode}
% \end{field}^^A \@place
% \end{macro}^^A \place
%
% \iffalse
%</book|report|article>
% \fi
%
% \begin{macro}{\subtitle}
% \begin{macro}{\@subtitle}
% \begin{macro}{\publishers}
% \begin{macro}{\@publishers}
% \begin{macro}{\publisher}
% Die Felder von \KOMAScript werden ebenfalls behandelt.
%    \begin{macrocode}
\CheckCommand*\subtitle[1]{\gdef\@subtitle{#1}}
\renewcommand*\subtitle[1]{\tud@trim@field\@subtitle{#1}}
\CheckCommand\publishers[1]{\gdef\@publishers{#1}}%
\renewcommand*\publishers[1]{\tud@trim@field\@publishers{#1}}
\providecommand*\publisher[1]{\publishers{#1}}
%    \end{macrocode}
% \end{macro}^^A \publisher
% \end{macro}^^A \@publishers
% \end{macro}^^A \publishers
% \end{macro}^^A \@subtitle
% \end{macro}^^A \subtitle
%
% \iffalse
%<*poster>
% \fi
%
% \begin{macro}{\webpage}
% \changes{v2.05}{2015/07/06}{neu}^^A
% \begin{field}{\@webpage}
% \changes{v2.05}{2015/07/06}{neu}^^A
% \begin{macro}{\tud@webpage@simple}
% \changes{v2.05}{2016/07/09}{neu}^^A
% \begin{macro}{\tud@webpage@hyper}
% \changes{v2.05}{2016/07/09}{neu}^^A
% Im Fußbereich eines Posters kann zusätzlich eine Web-Seite angegeben werden.
% \ToDo{auch für notice in tudscrsupervisor}[v2.07]
%    \begin{macrocode}
\newcommand*\@webpage{}
\newrobustcmd*\webpage[2][]{%
  \kernel@ifstar%
    {\tud@webpage@simple{#2}}%
    {\tud@webpage@hyper[{#1}]{#2}}%
}
\newrobustcmd*\tud@webpage@simple[1]{\tud@trim@field\@webpage{#1}}
\newrobustcmd*\tud@webpage@hyper[2][]{\tud@trim@field\@webpage{#2}}
\AfterPackage{hyperref}{%
  \renewrobustcmd*\tud@webpage@hyper[2][hidelinks]{%
    \tud@trim@field\@webpage{#2}%
    \xdef\@webpage{%
      \begingroup%
        \noexpand\urlstyle{same}%
        \unexpanded{\hypersetup{#1}}%
        \noexpand\url{\expandonce\@webpage}%
      \endgroup%
    }%
  }%
}
%    \end{macrocode}
% \end{macro}^^A \tud@webpage@hyper
% \end{macro}^^A \tud@webpage@simple
% \end{field}^^A \@webpage
% \end{macro}^^A \webpage
%
% \iffalse
%</poster>
% \fi
%
% \subsection{Datumsfelder für die \TUDScript-Klassen}
%
% \begin{macro}{\printdate}
% Im Folgenden werden mehrere Datumsfelder definiert. Damit diese optional
% durch eines der Pakete \pkg{isodate} oder \pkg{datetime2} formatiert werden 
% können, wird der zu \pkg{isodate} gehörende Befehl \cs{printdate} in die
% Definition der eigentlichen Datumsfelder integriert. Sollte das Paket nicht
% geladen sein, so verwendet der Befehl die Schnittstelle von \pkg{datetime2},
% welches nur ein spezielles Datenformat als Eingabe akzeptiert. Wird keines 
% der beiden Pakete verwendet, wird das Argument direkt durchgereicht.
% \ToDo{^^A
%   direkt auf datetime2 matchen? was, wenn beide Pakete geladen?^^A
%   \cs{localedate} von \pkg{babel} gibt es auch noch...
% }[v2.07]
% \ToDo{Angabe eines leeren Datums ermöglichen: gh/55}[v2.07]
%    \begin{macrocode}
\TUD@UnwindPackage{isodate}{%
  \@ifpackageloaded{datetime2}{%
    \providecommand*\printdate[1]{\DTMDate{#1}}%
  }{%
    \providecommand*\printdate[1]{#1}%
  }%
}
%    \end{macrocode}
% \end{macro}^^A \printdate
% \begin{macro}{\tud@printdate}
% Damit die Datumsfelder definiert werden können und eines der Datumspakete
% unterstützen, muss beim Festlegen der Datumsfelder einiges beachtet werden.
% So müssen beispielsweise leere Argumente und Sonderfälle separat betrachtet
% werden. Damit dies einheitlich für alle Felder geschehen kann, wird dieser
% Befehl genutzt. Dabei wird als erstes Argument der Befehlsname für das
% Datumsfeld übergeben, als zweites Argument der gewünschte Inhalt.
%    \begin{macrocode}
\newcommand*\tud@printdate[2]{%
  \ifx\today#2\relax%
    \gdef#1{#2}%
  \else%
    \tud@trim@field#1{#2}%
    \tud@if@strblank{#1}%
      {}%
      {\xdef#1{\noexpand\printdate{\expandonce#1}}}%
  \fi%
}
%    \end{macrocode}
% \end{macro}^^A \tud@printdate
% \begin{macro}{\tud@date@check}
% \changes{v2.04}{2015/05/06}{neu}^^A
% Das Makro prüft vor der Nutzung des Datumfeldes \cs{@date}, ob selbiges
% explizit angegeben wurde. Falls dies nicht der Fall ist, wird eine Warnung
% ausgegeben.
%    \begin{macrocode}
\newcommand*\tud@date@check{%
  \ifdefvoid{\@duedate}{%
    \ClassWarning{\TUD@Class@Name}{%
      `\string\date' was not given\MessageBreak%
      Since a thesis is a self-contained work, an end\MessageBreak%
      date should be specified by the author. \MessageBreak%
      Nevertheless, today's date is used%
    }%
  }{%
    \ClassWarning{\TUD@Class@Name}{%
      `\string\date' was not given\MessageBreak%
      It's substituted by the given due date%
    }%
    \global\let\@date\@duedate%
  }%
  \global\let\tud@date@check\relax%
}
%    \end{macrocode}
% \end{macro}^^A \tud@date@check
% \begin{macro}{\date}
% \begin{parameter}{before}
% \changes{v2.05}{2016/05/27}{neu}^^A
% \begin{parameter}{after}
% \changes{v2.05}{2016/05/27}{neu}^^A
% \begin{parameter}{prefix}
% \changes{v2.05}{2016/05/27}{neu}^^A
% \begin{parameter}{suffix}
% \changes{v2.05}{2016/05/27}{neu}^^A
% \begin{parameter}{pre}
% \changes{v2.05}{2016/05/27}{neu}^^A
% \begin{parameter}{app}
% \changes{v2.05}{2016/05/27}{neu}^^A
% \begin{parameter}{place}
% \changes{v2.05}{2016/05/27}{neu}^^A
% \begin{macro}{\tud@date@set}
% \changes{v2.05}{2016/05/27}{neu}^^A
% \changes{v2.06}{2018/08/08}{optionales Argument nutzt \cs{tud@toks@}}^^A
% \begin{field}{\@date}
% \begin{field}{\@beforedate}
% \changes{v2.05}{2016/05/27}{neu}^^A
% \begin{field}{\@afterdate}
% \changes{v2.05}{2016/05/27}{neu}^^A
% Das Abgabedatum der Arbeit für den Titel, wird im originalen Makro \cs{@date}
% gespeichert. Zusätzlich kann über die Parameter im optionalen Argument eine 
% Ergänzung davorgesetzt angehängt werden~-- beispielsweise als Erklärung für
% eine verspätete Abgabe aufgrund einer Verlängerung der Bearbeitungszeit~--
% welche in den Feldern \cs{@beforedate} und \cs{@afterdate} gespeichert
% wird. Hierfür wird der originale Befehl für das Datum \cs{date} erweitert, 
% wobei die Sternversion \cs{date*} den angegebenen Ort als Präfix verwendet.
%    \begin{macrocode}
\renewcommand*\date{%
  \kernel@ifstar{%
    \TUD@parameter@set{date}{pre=\noexpand\@place{,}}%
    \tud@date@set%
  }{\tud@date@set}%
}
\newcommand*\tud@date@set[2][]{%
  \tud@toks@{#1}%
  \TUD@parameter@set{date}{\the\tud@toks@}%
  \tud@printdate{\@date}{#2}%
  \global\let\tud@date@check\relax%
}
\newcommand*\@beforedate{}
\newcommand*\@afterdate{}
\TUD@parameter@family{date}{%
  \TUD@parameter@def{before}{\def\@beforedate{#1}}%
  \TUD@parameter@let{pre}{before}%
  \TUD@parameter@let{prefix}{before}%
  \TUD@parameter@def{after}{\def\@afterdate{#1}}%
  \TUD@parameter@let{app}{after}%
  \TUD@parameter@let{suffix}{after}%
  \TUD@parameter@def{place}{\def\@place{#1}\def\@beforedate{#1,}}%
  \TUD@parameter@handler@value{after}%
}
%    \end{macrocode}
% \end{field}^^A \@afterdate
% \end{field}^^A \@beforedate
% \end{field}^^A \@date
% \end{macro}^^A \tud@date@set
% \end{parameter}^^A place
% \end{parameter}^^A app
% \end{parameter}^^A pre
% \end{parameter}^^A suffix
% \end{parameter}^^A prefix
% \end{parameter}^^A after
% \end{parameter}^^A before
% \end{macro}^^A \date
% \begin{macro}{\tud@date@print}
% \changes{v2.05}{2016/05/27}{neu}^^A
% Mit diesem Makro erfolgt die eigentliche Ausgabe des Datums und ggf. der 
% optionalen Ergänzungen.
%    \begin{macrocode}
\newcommand*\tud@date@print{%
  \ifx\@date\@empty\else%
    \trim@spaces@in\@beforedate%
    \ifx\@beforedate\@empty\else%
      \@beforedate\nobreakspace%
    \fi%
    \@date%
    \trim@spaces@in\@afterdate%
    \ifx\@afterdate\@empty\else%
      \nobreakspace\@afterdate%
    \fi%
  \fi%
}
%    \end{macrocode}
% \end{macro}^^A \tud@date@print
%
% \iffalse
%<*book|report|article>
% \fi
%
% \begin{macro}{\defensedate}
% \begin{field}{\@defensedate}
% Das Verteidigungsdatum erscheint auf dem Titel und wird in \cs{@defensedate}
% gespeichert.
%    \begin{macrocode}
\newcommand*\@defensedate{}
\newcommand*\defensedate[1]{\tud@printdate{\@defensedate}{#1}}
%    \end{macrocode}
% \end{field}^^A \@defensedate
% \end{macro}^^A \defensedate
% \begin{macro}{\dateofbirth}
% \begin{field}{\@dateofbirth}
% Angabe des Geburtstages für die Titelseite, wird im Makro \cs{@dateofbirth}
% gespeichert.
%    \begin{macrocode}
\newcommand*\@dateofbirth{}
\newrobustcmd*\dateofbirth[1]{\tud@printdate{\@dateofbirth}{#1}}
%    \end{macrocode}
% \end{field}^^A \@dateofbirth
% \end{macro}^^A \dateofbirth
%
% \iffalse
%</book|report|article>
%</class&!manual>
%<*package&supervisor|class&manual>
% \fi
%
% \subsection{Felder für \cls{tudscrposter} und \pkg{tudscrsupervisor}}
%
% Die Klasse \cls{tudscrposter} und das Paket \pkg{tudscrsupervisor} stellen 
% einige weitere Felder bereit bzw. erweitern deren Funktionalitäten.
%
% \begin{macro}{\chairman}
% \begin{field}{\@chairman}
% Die Angabe des Prüfungsausschussvorsitzenden für die Aufgabenstellung, wird 
% im Makro \cs{@chairman} gespeichert.
%    \begin{macrocode}
\newcommand*\@chairman{}
\newcommand*\chairman[1]{\tud@trim@field\@chairman{#1}}
%    \end{macrocode}
% \end{field}^^A \@chairman
% \end{macro}^^A \chairman
% \begin{macro}{\grade}
% \begin{field}{\@grade}
% Die Befehle dienen zum Abspeichern der entsprechenden Parameter innerhalb
% der neu definierten Umgebungen aus dem Paket \pkg{tudscrsupervisor}.
%    \begin{macrocode}
\newcommand*\@grade{}
\newcommand*\grade[1]{\tud@trim@field\@grade{#1}}
%    \end{macrocode}
% \end{field}^^A \@grade
% \end{macro}^^A \grade
% \begin{macro}{\issuedate}
% \begin{field}{\@issuedate}
% Angabe des Anfangsdatums für die Aufgabenstellung, wird im Makro
% \cs{@issuedate} gespeichert.
%    \begin{macrocode}
\newcommand*\@issuedate{}
\newcommand*\issuedate[1]{\tud@printdate{\@issuedate}{#1}}
%    \end{macrocode}
% \end{field}^^A \@issuedate
% \end{macro}^^A \issuedate
% \begin{macro}{\duedate}
% \begin{field}{\@duedate}
% Angabe des geplanten Abgabedatums für die Aufgabenstellung, wird im Makro
% \cs{@duedate} gespeichert.
%    \begin{macrocode}
\newcommand*\@duedate{}
\newcommand*\duedate[1]{\tud@printdate{\@duedate}{#1}}
%    \end{macrocode}
% \end{field}^^A \@duedate
% \end{macro}^^A \duedate
%
% \iffalse
%</package&supervisor|class&manual>
%<*class&poster|package&supervisor|class&manual>
% \fi
%
% Einige Befehle werden nur definiert, falls das Paket nicht mit der Klasse
% \cls{tudscrposter} verwendet wird -- was allerdings nicht sinnvoll ist.
%    \begin{macrocode}
%<*supervisor>
\@ifclassloaded{tudscrposter}{\@tempswafalse}{\@tempswatrue}
\if@tempswa
%</supervisor>
%    \end{macrocode}
% \begin{macro}{\contactperson}
% \changes{v2.02}{2014/05/16}{neu, Makro \cs{contact} umbenannt}^^A
% \begin{field}{\@contactperson}
% \changes{v2.02}{2014/05/16}{neu, Makro \cs{@contact} umbenannt}^^A
% \begin{macro}{\office}
% \begin{field}{\@office}
% \begin{macro}{\telephone}
% \changes{v2.02}{2014/05/16}{neu, Umbenennung des Makros \cs{phone}}^^A
% \begin{field}{\@telephone}
% \changes{v2.02}{2014/05/16}{neu, Umbenennung des Makros \cs{@phone}}^^A
% \begin{macro}{\telefax}
% \changes{v2.05}{2016/04/05}{neu}^^A
% \begin{field}{\@telefax}
% \changes{v2.05}{2016/04/05}{neu}^^A
% Für einen Aushang bzw. ein Poster kann eine oder mehrere Kontaktpersonen 
% angegeben werden. Zusätzlich lassen sich für jede einzelne Person ein Raum,
% eine Telefonnummer und die E"~Mail-Adresse hinzugefügen.
%    \begin{macrocode}
\newcommand*\@contactperson{}
\newcommand*\contactperson[1]{\tud@trim@field\@contactperson{#1}}
%<*poster>
\let\supervisor\contactperson
%</poster>
\newcommand*\@office{}
\newrobustcmd*\office[1]{\tud@trim@field\@office{#1}}
\newcommand*\@telephone{}
\newrobustcmd*\telephone[1]{\tud@trim@field\@telephone{#1}}
\newcommand*\@telefax{}
\newrobustcmd*\telefax[1]{\tud@trim@field\@telefax{#1}}
%    \end{macrocode}
% \end{field}^^A \@telefax
% \end{macro}^^A \telefax
% \end{field}^^A \@telephone
% \end{macro}^^A \telephone
% \end{field}^^A \@office
% \end{macro}^^A \office
% \end{field}^^A \@contactperson
% \end{macro}^^A \contactperson
%
% \iffalse
%</class&poster|package&supervisor|class&manual>
%<*!manual>
%<*class>
% \fi
%
% \subsection{Verarbeitung bestimmter Feldinhalte für die Ausgabe}
%
% Einige Felder sind darauf ausgelegt, dass deren kommagetrennte Inhalte 
% einzeln abgearbeitet und ausgewertet werden können. Die folgenden Makros 
% übernehmen diese Aufgabe.
%
% \begin{macro}{\tud@if@field@unset}
% \changes{v2.06o}{2022/08/02}{neu}^^A
% Insbesondere das Autorenfeld (\cs{@author}) benötigt eine Sonderbehandlung, 
% da dieses nicht leer sondern mit einer Warnung initialisiert ist. Mit diesem
% Makro kann darauf geprüft werden, ob innerhalb eines Feldes ein Befehl 
% enthalten ist, welcher mit \cs{@latex@...} beginnt, was normalerweise für 
% generische Fehler oder Warnungen genutzt wird.
%    \begin{macrocode}
\newcommand*\tud@if@field@unset[1]{%
  \begingroup%
    \edef\tud@res@a{%
      \def\noexpand\tud@res@a####1\string\@latex@####2\noexpand\@nil{%
        \noexpand\IfArgIsEmpty{####2}%
        \unexpanded{\@tud@res@swafalse\@tud@res@swatrue}%
      }%
      \noexpand\tud@res@a%
        \expandafter\strip@prefix\meaning#1%
        \string\@latex@\noexpand\@nil%
    }%
    \tud@res@a%
    \if@tud@res@swa%
      \aftergroup\@firstoftwo%
    \else%
      \aftergroup\@secondoftwo%
    \fi%
  \endgroup%
}
%    \end{macrocode}
% \end{macro}^^A \tud@if@field@unset
% \begin{macro}{\tud@multiple@split}
% \begin{macro}{\tud@multiple@@split}
% \begin{macro}{\tud@multiple@@@split}
% Für Felder, die mehrere Personen~-- getrennt durch \cs{and}~-- beinhalten
% können und für die zusätzliche Angaben durch die Verwendung weiterer Makros 
% innerhalb des Feldbefehlargumentes möglich sind, werden diese Befehle zum 
% Aufteilen der Angaben bereitgestellt. Mit diesen wird es möglich, die durch
% \cs{and} getrennten Teile separat auszuwerten. Für diese Unterfangen wird der
% Befehl \cs{tud@multiple@@split} definiert. Dessen obligatorisches Argument 
% ist dabei das Feld mit dem auszuwertenden Inhalt.
%
% Dafür müssen für jedes so auszuwertende Feld zum einen zum Zeitpunkt der 
% Ausgabe das entsprechende Makro |\tud@split|\meta{Feld} und zum anderen 
% eine Liste der auszuwertenden lokalen Angaben |\tud@split|\meta{Feld}|@list| 
% definiert sein. Momentan werden die beiden Felder \cs{@author} und~-- für die 
% Klasse \cls{tudscrposter} sowie das Paket Pakete \pkg{tudscrsupervisor}~--
% \cs{@contactperson} zur Angabe zusätzlicher Informationen unterstützt.
%    \begin{macrocode}
\newcommand*\tud@multiple@@split{}
\newcommand*\tud@multiple@split[1]{%
%    \end{macrocode}
% Sollte ein Feld verwendet werden, welches initial eine Fehlermeldung enthält, 
% wird die vorhandene Warnung ausgegeben und danach das Feld als leer definiert.
%    \begin{macrocode}
  \expandafter\tud@if@field@unset\expandafter{\csname #1\endcsname}{%
    \csuse{#1}\csgdef{#1}{}%
  }{}%
%    \end{macrocode}
% Das Makro \cs{tud@multiple@@split} wird so definiert, dass der Befehl 
% \cs{and} als Separator für die einzelnen Argumente dient. Mit den beiden
% freigestellten Argumenten kann das Makro zur eigentlichen Ausgabe aufgerufen
% werden, welches aus dem obligatorischen Argument |#1| konstruiert wird 
% (|\tud@split|\meta{Feld}). An dieses wird der jeweils aktuelle Autor 
% im ersten Argument und die restlichen im zweiten Argument übergeben.
%    \begin{macrocode}
  \def\tud@multiple@@split##1\and##2\relax{%
    \expandafter\csname tud@split#1@do\endcsname{##1}{##2}%
  }%
  \begingroup%
    \let\and\relax%
    \let\newline\@empty%
    \let\\\@empty%
%    \end{macrocode}
% Das Feld wird mit \cs{and} terminiert, um der Definition von
% \cs{tud@multiple@@split} in jedem Fall zu entsprechen.
%    \begin{macrocode}
    \edef\@tempa{\csname #1\endcsname\and}%
  \expandafter\endgroup%
  \expandafter\tud@multiple@@split\@tempa\relax%
}
%    \end{macrocode}
% Der Befehl \cs{tud@multiple@@@split} prüft zum Schluss, ob noch weitere
% Autoren angegeben sind. Sollte dies der Fall sein, so wird der Inhalt des
% zweiten Argumentes ausgeführt und \cs{tud@multiple@@split} ein weiteres Mal
% aufgerufen, um so sequentiell alle Autoren abzuarbeiten. Dafür muss 
% \cs{tud@multiple@@@split} innerhalb des verarbeitenden Makro
% (|\tud@split|\meta{Feld}) aufgerufen werden.
%    \begin{macrocode}
\newcommand*\tud@multiple@@@split[2]{%
  \IfArgIsEmpty{#1}{%
    \let\@tempb\relax%
  }{%
    \def\@tempb{#2\tud@multiple@@split#1\relax}%
  }%
  \@tempb%
}
%    \end{macrocode}
% \end{macro}^^A \tud@multiple@@@split
% \end{macro}^^A \tud@multiple@@split
% \end{macro}^^A \tud@multiple@split
% \begin{macro}{\tud@multiple@fields@store}
% \changes{v2.04}{2015/05/12}{neu}^^A
% \begin{macro}{\tud@multiple@fields@restore}
% \changes{v2.04}{2015/05/12}{neu}^^A
% Mit \cs{tud@multiple@fields@store} und \cs{tud@multiple@fields@restore} 
% werden Hilfsmakros definiert, um einzelne Feldinhalte lokal ändern und nach
% der Verarbeitung auf den ursprünglichen Wert zurücksetzen zu können.
%
% Nach der Sicherung der globalen Feldinhalte wird der übergebene Teilinhalt
% des zweiten Argumentes mit \cs{sbox}\cs{z@}\marg{\#2} in eine Box expandiert.
% Der Teilinhalt entspricht dabei dem aktuellen Teil des Feldes vor dem
% nächsten \cs{and}. Damit werden die ggf. angegebenen lokalen Felder gesetzt,
% welche in |\tud@split|\meta{Feld}|@list| aufgelistet sind ohne eine Ausgabe
% zu erzeugen. 
%    \begin{macrocode}
\newcommand*\tud@multiple@fields@store[2]{%
  \def\@tempa##1{%
    \ifcsdef{@##1}{\tud@cs@store{@##1}}{}%
    \ifcsdef{##1}{%
      \tud@cs@store{##1}%
      \expandafter\xapptocmd\csname ##1\endcsname{\ignorespaces}%
        {}{\tud@patch@wrn##1}%
    }{}%
  }%
  \letcs\@tempb{tud@split#1@list}%
  \let\and\relax%
  \expandafter\forcsvlist\expandafter\@tempa\expandafter{\@tempb}%
  \begingroup%
    \let\thanks\@gobble%
    \let\footnote\@gobble%
    \sbox\z@{#2}%
  \endgroup%
}
%    \end{macrocode}
% Nach dem Verarbeiten und der Ausgabe der lokalen Felder werden die zuvor 
% bestehenden Feldwerte zurückgesetzt.
%    \begin{macrocode}
\newcommand*\tud@multiple@fields@restore[1]{%
  \def\@tempa##1{%
    \ifcsdef{@##1}{%
      \tud@cs@restore{@##1}%
      \global\csletcs{@##1}{@##1}%
    }{}%
    \ifcsdef{##1}{\tud@cs@restore{##1}}{}%
  }%
  \letcs\@tempb{tud@split#1@list}%
  \let\and\relax%
  \expandafter\forcsvlist\expandafter\@tempa\expandafter{\@tempb}%
}
%    \end{macrocode}
% \end{macro}^^A \tud@multiple@fields@restore
% \end{macro}^^A \tud@multiple@fields@store
% \begin{macro}{\tud@multiple@fields@preset}
% \changes{v2.04}{2015/05/12}{neu}^^A
% Mit diesem Makro wird es möglich, die Inhalte bestimmter Felder aus einer 
% definierten Liste |\tud@split|\meta{Feld}|@list| auf Standardwerte zu setzen.
%    \begin{macrocode}
\newcommand*\tud@multiple@fields@preset[3]{%
  \def\@tempa##1{%
    \edef\@tempc{\csuse{##1}}%
    \if\detokenize{#2*}\relax%
      \csdef{@##1}{}%
    \else%
      \begingroup%
        \protected@expandtwoargs\in@{\@tempc}{\csuse{#1}}%
        \ifin@%
          \ifcsvoid{@##1}{\@tempc{#2}}{}%
        \fi%
      \endgroup%
    \fi%
  }%
  \letcs\@tempb{tud@split#1@list}%
  \let\and\relax%
  \expandafter\forcsvlist\expandafter\@tempa\expandafter{\@tempb}%
  \begingroup%
    \let\thanks\@gobble%
    \let\footnote\@gobble%
    \sbox\z@{#3}%
  \endgroup%
}
%    \end{macrocode}
% \end{macro}^^A \tud@multiple@fields@preset
%
% \iffalse
%</class>
% \fi
%
% Auf der Titelseite sowie für die Aufgabenstellung (\pkg{tudscrsupervisor})
% und den Seitenfuß von Postern (\cls{tudscrposter}) wird die Angabe einer
% kollaborativen Autorenschaft ermöglicht, wo für jeden einzelnen Autor weitere
% Angaben (Matrikelnummer etc.) gemacht werden können. Hierfür werden die 
% folgenden Makros bereitgestellt.
% \begin{macro}{\tud@split@author@do}
% \changes{v2.02}{2014/07/25}{neu, aus Umbenennung \cs{tud@split@@author}}^^A
% \begin{macro}{\tud@split@author@list}
% \changes{v2.02}{2014/07/25}{neu, Umbenennung \cs{tud@split@@author@list}}^^A
% \begin{macro}{\tud@split@contactperson@do}
% \changes{v2.05}{2015/07/06}{neu}^^A
% \begin{macro}{\tud@split@contactperson@list}
% \changes{v2.05}{2015/07/06}{neu}^^A
% Die beiden Makros \cs{tud@split@author@do} und \cs{tud@split@contactperson@do}
% werden zunächst jeweils als Dummy initialisiert und an den entsprechenden
% Stellen umdefiniert. Dies betrifft den Titel, die Aufgabenstellung und den 
% Aushang in den Umgebungen \env{task} und \env{notice} sowie den Seitenfuß bei
% Postern. Im Makro \cs{tud@split@author@list} werden alle Felder hinterlegt,
% die durch die |\tud@multiple@fields@...|-Befehle geprüft und gegebenenfalls 
% initialisiert werden sollen.
%
% Für die Angabe mehrerer Kontaktpersonen im Posterfuß (\cls{tudscrposter})
% oder auf einem Aushang (\pkg{tudscrsupervisor}) wird äquivalent verfahren.
%    \begin{macrocode}
%<*class>
\newcommand*\tud@split@author@do[2]{}
%<*book|report|article>
\newcommand*\tud@split@author@list{%
  authormore,course,discipline,emailaddress,%
  matriculationyear,enrolmentyear,%
  matriculationnumber,studentid,matriculationid,%
  placeofbirth,birthplace,dateofbirth,birthday,%
}
%</book|report|article>
%    \end{macrocode}
% Der Befehl \cs{tud@split@author@list} für die Klasse \cls{tudscrposter}.
%    \begin{macrocode}
%<*poster>
\newcommand*\tud@split@author@list{%
  authormore,course,discipline,emailaddress,office,telephone,telefax%
}
%</poster>
%</class>
%<*class&poster|package&supervisor>
\newcommand*\tud@split@contactperson@do[2]{}
\newcommand*\tud@split@contactperson@list{emailaddress,office,telephone,telefax}
%</class&poster|package&supervisor>
%    \end{macrocode}
% Damit ist der Teil für das Paket \pkg{tudscrsupervisor} abgeschlossen, wo 
% bei der Verwendung von \cls{tudscrposter} die vorhergenden Befehle nicht 
% definiert werden, beendet.
%    \begin{macrocode}
%<*package&supervisor>
\fi
%</package&supervisor>
%    \end{macrocode}
% \end{macro}^^A \tud@split@contactperson@list
% \end{macro}^^A \tud@split@contactperson@do
% \end{macro}^^A \tud@split@author@list
% \end{macro}^^A \tud@split@author@do
%
% \iffalse
%</!manual>
% \fi
%
% \PrintBackMatter
%
\endinput
