% \iffalse meta-comment
%/GitFileInfo=tudscr-fonts.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-fonts.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
% \changes{v2.02}{2014/08/29}{Verwendung von \pkg{mweights} unnötig}^^A
% \changes{v2.02}{2014/08/29}{Unterstützung für \pkg{fontspec}}^^A
% \changes{v2.04}{2015/02/27}{Interaktion mit Paketen insbesondere für 
%   den Mathematiksatz verbessert}^^A
% \changes{v2.04c}{2015/11/29}{Bugfix für \pkg{fontspec} bei fehlenden 
%   Schriften}^^A
% \changes{v2.06o}{2022/08/01}{Mathematikschriftstärke passend zu Fließtext}^^A
%
%
%
% \section{Die Hausschrift der \TnUD}
%
% Für das \TUDCD wird die Schrift \OpenSans benötigt. Die Type1-Variante wird 
% mit diesen Klassen mitgeliefert, die OTF-Variante muss entweder durch das 
% Paket \pkg{opensans} oder über das System bereitgestellt werden. Hier werden
% die Optionen und Befehle zur Verwendung der Schriften im Dokument definiert.
%
% Die Schriften des \CDs können nicht nur mit den \TUDScript-Klassen sondern 
% auch mit anderen \LaTeX-Klassen verwendet werden. Hierfür wird das Paket
% \pkg{tudscrfonts} bereitgestellt. Damit kann auf die Installtion der 
% Schriftfamilien für die alten Klassen verzichtet werden. Im Vergleich zu 
% dieser Installation werden dabei fehlende Glyphen ergänzt und Probleme beim
% Kerning behoben.
%
%    \begin{macrocode}
%<*package&identify>
\ProvidesPackage{tudscrfonts}[%
%!TUD@Version
  package (corporate design fonts)%
]
%</package&identify>
%    \end{macrocode}
%
% \iffalse
%<*option>
% \fi
%
% Der Category Code für Anführungsstriche wird auf nicht-aktiv gesetzt für den 
% Fall das ein Paket dies gerne anders hätte.
%
%    \begin{macrocode}
\newcommand*\tud@catcodes@restore{}
\edef\tud@catcodes@restore{%
  \catcode`\noexpand\"\the\catcode`\"\relax%
}%
\@makeother\"%
%<class>\AtEndOfClass{\tud@catcodes@restore}
%<package>\AtEndOfPackage{\tud@catcodes@restore}
%    \end{macrocode}
%
% \iffalse
%<*class>
% \fi
%
% \subsection{^^A
%   Nutzung durch die \TUDScript-Klassen und das Paket \pkg{tudscrfonts}^^A
% }
%
% Die Schriften des \TUDCDs werden standardmäßig durch die \TUDScript-Klassen 
% verwendet. Für Dokumentklassen, welche nicht zum \TUDScript-Bundle gehören,
% können diese über das Paket \pkg{tudscrfonts} geladen werden.
%    \begin{macrocode}
\PreventPackageFromLoading[%
  \ClassWarning{\TUD@Class@Name}{%
    The package `tudscrfonts' must not be used with\MessageBreak%
    a TUD-Script class%
  }%
]{tudscrfonts}
%    \end{macrocode}
%
% \iffalse
%</class>
%<*package>
% \fi
%
% Sollte keine \KOMAScript-Klasse genutzt werden, wird zusätzlich das Paket
% \pkg{scrextend} benötigt. 
%    \begin{macrocode}
\ifundef{\KOMAClassName}{%
  \RequirePackage{scrextend}[%
%!TUD@KOMAVersion
  ]%
}{}
%    \end{macrocode}
% Wird das Paket \pkg{tudscrfonts} nach einer der Klassen verwendet, welche die 
% veralteten Schriftfamilien für \Univers und \DIN definieren, so wird eine 
% Warnung mit dem Hinweis auf das Paket \pkg{fix-tudscrfonts} ausgegeben.
%    \begin{macrocode}
\@tempswafalse%
\@for\@tempa:={%
  tudbook,tudbeamer,tudfax,tudform,tudhaus,tudletter,tudposter,tudmathposter%
}\do{%
  \if@tempswa\else
    \@ifclassloaded{\@tempa}{\@tempswatrue\let\@tempb\@tempa}{}%
  \fi
}%
\if@tempswa%
  \@ifpackageloaded{fix-tudscrfonts}{}{%
    \PackageWarning{tudscrfonts}{%
      As you loaded class `\@tempb', you should\MessageBreak%
      load `fix-tudscrfonts' before the class\MessageBreak%
      with `\string\RequirePackage'%
    }%
  }%
\fi%
%    \end{macrocode}
%
% \iffalse
%</package>
%</option>
%<*body>
% \fi
%
% \begin{macro}{\tud@cdfont@wrn}
% \changes{v2.06}{2018/06/17}{neu}^^A
% \begin{macro}{\tud@cdmath@wrn}
% \changes{v2.06}{2019/06/17}{neu}^^A
% Diese beiden Makros dienen als zentrale Hooks, die während der Initialiserung
% der Schrfiten des \CDs befüllt werden, falls beispielsweise Warnungen wegen 
% fehlender Schriftdateien oder inkompatibler Pakete ausgegeben werden müssen.
% Diese werden gegebebfalls nur einmalig bei der Aktivierung der Schriften des 
% \CDs ausgegeben.
%    \begin{macrocode}
\newcommand*\tud@cdfont@wrn{\global\let\tud@cdfont@wrn\relax}
\newcommand*\tud@cdmath@wrn{\global\let\tud@cdmath@wrn\relax}
%    \end{macrocode}
% \end{macro}^^A \tud@cdmath@wrn
% \end{macro}^^A \tud@cdfont@wrn
%
% \subsection{Auswahl des Fontformates}
%
% Das \TUDScript-Bundle unterstützt sowohl die Schriftauswahl im klassischen 
% New Font Selection Scheme (NFSS) als auch das Einbinden der Schriften im 
% OpenType-Format aus dem System über das Paket \pkg{fontspec} für Lua\LaTeX{}
% bzw. Xe\LaTeX{}, wobei die letztere Variante nicht ideal ist. Zum einen 
% funktioniert das Kerning nicht sonderlich gut und zum anderen sind keine 
% Schriften für den mathematischen Satz vorhanden.
%
% \begin{macro}{\if@tud@x@fontspec@enabled}
% \changes{v2.02}{2014/08/29}{neu}^^A
% Wird das Paket \pkg{fontspec} durch den Nutzer geladen, wird der passende 
% Schlüssel gesetzt und die Schrifteinstellungen erfolgen mit den dazugehörigen 
% Befehlen. Dies wurde in früheren Versionen mit der Option \opt{fontspec} 
% realisiert, die auch weiterhin bereitgehalten wird. Nach dem Laden des Paketes
% wird geprüft, ob diesem mit den entsprechenden Optionen das Bereitstellen der 
% Mathematikschriften überlassen wurde. In diesem Fall wird eine entsprechende 
% Warnung an \cs{tud@cdmath@wrn} angehängt.
% \ToDo{\cs{IfPackageAtLeastTF} oder ganz raus}[v2.07]
%    \begin{macrocode}
\tud@newif\if@tud@x@fontspec@enabled
\PassOptionsToPackage{no-math}{fontspec}
\AfterPackage*{fontspec}{%
  \@ifpackagelater{fontspec}{2017/01/24}{%
    \@tud@x@fontspec@enabledtrue%
    \@tud@res@swafalse%
    \@ifpackagewith{fontspec}{no-math}{}{\@tud@res@swatrue}%
    \@ifpackagewith{fontspec}{math}{\@tud@res@swatrue}{}%
    \if@tud@res@swa%
      \appto\tud@cdmath@wrn{%
%<*class>
        \ClassWarningNoLine{\TUD@Class@Name}%
%</class>
%<*package>
        \PackageWarningNoLine{tudscrfonts}%
%</package>
        {%
          It's recommended to load package `fontspec'\MessageBreak%
          with option `no-math', if you want to use the\MessageBreak%
          corporate design fonts in math mode%
        }%
      }%
    \fi%
  }{%
    \@tud@x@fontspec@enabledfalse%
%<*class>
    \ClassWarningNoLine{\TUD@Class@Name}%
%</class>
%<*package>
    \PackageWarningNoLine{tudscrfonts}%
%</package>
    {%
      Version `2017/01/24' of package `fontspec' is needed,\MessageBreak%
      but only version\MessageBreak%
      `\csname ver@fontspec.sty\endcsname'\MessageBreak%
      is available, so a fallback layout is used%
    }%
  }%
}
%    \end{macrocode}
% Bei der Nutzung des Pakets \pkg{unicode-math} kann es ebenfalls zu Problemen 
% mit den mathematischen Schriften kommen, weshalb auch hier eine Warnung an
% \cs{tud@cdmath@wrn} angehängt wird.
% \ToDo{Paket \pkg{unicode-math} zumindest rudimentär unterstützen?}[v2.07]
%    \begin{macrocode}
\AfterPackage*{unicode-math}{%
  \appto\tud@cdmath@wrn{%
%<*class>
    \ClassWarningNoLine{\TUD@Class@Name}%
%</class>
%<*package>
    \PackageWarningNoLine{tudscrfonts}%
%</package>
    {%
      The usage of package `unicode-math' will\MessageBreak%
      most likely cause erroneous outputs in math mode\MessageBreak%
      with corporate design fonts%
    }%
  }%
}
%    \end{macrocode}
% \end{macro}^^A \if@tud@x@fontspec@enabled
% \begin{macro}{\if@tud@x@mweights@enabled}
% \changes{v2.04}{2015/04/24}{Erkennung des Paketes \pkg{mweights}}^^A
% Das Paket \pkg{mweights} wird geladen, um unterschiedliche Schriftschnitte
% für beispielsweise die TypeWriter-Schriften nutzen zu können.
% \ToDo{Paket \pkg{mweights} wurde in Kernel integriert}[v2.07]%
% \ToDo{an neues NFSS anpassen, \cs{DeclareFontSeriesDefault} nutzen}[v2.07]%
% \ToDo{ist \cs{IfFontSeriesContextTF} irgendwo nötig?}[v2.07]%
%    \begin{macrocode}
\TUD@RecommendPackage{mweights}
\tud@newif\if@tud@x@mweights@enabled
\AfterPackage*{mweights}{\@tud@x@mweights@enabledtrue}
%    \end{macrocode}
% \end{macro}^^A \if@tud@x@mweights@enabled
%
% \subsection{Prüfen der Schriftverfügbarkeit}
%
% Nachfolgend werden Makros definiert, mit denen geprüft werden kann, ob die 
% notwendigen Schriften im passenden Fontformat auch installiert sind. Seit 
% 2018 wird \OpenSans als die Hausschrift verwendet. Um weiterhin noch alte 
% Dokumente mit den Schriften \Univers und \DIN nutzen zu können, werden die 
% entsprechenden Befehle ebenfalls vorgehalten.
%
% \begin{macro}{\tud@cdfont@fam}
% \changes{v2.06}{2018/07/12}{neu}^^A
% \begin{macro}{\tud@cdfont@fam@lf}
% \changes{v2.06}{2018/07/12}{neu}^^A
% \begin{macro}{\tud@cdfont@fam@osf}
% \changes{v2.06}{2018/07/12}{neu}^^A
% \begin{macro}{\tud@cdfont@db}
% Zu Beginn werden Schalter und Hilfsmakros sowohl für den Fließtext\dots
%    \begin{macrocode}
\newcommand*\tud@cdfont@fam{opensans-TLF}
\newcommand*\tud@cdfont@fam@lf{opensans-TLF}
\newcommand*\tud@cdfont@fam@osf{opensans-TOsF}
\if@tud@cdoldfont@active
  \renewcommand*\tud@cdfont@fam{lun}
  \renewcommand*\tud@cdfont@fam@lf{lun}
  \renewcommand*\tud@cdfont@fam@osf{lun}
  \newcommand*\tud@cdfont@db{0m6}
\fi
%    \end{macrocode}
% \end{macro}^^A \tud@cdfont@db
% \end{macro}^^A \tud@cdfont@fam@osf
% \end{macro}^^A \tud@cdfont@fam@lf
% \end{macro}^^A \tud@cdfont@fam
% \begin{macro}{\tud@ttfont@fam}
% \changes{v2.06}{2018/07/12}{neu}^^A
% \begin{macro}{\tud@ttfont@rb}
% \changes{v2.06}{2018/07/12}{neu}^^A
% \begin{macro}{\tud@ttfont@lm}
% \changes{v2.06}{2018/07/12}{neu}^^A
% \dots als auch für die TypeWriter-Schriften definiert.
%    \begin{macrocode}
\newcommand*\tud@ttfont@fam{tudtt}
\newcommand*\tud@ttfont@rb{tudtt}
\newcommand*\tud@ttfont@lm{lmtt}
%    \end{macrocode}
% \end{macro}^^A \tud@ttfont@lm
% \end{macro}^^A \tud@ttfont@rb
% \end{macro}^^A \tud@ttfont@fam
% \begin{macro}{\if@tud@ttfont@rb@exist}
% \changes{v2.06}{2018/07/12}{neu}^^A
% Die TypeWriter-Schrift aus \pkg{roboto-mono} kann nur genutzt werden, wenn
% diese tatsächlich auch vorhanden ist.
%    \begin{macrocode}
\tud@newif\if@tud@ttfont@rb@exist
\IfFileExists{roboto-mono.sty}{%
  \@tud@ttfont@rb@existtrue%
}{%
  \TUD@key@preset{ttfont}{lmodern}%
}
%    \end{macrocode}
% \end{macro}^^A \if@tud@ttfont@rb@exist
% \begin{macro}{\tud@cdfont@check}
% \changes{v2.04}{2015/03/10}{neu}^^A
% \begin{macro}{\tud@cdfont@@check}
% \changes{v2.06}{2018/07/12}{Auswahl der Schriftfamilie angepasst}^^A
% \changes{v2.06b}{2019/07/17}{Verwendung von \cs{tud@if@fdfileexists}}^^A
% \begin{macro}{\tud@cdfont@@@check}
% \changes{v2.06}{2019/06/18}{neu}^^A
% \changes{v2.06b}{2019/07/17}{Verwendung von \cs{tud@if@fdfileexists}}^^A
% \begin{macro}{\tud@cdfont@missing}
% \changes{v2.05l}{2017/03/29}{neu}^^A
% \begin{macro}{\if@tud@cdfont@fam@exist}
% \changes{v2.06}{2018/07/12}{neu}^^A
% \begin{macro}{\if@tud@cdfont@db@exist}
% \changes{v2.06}{2018/07/12}{neu}^^A
% \begin{macro}{\if@tud@cdmath@fam@exist}
% \changes{v2.06o}{2022/08/01}{neu}
% \begin{macro}{\if@tud@cdmath@db@exist}
% \changes{v2.06o}{2022/08/01}{neu}
% \begin{macro}{\tud@x@mathastext@enc}
% \changes{v2.06a}{2019/07/09}{neu}^^A
% Mit \cs{tud@cdfont@check} wird geprüft, ob die Schrift \OpenSans respektive 
% die veralteten Schriften \Univers und \DIN im OTF-Format respektive im 
% Type1-Format vorhanden sind. Die Schriftschnitte der \OpenSans werden für 
% beide Formate vom Paket \pkg{opensans} geliefert, die veralteten Schriften
% \Univers und \DIN müssen aus lizenrechtlichen Gründen installiert werden. Bei 
% Nichtvorhandensein der Schriften wird eine Warnung ausgegeben sowie eine
% Rückfallebene definiert.
%    \begin{macrocode}
\tud@newif\if@tud@cdfont@fam@exist
\tud@newif\if@tud@cdfont@db@exist
\tud@newif\if@tud@cdmath@fam@exist
\tud@newif\if@tud@cdmath@db@exist
\newcommand*\tud@x@mathastext@enc{OT1}
\newcommand*\tud@cdfont@check{%
  \if@tud@cdoldfont@active%
    \tud@cdfont@@check{Univers}{%
      Light,,Bold,Black,%
      LightOblique,Oblique,BoldOblique,BlackOblique%
    }{\tud@cdfont@fam@lf}{@tud@cdfont@fam@exist}%
    \tud@cdfont@@check{DIN}{Bold}{\tud@cdfont@db}{@tud@cdfont@db@exist}%
    \tud@cdfont@@@check{OT1,OML,OMS}{\tud@cdfont@fam@lf}{@tud@cdmath@fam@exist}%
    \tud@cdfont@@@check{OT1,OML,OMS}{\tud@cdfont@db}{@tud@cdmath@db@exist}%
  \else%
%    \end{macrocode}
% Die Version von \pkg{opensans} wird geprüft. Das Paket \pkg{iwona} wird 
% genutzt, um fehlende Glyphen und Symbole für die Mathematikschriften des \CDs 
% zu ergänzen.
%    \begin{macrocode}
    \@ifpackageloaded{opensans}{%
%<*class>
      \ClassWarningNoLine{\TUD@Class@Name}%
%</class>
%<*package>
      \PackageWarningNoLine{tudscrfonts}%
%</package>
      {%
        You should not load package `opensans'\MessageBreak%
        manually but just use option `cdfont=true'%
      }%
    }{}%
    \if@tud@cdfont@active%
      \TUD@CheckPackage{opensans}{2019/06/20}%
      \TUD@CheckPackage{iwona}{2005/10/03}%
    \fi%
    \tud@cdfont@@check{OpenSans}{%
      Light,Regular,SemiBold,Bold,ExtraBold,%
      LightItalic,Italic,SemiBoldItalic,BoldItalic,ExtraBoldItalic%
    }{\tud@cdfont@fam@lf,\tud@cdfont@fam@osf}{@tud@cdfont@fam@exist}%
%    \end{macrocode}
% Für \OpenSans wird mangels der Kodierungen \val{OML}, \val{OMS} und \val{OMX} 
% im Paket \pkg{opensans} zur Deklaration der Mathematikversionen der Befehl 
% \cs{MTDeclareVersion} aus dem Paket \pkg{mathastext} genutzt. Dabei wird die 
% Kodierung der Mathematikschriften identisch zur genutzten Eingabekodierung 
% für den Text gesetzt, da diese in der Version \val{v1.3t} nicht problemfrei 
% unabhängig davon gewählt werden kann.
%    \begin{macrocode}
    \@expandtwoargs\in@{,\encodingdefault,}{,OT1,T1,TU,EU1,EU2,}%
    \ifin@%
      \let\tud@x@mathastext@enc\encodingdefault%
%    \end{macrocode}
% Der Test auf das Vorhandensein der \OpenSans wird nur durchgeführt, wenn es 
% sich nicht um eine Unicode"=Eingabekodierung handelt.
%    \begin{macrocode}
      \@expandtwoargs\in@{,\tud@x@mathastext@enc,}{,TU,EU1,EU2,}%
      \ifin@%
        \@tud@cdmath@fam@existtrue%
      \else%
        \tud@cdfont@@@check{\tud@x@mathastext@enc}%
          {\tud@cdfont@fam@lf}{@tud@cdmath@fam@exist}%
      \fi%
    \fi%
  \fi%
}
%    \end{macrocode}
% Dieses Makro prüft auf das Vorhandensein der Schriften für den Fließtext. 
% Im optionalen Argument wird das Trennzeichen zwischen dem Hauptnamen für die 
% OTF-Schriften aus dem ersten obligatorischen Argument und der Liste der 
% Bezeichnungen für die einzelnen Schriftschnitte im zweiten obligatorischen 
% Argument angegeben. Die darauffolgenden Argumente enthalten die zu prüfenden 
% Type1-Schriftfamilien und die Bezeichnung des zu setzenden Schalters.
%    \begin{macrocode}
\newcommand*\tud@cdfont@@check[5][-]{%
  \@tud@res@swatrue%
  \def\tud@res@a##1{%
    \@tud@res@swafalse%
    \tud@cdfont@missing{##1}{\tud@cdfont@wrn}%
  }%
%    \end{macrocode}
% Für jede der OTF-Schriften wird eine Warnung ausgegeben, falls diese nicht 
% installiert ist. Um sicher zu gehen, dass das Layout komplett genutzt werden 
% kann, ist es hinreichend, wenn eine der benötigten Schriften nicht existiert,
% um die Rückfallebene zu aktivieren.
%    \begin{macrocode}
  \if@tud@x@fontspec@enabled%
    \def\tud@res@b##1{\IfFontExistsTF{##1}{}{\tud@res@a{##1}}}%
    \@for\tud@res@c:={#3}\do{%
      \expandafter\IfArgIsEmpty\expandafter{\tud@res@c}%
        {\tud@res@b{#2}}%
        {\tud@res@b{#2#1\tud@res@c}}%
    }%
  \else%
%    \end{macrocode}
% Ist \pkg{fontspec} nicht aktiv, wird auf die Type1-Schriften für den
% Fließtext für die aktuelle Kodierung im gleichen Maße geprüft.
%    \begin{macrocode}
    \def\tud@res@b##1##2{%
%    \end{macrocode}
% Der Schalter \cs{if@tud@res@swa} wird \val{false} gesetzt, falls die Schrift 
% gefunden wurde. Der zu prüfenden Schriftname wird dabei in unterschiedlichen 
% Varianten getestet, da \cs{IfFileExists} auf unixoiden Betriebssystemen 
% case-sensitiv ist. 
%    \begin{macrocode}
      \tud@if@fdfileexists{##1}{##2}{}{%
%    \end{macrocode}
% Existiert die Schrift nicht, wird die entsprechende Warnung ausgegeben.
%    \begin{macrocode}
        \begingroup%
          \edef\tud@res@a{%
            \endgroup%
            \noexpand\tud@res@a{##1##2.fd}%
          }%
        \tud@res@a%
      }%
    }%
    \@for\tud@res@c:={#4}\do{\tud@res@b{\encodingdefault}{\tud@res@c}}%
  \fi%
%    \end{macrocode}
% Zuletzt wird der angegebene Schalter gesetzt.
%    \begin{macrocode}
  \if@tud@res@swa%
    \booltrue{#5}%
  \else%
    \boolfalse{#5}%
  \fi%
}
%    \end{macrocode}
% Hiermit wird auf Type1-Schriften in den notwendigen Kodierungen für den
% Mathematiksatz geprüft. Warnungen für fehlende Schriften werden dem Hook
% \cs{tud@cdmath@wrn} hinzugefügt und der im dritten Argument gegebene Schalter 
% wird entsprechend gesetzt.
%    \begin{macrocode}
\newcommand*\tud@cdfont@@@check[3]{%
  \@tud@res@swatrue%
  \def\tud@res@a##1##2{%
    \@tud@res@swafalse%
    \tud@cdfont@missing[{##1}]{##2}{\tud@cdmath@wrn}%
  }%
  \def\tud@res@b##1##2{%
    \tud@if@fdfileexists{##1}{##2}{}{%
      \begingroup%
        \edef\tud@res@a{%
          \endgroup%
          \noexpand\tud@res@a{##1}{##1##2.fd}%
        }%
      \tud@res@a%
    }%
  }%
  \@for\tud@res@c:={#1}\do{\tud@res@b{\tud@res@c}{#2}}%
%    \end{macrocode}
% Wurde mindestens eine notwendige Type1-Schrift nicht gefunden, wird die 
% Option \opt{cdmath=false} gesetzt. War diese zuvor aktiv, wird eine Warnung
% dazu ausgegeben.
%    \begin{macrocode}
  \if@tud@res@swa%
    \booltrue{#3}%
  \else%
    \boolfalse{#3}%
    \AtBeginDocument{%
      \if@tud@cdmath@active%
%<*class>
        \ClassWarningNoLine{\TUD@Class@Name}%
%</class>
%<*package>
        \PackageWarningNoLine{tudscrfonts}%
%</package>
        {%
          Some math font encodings are missing. \MessageBreak%
          The option `cdmath=false' is executed. You should\MessageBreak%
          either use this option by yourself or install\MessageBreak%
          \if@tud@cdoldfont@active%
            all necessary fonts with a installation script\MessageBreak%
            listed in the manual%
          \else%
            package `opensans'%
          \fi%
        }%
      \fi%
      \TUDoptions{cdmath=false}%
    }%
  \fi%
}
%    \end{macrocode}
% Das Makro für die Erstellung einer Warnung bei fehlenden Schriften. Diese 
% wird an den Hook im letzten Argument angehängt.
%    \begin{macrocode}
\newcommand*\tud@cdfont@missing[3][\encodingdefault]{%
  \begingroup%
    \def\tud@res@a{%
      `#2' font\MessageBreak%
      not found for `#1' encoding. \MessageBreak%
    }%
    \if@tud@x@fontspec@enabled%
      \tud@if@strequal{#1}{\encodingdefault}{%
        \appto\tud@res@a{%
          It seems, you haven't installed the required\MessageBreak%
          OTF-font on your system. You should provide\MessageBreak%
          the fonts manually to your OS\MessageBreak%
          \if@tud@cdoldfont@active\else%
            or install package `opensans'\MessageBreak%
          \fi%
        }%
      }{}%
    \else%
      \if@tud@cdoldfont@active%
        \def\tud@res@b{T1,OT1,OMS,OML}%
      \else%
        \def\tud@res@b{T1,OT1,T2A,T2B,T2C,X2,LGR}%
      \fi%
      \@tud@res@swafalse%
      \@for\tud@res@c:=\tud@res@b\do{%
        \tud@if@strequal{#1}{\tud@res@c}{\@tud@res@swatrue}{}%
      }%
%    \end{macrocode}
% Wird eine unterstützte Kodierung verwendet, müssen die Schriften installiert 
% werden.
%    \begin{macrocode}
      \if@tud@res@swa%
        \appto\tud@res@a{%
          You should %
          \if@tud@cdoldfont@active%
            try to install the necessary fonts\MessageBreak%
            with a installation script listed in the manual%
          \else%
            install package `opensans'%
          \fi%
          . \MessageBreak%
        }%
      \else%
        \tud@if@strequal{#1}{\encodingdefault}{%
          \tud@if@strequal{#1}{TU}{%
            \appto\tud@res@a{%
              You should either load package `fontspec'\MessageBreak%
              or %
            }%
          }{%
            \appto\tud@res@a{Please }%
          }%
          \appto\tud@res@a{%
            choose a possible encoding with package\MessageBreak%
            `fontenc' (\tud@res@b). \MessageBreak%
          }%
        }{}%
      \fi%
    \fi%
    \appto\tud@res@a{A fallback layout is used}%
    \edef\tud@res@c{%
%<*class>
      \unexpanded{\ClassWarningNoLine{\TUD@Class@Name}}%
%</class>
%<*package>
      \unexpanded{\PackageWarningNoLine{tudscrfonts}}%
%</package>
        {\tud@res@a}%
    }%
    \xappto#3{\expandonce\tud@res@c}%
  \endgroup%
}
%    \end{macrocode}
% \end{macro}^^A \tud@x@mathastext@enc
% \end{macro}^^A \if@tud@cdmath@db@exist
% \end{macro}^^A \if@tud@cdmath@fam@exist
% \end{macro}^^A \if@tud@cdfont@db@exist
% \end{macro}^^A \if@tud@cdfont@fam@exist
% \end{macro}^^A \tud@cdfont@missing
% \end{macro}^^A \tud@cdfont@@@check
% \end{macro}^^A \tud@cdfont@@check
% \end{macro}^^A \tud@cdfont@check
%
% \iffalse
%</body>
%<*option>
% \fi
%
% \subsection{Optionen und Befehle zur Schriftauswahl}
%
% Hier werden die Optionen und Befehle zur Schriftauswahl definiert.
%
% \subsubsection{Schriften für den Fließtext}
% \begin{option}{cdfont}
% \changes{v2.02}{2014/07/08}{Schlüsselwerte für \opt{cdhead}}^^A
% \changes{v2.02}{2014/08/29}{Schlüsselwerte für \opt{fontspec}}^^A
% \changes{v2.05}{2016/04/04}{Schlüsselwerte für \val{ultrabold}}^^A
% \changes{v2.05l}{2017/03/29}{Standardeinstellungen für \opt{cdmath}}^^A
% \begin{macro}{\if@tud@cdfont@active}
% \changes{v2.06}{2018/06/26}{neu}^^A
% \begin{macro}{\if@tud@cdfont@heavy}
% \changes{v2.06}{2018/06/26}{neu}^^A
% \begin{macro}{\if@tud@cdfont@ultrabold}
% \changes{v2.05}{2016/04/04}{neu}^^A
% \begin{macro}{\if@tud@cdfont@lining}
% \changes{v2.06}{2018/07/10}{neu}^^A
% \begin{macro}{\tud@cdfont@activate}
% \changes{v2.06}{2018/07/02}{neu}^^A
% \begin{macro}{\tud@cdfont@deactivate}
% \changes{v2.06}{2018/07/24}{neu}^^A
% Mit dieser Option wird die zentrale Benutzerschnittstelle für alle möglichen
% Schrifteinstellungen innerhalb Dokumentes geschaffen. Durch diese Option
% können sowohl die verwendete Schrift für den Fließtext, als auch die Stärke
% der Schrift geändert werden. Zusätzlich lässt sich die Verwendung von 
% Minuskelziffern im Fließtext aktivieren. Außerdem kann eingestellt werden, ob 
% für den Mathematiksatz serifenlose Schriften zum Einsatz kommen sollen.
% \ToDo{
%   Option evtl. überarbeiten und nicht mehr im Dokument zulassen;
%   das macht alles um einiges einfacher, siehe \opt{cdoldfont}, \opt{cdmath}
% }[v2.07]
%    \begin{macrocode}
\tud@newif\if@tud@cdfont@active
\tud@newif\if@tud@cdfont@heavy
\tud@newif\if@tud@cdfont@ultrabold
\tud@newif\if@tud@cdfont@lining
\@tud@cdfont@liningtrue
\TUD@key{cdfont}[true]{%
  \TUD@set@numkey{cdfont}{@tempa}{%
    \TUD@bool@numkey,%
    {light}{1},{lightfont}{1},{lite}{1},{litefont}{1},{noheavyfont}{1},%
    {heavy}{2},{heavyfont}{2},{bold}{2},{boldfont}{2},%
    {normalbold}{3},{boldnormal}{3},%
    {ultrabold}{4},{boldultra}{4},{heavybold}{4},{boldheavy}{4},%
    {extendedbold}{4},{boldextended}{4},%
    {lf}{5},{lfigures}{5},{liningfigures}{5},{lining}{5},%
    {ln}{5},{lnumbers}{5},{liningnumbers}{5},%
    {nf}{5},{nfigures}{5},{normalfigures}{5},%
    {nn}{5},{nnumbers}{5},{normalnumbers}{5},%
    {osf}{6},{osfigures}{6},{oldfigures}{6},{oldstylefigures}{6},{oldstyle}{6},%
    {osn}{6},{osnumbers}{6},{oldnumbers}{6},{oldstylenumbers}{6},%
    {nomath}{7},{nocdmath}{7},%
    {serifmath}{7},{serif}{7},{nosansmath}{7},{nosans}{7},%
    {math}{8},{cdmath}{8},{sansmath}{8},{sans}{8},%
    {upgreek}{9},{uprightgreek}{9},{uprightgreeks}{9},%
    {slgreek}{10},{slantedgreek}{10},{slantedgreeks}{10},%
    {itgreek}{10},{italicgreek}{10},{italicgreeks}{10},%
    {texgreek}{11},{latexgreek}{11},{texgreeks}{11},{latexgreeks}{11},%
    {standardgreek}{11},{standardgreeks}{11},%
    {fontspec}{12},{luatex}{12},{lualatex}{12}{xetex}{12},{xelatex}{12},%
    {nofontspec}{13},{nfss}{13},{pdftex}{13},{pdflatex}{13}%
%<*class>
    ,{nohead}{14},{nocdhead}{14},{noheadfont}{14},{noheadcdfont}{14},%
    {nocdheadfont}{14},{nobar}{14},{nobarfont}{14},%
    {head}{15},{headfont}{15},{cdhead}{15},{headcdfont}{15},{cdheadfont}{15},%
    {bar}{15},{barfont}{15},%
    {lighthead}{15},{lightheadfont}{15},{lightfonthead}{15},%
    {lightcdhead}{15},{lightheadcdfont}{15},{lightcdheadfont}{15},%
    {lightbar}{15},{lightbarfont}{15},{lightfontbar}{15},%
    {headlight}{15},{headfontlight}{15},{headlightfont}{15},%
    {cdheadlight}{15},{headcdfontlight}{15},{cdheadfontlight}{15},%
    {barlight}{15},{barfontlight}{15},{barlightfont}{15},%
    {litehead}{15},{liteheadfont}{15},{litefonthead}{15},%
    {litecdhead}{15},{liteheadcdfont}{15},{litecdheadfont}{15},%
    {litebar}{15},{litebarfont}{15},{litefontbar}{15},%
    {headlite}{15},{headfontlite}{15},{headlitefont}{15},%
    {cdheadlite}{15},{headcdfontlite}{15},{cdheadfontlite}{15},%
    {barlite}{15},{barfontlite}{15},{barlitefont}{15},%
    {noheavyhead}{15},{noheavyheadfont}{15},{noheavyfonthead}{15},%
    {noheavycdhead}{15},{noheavyheadcdfont}{15},{noheavycdheadfont}{15},%
    {noheavybar}{15},{noheavybarfont}{15},{noheavyfontbar}{15},%
    {headnoheavy}{15},{headfontnoheavy}{15},{headnoheavyfont}{15},%
    {cdheadnoheavy}{15},{headcdfontnoheavy}{15},{cdheadfontnoheavy}{15},%
    {barnoheavy}{15},{barfontnoheavy}{15},{barnoheavyfont}{15},%
    {heavyhead}{16},{heavyheadfont}{16},{heavyfonthead}{16},%
    {heavycdhead}{16},{heavyheadcdfont}{16},{heavycdheadfont}{16},%
    {heavybar}{16},{heavybarfont}{16},{heavyfontbar}{16},%
    {headheavy}{16},{headfontheavy}{16},{headheavyfont}{16},%
    {cdheadheavy}{16},{headcdfontheavy}{16},{cdheadfontheavy}{16},%
    {barheavy}{16},{barfontheavy}{16},{barheavyfont}{16}%
%</class>
  }{#1}%
  \ifx\FamilyKeyState\FamilyKeyStateProcessed%
%    \end{macrocode}
% Die ersten drei Werte dienen zum Umschalten auf die Schriften des \CDs für
% den Fließtext.
%    \begin{macrocode}
    \ifcase\@tempa\relax% false
      \tud@cdfont@deactivate%
    \or% true
      \@tud@cdfont@heavyfalse%
      \tud@cdfont@activate%
    \or% heavy
      \@tud@cdfont@heavytrue%
      \tud@cdfont@activate%
%    \end{macrocode}
% Für die Definition der fetten Schriftstärke kommt je nach Einstellung ein
% anderer Schriftschnitt zum Einsatz.
%    \begin{macrocode}
    \or% normalbold
      \@tud@cdfont@ultraboldfalse%
      \tud@cdfont@activate%
    \or% ultrabold
      \@tud@cdfont@ultraboldtrue%
      \tud@cdfont@activate%
%    \end{macrocode}
% Hier wird die Art der Ziffern für den Fleißtext festgelegt.
%    \begin{macrocode}
    \or% liningfigures
      \@tud@cdfont@liningtrue%
      \tud@cdfont@activate%
    \or% oldstylefigures
      \@tud@cdfont@liningfalse%
      \tud@cdfont@activate%
%    \end{macrocode}
% Die Mathematikschriften.
%    \begin{macrocode}
    \or% nomath
      \TUDoptions{cdmath=false}%
    \or% math
      \TUDoptions{cdmath=true}%
%    \end{macrocode}
% Die Neigung der griechischen Majuskeln.
%    \begin{macrocode}
    \or% uprightgreek
      \TUDoptions{slantedgreek=false}%
    \or% slantedgreek
      \TUDoptions{slantedgreek=true}%
    \or% standardgreek
      \TUDoptions{slantedgreek=standard}%
%    \end{macrocode}
% Die Verwendung von \pkg{fontspec}.
%    \begin{macrocode}
    \or% fontspec
      \TUDoptions{fontspec=true}%
    \or% nofontspec
      \TUDoptions{fontspec=false}%
%    \end{macrocode}
% Die Schrift für den Querbalken.
%    \begin{macrocode}
%<*class>
    \or% nohead
      \TUDoptions{cdhead=false}%
    \or% head
      \TUDoptions{cdhead=true}%
    \or% heavyhead
      \TUDoptions{cdhead=heavy}%
%</class>
    \fi%
%    \end{macrocode}
% Wird kein gültiger Wert für die Option angegeben, so wird davon ausgegangen, 
% dass es sich bei diesem um die gewünschte Schriftgröße handelt.
%    \begin{macrocode}
  \else%
    \TUD@set@dimkey{cdfont}{\@tempa}{#1}%
    \ifx\FamilyKeyState\FamilyKeyStateProcessed%
      \TUDoptions{fontsize=#1}%
      \tud@cdfont@activate%
    \fi%
  \fi%
}
\newcommand*\tud@cdfont@activate{%
  \@tud@cdfont@activetrue%
%    \end{macrocode}
% Die Schrift im Querbalken wird bei den Klassen angepasst.
%    \begin{macrocode}
%<*class>
  \if@tud@cdfont@heavy%
    \tud@locked@num@preset{tud@head@font@num}{2}%
  \else%
    \tud@locked@num@preset{tud@head@font@num}{1}%
  \fi%
%</class>
  \TUD@SpecialOptionAtDocument{tud@font@set}%
  \tud@locked@bool@preset{@tud@cdmath@active}{true}%
  \TUD@SpecialOptionAtDocument{tud@math@set}%
}
\newcommand*\tud@cdfont@deactivate{%
  \@tud@cdfont@activefalse%
%<*class>
  \tud@locked@num@preset{tud@head@font@num}{0}%
%</class>
  \TUD@SpecialOptionAtDocument{tud@font@set}%
  \tud@locked@bool@preset{@tud@cdmath@active}{false}%
  \TUD@SpecialOptionAtDocument{tud@math@set}%
}
%    \end{macrocode}
% \end{macro}^^A \tud@cdfont@deactivate
% \end{macro}^^A \tud@cdfont@activate
% \end{macro}^^A \if@tud@cdfont@lining
% \end{macro}^^A \if@tud@cdfont@ultrabold
% \end{macro}^^A \if@tud@cdfont@heavy
% \end{macro}^^A \if@tud@cdfont@active
% \end{option}^^A cdfont
% \begin{option}{cdoldfont}
% \changes{v2.06}{2018/07/12}{neu}^^A
% \begin{macro}{\if@tud@cdoldfont@active}
% \changes{v2.06}{2018/07/12}{neu}^^A
% \begin{macro}{\if@tud@cdoldfont@nodin}
% \changes{v2.06}{2018/07/12}{neu}^^A
% Seit 2018 wird \OpenSans als Hausschrift im \TUDCD genutzt. Für die Nutzung 
% der vormals verwendeten Schriften \Univers und \DIN für ältere Dokumente wird 
% die Option \pkg{cdoldfont} bereitgestellt. Damit werden die Befehle zur 
% Schriftauswahl für die \TUDScript-Klassen oder das Paket \pkg{tudscrfonts} 
% entsprechend angepasst.
%    \begin{macrocode}
\tud@newif\if@tud@cdoldfont@active
\tud@newif\if@tud@cdoldfont@nodin
\TUD@key{cdoldfont}[true]{%
  \TUD@set@numkey{cdoldfont}{@tempa}{%
    \TUD@bool@numkey,%
    {din}{1},{dinbold}{1},%
    {nodin}{2},{nodinbold}{2},%
    {onlydin}{3},{onlydinbold}{3}%
  }{#1}%
  \ifx\FamilyKeyState\FamilyKeyStateProcessed%
    \ifcase\@tempa\relax% false
      \@tud@cdoldfont@activefalse%
      \@tud@cdoldfont@nodintrue%
%    \end{macrocode}
% Achtung, nicht verwirren lassen! Mit \opt{cdoldfont=false} kann beim Laden
% der Klasse die Verwendung der alten Schriften deaktiviert werden. Dabei wird 
% nicht beeinflusst, ob die Schriften des \CDs (\opt{cdfont=true/false}) denn 
% überhaupt zum Einsatz kommen. Nachdem die Klasse geladen wurde, wird jedoch 
% \opt{cdoldfont} eingefroren, ist diese aktiv, kann sie ab diesem Zeitpunkt 
% nicht mehr deaktiviert werden. Dann kann mit \opt{cdoldfont=false} quasi das 
% gleiche Verhalten wie mit \opt{cdfont=false} erzeugt werden.
%    \begin{macrocode}
      \if@tud@cdoldfont@active%
        \tud@cdfont@deactivate%
      \fi%
    \or% true/din
      \@tud@cdoldfont@activetrue%
      \@tud@cdoldfont@nodinfalse%
      \tud@cdfont@activate%
    \or% nodin
      \@tud@cdoldfont@activetrue%
      \@tud@cdoldfont@nodintrue%
      \tud@cdfont@activate%
    \or% onlydin
      \@tud@cdoldfont@activetrue%
      \@tud@cdoldfont@nodinfalse%
      \tud@cdfont@deactivate%
    \fi%
  \else%
    \@tud@cdoldfont@activetrue%
    \TUDoptions{cdfont=#1}%
  \fi%
}
\TUD@key{cdoldfonts}[true]{\TUDoptions{cdoldfont=#1}}
%<*class>
\AtEndOfClass%
%</class>
%<*package>
\AtEndOfPackage%
%</package>
{%
  \if@tud@cdoldfont@active%
%    \end{macrocode}
% Der aktive Zustand der Option \opt{cdoldfont} wird \enquote{eingefroren}.
%    \begin{macrocode}
    \let\@tud@cdoldfont@activefalse\@tud@cdoldfont@activetrue%
%    \end{macrocode}
% Wenn die Option \opt{cdoldfont} beim Laden der Klasse aktiviert wurde, kann 
% sie auch im Dokument genutzt werden. Um möglichst einfach alte Dokumente mit
% den alten Schriften setzen zu können, wird die Option \opt{cdfont} in diesem 
% Fall um die alten Werte erweitert.
%    \begin{macrocode}
    \TUD@key[.comp]{cdfont}{%
      \TUD@set@numkey{cdfont}{@tempa}{%
        {din}{1},{dinbold}{1},%
        {nodin}{2},{nodinbold}{2},%
        {onlydin}{3},{onlydinbold}{3}%
      }{#1}%
      \ifx\FamilyKeyState\FamilyKeyStateProcessed%
        \TUDoptions{cdoldfont=#1}%
      \fi%
    }%
%    \end{macrocode}
% Andernfalls wird \opt{cdoldfont} schlichtweg deaktiviert.
%    \begin{macrocode}
  \else%
    \TUD@key{cdoldfont}[]{%
%<*class>
      \ClassError{\TUD@Class@Name}%
%</class>
%<*package>
      \PackageError{tudscrfonts}%
%</package>
      {Option `cdoldfont' not active}{%
        Option `cdoldfont' must be activated while loading the\MessageBreak%
%<*class>
        class `\TUD@Class@Name'\space%
%</class>
%<*package>
        package `tudscrfonts'\space%
%</package>
        but you have tried to set it up later.%
      }%
      \FamilyKeyStateProcessed%
    }%
  \fi%
}
%    \end{macrocode}
% \end{macro}^^A \if@tud@cdoldfont@nodin
% \end{macro}^^A \if@tud@cdoldfont@active
% \end{option}^^A cdoldfont
% \begin{option}{fontsize}
% \changes{v2.04}{2015/04/24}{Option aus \KOMAScript{} erweitert}^^A
% \begin{macro}{\if@tud@x@scr@fontsize@set}
% \changes{v2.05}{2015/07/24}{neu}^^A
% Die genutzte Grundschriftgröße kann mit der \KOMAScript-Option \opt{fontsize} 
% eingestellt werden. Um ein aktives Setzen der Schriftgröße zu erkennen, wird 
% für das Laden der \TUDScript-Klasse ein Schlüssel definiert, der den Wert an
% \KOMAScript{} weiterreicht.
%    \begin{macrocode}
%<*class>
\tud@newif\if@tud@x@scr@fontsize@set
%</class>
\TUD@key{fontsize}{%
  \TUD@set@dimkey{fontsize}{\@tempa}{#1}%
  \ifx\FamilyKeyState\FamilyKeyStateProcessed%
    \ifdim\@tempa<\p@\relax%
      \FamilyKeyStateUnknownValue%
    \else%
%    \end{macrocode}
% Für das Paket wird geprüft, ob die gerade abgearbeitete Option global als
% Klassenoption angegeben wurde. Für den Fall, dass dies nicht so ist~-- die 
% Option also lokal dem Paket selbst übergeben wurde~--, wird eine Warnung mit
% dem Hinweis auf das vorgeschlagene Vorgehen ausgegeben.
%    \begin{macrocode}
%<*package>
      \@expandtwoargs\in@{,\CurrentOption,}{,\@globaloptionslist,}%
      \ifin@\else%
        \edef\tud@res@a{%
          \noexpand\PackageWarning{tudscrfonts}%
          {%
            The key `\CurrentOption' should only be\MessageBreak%
            used as class option%
          }%
        }%
        \expandafter\AtEndOfPackage\expandafter{\tud@res@a}%
      \fi%
%</package>
%<*class>
      \@tud@x@scr@fontsize@settrue%
%</class>
      \TUD@KOMAoptions{fontsize=#1}%
    \fi%
  \fi%
%    \end{macrocode}
% Für ungültige Werte wird eine Warnung ausgegeben.
%    \begin{macrocode}
  \ifx\FamilyKeyState\FamilyKeyStateUnknownValue%
%<*class>
    \ClassWarningNoLine{\TUD@Class@Name}%
%</class>
%<*package>
    \PackageWarningNoLine{tudscrfonts}%
%</package>
    {%
      The value for option `fontsize' must be a dimension\MessageBreak%
      and at least 1pt but `#1' was given%
    }%
    \FamilyKeyStateProcessed%
  \fi%
}
%<*class>
\AtEndOfClass%
%</class>
%<*package>
\AtEndOfPackage%
%</package>
{%
  \RelaxFamilyKey{TUD}{fontsize}%
  \DefineFamilyMember{KOMA}%
  \DefineFamilyKey{KOMA}{fontsize}{%
    \FamilyKeyStateUnknownValue%
%<*class>
    \@tud@x@scr@fontsize@settrue%
    \ClassWarning{\TUD@Class@Name}%
%</class>
%<*package>
    \PackageWarning{tudscrfonts}%
%</package>
    {%
      The key `fontsize=#1' should only be\MessageBreak%
      used as class option%
    }%
    \TUD@SpecialOptionAtDocument{tud@relspacing@set}%
  }%
}
%    \end{macrocode}
% \end{macro}^^A \if@tud@x@scr@fontsize@set
% \end{option}^^A fontsize
% \begin{option}{relspacing}
% \changes{v2.05}{2015/12/17}{neu}^^A
% \changes{v2.06o}{2022/08/08}{stärkerer Einfluss der Schriftgröße}^^A
% \begin{macro}{\if@tud@relspacing}
% \changes{v2.05}{2015/12/17}{neu}^^
% Die Option \opt{relspacing} setzt einige Abstände und Längen in Abhängigkeit 
% der aktuellen Grundschriftgröße, wenn sie aktiviert wurde. Die verwendete 
% Grundschriftgröße kann mit der \KOMAScript-Option \opt{fontsize} eingestellt
% werden. Die Längendefinition erfolgt durch das Makro \cs{tud@relspacing@set}.
%    \begin{macrocode}
\tud@newif\if@tud@relspacing
\TUD@key{relspacing}[true]{%
  \TUD@set@numkey{relspacing}{@tempa}{%
    \TUD@bool@numkey,%
    {absolute}{0},{classic}{0},{standard}{0},%
    {relative}{1},{fontsize}{1},{font}{1},{size}{1}%
  }{#1}%
  \ifx\FamilyKeyState\FamilyKeyStateProcessed%
    \ifcase\@tempa\relax% false
      \@tud@relspacingfalse%
    \or% true
      \@tud@relspacingtrue%
    \fi%
    \TUD@SpecialOptionAtDocument{tud@relspacing@set}%
  \fi%
}
%    \end{macrocode}
% \end{macro}^^A \if@tud@relspacing
% \end{option}^^A relspacing
%
% \iffalse
%</option>
%<*body>
% \fi
%
% \begin{macro}{\tud@x@fontspec@init}
% \changes{v2.06}{2018/06/28}{neu}^^A
% Dieses Makro wird bei der Initialisierun der Schriftfamilien aufgerufen, 
% falls \pkg{fontspec} aktiv ist. Das erste Argument enthält den NFSS-Namen 
% der Schriftfamilie, das zweite Argument spezifiziert die Schriften für die 
% jeweiligen Schriftschnitte.
%    \begin{macrocode}
\newcommand*\tud@x@fontspec@init[2]{%
%    \end{macrocode}
% Durch die Verwendung des optionalen Argumentes von \cs{defaultfontfeatures} 
% werden die gewünschten Features einem Schriftfamiliennamen zugewiesen. Diese 
% können anschließend einfach bspw. mit \cs{setsansfont}\marg{Name} genutzt 
% werden. Damit alle Änderungen lokal bleiben, werden die Argumente in einer 
% Gruppe expandiert.
%    \begin{macrocode}
  \begingroup%
    \edef\tud@res@a{%
      \noexpand\defaultfontfeatures[{#1}]{%
        NFSSFamily=#1,%
        Ligatures=TeX,%
        BoldFont={},%
        ItalicFont={},%
        BoldItalicFont={},%
        SmallCapsFont={},%
        #2%
      }%
    }%
%    \end{macrocode}
% Damit die Schrift mit ihrem NFSS-Namen auf jeden Fall definiert ist, auch 
% wenn die Schriften des \CDs nicht aktiviert wurden, wird \cs{newfontfamily} 
% aufgerufen.
%    \begin{macrocode}
    \edef\tud@res@b{%
      \noexpand\newfontfamily%
        \expandafter\noexpand\csname tud@x@fontspec@fam@#1\endcsname{#1}%
    }%
%    \end{macrocode}
% Die expandierten Argumente werden nach der Gruppe ausgeführt.
%    \begin{macrocode}
    \edef\tud@res@c{%
      \endgroup\expandonce\tud@res@a\expandonce\tud@res@b%
    }%
  \tud@res@c%
}
%    \end{macrocode}
% \end{macro}^^A \tud@x@fontspec@init
% \begin{macro}{\tud@x@fontspec@set}
% \changes{v2.06}{2018/08/31}{neu}^^A
% Das Paket \pkg{fontspec} ermöglicht es leider nicht, mit \cs{newfontfamily} 
% bereits definierte Schriftfamilien für die Zuweisung mit \cs{setmainfont} 
% etc. zu nutzen. Deshalb wird folgendes Hilfsmakro definiert, welches diese 
% Aufgabe übernimmt.
%    \begin{macrocode}
\newcommand*\tud@x@fontspec@set[2]{%
  \begingroup%
    \edef\tud@res@a{%
      \expandafter\noexpand\csname tud@x@fontspec@fam@#2\endcsname%
    }%
    \edef\tud@res@a{%
      \endgroup%
      \noexpand\renewrobustcmd*%
          \expandafter\noexpand\csname #1family\endcsname{%
        \expandafter\noexpand\csname tud@x@fontspec@fam@#2\endcsname%
      }%
      \def\expandafter\noexpand\csname #1default\endcsname{\tud@cdfont@fam}%
    }%
  \tud@res@a%
}
%    \end{macrocode}
% \end{macro}^^A \tud@x@fontspec@set
% \begin{macro}{\tud@font@set}
% \changes{v2.04}{2015/03/01}{Unterstützung für das Paket \pkg{mweights}}^^A
% \begin{macro}{\bfseries@rm}
% \changes{v2.04}{2015/04/24}{Unterstützung für das Paket \pkg{mweights}}^^A
% \begin{macro}{\mdseries@rm}
% \changes{v2.04}{2015/04/24}{Unterstützung für das Paket \pkg{mweights}}^^A
% \begin{macro}{\bfseries@sf}
% \changes{v2.04}{2015/04/24}{Unterstützung für das Paket \pkg{mweights}}^^A
% \begin{macro}{\mdseries@sf}
% \changes{v2.04}{2015/04/24}{Unterstützung für das Paket \pkg{mweights}}^^A
% \begin{macro}{\bfseries@tt}
% \changes{v2.04}{2015/04/24}{Unterstützung für das Paket \pkg{mweights}}^^A
% \begin{macro}{\mdseries@tt}
% \changes{v2.04}{2015/04/24}{Unterstützung für das Paket \pkg{mweights}}^^A
% \begin{macro}{\rmdef@ult}
% \changes{v2.04}{2015/04/24}{Unterstützung für das Paket \pkg{mweights}}^^A
% \begin{macro}{\sfdef@ult}
% \changes{v2.04}{2015/04/24}{Unterstützung für das Paket \pkg{mweights}}^^A
% \begin{macro}{\ttdef@ult}
% \changes{v2.04}{2015/04/24}{Unterstützung für das Paket \pkg{mweights}}^^A
% \begin{macro}{\bfdef@ult}
% \changes{v2.04}{2015/04/24}{Unterstützung für das Paket \pkg{mweights}}^^A
% \begin{macro}{\mddef@ult}
% \changes{v2.04}{2015/04/24}{Unterstützung für das Paket \pkg{mweights}}^^A
% Mit \cs{tud@font@set} werden entweder die normalen oder aber die Schriften 
% des \CDs aktiviert. Dabei werden die Pakete \pkg{fontspec} und \pkg{mweights} 
% beachtet. 
%    \begin{macrocode}
\newcommand*\tud@font@set[1][\tud@cdfont@wrn]{%
%    \end{macrocode}
% Ist die Verwendung der Schriften des \CDs gewünscht, obwohl diese nicht
% installiert sind, werden die entsprechenden Warnungen ausgegeben. Danach 
% werden die Schnitte der Standardschriften gesichert, um diese später
% vollständig wiederherstellen zu können.
%    \begin{macrocode}
  \if@tud@cdfont@active%
    #1%
    \tud@cs@store{rmdefault}%
    \tud@cs@store{sfdefault}%
    \tud@cs@store{ttdefault}%
    \tud@cs@store{bfdefault}%
    \tud@cs@store{mddefault}%
    \tud@cs@store{updefault}%
    \tud@cs@store{sldefault}%
    \tud@cs@store{itdefault}%
    \tud@cs@store{familydefault}%
    \tud@cs@store{seriesdefault}%
    \tud@cs@store{shapedefault}%
    \if@tud@x@mweights@enabled%
      \tud@cs@store{bfseries@rm}%
      \tud@cs@store{mdseries@rm}%
      \tud@cs@store{bfseries@sf}%
      \tud@cs@store{mdseries@sf}%
      \tud@cs@store{bfseries@tt}%
      \tud@cs@store{mdseries@tt}%
    \fi%
%    \end{macrocode}
% Das Paket \pkg{fontspec} definiert u.\,U. die Familienauswahlbefehle um, so
% dass diese ebenfalls gesichert werden.
%    \begin{macrocode}
    \if@tud@x@fontspec@enabled%
      \tud@cs@store{rmfamily}%
      \tud@cs@store{sffamily}%
      \tud@cs@store{ttfamily}%
    \fi%
%    \end{macrocode}
% Danach erfolgt die Definition der Schriften des \CDs. 
%    \begin{macrocode}
    \tud@cdfont@set%
    \tud@cdfont@symbols@set%
    \tud@ttfont@set%
    \if@tud@x@mweights@enabled%
      \edef\bfseries@rm{\tud@cdfont@bf}%
      \edef\mdseries@rm{\tud@cdfont@md}%
      \edef\bfseries@sf{\tud@cdfont@bf}%
      \edef\mdseries@sf{\tud@cdfont@md}%
      \edef\bfseries@tt{\tud@ttfont@bf}%
      \edef\mdseries@tt{\tud@ttfont@md}%
    \fi%
    \let\bfdefault\tud@cdfont@bf%
    \let\mddefault\tud@cdfont@md%
%    \end{macrocode}
% Werden die Schriften des \CDs deaktiviert, wird auf die zu Dokumentbeginn
% gesicherten Schriften\footnote{mit und ohne Serifen} zurückgeschaltet.
%    \begin{macrocode}
  \else%
    \tud@cs@restore{rmdefault}%
    \tud@cs@restore{sfdefault}%
    \tud@cs@restore{ttdefault}%
    \tud@cs@restore{bfdefault}%
    \tud@cs@restore{mddefault}%
    \tud@cs@restore{updefault}%
    \tud@cs@restore{sldefault}%
    \tud@cs@restore{itdefault}%
    \tud@cs@restore{familydefault}%
    \tud@cs@restore{seriesdefault}%
    \tud@cs@restore{shapedefault}%
    \if@tud@x@mweights@enabled%
      \tud@cs@restore{bfseries@rm}%
      \tud@cs@restore{mdseries@rm}%
      \tud@cs@restore{bfseries@sf}%
      \tud@cs@restore{mdseries@sf}%
      \tud@cs@restore{bfseries@tt}%
      \tud@cs@restore{mdseries@tt}%
    \fi%
    \if@tud@x@fontspec@enabled%
      \tud@cs@restore{rmfamily}%
      \tud@cs@restore{sffamily}%
      \tud@cs@restore{ttfamily}%
    \fi%
    \tud@cdfont@symbols@reset%
  \fi%
  \if@tud@x@mweights@enabled%
    \edef\rmdef@ult{\rmdefault}%
    \edef\sfdef@ult{\sfdefault}%
    \edef\ttdef@ult{\ttdefault}%
    \edef\bfdef@ult{\bfdefault}%
    \edef\mddef@ult{\mddefault}%
    \edef\famdef@ult{\familydefault}%
  \fi%
%    \end{macrocode}
% Zum Ende werden einige Abstände abhängig von der gewählten Schriftgröße 
% definiert. Danach wird gewählte Standardschrift aktiviert und für die Klassen 
% das Layout erneuert.
%    \begin{macrocode}
  \tud@relspacing@set%
  \normalfont\selectfont%
%<*class>
  \tud@cd@process%
  \global\@tud@head@font@settrue%
%</class>
}
%    \end{macrocode}
% \end{macro}^^A \mddef@ult
% \end{macro}^^A \bfdef@ult
% \end{macro}^^A \ttdef@ult
% \end{macro}^^A \sfdef@ult
% \end{macro}^^A \rmdef@ult
% \end{macro}^^A \mdseries@tt
% \end{macro}^^A \bfseries@tt
% \end{macro}^^A \mdseries@sf
% \end{macro}^^A \bfseries@sf
% \end{macro}^^A \mdseries@rm
% \end{macro}^^A \bfseries@rm
% \end{macro}^^A \tud@font@set
% \begin{macro}{\tud@cdfont@set}
% \changes{v2.06}{2018/06/28}{neu}^^A
% \begin{macro}{\tud@cdfont@@set}
% \changes{v2.06}{2018/06/28}{neu}^^A
% \begin{macro}{\tud@cdfont@md}
% \changes{v2.06}{2018/06/28}{neu}^^A
% \begin{macro}{\tud@cdfont@bf}
% \changes{v2.06}{2018/06/28}{neu}^^A
% \begin{macro}{\tud@cdfont@ebf}
% \changes{v2.06}{2018/06/28}{neu}^^A
% Hiermit erfolgt die eigentliche Auswahl der Schriftfamilien für das \CD.
%    \begin{macrocode}
\newcommand*\tud@cdfont@set{%
%    \end{macrocode}
% Zunächst werden die Standardwerte für die Schriftfamilien gesetzt.
%    \begin{macrocode}
  \renewcommand*\rmdefault{\sfdefault}%
  \renewcommand*\updefault{n}%
  \renewcommand*\itdefault{it}%
  \renewcommand*\sldefault{sl}%
  \renewcommand*\familydefault{\sfdefault}%
  \renewcommand*\seriesdefault{\mddefault}%
  \renewcommand*\shapedefault{\updefault}%
  \if@tud@cdfont@fam@exist%
    \if@tud@cdfont@lining%
      \let\tud@cdfont@fam\tud@cdfont@fam@lf%
    \else%
      \let\tud@cdfont@fam\tud@cdfont@fam@osf%
    \fi%
%    \end{macrocode}
% Das Aktivieren der Schriften erfolgt entweder mit dem Paket \pkg{fontspec}
% oder\dots
%    \begin{macrocode}
    \if@tud@x@fontspec@enabled%
      \tud@x@fontspec@set{sf}{\tud@cdfont@fam}%
%    \end{macrocode}
% \dots nach dem NFSS.
%    \begin{macrocode}
    \else%
      \renewcommand*\sfdefault{\tud@cdfont@fam}%
    \fi%
    \tud@cdfont@@set%
  \fi%
}
\newcommand*\tud@cdfont@md{m}
\newcommand*\tud@cdfont@bf{b}
\newcommand*\tud@cdfont@ebf{bx}
\newcommand*\tud@cdfont@@set{%
  \if@tud@cdfont@heavy%
    \renewcommand*\tud@cdfont@md{m}%
    \if@tud@cdfont@ultrabold%
      \renewcommand*\tud@cdfont@bf{b}%
      \renewcommand*\tud@cdfont@ebf{eb}%
    \else%
      \renewcommand*\tud@cdfont@bf{sb}%
      \renewcommand*\tud@cdfont@ebf{b}%
    \fi%
  \else%
    \renewcommand*\tud@cdfont@md{l}%
    \if@tud@cdfont@ultrabold%
      \renewcommand*\tud@cdfont@bf{sb}%
      \renewcommand*\tud@cdfont@ebf{b}%
    \else%
      \renewcommand*\tud@cdfont@bf{m}%
      \renewcommand*\tud@cdfont@ebf{sb}%
    \fi%
  \fi%
}
\if@tud@cdoldfont@active
  \renewcommand*\tud@cdfont@@set{%
    \if@tud@cdfont@heavy%
      \renewcommand*\tud@cdfont@md{m}%
      \if@tud@cdfont@ultrabold%
        \renewcommand*\tud@cdfont@bf{eb}%
        \renewcommand*\tud@cdfont@ebf{eb}%
      \else%
        \renewcommand*\tud@cdfont@bf{b}%
        \renewcommand*\tud@cdfont@ebf{eb}%
      \fi%
    \else%
      \renewcommand*\tud@cdfont@md{l}%
      \if@tud@cdfont@ultrabold%
        \renewcommand*\tud@cdfont@bf{b}%
        \renewcommand*\tud@cdfont@ebf{eb}%
      \else%
        \renewcommand*\tud@cdfont@bf{m}%
        \renewcommand*\tud@cdfont@ebf{b}%
      \fi%
    \fi%
  }%
\fi
%    \end{macrocode}
% \end{macro}^^A \tud@cdfont@ebf
% \end{macro}^^A \tud@cdfont@bf
% \end{macro}^^A \tud@cdfont@md
% \end{macro}^^A \tud@cdfont@@set
% \end{macro}^^A \tud@cdfont@set
% \begin{macro}{\tud@cdfont@declare@symb}
% \changes{v2.06g}{2020/06/18}{neu}^^A
% \begin{macro}{\tud@cdfont@symb@list}
% \changes{v2.06g}{2020/06/18}{neu}^^A
% \begin{macro}{\tud@DeclareTextSymbol}
% \changes{v2.06g}{2020/06/18}{neu}^^A
% Mit \cs{tud@cdfont@declare@symb} können Glyhen respektive einzelne Zeichen 
% definiert werden, welche über das Makro \cs{tud@cdfont@symbols@set} nur zum 
% Einsatz kommen, wenn \opt{cdfont=true} aktiviert wurde. Damit können gezielt 
% Symbole in verschiedenen Kodierungen aus unterscihedlichen Schriftfamilien 
% definiert werden.
%    \begin{macrocode}
\newcommand*\tud@cdfont@symb@list{}
\newcommand*\tud@cdfont@declare@symb[4]{%
  \listeadd\tud@cdfont@symb@list{#1}%
  \tud@DeclareTextSymbol{#1}{#2}{#3}{#4}%
}
%    \end{macrocode}
% Die an \cs{tud@cdfont@declare@symb} übergebenen Letter für Auswahlbefehle
% erhalten |\tud@cdfont@symbol@...| als Präfix. Da so der ursprüngliche
% Befehlsname verändert wird, würde dieser Befehlsname auch verwendet werden, 
% wenn dieser in einem fragilen Kontext genutzt wird (siehe \cs{@changed@cmd}).
% Deshalb wird im Anschluss der neue Befehl selbst robust definiert, damit 
% eine spätere Expansion nach der Zuweisung mit \cs{tud@cs@letltx} nicht in 
% |\tud@cdfont@symbol@|\meta{Letter} resultiert sondern in jedem Fall 
% |\|\meta{Letter} erhalten bleibt.
%    \begin{macrocode}
\newcommand*\tud@DeclareTextSymbol[4]{%
  \begingroup%
    \edef\tud@res@a{%
      \endgroup%
      \noexpand\DeclareTextCommand%
        {\csname tud@cdfont@symbol@#1\endcsname}{#2}%
        {\unexpanded{{\fontfamily{#3}\selectfont\char#4}}}%
      \noexpand\DeclareTextCommandDefault%
        {\csname tud@cdfont@symbol@#1\endcsname}%
        {\noexpand\UseTextSymbol{#2}{\csname tud@cdfont@symbol@#1\endcsname}}%
    }%
  \tud@res@a%
  \expandafter\robustify\csname tud@cdfont@symbol@#1\endcsname%
}
%    \end{macrocode}
% \end{macro}^^A \tud@DeclareTextSymbol
% \end{macro}^^A \tud@cdfont@symb@list
% \end{macro}^^A \tud@cdfont@declare@symb
% \begin{macro}{\tud@cdfont@symbols@set}
% \changes{v2.06g}{2020/06/18}{neu}^^A
% \begin{macro}{\tud@cdfont@symbols@toks}
% \changes{v2.06g}{2020/06/18}{neu}^^A
% \begin{macro}{\tud@cdfont@symbols@set@cmd}
% \changes{v2.06g}{2020/06/18}{neu}^^A
% \begin{macro}{\tud@cdfont@symbols@reset}
% \changes{v2.06g}{2020/06/18}{neu}^^A
% Mit diesen Befehlen wird im zwischen Symbolen für die Schriften des \CDs, 
% welche mit \cs{tud@cdfont@declare@symb} deklariert wurden, und den normalen 
% gewechselt werden. 
%    \begin{macrocode}
\tud@newtoks\tud@cdfont@symbols@toks
\newcommand*\tud@cdfont@symbols@set{%
%    \end{macrocode}
% Die Sicherung der alten Definitionen erfolgt nur einmalig. Die Liste der 
% Symbole wird durchlaufen und die erfolgten Definitionen werden umgesetzt.
%    \begin{macrocode}
  \expandafter\IfArgIsEmpty\expandafter{\the\tud@cdfont@symbols@toks}{%
    \forlistloop\tud@cdfont@symbols@set@cmd\tud@cdfont@symb@list%
%    \end{macrocode}
% Wird das Tokenregister abgerufen, soll es anschließend auch wieder geleert 
% werden.
%    \begin{macrocode}
    \addto@hook\tud@cdfont@symbols@toks{\tud@cdfont@symbols@toks{}}%
  }{}%
}
%    \end{macrocode}
% Das Vorgehen zur Wiederherstellung im Token \cs{tud@cdfont@symbols@toks}
% definiert.
%    \begin{macrocode}
\newcommand*\tud@cdfont@symbols@set@cmd[1]{%
  \tud@cs@store{#1}%
  \addto@hook\tud@cdfont@symbols@toks{\tud@cs@restore{#1}}%
  \tud@cs@letltx{#1}{tud@cdfont@symbol@#1}%
}
%    \end{macrocode}
% Für das Zurücksetzen muss lediglich das Tokenregister aufgerufen werden.
%    \begin{macrocode}
\newcommand*\tud@cdfont@symbols@reset{\the\tud@cdfont@symbols@toks}
%    \end{macrocode}
% \end{macro}^^A \tud@cdfont@symbols@reset
% \end{macro}^^A \tud@cdfont@symbols@set@cmd
% \end{macro}^^A \tud@cdfont@symbols@toks
% \end{macro}^^A \tud@cdfont@symbols@set
% \begin{macro}{\tud@cdfont@declare@textsymb}
% \changes{v2.06g}{2020/06/18}{neu}^^A
% Die Definition der Textsymbole für die \val{TS1}-Kodierung.
% \ToDo{weitere Symbole (\cs{textohm} etc.) der Open Sans hinzufügen}[v2.07]
%    \begin{macrocode}
\newcommand*\tud@cdfont@declare@textsymb{%
  \tud@cdfont@declare@symb{textleftarrow}{TS1}{iwona}{24}%
  \tud@cdfont@declare@symb{textrightarrow}{TS1}{iwona}{25}%
  \tud@cdfont@declare@symb{textuparrow}{TS1}{iwona}{94}%
  \tud@cdfont@declare@symb{textdownarrow}{TS1}{iwona}{95}%
  \tud@cdfont@declare@symb{textlangle}{TS1}{iwona}{60}%
  \tud@cdfont@declare@symb{textrangle}{TS1}{iwona}{62}%
}
%    \end{macrocode}
% \end{macro}^^A \tud@cdfont@declare@textsymb
% \begin{macro}{\tud@relspacing@set}
% \changes{v2.04}{2015/02/17}{neu}^^A
% \begin{macro}{\tud@relspacing@@set}
% \changes{v2.04}{2015/03/27}{neu}^^A
% \changes{v2.06o}{2022/08/08}{\cs{abovedisplayskip} als Referenz}^^A
% \begin{macro}{\smallskipamount}
% \changes{v2.04}{2015/04/24}{Wert abhängig von der Schriftgröße}^^A
% \begin{macro}{\medskipamount}
% \changes{v2.04}{2015/04/24}{Wert abhängig von der Schriftgröße}^^A
% \begin{macro}{\bigskipamount}
% \changes{v2.04}{2015/04/24}{Wert abhängig von der Schriftgröße}^^A
% \begin{macro}{\abovecaptionskip}
% \changes{v2.04}{2015/04/24}{Wert abhängig von der Schriftgröße}^^A
% \begin{macro}{\belowcaptionskip}
% \begin{macro}{\columnsep}
% \changes{v2.04}{2015/04/24}{Wert abhängig von der Schriftgröße}^^A
% Mit diesem Befehl wird nach der Auswahl der Schriftgröße die Länge einiger 
% Abstände angepasst, die bei den \KOMAScript-Klassen nicht abhängig von dieser
% sind.
%    \begin{macrocode}
\newcommand*\tud@relspacing@set{%
%    \end{macrocode}
% Es werden die Standardeinstellungen abhängig von \opt{cdfont} entweder 
% wiederhergestellt oder gesichert und neu definiert.
%    \begin{macrocode}
  \if@tud@relspacing%
    \tud@cslength@store{smallskipamount}%
    \tud@cslength@store{medskipamount}%
    \tud@cslength@store{bigskipamount}%
    \tud@cslength@store{abovecaptionskip}%
    \tud@cslength@store{belowcaptionskip}%
    \tud@cslength@store{columnsep}%
    \tud@relspacing@@set%
  \else%
    \tud@cslength@restore{smallskipamount}%
    \tud@cslength@restore{medskipamount}%
    \tud@cslength@restore{bigskipamount}%
    \tud@cslength@restore{abovecaptionskip}%
    \tud@cslength@restore{belowcaptionskip}%
    \tud@cslength@restore{columnsep}%
  \fi%
}
%    \end{macrocode}
% Hiermit erfolgt das eigentliche Setzen der Abstände.
%    \begin{macrocode}
\newcommand*\tud@relspacing@@set{%
  \tud@if@v@lower{2.06}{%
    \bigskipamount=\partopsep%
    \multiply\bigskipamount by 4%
  }{%
    \begingroup%
      \tud@setdim\@tempdima{\dimexpr\abovedisplayskip\relax}%
      \tud@setdim\@tempdimb{\@tempdima/3}%
      \edef\tud@res@a{%
        \endgroup%
        \noexpand\tud@setglue\noexpand\bigskipamount{%
          \the\@tempdima\@plus\the\@tempdimb\@minus\the\@tempdimb%
        }%
      }%
    \tud@res@a%
  }%
  \medskipamount=\bigskipamount%
  \divide\medskipamount by 2%
  \smallskipamount=\bigskipamount%
  \divide\smallskipamount by 4%
  \tud@if@lengthregister{\abovecaptionskip}{%
    \tud@setdim\abovecaptionskip{1\bigskipamount*5/6}%
  }{}%
  \tud@if@lengthregister{\belowcaptionskip}{%
    \tud@setdim\belowcaptionskip{\z@}%
  }{}%
  \tud@setdim\columnsep{1\baselineskip*11/10}%
}
%    \end{macrocode}
% \end{macro}^^A \columnsep
% \end{macro}^^A \belowcaptionskip
% \end{macro}^^A \abovecaptionskip
% \end{macro}^^A \bigskipamount
% \end{macro}^^A \medskipamount
% \end{macro}^^A \smallskipamount
% \end{macro}^^A \tud@relspacing@@set
% \end{macro}^^A \tud@relspacing@set
% \begin{macro}{\tud@cdfont@init}
% \changes{v2.04}{2015/03/10}{neu}^^A
% \begin{macro}{\tud@cdfont@@init}
% \changes{v2.06o}{2022/08/01}{neu}
% \begin{macro}{\tud@cdfont@@@init}
% \changes{v2.06o}{2022/08/01}{neu}
% \begin{macro}{\cdfontln}
% \changes{v2.06}{2018/06/29}{neu}^^A
% \begin{macro}{\cdfontrn}
% \changes{v2.06}{2018/06/29}{neu}^^A
% \begin{macro}{\cdfontsn}
% \changes{v2.06}{2018/06/29}{neu}^^A
% \begin{macro}{\cdfontbn}
% \changes{v2.06}{2018/06/29}{neu}^^A
% \begin{macro}{\cdfontxn}
% \changes{v2.06}{2018/06/29}{neu}^^A
% \begin{macro}{\cdfontli}
% \changes{v2.06}{2018/06/29}{neu}^^A
% \begin{macro}{\cdfontri}
% \changes{v2.06}{2018/06/29}{neu}^^A
% \begin{macro}{\cdfontsi}
% \changes{v2.06}{2018/06/29}{neu}^^A
% \begin{macro}{\cdfontbi}
% \changes{v2.06}{2018/06/29}{neu}^^A
% \begin{macro}{\cdfontxi}
% \changes{v2.06}{2018/06/29}{neu}^^A
% \begin{macro}{\textcdln}
% \changes{v2.06}{2018/06/29}{neu}^^A
% \begin{macro}{\textcdrn}
% \changes{v2.06}{2018/06/29}{neu}^^A
% \begin{macro}{\textcdsn}
% \changes{v2.06}{2018/06/29}{neu}^^A
% \begin{macro}{\textcdbn}
% \changes{v2.06}{2018/06/29}{neu}^^A
% \begin{macro}{\textcdxn}
% \changes{v2.06}{2018/06/29}{neu}^^A
% \begin{macro}{\textcdli}
% \changes{v2.06}{2018/06/29}{neu}^^A
% \begin{macro}{\textcdri}
% \changes{v2.06}{2018/06/29}{neu}^^A
% \begin{macro}{\textcdsi}
% \changes{v2.06}{2018/06/29}{neu}^^A
% \begin{macro}{\textcdbi}
% \changes{v2.06}{2018/06/29}{neu}^^A
% \begin{macro}{\textcdxs}
% \changes{v2.06}{2018/06/29}{neu}^^A
% Das Makro \cs{tud@cdfont@init} wird für die Defintion aller Befehle zur
% Auswahl der Schriften des \CDs verwendet. Dabei erfolgt die Definition der 
% Schriften selbst mit \cs{tud@cdfont@@init} und das Festlegen der Befehle zur 
% expliziten Schriftauswahl mit \cs{tud@cdfont@@@init}.
% \ToDo{Condensed Schriften mit neuer Open Sans?}[v2.07]
%    \begin{macrocode}
\newcommand*\tud@cdfont@init{%
  \tud@cdfont@@init%
  \tud@cdfont@@@init%
}
\newcommand*\tud@cdfont@@init{%
%    \end{macrocode}
% Zur Nutztung der OTF"~Schriften werden mit \cs{tud@x@fontspec@init} alle 
% benötigten Schriftfamilien mit ihren einzelnen Schriftschnitten definiert.
%    \begin{macrocode}
  \if@tud@cdfont@fam@exist%
    \if@tud@x@fontspec@enabled%
      \def\tud@res@a{%
        UprightFont={OpenSans-Regular},%
        FontFace={l}{n}{OpenSans-Light},%
        FontFace={m}{n}{OpenSans-Regular},%
        FontFace={sb}{n}{OpenSans-SemiBold},%
        FontFace={b}{n}{OpenSans-Bold},%
        FontFace={bx}{n}{OpenSans-Bold},%
        FontFace={eb}{n}{OpenSans-ExtraBold},%
        FontFace={l}{it}{OpenSans-LightItalic},%
        FontFace={m}{it}{OpenSans-Italic},%
        FontFace={sb}{it}{OpenSans-SemiBoldItalic},%
        FontFace={b}{it}{OpenSans-BoldItalic},%
        FontFace={bx}{it}{OpenSans-BoldItalic},%
        FontFace={eb}{it}{OpenSans-ExtraBoldItalic}%
      }%
      \tud@x@fontspec@init{\tud@cdfont@fam@osf}{Numbers=OldStyle,\tud@res@a}%
      \tud@x@fontspec@init{\tud@cdfont@fam@lf}{\tud@res@a}%
%    \end{macrocode}
% Da einige Befehle mit \cs{DeclareTextSymbolDefault} für den Textmodus 
% definiert werden und dabei lediglich die Kodierung auf \val{OMS} oder 
% \val{OML} jedoch nicht den Namen der Schriftfamilie anpassen, werden hierfür
% Aliasbefehle definiert, welche sich der Schriften des Paketes \pkg{iwona} 
% bedienen.
%    \begin{macrocode}
    \else%
      \IfFileExists{omliwona.fd}{%
        \input{omliwona.fd}%
        \@for\tud@res@a:={l,m,sb,b,eb}\do{%
          \csletcs{OML/\tud@cdfont@fam@lf/\tud@res@a/it}%
            {OML/iwona/\tud@res@a/it}%
          \csletcs{OML/\tud@cdfont@fam@osf/\tud@res@a/it}%
            {OML/iwona/\tud@res@a/it}%
        }%
      }{}%
      \IfFileExists{omsiwona.fd}{%
        \input{omsiwona.fd}%
        \@for\tud@res@a:={l,m,sb,b,eb}\do{%
          \csletcs{OMS/\tud@cdfont@fam@lf/\tud@res@a/n}%
            {OMS/iwona/\tud@res@a/n}%
          \csletcs{OMS/\tud@cdfont@fam@osf/\tud@res@a/n}%
            {OMS/iwona/\tud@res@a/n}%
        }%
      }{}%
%    \end{macrocode}
% Nun folgen noch einzeln definierte Symbole.
%    \begin{macrocode}
      \tud@cdfont@declare@textsymb%
    \fi%
%    \end{macrocode}
% Es werden mehrere Schalter zur expliziten Auswahl für die Schriftschnitte
% \textcdln{Open~Sans~Light}, \textcdrn{Open~Sans~Regular}, 
% \textcdsn{Open~Sans~SemiBold}, \textcdbn{Open~Sans~Bold} und 
% \textcdxn{Open~Sans~ExtraBold} sowie \textcdli{Open~Sans~Light~Italic}, 
% \textcdri{Open~Sans~Regular~Italic}, \textcdsi{Open~Sans~SemiBold}
% \textcdbi{Open~Sans~Bold~Italic} und \textcdxi{Open~Sans~ExtraBold~Italic}
% definiert. Diese können so im Dokument unabhängig von der Option 
% \opt{cdfont} genutzt werden.
%    \begin{macrocode}
    \def\tud@res@a##1##2##3{%
      \newrobustcmd*##1{\usefont{\f@encoding}{\tud@cdfont@fam}{##2}{##3}}%
    }%
    \tud@res@a\cdfontln{l}{n}%
    \tud@res@a\cdfontrn{m}{n}%
    \tud@res@a\cdfontsn{sb}{n}%
    \tud@res@a\cdfontbn{b}{n}%
    \tud@res@a\cdfontxn{eb}{n}%
    \tud@res@a\cdfontli{l}{it}%
    \tud@res@a\cdfontri{m}{it}%
    \tud@res@a\cdfontsi{sb}{it}%
    \tud@res@a\cdfontbi{b}{it}%
    \tud@res@a\cdfontxi{eb}{it}%
%    \end{macrocode}
% Sind die notwendigen Schriften nicht installiert, werden die Schalter für die
% Rückfallebene so definiert, dass diese eine Warnung ausgeben.
%    \begin{macrocode}
  \else%
    \tud@cdfont@fallback\cdfontln{OpenSans-Light}{md}{up}%
    \tud@cdfont@fallback\cdfontrn{OpenSans-Regular}{md}{up}%
    \tud@cdfont@fallback\cdfontsn{OpenSans-SemiBold}{md}{up}%
    \tud@cdfont@fallback\cdfontbn{OpenSans-Bold}{bf}{up}%
    \tud@cdfont@fallback\cdfontxn{OpenSans-ExtraBold}{bf}{up}%
    \tud@cdfont@fallback\cdfontli{OpenSans-LightItalic}{md}{it}%
    \tud@cdfont@fallback\cdfontri{OpenSans-Italic}{md}{it}%
    \tud@cdfont@fallback\cdfontsi{OpenSans-SemiBoldItalic}{md}{it}%
    \tud@cdfont@fallback\cdfontbi{OpenSans-BoldItalic}{bf}{it}%
    \tud@cdfont@fallback\cdfontxi{OpenSans-ExtraBoldItalic}{bf}{it}%
  \fi%
}
%    \end{macrocode}
% Außerdem werden für die Schriften noch die entsprechenden Textauswahlbefehle
% bereitgestellt.
%    \begin{macrocode}
\newcommand*\tud@cdfont@@@init{%
  \newcommand*\textcdln{}%
  \newcommand*\textcdrn{}%
  \newcommand*\textcdsn{}%
  \newcommand*\textcdbn{}%
  \newcommand*\textcdxn{}%
  \newcommand*\textcdli{}%
  \newcommand*\textcdri{}%
  \newcommand*\textcdsi{}%
  \newcommand*\textcdbi{}%
  \newcommand*\textcdxi{}%
  \DeclareTextFontCommand\textcdln{\cdfontln}%
  \DeclareTextFontCommand\textcdrn{\cdfontrn}%
  \DeclareTextFontCommand\textcdsn{\cdfontsn}%
  \DeclareTextFontCommand\textcdbn{\cdfontbn}%
  \DeclareTextFontCommand\textcdxn{\cdfontxn}%
  \DeclareTextFontCommand\textcdli{\cdfontli}%
  \DeclareTextFontCommand\textcdri{\cdfontri}%
  \DeclareTextFontCommand\textcdsi{\cdfontsi}%
  \DeclareTextFontCommand\textcdbi{\cdfontbi}%
  \DeclareTextFontCommand\textcdxi{\cdfontxi}%
}
%    \end{macrocode}
% \end{macro}^^A \textcdxi
% \end{macro}^^A \textcdbi
% \end{macro}^^A \textcdsi
% \end{macro}^^A \textcdri
% \end{macro}^^A \textcdli
% \end{macro}^^A \textcdxn
% \end{macro}^^A \textcdbn
% \end{macro}^^A \textcdsn
% \end{macro}^^A \textcdrn
% \end{macro}^^A \textcdln
% \end{macro}^^A \cdfontxi
% \end{macro}^^A \cdfontbi
% \end{macro}^^A \cdfontsi
% \end{macro}^^A \cdfontri
% \end{macro}^^A \cdfontli
% \end{macro}^^A \cdfontxn
% \end{macro}^^A \cdfontbn
% \end{macro}^^A \cdfontsn
% \end{macro}^^A \cdfontrn
% \end{macro}^^A \cdfontln
% \end{macro}^^A \tud@cdfont@@@init
% \end{macro}^^A \tud@cdfont@@init
% \end{macro}^^A \tud@cdfont@init
% \begin{macro}{\univln}
% \begin{macro}{\univrn}
% \begin{macro}{\univbn}
% \begin{macro}{\univxn}
% \begin{macro}{\univls}
% \begin{macro}{\univrs}
% \begin{macro}{\univbs}
% \begin{macro}{\univxs}
% \begin{macro}{\dinbn}
% \begin{macro}{\tud@db}
% \begin{macro}{\tud@db@wrn}
% \begin{macro}{\textuln}
% \begin{macro}{\texturn}
% \begin{macro}{\textubn}
% \begin{macro}{\textuxn}
% \begin{macro}{\textuls}
% \begin{macro}{\texturs}
% \begin{macro}{\textubs}
% \begin{macro}{\textuxs}
% \begin{macro}{\textdbn}
% Die Definition der Befehle der veralteten Schriften des \CDs.
%    \begin{macrocode}
\if@tud@cdoldfont@active
  \renewcommand*\tud@cdfont@@init{%
    \if@tud@cdfont@fam@exist%
      \if@tud@x@fontspec@enabled%
        \def\tud@res@a{%
          UprightFont={Univers},%
          FontFace={l}{n}{Univers-Light},%
          FontFace={m}{n}{Univers},%
          FontFace={b}{n}{Univers-Bold},%
          FontFace={bx}{n}{Univers-Bold},%
          FontFace={eb}{n}{Univers-Black},%
          FontFace={l}{it}{Univers-LightOblique},%
          FontFace={m}{it}{Univers-Oblique},%
          FontFace={b}{it}{Univers-BoldOblique},%
          FontFace={bx}{it}{Univers-BoldOblique},%
          FontFace={eb}{it}{Univers-BlackOblique}%
        }%
        \tud@x@fontspec@init{\tud@cdfont@fam@lf}{\tud@res@a}%
      \fi%
%    \end{macrocode}
% Die Schalter zur expliziten Auswahl für die \Univers-Schriftschnitte.
%    \begin{macrocode}
      \def\tud@res@a##1##2##3{%
        \newrobustcmd*##1{\usefont{\f@encoding}{\tud@cdfont@fam}{##2}{##3}}%
      }%
      \tud@res@a\univln{l}{n}%
      \tud@res@a\univrn{m}{n}%
      \tud@res@a\univbn{b}{n}%
      \tud@res@a\univxn{eb}{n}%
      \tud@res@a\univls{l}{it}%
      \tud@res@a\univrs{m}{it}%
      \tud@res@a\univbs{b}{it}%
      \tud@res@a\univxs{eb}{it}%
%    \end{macrocode}
% Sind die notwendigen Schriften nicht installiert, werden die Schalter für die
% Rückfallebene so definiert, dass diese eine Warnung ausgeben.
%    \begin{macrocode}
    \else%
      \tud@cdfont@fallback\univln{Univers-Light}{md}{up}%
      \tud@cdfont@fallback\univrn{Univers}{md}{up}%
      \tud@cdfont@fallback\univbn{Univers-Bold}{bf}{up}%
      \tud@cdfont@fallback\univxn{Univers-Black}{bf}{up}%
      \tud@cdfont@fallback\univls{Univers-LightOblique}{md}{it}%
      \tud@cdfont@fallback\univrs{Univers-Oblique}{md}{it}%
      \tud@cdfont@fallback\univbs{Univers-BoldOblique}{bf}{it}%
      \tud@cdfont@fallback\univxs{Univers-BlackOblique}{bf}{it}%
    \fi%
%    \end{macrocode}
% Außerdem werden für die Schriften noch die entsprechenden Textauswahlbefehle
% bereitgestellt.
%    \begin{macrocode}
    \newcommand*\textuln{}%
    \newcommand*\texturn{}%
    \newcommand*\textubn{}%
    \newcommand*\textuxn{}%
    \newcommand*\textuls{}%
    \newcommand*\texturs{}%
    \newcommand*\textubs{}%
    \newcommand*\textuxs{}%
    \DeclareTextFontCommand\textuln{\univln}%
    \DeclareTextFontCommand\texturn{\univrn}%
    \DeclareTextFontCommand\textubn{\univbn}%
    \DeclareTextFontCommand\textuxn{\univxn}%
    \DeclareTextFontCommand\textuls{\univls}%
    \DeclareTextFontCommand\texturs{\univrs}%
    \DeclareTextFontCommand\textubs{\univbs}%
    \DeclareTextFontCommand\textuxs{\univxs}%
%    \end{macrocode}
% Diese werden auch für die Definition der neuen Schriftauswahlbefehle genutzt.
%    \begin{macrocode}
    \newrobustcmd*\cdfontln{\univln}%
    \newrobustcmd*\cdfontrn{\univrn}%
    \newrobustcmd*\cdfontsn{\univrn}%
    \newrobustcmd*\cdfontbn{\univbn}%
    \newrobustcmd*\cdfontxn{\univxn}%
    \newrobustcmd*\cdfontli{\univls}%
    \newrobustcmd*\cdfontri{\univrs}%
    \newrobustcmd*\cdfontsi{\univrs}%
    \newrobustcmd*\cdfontbi{\univbs}%
    \newrobustcmd*\cdfontxi{\univxs}%
%    \end{macrocode}
% Anschließend wird für \DIN äquivalent verfahren.
%    \begin{macrocode}
    \if@tud@cdfont@db@exist%
      \if@tud@x@fontspec@enabled%
        \def\tud@res@a{%
          UprightFont={DIN-Bold},%
          FontFace={l}{n}{DIN-Bold},%
          FontFace={m}{n}{DIN-Bold},%
          FontFace={b}{n}{DIN-Bold},%
          FontFace={bx}{n}{DIN-Bold},%
          FontFace={eb}{n}{DIN-Bold},%
          FontFace={l}{it}{Font=DIN-Bold,FakeSlant=0.15},%
          FontFace={m}{it}{Font=DIN-Bold,FakeSlant=0.15},%
          FontFace={b}{it}{Font=DIN-Bold,FakeSlant=0.15},%
          FontFace={bx}{it}{Font=DIN-Bold,FakeSlant=0.15},%
          FontFace={eb}{it}{Font=DIN-Bold,FakeSlant=0.15}%
        }%
        \tud@x@fontspec@init{\tud@cdfont@db}{\tud@res@a}%
      \fi%
%    \end{macrocode}
% Bei der Schriftauswahl wird die entsprechende Mathematikschrift aktiviert.
%    \begin{macrocode}
      \newrobustcmd*\tud@db{%
        \usefont{\f@encoding}{\tud@cdfont@db}{b}{n}%
        \if@tud@cdmath@active\mathversion{tuddin}\fi%
      }%
      \newrobustcmd*\dinbn{\tud@db}%
%    \end{macrocode}
% Da der Schalter \cs{dinbn} innerhalb der Überschriften verwendet wird, sollte 
% dieser zumindest auch auf den Überschriftenstil schalten, falls die benötigte
% Schrift selbst nicht installiert ist.
%    \begin{macrocode}
    \else%
      \newrobustcmd*\tud@db{\tud@db@wrn\sectfont}%
      \newcommand*\tud@db@wrn{%
%<*class>
        \ClassWarning{\TUD@Class@Name}%
%</class>
%<*package>
        \PackageWarning{tudscrfonts}%
%</package>
        {%
          Font `DIN-Bold' is not available and therefore\MessageBreak%
          can not be used for headings%
        }%
        \global\let\tud@db@wrn\relax%
      }%
      \newrobustcmd*\dinbn{\tud@cdfont@fallback@wrn{DIN-Bold}\sectfont}%
    \fi%
    \newcommand*\textdbn{}%
    \DeclareTextFontCommand\textdbn{\dinbn}%
  }%
\fi
%    \end{macrocode}
% \end{macro}^^A \textdbn
% \end{macro}^^A \textuxs
% \end{macro}^^A \textubs
% \end{macro}^^A \texturs
% \end{macro}^^A \textuls
% \end{macro}^^A \textuxn
% \end{macro}^^A \textubn
% \end{macro}^^A \texturn
% \end{macro}^^A \textuln
% \end{macro}^^A \tud@db@wrn
% \end{macro}^^A \tud@db
% \end{macro}^^A \dinbn
% \end{macro}^^A \univxs
% \end{macro}^^A \univbs
% \end{macro}^^A \univrs
% \end{macro}^^A \univls
% \end{macro}^^A \univxn
% \end{macro}^^A \univbn
% \end{macro}^^A \univrn
% \end{macro}^^A \univln
% \begin{macro}{\tud@cdfont@fallback}
% \changes{v2.05}{2015/12/14}{neu}^^A
% \begin{macro}{\tud@cdfont@fallback@wrn}
% \changes{v2.05}{2015/12/14}{neu}^^A
% Hier wird die Rückfallebene für die Schriftschalter sowie die dazugehörige 
% Warnung definiert.
%    \begin{macrocode}
\newcommand*\tud@cdfont@fallback[4]{%
  \newrobustcmd*#1{%
    \tud@cdfont@fallback@wrn{#2}%
    \sffamily\csuse{#3series}\csuse{#4shape}%
  }%
}
\newcommand*\tud@cdfont@fallback@wrn[1]{%
%<*class>
  \ClassWarning{\TUD@Class@Name}%
%</class>
%<*package>
  \PackageWarning{tudscrfonts}%
%</package>
  {%
    The requested font `#1'\MessageBreak%
    is not available, a fallback layout is used%
  }%
}
%    \end{macrocode}
% \end{macro}^^A \tud@cdfont@fallback@wrn
% \end{macro}^^A \tud@cdfont@fallback
% \begin{macro}{\cdfont}
% \changes{v2.04}{2015/03/04}{neu}^^A
% \begin{macro}{\textcd}
% \changes{v2.04}{2015/03/04}{neu}^^A
% \begin{macro}{\tud@cdfont@get}
% \changes{v2.04}{2015/03/04}{neu}^^A
% \changes{v2.06}{2018/06/29}{für \OpenSans überarbeitet}^^A
% \begin{macro}{\tud@cdfont@trim}
% \changes{v2.04}{2015/03/04}{neu}^^A
% \changes{v2.06}{2018/06/29}{für \OpenSans überarbeitet}^^A
% \begin{macro}{\tud@cdfont@@trim}
% \changes{v2.04}{2015/03/04}{neu}^^A
% Die Klassen \cls{tudposter} und \cls{tudmathposter} definieren den Befehl 
% \cs{tudfont}, mit welchem die Schriften des \TUDCDs auch mit Klarnamen
% ausgewählt werden können. Zur Kompatibilität wird der Befehl \cs{cdfont} 
% definiert, welcher die gleiche Funktionalität bereitstellt. Zusätzlich wird 
% mit \cs{textcd} die Auswahl der Schrift über einen Textbefehl ermöglicht.
%    \begin{macrocode}
\newcommand*\cdfont[1]{%
  \tud@cdfont@get{#1}%
  \ifx\@tempc\relax\else%
    \csuse{cdfont\@tempc}%
  \fi%
}
\newcommand*\textcd[2]{%
  \tud@cdfont@get{#1}%
  \ifx\@tempc\relax%
    \textsf{#2}%
  \else%
    \csuse{textcd\@tempc}{#2}%
  \fi%
}
\if@tud@cdoldfont@active
  \renewcommand*\cdfont[1]{%
    \tud@cdfont@get{#1}%
    \ifx\@tempc\relax\else%
      \tud@if@strequal{\@tempc}{dinbn}{\dinbn}{\csuse{univ\@tempc}}%
    \fi%
  }%
  \renewcommand*\textcd[2]{%
    \tud@cdfont@get{#1}%
    \ifx\@tempc\relax%
      \textsf{#2}%
    \else%
      \tud@if@strequal{\@tempc}{dinbn}{\textdbn{#2}}{\csuse{textu\@tempc}{#2}}%
    \fi%
  }%
\fi
\newcommand*\tud@cdfont@get[1]{%
  \tud@cdfont@trim\@tempa{#1}%
  \tud@if@strequal{\@tempa}{l} {\def\@tempc{ln}}{%
  \tud@if@strequal{\@tempa}{}  {\def\@tempc{rn}}{%
  \tud@if@strequal{\@tempa}{r} {\def\@tempc{rn}}{%
  \tud@if@strequal{\@tempa}{s} {\def\@tempc{sn}}{%
  \tud@if@strequal{\@tempa}{b} {\def\@tempc{bn}}{%
  \tud@if@strequal{\@tempa}{x} {\def\@tempc{xn}}{%
  \tud@if@strequal{\@tempa}{li}{\def\@tempc{li}}{%
  \tud@if@strequal{\@tempa}{il}{\def\@tempc{li}}{%
  \tud@if@strequal{\@tempa}{i} {\def\@tempc{ri}}{%
  \tud@if@strequal{\@tempa}{ri}{\def\@tempc{ri}}{%
  \tud@if@strequal{\@tempa}{ir}{\def\@tempc{ri}}{%
  \tud@if@strequal{\@tempa}{si}{\def\@tempc{si}}{%
  \tud@if@strequal{\@tempa}{is}{\def\@tempc{si}}{%
  \tud@if@strequal{\@tempa}{bi}{\def\@tempc{bi}}{%
  \tud@if@strequal{\@tempa}{ib}{\def\@tempc{bi}}{%
  \tud@if@strequal{\@tempa}{xi}{\def\@tempc{xi}}{%
  \tud@if@strequal{\@tempa}{ix}{\def\@tempc{xi}}{%
    \let\@tempc\relax%
%<*class>
    \ClassWarning{\TUD@Class@Name}%
%</class>
%<*package>
    \PackageWarning{tudscrfonts}%
%</package>
      {The font `#1' is unknown}%
  }}}}}}}}}}}}}}}}}%
}
\if@tud@cdoldfont@active
  \renewcommand*\tud@cdfont@get[1]{%
    \tud@cdfont@trim\@tempa{#1}%
    \tud@if@strequal{\@tempa}{45}       {\def\@tempc{ln}}{%
    \tud@if@strequal{\@tempa}{55}       {\def\@tempc{rn}}{%
    \tud@if@strequal{\@tempa}{65}       {\def\@tempc{bn}}{%
    \tud@if@strequal{\@tempa}{75}       {\def\@tempc{xn}}{%
    \tud@if@strequal{\@tempa}{45oblique}{\def\@tempc{ls}}{%
    \tud@if@strequal{\@tempa}{55oblique}{\def\@tempc{rs}}{%
    \tud@if@strequal{\@tempa}{65oblique}{\def\@tempc{bs}}{%
    \tud@if@strequal{\@tempa}{75oblique}{\def\@tempc{xs}}{%
    \tud@if@strequal{\@tempa}{oblique45}{\def\@tempc{ls}}{%
    \tud@if@strequal{\@tempa}{oblique55}{\def\@tempc{rs}}{%
    \tud@if@strequal{\@tempa}{oblique65}{\def\@tempc{bs}}{%
    \tud@if@strequal{\@tempa}{oblique75}{\def\@tempc{xs}}{%
    \tud@if@strequal{\@tempa}{din}      {\def\@tempc{dinbn}}{%
    \tud@if@strequal{\@tempa}{din65}    {\def\@tempc{dinbn}}{%
      \let\@tempc\relax%
%<*class>
      \ClassWarning{\TUD@Class@Name}%
%</class>
%<*package>
      \PackageWarning{tudscrfonts}%
%</package>
      {The font `#1' is unknown}%
    }}}}}}}}}}}}}}%
  }%
\fi
\newcommand*\tud@cdfont@trim[2]{%
  \tud@strlowercase\@tempa{\trim@spaces{#2}}%
  \tud@cdfont@@trim{ }{}%
  \tud@cdfont@@trim{-}{}%
  \tud@cdfont@@trim{_}{}%
  \tud@cdfont@@trim{~}{}%
  \tud@cdfont@@trim{opensans}{}%
  \tud@cdfont@@trim{light}{l}%
  \tud@cdfont@@trim{regular}{r}%
  \tud@cdfont@@trim{book}{r}%
  \tud@cdfont@@trim{semi}{s}%
  \tud@cdfont@@trim{demi}{s}%
  \tud@cdfont@@trim{extra}{x}%
  \tud@cdfont@@trim{black}{x}%
  \tud@cdfont@@trim{bold}{b}%
  \tud@cdfont@@trim{italic}{i}%
  \tud@cdfont@@trim{oblique}{i}%
  \tud@cdfont@@trim{slanted}{i}%
  \let#1\@tempa%
}
\if@tud@cdoldfont@active
  \renewcommand*\tud@cdfont@trim[2]{%
    \tud@strlowercase\@tempa{\trim@spaces{#2}}%
    \tud@cdfont@@trim{ }{}%
    \tud@cdfont@@trim{-}{}%
    \tud@cdfont@@trim{_}{}%
    \tud@cdfont@@trim{~}{}%
    \tud@cdfont@@trim{ce}{}%
    \tud@cdfont@@trim{ff}{}%
    \tud@cdfont@@trim{univers}{}%
    \tud@cdfont@@trim{60}{65}%
    \tud@cdfont@@trim{light}{45}%
    \tud@cdfont@@trim{regular}{55}%
    \tud@cdfont@@trim{bold}{65}%
    \tud@cdfont@@trim{black}{75}%
    \tud@cdfont@@trim{4545}{45}%
    \tud@cdfont@@trim{5555}{55}%
    \tud@cdfont@@trim{6565}{65}%
    \tud@cdfont@@trim{7575}{75}%
    \tud@cdfont@@trim{italic}{oblique}%
    \tud@cdfont@@trim{slanted}{oblique}%
    \let#1\@tempa%
  }%
\fi
\newcommand*\tud@cdfont@@trim[2]{%
  \def\@tempb##1#1##2\relax{\def\@tempa{##1#2##2}}%
  \@expandtwoargs\in@{#1}{\@tempa}%
  \@whilesw\ifin@\fi{%
    \expandafter\@tempb\@tempa\relax%
    \@expandtwoargs\in@{#1}{\@tempa}%
  }%
}
%    \end{macrocode}
% \end{macro}^^A \tud@cdfont@@trim
% \end{macro}^^A \tud@cdfont@trim
% \end{macro}^^A \tud@cdfont@get
% \end{macro}^^A \textcd
% \end{macro}^^A \cdfont
%
% \iffalse
%</body>
%<*option>
% \fi
%
% \subsubsection{TypeWriter-Schriften}
%
% \begin{option}{ttfont}
% \changes{v2.06}{2018/07/12}{neu}^^A
% \begin{macro}{\tud@ttfont@num}
% \changes{v2.06}{2018/07/12}{neu}^^A
% Mit dieser Option regelt, ob die TypeWriter-Schriften durch den Anwender
% manuell eingestellt werden oder aber die entsprechenden Schriften aus den 
% Paketen \pkg{lmodern} oder \pkg{roboto-mono} zum Einsatz kommt.
%    \begin{macrocode}
\newcommand*\tud@ttfont@num{0}
\TUD@key{ttfont}[true]{%
  \TUD@set@numkey{ttfont}{@tempa}{%
    \TUD@bool@numkey,%
    {roboto}{1},{roboto-mono}{1},{robo}{1},%
    {lm}{2},{lmtt}{2},{lmodern}{2}%
  }{#1}%
  \ifx\FamilyKeyState\FamilyKeyStateProcessed%
    \ifcase\@tempa\relax% false
      \renewcommand*\tud@ttfont@num{0}%
    \or% roboto
      \renewcommand*\tud@ttfont@num{1}%
    \or% lmodern
      \renewcommand*\tud@ttfont@num{2}%
    \fi%
    \TUD@SpecialOptionAtDocument{tud@font@set}%
  \fi%
}
%    \end{macrocode}
% \end{macro}^^A \tud@ttfont@num
% \end{option}^^A ttfont
%
% \iffalse
%</option>
%<*body>
% \fi
%
% \begin{macro}{\tud@ttfont@set}
% \changes{v2.06}{2018/07/12}{neu}^^A
% \begin{macro}{\tud@ttfont@@set}
% \changes{v2.06}{2018/07/12}{neu}^^A
% \begin{macro}{\tud@ttfont@md}
% \changes{v2.06}{2018/07/12}{neu}^^A
% \begin{macro}{\tud@ttfont@bf}
% \changes{v2.06}{2018/07/12}{neu}^^A
% \begin{macro}{\tud@ttfont@ebf}
% \changes{v2.06}{2018/07/12}{neu}^^A
% Die Auswahl der TypeWriter-Schrift.
%    \begin{macrocode}
\newcommand*\tud@ttfont@set{%
  \if@tud@ttfont@rb@exist\else\ifnum\tud@ttfont@num=\@ne\relax%
%<*class>
    \ClassWarning{\TUD@Class@Name}%
%</class>
%<*package>
    \PackageWarning{tudscrfonts}%
%</package>
    {%
      The package `roboto-mono' is missing so the\MessageBreak%
      typewriter font of package `lmodern' is used%
    }%
    \TUDoptions{ttfont=lmodern}%
  \fi\fi%
  \ifcase\tud@ttfont@num\relax% false
    \let\tud@ttfont@fam\ttdefault%
  \or% roboto
    \let\tud@ttfont@fam\tud@ttfont@rb%
  \else% lmodern
    \let\tud@ttfont@fam\tud@ttfont@lm%
  \fi%
  \ifcase\tud@ttfont@num\relax\else% !false
    \if@tud@x@fontspec@enabled%
%    \end{macrocode}
% Das Setzen der TypeWriter-Schriften aus dem Paket \pkg{lmodern} erfolgt nur,
% wenn diese nicht standardmäßig durch \pkg{fontspec} aktiviert ist.
%    \begin{macrocode}
      \ifx\tud@ttfont@fam\ttdefault\else%
        \tud@x@fontspec@set{tt}{\tud@ttfont@fam}%
      \fi%
    \else%
      \renewcommand*\ttdefault{\tud@ttfont@fam}%
    \fi%
  \fi%
  \tud@ttfont@@set%
}
\newcommand*\tud@ttfont@md{}
\newcommand*\tud@ttfont@bf{}
\newcommand*\tud@ttfont@ebf{}
\newcommand*\tud@ttfont@@set{%
  \ifcase\tud@ttfont@num\relax%
    \ifundef{\mdseries@tt}{%
      \edef\tud@ttfont@md{\tud@cs@use{mddefault}}%
    }{%
      \edef\tud@ttfont@md{\mdseries@tt}%
    }%
    \ifundef{\bfseries@tt}{%
      \edef\tud@ttfont@bf{\tud@cs@use{bfdefault}}%
    }{%
      \edef\tud@ttfont@bf{\bfseries@tt}%
    }%
    \edef\tud@ttfont@ebf{\tud@ttfont@bf}%
  \or% roboto
    \renewcommand*\tud@ttfont@md{\tud@cdfont@md}%
    \renewcommand*\tud@ttfont@bf{\tud@cdfont@bf}%
    \renewcommand*\tud@ttfont@ebf{\tud@cdfont@ebf}%
  \else% lmodern
    \if@tud@cdfont@heavy%
      \renewcommand*\tud@ttfont@md{m}%
      \renewcommand*\tud@ttfont@bf{b}%
      \renewcommand*\tud@ttfont@ebf{b}%
    \else%
      \renewcommand*\tud@ttfont@md{l}%
      \if@tud@cdfont@ultrabold%
        \renewcommand*\tud@ttfont@bf{b}%
        \renewcommand*\tud@ttfont@ebf{b}%
      \else%
        \renewcommand*\tud@ttfont@bf{m}%
        \renewcommand*\tud@ttfont@ebf{b}%
      \fi%
    \fi%
  \fi%
}
%    \end{macrocode}
% \end{macro}^^A \tud@ttfont@ebf
% \end{macro}^^A \tud@ttfont@bf
% \end{macro}^^A \tud@ttfont@md
% \end{macro}^^A \tud@ttfont@@set
% \end{macro}^^A \tud@ttfont@set
% \begin{macro}{\tud@ttfont@init}
% \changes{v2.06}{2018/07/12}{neu}^^A
% \changes{v2.06o}{2022/08/01}{Anpassungen für \val{TS1}-Kodierung; wird immer 
%   definiert und \cs{DeclareEncodingSubset} wird verwendet}^^A
% \begin{macro}{\tud@ttfont@rb@scale}
% \changes{v2.06}{2018/08/30}{neu}^^A
% Mit \cs{tud@ttfont@init} erfolgt die Defintion der TypeWriter-Schriften.
%    \begin{macrocode}
\newcommand*\tud@ttfont@init{%
%    \end{macrocode}
% Für die \texttt{RobotoMono} wird der Skalierungsfaktor fest definiert.
%    \begin{macrocode}
  \newcommand*\tud@ttfont@rb@scale{0.9}%
  \if@tud@x@fontspec@enabled%
    \if@tud@ttfont@rb@exist%
      \tud@x@fontspec@init{\tud@ttfont@rb}{%
        Scale={\tud@ttfont@rb@scale},%
        UprightFont={RobotoMono-Regular},%
        FontFace={l}{n}{RobotoMono-Light},%
        FontFace={m}{n}{RobotoMono-Regular},%
        FontFace={sb}{n}{RobotoMono-Medium},%
        FontFace={b}{n}{RobotoMono-Bold},%
        FontFace={bx}{n}{RobotoMono-Bold},%
        FontFace={eb}{n}{RobotoMono-Bold},%
        FontFace={l}{it}{RobotoMono-LightItalic},%
        FontFace={m}{it}{RobotoMono-Italic},%
        FontFace={sb}{it}{RobotoMono-MediumItalic},%
        FontFace={b}{it}{RobotoMono-BoldItalic},%
        FontFace={bx}{it}{RobotoMono-BoldItalic},%
        FontFace={eb}{it}{RobotoMono-BoldItalic}%
      }%
    \fi%
%    \end{macrocode}
% Gewöhnlich ist die Schrift \texttt{lmtt} via \pkg{fontspec} voreingestellt. 
% Allerdings wird diese von einigen Paketen mit \cs{setmonofont} überschrieben. 
% Für diesen Fall wird die Schriftfamilie \texttt{lmtt} mit den Mitteln von 
% \pkg{fontspec} definiert.
%    \begin{macrocode}
    \ifx\ttdefault\tud@ttfont@lm\else%
      \tud@x@fontspec@init{\tud@ttfont@lm}{%
        UprightFont={LMMono10-Regular},%
        FontFace={l}{n}{LMMonoLt10-Regular},%
        FontFace={m}{n}{LMMono10-Regular},%
        FontFace={b}{n}{LMMonoLt10-Bold},%
        FontFace={bx}{n}{LMMonoLt10-Bold},%
        FontFace={l}{it}{LMMonoLt10-Oblique},%
        FontFace={m}{it}{LMMonoSlant10-Regular},%
        FontFace={b}{it}{LMMonoLt10-BoldOblique},%
        FontFace={bx}{it}{LMMonoLt10-BoldOblique}%
      }%
    \fi%
  \else%
%    \end{macrocode}
% Existiert das Paket \pkg{roboto-mono}, wird die Schriftfamilie \val{tudtt} 
% definiert und die passenden Type1-Schriften für diese definiert.
%    \begin{macrocode}
    \if@tud@ttfont@rb@exist%
%    \end{macrocode}
% Der Skalierungsfaktor für das NFSS gesetzt.
%    \begin{macrocode}
      \edef\tud@ttfont@rb@scale{s*[\tud@ttfont@rb@scale]}%
      \begingroup%
        \def\tud@res@c##1##2{%
          \tud@strlowercase\tud@res@a{##1}%
          \DeclareFontFamily{##1}{\tud@ttfont@rb}{\hyphenchar\font=\m@ne}%
%    \end{macrocode}
% Das temporäre Makro verlangt im ersten Argument die NFSS-Serie, im zweiten 
% den Teil des Dateinamens der \texttt{RobotoMono} für aufrechte Metriken und 
% im dritten Argument den für kursive. 
%    \begin{macrocode}
          \def\tud@res@b####1####2####3{%
            \DeclareFontShape{##1}{\tud@ttfont@rb}{####1}{n}{%
              <->\tud@ttfont@rb@scale RobotoMono-####2-tlf-\tud@res@a%
            }{}%
            \DeclareFontShape{##1}{\tud@ttfont@rb}{####1}{it}{%
              <->\tud@ttfont@rb@scale RobotoMono-####3-tlf-\tud@res@a%
            }{}%
            \DeclareFontShape{##1}{\tud@ttfont@rb}{####1}{sl}{%
              <->ssub*\tud@ttfont@rb/####1/it%
            }{}%
%    \end{macrocode}
% Kapitälchen sind nicht für alle Kodierungen definiert, weshalb diese nur 
% optional definiert werden. 
%    \begin{macrocode}
            \ifbool{##2}{%
              \DeclareFontShape{##1}{\tud@ttfont@rb}{####1}{sc}{%
                <->\tud@ttfont@rb@scale RobotoMono-####2-tlf-sc-\tud@res@a%
              }{}%
              \DeclareFontShape{##1}{\tud@ttfont@rb}{####1}{scit}{%
                <->\tud@ttfont@rb@scale RobotoMono-####3-tlf-sc-\tud@res@a%
              }{}%
              \DeclareFontShape{##1}{\tud@ttfont@rb}{####1}{scsl}{%
                <->ssub*\tud@ttfont@rb/####1/scit%
              }{}%
            }{}%
          }%
          \tud@res@b{l}{Light}{LightItalic}%
          \tud@res@b{m}{Regular}{Italic}%
          \tud@res@b{sb}{Medium}{MediumItalic}%
          \tud@res@b{b}{Bold}{BoldItalic}%
          \tud@res@b{bx}{Bold}{BoldItalic}%
        }%
        \tud@res@c{OT1}{true}%
        \tud@res@c{T1}{true}%
%    \end{macrocode}
% Mit \LaTeXe~2020/02/02 wird die \val{TS1}-Kodierung immer definiert und 
% gleichzeitg ein Kompatibilitätslevel für verschiedene Schriftfamilien 
% eingeführt. Da hier eine Schriftfamilie für die skalierte \texttt{RobotoMono} 
% definiert wird, wird der Kompatibilitätslevel dementsprechend übernommen.
%    \begin{macrocode}
        \tud@res@c{TS1}{false}%
        \def\tud@res@a{\endgroup}%
        \def\tud@res@b{TS1:RobotoMono-TLF}%
        \ifcsundef{\tud@res@b}{%
%<*class>
          \ClassWarningNoLine{\TUD@Class@Name}%
%</class>
%<*package>
          \PackageWarningNoLine{tudscrfonts}%
%</package>
            {`\tud@res@b' encoding subset undefinied}%
        }{%
          \eappto\tud@res@a{%
            \noexpand\DeclareEncodingSubset{TS1}{tudtt}{\csuse{\tud@res@b}}%
          }%
        }%
      \tud@res@a%
    \fi%
  \fi%
}
%    \end{macrocode}
% \end{macro}^^A \tud@ttfont@rb@scale
% \end{macro}^^A \tud@ttfont@init
%
% \iffalse
%</body>
%<*option>
% \fi
%
% \subsubsection{Schriften für den Mathematiksatz}
%
% Da es so gut wie keine freien OpenType-Schriften für den mathmatischen
% Formelsatz gibt, werden \emph{immer} Type1-Schriften verwendet, falls diese
% installiert sind.
%
% Die veralteten Schriften des \CDs \Univers und \DIN besitzen keine Glyphen für
% den Mathematiksatz. Daher musste~-- insbesondere für griechische Symbole~-- 
% eine passende Alternative gefunden werden. Die Auswahl an Mathematikschriften
% für \LaTeX{} ist relativ gering. Dennoch schien das \pkg{cmbright}-Paket 
% dafür geeignet, weshalb die darin enthaltenen Glyphen direkt bei der 
% Installation der Schriften eingebunden werden.
%
% \begin{option}{cdmath}
% \begin{macro}{\if@tud@cdmath@active}
% \begin{macro}{\if@tud@cdmath@active@locked}
% Mit dieser Option kann die genutzte Standardschrift für den Mathematiksatz
% für das gesamte Dokument umgestellt werden.
% \ToDo{
%   Option evtl. überarbeiten und nicht mehr im Dokument zulassen;
%   andernfalls müssten alle bereitgestellte Befehle für den Mathematiksatz
%   gesichert und neu definiert werden, weil diese ggf. von anderen Paketen
%   umdefiniert werden. Bspw. \cs{the}\cs{mathcode`!}
% }[v2.07]
% \ToDo{cdmath=disabled; s. \protecting{\GitHubRepo<45>; \Forum<511>}}[v2.07]
% \ToDo{griech. Lettern als Symbole (nicht tudupgrk/tuditgrk); boldmath}[v2.07]
% \ToDo{inverse Suche: \protecting{\Forum<539>}}[v2.07]
%    \begin{macrocode}
\tud@locked@newbool{@tud@cdmath@active}
\tud@locked@bool@preset{@tud@cdmath@active}{true}%
\TUD@key{cdmath}[true]{%
  \TUD@set@numkey{cdmath}{@tempa}{%
    \TUD@bool@numkey,%
    {serifmath}{0},{serif}{0},{nosansmath}{0},{nosans}{0},%
    {sansmath}{1},{sans}{1},%
    {upgreek}{2},{uprightgreek}{2},{uprightgreeks}{2},%
    {slgreek}{3},{slantedgreek}{3},{slantedgreeks}{3},%
    {itgreek}{3},{italicgreek}{3},{italicgreeks}{3},%
    {texgreek}{4},{latexgreek}{4},{texgreeks}{4},{latexgreeks}{4},%
    {standardgreek}{4},{standardgreeks}{4}%
  }{#1}%
  \ifx\FamilyKeyState\FamilyKeyStateProcessed%
    \ifcase\@tempa\relax% false
      \tud@locked@bool@set{@tud@cdmath@active}{false}%
      \TUD@SpecialOptionAtDocument{tud@math@set}%
    \or% true
      \tud@locked@bool@set{@tud@cdmath@active}{true}%
      \TUD@SpecialOptionAtDocument{tud@math@set}%
    \or% uprightgreek
      \TUDoptions{slantedgreek=false}%
    \or% slantedgreek
      \TUDoptions{slantedgreek=true}%
    \or% standardgreek
      \TUDoptions{slantedgreek=standard}%
    \fi%
  \fi%
}
%    \end{macrocode}
% \end{macro}^^A \if@tud@cdmath@active@locked
% \end{macro}^^A \if@tud@cdmath@active
% \end{option}^^A cdmath
% \begin{option}{slantedgreek}
% \begin{option}{slantedGreek}
% \begin{option}{slantedGreeks}
% \changes{v2.04}{2015/02/27}{neu}^^A
% \begin{macro}{\if@tud@slantedgreek}
% Mit dieser Option kann die Neigung der griechischen Majuskeln geändert werden.
%    \begin{macrocode}
\newcommand*\tud@slantedgreek@num{0}
\TUD@key{slantedgreek}[true]{%
  \TUD@set@numkey{slantedgreek}{@tempa}{%
    \TUD@bool@numkey,%
    {up}{0},{upright}{0},%
    {sl}{1},{slanted}{1},{it}{1},{italic}{1},%
    {standard}{2},{std}{2},{tex}{2},{latex}{2},{stdgrk}{2},{stdgrks}{2},%
    {standardgreek}{2},{standardgreeks}{2},%
    {texgreek}{2},{latexgreek}{2},{texgreeks}{2},{latexgreeks}{2}%
  }{#1}%
  \ifx\FamilyKeyState\FamilyKeyStateProcessed%
    \ifcase\@tempa\relax% upright
      \renewcommand*\tud@slantedgreek@num{0}%
    \or% slanted
      \renewcommand*\tud@slantedgreek@num{1}%
    \or% standard
      \renewcommand*\tud@slantedgreek@num{2}%
    \fi%
    \TUD@SpecialOptionAtDocument{tud@math@set}%
  \fi%
}
\TUD@key{slantedGreek}[true]{\TUDoptions{slantedgreek=#1}}
\TUD@key{slantedGreeks}[true]{\TUDoptions{slantedgreek=#1}}
%    \end{macrocode}
% \end{macro}^^A \if@tud@slantedgreek
% \end{option}^^A slantedGreeks
% \end{option}^^A slantedGreek
% \end{option}^^A slantedgreek
% \begin{option}{lgrgreek}
% \changes{v2.06}{2019/06/13}{neu}^^A
% \begin{option}{lgrgreeks}
% \changes{v2.06}{2019/06/13}{neu}^^A
% \begin{option}{LGRgreek}
% \changes{v2.06}{2019/06/13}{neu}^^A
% \begin{option}{LGRgreeks}
% \changes{v2.06}{2019/06/13}{neu}^^A
% \begin{macro}{\if@tud@lgrgreeks}
% \changes{v2.06}{2019/06/13}{neu}^^A
% Mit dieser Option lässt sich die Nutzung von griechischen Lettern der aus der 
% LGR-Kodierung der aktuellen Schriftfamilie für den Mathematiksatz aktivieren.
%    \begin{macrocode}
\tud@newif\if@tud@lgrgreeks
\TUD@key{lgrgreeks}[true]{\TUD@set@ifkey{lgrgreeks}{@tud@lgrgreeks}{#1}}
\TUD@key{lgrgreek}[true]{\TUDoptions{lgrgreeks=#1}}
\TUD@key{LGRgreeks}[true]{\TUDoptions{lgrgreeks=#1}}
\TUD@key{LGRgreek}[true]{\TUDoptions{lgrgreeks=#1}}
%    \end{macrocode}
% \end{macro}^^A \if@tud@lgrgreeks
% \end{option}^^A LGRgreeks
% \end{option}^^A LGRgreek
% \end{option}^^A lgrgreeks
% \end{option}^^A lgrgreek
%
% \iffalse
%</option>
%<*body>
% \fi
%
% \begin{macro}{\tud@if@issymbolfont}
% \changes{v2.06}{2019/06/17}{neu}^^A
% \begin{macro}{\tud@if@ismathalphabet}
% \changes{v2.06}{2019/06/17}{neu}^^A
% Diese Abfragen prüfen, ob der gegebene Bezeichner bzw. das gegebene Makro 
% für eine Deklaration mit \cs{DeclareSymbolFont} bzw. \cs{DeclareMathAlphabet} 
% verwendet wurde.
%    \begin{macrocode}
\newcommand*\tud@if@issymbolfont[1]{%
  \begingroup%
    \edef\tud@res@a{%
      \noexpand\in@\expandafter\noexpand%
        \csname sym#1\endcsname%
        {\expandonce\group@list}%
    }%
    \tud@res@a%
    \ifin@%
      \aftergroup\@firstoftwo%
    \else%
      \aftergroup\@secondoftwo%
    \fi%
  \endgroup%
}
\@onlypreamble\tud@if@issymbolfont
\newcommand*\tud@if@ismathalphabet[1]{%
  \begingroup%
    \edef\tud@res@a{%
      \noexpand\in@\expandafter\noexpand%
        \csname\expandafter\@gobble\string#1\space\endcsname%
        {\expandonce\alpha@list}%
    }%
    \tud@res@a%
    \ifin@%
      \aftergroup\@firstoftwo%
    \else%
      \aftergroup\@secondoftwo%
    \fi%
  \endgroup%
}
\@onlypreamble\tud@if@ismathalphabet
%    \end{macrocode}
% \end{macro}^^A \tud@if@ismathalphabet
% \end{macro}^^A \tud@if@issymbolfont
% \begin{macro}{\tud@math@loop@greeks@all}
% \changes{v2.04}{2015/03/10}{neu}^^A
% \begin{macro}{\tud@math@loop@greeks@uc}
% \changes{v2.06}{2018/07/17}{neu}^^A
% \begin{macro}{\tud@math@loop@greeks@lc}
% \changes{v2.06}{2018/07/17}{neu}^^A
% Um Änderungen an den griechischen Lettern vornehmen zu können, wird das Makro
% \cs{tud@math@loop@greeks@all} definiert, mit dem eine Namensliste der Lettern
% durchlaufen wird. Dabei wird in Majuskeln und Minuskeln unterschieden.
%    \begin{macrocode}
\newcommand*\tud@math@loop@greeks@all[1]{%
  \tud@math@loop@greeks@uc{#1}%
  \tud@math@loop@greeks@lc{#1}%
}
\newcommand*\tud@math@loop@greeks@uc[1]{%
  \forcsvlist#1{%
    Gamma,Delta,Theta,Lambda,Xi,Pi,Sigma,Upsilon,Phi,Psi,Omega%
  }%
}
\newcommand*\tud@math@loop@greeks@lc[1]{%
  \forcsvlist#1{%
    alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,%
    mu,nu,xi,pi,rho,sigma,tau,upsilon,phi,chi,psi,omega,%
    varepsilon,vartheta,varpi,varrho,varsigma,varphi%
  }%
}
%    \end{macrocode}
% \end{macro}^^A \tud@math@loop@greeks@lc
% \end{macro}^^A \tud@math@loop@greeks@uc
% \end{macro}^^A \tud@math@loop@greeks@all
% \begin{macro}{\tud@math@declare@lgrgreeks}
% \changes{v2.06}{2019/06/18}{neu}^^A
% Hiermit werden die beiden Symbolschriften \val{tudupgrk} und \val{tuditgrk} 
% in der LGR-Kodierung definiert. Diese werden insbesondere für die \OpenSans 
% benötigt, da das Paket \pkg{opensans} keine Schriften in mathematischen 
% Kodierungen enthält. Das erste Argument enthält die zu deklarierende 
% Schriftfamilie, zweites und drittes Argument die Schriftstärke für normale 
% und fette Lettern, die letzten beiden die Schriftgestalt für aufrechte und 
% kursive Variante.
%    \begin{macrocode}
\newcommand*\tud@math@declare@lgrgreeks[5]{%
  \ifundef{\T@LGR}{\DeclareFontEncoding{LGR}{}{}}{}%
  \tud@if@issymbolfont{tudupgrk}{%
    \SetSymbolFont{tudupgrk}{normal}{LGR}{#1}{#2}{#4}%
  }{%
    \DeclareSymbolFont{tudupgrk}{LGR}{#1}{#2}{#4}%
  }%
  \SetSymbolFont{tudupgrk}{bold}{LGR}{#1}{#3}{#4}%
  \tud@if@issymbolfont{tuditgrk}{%
    \SetSymbolFont{tuditgrk}{normal}{LGR}{#1}{#2}{#5}%
  }{%
    \DeclareSymbolFont{tuditgrk}{LGR}{#1}{#2}{#5}%
  }%
  \SetSymbolFont{tuditgrk}{bold}{LGR}{#1}{#3}{#5}%
}
%    \end{macrocode}
% \end{macro}^^A \tud@math@declare@lgrgreeks
% \begin{macro}{\tud@math@map@greeks}
% \changes{v2.06}{2018/07/02}{neu}^^A
% \begin{macro}{\tud@math@map@@greeks}
% \changes{v2.06}{2018/07/02}{neu}^^A
% \begin{macro}{\tud@math@map@@@greeks}
% \changes{v2.06}{2018/07/02}{neu}^^A
% \begin{macro}{\tud@math@supplement@greeks}
% \changes{v2.06}{2019/06/19}{neu}^^A
% \changes{v2.06n}{2021/07/15}{\cs{mathord} statt \cs{mathalpha}}^^A
% Es gibt eine Vielzahl von Paketen, die das Setzen von aufrechten griechischen 
% Lettern adressieren. Allerdings gibt es keinen einheitlichen Standard, was 
% die Nomenklatur der Auswahlbefehle betrifft. Mit diesem Makro wird nach den 
% am häufigsten auftretenden Varianten für die Auswahl für aufrechte und 
% kursive Lettern gesucht, um diese auf die von \TUDScript genutzte Nomenklatur 
% (|\up|\meta{Letter}, |\it|\meta{Letter}, |\other|\meta{Letter})
% abzubilden, damit diese unabhängig von der Einstellung für \opt{cdmath}
% genutzt werden kann und somit neben den normalen Makros zusätzliche Befehle 
% für das explizite Auswählen aufrechter und kursiver Lettern bereitstehen.
%    \begin{macrocode}
\newcommand*\tud@math@map@greeks{%
  \tud@math@loop@greeks@all\tud@math@map@@greeks%
  \tud@math@loop@greeks@uc\tud@math@map@@@greeks%
  \tud@math@supplement@greeks%
}
\newcommand*\tud@math@map@@greeks[1]{%
  \ifcsundef{it#1}{%
    \@for\tud@res@a:={#1sl,sl#1,#1it}\do{%
      \ifcsundef{\tud@res@a}{}{\csletcs{it#1}{\tud@res@a}}%
    }%
  }{}%
  \ifcsundef{up#1}{\ifcsundef{#1up}{}{\csletcs{up#1}{#1up}}}{}%
  \ifcsundef{other#1}{\ifcsundef{#1other}{}{\csletcs{other#1}{#1other}}}{}%
}
%    \end{macrocode}
% Einige Pakete stellen für griechische Majuskeln Befehle |\var|\meta{Letter}
% bereit, um diese im kursiven Schnitt zu setzen. Weiterhin existiert für 
% aufrechte Majuskeln auch noch die Form |\Up|\meta{Letter}. Diese werden 
% ebenfalls ausgewertet und ggf. auf die \TUDScript-Nomenklatur abgebildet.
%    \begin{macrocode}
\newcommand*\tud@math@map@@@greeks[1]{%
  \ifcsundef{it#1}{\ifcsundef{var#1}{}{\csletcs{it#1}{var#1}}}{}%
  \ifcsundef{up#1}{%
    \tud@strlowercase\tud@res@a{#1}%
    \edef\tud@res@a{Up\tud@res@a}%
    \ifcsundef{\tud@res@a}{}{\csletcs{up#1}{\tud@res@a}}%
  }{}%
}
%    \end{macrocode}
% Mit diesem Makro werden letztendlich~-- nachdem \cs{tud@math@map@greeks} 
% bereits ausgeführt wurde~-- die standardmäßig definierten Symbolschriften 
% \val{operators} und \val{letters} geprüft, ob diese in den Kodierungen 
% \val{OT1} bzw. \val{OML} genutzt werden. Trifft dies zu, so werden die 
% Schriftfamilien der Symbolschriften genutzt, um die Auswahlbefehle für die 
% griechischen Lettern zu definieren, sofern dies noch notwendig ist.
%    \begin{macrocode}
\newcommand*\tud@math@supplement@greeks{%
%    \end{macrocode}
% Um keine globalen Änderungen vorzunehmen, wird die normale Mathematikversion 
% in einer Gruppe durchsucht. Alle mit \cs{DeclareMathSymbol} vorzunehmenden 
% Deklarationen werden in \cs{tud@res@c} gesichert und nach der Gruppe 
% aufgerufen.
%    \begin{macrocode}
  \begingroup%
    \newcommand*\tud@math@operators@enc{}%
    \newcommand*\tud@math@operators@fam{}%
    \newcommand*\tud@math@letters@enc{}%
    \newcommand*\tud@math@letters@fam{}%
    \def\getanddefine@fonts##1##2{%
      \ifx\symoperators##1%
        \expandafter\tud@res@a\string##2\@nil%
      \else\ifx\symletters##1%
        \expandafter\tud@res@b\string##2\@nil%
      \fi\fi%
    }%
    \def\tud@res@a##1##2/##3/##4\@nil{%
      \def\tud@math@operators@enc{##2}%
      \def\tud@math@operators@fam{##3}%
    }%
    \def\tud@res@b##1##2/##3/##4\@nil{%
      \def\tud@math@letters@enc{##2}%
      \def\tud@math@letters@fam{##3}%
    }%
    \tud@cs@use{mv@normal}%
    \let\tud@res@c\@empty%
    \tud@if@strequal{\tud@math@letters@enc}{OML}{%
      \def\tud@res@a##1{%
        \ifcsundef{it##1}{%
          \eappto\tud@res@c{%
            \noexpand\DeclareMathSymbol{\csname it##1\endcsname}%
              {\noexpand\mathalpha}{letters}{\the\tud@res@cnt}%
          }%
        }{}%
        \advance\tud@res@cnt\@ne\relax%
      }%
      \tud@res@cnt=\z@\relax%
      \tud@math@loop@greeks@all\tud@res@a%
    }{}%
    \tud@if@strequal{\tud@math@operators@enc}{OT1}{%
      \def\tud@res@a##1{%
        \ifcsundef{up##1}{%
          \eappto\tud@res@c{%
            \noexpand\DeclareMathSymbol{\csname up##1\endcsname}%
              {\noexpand\mathalpha}{operators}{\the\tud@res@cnt}%
          }%
        }{}%
        \advance\tud@res@cnt\@ne\relax%
      }%
      \tud@res@cnt=\z@\relax%
      \tud@math@loop@greeks@uc\tud@res@a%
    }{}%
%    \end{macrocode}
% Mit der Option \opt{lgrgreeks} besteht zusätzlich die Möglichkeit, fehlende 
% Lettern aus einer potenziell sinnvollen Schriftfamilie in der LGR-Kodierung
% zu ergänzen. Wird eine solche gefunden, wird diese in \cs{tud@res@a} abgelegt.
%    \begin{macrocode}
    \let\tud@res@a\@empty%
    \if@tud@lgrgreeks%
      \tud@if@fdfileexists{LGR}{\tud@cs@use{familydefault}}{%
        \def\tud@res@a{\tud@cs@use{familydefault}}%
      }{%
        \tud@if@fdfileexists{LGR}{\tud@math@letters@fam}{%
          \let\tud@res@a\tud@math@letters@fam%
        }{%
          \tud@if@fdfileexists{LGR}{\tud@math@operators@fam}{%
            \let\tud@res@a\tud@math@operators@fam%
          }{}%
        }%
      }%
    \fi%
%    \end{macrocode}
% Die Gruppe wird beendet, die in \cs{tud@res@c} gesicherten Deklarationen 
% werden ausgeführt, und der Inhalt von \cs{tud@res@a} wird erhalten.
%    \begin{macrocode}
    \edef\tud@res@a{%
      \endgroup%
      \expandonce\tud@res@c%
      \edef\noexpand\tud@res@a{\tud@res@a}%
    }%
  \tud@res@a%
  \ifx\tud@res@a\@empty\else%
%    \end{macrocode}
% Mit der gefunden LGR-Schriftfamilie werden alle bisher nicht vorhanden 
% aufrechte und kursive griechische Lettern aus den entsprechenden Slots 
% ergänzt.
%    \begin{macrocode}
    \tud@math@declare@lgrgreeks{\tud@res@a}%
      {\tud@cs@use{mddefault}}{\tud@cs@use{bfdefault}}%
      {\tud@cs@use{updefault}}{\tud@cs@use{itdefault}}%
    \let\tud@res@c\@empty%
    \def\tud@res@b##1##2{%
      \ifcsundef{it##1}{%
        \eappto\tud@res@c{%
          \noexpand\DeclareMathSymbol{\csname it##1\endcsname}%
              {\noexpand\mathord}{tuditgrk}{##2}%
        }%
      }{}%
      \ifcsundef{up##1}{%
        \eappto\tud@res@c{%
          \noexpand\DeclareMathSymbol{\csname up##1\endcsname}%
              {\noexpand\mathord}{tudupgrk}{##2}%
        }%
      }{}%
    }%
    \tud@res@b{Gamma}{71}%
    \tud@res@b{Delta}{68}%
    \tud@res@b{Theta}{74}%
    \tud@res@b{Lambda}{76}%
    \tud@res@b{Xi}{88}%
    \tud@res@b{Pi}{80}%
    \tud@res@b{Sigma}{83}%
    \tud@res@b{Upsilon}{85}%
    \tud@res@b{Phi}{70}%
    \tud@res@b{Psi}{89}%
    \tud@res@b{Omega}{87}%
    \tud@res@b{alpha}{97}%
    \tud@res@b{beta}{98}%
    \tud@res@b{gamma}{103}%
    \tud@res@b{delta}{100}%
    \tud@res@b{epsilon}{101}%
    \tud@res@b{zeta}{122}%
    \tud@res@b{eta}{104}%
    \tud@res@b{theta}{106}%
    \tud@res@b{iota}{105}%
    \tud@res@b{kappa}{107}%
    \tud@res@b{lambda}{108}%
    \tud@res@b{mu}{109}%
    \tud@res@b{nu}{110}%
    \tud@res@b{xi}{120}%
    \tud@res@b{pi}{112}%
    \tud@res@b{rho}{114}%
    \tud@res@b{sigma}{115}%
    \tud@res@b{tau}{116}%
    \tud@res@b{upsilon}{117}%
    \tud@res@b{phi}{102}%
    \tud@res@b{chi}{113}%
    \tud@res@b{psi}{121}%
    \tud@res@b{omega}{119}%
    \tud@res@c%
  \fi%
}
%    \end{macrocode}
% \end{macro}^^A \tud@math@supplement@greeks
% \end{macro}^^A \tud@math@map@@@greeks
% \end{macro}^^A \tud@math@map@@greeks
% \end{macro}^^A \tud@math@map@greeks
% \begin{macro}{\tud@math@checkslanted@greeks}
% \changes{v2.05d}{2016/09/22}{neu}^^A
% Für die Verwendung der griechischen Lettern im Mathematikmodus wird versucht, 
% ein hohes Maß an Kompatibilität für andere Pakete zu gewährleisten. Es wird 
% versucht zu erkennen, ob Pakete mit einer Option wie \opt{slantedGreek}, 
% \opt{frenchmath} oder ähnlichem geladen wurde. Hierfür wird nach Definitionen 
% für \cs{upalpha} als auch \cs{itGamma} gesucht. Existieren die Makros nicht, 
% wird zumindest auf die aktuelle Definition von \cs{Gamma} geprüft und mit der 
% standardmäßigen Variante der Letter verglichen. Wurde eine passende
% Definition gefunden, wird die Option \opt{slantedgreek} voreingestellt.
%    \begin{macrocode}
\newcommand*\tud@math@checkslanted@greeks{%
  \begingroup%
%    \end{macrocode}
% Wird keine Änderung durch Pakete erkannt, werden ab \TUDScript-Version~v2.06 
% die Lettern kursiv gesetzt. Dies betrifft insbesondere die Majuskeln, welche
% bei \LaTeX{} normalerweise aufrecht gesetzt werden.
%    \begin{macrocode}
    \def\tud@res@c{%
      \tud@if@v@lower{2.06}{%
        \TUD@key@preset{slantedgreek}{standard}%
      }{%
        \TUD@key@preset{slantedgreek}{true}%
      }%
    }%
    \@tud@res@swafalse%
    \ifundef{\upalpha}{}{\ifx\upalpha\alpha\@tud@res@swatrue\fi}%
%    \end{macrocode}
% Existiert \cs{upalpha} und ist mit \cs{alpha} identisch, werden \emph{alle} 
% griechischen Lettern aufrecht gesetzt.
%    \begin{macrocode}
    \if@tud@res@swa%
      \def\tud@res@c{\TUD@key@preset{slantedgreek}{false}}%
    \else%
%    \end{macrocode}
% Existiert \cs{itGamma} und ist mit \cs{Gamma} identisch oder\dots
%    \begin{macrocode}
      \ifundef{\itGamma}{}{\ifx\itGamma\Gamma\@tud@res@swatrue\fi}%
%    \end{macrocode}
% \dots\cs{Gamma} entspricht einer kursiven Standarddefnition, \dots
%    \begin{macrocode}
      \if@tud@res@swa\else%
        \let\tud@res@a\relax%
        \let\tud@res@b\relax%
        \DeclareMathSymbol{\tud@res@a}{\mathalpha}{letters}{0}%
        \DeclareMathSymbol{\tud@res@b}{\mathord}{letters}{0}%
        \ifx\Gamma\tud@res@a\@tud@res@swatrue\fi%
        \ifx\Gamma\tud@res@b\@tud@res@swatrue\fi%
      \fi%
%    \end{macrocode}
% \dots werden \emph{alle} griechischen Lettern kursiv gesetzt.
%    \begin{macrocode}
      \if@tud@res@swa%
        \def\tud@res@c{\TUD@key@preset{slantedgreek}{true}}%
      \fi%
    \fi%
    \edef\tud@res@c{\endgroup\expandonce\tud@res@c}%
  \tud@res@c%
}
%    \end{macrocode}
% \end{macro}^^A \tud@math@checkslanted@greeks
% \begin{macro}{\tud@cdmath@init}
% \changes{v2.06}{2018/07/02}{neu}^^A
% \changes{v2.06a}{2019/07/09}{Bugfix für \pkg{mathastext} Eingabekodierung}^^A
% \begin{macro}{\tud@cdmath@@init}
% \changes{v2.06}{2018/07/02}{neu}^^A
% \begin{macro}{\tud@cdmath@@@init}
% \changes{v2.06o}{2022/08/01}{neu}
% \begin{macro}{\tud@cdmath@@@@@init}
% \changes{v2.06o}{2022/08/01}{neu}
% \begin{macro}{\tud@cdmath@set}
% \changes{v2.06o}{2022/08/01}{neu}
% \begin{macro}{\tud@cdmath@normal@name}
% \changes{v2.06o}{2022/08/01}{neu}
% \begin{macro}{\tud@cdmath@bold@name}
% \changes{v2.06o}{2022/08/01}{neu}
% \begin{macro}{\tud@mathversion}
% \changes{v2.06}{2019/06/17}{neu}^^A
% \begin{macro}{\MTDeclareVersion}
% \changes{v2.06}{2019/06/17}{neu}^^A
% Die folgenden Befehle dienen allesamt für das Bereitstellen der Schriften des 
% \CDs im mathematischen Satz. Hierbei kommt das Paket \pkg{mathastext} zum 
% Einsatz, falls \OpenSans verwendet wird.
%    \begin{macrocode}
\newcommand*\tud@cdmath@init{%
%    \end{macrocode}
% Für die Schriftfamilie \OpenSans existieren leider bisher keine Kodierung für 
% den Mathematikmodus (\val{OML}, \val{OMS}, \val{OMX}), weshalb hierfür das 
% Paket \pkg{mathastext} genutzt wird, um trotzdem einen mathematischen Satz zu 
% ermöglichen. Dabei wird die Computer~Modern in der \val{LGR}~Kodierung 
% zwingend benötigt.
%
% Für die LGR-Kodierung werden die Bundles \bdl{cbfonts} und \bdl{cbfonts-fd} 
% benötigt. Leider lässt sich momentan nur auf letzteres testen. Für ersteres 
% ließe sich |\font\testfont=grmn1200|\footnote{\file{ltxcheck.tex}} oder der 
% externe Aufruf \verb+\immediate\openin\pathfont="|kpsewhich grmn1200.tfm"+ 
% nutzen\footnote{\url{https://tex.stackexchange.com/q/306980}}. Beide Ansätze
% sind aber nicht vollends stimmig. Der erste funktioniert nicht, sobald der 
% Anwender \val{-interaction-mode} selbst definiert und für den zweiten müssen 
% zumindest eingeschränkte Schreibrechte zwingend aktiviert sein.
% \ToDo{cmr nicht zwingend notwendig}[v2.07]%^^A nur wenn \@tud@lgrgreekstrue
%    \begin{macrocode}
  \@tud@res@swafalse%
  \if@tud@cdmath@fam@exist%
    \@tud@res@swatrue%
    \if@tud@cdoldfont@active\else%
      \tud@if@fdfileexists{LGR}{cmr}{}{%
        \@tud@res@swafalse%
        \def\tud@res@a{%
%<*class>
          \ClassWarningNoLine{\TUD@Class@Name}%
%</class>
%<*package>
          \PackageWarningNoLine{tudscrfonts}%
%</package>
          {%
            The packages `cbfonts/cbgreek' and\MessageBreak%
            `cbfonts-fd' have to be installed for using\MessageBreak%
            corporate design fonts in math mode. As they\MessageBreak%
            are not, standard math versions are applied%
          }%
        }%
        \if@tud@cdmath@active%
          \tud@res@a%
        \else%
          \eappto\tud@cdmath@wrn{\expandonce\tud@res@a}%
        \fi%
      }%
    \fi%
  \fi%
%    \end{macrocode}
% Um die Mathematikschriften sauber zu definieren, ist das Laden von bestimmten
% Paketen durch den Anwender ungünstig. Deshalb wird für diesen Fall eine 
% Warnung ausgegeben.
%    \begin{macrocode}
  \if@tud@res@swa%
    \if@tud@cdoldfont@active\else%
      \if@tud@cdmath@active%
        \def\tud@res@a##1{%
%<*class>
          \ClassWarningNoLine{\TUD@Class@Name}%
%</class>
%<*package>
          \PackageWarningNoLine{tudscrfonts}%
%</package>
          {%
            You should not load package `##1'\MessageBreak%
            manually when option `cdmath=true' is active as\MessageBreak%
            TUD-Script uses package `mathastext' internally\MessageBreak%
            with a specific set of required options for the\MessageBreak%
            math font setup%
          }%
        }%
        \@ifpackageloaded{sansmath}{%
          \tud@res@a{sansmath}%
        }{}%
        \@ifpackageloaded{mathastext}{%
          \tud@res@a{mathastext}%
        }{}%
      \fi%
      \PassOptionsToPackage{%
        subdued,defaultmathsizes,nosmalldelims,noequal,%
        defaultrm,defaultbf,defaultit,defaultsf,defaulttt%
      }{mathastext}%
      \RequirePackage{mathastext}
%    \end{macrocode}
% \ToDo{cmr nicht notwendig}[v2.07]%^^A {\tud@cdfont@fam}{m}{b}{n}{it}%
%    \begin{macrocode}
%^^A \if@tud@lgrgreeks
      \tud@math@declare@lgrgreeks{cmr}{m}{bx}{n}{it}%
%^^A \else
%^^A   \tud@math@declare@lgrgreeks{\tud@cdfont@fam}{m}{b}{n}{it}%
%^^A \fi
    \fi%
    \providecommand*\MTDeclareVersion[6][]{\DeclareMathVersion{##2}}%
    \tud@cdmath@@init%
%    \end{macrocode}
% Die Symbole für aufrechte und kursive griechische Lettern werden definiert. 
% Da im Paket \pkg{opensans} keine mathematischen Schriftkodierungen enthalten 
% sind, wird in diesem Fall auf die LGR-Kodierung zurückgegriffen.
% \ToDo{könnte mit \pkg{opensans-math} raus}[v2.08]
%    \begin{macrocode}
    \if@tud@cdoldfont@active%
      \tud@res@cnt=\z@\relax%
      \tud@math@loop@greeks@uc\tud@cdmath@declare@greek@uc%
      \tud@math@loop@greeks@lc\tud@cdmath@declare@greek@lc%
    \else%
      \tud@cdmath@declare@greek@lgr%
    \fi%
%    \end{macrocode}
% Abschließend werden einzelne Zeichen für die Mathematikversionen definiert.
%    \begin{macrocode}
    \tud@cdmath@declare@char{*}{\mathbin}{symbols}{"03}%
%    \end{macrocode}
% Nach der Definition der griechischen Lettern werden diese~-- inklusive aller 
% Auswahlvariationen~-- deklariert.
%    \begin{macrocode}
    \tud@cdmath@also@greeks%
  \fi%
%    \end{macrocode}
% Für die Schrift \DIN existiert lediglich eine Mathematikversion, das Vorgehen 
% ist ähnlich zur \Univers.
%    \begin{macrocode}
  \if@tud@cdoldfont@active%
    \if@tud@cdmath@db@exist%
      \tud@cdmath@db@init{\tud@cdfont@db}%
    \else%
      \let\mv@tuddin\mv@bold%
    \fi%
  \fi%
}
\newcommand*\tud@cdmath@set{}
\newcommand*\tud@cdmath@normal@name{tudnormal@\tud@cdfont@md\tud@cdfont@bf}%
\newcommand*\tud@cdmath@bold@name{tudbold@\tud@cdfont@md\tud@cdfont@bf}%
%    \end{macrocode}
% Da eine dynamische Anpassung der Mathematikschriften innerhalb des Dokumentes 
% an die jeweils aktuell verwendete Schriftart und insbesondere den Schnitt 
% nicht möglich ist, werden hier für alle möglichen, von \TUDScript angebotenen 
% Einstellungen der Schriftschnitte die dazu passenden Mathematikversionen 
% deklariert. Dabei werden die insgesamt vier möglichen Kombinationen für die 
% beiden Schalter \cs{if@tud@cdfont@heavy} (\opt{cdfont=light/heavy}) und 
% \cs{if@tud@cdfont@ultrabold} (\opt{cdfont=normalbold/ultrabold}) gesetzt 
% und dafür die passenden Mathematikversionen definiert.\footnote{Eigentlich 
% müssten auch noch alle Kombinationen für die Schreibmaschinenschriften 
% beachtet werden. Dies ist dann aber wohl eher nicht notwendig, zumal für 
% \opt{ttfont=false} ohnehin nicht zwingend alle notwendigen Schnitte zur 
% Verfügung stehen könnten.}
%    \begin{macrocode}
\newcommand*\tud@cdmath@@init{%
  \begingroup%
    \let\tud@res@b\@empty%
    \def\tud@res@a##1##2{%
      \setbool{@tud@cdfont@heavy}{##1}%
      \setbool{@tud@cdfont@ultrabold}{##2}%
      \tud@cdfont@@set%
      \tud@ttfont@@set%
      \eappto\tud@res@b{%
        \noexpand\tud@cdmath@@@init%
          {\tud@cdmath@normal@name}%
          {\tud@cdmath@bold@name}%
          {\tud@cdfont@fam@lf}{\tud@cdfont@md}{\tud@cdfont@bf}{\tud@cdfont@ebf}%
          {\tud@ttfont@fam}{\tud@ttfont@md}{\tud@ttfont@bf}%
      }%
    }%
%    \end{macrocode}
% Die möglichen Kombinationen für die beiden genannten Schalter werden in einer
% Gruppe ausgeführt und die mit \cs{tud@cdfont@@set} sowie \cs{tud@ttfont@@set}
% aktivierten Schriftschnitte als Argumente für \cs{tud@cdmath@@@init} in 
% \cs{tud@res@b} expandiert.
%    \begin{macrocode}
    \tud@res@a{false}{false}%
    \tud@res@a{false}{true}%
    \tud@res@a{true}{false}%
    \tud@res@a{true}{true}%
%    \end{macrocode}
% Für den zugegbener Maßen etwas unwahrscheinlichen Fall, dass die Kombination 
% aus \opt{cdfont=false} und \opt{cdmath=true} genutzt wird, werden für die 
% Initialisierung die Schriften des \CDs kurzzeitig aktiviert. Damit wird dem 
% Umstand Sorge getragen, dass das Paket \pkg{mathastext} bei der Definition 
% der Mathematikversionen teilweise auf Makros wie \cs{bfdefault} zurückgreift 
% und diese dementsprechend gesetzt sein sollten.
%    \begin{macrocode}
    \if@tud@cdfont@active\else%
      \preto\tud@res@b{%
        \@tud@cdfont@activetrue%
        \tud@font@set[]%
      }%
      \appto\tud@res@b{%
        \@tud@cdfont@activefalse%
        \tud@font@set[]%
      }%
    \fi%
    \preto\tud@res@b{\endgroup}%
  \tud@res@b%
%    \end{macrocode}
% Mit \cs{tud@cdmath@set} erfolgt bei Bedarf die Auswahl der aktuell benötigten 
% Mathematikversion, wobei für die Zuweisung \cs{tud@cdmath@normal@name} und 
% \cs{tud@cdmath@bold@name} in \cs{mv@normal} sowie \cs{mv@bold} expandiert 
% werden. Die Namen für die Versionen setzen sich dabei aus den Päfixen 
% \val{tudnormal@} und \val{tudbold@} sowie der Verkettung des regulären und
% des fetten Schriftschnitts zusammen, welche zum Zeitpunkt des Aufrufs aktiv 
% sind (Option \opt{cdfont}) und durch \cs{tud@cdfont@@set} gesetzt werden.
%    \begin{macrocode}
  \renewcommand*\tud@cdmath@set{%
    \begingroup%
      \tud@cdfont@@set%
      \edef\tud@res@a{%
        \endgroup%
        \unexpanded{\letcs\mv@normal}{mv@\tud@cdmath@normal@name}%
        \unexpanded{\letcs\mv@bold}{mv@\tud@cdmath@bold@name}%
      }%
    \tud@res@a%
  }%
}
%    \end{macrocode}
% Mit \cs{tud@cdmath@@@init} werden die notwendigen Mathematikversionen und die 
% dazugehörigen Symbolschriften sowie Alphabete für die unterschiedlichen 
% Kombinationen der Schriftschnitte deklariert. Das Makro verwendet folgende 
% Argumente:
% \begin{description}
%   \item[|\#1|] der Name für die normale Mathematikversion
%   \item[|\#2|] der Name für die fette Mathematikversion
%   \item[|\#3|] die verwendete Schriftfamilie
%   \item[|\#4|] der reguläre Schriftschnitt
%   \item[|\#5|] der fette Schriftschnitt
%   \item[|\#6|] der extra-fette Schriftschnitt
%   \item[|\#7|] die verwendete Schreibmaschinenschrift
%   \item[|\#8|] der reguläre Schreibmaschinenschnitt
%   \item[|\#9|] der fette Schreibmaschinenschnitt
% \end{description}
%    \begin{macrocode}
\newcommand*\tud@cdmath@@@init[9]{%
%    \end{macrocode}
% Die Deklaration der Mathematikversionen für die alten Schriften. Die 
% verwendeten Symbole stammen aus dem Paket \pkg{iwona}.
%    \begin{macrocode}
  \if@tud@cdoldfont@active%
    \DeclareMathVersion{#1}%
    \DeclareMathVersion{#2}%
    \SetSymbolFont{operators}{#1}{OT1}{#3}{#4}{n}%
    \SetSymbolFont{operators}{#2}{OT1}{#3}{#5}{n}%
    \SetSymbolFont{letters}{#1}{OML}{#3}{#4}{it}%
    \SetSymbolFont{letters}{#2}{OML}{#3}{#5}{it}%
    \SetSymbolFont{symbols}{#1}{OMS}{#3}{#4}{n}%
    \SetSymbolFont{symbols}{#2}{OMS}{#3}{#5}{n}%
    \SetSymbolFont{largesymbols}{#1}{OMX}{iwona}{#4}{n}%
    \SetSymbolFont{largesymbols}{#2}{OMX}{iwona}{#5}{n}%
    \SetMathAlphabet{\mathnormal}{#1}{OML}{#3}{#4}{it}%
    \SetMathAlphabet{\mathnormal}{#2}{OML}{#3}{#5}{it}%
    \tud@if@ismathalphabet{\mathbold}{%
      \SetMathAlphabet{\mathbold}{#1}{OML}{#3}{#5}{it}%
      \SetMathAlphabet{\mathbold}{#2}{OML}{#3}{#6}{it}%
    }{}%
  \else%
%    \end{macrocode}
% Für \OpenSans werden für die fehlenden Kodierungen \val{OML}, \val{OMS} und 
% \val{OMX} die entsprechenden Symbolschriften eher notdürftig mit dem Paket 
% \pkg{iwona} definiert. Zur Definition der griechischen Lettern wird die
% LGR-Kodierung der \OpenSans genutzt.
%    \begin{macrocode}
    \MTDeclareVersion[it]{#1}{\tud@x@mathastext@enc}{#3}{#4}{n}%
    \MTDeclareVersion[it]{#2}{\tud@x@mathastext@enc}{#3}{#5}{n}%
    \SetSymbolFont{operators}{#1}{OT1}{iwona}{#4}{n}%
    \SetSymbolFont{operators}{#2}{OT1}{iwona}{#5}{n}%
%    \end{macrocode}
% \ToDo{%
%   sollte \pkg{opensans-math} irgendwann einmal real werden, dann würde es
%   sich anbieten, die OML-Kodierung ähnlich zu \pkg{euler[vm]} auf eine 
%   U-Kodierung zu erweitern und aufrechte griechische Lettern einzubinden, um 
%   ein Alphabet zu sparen. Siehe Kodierungen FML/FMS, LML/LMS, LBL/LBS, LS1/LS2
% }[v2.08]
%    \begin{macrocode}
    \SetSymbolFont{letters}{#1}{OML}{iwona}{#4}{it}%
    \SetSymbolFont{letters}{#2}{OML}{iwona}{#5}{it}%
%^^A    \SetSymbolFont{letters}{#1}{U}{#3m}{#4}{it}%
%^^A    \SetSymbolFont{letters}{#2}{U}{#3m}{#5}{it}%
    \SetSymbolFont{symbols}{#1}{OMS}{iwona}{#4}{n}%
    \SetSymbolFont{symbols}{#2}{OMS}{iwona}{#5}{n}%
    \SetSymbolFont{largesymbols}{#1}{OMX}{iwona}{#4}{n}%
    \SetSymbolFont{largesymbols}{#2}{OMX}{iwona}{#5}{n}%
    \SetSymbolFont{tuditgrk}{#1}{LGR}{#3}{#4}{it}%
    \SetSymbolFont{tuditgrk}{#2}{LGR}{#3}{#5}{it}%
    \SetSymbolFont{tudupgrk}{#1}{LGR}{#3}{#4}{n}%
    \SetSymbolFont{tudupgrk}{#2}{LGR}{#3}{#5}{n}%
%^^A    \SetMathAlphabet{\mathnormal}{#1}{U}{#3m}{#4}{it}%
%^^A    \SetMathAlphabet{\mathnormal}{#2}{U}{#3m}{#5}{it}%
    \tud@if@ismathalphabet{\mathbold}{%
      \SetMathAlphabet{\mathbold}{#1}{\tud@x@mathastext@enc}{#3}{#5}{it}%
      \SetMathAlphabet{\mathbold}{#2}{\tud@x@mathastext@enc}{#3}{#6}{it}%
%^^A      \SetMathAlphabet{\mathbold}{#1}{U}{#3m}{#5}{it}%
%^^A      \SetMathAlphabet{\mathbold}{#2}{U}{#3m}{#6}{it}%
    }{}%
  \fi%
%    \end{macrocode}
% Wurde das Paket \pkg{fontspec} mit der Option \opt{math} geladen, so wird 
% durch dieses die Symbolschrift \val{legacymaths} erstellt. Diese wird 
% gegebenenfalls für die Mathematikversionen sinnvoll definiert.
%    \begin{macrocode}
  \AtBeginDocument{%
    \tud@if@issymbolfont{legacymaths}{%
      \SetSymbolFont{legacymaths}{#1}{OT1}{#3}{#4}{n}%
      \SetSymbolFont{legacymaths}{#2}{OT1}{#3}{#5}{n}%
    }{}%
  }%
  \if@tud@cdoldfont@active%
    \def\tud@res@a{OT1}%
  \else%
    \let\tud@res@a\tud@x@mathastext@enc%
  \fi%
  \SetMathAlphabet{\mathrm}{#1}{\tud@res@a}{#3}{#4}{n}%
  \SetMathAlphabet{\mathrm}{#2}{\tud@res@a}{#3}{#5}{n}%
  \SetMathAlphabet{\mathbf}{#1}{\tud@res@a}{#3}{#5}{n}%
  \SetMathAlphabet{\mathbf}{#2}{\tud@res@a}{#3}{#6}{n}%
  \SetMathAlphabet{\mathsf}{#1}{\tud@res@a}{#3}{#4}{n}%
  \SetMathAlphabet{\mathsf}{#2}{\tud@res@a}{#3}{#5}{n}%
  \SetMathAlphabet{\mathit}{#1}{\tud@res@a}{#3}{#4}{it}%
  \SetMathAlphabet{\mathit}{#2}{\tud@res@a}{#3}{#5}{it}%
  \SetMathAlphabet{\mathtt}{#1}{\tud@res@a}{#7}{#8}{n}%
  \SetMathAlphabet{\mathtt}{#2}{\tud@res@a}{#7}{#9}{n}%
  \IfFileExists{ueus.fd}{%
    \SetMathAlphabet{\mathcal}{#1}{U}{eus}{m}{n}%
    \SetMathAlphabet{\mathcal}{#2}{U}{eus}{b}{n}%
  }{}%
  \tud@if@ismathalphabet{\mathfrak}{%
    \IfFileExists{ueuf.fd}{%
      \SetMathAlphabet{\mathfrak}{#1}{U}{euf}{m}{n}%
      \SetMathAlphabet{\mathfrak}{#2}{U}{euf}{b}{n}%
    }{}%
  }{}%
%    \end{macrocode}
% Das Paket \pkg{cmbright} stellt zusätzlich noch Schriftschnitte für die 
% Symbolschriften \val{AMSa} und \val{AMSb} bereit, welche gegebenenfalls für 
% die alten Schriften geladen werden.
%    \begin{macrocode}
  \AtBeginDocument{%
    \@tud@res@swafalse%
    \tud@if@issymbolfont{AMSa}{\@tud@res@swatrue}{}%
    \tud@if@issymbolfont{AMSb}{\@tud@res@swatrue}{}%
    \if@tud@res@swa%
      \if@tud@cdoldfont@active%
        \DeclareFontFamily{U}{#3a}{}%
        \DeclareFontShape{U}{#3a}{m}{n}{<->cmbras10}{}%
        \SetSymbolFont{AMSa}{#1}{U}{#3a}{m}{n}%
        \SetSymbolFont{AMSa}{#2}{U}{#3a}{m}{n}%
        \DeclareFontFamily{U}{#3b}{}%
        \DeclareFontShape{U}{#3b}{m}{n}{<->cmbrbs10}{}%
        \SetSymbolFont{AMSb}{#1}{U}{#3b}{m}{n}%
        \SetSymbolFont{AMSb}{#2}{U}{#3b}{m}{n}%
%    \end{macrocode}
% Wurde ein Paket geladen, welches die \pkg{amsfonts}-Schriftfamilie definiert,
% so wird bei der Verwendung von \OpenSans eine Information ausgegeben, dass im 
% Zweifel das Paket \pkg{mdsymbol} besser zu den Schriften des \CDs passt.
% \ToDo{hinweis zu mdsymbol raus, bzw. Laden verzögern!}[v2.07]
%    \begin{macrocode}
      \else%
        \@ifpackageloaded{mdsymbol}{}{%
          \appto\tud@cdmath@wrn{%
%<*class>
            \ClassInfoNoLine{\TUD@Class@Name}%
%</class>
%<*package>
            \PackageInfoNoLine{tudscrfonts}%
%</package>
            {%
              You may load package `mdsymbol' in order to\MessageBreak%
              get symbols matching the used math font%
            }%
          }%
        }%
      \fi%
    \fi%
  }%
}
%    \end{macrocode}
% Auch für die Schrift \DIN werden mathematische Glyphen bereitgestellt. Diese 
% wurden schon bei der Installation aus dem \pkg{iwona}-Paket entnommen. 
%    \begin{macrocode}
\if@tud@cdoldfont@active
  \newcommand*\tud@cdmath@db@init[1]{%
    \DeclareMathVersion{tuddin}%
    \SetSymbolFont{operators}{tuddin}{OT1}{#1}{b}{n}%
    \SetSymbolFont{letters}{tuddin}{OML}{#1}{b}{it}%
    \SetSymbolFont{symbols}{tuddin}{OMS}{#1}{b}{n}%
    \SetSymbolFont{largesymbols}{tuddin}{OMX}{iwona}{ebc}{n}%
    \AtBeginDocument{%
      \tud@if@issymbolfont{legacymaths}{%
        \SetSymbolFont{legacymaths}{tuddin}{OT1}{#1}{b}{n}%
      }{}%
    }%
    \SetMathAlphabet{\mathnormal}{tuddin}{OML}{#1}{b}{it}%
    \tud@if@ismathalphabet{\mathbold}{%
      \SetMathAlphabet{\mathbold}{tuddin}{OML}{#1}{b}{it}%
    }{}%
    \SetMathAlphabet{\mathrm}{tuddin}{OT1}{#1}{b}{n}%
    \SetMathAlphabet{\mathbf}{tuddin}{OT1}{#1}{b}{n}%
    \SetMathAlphabet{\mathsf}{tuddin}{OT1}{#1}{b}{n}%
    \SetMathAlphabet{\mathit}{tuddin}{OT1}{#1}{b}{it}%
    \IfFileExists{ueus.fd}{%
      \SetMathAlphabet{\mathcal}{tuddin}{U}{eus}{b}{n}%
    }{}%
    \tud@if@ismathalphabet{\mathfrak}{%
      \IfFileExists{ueuf.fd}{%
        \SetMathAlphabet{\mathfrak}{tuddin}{U}{euf}{b}{n}%
      }{}%
    }{}%
%    \end{macrocode}
% Daran anschließend wird die zuvor definierte Schrift in einer Box verwendet,
% um das Laden der Schriftdefinitionen am Dokumentbeginn zu forcieren.
%    \begin{macrocode}
    \AtBeginDocument{%
      \if@tud@cdmath@active%
        \sbox\z@{\mathversion{normal}$ $\mathversion{tuddin}$ $}%
      \fi%
    }%
  }%
\fi
%    \end{macrocode}
% Um das Umschalten der Mathematikversion mit \cs{mathversion} auch nutzen zu 
% können, wenn \pkg{mathastext} für die Schriften des \CDs aktiv ist, wird ein 
% Wrappermakro benötigt, welches im Bedarfsfall\cs{MTversion*} aufruft. Hierfür 
% wird zunächst auf die gewünschte Mathematikversion, danach der originale 
% Befehl \cs{mathversion} wiederhergestellt, aufgerufen und anschließend wieder 
% auf das Wrappermakro \cs{tud@mathversion} zurückgesetzt.
%    \begin{macrocode}
\AfterPackage*{mathastext}{%
  \newrobustcmd*\tud@mathversion[1]{%
    \begingroup%
      \let\tud@res@a\relax%
      \if@tud@cdmath@active%
        \tud@if@strequal{#1}{normal}{%
          \edef\tud@res@a{\tud@cdmath@normal@name}%
        }{%
          \tud@if@strequal{#1}{bold}{%
            \edef\tud@res@a{\tud@cdmath@bold@name}%
          }{}%
        }%
      \fi%
      \edef\tud@res@a{%
        \endgroup%
        \noexpand\tud@cs@restore{mathversion}%
        \ifx\tud@res@a\relax%
          \noexpand\mathversion{#1}%
        \else%
          \noexpand\MTversion*{\tud@res@a}%
        \fi%
        \noexpand\tud@cs@store{mathversion}%
        \noexpand\tud@cs@letltx{mathversion}{tud@mathversion}%
      }%
    \tud@res@a%
    \ifcsundef{mv@#1}{}{\edef\math@version{#1}}%
  }%
  \AtEndPreamble{%
    \tud@cs@store{mathversion}%
    \tud@cs@letltx{mathversion}{tud@mathversion}%
  }%
}
%    \end{macrocode}
% \end{macro}^^A \MTDeclareVersion
% \end{macro}^^A \tud@mathversion
% \end{macro}^^A \tud@cdmath@bold@name
% \end{macro}^^A \tud@cdmath@normal@name
% \end{macro}^^A \tud@cdmath@set
% \end{macro}^^A \tud@cdmath@db@init
% \end{macro}^^A \tud@cdmath@@@init
% \end{macro}^^A \tud@cdmath@@init
% \end{macro}^^A \tud@cdmath@init
% \begin{macro}{\tud@cdmath@declare@symb}
% \changes{v2.06}{2019/06/19}{neu}^^A
% \begin{macro}{\tud@cdmath@declare@alias}
% \changes{v2.06}{2019/06/19}{neu}^^A
% \changes{v2.06m}{2021/07/06}{\cs{csedef} durch \cs{csletcs} ersetzt}^^A
% \begin{macro}{\tud@cdmath@symb@list}
% \changes{v2.06}{2019/06/19}{neu}^^A
% \begin{macro}{\tud@cdmath@declare@char}
% \changes{v2.06}{2019/06/19}{neu}^^A
% \begin{macro}{\tud@cdmath@char@list}
% \changes{v2.06}{2019/06/19}{neu}^^A
% \begin{macro}{\tud@DeclareMathSymbol}
% \changes{v2.06}{2019/06/19}{neu}^^A
% Mit \cs{tud@cdmath@declare@symb} und \cs{tud@cdmath@declare@char} können 
% Glyhen respektive einzelne Zeichen definiert werden, welche über das Makro 
% \cs{tud@cdmath@symbols@set} nur zum Einsatz kommen, wenn \opt{cdmath=true}
% aktiviert wurde. Damit können in den unterschiedlichen Mathematikversionen 
% Symbole wie beispielsweise \cs{alpha} unterschiedlich kodiert werden, was 
% über die einfache Verwendung von \cs{DeclareMathSymbol} nicht möglich ist.
%    \begin{macrocode}
\newcommand*\tud@cdmath@symb@list{}
\newcommand*\tud@cdmath@declare@symb[4]{%
  \listeadd\tud@cdmath@symb@list{#1}%
  \tud@DeclareMathSymbol{#1}{#2}{#3}{#4}%
}
%    \end{macrocode}
% Hiermit kann ein Alias-Befehl für ein Symbol definiert werden.
%    \begin{macrocode}
\newcommand*\tud@cdmath@declare@alias[2]{%
  \listeadd\tud@cdmath@symb@list{#1}%
  \ifcsundef{tud@cdmath@symbol@#2}{}{%
    \csletcs{tud@cdmath@symbol@#1}{tud@cdmath@symbol@#2}%
  }%
}
\newcommand*\tud@cdmath@char@list{}
\newcommand*\tud@cdmath@declare@char[4]{%
  \listeadd\tud@cdmath@char@list{#1}%
  \tud@DeclareMathSymbol{#1}{#2}{#3}{#4}%
}
%    \end{macrocode}
% Die an \cs{tud@cdmath@declare@symb} und \cs{tud@cdmath@declare@char} 
% übergebenen Letter für Auswahlbefehle nutzen |\tud@cdfont@symbol@...| als
% Präfix, wodurch sich die Definitionen für einzelne Mathematikversionen 
% beliebig tauschen lassen.
%    \begin{macrocode}
\newcommand*\tud@DeclareMathSymbol[4]{%
  \begingroup%
    \edef\tud@res@a{%
      \endgroup%
      \noexpand\DeclareMathSymbol%
        {\csname tud@cdmath@symbol@#1\endcsname}%
        {\unexpanded{#2}}{#3}{#4}%
    }%
  \tud@res@a%
}
%    \end{macrocode}
% \end{macro}^^A \tud@DeclareMathSymbol
% \end{macro}^^A \tud@cdmath@char@list
% \end{macro}^^A \tud@cdmath@declare@char
% \end{macro}^^A \tud@cdmath@symb@list
% \end{macro}^^A \tud@cdmath@declare@alias
% \end{macro}^^A \tud@cdmath@declare@symb
% \begin{macro}{\tud@cdmath@symbols@set}
% \changes{v2.04}{2015/03/10}{neu}^^A
% \begin{macro}{\tud@cdmath@symbols@toks}
% \changes{v2.06}{2019/06/19}{neu}^^A
% \begin{macro}{\tud@cdmath@symbols@set@cmd}
% \changes{v2.06}{2019/06/19}{neu}^^A
% \begin{macro}{\tud@cdmath@symbols@set@chr}
% \changes{v2.06}{2019/06/19}{neu}^^A
% \begin{macro}{\tud@cdmath@symbols@reset}
% \changes{v2.04}{2015/03/10}{neu}^^A
% Durch diese Befehle kann innerhalb des Dokumentes problemlos zwischen 
% mathematischen Symbolen und Zeichen für die Schriften des \CDs, welche mit 
% \cs{tud@cdmath@declare@symb} sowie \cs{tud@cdmath@declare@char} deklariert 
% wurden, und den normalen gewechselt werden. 
%    \begin{macrocode}
\tud@newtoks\tud@cdmath@symbols@toks
\newcommand*\tud@cdmath@symbols@set{%
%    \end{macrocode}
% Die Sicherung der alten Definitionen erfolgt nur einmalig. Die Liste der 
% Symbole respektive Zeichen wird durchlaufen und die erfolgten Definitionen 
% werden umgesetzt.
%    \begin{macrocode}
  \expandafter\IfArgIsEmpty\expandafter{\the\tud@cdmath@symbols@toks}{%
    \forlistloop\tud@cdmath@symbols@set@cmd\tud@cdmath@symb@list%
    \forlistloop\tud@cdmath@symbols@set@chr\tud@cdmath@char@list%
%    \end{macrocode}
% Wird das Tokenregister abgerufen, soll es anschließend auch wieder geleert 
% werden.
%    \begin{macrocode}
    \addto@hook\tud@cdmath@symbols@toks{\tud@cdmath@symbols@toks{}}%
  }{}%
}
%    \end{macrocode}
% Beim Setzen der Mathematikversion im \CD wird zur Wiederherstellung der 
% Standardmathematikversion das Vorgehen im Token \cs{tud@cdmath@symbols@toks} 
% definiert.
%    \begin{macrocode}
\newcommand*\tud@cdmath@symbols@set@cmd[1]{%
%    \end{macrocode}
% Existiert ein Befehl in der Standardmathematikversion, dann wird dieser 
% gesichert und später wiederhergestellt. Andernfalls wird er wieder undefinert 
% gesetzt.
%    \begin{macrocode}
  \ifcsundef{#1}{%
    \addto@hook\tud@cdmath@symbols@toks{\csundef{#1}}%
  }{%
    \tud@cs@store{#1}%
    \addto@hook\tud@cdmath@symbols@toks{\tud@cs@restore{#1}}%
  }%
%    \end{macrocode}
% Nur wenn ein gewünschtes Symbol auch existiert, wird es gesetzt. Damit können 
% Symbole für \opt{cdmath=true} auch gezielt undefiniert gesetzt werden.
%    \begin{macrocode}
  \ifcsundef{tud@cdmath@symbol@#1}{%
    \csundef{#1}%
  }{%
    \tud@cs@letltx{#1}{tud@cdmath@symbol@#1}%
  }%
}
%    \end{macrocode}
% Für einzelne Zeichen ist das Vorgehen vom Prinzip her gleich. Allerdings wird 
% hier der zu sichernde \cs{mathcode} direkt in \cs{tud@cdmath@symbols@toks} 
% geschrieben.
%    \begin{macrocode}
\newcommand*\tud@cdmath@symbols@set@chr[1]{%
  \edef\tud@res@a{\global\mathcode`#1=\the\mathcode`#1\relax}%
  \addto@hook@expandafter\tud@cdmath@symbols@toks{\tud@res@a}%
%    \end{macrocode}
% Für das Überschreiben des \cs{mathcode} des gewünschen \meta{Zeichen} wird 
% dieser aus der Bedeutung von |\tud@cdmath@symbols@|\meta{Zeichen} mit
% \cs{meaning} herausgelöst.
%    \begin{macrocode}
  \begingroup%
    \edef\tud@res@a{\expandafter\meaning\csname tud@cdmath@symbol@#1\endcsname}%
    \def\tud@res@b##1"##2\@nil{"##2}%
    \edef\tud@res@c{\expandafter\tud@res@b\tud@res@a\@nil}%
    \edef\tud@res@a{%
      \endgroup%
      \global\mathcode`#1=\tud@res@c%
    }%
  \tud@res@a%
}
%    \end{macrocode}
% Für das Zurücksetzen muss lediglich das Tokenregister aufgerufen werden.
%    \begin{macrocode}
\newcommand*\tud@cdmath@symbols@reset{\the\tud@cdmath@symbols@toks}
%    \end{macrocode}
% \end{macro}^^A \tud@cdmath@symbols@reset
% \end{macro}^^A \tud@cdmath@symbols@set@chr
% \end{macro}^^A \tud@cdmath@symbols@set@cmd
% \end{macro}^^A \tud@cdmath@symbols@toks
% \end{macro}^^A \tud@cdmath@symbols@set
%
% In Anlehnung an verschiedene Pakete für Mathematikschriften werden Symbole 
% für aufrechte und kursive Majuskeln der griechischen Lettern definiert. Damit 
% auch bei diesen ein Umschalten für die unterschiedlichen Schriften möglich 
% ist, wird eine interne Version definiert und im Bedarfsfall der dazugehörige 
% \LaTeX-Befehl mit dieser überschrieben. Hierfür sind die beiden Befehle
% \cs{tud@cdmath@symbols@set} und \cs{tud@cdmath@symbols@reset} verantwortlich,
% welche die von \cs{tud@cdmath@declare@symb} und \cs{tud@cdmath@declare@char} 
% erzeugten Listen \cs{tud@cdmath@symb@list} und \cs{tud@cdmath@char@list} 
% nutzen.
% \ToDo{Kodierungen \val{LS1/LS2}; siehe \pkg{stix,libertinust1math}}[v2.08]
% \begin{macro}{\tud@cdmath@declare@greek@uc}
% \changes{v2.04}{2015/03/10}{neu}^^A
% Hiermit werden die Auswahlbefehle für Majuskeln der der griechischen Lettern 
% für die klassischen Kodierungen definiert.
%    \begin{macrocode}
\newcommand*\tud@cdmath@declare@greek@uc[1]{%
  \tud@cdmath@declare@symb{it#1}{\mathalpha}{letters}{\the\tud@res@cnt}%
  \tud@cdmath@declare@symb{up#1}{\mathalpha}{operators}{\the\tud@res@cnt}%
  \advance\tud@res@cnt\@ne\relax%
}
%    \end{macrocode}
% \end{macro}^^A \tud@cdmath@declare@greek@uc
% \begin{macro}{\tud@cdmath@declare@greek@lc}
% \changes{v2.06}{2018/07/17}{neu}^^A
% Aufrechte griechische Minuskeln sind in den mathematischen Kodierungen von 
% \LaTeX{} leider nicht enthalten, weshalb diese hier auch nicht für die 
% normale OML-Kodierung deklariert werden können.
%    \begin{macrocode}
\newcommand*\tud@cdmath@declare@greek@lc[1]{%
  \tud@cdmath@declare@symb{it#1}{\mathalpha}{letters}{\the\tud@res@cnt}%
%    \end{macrocode}
% Für aufrechte griechische Minuskeln gibt es gewöhnlich keine Symbolschrift, 
% weshalb der Eintrag |\up|\meta{Letter} in \cs{tud@cdmath@symb@list} gesetzt 
% wird, was mit einem fehlenden |\tud@cdmath@symbol@|\meta{Letter} zu einem 
% undefinierten |\up|\meta{Letter} bei \opt{cdmath=true} führt.
% \ToDo{falls irgendwann erweiterte OML-Kodierung existiert, dann nutzen}[v2.08]
%    \begin{macrocode}
%^^A  \tud@cdmath@declare@symb{it##1}{\mathalpha}{letters}%
%^^A    {\the\numexpr\tud@res@cnt+128\relax}%
  \listeadd\tud@cdmath@symb@list{up#1}%
  \advance\tud@res@cnt\@ne\relax%
}
%    \end{macrocode}
% \end{macro}^^A \tud@cdmath@declare@greek@lc
% \begin{macro}{\tud@cdmath@declare@greek@lgr}
% \changes{v2.06}{2019/06/19}{neu}^^A
% \begin{macro}{\tud@cdmath@declare@greek@@lgr}
% \changes{v2.06}{2019/06/19}{neu}^^A
% \changes{v2.06d}{2019/08/27}{Ligaturen für Lua\LaTeX{} deaktiviert}^^A
% \changes{v2.06n}{2021/07/15}{\cs{mathord} statt \cs{mathalpha}}^^A
% Die \OpenSans hält die griechischen Lettern nur in der LGR-Kodierung bereit. 
% Hiermit werden diese für den mathematischen Satz definiert. Die übergebenen 
% Argumente an das Makro \cs{tud@cdmath@declare@greek@@lgr} sind Bezeichnung 
% und LGR-Slot der Letter.
%    \begin{macrocode}
\newcommand*\tud@cdmath@declare@greek@lgr{%
  \tud@cdmath@declare@greek@@lgr{Gamma}{71}%
  \tud@cdmath@declare@greek@@lgr{Delta}{68}%
  \tud@cdmath@declare@greek@@lgr{Theta}{74}%
  \tud@cdmath@declare@greek@@lgr{Lambda}{76}%
  \tud@cdmath@declare@greek@@lgr{Xi}{88}%
  \tud@cdmath@declare@greek@@lgr{Pi}{80}%
  \tud@cdmath@declare@greek@@lgr{Sigma}{83}%
  \tud@cdmath@declare@greek@@lgr{Upsilon}{85}%
  \tud@cdmath@declare@greek@@lgr{Phi}{70}%
  \tud@cdmath@declare@greek@@lgr{Psi}{89}%
  \tud@cdmath@declare@greek@@lgr{Omega}{87}%
  \tud@cdmath@declare@greek@@lgr{alpha}{97}%
  \tud@cdmath@declare@greek@@lgr{beta}{98}%
  \tud@cdmath@declare@greek@@lgr{gamma}{103}%
  \tud@cdmath@declare@greek@@lgr{delta}{100}%
  \tud@cdmath@declare@greek@@lgr{epsilon}{101}%
  \tud@cdmath@declare@greek@@lgr{zeta}{122}%
  \tud@cdmath@declare@greek@@lgr{eta}{104}%
  \tud@cdmath@declare@greek@@lgr{theta}{106}%
  \tud@cdmath@declare@greek@@lgr{iota}{105}%
  \tud@cdmath@declare@greek@@lgr{kappa}{107}%
  \tud@cdmath@declare@greek@@lgr{lambda}{108}%
  \tud@cdmath@declare@greek@@lgr{mu}{109}%
  \tud@cdmath@declare@greek@@lgr{nu}{110}%
  \tud@cdmath@declare@greek@@lgr{xi}{120}%
  \tud@cdmath@declare@greek@@lgr{pi}{112}%
  \tud@cdmath@declare@greek@@lgr{rho}{114}%
  \tud@cdmath@declare@greek@@lgr{sigma}{115}%
  \tud@cdmath@declare@greek@@lgr{tau}{116}%
  \tud@cdmath@declare@greek@@lgr{upsilon}{117}%
  \tud@cdmath@declare@greek@@lgr{phi}{102}%
  \tud@cdmath@declare@greek@@lgr{chi}{113}%
  \tud@cdmath@declare@greek@@lgr{psi}{121}%
  \tud@cdmath@declare@greek@@lgr{omega}{119}%
  \tud@cdmath@declare@greek@@lgr{varepsilon}{101}%
  \tud@cdmath@declare@greek@@lgr{vartheta}{106}%
  \tud@cdmath@declare@greek@@lgr{varpi}{119}%
  \tud@cdmath@declare@greek@@lgr{varrho}{114}%
  \tud@cdmath@declare@greek@@lgr{varsigma}{99}%
  \tud@cdmath@declare@greek@@lgr{varphi}{102}%
}
\newcommand*\tud@cdmath@declare@greek@@lgr[2]{%
  \tud@cdmath@declare@symb{it#1}{\mathord}{tuditgrk}{#2}%
  \tud@cdmath@declare@symb{up#1}{\mathord}{tudupgrk}{#2}%
%    \end{macrocode}
% Normalerweise sollten Ligaturen für angrenzende Glyphen (boundary ligatures) 
% im Mathematikmodus deaktiviert werden. Bei Lua\LaTeX{} ist dies jedoch nicht 
% der Fall, weshalb hier etwas nachgeholfen werden muss, indem nach der Glyphe
% schlichtweg ein Klammernpaar in der richtigen Kodierung eingefügt wird.
%    \begin{macrocode}
  \ifluatex%
    \begingroup%
      \def\tud@res@a{\if@tud@cdmath@active\fontencoding{LGR}\selectfont{}\fi}%
      \def\tud@res@b##1{%
        \csxdef{tud@cdmath@symbol@##1}{%
          {%
            \mathchar\expandafter\the\csuse{tud@cdmath@symbol@##1}%
            \expandonce\tud@res@a%
          }%
        }%
      }%
      \tud@res@b{it#1}%
      \tud@res@b{up#1}%
    \endgroup%
  \fi%
}
%    \end{macrocode}
% \end{macro}^^A \tud@cdmath@declare@greek@@lgr
% \end{macro}^^A \tud@cdmath@declare@greek@lgr
% \begin{macro}{\tud@cdmath@also@greeks}
% \changes{v2.06}{2019/06/19}{neu}^^A
% \begin{macro}{\tud@cdmath@also@@greeks}
% \changes{v2.06}{2019/06/19}{neu}^^A
% \begin{macro}{\tud@cdmath@also@@@greeks}
% \changes{v2.06}{2019/06/19}{neu}^^A
% Das ist quasi das Gegenstück zu \cs{tud@math@map@greeks}. Alle bekannten 
% Variationen der Auswahlbefehle für griechische Lettern werden durch die 
% Definitionen für die Mathematikschriften im \CD gespiegelt.
%    \begin{macrocode}
\newcommand*\tud@cdmath@also@greeks{%
  \tud@math@loop@greeks@all\tud@cdmath@also@@greeks%
  \tud@math@loop@greeks@uc\tud@cdmath@also@@@greeks%
}
\newcommand*\tud@cdmath@also@@greeks[1]{%
  \tud@cdmath@declare@alias{#1}{it#1}%
  \tud@cdmath@declare@alias{other#1}{up#1}%
  \ifcsundef{#1up}{}{%
    \tud@cdmath@declare@alias{#1up}{up#1}%
  }%
  \@for\tud@res@a:={#1sl,sl#1,#1it}\do{%
    \ifcsundef{\tud@res@a}{}{%
      \expandafter\tud@cdmath@declare@alias\expandafter{\tud@res@a}{it#1}%
    }%
  }%
  \ifcsundef{#1other}{}{%
    \tud@cdmath@declare@alias{#1other}{other#1}%
  }%
}
\newcommand*\tud@cdmath@also@@@greeks[1]{%
  \tud@strlowercase\tud@res@a{#1}%
  \edef\tud@res@a{Up\tud@res@a}%
  \ifcsundef{\tud@res@a}{}{%
    \expandafter\tud@cdmath@declare@alias\expandafter{\tud@res@a}{up#1}%
  }%
  \ifcsundef{var#1}{}{%
    \expandafter\tud@cdmath@declare@alias\expandafter{var#1}{it#1}%
  }%
}
%    \end{macrocode}
% \end{macro}^^A \tud@cdmath@also@@@greeks
% \end{macro}^^A \tud@cdmath@also@@greeks
% \end{macro}^^A \tud@cdmath@also@greeks
% \begin{macro}{\tud@math@set}
% Mit diesem Befehl werden die Einstellungen für den Mathematiksatz übernommen.
% Die Option \opt{cdmath} wird ausgewertet, um zwischen dem Standard"~ und
% neuem Mathematiksatz hin"~ und herschalten zu können. Dabei wird zum einen
% das Mapping der griechischen Lettern geändert, zum anderen werden die
% originalen Mathematikversionen überschrieben respektive wiederhergestellt.
%    \begin{macrocode}
\newcommand*\tud@math@set[1][\tud@cdmath@wrn]{%
%    \end{macrocode}
% Beim Aktivieren der Mathematikschriften im \CD werden einmalig alle Warnungen 
% ausgegeben, falls bei der Initialisierung Probleme aufgetreten sind und 
% dementsprechend der Hook \cs{tud@cdmath@wrn} gefüllt wurde.
%    \begin{macrocode}
  \if@tud@cdmath@active%
    #1%
    \tud@cs@store{mv@normal}%
    \tud@cs@store{mv@bold}%
    \tud@cdmath@set%
    \tud@cdmath@symbols@set%
%    \end{macrocode}
% Anschließend erfolgt~-- abhängig von der Option \opt{slantedgreek}~-- die 
% Einstellung der Neigung der griechischen Lettern.
%    \begin{macrocode}
    \ifcase\tud@slantedgreek@num\relax% upright
      \tud@math@loop@greeks@all\tud@math@upright@greeks%
    \or% slanted
      \tud@math@loop@greeks@all\tud@math@slanted@greeks%
    \or% standard
      \tud@math@loop@greeks@uc\tud@math@upright@greeks%
      \tud@math@loop@greeks@lc\tud@math@slanted@greeks%
    \fi%
  \else%
%    \end{macrocode}
% \ToDo{\opt{slantedgreek} auswerten?}[v2.07]
%    \begin{macrocode}
    \tud@cs@restore{mv@normal}%
    \tud@cs@restore{mv@bold}%
    \tud@cdmath@symbols@reset%
  \fi%
%    \end{macrocode}
% Zuletzt wird die aktuell gewählte Mathematikversion erneut aufgerufen.
%    \begin{macrocode}
  \expandafter\mathversion\expandafter{\math@version}%
}
%    \end{macrocode}
% \end{macro}^^A \tud@math@set
% \begin{macro}{\tud@math@upright@greeks}
% \changes{v2.06}{2018/07/02}{neu}^^A
% \begin{macro}{\tud@math@slanted@greeks}
% \changes{v2.06}{2018/07/02}{neu}^^A
% Mit den beiden Befehlen kann die Definition der griechischen Lettern entweder 
% auf aufrecht bzw. kursiv gesetzt werden.
%    \begin{macrocode}
\newcommand*\tud@math@upright@greeks[1]{%
  \ifcsundef{up#1}{}{%
    \csletcs{#1}{up#1}%
    \csletcs{other#1}{it#1}%
  }%
}
\newcommand*\tud@math@slanted@greeks[1]{%
  \ifcsundef{up#1}{}{%
    \csletcs{#1}{it#1}%
    \csletcs{other#1}{up#1}%
  }%
}
%    \end{macrocode}
% \end{macro}^^A \tud@math@slanted@greeks
% \end{macro}^^A \tud@math@upright@greeks
%
% \iffalse
%<*class>
% \fi
%
% \subsubsection{Schriften für die Seitenstile der \TUDScript-Klassen}
%
% \begin{macro}{\tud@head@font@set}
% \changes{v2.02}{2014/07/08}{Unterstützung für \opt{cdhead} hinzugefügt}^^A
% \changes{v2.03}{2015/01/30}{Bugfix für die Änderung von \cs{spaceskip} durch
%   das Paket \pkg{ragged2e}}^^A
% \begin{macro}{\tud@head@cdfont@set}
% \changes{v2.06}{2018/06/29}{neu}^^A
% \begin{macro}{\tud@head@font@light}
% \begin{macro}{\tud@head@font@bold}
% \begin{macro}{\tud@head@font@@bold}
% \changes{v2.05}{2016/04/17}{neu}^^A
% \begin{macro}{\tud@font@phantomglyphs}
% \changes{v2.06o}{2022/07/25}{neu}^^A
% Die Schrift der Kopfzeile wird entweder in den Schriften des \CDs oder aber 
% in den serifenlosen Standardschriften gesetzt, wobei für beide Varianten
% sowohl eine fettgedruckte als auch eine normale Version benötigt wird. Die
% Schrifthöhe ist durch das \CD unabhängig von der gewählten Schriftgröße im
% Dokument vorgegeben und wird in Abhängigkeit von der Papiergröße gewählt und
% in \cs{tud@head@fontsize} gespeichert. Das Makro \cs{tud@head@font@@bold} 
% wird verwendet, um die Einstellung der fetten Schriften ohne die fixierte 
% Schriftgröße nutzen zu können.
%    \begin{macrocode}
\newcommand*\tud@font@phantomglyphs{\"A\"O\"Ugjpqy}
\newcommand*\tud@head@font@light{}
\newcommand*\tud@head@font@bold{}
%<poster>\newcommand*\tud@head@font@@bold{}
\newcommand*\tud@head@font@set{%
%    \end{macrocode}
% Die Option \opt{cdhead} wird ausgewertet. Sollte diese inkompatibel gesetzt 
% sein, wird eine Warnung ausgegeben.
%    \begin{macrocode}
  \if@tud@cdfont@active\ifcase\tud@head@font@num\relax% false
    \if@tud@head@font@set%
      \ClassWarning{\TUD@Class@Name}{%
        It isn't possible to use `cdhead=false'\MessageBreak%
        together with `cdfont=true'%
      }%
    \fi%
    \if@tud@cdfont@heavy%
      \TUDoptions{cdhead=heavy}%
    \else%
      \TUDoptions{cdhead=true}%
    \fi%
  \fi\fi%
%    \end{macrocode}
% Die Schriften für die Kopfzeile werden hier definiert. Abhängig von 
% \cs{if@tud@cdfont@active} werden entweder die Schriften des \CDs oder die 
% serifenlose Standardschrift für die Kopfzeile verwendet. Die Rückfallebene:
%    \begin{macrocode}
  \if@tud@head@font@set%
    \if@tud@x@mweights@enabled%
      \DeclareFixedFont{\tud@head@font@light}{\encodingdefault}%
        {\sfdefault}{\mdseries@sf}{\shapedefault}{\tud@head@fontsize}%
      \DeclareFixedFont{\tud@head@font@bold}{\encodingdefault}%
        {\sfdefault}{\bfseries@sf}{\shapedefault}{\tud@head@fontsize}%
%<*poster>
      \protected\gdef\tud@head@font@@bold{%
        \usefont{\encodingdefault}{\sfdefault}{\bfseries@sf}{\shapedefault}%
      }%
%</poster>
    \else%
      \DeclareFixedFont{\tud@head@font@light}{\encodingdefault}%
        {\sfdefault}{\mddefault}{\shapedefault}{\tud@head@fontsize}%
      \DeclareFixedFont{\tud@head@font@bold}{\encodingdefault}%
        {\sfdefault}{\bfdefault}{\shapedefault}{\tud@head@fontsize}%
%<*poster>
      \protected\gdef\tud@head@font@@bold{%
        \usefont{\encodingdefault}{\sfdefault}{\bfdefault}{\shapedefault}%
      }%
%</poster>
    \fi%
    \ifcase\tud@head@font@num\relax\else% true/heavy
      \tud@head@cdfont@set%
    \fi%
    \global\@tud@head@font@setfalse%
    \global\@tud@head@text@settrue%
  \fi%
}
%    \end{macrocode}
% Hiermit werden die eigentlichen Schriften des \CDs gesetzt.
%    \begin{macrocode}
\newcommand*\tud@head@cdfont@set{%
  \if@tud@cdfont@fam@exist%
    \ifcase\tud@head@font@num\relax\or% true
      \DeclareFixedFont{\tud@head@font@light}{\encodingdefault}%
        {\tud@cdfont@fam@lf}{l}{n}{\tud@head@fontsize}%
      \DeclareFixedFont{\tud@head@font@bold}{\encodingdefault}%
        {\tud@cdfont@fam@lf}{sb}{n}{\tud@head@fontsize}%
%<*poster>
      \protected\gdef\tud@head@font@@bold{%
        \usefont{\encodingdefault}{\tud@cdfont@fam@lf}{sb}{n}%
      }%
%</poster>
    \or% heavy
      \DeclareFixedFont{\tud@head@font@light}{\encodingdefault}%
        {\tud@cdfont@fam@lf}{m}{n}{\tud@head@fontsize}%
      \DeclareFixedFont{\tud@head@font@bold}{\encodingdefault}%
        {\tud@cdfont@fam@lf}{b}{n}{\tud@head@fontsize}%
%<*poster>
      \protected\gdef\tud@head@font@@bold{%
        \usefont{\encodingdefault}{\tud@cdfont@fam@lf}{b}{n}%
      }%
%</poster>
    \fi%
  \fi%
}
%    \end{macrocode}
% Und noch die Variante für die alten Schriften.
%    \begin{macrocode}
\if@tud@cdoldfont@active
  \renewcommand*\tud@head@cdfont@set{%
    \if@tud@cdfont@fam@exist%
      \ifcase\tud@head@font@num\relax\or% true
        \DeclareFixedFont{\tud@head@font@light}{\encodingdefault}%
          {\tud@cdfont@fam@lf}{l}{n}{\tud@head@fontsize}%
      \or% heavy
        \DeclareFixedFont{\tud@head@font@light}{\encodingdefault}%
          {\tud@cdfont@fam@lf}{m}{n}{\tud@head@fontsize}%
      \fi%
      \DeclareFixedFont{\tud@head@font@bold}{\encodingdefault}%
        {\tud@cdfont@fam@lf}{b}{n}{\tud@head@fontsize}%
%<*poster>
      \protected\gdef\tud@head@font@@bold{%
        \usefont{\encodingdefault}{\tud@cdfont@fam@lf}{b}{n}%
      }%
%</poster>
    \fi%
  }%
\fi
%    \end{macrocode}
% \end{macro}^^A \tud@font@phantomglyphs
% \end{macro}^^A \tud@head@font@@bold
% \end{macro}^^A \tud@head@font@bold
% \end{macro}^^A \tud@head@font@light
% \end{macro}^^A \tud@head@cdfont@set
% \end{macro}^^A \tud@head@font@set
%
% \iffalse
%</class>
% \fi
%
% \subsection{Kompatibilität der Schriften}
% \subsubsection{Majuskel-ß für Unicode-Prozessoren}
%
% Es wird für die Majuskelvariante der Letter \enquote*{ß} eine Rückfallebene
% (Substitution mit \enquote*{SS}) definiert, da diese für Unicode-Engines 
% standardmäßig nicht bereitgestellt wird. Um diese zu erkennen, wird auf die 
% gleiche Methodik wie im Paket \pkg{newunicodechar} zurückgegriffen.
%    \begin{macrocode}
\begingroup
\catcode`\^=7
\catcode30=12
\catcode`\!=12
\edef\tud@reserved{\@gobble^^^^0021}
\expandafter\endgroup
%    \end{macrocode}
% Wurde eine Unicode-Engine erkannt (|^^^^0021| wird als ein Token gelesen), 
% dann werden die Kodierungen für kleines und großes \enquote*{ß} dahingehend 
% angepasst, dass diese \enquote*{ss} bzw. \enquote*{SS} verwenden, wenn die 
% entsprechende Letter nicht vorhanden ist.
%    \begin{macrocode}
\ifx\tud@reserved\@empty
  \RequirePackage{newunicodechar}
  \uccode"00DF="1E9E
  \lccode"1E9E="00DF
  \newunicodechar{^^^^00df}{\iffontchar\font"00DF \symbol{"00DF}\else ss\fi}
  \newunicodechar{^^^^1e9e}{\iffontchar\font"1E9E \symbol{"1E9E}\else SS\fi}
\fi
%    \end{macrocode}
%
% \subsubsection{Ausrichtung von Überschriften und das Paket \pkg{ragged2e}}
%
% \begin{macro}{\tud@raggedright}
% \begin{macro}{\tud@RaggedRight}
% Die Überschriften sollen laut \CD linksbündig und ohne Silbentrennung gesetzt
% werden. Normalerweise ist das dies beim linksbündigen Satz bei \LaTeX{} der
% Fall. Allerdings ist es mit dem Paket \pkg{ragged2e} möglich, das Verhalten
% für den Flattersatz zu ändern und die Silbentrennung zu aktivieren. Mit der
% Option \opt{newcommands} werden dabei die originalen Befehle überschrieben,
% vorher jedoch beispielsweise in \cs{LaTeXraggedright} gesichert. Diese Makros 
% dienen dazu, die Überschriften in jedem Fall~-- auch bei der Verwendung von
% \pkg{ragged2e} mit der Option \opt{newcommands}~-- ohne Trennungen zu setzen.
%    \begin{macrocode}
\newcommand*\tud@raggedright{\raggedright}
\newcommand*\tud@RaggedRight{\raggedright}
\AfterPackage*{ragged2e}{%
  \ifundef{\LaTeXraggedright}{}{%
    \renewcommand*\tud@raggedright{\LaTeXraggedright}%
  }%
  \renewcommand*\tud@RaggedRight{\RaggedRight}%
}
%    \end{macrocode}
% \end{macro}^^A \tud@RaggedRight
% \end{macro}^^A \tud@raggedright
%
% \subsubsection{Anpassungen für das Paket \pkg{siunitx}}
%
% \begin{macro}{\lseries}
% \begin{macro}{\tud@x@siunitx@mapping}
% \changes{v2.06o}{2022/08/08}{neu}
% \begin{macro}{\tud@x@siunitx@reset}
% \changes{v2.06o}{2022/07/31}{neu}
%    \begin{macrocode}
\AfterAtEndOfPackage*{siunitx}{%
  \IfPackageAtLeastTF{siunitx}{2021-04-18}{%
%    \end{macrocode}
% Das Paket \pkg{siunitx} in der Version |v3| stellt eine Schnittstelle für 
% die Zuordnung von Schriftschnitten zur verwendeten Mathematikversionen zur
% Verfügung. Da vorher erheblicher Aufwand betrieben wurde, die korrekten
% Schriftschnitte im Mathematikmodus mit den Versionen |normal| und |bold|
% bereitzustellen, werden bei aktivierten Schriften des \CDs die entsprechenden
% Zuordnungen gesetzt.
%    \begin{macrocode}
    \newcommand*\tud@x@siunitx@mapping{%
      \if@tud@cdfont@active
        \csname keys_set:nx\endcsname { siunitx / series-version-mapping }
          {
            \tud@cdfont@md  = normal,
            \tud@cdfont@bf  = bold,
            \tud@cdfont@ebf = bold
          }
      \else
%    \end{macrocode}
% Zurücksetzen auf die Standardeinstellungen von \pkg{siunitx}.
%    \begin{macrocode}
        \csname keys_set:nn\endcsname { siunitx / series-version-mapping }
          {
            ul = light  ,
            el = light  ,
            l  = light  ,
            sl = light  ,
            m  = normal ,
            sb = bold   ,
            b  = bold   ,
            eb = bold   ,
            ub = bold
          }
      \fi
    }
    \xapptocmd\tud@font@set%
      {\tud@x@siunitx@mapping}%
      {}{\tud@patch@wrn{tud@font@set}}%
  }{%
%    \end{macrocode}
% Das Paket \pkg{siunitx} in der Version |v2| nutzt den Befehl \cs{lseries} für
% den Fall, dass für den Fließtext eine Schrift die Serie \val{l} verwendet. 
% Dem wird hier Rechnung getragen. Außerdem muss bei der Auswahl der Schriften 
% evtl. auf das Paket reagiert werden, weil es sich bei der Definition der 
% Schriften für den Mathematikmodus auf \cs{familydefault} bzw. \cs{rmfamily} 
% verlässt. Deshalb werden am Ende der Präambel die Schrifteinstellungen mit 
% \opt{cdfont}|=|\val{false} deaktiviert und zu Beginn des Dokumentes auf die 
% aktuelle Einstellung gesetzt. Dieser etwas merkwürdige Workaround geht auf 
% die gemeldeten Probleme im \GitHubRepo<22> sowie im \Forum<503> zurück.
%    \begin{macrocode}
    \newcommand*\tud@x@siunitx@reset{}%
    \providecommand*\lseries{\fontseries{l}\selectfont}%
    \AtEndPreamble{%
      \if@tud@cdfont@active%
        \if@tud@cdfont@heavy%
          \def\tud@x@siunitx@reset{\TUDoptions{cdfont=heavy}}%
        \else%
          \def\tud@x@siunitx@reset{\TUDoptions{cdfont=true}}%
        \fi%
        \appto\tud@x@siunitx@reset{\tud@font@set[]}%
        \TUDoptions{cdfont=false}%
        \tud@font@set[]%
      \fi%
    }%
    \AtBeginDocument{\tud@x@siunitx@reset}%
  }
}
%    \end{macrocode}
% \end{macro}^^A \tud@x@siunitx@reset
% \end{macro}^^A \tud@x@siunitx@mapping
% \end{macro}^^A \lseries
%
% \subsubsection{Mathematikschriften in Verbindung mit dem Paket \pkg{bm}}
%
% \begin{macro}{\tud@x@bm@delayed}
% \begin{macro}{\if@tud@x@bm@requested}
% Das Paket \pkg{bm} stellt den Befehl \cs{bm} für fette und kursive Symbole im 
% Mathematiksatz bereit. Damit dies funktioniert, muss das Laden des Paketes 
% auf das Ende der Präambel verzögert werden, um zuvor alle Einstellungen für 
% die mathematischen Symbole vornehmen zu können. Dieser Workaround geht auf
% eine Meldung im \Forum<448> zurück.
%    \begin{macrocode}
\tud@newif\if@tud@x@bm@requested
%<*package>
\@ifpackageloaded{bm}{%
  \PackageWarning{tudscrfonts}{%
    Package `bm' must be loaded after `tudscrfonts'. \MessageBreak%
    Otherwise the functionality can not be guaranteed%
  }%
}{%
%</package>
\PreventPackageFromLoading[\@tud@x@bm@requestedtrue]{bm}
%<*package>
}
%</package>
%    \end{macrocode}
% Wird das Paket verzögert geladen, so werden die Mathematikschriften des \CDs 
% aktiviert (falls zuvor angefordert), damit die durch das Paket \pkg{bm} 
% vollzogenen Einstellungen für diese auch wirksam werden. Anschließend wird
% der Ausgangszustand wiederhergestellt, um den späteren und erstmaligen Aufruf 
% von \cs{tud@math@set} vollständig abarbeiten zu können.
%    \begin{macrocode}
\newcommand*\tud@x@bm@delayed{%
  \if@tud@x@bm@requested%
    \UnPreventPackageFromLoading{bm}%
    \if@tud@cdmath@active%
      \tud@cs@store{mv@normal}%
      \tud@cs@store{mv@bold}%
      \tud@cdmath@set%
    \fi%
    \RequirePackage{bm}
    \tud@cs@restore{mv@normal}%
    \tud@cs@restore{mv@bold}%
  \fi%
  \let\tud@x@bm@delayed\relax%
}
%    \end{macrocode}
% Für die \OpenSans kommt das Paket \pkg{mathastext} zum Einsatz. In diesem 
% Fall muss das Paket \pkg{bm} bereits zuvor geladen werden.
%    \begin{macrocode}
\BeforePackage{mathastext}{\tud@x@bm@delayed}
%    \end{macrocode}
% \end{macro}^^A \if@tud@x@bm@requested
% \end{macro}^^A \tud@x@bm@delayed
%
% \subsubsection{Anpassungen für die Klasse \cls{beamer}}
%
% Die \cls{beamer}-Klasse lädt standardmäßig serifenlose Mathematikschriften. 
% Dies soll verhindert werden, damit die Auswahl über die Option \opt{cdmath} 
% erfolgen kann.
%    \begin{macrocode}
%<*package>
\AfterClass*{beamer}{\usefonttheme[onlymath]{serif}}
%</package>
%    \end{macrocode}
%
% \subsection{Aktivieren der gewählten Schriften}
%
% Die eigentliche Schriftauswahl erfolgt~-- abhängig von den zuvor gesetzten 
% Einstellungen~-- erst am Ende der Präambel, um etwaige Voreinstellungen
% anderer Schriftpakete beachten zu können. Dabei erfolgt die Auswahl der
% Schriften für den Mathematiksatz durch \cs{AtBeginDocument} innerhalb von 
% \cs{AtEndPreamble} am Ende \emph{möglichst aller} \cs{AtBeginDocument}.
% \ToDo{das passt mit den neuen hooks so nicht mehr unbedingt}[v2.07]
%    \begin{macrocode}
\AtEndPreamble{%
%    \end{macrocode}
% Falls das Paket \pkg{mweights} geladen wurde, werden im Bedarfsfall die vom
% Paket erwarteten Makros für die Schriftstärken der einzelnen Schriftfamilien 
% definiert. Beim Aufruf von \cs{tud@font@set} werden diese anschließend 
% gesichert.
%    \begin{macrocode}
  \if@tud@x@mweights@enabled%
    \ifundef{\bfseries@rm}{\edef\bfseries@rm{\bfdefault}}{}%
    \ifundef{\mdseries@rm}{\edef\mdseries@rm{\mddefault}}{}%
    \ifundef{\bfseries@sf}{\edef\bfseries@sf{\bfdefault}}{}%
    \ifundef{\mdseries@sf}{\edef\mdseries@sf{\mddefault}}{}%
    \ifundef{\bfseries@tt}{\edef\bfseries@tt{\bfdefault}}{}%
    \ifundef{\mdseries@tt}{\edef\mdseries@tt{\mddefault}}{}%
  \fi%
%    \end{macrocode}
% Hier wird auf das Vorhandensein aller benötigten Schriften geprüft.
%    \begin{macrocode}
  \tud@cdfont@check%
%    \end{macrocode}
% Nachdem auf die Schriften geprüft wurde, werden noch die Schriftschalter und 
% die dazugehörigen Befehle definiert. Auch die mathematischen Schriften werden
% initialisiert.
%    \begin{macrocode}
  \tud@cdfont@init%
  \tud@ttfont@init%
%    \end{macrocode}
% Damit die Schrift im Dokument später noch umgestellt werden kann, werden
% sämtliche Einstellungen erst am Ende der Präambel gesichert. Deshalb wird
% der dafür verantwortliche Befehl \cs{tud@font@set} hier zum ersten Mal
% verwendet. Damit ist es möglich, die Schriften eventuell geladener Pakete wie
% \pkg{lmodern} oder \pkg{libertine} vorher zu sichern und später wieder zu
% aktivieren. 
%    \begin{macrocode}
  \tud@font@set%
%    \end{macrocode}
% Die Definitionen für den Mathematiksatz erfolgen erst zu Dokumentbeginn, um
% auf Einstellungen von anderen Schriftpaketen reagieren zu können. Wurde
% jedoch das Paket \pkg{bm} angefordert, so müssen die Mathematikschriften
% bereits zum Ende der Präambel über \cs{tud@x@bm@delayed} initialisiert werden.
%    \begin{macrocode}
  \tud@cdmath@init%
  \tud@x@bm@delayed%
%    \end{macrocode}
% Bereitstellung der Auswahlbefehle für griechische Lettern in der Nomenklatur 
% von \TUDScript (|\up|\meta{Letter}, |\it|\meta{Letter}).
%    \begin{macrocode}
  \tud@math@map@greeks%
%    \end{macrocode}
% Für die griechischen Lettern wird mit \cs{tud@math@checkslanted@greeks} 
% geprüft, ob diese durch ein Paket explizit auf kursive Majuskeln oder eine 
% vollständig aufrechte Variante gesetzt wurden. Ist dies der Fall, wird der
% Standardwert für die Option \opt{slantedgreek} entsprechend angepasst.
%    \begin{macrocode}
  \tud@math@checkslanted@greeks%
%    \end{macrocode}
% Nachdem alle Vorbereitungen getroffen wurden, werden die Schriften für den 
% mathematischen Satz nun endlich gesetzt.
%    \begin{macrocode}
  \AtBeginDocument{\tud@math@set}%
%    \end{macrocode}
% \ToDo{Hook definieren, um Anwender eigenen Kram definieren zu lassen}[v2.07]
%    \begin{macrocode}
}
%    \end{macrocode}
%
% \iffalse
%</body>
% \fi
%
% \PrintBackMatter
%
\endinput
