% \iffalse meta-comment
%/GitFileInfo=tudscr-misc.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-misc.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
% \changes{v2.02}{2014/07/08}{\cs{FamilyKeyState} wird von Optionen genutzt}^^A
%
%
%
% \section{Verschiedenes für das \TUDScript-Bundle}
%
% Alles, wofür sich eine separate Datei nicht lohnt, landet hier.
%
% \iffalse
%<*!(manual|doc)>
%<*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}
\tud@newif\if@tud@bookmarks
\TUD@key{tudbookmarks}[true]{%
  \TUD@set@ifkey{tudbookmarks}{@tud@bookmarks}{#1}%
}
%    \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 \cs{tudbookmark}
% auch vom Anwender genutzt werden, um weitere Lesezeichen abhängig von der
% Option \opt{tudbookmarks} manuell 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.
% \ToDo{nur als internen Befehl definieren, dazugehörige Option nötig?}[v2.07]
% \ToDo{\cs{tud@x@hyperref@realfootnotes} prüfen}[v2.07]
%    \begin{macrocode}
\newcommand*\tudbookmark[1][]{\@gobbletwo}
\newcommand*\tud@x@hyperref@realfootnotes{}
\AfterPackage{hyperref}{%
  \renewcommand*\tudbookmark[3][0]{%
    \relax%
    \if@tud@bookmarks%
      \csuse{phantomsection}%
      \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%
  }%
}
%    \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@maketitle@inpage}
% \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%
  \@tud@res@swafalse%
  \if@tud@coverpage\@tud@res@swatrue\fi%
  \if@titlepageiscoverpage\@tud@res@swatrue\fi%
  \if@tud@res@swa%
    \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@maketitle@inpage{%
  \tud@x@bookmark@startatroot%
  \tudbookmark[%
%<book|report>  0%
%<article|poster>  1%
  ]{\titlename}{title}%
}{}{\tud@patch@wrn{tud@maketitle@inpage}}
\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@maketitle@inpage
% \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@cs@store{addtocontents}%
      \def\@tempc{%
        \unsettoc{toc}{totoc}%
        \tud@cs@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
%
% \iffalse
%</class&body>
%<*class&option>
% \fi
%
% \subsection{Fußnoten in Überschriften}
%
% Eigentlich sollte die Option \opt{footnotes}|=|\val{symbolheadings} es 
% ermöglichen, Fußnoten mit Symbolen in Überschriften zu verwenden. Umgesetzt 
% werden sollte dies mit dem Paket \pkg{footmisc}. Da dieses aber mit 
% Inkompatibilitäten zu \pkg{hyperref} und \KOMAScript{} aufwartet, wird darauf 
% leider verzichtet.
%^^A% \begin{option}{footnotes}
%^^A% \changes{v2.02}{2014/06/27}{neu}^^A
%^^A% \begin{macro}{\if@tud@symbolheadings}
%^^A% \changes{v2.02}{2014/06/27}{neu}^^A
%^^A% \begin{macro}{\tud@sec@note}
%^^A% \changes{v2.02}{2014/06/27}{neu}^^A
%^^A% \begin{counter}{symbolheadings}
%^^A% \changes{v2.02}{2014/06/27}{neu}^^A
%^^A% Die \KOMAScript-Option \opt{footnotes} wird um den Schlüssel 
%^^A% \val{symbolheadings} erweitert, mit welchem eingestellt werden kann, ob 
%^^A% in den Überschriften Symbole für die Fußnoten anstelle von Zahlen 
%^^A% verwendet werden sollen.
%^^A%    \begin{macrocode}
%^^A\tud@newif\if@tud@symbolheadings
%^^A\TUD@key{footnotes}{%
%^^A  \TUD@set@numkey{footnotes}{@tempa}{%
%^^A    {nosymbolheadings}{0},{numberheadings}{0},%
%^^A    {symbolheadings}{1}%
%^^A  }{#1}%
%^^A  \ifx\FamilyKeyState\FamilyKeyStateProcessed%
%^^A    \ifcase\@tempa\relax% nosymbolheadings
%^^A      \@tud@symbolheadingsfalse%
%^^A    \or% symbolheadings
%^^A      \@tud@symbolheadingstrue%
%^^A    \fi%
%^^A  \fi%
%^^A}
%^^A%    \end{macrocode}
%^^A% Mit \cs{tud@sec@note} wird die Option \opt{footnotes=symbolheadings} 
%^^A% umgesetzt. Hierfür wird das Paket \pkg{footmisc} benötigt.
%^^A%    \begin{macrocode}
%^^A\newcommand*\tud@sec@note[1]{%
%^^A  \ClassWarning{\TUD@Class@Name}{%
%^^A    You have to load package `footmisc' with\MessageBreak%
%^^A    option `stable' in order to use\MessageBreak%
%^^A    footnotes with symbols in headings%
%^^A  }%
%^^A}
%^^A\AfterPackage{footmisc}{%
%^^A  \@ifpackagewith{footmisc}{stable}{%
%^^A    \renewcommand*\tud@sec@note[1]{%
%^^A      \begingroup%
%^^A        \if@tud@symbolheadings%
%^^A          \let\c@footnote\c@symbolheadings%
%^^A          \def\thefootnote{\fnsymbol{symbolheadings}}%
%^^A        \fi%
%^^A        \footnote{#1}%
%^^A      \endgroup%
%^^A    }%
%^^A  }{}%
%^^A}
%^^A%    \end{macrocode}
%^^A% Bei aktivierter Option \opt{footnotes}|=|\val{symbolheadings} wird  
%^^A% dieser Zähler für die Symboleauswahl von Fußnoten in Überschirften 
%^^A% inkrementiert.
%^^A%    \begin{macrocode}
%^^A\AtEndOfClass{%
%^^A%<book|report>  \newcounter{symbolheadings}[chapter]
%^^A%<article|poster>  \newcounter{symbolheadings}
%^^A}
%^^A%    \end{macrocode}
%^^A% \end{counter}^^A symbolheadings
%^^A% \end{macro}^^A \tud@sec@note
%^^A% \end{macro}^^A \if@tud@symbolheadings
%^^A% \end{option}^^A footnotes
%
% \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.
%
% \begin{macro}{\tud@x@scr@checkoptions}
% \changes{v2.06}{2018/07/31}{neu}^^A
% \begin{macro}{\tud@x@scr@pt}
% \changes{v2.06}{2018/07/31}{neu}^^A
% Das Makro \cs{tud@x@scr@checkoptions} wird mit \cs{DeclareOption*} für alle 
% Optionen aufgerufen, welche kein Mitglied der Familie~\val{TUD} sind. Damit 
% kann auf nicht definierte Schlüssel reagiert werden. Anschließend werden diese
% an die zugrundeliegende \KOMAScript-Klasse weitergereicht.
%    \begin{macrocode}
\newcommand*\tud@x@scr@checkoptions{%
  \expandafter\tud@x@scr@pt\CurrentOption pt\@nil%
  \expandafter\PassOptionsToClass\expandafter{\CurrentOption}{\TUD@Class@KOMA}%
}
%    \end{macrocode}
% Wird die Schriftgröße im veralteten Format \val{\dots pt} als Option
% übergeben, so wird der Schalter \cs{if@tud@x@scr@fontsize@set} auf \val{true} 
% gesetzt.
%    \begin{macrocode}
\newcommand*\tud@x@scr@pt{}
\def\tud@x@scr@pt #1pt#2\@nil{%
  \tud@if@strequal{#2}{pt}{\Ifnumber{#1}{\@tud@x@scr@fontsize@settrue}{}}{}%
}
%    \end{macrocode}
% \end{macro}^^A \tud@x@scr@pt
% \end{macro}^^A \tud@x@scr@checkoptions
%
% \iffalse
%</class&option>
%<*class&body>
% \fi
%
% Wurde das Papierformat jedoch nicht die Schriftgröße geändert, wird eine
% Warnung erzeugt.
%    \begin{macrocode}
\AtBeginDocument{%
  \if@tud@x@scr@fontsize@set\else%
    \@tud@res@swafalse%
    \ifdim\tud@dim@layoutwidth<208mm\relax\@tud@res@swatrue\fi%
    \ifdim\tud@dim@layoutwidth>212mm\relax\@tud@res@swatrue\fi%
    \ifdim\tud@dim@layoutheight<295mm\relax\@tud@res@swatrue\fi%
    \ifdim\tud@dim@layoutheight>299mm\relax\@tud@res@swatrue\fi%
    \if@tud@res@swa%
      \ClassWarningNoLine{\TUD@Class@Name}{%
        You've set a layout size, which is different from\MessageBreak%
        default (paper=a4, paper=portrait). Therefore you\MessageBreak%
        should explicitly specify an font size. See the\MessageBreak%
        manual for further information%
      }%
    \fi%
  \fi%
}
%    \end{macrocode}
%
% \subsection{Fixierte Gleitobjekte für Poster}
%
% \begin{environment}{figurehere}
% \changes{v2.05}{2016/04/17}{neu}^^A
% \changes{v2.06o}{2022/08/02}{für \cls{tudscrposter} übernommen}^^A
% \begin{environment}{tablehere}
% \changes{v2.05}{2016/04/17}{neu}^^A
% \changes{v2.06o}{2022/08/02}{für \cls{tudscrposter} übernommen}^^A
% \begin{macro}{\tud@here@begin}
% \changes{v2.06o}{2022/08/02}{neu}^^A
% \begin{macro}{\tud@here@end}
% \changes{v2.06o}{2022/08/02}{neu}^^A
% Für die Klasse \cls{tudscrposter} werden zwei Umgebungen bereitgestellt, mit 
% denen sich Tabellen und Bilder an einer bestimmten Stelle exakt platzieren
% lassen. Prinzipiell könnte hierfür auch das Paket \pkg{float} zum Einsatz
% kommen. Ursprünglich stammt die Idee aus \cls{tudmathposter} und wurde hier 
% generalisiert implementiert.
%    \begin{macrocode}
%<*poster>
\newcommand*\tud@here@begin[1]{%
  \def\@captype{#1}%
  \vskip\intextsep%
  \color@vbox%
    \normalcolor%
    \vbox\bgroup%
      \hsize=\columnwidth%
      \@parboxrestore%
      \@floatboxreset%
      \@setnobreak%
      \ignorespaces%
}
\newcommand*\tud@here@end{%
      \vskip\intextsep%
      \@minipagefalse%
      \outer@nobreak%
    \egroup%
  \color@endbox%
}
\newenvironment{figurehere}{\tud@here@begin{figure}}{\tud@here@end}
\newenvironment{tablehere}{\tud@here@begin{table}}{\tud@here@end}
%</poster>
%    \end{macrocode}
% \end{macro}^^A \tud@here@end
% \end{macro}^^A \tud@here@begin
% \end{environment}^^A tablehere
% \end{environment}^^A figurehere
%
% \iffalse
%</class&body>
%<*option>
% \fi
%
% \section{Verarbeitung von Optionen}
% \subsection{Sukkzessives Abarbeiten von Optionen im Dokument}
%
% Werden mit \cs{TUDoptions} nach |\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.
%
% \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}
\newcommand*\tud@atdocument@hook{}
\let\tud@atdocument@hook\relax
\newcommand*\TUD@SpecialOptionAtDocument[1]{}
\AfterEndPreamble{%
  \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}}%
  }%
}
%    \end{macrocode}
% \end{macro}^^A \tud@atdocument@hook
% \end{macro}^^A \TUD@SpecialOptionAtDocument
%
% \iffalse
%</option>
%<*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@math@set}
% \changes{v2.05}{2016/06/14}{neu}^^A
% \begin{macro}{\if@tud@relspacing@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@cd@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}
\tud@newif\if@tud@font@set
\tud@newif\if@tud@math@set
\tud@newif\if@tud@relspacing@set
%<*class>
\tud@newif\if@tud@x@scr@headings@reset
\tud@newif\if@tud@cd@process
\tud@newif\if@tud@cdgeometry@process
%</class>
\newcommand*\tud@atdocument@process{%
  \if@tud@font@set%
    \tud@font@set%
    \global\@tud@font@setfalse%
    \global\@tud@relspacing@setfalse%
%<class>    \global\@tud@cd@processfalse%
  \fi%
  \if@tud@relspacing@set%
    \tud@relspacing@set%
    \global\@tud@relspacing@setfalse%
  \fi%
  \if@tud@math@set%
    \tud@math@set%
    \global\@tud@math@setfalse%
  \fi%
%<*class>
  \if@tud@x@scr@headings@reset%
    \tud@x@scr@headings@reset%
    \global\@tud@x@scr@headings@resetfalse%
    \global\@tud@cd@processfalse%
  \fi%
  \if@tud@cd@process%
    \tud@cd@process%
    \global\@tud@cd@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@cd@process
% \end{macro}^^A \if@tud@x@scr@headings@reset
% \end{macro}^^A \if@tud@relspacing@set
% \end{macro}^^A \if@tud@math@set
% \end{macro}^^A \if@tud@font@set
% \end{macro}^^A \tud@atdocument@process
%
% \iffalse
%</body>
%</!(manual|doc)>
%<*execute>
%<*class&!inherit|package&fonts>
% \fi
%
% \subsection{Versionsabhängige Voreinstellungen}
%
% Voreinstellungen von neu eingeführten Optionen, welche die resultierende 
% Ausgabe entscheidend verändern könnten, werden hier versionsabhängig gesetzt.
% Hierfür wird der Schlüssel \opt{tudscrver} des Mitglieds \val{.comp} vor 
% allen anderen Schlüsseln ausgewertet. Danach kann mit \cs{tud@if@v@lower} auf 
% die gewählte Kompatibilitäsversion getestet werden.
%    \begin{macrocode}
\DeclareOption*{}
\TUDProcessOptions[.comp]\relax
%    \end{macrocode}
% Ab der \TUDScript-Version~v2.05 werden einige vertikale Abstände abhängig von 
% der Schriftgröße definiert. Sollte eine frühere Kompatibilitätseinstellung 
% angegeben worden sein, wird dieses verhalten deaktiviert.
%    \begin{macrocode}
\tud@if@v@lower{2.05}{%
  \TUD@key@preset{relspacing}{false}%
}{%
  \TUD@key@preset{relspacing}{true}%
}
%    \end{macrocode}
% Ab \TUDScript-Version~v2.06 werden die verwendeten Schriften auf \OpenSans 
% gesetzt, für die Komptibilität zu vorherigen Versionen auf \Univers und \DIN.
%    \begin{macrocode}
\tud@if@v@lower{2.06}{%
%<!(class&poster)>  \TUD@key@preset{cdoldfont}{true}%
%<class&poster>  \TUD@key@preset{cdoldfont}{ultrabold}%
  \TUD@key@preset{ttfont}{lmodern}%
%<class>  \TUD@key@preset{headings}{light}%
}{%
%<!(class&poster)>  \TUD@key@preset{cdfont}{true}%
%<class&poster>  \TUD@key@preset{cdfont}{ultrabold}%
  \TUD@key@preset{ttfont}{roboto}%
%<class>  \TUD@key@preset{headings}{heavy}%
}
%    \end{macrocode}
%
% \iffalse
%</class&!inherit|package&fonts>
% \fi
%
% Es werden die Standardoptionen ausgeführt. Für die Klasse \cls{tudscrposter} 
% werden die Farben aktiviert.
%    \begin{macrocode}
%<*package&manual>
\KOMAoptions{headings=small}
\TUDoptions{cdfoot=true}
%</package&manual>
%<*class&!inherit|package>
\TUDExecuteOptions{%
%<*package&fixfonts>
  headings=heavy%
%</package&fixfonts>
%<*class&!inherit>
%<*book|report|article>
  cd=true,tudbookmarks=true%
%</book|report|article>
%<*poster>
  cd=bicolor,tudbookmarks=false%
%</poster>
%</class&!inherit>
}
%</class&!inherit|package>
%    \end{macrocode}
%
% \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}
%<*package>
%<*fonts>
\DeclareOption*{\expandafter\TUD@KOMAoptions\expandafter{\CurrentOption}}
%</fonts>
%<*fixfonts>
\DeclareOption*{%
  \expandafter\PassOptionsToPackage\expandafter{\CurrentOption}%
  {tudscrfonts}%
}
%</fixfonts>
%<*comp>
\DeclareOption*{\expandafter\TUDoptions\expandafter{\CurrentOption}}
%</comp>
%</package>
%<*class>
%<*!inherit>
\DeclareOption*{\tud@x@scr@checkoptions}
%</!inherit>
%<*inherit>
\DeclareOption*{%
  \expandafter\PassOptionsToClass\expandafter{\CurrentOption}%
  {\TUD@Class@Parent}%
}
%</inherit>
%</class>
%    \end{macrocode}
% Nach der Auswerung der Optionen wird die korrespondierende \KOMAScript-Klasse 
% bzw. \TUDScript-Elternklasse geladen.
%    \begin{macrocode}
\TUDProcessOptions\relax
%<*class&!inherit>
\LoadClass{\TUD@Class@KOMA}[%
%!TUD@KOMAVersion
]
%</class&!inherit>
%<*class&inherit>
\LoadClass{\TUD@Class@Parent}[%
%!TUD@Version
]
%</class&inherit>
%    \end{macrocode}
%
% \iffalse
%<*class&!inherit|package&fonts>
% \fi
%
% \subsection{Optionen ohne späte Wahlmöglichkeit}
%
% Einige Optionen können nur zum Zeitpunkt des Ladens einer Klasse oder eines 
% Paketes respektive in der Präambel gesetzt werden. Diese müssen \emph{nach}
% \cs{TUDProcessOptions} mit \cs{TUD@key@toolate} redefiniert werden.
%
% \begin{macro}{\TUD@key@toolate}
% \changes{v2.06c}{2019/08/20}{neu}^^A
% Dieser Befehl definiert eine Fehlermeldung für Schlüssel respektive Optionen, 
% die zu spät verwendet wurden, wobei er innerhalb der Makros \cs{AtEndOfClass},
% oder \cs{AtEndOfPackage} respektive \cs{AtEndPreamble} genutzt werden sollte.
% Wird dieser im Kontext von Klasse oder Paket (|\@currname.\@currext-h@@k|) 
% verwendet, wird gemeldet, dass der Schlüssel allein beim Laden der Klasse 
% respektive des Paketes genutzt werden darf. Andernfalls wird die zwingende
% Verwendung in der Präambel angemerkt.
%    \begin{macrocode}
\newcommand*\TUD@key@toolate[1]{%
  \csedef{tud@key@toolate@@#1}{%
%<*class>
    \noexpand\ClassError{\noexpand\TUD@Class@Name}%
%</class>
%<*package&fonts>
    \noexpand\PackageError{tudscrfonts}%
%</package&fonts>
    {Option `#1' too late}{%
      Option `#1' can only be set\space%
      \ifcsdef{\@currname.\@currext-h@@k}{%
        as optional \MessageBreak argument while loading\space%
%<*class>
        class `\noexpand\TUD@Class@Name'%
%</class>
%<*package&fonts>
        package `tudscrfonts'%
%</package&fonts>
      }{%
        in the preamble%
      }%
      \MessageBreak but you have tried to set it up later.%
    }%
  }%
  \TUD@key[]{#1}[]%
  {%
    \csuse{tud@key@toolate@@#1}%
    \FamilyKeyStateProcessed%
  }%
}
%    \end{macrocode}
% \end{macro}^^A \TUD@key@toolate
%
% \iffalse
%</class&!inherit|package&fonts>
%</execute>
%<*manual|doc>
% \fi
%
% \section{Zusätzliches für die Benutzer- und Quelltextdokumentation}
%
% Hier tauchen Hilfsmittel auf, die für die Dokumentation verwendet werden.
%
% \iffalse
%<*option>
% \fi
%
% \subsection{Zusätzliche Pakete}
%
% Bugfixes für unterschiedliche Pakete.
%    \begin{macrocode}
\RequirePackage{scrhack}[%
%!TUD@KOMAVersion
]
%    \end{macrocode}
% Das Paket für intelligente Leerzeichen am Ende von Makros mit \cs{xspace}.
%    \begin{macrocode}
\RequirePackage{xspace}
\xspaceaddexceptions{"=}
%    \end{macrocode}
% Das Paket \pkg{marginnote} stellt nicht fließenden Randnotizen bereit, welche 
% für die Kennzeichnung von Änderungen, Hinweise oder ToDo-Notizen verwendet 
% werden. Die Randnotizen werden auf dem linken~-- weil größeren~-- Seitenrand
% gesetzt.
%    \begin{macrocode}
\PassOptionsToPackage{quiet}{marginnote}
\RequirePackage{marginnote}
%<!doc>\reversemarginpar
%    \end{macrocode}
% Das Paket \pkg{shellesc} ermöglicht mit dem Befehl \cs{ShellEscape} die 
% Verwendung von Systembefehlen auf der Kommandozeile unabhängig vom genutzten
% Format. Sollte \app{lualatex} als Dokumentprozessor eingesetzt werden, sind 
% dennoch die beiden \app{pdflatex}-Primitiven \cs{pdf(@)strcmp} und 
% \cs{pdf(@)shellescape} nötig, wofür das Paket \pkg{pdftexcmds} geladen wird.
%    \begin{macrocode}
\RequirePackage{shellesc}
\RequirePackage{pdftexcmds}
%    \end{macrocode}
%
% Das Paket \pkg{hyperref} wird für alle möglichen Links und Querverweise 
% geladen, \pkg{bookmark} verbessert das Erstellen der Outline-Einträge.
%
%    \begin{macrocode}
\PassOptionsToPackage{hyperindex=false}{hyperref}
\AfterPackage*{bookmark}{\bookmarksetup{open,openlevel=1}}
%    \end{macrocode}
% Es folgen einige Befehle, die an das Paket \pkg{hyperref} gekoppelt sind. 
% Sobald das Paket geladen wurde, werden die Makros mit der jeweiligen
% Funktionalität definiert. 
%    \begin{macrocode}
\AfterAtEndOfPackage*{hyperref}{%
  \@ifpackageloaded{bookmark}{}{\RequirePackage{bookmark}}%
  \hypersetup{colorlinks,linkcolor=blue}%
}
%    \end{macrocode}
% \begin{macro}{\hrfn}
% \changes{v2.02}{2014/08/16}{neu}^^A
% \changes{v2.04}{2015/02/18}{Schriftgröße mit \cs{scalebox}}^^A
% Mit diesem Makro können Hyperlinks im Fließtext erzeugt werden, welche 
% zusätzlich noch die dazugeörige URL als Fußnote anzeigen.
%    \begin{macrocode}
\newcommand*\hrfn[2]{%
  \href{#1}{\trim@spaces{#2}}%
  \footnote{\strut\url{#1}}%
}
%    \end{macrocode}
% \end{macro}^^A \hrfn
% \begin{macro}{\mailto}
% Ein Makro zur Angabe einer verlinkten E"~Mail-Adresse.
%    \begin{macrocode}
\newrobustcmd*\mailto[1]{\mbox{\href{mailto:#1}{\nolinkurl{#1}}}}
%    \end{macrocode}
% \end{macro}^^A \mailto
% \begin{macro}{\url}
% \begin{macro}{\nolinkurl}
% \begin{macro}{\href}
% \begin{macro}{\hypersetup}
% \begin{macro}{\phantomsection}
% \begin{macro}{\pdfbookmark}
% \begin{macro}{\currentpdfbookmark}
% \begin{macro}{\subpdfbookmark}
% \begin{macro}{\belowpdfbookmark}
% Sollte \pkg{hyperref} nicht geladen werden, müssen einige Befehle rudimentär 
% definiert werden.
%    \begin{macrocode}
\TUD@UnwindPackage{hyperref}{%
  \RequirePackage{url}
  \providerobustcmd*\url[1]{\texttt{\detokenize{#1}}}%
  \providerobustcmd*\nolinkurl[1]{\url{#1}}%
  \providerobustcmd*\href[3][]{#3}%
  \providecommand*\hypersetup[1]{}%
  \providecommand*\phantomsection{}%
  \providecommand*\pdfbookmark[3][]{}%
  \providecommand*\currentpdfbookmark[2]{}%
  \providecommand*\subpdfbookmark[2]{}%
  \providecommand*\belowpdfbookmark[2]{}%
}
%    \end{macrocode}
% \end{macro}^^A \belowpdfbookmark
% \end{macro}^^A \subpdfbookmark
% \end{macro}^^A \currentpdfbookmark
% \end{macro}^^A \pdfbookmark
% \end{macro}^^A \phantomsection
% \end{macro}^^A \hypersetup
% \end{macro}^^A \href
% \end{macro}^^A \nolinkurl
% \end{macro}^^A \url
%
% Etwas Kleinkram für \pkg{babel} und \pkg{csquotes}. Das letztere Paket dient
% dem sprachabhängigen Setzen von Anführungszeichen und sollte erst nach 
% \pkg{inputenc} oder \pkg{inputenx} geladen werden.
%    \begin{macrocode}
\AfterPackage*{babel}{\RequirePackage{csquotes}}
%    \end{macrocode}
% \begin{macro}{\selectlanguage}
% \begin{macro}{\glqq}
% \begin{macro}{\grqq}
% \begin{macro}{\enquote}
%    \begin{macrocode}
\TUD@UnwindPackage{babel}{%
  \ClassWarningNoLine{\TUD@Class@Name}{Package `babel' not loaded}%
  \providecommand*\selectlanguage[1]{}%
  \providecommand*\glqq{\quotedblbase}%
  \providecommand*\grqq{\textquotedblleft}%
  \providecommand*\seename{see}%
  \providecommand*\alsoname{see\nobreakspace also}%
}
\TUD@UnwindPackage{csquotes}{%
  \ClassWarningNoLine{\TUD@Class@Name}{Package `csquotes' not loaded}%
  \providecommand\enquote[1]{\emph{#1}}%
}
%    \end{macrocode}
% \end{macro}^^A \enquote
% \end{macro}^^A \grqq
% \end{macro}^^A \glqq
% \end{macro}^^A \selectlanguage
%
% \iffalse
%<*class&manual>
% \fi
%
% \subsection{Sortieren von Listen}
%
% \begin{macro}{\tud@list@sort}
% \changes{v2.02}{2014/07/25}{neu}^^A
% \begin{macro}{\tud@list@@sort}
% \changes{v2.02}{2014/07/25}{neu}^^A
% \begin{macro}{\tud@templist}
% \changes{v2.02}{2014/07/25}{neu}^^A
% \begin{macro}{\if@tud@list@sorted}
% \changes{v2.02}{2014/07/25}{neu}^^A
% Der Befehl \cs{tud@list@sort} erwartet eine \pkg{etoolbox}-Liste und sortiert 
% diese mit dem Makro \cs{sort@list} in alphabetischer Reihenfolge in eine 
% kommagetrennte Auflistung. Diese wird anschließend wieder in eine
% \pkg{etoolbox}-Liste umgewandelt.
%    \begin{macrocode}
\newcommand*\tud@templist{}
\let\tud@templist\relax
\newcommand*\tud@list@sort[1]{%
  \ifdefvoid{#1}{%
    \ClassWarning{tudscrmanual}{%
      The given list \string#1\space\MessageBreak%
      is empty, nothing to sort here%
    }%
  }{%
    \let\tud@reserved#1%
    \let\tud@templist\relax%
    \forlistloop\tud@list@@sort{\tud@reserved}%
    \let\tud@reserved\relax%
    \@for\@tempa:=\tud@templist\do{\listeadd\tud@reserved{\@tempa}}%
    \let#1\tud@reserved%
  }%
}
%    \end{macrocode}
% Hier erfolgt die eigentliche Sortierung der Liste.
%    \begin{macrocode}
\tud@newif\if@tud@list@sorted
\newcommand*\tud@list@@sort[1]{%
%    \end{macrocode}
% Der erste Eintrag wird direkt der Liste hinzugefügt.
%    \begin{macrocode}
  \ifx\tud@templist\relax%
    \def\tud@templist{#1}%
%    \end{macrocode}
% Weitere Einräge werden mit \cs{pdfstrcmp} an der richtigen Stelle eingefügt.
% Dabei wird die kommagetrennte Liste \cs{tud@templist} durchlaufen und
% \cs{@tempb} als Hilfsmakro verwendet, in welches die aktuelle Liste innerhalb 
% der \cs{@for}-Schleife stückweise expandiert wird. Wenn das aktuelle Element
% an der dafür passenden Stelle eingesetzt wurde, wird \cs{if@tud@list@sorted} 
% gesetzt.
%    \begin{macrocode}
  \else%
    \@tud@list@sortedfalse%
    \let\@tempb\@empty%
    \@for\@tempa:=\tud@templist\do{%
%    \end{macrocode}
% Ist der Eintrag bereits erfolgt, wird der verbliebene Teil der Liste 
% angehangen.
% \ToDo{\cs{expandafter}\cs{edef}\cs{expandafter} ist quatsch, oder?}[v2.07]
%    \begin{macrocode}
      \if@tud@list@sorted%
        \expandafter\edef\expandafter\@tempb\expandafter{\@tempb,\@tempa}%
      \else%
%    \end{macrocode}
% Liegt der Eintrag in alphabetischer Reihenfolge vor dem aktuellen der 
% durchlaufenenen Liste, so wird dieser davor eingefügt. Dabei muss der Fall, 
% dass das Element der erste Eintrag in der temporären Liste \cs{@tempb} ist, 
% eine Sonderbehandlung erfolgen. Anschließend wird \cs{@tud@list@sortedtrue} 
% gesetzt.
%    \begin{macrocode}
        \expandafter\ifnum\pdf@strcmp{#1}{\@tempa}<\z@\relax%
          \ifx\@tempb\@empty%
            \expandafter\edef\expandafter\@tempb\expandafter{%
              #1,\@tempa%
            }%
          \else%
            \expandafter\edef\expandafter\@tempb\expandafter{%
              \@tempb,#1,\@tempa%
            }%
          \fi%
          \@tud@list@sortedtrue%
        \else%
%    \end{macrocode}
% Ist Eintrag in alphabetischer Reihenfolge nach dem aktuellen der geprüften 
% Liste, so wird dieser (noch) nicht eingefügt. Der Sonderfall des ersten
% Elementes wird abgedeckt.
%    \begin{macrocode}
          \ifx\@tempb\@empty%
            \expandafter\edef\expandafter\@tempb\expandafter{\@tempa}%
          \else%
            \expandafter\edef\expandafter\@tempb\expandafter{\@tempb,\@tempa}%
          \fi%
        \fi%
      \fi%
    }%
%    \end{macrocode}
% Wurde der Eintrag nach dem Durchlaufen der Liste nicht eingefügt, so erfolgt 
% dies hier am Ende der Liste.
%    \begin{macrocode}
    \if@tud@list@sorted\else%
      \expandafter\edef\expandafter\@tempb\expandafter{\@tempb,#1}%
    \fi%
%    \end{macrocode}
% Die temporäre Liste \cs{@tempb} wird auf \cs{tud@templist} überschrieben.
%    \begin{macrocode}
    \let\tud@templist\@tempb%
  \fi%
}
%    \end{macrocode}
% \end{macro}^^A \if@tud@list@sorted
% \end{macro}^^A \tud@templist
% \end{macro}^^A \tud@list@@sort
% \end{macro}^^A \tud@list@sort
%
% \iffalse
%</class&manual>
% \fi
%
% \subsection{Stringmanipulation}
%
% \begin{macro}{\tud@replace@in}
% \changes{v2.05}{2015/11/01}{neu}^^A
% \changes{v2.06o}{2022/08/08}{neu}^^A
% \begin{macro}{\tud@replace@@in}
% \changes{v2.06o}{2022/08/08}{neu}^^A
% Mit diesem Befehl kann in einem gegebenen Makro ein bestimmtes Zeichen durch 
% ein anderes ersetzt werden. Dies wird verwendet, um für Indexbefehle die 
% möglicherweise enthaltenen |@|"~Zeichen oder in Datei- und Pfadangaben 
% Unterstriche zu ersetzen.
%    \begin{macrocode}
\newcommand*\tud@replace@in[3]{%
  \begingroup%
%    \end{macrocode}
% Zunächst wird der Inhalt des ersten Argumentes expandiert. Anschließend 
% wird \cs{tud@res@b} als ein durch \cs{@nil} abgegrenztes Makro mit zwei
% Argumenten definiert, wobei diese durch das im zweiten Argument gegebene 
% \meta{Zeichen} voneinander abgegrenzt werden. Dieses Makro wird nun so lange 
% rekursiv mit dem zweiten Teil aufgerufen, bis dieses leer is. Dabei wird der 
% erste, durch das angegebene zu ersetzende Zeichen Teil sukzessive an 
% \cs{tud@res@c} angehängt und um das im dritten Argument angegebene 
% Ersatzzeichen vervollständigt.
%    \begin{macrocode}
    \edef\tud@res@a{\expandonce{#1}}%
    \let\tud@res@c\@empty%
    \def\tud@res@b##1#2##2\@nil{%
      \IfArgIsEmpty{##2}{%
        \appto\tud@res@c{##1}%
      }{%
        \appto\tud@res@c{##1#3}%
        \tud@res@b##2\@nil%
      }%
    }%
    \expandafter\tud@res@b\tud@res@a#2\@nil%
    \edef\tud@res@a{%
      \endgroup%
      \unexpanded{\def#1}{\expandonce\tud@res@c}%
    }%
  \tud@res@a%
}
%    \end{macrocode}
% Diese Variante sorgt dafür, dass die zu ersetzenden Zeichen alle als Strings 
% behandelt werden.
%    \begin{macrocode}
\newcommand*\tud@replace@@in[3]{%
  \begingroup%
    \protected@edef\tud@res@a{#1}%
    \edef\tud@res@a{\detokenize\expandafter{\tud@res@a}}%
    \edef\tud@res@b{%
      \unexpanded{\tud@replace@in\tud@res@a}{\detokenize{#2}}{\detokenize{#3}}%
    }%
    \tud@res@b%
    \edef\tud@res@a{%
      \endgroup%
      \unexpanded{\def#1}{\tud@res@a}%
    }%
  \tud@res@a%
}
%    \end{macrocode}
% \end{macro}^^A \tud@replace@@in
% \end{macro}^^A \tud@replace@in
%
% \iffalse
%</option>
%<*body>
% \fi
%
% \subsection{Zusätzliche Markup-Befehle}
% \subsubsection{Textauszeichnung}
%
% \begin{macro}{\@pnumwidth}
% \begin{macro}{\@tocrmarg}
% Etwas mehr Platz im Inhaltsverzeichnis für die Seitenzahlen.
% \ToDo{direkt in die Klassen übernehmen}[v2.07]
%    \begin{macrocode}
\renewcommand*\@pnumwidth{2.1em}
\renewcommand*\@tocrmarg{3.1em}
%    \end{macrocode}
% \end{macro}^^A \@tocrmarg
% \end{macro}^^A \@pnumwidth
%
% \begin{macro}{\textsbn}
% \changes{v2.02}{2014/08/16}{neu}^^A
% \begin{macro}{\sbnfont}
% \changes{v2.02}{2014/08/16}{neu}^^A
% \begin{macro}{\textsbi}
% \changes{v2.02}{2014/08/16}{neu}^^A
% \begin{macro}{\sbifont}
% \changes{v2.02}{2014/08/16}{neu}^^A
% \begin{macro}{\textttit}
% \changes{v2.06o}{2022/08/03}{neu}^^A
% \begin{macro}{\ttitfont}
% \changes{v2.06o}{2022/08/03}{neu}^^A
% Kombinierte Auszeichnungsbefehle für Text.
%    \begin{macrocode}
\newcommand*\textsbn{}
\newrobustcmd*\sbnfont{\sffamily\bfseries\upshape}
\DeclareTextFontCommand\textsbn{\sbnfont}
\newcommand*\textsbi{}
\newrobustcmd*\sbifont{\sffamily\bfseries\itshape}
\DeclareTextFontCommand\textsbi{\sbifont}
\newcommand*\textttit{}
\newrobustcmd*\ttitfont{\ttfamily\itshape}
\DeclareTextFontCommand\textttit{\ttitfont}
%    \end{macrocode}
% \end{macro}^^A \ttitfont
% \end{macro}^^A \textttit
% \end{macro}^^A \sbifont
% \end{macro}^^A \textsbi
% \end{macro}^^A \sbnfont
% \end{macro}^^A \textsbn
%
% \subsubsection{Logisches Markup}
%
% \begin{macro}{\tud@english}
% Hiermit wird der Argumentsinhalt mit englischen Trennungsmustern gesetzt,
% falls die Sprache geladen wurde.
%    \begin{macrocode}
\newcommand*\tud@english[1]{%
  \iflanguageloaded{english}{\foreignlanguage{english}{#1}}{#1}%
}
\AfterPackage*{babel}{%
  \renewcommand*\tud@english[1]{\foreignlanguage{english}{#1}}%
}
%    \end{macrocode}
% \end{macro}^^A \tud@english
% \begin{macro}{\KOMAScript}
% \begin{macro}{\TUDScript}
% \begin{macro}{\vTUDScript}
% \begin{macro}{\vKOMAScript}
% Für die robuste Verwendung im Text.
%    \begin{macrocode}
\kernel@make@fragile\KOMAScript
\edef\KOMAScript{\noexpand\mbox{\expandonce\KOMAScript}\noexpand\xspace}
\robustify\KOMAScript
\robustify\TUDScript
\AfterPackage*{hyperref}{%
  \pdfstringdefDisableCommands{%
    \def\KOMAScript{KOMA-Script{}}%
    \def\TUDScript{TUD-Script{}}%
  }%
}
%    \end{macrocode}
% Diese Befehle geben in der Dokumentation die aktuelle Version von \TUDScript
% sowie die mindestens notwendige Version von \KOMAScript{} aus.
%    \begin{macrocode}
\newcommand*\vTUDScript{v\TUDScriptVersionNumber}
\newcommand*\vKOMAScript{v\TUD@KOMAVersionNumber}
%    \end{macrocode}
% \end{macro}^^A \vKOMAScript
% \end{macro}^^A \vTUDScript
% \end{macro}^^A \TUDScript
% \end{macro}^^A \KOMAScript
% \begin{macro}{\CD}
% \begin{macro}{\CDs}
% \begin{macro}{\TUD}
% \begin{macro}{\TnUD}
% \begin{macro}{\TUDCD}
% \changes{v2.05}{2015/11/01}{neu}^^A
% \begin{macro}{\TUDCDs}
% \changes{v2.05}{2015/11/01}{neu}^^A
% \begin{macro}{\TUDForum}
% \changes{v2.06o}{2022/08/04}{neu}^^A
% \begin{macro}{\DDC}
% Diese Befehle stellen regelmäßig in der Quelltextdokumentatuion und im 
% Handbuch genutzte Textbausteine bereit. Dazu wird der Befehl \cs{xspace} aus 
% dem \pkg{xspace}-Paket genutzt.
%    \begin{macrocode}
\newrobustcmd*\CD{\tud@english{Corporate Design}\xspace}
\newrobustcmd*\CDs{\tud@english{Corporate Designs}\xspace}
\newrobustcmd*\TUD{Technische Universit\"at Dresden\xspace}
\newrobustcmd*\TnUD{Technischen Universit\"at Dresden\xspace}
\newcommand*\TUDCD{\CD der \TnUD}
\newcommand*\TUDCDs{\CDs der \TnUD}
\newrobustcmd*\TUDForum{\mbox{T\kern.05em U\kern.05em D-\LaTeX-Forum}\xspace}
\newrobustcmd*\DDC{%
  \mbox{%
    D\kern.05em R\kern.05em E\kern.05em S\kern.05em %
    D\kern.05em E\kern.05em N\kern.1em-\kern.1em concept%
  }\xspace%
}
\AfterPackage*{hyperref}{%
  \pdfstringdefDisableCommands{%
    \def\CD{Corporate Design{}}%
    \def\CDs{Corporate Designs{}}%
    \def\TUD{Technische Universit\"at Dresden{}}%
    \def\TnUD{Technischen Universit\"at Dresden{}}%
    \def\TUDForum{TUD-LaTeX-Forum{}}%
    \def\DDC{DRESDEN-concept{}}%
  }%
}
%    \end{macrocode}
% \end{macro}^^A \DDC
% \end{macro}^^A \TUDForum
% \end{macro}^^A \TUDCDs
% \end{macro}^^A \TUDCD
% \end{macro}^^A \TnUD
% \end{macro}^^A \TUD
% \end{macro}^^A \CDs
% \end{macro}^^A \CD
%
% \begin{macro}{\OpenSans}
% \changes{v2.06}{2018/07/02}{neu}^^A
% \begin{macro}{\Univers}
% \begin{macro}{\DIN}
% Für die Nennung der Schriften spezielle Markos bereitgestellt.
%    \begin{macrocode}
\newrobustcmd*\OpenSans{\textcdbn{Open\nobreakspace Sans}\xspace}
\newrobustcmd*\Univers{\textcdbi{Univers}\xspace}
\newrobustcmd*\DIN{\textcdbi{DIN\nobreakspace Bold}\xspace}
\AfterPackage*{hyperref}{%
  \pdfstringdefDisableCommands{%
    \def\OpenSans{Open Sans{}}%
    \def\Univers{Univers{}}%
    \def\DIN{DIN Bold{}}%
  }%
}
%    \end{macrocode}
% \end{macro}^^A \DIN
% \end{macro}^^A \Univers
% \end{macro}^^A \OpenSans
%
% \begin{macro}{\GitHubBase}
% Angabe der URL des verwendeten GitHub-Repository. Aktuell nicht implementiert.
%    \begin{macrocode}
\newcommand*\GitHubBase[1]{}
%    \end{macrocode}
% \end{macro}^^A \GitHubBase
% \begin{macro}{\GitHubRepo}
% \changes{v2.02}{2014/08/16}{neu}^^A
% Auszeichnungsbefehle für Verweise auf ein GitHub-Repository. 
%    \begin{macrocode}
\NewDocumentCommand\GitHubRepo{!s !t' !O{releases} !D(){tud-cd/tudscr} !d<>}{%
  \IfBooleanTF{#1}{\toks@{\href}}{\toks@{\hrfn}}%
  \IfBooleanT{#2}{\toks@{\url}}%
  \def\@tempa{https://github.com/#4/}%
  \edef\@tempa{{\@tempa\IfValueTF{#5}{issues/#5}{#3}}}%
  \addto@hook@expandafter\toks@{\@tempa}%
  \IfBooleanF{#2}{%
    \addto@hook\toks@{{\tud@english{GitHub-Repository~\textsbn{#4}}}}%
  }%
  \the\toks@\xspace%
}
%    \end{macrocode}
% \end{macro}^^A \GitHubRepo
% \begin{macro}{\Download}
% \changes{v2.05g}{2016/11/08}{neu}^^A
% Der Befehl für die Angabe von direkten Downloadlinks.
%    \begin{macrocode}
%<*manual>
\newcommand*\Download[1]{%
  https://github.com/tud-cd/tudscr/releases/download/#1%
}
%</manual>
%    \end{macrocode}
% \end{macro}^^A \Download
% \begin{macro}{\CTAN}
% \changes{v2.05}{2015/11/22}{neu}^^A
%    \begin{macrocode}
\NewDocumentCommand\CTAN{!s !o !g}{%
  \IfBooleanTF{#1}{\toks@{\href}}{\toks@{\hrfn}}%
  \addto@hook\toks@{{http://www.ctan.org/\IfValueT{#2}{#2}}}%
  \addto@hook\toks@{%
    {\tud@english{Comprehensive TeX Archive Network (CTAN\IfValueT{#3}{~#3})}}%
  }%
  \the\toks@\xspace%
}
%    \end{macrocode}
% \end{macro}^^A \CTAN
% \begin{macro}{\Forum}
% Der Befehl für die Ausgabe eines Links zum \TUDForum. Das optionale Argument 
% in Guillemets kann genutzt werden, um auf einen spezifisches Beitrag zu 
% verlinken.
%    \begin{macrocode}
\NewDocumentCommand\Forum{!s !t' !O{\TUDForum} !d<>}{%
  \IfBooleanTF{#1}{\toks@{\href}}{\toks@{\hrfn}}%
  \IfBooleanT{#2}{\toks@{\url}}%
  \def\@tempa{http://latex.wcms-file3.tu-dresden.de/phpBB3/}%
  \edef\@tempa{{\@tempa\IfValueT{#4}{viewtopic.php?t=#4}}}%
  \addto@hook@expandafter\toks@{\@tempa}%
  \IfBooleanF{#2}{\addto@hook\toks@{{#3}}}%
  \the\toks@\xspace%
}
%    \end{macrocode}
% \end{macro}^^A \Forum
% \begin{macro}{\Attention}
% \changes{v2.02}{2014/08/16}{neu}^^A
% Falls irgendetwas besonders hervorgehoben werden sollte.
%    \begin{macrocode}
\newcommand*\Attention[2][\z@]{%
  \marginnote{%
    \tud@setdim\fboxsep{0.25em}%
    \fbox{Achtung!}%
  }[{#1}]%
  \emph{\trim@spaces{#2}}%
}
%    \end{macrocode}
% \end{macro}^^A \Attention
% \begin{macro}{\TUDScriptContactTitle}
% \changes{v2.06o}{2022/08/09}{neu}^^A
% Die Angabe der E-Mail-Adresse auf dem Titel innerhalb von \cs{author}.
%    \begin{macrocode}
\newrobustcmd*\TUDScriptContactTitle{%
  \ifundef{\emailaddress}{%
    \qquad\expandafter\mailto\expandafter{\TUDScriptContact}%
  }{%
    \expandafter\emailaddress\expandafter{\TUDScriptContact}%
  }%
}
\AfterPackage*{hyperref}{%
  \pdfstringdefDisableCommands{\let\TUDScriptContactTitle\relax}%
}
%    \end{macrocode}
% \end{macro}^^A \TUDScriptContactTitle
%
% \iffalse
%</body>
%</manual|doc>
% \fi
%
% \PrintBackMatter
%
\endinput
