diff options
Diffstat (limited to 'macros/latex/contrib/tudscr/source/tudscr-fonts.dtx')
-rw-r--r-- | macros/latex/contrib/tudscr/source/tudscr-fonts.dtx | 4268 |
1 files changed, 4268 insertions, 0 deletions
diff --git a/macros/latex/contrib/tudscr/source/tudscr-fonts.dtx b/macros/latex/contrib/tudscr/source/tudscr-fonts.dtx new file mode 100644 index 0000000000..228304d9ee --- /dev/null +++ b/macros/latex/contrib/tudscr/source/tudscr-fonts.dtx @@ -0,0 +1,4268 @@ +% \CheckSum{3123} +% \iffalse meta-comment +% +% TUD-Script -- Corporate Design of Technische Universität Dresden +% ---------------------------------------------------------------------------- +% +% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2019 +% +% ---------------------------------------------------------------------------- +% +% This work may be distributed and/or modified under the conditions of the +% LaTeX Project Public License, version 1.3c of the license. The latest +% version of this license is in http://www.latex-project.org/lppl.txt and +% version 1.3c or later is part of all distributions of LaTeX 2005/12/01 +% or later and of this work. This work has the LPPL maintenance status +% "author-maintained". The current maintainer and author of this work +% is Falk Hanisch. +% +% ---------------------------------------------------------------------------- +% +% Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz +% in der Version 1.3c, verteilt und/oder verändert werden. Die aktuelle +% Version dieser Lizenz ist http://www.latex-project.org/lppl.txt und +% Version 1.3c oder später ist Teil aller Verteilungen von LaTeX 2005/12/01 +% oder später und dieses Werks. Dieses Werk hat den LPPL-Verwaltungs-Status +% "author-maintained", wird somit allein durch den Autor verwaltet. Der +% aktuelle Verwalter und Autor dieses Werkes ist Falk Hanisch. +% +% ---------------------------------------------------------------------------- +% +% \fi +% +% \CharacterTable +% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +% Digits \0\1\2\3\4\5\6\7\8\9 +% Exclamation \! Double quote \" Hash (number) \# +% Dollar \$ Percent \% Ampersand \& +% Acute accent \' Left paren \( Right paren \) +% Asterisk \* Plus \+ Comma \, +% Minus \- Point \. Solidus \/ +% Colon \: Semicolon \; Less than \< +% Equals \= Greater than \> Question mark \? +% Commercial at \@ Left bracket \[ Backslash \\ +% Right bracket \] Circumflex \^ Underscore \_ +% Grave accent \` Left brace \{ Vertical bar \| +% Right brace \} Tilde \~} +% +% \iffalse +%%% From File: tudscr-fonts.dtx +%<*dtx> +\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi +% \fi +% +\ProvidesFile{tudscr-fonts.dtx}[2019/08/27 v2.06d TUD-Script\space% +% +% \iffalse +%</dtx> +%<package&identify>\ProvidesPackage{tudscrfonts}[% +%<*package&identify> +%!TUD@Version +%</package&identify> +%<package&identify> package +%<*dtx|package&identify> +% \fi + (corporate design fonts)% +] +% \iffalse +%</dtx|package&identify> +%<*dtx> +\documentclass[english,ngerman,xindy]{tudscrdoc} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} +\usepackage{babel} +\usepackage{tudscrfonts} +\KOMAoptions{parskip=half-} +\usepackage{bookmark} +\usepackage[babel]{microtype} + +\CodelineIndex +\RecordChanges +\GetFileInfo{tudscr-fonts.dtx} +\title{\file{\filename}} +\author{Falk Hanisch\qquad\expandafter\mailto\expandafter{\tudscrmail}} +\date{\fileversion\nobreakspace(\filedate)} + +\begin{document} + \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 +% +% \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-Dokumentklassen 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. +% +% \StopEventually{\PrintIndex\PrintChanges\PrintToDos} +% +% \iffalse +%<*class&option> +% \fi +% +% \subsection{% +% Verwendung durch die \TUDScript-Klassen und das Paket \pkg{tudscrfonts}% +% } +% +% 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&option> +%<*package&identify> +% \fi +% +% Sollte keine \KOMAScript-Klasse genutzt werden, wird zusätzlich das Paket +% \pkg{scrextend} benötigt. +% \begin{macrocode} +\ifcsname KOMAClassName\endcsname\else + \RequirePackage{scrextend}[2013/12/19] +\fi +% \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{% + \@ifclassloaded{\@tempa}{% + \if@tempswa\else\@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&identify> +%<*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. +% \begin{macrocode} +\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. +% \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. +% \begin{macrocode} +\TUD@RecommendPackage{mweights}[2017/03/30]% +\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}{\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}{\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} +\newif\if@tud@cdfont@fam@exist +\newif\if@tud@cdfont@db@exist +\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 +% \end{macro}^^A \if@tud@cdfont@db@exist +% \end{macro}^^A \if@tud@cdfont@fam@exist +% \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} +\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 +% 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} +\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@cdfont@@@check{OT1,OML,OMS}{\tud@cdfont@db}% + \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}% + \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. +% \begin{macrocode} +\newcommand*\tud@cdfont@@@check[2]{% + \@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 nicht gefunden, wird \opt{cdmath=false} +% gesetzt. War diese zuvor aktiv, wird eine Warnung dazu ausgegeben. +% \begin{macrocode} + \if@tud@res@swa\else% + \AtBeginDocument{% + \if@tud@cdmath@active% +%<*class> + \ClassWarning{\TUD@Class@Name}% +%</class> +%<*package> + \PackageWarning{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% + all necessary fonts with a installation script\MessageBreak% + listed in the manual + }% + \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% + \ifstr{\encodingdefault}{#1}{% + \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{% + \ifstr{\tud@res@c}{#1}{\@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% + \ifstr{\encodingdefault}{#1}{% + \ifstr{TU}{#1}{% + \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> + \etex@unexpanded{\ClassWarning{\TUD@Class@Name}}% +%</class> +%<*package> + \etex@unexpanded{\PackageWarning{tudscrfonts}}% +%</package> + {\tud@res@a} + }% + \xappto#3{\expandonce\tud@res@c}% + \endgroup% +} +% \end{macrocode} +% \end{macro}^^A \tud@cdfont@missing +% \end{macro}^^A \tud@cdfont@@@check +% \end{macro}^^A \tud@cdfont@@check +% \end{macro}^^A \tud@cdfont@check +% +% \subsection{Kompatibilität der Schriften} +% \subsubsection{Majuskel-ß für Unicode-Prozessoren} +% +% Es wird für die Majuskelvariante der Glyphe \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 Glyphe nicht vorhanden ist. +% \begin{macrocode} +\ifx\tud@reserved\@empty\relax + \RequirePackage{newunicodechar}[2012/11/12]% + \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 in \cs{LaTeX\dots} 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}{\if@tud@x@siunitx@enabled} +% \changes{v2.05m}{2017/05/29}{neu} +% Das Paket \pkg{siunitx} 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. +% \begin{macrocode} +\newif\if@tud@x@siunitx@enabled +\AfterPackage*{siunitx}{% + \@tud@x@siunitx@enabledtrue% + \providecommand*\lseries{\fontseries{l}\selectfont}% +} +% \end{macrocode} +% \end{macro}^^A \if@tud@x@siunitx@enabled +% \end{macro}^^A \lseries +% +% \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} +% +% \subsubsection{Mathematikschriften in Verbindung mit dem Paket \pkg{bm}} +% +% \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. +% \begin{macrocode} +\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} +% \end{macro}^^A \if@tud@x@bm@requested +% +% \iffalse +%</body> +%<*option> +% \fi +% +% \subsection{Schriftauswahl und -optionen} +% +% 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} +\newif\if@tud@cdfont@active +\newif\if@tud@cdfont@heavy +\newif\if@tud@cdfont@ultrabold +\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 großen griechischen Buchstaben. +% \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@lowerstring\tud@res@a{#1}% + \ifdimen{\tud@res@a}{% + \ifdim\tud@res@a>\z@\relax% + \TUDoptions{fontsize=#1}% + \tud@cdfont@activate% + \FamilyKeyStateProcessed% + \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} +\newif\if@tud@cdoldfont@active +\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{cdoldfonts=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{cdoldfonts} eingefroren, ist diese aktiv, kann sie ab diesem Zeitpunkt +% nicht mehr deaktiviert werden. Dann kann mit \opt{cdoldfonts=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% +} +%<*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} +\newif\if@tud@x@scr@fontsize@set +\TUD@key{fontsize}{% + \TUD@set@dimenkey{fontsize}{\@tempa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% +% \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> + \@tud@x@scr@fontsize@settrue% + \TUD@KOMAoptions{fontsize=#1}% + \fi% +} +%<*class> +\AtEndOfClass% +%</class> +%<*package> +\AtEndOfPackage% +%</package> +{% + \RelaxFamilyKey{TUD}{fontsize}% + \DefineFamilyMember{KOMA}% + \DefineFamilyKey{KOMA}{fontsize}{% + \@tud@x@scr@fontsize@settrue% +%<*class> + \ClassWarning{\TUD@Class@Name}% +%</class> +%<*package> + \PackageWarning{tudscrfonts}% +%</package> + {% + The key `fontsize=#1' should only be\MessageBreak% + used as class option% + }% + \TUD@SpecialOptionAtDocument{tud@font@set}% + \FamilyKeyStateProcessed% + }% +} +% \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 +% \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 Definiton der Längen wird durch das Makro \cs{tud@font@skip@set} +% vorgenommen. +% \begin{macrocode} +\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@font@skip@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\DeclareRobustCommand% + \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{% +% \end{macrocode} +% Ist die Verwendung der Schriften des \CDs gewünscht, werden die Schnitte der +% Standardschriften vorher vorher gesichert, um diese später vollständig +% wiederherstellen zu können. +% \begin{macrocode} + \if@tud@cdfont@active% + \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} +% 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}% +% \end{macrocode} +% Danach erfolgt die Definition der Schriften des \CDs. +% \begin{macrocode} + \tud@cdfont@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% + \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@font@skip@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{% + \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% +% \end{macrocode} +% Sollte versucht werden, die Schriften zu aktivieren, obwohl diese nicht +% installiert sind, werden die entsprechenden Warnungen ausgegeben. +% \begin{macrocode} + \tud@cdfont@wrn% +} +\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@font@skip@set} +% \changes{v2.04}{2015/02/17}{neu}^^A +% \begin{macro}{\tud@font@skip@@set} +% \changes{v2.04}{2015/03/27}{neu}^^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@font@skip@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@skip@store{smallskipamount}% + \tud@skip@store{medskipamount}% + \tud@skip@store{bigskipamount}% + \tud@skip@store{abovecaptionskip}% + \tud@skip@store{belowcaptionskip}% + \tud@skip@store{columnsep}% + \tud@font@skip@@set% + \else% + \tud@skip@restore{smallskipamount}% + \tud@skip@restore{medskipamount}% + \tud@skip@restore{bigskipamount}% + \tud@skip@restore{abovecaptionskip}% + \tud@skip@restore{belowcaptionskip}% + \tud@skip@restore{columnsep}% + \fi% +} +% \end{macrocode} +% Hiermit erfolgt das eigentliche Setzen der Abstände. +% \begin{macrocode} +\newcommand*\tud@font@skip@@set{% + \smallskipamount=\partopsep% + \medskipamount=\partopsep% + \multiply\medskipamount by 2% + \bigskipamount=\partopsep% + \multiply\bigskipamount by 4% + \tud@skip@set{abovecaptionskip}{\dimexpr\bigskipamount*5/6\relax}% + \tud@skip@set{belowcaptionskip}{\z@}% + \tud@skip@set{columnsep}{1.1\baselineskip}% +} +% \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@font@skip@@set +% \end{macro}^^A \tud@font@skip@set +% \begin{macro}{\tud@cdfont@init} +% \changes{v2.04}{2015/03/10}{neu}^^A +% \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. +% \begin{macrocode} +\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}% + }% + }{}% + \AtBeginDocument{% + \ifcsundef{textrightarrow}{}{% + \tud@cs@store{textrightarrow}% + \renewrobustcmd*{\textrightarrow}{% + \begingroup% + \if@tud@cdfont@active\fontfamily{iwona}\selectfont\fi% + \tud@cs@use{textrightarrow}% + \endgroup% + }% + }% + }% + \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} + \newrobustcmd*\cdfontln{\usefont{\encodingdefault}{\tud@cdfont@fam}{l}{n}} + \newrobustcmd*\cdfontrn{\usefont{\encodingdefault}{\tud@cdfont@fam}{m}{n}} + \newrobustcmd*\cdfontsn{\usefont{\encodingdefault}{\tud@cdfont@fam}{sb}{n}} + \newrobustcmd*\cdfontbn{\usefont{\encodingdefault}{\tud@cdfont@fam}{b}{n}} + \newrobustcmd*\cdfontxn{\usefont{\encodingdefault}{\tud@cdfont@fam}{eb}{n}} + \newrobustcmd*\cdfontli{\usefont{\encodingdefault}{\tud@cdfont@fam}{l}{it}} + \newrobustcmd*\cdfontri{\usefont{\encodingdefault}{\tud@cdfont@fam}{m}{it}} + \newrobustcmd*\cdfontsi{\usefont{\encodingdefault}{\tud@cdfont@fam}{sb}{it}} + \newrobustcmd*\cdfontbi{\usefont{\encodingdefault}{\tud@cdfont@fam}{b}{it}} + \newrobustcmd*\cdfontxi{\usefont{\encodingdefault}{\tud@cdfont@fam}{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*\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 +% \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} + \newrobustcmd*\univln{\usefont{\encodingdefault}{\tud@cdfont@fam}{l}{n}} + \newrobustcmd*\univrn{\usefont{\encodingdefault}{\tud@cdfont@fam}{m}{n}} + \newrobustcmd*\univbn{\usefont{\encodingdefault}{\tud@cdfont@fam}{b}{n}} + \newrobustcmd*\univxn{\usefont{\encodingdefault}{\tud@cdfont@fam}{eb}{n}} + \newrobustcmd*\univls{\usefont{\encodingdefault}{\tud@cdfont@fam}{l}{sl}} + \newrobustcmd*\univrs{\usefont{\encodingdefault}{\tud@cdfont@fam}{m}{sl}} + \newrobustcmd*\univbs{\usefont{\encodingdefault}{\tud@cdfont@fam}{b}{sl}} + \newrobustcmd*\univxs{\usefont{\encodingdefault}{\tud@cdfont@fam}{eb}{sl}} +% \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}{sl} + \tud@cdfont@fallback\univrs{Univers-Oblique}{md}{sl} + \tud@cdfont@fallback\univbs{Univers-BoldOblique}{bf}{sl} + \tud@cdfont@fallback\univxs{Univers-BlackOblique}{bf}{sl} + \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}% + \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} +% 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{\encodingdefault}{\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}{\tudfont} +% \changes{v2.04}{2015/04/24}{\cls{tudmathposter} wird unterstützt}^^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 \CDs der \TnUD 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 +% der Befehl \cs{textcd} bereitgestellt, der die Auswahl der Schrift als +% 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% + \ifstr{\@tempc}{dinbn}{\dinbn}{\csuse{univ\@tempc}}% + \fi% + }% + \renewcommand*\textcd[2]{% + \tud@cdfont@get{#1}% + \ifx\@tempc\relax% + \textsf{#2}% + \else% + \ifstr{\@tempc}{dinbn}{\textdbn{#2}}{\csuse{textu\@tempc}{#2}}% + \fi% + }% +\fi +\newcommand*\tud@cdfont@get[1]{% + \tud@cdfont@trim\@tempa{#1}% + \ifstr{\@tempa}{l}{\def\@tempc{ln}}{% + \ifstr{\@tempa}{}{\def\@tempc{rn}}{% + \ifstr{\@tempa}{r}{\def\@tempc{rn}}{% + \ifstr{\@tempa}{s}{\def\@tempc{sn}}{% + \ifstr{\@tempa}{b}{\def\@tempc{bn}}{% + \ifstr{\@tempa}{x}{\def\@tempc{xn}}{% + \ifstr{\@tempa}{li}{\def\@tempc{li}}{% + \ifstr{\@tempa}{il}{\def\@tempc{li}}{% + \ifstr{\@tempa}{i}{\def\@tempc{ri}}{% + \ifstr{\@tempa}{ri}{\def\@tempc{ri}}{% + \ifstr{\@tempa}{ir}{\def\@tempc{ri}}{% + \ifstr{\@tempa}{si}{\def\@tempc{si}}{% + \ifstr{\@tempa}{is}{\def\@tempc{si}}{% + \ifstr{\@tempa}{bi}{\def\@tempc{bi}}{% + \ifstr{\@tempa}{ib}{\def\@tempc{bi}}{% + \ifstr{\@tempa}{xi}{\def\@tempc{xi}}{% + \ifstr{\@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}% + \ifstr{\@tempa}{45}{\def\@tempc{ln}}{% + \ifstr{\@tempa}{55}{\def\@tempc{rn}}{% + \ifstr{\@tempa}{65}{\def\@tempc{bn}}{% + \ifstr{\@tempa}{75}{\def\@tempc{xn}}{% + \ifstr{\@tempa}{45oblique}{\def\@tempc{ls}}{% + \ifstr{\@tempa}{55oblique}{\def\@tempc{rs}}{% + \ifstr{\@tempa}{65oblique}{\def\@tempc{bs}}{% + \ifstr{\@tempa}{75oblique}{\def\@tempc{xs}}{% + \ifstr{\@tempa}{oblique45}{\def\@tempc{ls}}{% + \ifstr{\@tempa}{oblique55}{\def\@tempc{rs}}{% + \ifstr{\@tempa}{oblique65}{\def\@tempc{bs}}{% + \ifstr{\@tempa}{oblique75}{\def\@tempc{xs}}{% + \ifstr{\@tempa}{din}{\def\@tempc{dinbn}}{% + \ifstr{\@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]{% + \protected@edef\@tempa{\trim@spaces{#2}}% + \tud@lowerstring{\@tempa}{\@tempa}% + \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{semibold}{s}% + \tud@cdfont@@trim{demi}{s}% + \tud@cdfont@@trim{extrabold}{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]{% + \protected@edef\@tempa{\trim@spaces{#2}}% + \tud@lowerstring{\@tempa}{\@tempa}% + \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 \tudfont +% \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% + \or% 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\ttdefault\tud@ttfont@fam\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 +% \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@lowerstring\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}% + \ifcsundef{T@TS1}{}{\tud@res@c{TS1}{false}}% + \endgroup% + \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} +% +% Für den mathematischen Satz werden ergänzend zur \OpenSans die Symbole aus +% dem Paket \pkg{mdsymbol} genutzt. Diese werden bereits bei der Erstellung der +% Type1-Schriften eingefügt. +% +% 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] +% \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 Glyphen der aus der +% LGR-Kodierung der aktuellen Schriftfamilie für den Mathematiksatz aktivieren. +% \begin{macrocode} +\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 Glyphen vornehmen zu können, wird das Makro +% \cs{tud@math@loop@greeks@all} definiert, mit dem eine Namensliste der Glyphen +% 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]{% + \@for\@tempa:={% + Gamma,Delta,Theta,Lambda,Xi,Pi,Sigma,Upsilon,Phi,Psi,Omega% + }\do{\expandafter#1\expandafter{\@tempa}}% +} +\newcommand*\tud@math@loop@greeks@lc[1]{% + \@for\@tempa:={% + 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% + }\do{\expandafter#1\expandafter{\@tempa}}% +} +% \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 etrste Argument enthält die zu deklarierende +% Schriftfamilie, zweites und drittes Argument die Schriftstärke für normale +% und fette Glyphen, 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 +% \begin{macro}{\upDelta} +% \begin{macro}{\upGamma} +% \begin{macro}{\upLambda} +% \begin{macro}{\upOmega} +% \begin{macro}{\upPhi} +% \begin{macro}{\upPi} +% \begin{macro}{\upPsi} +% \begin{macro}{\upSigma} +% \begin{macro}{\upTheta} +% \begin{macro}{\upUpsilon} +% \begin{macro}{\upXi} +% \begin{macro}{\upalpha} +% \begin{macro}{\upbeta} +% \begin{macro}{\upgamma} +% \begin{macro}{\updelta} +% \begin{macro}{\upepsilon} +% \begin{macro}{\upzeta} +% \begin{macro}{\upeta} +% \begin{macro}{\uptheta} +% \begin{macro}{\upiota} +% \begin{macro}{\upkappa} +% \begin{macro}{\uplambda} +% \begin{macro}{\upmu} +% \begin{macro}{\upnu} +% \begin{macro}{\upxi} +% \begin{macro}{\uppi} +% \begin{macro}{\uprho} +% \begin{macro}{\upsigma} +% \begin{macro}{\uptau} +% \begin{macro}{\upupsilon} +% \begin{macro}{\upphi} +% \begin{macro}{\upchi} +% \begin{macro}{\uppsi} +% \begin{macro}{\upomega} +% \begin{macro}{\upvarepsilon} +% \begin{macro}{\upvartheta} +% \begin{macro}{\upvarpi} +% \begin{macro}{\upvarrho} +% \begin{macro}{\upvarsigma} +% \begin{macro}{\upvarphi} +% \begin{macro}{\itDelta} +% \begin{macro}{\itGamma} +% \begin{macro}{\itLambda} +% \begin{macro}{\itOmega} +% \begin{macro}{\itPhi} +% \begin{macro}{\itPi} +% \begin{macro}{\itPsi} +% \begin{macro}{\itSigma} +% \begin{macro}{\itTheta} +% \begin{macro}{\itUpsilon} +% \begin{macro}{\itXi} +% \begin{macro}{\italpha} +% \begin{macro}{\itbeta} +% \begin{macro}{\itgamma} +% \begin{macro}{\itdelta} +% \begin{macro}{\itepsilon} +% \begin{macro}{\itzeta} +% \begin{macro}{\iteta} +% \begin{macro}{\ittheta} +% \begin{macro}{\itiota} +% \begin{macro}{\itkappa} +% \begin{macro}{\itlambda} +% \begin{macro}{\itmu} +% \begin{macro}{\itnu} +% \begin{macro}{\itxi} +% \begin{macro}{\itpi} +% \begin{macro}{\itrho} +% \begin{macro}{\itsigma} +% \begin{macro}{\ittau} +% \begin{macro}{\itupsilon} +% \begin{macro}{\itphi} +% \begin{macro}{\itchi} +% \begin{macro}{\itpsi} +% \begin{macro}{\itomega} +% \begin{macro}{\itvarepsilon} +% \begin{macro}{\itvartheta} +% \begin{macro}{\itvarpi} +% \begin{macro}{\itvarrho} +% \begin{macro}{\itvarsigma} +% \begin{macro}{\itvarphi} +% \begin{macro}{\otherDelta} +% \begin{macro}{\otherGamma} +% \begin{macro}{\otherLambda} +% \begin{macro}{\otherOmega} +% \begin{macro}{\otherPhi} +% \begin{macro}{\otherPi} +% \begin{macro}{\otherPsi} +% \begin{macro}{\otherSigma} +% \begin{macro}{\otherTheta} +% \begin{macro}{\otherUpsilon} +% \begin{macro}{\otherXi} +% \begin{macro}{\otheralpha} +% \begin{macro}{\otherbeta} +% \begin{macro}{\othergamma} +% \begin{macro}{\otherdelta} +% \begin{macro}{\otherepsilon} +% \begin{macro}{\otherzeta} +% \begin{macro}{\othereta} +% \begin{macro}{\othertheta} +% \begin{macro}{\otheriota} +% \begin{macro}{\otherkappa} +% \begin{macro}{\otherlambda} +% \begin{macro}{\othermu} +% \begin{macro}{\othernu} +% \begin{macro}{\otherxi} +% \begin{macro}{\otherpi} +% \begin{macro}{\otherrho} +% \begin{macro}{\othersigma} +% \begin{macro}{\othertau} +% \begin{macro}{\otherupsilon} +% \begin{macro}{\otherphi} +% \begin{macro}{\otherchi} +% \begin{macro}{\otherpsi} +% \begin{macro}{\otheromega} +% \begin{macro}{\othervarepsilon} +% \begin{macro}{\othervartheta} +% \begin{macro}{\othervarpi} +% \begin{macro}{\othervarrho} +% \begin{macro}{\othervarsigma} +% \begin{macro}{\othervarphi} +% Es gibt eine Vielzahl von Paketen, die das Setzen von aufrechten griechischen +% Glyphen 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 Glyphen gesucht, um diese auf die von \TUDScript verwendete +% Nomenklatur abzubilden, damit diese unabhängig von der Einstellung für +% \opt{cdmath} genutzt werden kann und somit neben den normalen Makros für die +% zusätzlichen Befehle (\cs{up\meta{Bezeichner}}, \cs{it\meta{Bezeichner}}) +% für das explizite Auswählen aufrechter und kursiver Buchstaben 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}{}{\csedef{it#1}{\csname\tud@res@a\endcsname}}% + }% + }{}% + \ifcsundef{up#1}{% + \ifcsundef{#1up}{}{\csedef{up#1}{\csname#1up\endcsname}}% + }{}% + \ifcsundef{other#1}{% + \ifcsundef{#1other}{}{\csedef{other#1}{\csname#1other\endcsname}}% + }{}% +} +% \end{macrocode} +% Einige Pakete stellen für griechische Majuskeln die Befehle \cs{var\dots} +% bereit, um diese im kursiven Schnitt zu setzen. Weiterhin existiert für +% aufrechte Majuskeln auch noch die Form \cs{Up\meta{Bezeichner}}. 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}{}{\csedef{it#1}{\csname var#1\endcsname}}% + }{}% + \ifcsundef{up#1}{% + \tud@lowerstring\tud@res@a{#1}% + \edef\tud@res@a{Up\tud@res@a}% + \ifcsundef{\tud@res@a}{}{\csedef{up#1}{\csname\tud@res@a\endcsname}}% + }{}% +} +% \end{macrocode} +% Mit diesem Makro werden in 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 Glyphen 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% + \ifstr{\tud@math@letters@enc}{\detokenize{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% + }{}% + \ifstr{\tud@math@operators@enc}{\detokenize{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 +% Glyphen 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 Glyphen 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\mathalpha}{tuditgrk}{##2}% + }% + }{}% + \ifcsundef{up##1}{% + \eappto\tud@res@c{% + \noexpand\DeclareMathSymbol{\csname up##1\endcsname}% + {\noexpand\mathalpha}{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 \othervarphi +% \end{macro}^^A \othervarsigma +% \end{macro}^^A \othervarrho +% \end{macro}^^A \othervarpi +% \end{macro}^^A \othervartheta +% \end{macro}^^A \othervarepsilon +% \end{macro}^^A \otheromega +% \end{macro}^^A \otherpsi +% \end{macro}^^A \otherchi +% \end{macro}^^A \otherphi +% \end{macro}^^A \otherupsilon +% \end{macro}^^A \othertau +% \end{macro}^^A \othersigma +% \end{macro}^^A \otherrho +% \end{macro}^^A \otherpi +% \end{macro}^^A \otherxi +% \end{macro}^^A \othernu +% \end{macro}^^A \othermu +% \end{macro}^^A \otherlambda +% \end{macro}^^A \otherkappa +% \end{macro}^^A \otheriota +% \end{macro}^^A \othertheta +% \end{macro}^^A \othereta +% \end{macro}^^A \otherzeta +% \end{macro}^^A \otherepsilon +% \end{macro}^^A \otherdelta +% \end{macro}^^A \othergamma +% \end{macro}^^A \otherbeta +% \end{macro}^^A \otheralpha +% \end{macro}^^A \otherXi +% \end{macro}^^A \otherUpsilon +% \end{macro}^^A \otherTheta +% \end{macro}^^A \otherSigma +% \end{macro}^^A \otherPsi +% \end{macro}^^A \otherPi +% \end{macro}^^A \otherPhi +% \end{macro}^^A \otherOmega +% \end{macro}^^A \otherLambda +% \end{macro}^^A \otherGamma +% \end{macro}^^A \otherDelta +% \end{macro}^^A \itvarphi +% \end{macro}^^A \itvarsigma +% \end{macro}^^A \itvarrho +% \end{macro}^^A \itvarpi +% \end{macro}^^A \itvartheta +% \end{macro}^^A \itvarepsilon +% \end{macro}^^A \itomega +% \end{macro}^^A \itpsi +% \end{macro}^^A \itchi +% \end{macro}^^A \itphi +% \end{macro}^^A \itupsilon +% \end{macro}^^A \ittau +% \end{macro}^^A \itsigma +% \end{macro}^^A \itrho +% \end{macro}^^A \itpi +% \end{macro}^^A \itxi +% \end{macro}^^A \itnu +% \end{macro}^^A \itmu +% \end{macro}^^A \itlambda +% \end{macro}^^A \itkappa +% \end{macro}^^A \itiota +% \end{macro}^^A \ittheta +% \end{macro}^^A \iteta +% \end{macro}^^A \itzeta +% \end{macro}^^A \itepsilon +% \end{macro}^^A \itdelta +% \end{macro}^^A \itgamma +% \end{macro}^^A \itbeta +% \end{macro}^^A \italpha +% \end{macro}^^A \itXi +% \end{macro}^^A \itUpsilon +% \end{macro}^^A \itTheta +% \end{macro}^^A \itSigma +% \end{macro}^^A \itPsi +% \end{macro}^^A \itPi +% \end{macro}^^A \itPhi +% \end{macro}^^A \itOmega +% \end{macro}^^A \itLambda +% \end{macro}^^A \itGamma +% \end{macro}^^A \itDelta +% \end{macro}^^A \upvarphi +% \end{macro}^^A \upvarsigma +% \end{macro}^^A \upvarrho +% \end{macro}^^A \upvarpi +% \end{macro}^^A \upvartheta +% \end{macro}^^A \upvarepsilon +% \end{macro}^^A \upomega +% \end{macro}^^A \uppsi +% \end{macro}^^A \upchi +% \end{macro}^^A \upphi +% \end{macro}^^A \upupsilon +% \end{macro}^^A \uptau +% \end{macro}^^A \upsigma +% \end{macro}^^A \uprho +% \end{macro}^^A \uppi +% \end{macro}^^A \upxi +% \end{macro}^^A \upnu +% \end{macro}^^A \upmu +% \end{macro}^^A \uplambda +% \end{macro}^^A \upkappa +% \end{macro}^^A \upiota +% \end{macro}^^A \uptheta +% \end{macro}^^A \upeta +% \end{macro}^^A \upzeta +% \end{macro}^^A \upepsilon +% \end{macro}^^A \updelta +% \end{macro}^^A \upgamma +% \end{macro}^^A \upbeta +% \end{macro}^^A \upalpha +% \end{macro}^^A \upXi +% \end{macro}^^A \upUpsilon +% \end{macro}^^A \upTheta +% \end{macro}^^A \upSigma +% \end{macro}^^A \upPsi +% \end{macro}^^A \upPi +% \end{macro}^^A \upPhi +% \end{macro}^^A \upOmega +% \end{macro}^^A \upLambda +% \end{macro}^^A \upGamma +% \end{macro}^^A \upDelta +% \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 Glyphen 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 Variant der Glyphe 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 Glyphen 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% + \ifcsdef{upalpha}{% + \ifx\upalpha\alpha% + \@tud@res@swatrue% + \fi% + }{}% +% \end{macrocode} +% Existiert \cs{upalpha} und ist mit \cs{alpha} identisch, werden \emph{alle} +% griechischen Glyphen 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} oder\dots +% \begin{macrocode} + \ifcsdef{itGamma}{% + \ifx\itGamma\Gamma% + \@tud@res@swatrue% + \fi% + }{% +% \end{macrocode} +% \dots\cs{Gamma} entspricht einer möglichen Standarddefnition,\dots +% \begin{macrocode} + \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\relax\@tud@res@swatrue\fi% + \ifx\Gamma\tud@res@b\relax\@tud@res@swatrue\fi% + }% +% \end{macrocode} +% \dots werden \emph{alle} griechischen Glyphen 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 +% \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@x@mathastext@enc} +% \changes{v2.06a}{2019/07/09}{neu}^^A +% \begin{macro}{\mv@tudnormal} +% \begin{macro}{\mv@tudbold} +% \begin{macro}{\mv@tuddin} +% \begin{macro}{\tud@mathversion} +% \changes{v2.06}{2019/06/17}{neu}^^A +% \begin{macro}{\MTDeclareVersion} +% \changes{v2.06}{2019/06/17}{neu}^^A +% \begin{macro}{\MTversion@@} +% \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*\mv@tudnormal{} +\newcommand*\mv@tudbold{} +\newcommand*\mv@tuddin{} +% \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% + \ifstr{#1}{normal}{% + \def\tud@res@a{tudnormal}% + }{% + \ifstr{#1}{bold}{% + \def\tud@res@a{tudbold}% + }{}% + }% + \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% + }% + \AtEndPreamble{% + \tud@cs@store{mathversion}% + \tud@cs@letltx{mathversion}{tud@mathversion}% + }% +} +% \end{macrocode} +% Mit \cs{tud@cdmath@init} werden für den Mathematikmodus die Schriften im +% \CD deklariert. +% \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 \pkg{cbfonts} und \pkg{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 +% \verb+\immediate\openin\pathfont="|kpsewhich grmn1200.tfm"+\ignorespaces% +% \footnote{\url{https://tex.stackexchange.com/questions/306980/}} oder nutzen. +% 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 aktiviert sein. +% \begin{macrocode} + \@tud@res@swafalse% + \if@tud@cdfont@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}[2018/08/22]% + \tud@math@declare@lgrgreeks{cmr}{m}{bx}{n}{it}% + \fi% + \providecommand*\MTDeclareVersion[6][]{\DeclareMathVersion{##2}}% + \providecommand*\MTversion@@[1]{}% + \tud@cdmath@@init{\tud@cdfont@fam@lf}{\tud@ttfont@fam}% +% \end{macrocode} +% Die Symbole für aufrechte und kursive griechische Glyphen werden definiert. +% Da im Paket \pkg{opensans} keine mathematischen Schriftkodierungen enthalten +% sind, wird in diesem Fall auf die LGR-Kodierung zurückgegriffen. +% \ToDo{kann mit \pkg{opensans-math} raus}[v2.??] +% \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 Glyphen werden diese~-- inklusive aller +% Auswahlvariationen~-- deklariert. +% \begin{macrocode} + \tud@cdmath@also@greeks% +% \end{macrocode} +% Sollten die notwendigen Schriftfamilien nicht gefunden worden sein, werden +% keine separaten Mathematikversionen definiert. +% \begin{macrocode} + \else% + \let\mv@tudnormal\mv@normal% + \let\mv@tudbold\mv@bold% + \if@tud@cdoldfont@active% + \let\mv@tuddin\mv@bold% + \fi% + \fi% +} +% \end{macrocode} +% Mit \cs{tud@cdmath@@init} werden die notwendigen Mathematikversionen und die +% dazugehörigen Symbolschriften sowie Alphabete deklariert. +% \begin{macrocode} +\newcommand*\tud@x@mathastext@enc{OT1} +\newcommand*\tud@cdmath@@init[2]{% +% \end{macrocode} +% Mit \cs{tud@cdfont@@set} werden die Schriftstärken gemäß den ausgewählten +% Schriftoptionen aktiviert (\cs{tud@cdfont@md}, \cs{tud@cdfont@bf}, +% \cs{tud@cdfont@ebf}), um diese auch für die Mathematikschriften zu nutzen. +% \begin{macrocode} + \tud@cdfont@@set% + \tud@ttfont@@set% +% \end{macrocode} +% Die Deklaration der Mathematikversionen für die alten Schriften. Auch für die +% Schrift \DIN werden mathematische Glyphen bereitgestellt. Diese wurden schon +% bei der Installation aus dem \pkg{iwona}-Paket entnommen. Die verwendeten +% Symbole stammen aus diesem Paket. +% \begin{macrocode} + \if@tud@cdoldfont@active% + \DeclareMathVersion{tudnormal}% + \DeclareMathVersion{tudbold}% + \DeclareMathVersion{tuddin}% + \SetSymbolFont{operators}{tudnormal}{OT1}{#1}{\tud@cdfont@md}{n}% + \SetSymbolFont{operators}{tudbold}{OT1}{#1}{\tud@cdfont@bf}{n}% + \SetSymbolFont{operators}{tuddin}{OT1}{\tud@cdfont@db}{b}{n}% + \SetSymbolFont{letters}{tudnormal}{OML}{#1}{\tud@cdfont@md}{sl}% + \SetSymbolFont{letters}{tudbold}{OML}{#1}{\tud@cdfont@bf}{sl}% + \SetSymbolFont{letters}{tuddin}{OML}{\tud@cdfont@db}{b}{sl}% + \SetSymbolFont{symbols}{tudnormal}{OMS}{#1}{\tud@cdfont@md}{n}% + \SetSymbolFont{symbols}{tudbold}{OMS}{#1}{\tud@cdfont@bf}{n}% + \SetSymbolFont{symbols}{tuddin}{OMS}{\tud@cdfont@db}{b}{n}% + \SetSymbolFont{largesymbols}{tudnormal}{OMX}{iwona}{\tud@cdfont@md}{n}% + \SetSymbolFont{largesymbols}{tudbold}{OMX}{iwona}{\tud@cdfont@bf}{n}% + \SetSymbolFont{largesymbols}{tuddin}{OMX}{iwona}{ebc}{n}% + \SetMathAlphabet{\mathnormal}{tudnormal}{OML}{#1}{\tud@cdfont@md}{sl}% + \SetMathAlphabet{\mathnormal}{tudbold}{OML}{#1}{\tud@cdfont@bf}{sl}% + \SetMathAlphabet{\mathnormal}{tuddin}{OML}{\tud@cdfont@db}{b}{sl}% + \tud@if@ismathalphabet{\mathbold}{% + \SetMathAlphabet{\mathbold}{tudnormal}{OML}{#1}{\tud@cdfont@bf}{sl}% + \SetMathAlphabet{\mathbold}{tudbold}{OML}{#1}{\tud@cdfont@ebf}{sl}% + \SetMathAlphabet{\mathbold}{tuddin}{OML}{\tud@cdfont@db}{b}{sl}% + }{}% + \else% +% \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. Sämtliche fehlenden Kodierungen werden +% notdürftig mit dem Paket \pkg{iwona} definiert. Zur Definition griechischer +% Glyphen wird die LGR-Kodierung der \OpenSans genutzt. +% \begin{macrocode} + \edef\tud@res@b{\encodingdefault}% + \@tfor\tud@res@a:={T1}{TU}{EU1}{EU2}\do{% + \ifx\tud@res@a\tud@res@b% + \let\tud@x@mathastext@enc\tud@res@b% + \@break@tfor + \fi% + }% + \MTDeclareVersion[it]{tudnormal}% + {\tud@x@mathastext@enc}{#1}{\tud@cdfont@md}{n}% + \MTDeclareVersion[it]{tudbold}% + {\tud@x@mathastext@enc}{#1}{\tud@cdfont@bf}{n}% + \SetSymbolFont{operators}{tudnormal}{OT1}{iwona}{\tud@cdfont@md}{n}% + \SetSymbolFont{operators}{tudbold}{OT1}{iwona}{\tud@cdfont@bf}{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 Glyphen einzubinden, um +% ein Alphabet zu sparen. Siehe Kodierungen FML/FMS, LML/LMS, LBL/LBS, LS1/LS2 +% }[v2.??] +% \begin{macrocode} + \SetSymbolFont{letters}{tudnormal}{OML}{iwona}{\tud@cdfont@md}{it}% + \SetSymbolFont{letters}{tudbold}{OML}{iwona}{\tud@cdfont@bf}{it}% +%^^A \SetSymbolFont{letters}{tudnormal}{U}{#1m}{\tud@cdfont@md}{it}% +%^^A \SetSymbolFont{letters}{tudbold}{U}{#1m}{\tud@cdfont@bf}{it}% + \SetSymbolFont{symbols}{tudnormal}{OMS}{iwona}{\tud@cdfont@md}{n}% + \SetSymbolFont{symbols}{tudbold}{OMS}{iwona}{\tud@cdfont@bf}{n}% + \SetSymbolFont{largesymbols}{tudnormal}{OMX}{iwona}{\tud@cdfont@md}{n}% + \SetSymbolFont{largesymbols}{tudbold}{OMX}{iwona}{\tud@cdfont@bf}{n}% + \SetSymbolFont{tudupgrk}{tudnormal}{LGR}{#1}{\tud@cdfont@md}{n}% + \SetSymbolFont{tuditgrk}{tudnormal}{LGR}{#1}{\tud@cdfont@md}{it}% + \SetSymbolFont{tudupgrk}{tudbold}{LGR}{#1}{\tud@cdfont@bf}{n}% + \SetSymbolFont{tuditgrk}{tudbold}{LGR}{#1}{\tud@cdfont@bf}{it}% +%^^A \SetMathAlphabet{\mathnormal}{tudnormal}{U}{#1m}{\tud@cdfont@md}{it}% +%^^A \SetMathAlphabet{\mathnormal}{tudbold}{U}{#1m}{\tud@cdfont@bf}{it}% + \tud@if@ismathalphabet{\mathbold}{% + \SetMathAlphabet{\mathbold}{tudnormal}% + {\tud@x@mathastext@enc}{#1}{\tud@cdfont@bf}{it}% + \SetMathAlphabet{\mathbold}{tudbold}% + {\tud@x@mathastext@enc}{#1}{\tud@cdfont@ebf}{it}% +%^^A \SetMathAlphabet{\mathbold}{tudnormal}{U}{#1m}{\tud@cdfont@bf}{it}% +%^^A \SetMathAlphabet{\mathbold}{tudbold}{U}{#1m}{\tud@cdfont@ebf}{it}% + }{}% + \fi% + \SetMathAlphabet{\mathrm}{tudnormal}{OT1}{#1}{\tud@cdfont@md}{n}% + \SetMathAlphabet{\mathrm}{tudbold}{OT1}{#1}{\tud@cdfont@bf}{n}% + \SetMathAlphabet{\mathbf}{tudnormal}{OT1}{#1}{\tud@cdfont@bf}{n}% + \SetMathAlphabet{\mathbf}{tudbold}{OT1}{#1}{\tud@cdfont@ebf}{n}% + \SetMathAlphabet{\mathsf}{tudnormal}{OT1}{#1}{\tud@cdfont@md}{n}% + \SetMathAlphabet{\mathsf}{tudbold}{OT1}{#1}{\tud@cdfont@bf}{n}% + \SetMathAlphabet{\mathit}{tudnormal}{OT1}{#1}{\tud@cdfont@md}{it}% + \SetMathAlphabet{\mathit}{tudbold}{OT1}{#1}{\tud@cdfont@bf}{it}% + \SetMathAlphabet{\mathtt}{tudnormal}{OT1}{#2}{\tud@ttfont@md}{n}% + \SetMathAlphabet{\mathtt}{tudbold}{OT1}{#2}{\tud@ttfont@bf}{n}% + \if@tud@cdoldfont@active% + \SetMathAlphabet{\mathrm}{tuddin}{OT1}{\tud@cdfont@db}{b}{n}% + \SetMathAlphabet{\mathbf}{tuddin}{OT1}{\tud@cdfont@db}{b}{n}% + \SetMathAlphabet{\mathsf}{tuddin}{OT1}{\tud@cdfont@db}{b}{n}% + \SetMathAlphabet{\mathit}{tuddin}{OT1}{\tud@cdfont@db}{b}{sl}% + \SetMathAlphabet{\mathtt}{tuddin}{OT1}{#2}{\tud@ttfont@ebf}{n}% + \fi% + \IfFileExists{ueus.fd}{% + \SetMathAlphabet{\mathcal}{tudnormal}{U}{eus}{m}{n}% + \SetMathAlphabet{\mathcal}{tudbold}{U}{eus}{b}{n}% + \if@tud@cdoldfont@active% + \SetMathAlphabet{\mathcal}{tuddin}{U}{eus}{b}{n}% + \fi% + }{}% + \tud@if@ismathalphabet{\mathfrak}{% + \IfFileExists{ueuf.fd}{% + \SetMathAlphabet{\mathfrak}{tudnormal}{U}{euf}{m}{n}% + \SetMathAlphabet{\mathfrak}{tudbold}{U}{euf}{b}{n}% + \if@tud@cdoldfont@active% + \SetMathAlphabet{\mathfrak}{tuddin}{U}{euf}{b}{n}% + \fi% + }{}% + }{}% +% \end{macrocode} +% Das Paket \pkg{cmbright} stelt 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}{\tud@cdfont@fam@lf a}{}% + \DeclareFontShape{U}{\tud@cdfont@fam@lf a}{m}{n}{<->cmbras10}{}% + \SetSymbolFont{AMSa}{tudnormal}{U}{\tud@cdfont@fam@lf a}{m}{n}% + \SetSymbolFont{AMSa}{tudbold}{U}{\tud@cdfont@fam@lf a}{m}{n}% + \DeclareFontFamily{U}{\tud@cdfont@fam@lf b}{}% + \DeclareFontShape{U}{\tud@cdfont@fam@lf b}{m}{n}{<->cmbrbs10}{}% + \SetSymbolFont{AMSb}{tudnormal}{U}{\tud@cdfont@fam@lf b}{m}{n}% + \SetSymbolFont{AMSb}{tudbold}{U}{\tud@cdfont@fam@lf b}{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. +% \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} +% 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} + \tud@if@issymbolfont{legacymaths}{% + \SetSymbolFont{legacymaths}{tudnormal}{OT1}{#1}{\tud@cdfont@md}{n}% + \SetSymbolFont{legacymaths}{tudbold}{OT1}{#1}{\tud@cdfont@bf}{n}% + \if@tud@cdoldfont@active% + \SetSymbolFont{legacymaths}{tuddin}{OT1}{\tud@cdfont@db}{b}{n}% + \fi% + }{}% +% \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} + \if@tud@cdoldfont@active% + \if@tud@cdmath@active% + \sbox\z@{\mathversion{tudnormal}$ $\mathversion{tuddin}$ $}% + \fi% + \fi% + }% +} +% \end{macrocode} +% \end{macro}^^A \MTversion@@ +% \end{macro}^^A \MTDeclareVersion +% \end{macro}^^A \tud@mathversion +% \end{macro}^^A \mv@tuddin +% \end{macro}^^A \mv@tudbold +% \end{macro}^^A \mv@tudnormal +% \end{macro}^^A \tud@x@mathastext@enc +% \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 +% \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}% + \ifcsdef{tud@cdmath@symbol@#2}{% + \csedef{tud@cdmath@symbol@#1}{\csname tud@cdmath@symbol@#2\endcsname}% + }{}% +} +\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} +% übergebene Bezeichner für Auswahlbefehle erhalten \cs{tud@cdmath@symbol@} als +% Präfix, wodurch sich die Definitionen für die einzelnen Mathematikversionen +% beliebig tauschen lassen. +% \begin{macrocode} +\newcommand*\tud@DeclareMathSymbol[4]{% + \begingroup% + \edef\tud@res@a{% + \endgroup% + \noexpand\DeclareMathSymbol% + {\csname tud@cdmath@symbol@#1\endcsname}% + {\etex@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 +% Mit diesen beiden Befehlen 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} +\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} + \ifcsdef{#1}{% + \tud@cs@store{#1}% + \addto@hook\tud@cdmath@symbols@toks{\tud@cs@restore{#1}}% + }{% + \addto@hook\tud@cdmath@symbols@toks{\csundef{#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} + \ifcsdef{tud@cdmath@symbol@#1}{% + \tud@cs@letltx{#1}{tud@cdmath@symbol@#1}% + }{% + \csundef{#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}% + \eaddto@hook\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 \cs{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 +% \begin{macro}{\tud@cdmath@declare@greek@uc} +% \changes{v2.04}{2015/03/10}{neu}^^A +% \begin{macro}{\tud@cdmath@symbol@upGamma} +% \begin{macro}{\tud@cdmath@symbol@upDelta} +% \begin{macro}{\tud@cdmath@symbol@upTheta} +% \begin{macro}{\tud@cdmath@symbol@upLambda} +% \begin{macro}{\tud@cdmath@symbol@upXi} +% \begin{macro}{\tud@cdmath@symbol@upPi} +% \begin{macro}{\tud@cdmath@symbol@upSigma} +% \begin{macro}{\tud@cdmath@symbol@upUpsilon} +% \begin{macro}{\tud@cdmath@symbol@upPhi} +% \begin{macro}{\tud@cdmath@symbol@upPsi} +% \begin{macro}{\tud@cdmath@symbol@upOmega} +% \begin{macro}{\tud@cdmath@symbol@itGamma} +% \begin{macro}{\tud@cdmath@symbol@itDelta} +% \begin{macro}{\tud@cdmath@symbol@itTheta} +% \begin{macro}{\tud@cdmath@symbol@itLambda} +% \begin{macro}{\tud@cdmath@symbol@itXi} +% \begin{macro}{\tud@cdmath@symbol@itPi} +% \begin{macro}{\tud@cdmath@symbol@itSigma} +% \begin{macro}{\tud@cdmath@symbol@itUpsilon} +% \begin{macro}{\tud@cdmath@symbol@itPhi} +% \begin{macro}{\tud@cdmath@symbol@itPsi} +% \begin{macro}{\tud@cdmath@symbol@itOmega} +% In Anlehnung an verschiedene Pakete für Mathematikschriften werden Symbole +% für aufrechte und kursive Majuskeln der griechischen Lettern definiert. Damit +% auch bei diesen Buchstaben 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. +% \ToDo{Codierungen \val{LS1/LS2}; siehe \pkg{stix,libertinust1math}}[v2.??] +% \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@symbol@itOmega +% \end{macro}^^A \tud@cdmath@symbol@itPsi +% \end{macro}^^A \tud@cdmath@symbol@itPhi +% \end{macro}^^A \tud@cdmath@symbol@itUpsilon +% \end{macro}^^A \tud@cdmath@symbol@itSigma +% \end{macro}^^A \tud@cdmath@symbol@itPi +% \end{macro}^^A \tud@cdmath@symbol@itXi +% \end{macro}^^A \tud@cdmath@symbol@itLambda +% \end{macro}^^A \tud@cdmath@symbol@itTheta +% \end{macro}^^A \tud@cdmath@symbol@itDelta +% \end{macro}^^A \tud@cdmath@symbol@itGamma +% \end{macro}^^A \tud@cdmath@symbol@upOmega +% \end{macro}^^A \tud@cdmath@symbol@upPsi +% \end{macro}^^A \tud@cdmath@symbol@upPhi +% \end{macro}^^A \tud@cdmath@symbol@upUpsilon +% \end{macro}^^A \tud@cdmath@symbol@upSigma +% \end{macro}^^A \tud@cdmath@symbol@upPi +% \end{macro}^^A \tud@cdmath@symbol@upXi +% \end{macro}^^A \tud@cdmath@symbol@upLambda +% \end{macro}^^A \tud@cdmath@symbol@upTheta +% \end{macro}^^A \tud@cdmath@symbol@upDelta +% \end{macro}^^A \tud@cdmath@symbol@upGamma +% \end{macro}^^A \tud@cdmath@declare@greek@uc +% \begin{macro}{\tud@cdmath@declare@greek@lc} +% \changes{v2.06}{2018/07/17}{neu}^^A +% \begin{macro}{\tud@cdmath@symbol@upalpha} +% \begin{macro}{\tud@cdmath@symbol@upbeta} +% \begin{macro}{\tud@cdmath@symbol@upgamma} +% \begin{macro}{\tud@cdmath@symbol@updelta} +% \begin{macro}{\tud@cdmath@symbol@upepsilon} +% \begin{macro}{\tud@cdmath@symbol@upzeta} +% \begin{macro}{\tud@cdmath@symbol@upeta} +% \begin{macro}{\tud@cdmath@symbol@uptheta} +% \begin{macro}{\tud@cdmath@symbol@upiota} +% \begin{macro}{\tud@cdmath@symbol@upkappa} +% \begin{macro}{\tud@cdmath@symbol@uplambda} +% \begin{macro}{\tud@cdmath@symbol@upmu} +% \begin{macro}{\tud@cdmath@symbol@upnu} +% \begin{macro}{\tud@cdmath@symbol@upxi} +% \begin{macro}{\tud@cdmath@symbol@uppi} +% \begin{macro}{\tud@cdmath@symbol@uprho} +% \begin{macro}{\tud@cdmath@symbol@upsigma} +% \begin{macro}{\tud@cdmath@symbol@uptau} +% \begin{macro}{\tud@cdmath@symbol@upupsilon} +% \begin{macro}{\tud@cdmath@symbol@upphi} +% \begin{macro}{\tud@cdmath@symbol@upchi} +% \begin{macro}{\tud@cdmath@symbol@uppsi} +% \begin{macro}{\tud@cdmath@symbol@upomega} +% \begin{macro}{\tud@cdmath@symbol@upvarepsilon} +% \begin{macro}{\tud@cdmath@symbol@upvartheta} +% \begin{macro}{\tud@cdmath@symbol@upvarpi} +% \begin{macro}{\tud@cdmath@symbol@upvarrho} +% \begin{macro}{\tud@cdmath@symbol@upvarsigma} +% \begin{macro}{\tud@cdmath@symbol@upvarphi} +% \begin{macro}{\tud@cdmath@symbol@italpha} +% \begin{macro}{\tud@cdmath@symbol@itbeta} +% \begin{macro}{\tud@cdmath@symbol@itgamma} +% \begin{macro}{\tud@cdmath@symbol@itdelta} +% \begin{macro}{\tud@cdmath@symbol@itepsilon} +% \begin{macro}{\tud@cdmath@symbol@itzeta} +% \begin{macro}{\tud@cdmath@symbol@iteta} +% \begin{macro}{\tud@cdmath@symbol@ittheta} +% \begin{macro}{\tud@cdmath@symbol@itiota} +% \begin{macro}{\tud@cdmath@symbol@itkappa} +% \begin{macro}{\tud@cdmath@symbol@itlambda} +% \begin{macro}{\tud@cdmath@symbol@itmu} +% \begin{macro}{\tud@cdmath@symbol@itnu} +% \begin{macro}{\tud@cdmath@symbol@itxi} +% \begin{macro}{\tud@cdmath@symbol@itpi} +% \begin{macro}{\tud@cdmath@symbol@itrho} +% \begin{macro}{\tud@cdmath@symbol@itsigma} +% \begin{macro}{\tud@cdmath@symbol@ittau} +% \begin{macro}{\tud@cdmath@symbol@itupsilon} +% \begin{macro}{\tud@cdmath@symbol@itphi} +% \begin{macro}{\tud@cdmath@symbol@itchi} +% \begin{macro}{\tud@cdmath@symbol@itpsi} +% \begin{macro}{\tud@cdmath@symbol@itomega} +% \begin{macro}{\tud@cdmath@symbol@itvarepsilon} +% \begin{macro}{\tud@cdmath@symbol@itvartheta} +% \begin{macro}{\tud@cdmath@symbol@itvarpi} +% \begin{macro}{\tud@cdmath@symbol@itvarrho} +% \begin{macro}{\tud@cdmath@symbol@itvarsigma} +% \begin{macro}{\tud@cdmath@symbol@itvarphi} +% Aufrechte griechische Minuskeln sind in den mathematischen Kodierungen von +% \LaTeXe{} 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 ein einfacher Eintrag \cs{up\meta{Bezeichner}} in die Liste +% {tud@cdmath@symb@list} gesetzt wird, was in Verbindung mit einem fehlenden +% Symbol \cs{tud@cdmath@symbol@\meta{Bezeichner}} zu einem undefinierten +% cs{up\meta{Bezeichner}} bei \opt{cdmath=true} führt. +% \ToDo{falls irgendwann erweiterte OML-Kodierung existiert, dann nutzen}[v2.??] +% \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@symbol@itvarphi +% \end{macro}^^A \tud@cdmath@symbol@itvarsigma +% \end{macro}^^A \tud@cdmath@symbol@itvarrho +% \end{macro}^^A \tud@cdmath@symbol@itvarpi +% \end{macro}^^A \tud@cdmath@symbol@itvartheta +% \end{macro}^^A \tud@cdmath@symbol@itvarepsilon +% \end{macro}^^A \tud@cdmath@symbol@itomega +% \end{macro}^^A \tud@cdmath@symbol@itpsi +% \end{macro}^^A \tud@cdmath@symbol@itchi +% \end{macro}^^A \tud@cdmath@symbol@itphi +% \end{macro}^^A \tud@cdmath@symbol@itupsilon +% \end{macro}^^A \tud@cdmath@symbol@ittau +% \end{macro}^^A \tud@cdmath@symbol@itsigma +% \end{macro}^^A \tud@cdmath@symbol@itrho +% \end{macro}^^A \tud@cdmath@symbol@itpi +% \end{macro}^^A \tud@cdmath@symbol@itxi +% \end{macro}^^A \tud@cdmath@symbol@itnu +% \end{macro}^^A \tud@cdmath@symbol@itmu +% \end{macro}^^A \tud@cdmath@symbol@itlambda +% \end{macro}^^A \tud@cdmath@symbol@itkappa +% \end{macro}^^A \tud@cdmath@symbol@itiota +% \end{macro}^^A \tud@cdmath@symbol@ittheta +% \end{macro}^^A \tud@cdmath@symbol@iteta +% \end{macro}^^A \tud@cdmath@symbol@itzeta +% \end{macro}^^A \tud@cdmath@symbol@itepsilon +% \end{macro}^^A \tud@cdmath@symbol@itdelta +% \end{macro}^^A \tud@cdmath@symbol@itgamma +% \end{macro}^^A \tud@cdmath@symbol@itbeta +% \end{macro}^^A \tud@cdmath@symbol@italpha +% \end{macro}^^A \tud@cdmath@symbol@upvarphi +% \end{macro}^^A \tud@cdmath@symbol@upvarsigma +% \end{macro}^^A \tud@cdmath@symbol@upvarrho +% \end{macro}^^A \tud@cdmath@symbol@upvarpi +% \end{macro}^^A \tud@cdmath@symbol@upvartheta +% \end{macro}^^A \tud@cdmath@symbol@upvarepsilon +% \end{macro}^^A \tud@cdmath@symbol@upomega +% \end{macro}^^A \tud@cdmath@symbol@uppsi +% \end{macro}^^A \tud@cdmath@symbol@upchi +% \end{macro}^^A \tud@cdmath@symbol@upphi +% \end{macro}^^A \tud@cdmath@symbol@upupsilon +% \end{macro}^^A \tud@cdmath@symbol@uptau +% \end{macro}^^A \tud@cdmath@symbol@upsigma +% \end{macro}^^A \tud@cdmath@symbol@uprho +% \end{macro}^^A \tud@cdmath@symbol@uppi +% \end{macro}^^A \tud@cdmath@symbol@upxi +% \end{macro}^^A \tud@cdmath@symbol@upnu +% \end{macro}^^A \tud@cdmath@symbol@upmu +% \end{macro}^^A \tud@cdmath@symbol@uplambda +% \end{macro}^^A \tud@cdmath@symbol@upkappa +% \end{macro}^^A \tud@cdmath@symbol@upiota +% \end{macro}^^A \tud@cdmath@symbol@uptheta +% \end{macro}^^A \tud@cdmath@symbol@upeta +% \end{macro}^^A \tud@cdmath@symbol@upzeta +% \end{macro}^^A \tud@cdmath@symbol@upepsilon +% \end{macro}^^A \tud@cdmath@symbol@updelta +% \end{macro}^^A \tud@cdmath@symbol@upgamma +% \end{macro}^^A \tud@cdmath@symbol@upbeta +% \end{macro}^^A \tud@cdmath@symbol@upalpha +% \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 +% Die \OpenSans hält die griechischen Glyphen 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 Glyphe. +% \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}{\mathalpha}{tuditgrk}{#2}% + \tud@cdmath@declare@symb{up#1}{\mathalpha}{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} + \scr@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% + }{}% +} +% \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 Glyphen 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@lowerstring\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 Glyphen geändert, zum anderen werden die +% originalen Mathematikversionen überschrieben respektive wiederhergestellt. +% \begin{macrocode} +\newcommand*\tud@math@set{% +% \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% + \tud@cdmath@wrn% + \tud@cs@store{mv@normal}% + \tud@cs@store{mv@bold}% + \let\mv@normal\mv@tudnormal% + \let\mv@bold\mv@tudbold% + \tud@cdmath@symbols@set% +% \end{macrocode} +% Anschließend erfolgt~-- abhängig von der Option \opt{slantedgreek}~-- die +% Einstellung der Neigung der griechischen Glyphen. +% \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% + \tud@cs@restore{mv@normal}% + \tud@cs@restore{mv@bold}% + \tud@cdmath@symbols@reset% + \fi% + \mathversion{normal}% +} +% \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 Buchstaben +% 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 +% Sämtliche Schrifteinstellungen erfolgen erst am Ende der Präambel, um etwaige +% Einstellungen irgendwelcher Schriftpakete beachten zu können. Dabei erfolgt +% das Setzen der Mathematikschriften durch \cs{AtBeginDocument} innerhalb von +% \cs{AtEndPreamble} am Ende \emph{aller} \cs{AtBeginDocument}. +% \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} +% Damit \pkg{tudscrfonts} reibungslos mit den nachfolgenden Definitionen +% funktioniert, wird im Bedarfsfall der Befehl \cs{sectfont} vorgehalten. +% \begin{macrocode} +%<package> \ifdef{\sectfont}{}{\let\sectfont\relax}% +% \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% + \tud@cdmath@init% +% \end{macrocode} +% Die Einstellungen für den Mathematiksatz erfolgen erst zu Dokumentbeginn, um +% auf Einstellungen von anderen Schriftpaketen reagieren zu können. Da es +% so gut wie keine freien OpenType-Schriften für den mathmatischen Formelsatz +% gibt, werden \emph{immer} die Type1-Schriften verwendet, falls diese +% installiert sind. Wurde jedoch das Paket \pkg{bm} angefordert, so müssen die +% Mathematikschriften spätestens zum Ende der Präambel initialisiert werden. +% \begin{macrocode} + \if@tud@x@bm@requested% + \UnPreventPackageFromLoading{bm}% + \if@tud@cdmath@active% + \tud@cs@store{mv@normal}% + \tud@cs@store{mv@bold}% + \let\mv@normal\mv@tudnormal% + \let\mv@bold\mv@tudbold% + \fi% + \RequirePackage{bm}[2017/01/16]% + \tud@cs@restore{mv@normal}% + \tud@cs@restore{mv@bold}% + \fi% +% \end{macrocode} +% Wurde das Paket \pkg{siunitx} geladen, so werden die Schrifteinstellungen +% mit \opt{cdfont}|=|\val{false} deaktiviert und zu Beginn des Dokumentes +% auf die aktuelle Einstellung gesetzt. +% \begin{macrocode} + \if@tud@x@siunitx@enabled% + \if@tud@cdfont@active% + \if@tud@cdfont@heavy% + \def\tud@reserved{\TUDoptions{cdfont=heavy}}% + \else% + \def\tud@reserved{\TUDoptions{cdfont=true}}% + \fi% + \else% + \def\tud@reserved{\TUDoptions{cdfont=false}}% + \fi% + \expandafter\AfterEndPreamble\expandafter{\tud@reserved}% + \TUDoptions{cdfont=false}% + \fi% +% \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% + \AtBeginDocument{% +% \end{macrocode} +% Bereitstellung der Auswahlbefehle für griechische Glyphen in der Nomenklatur +% von \TUDScript (\cs{up\meta{Bezeichner}}, \cs{it\meta{Bezeichner}}). +% \begin{macrocode} + \tud@math@map@greeks% +% \end{macrocode} +% Für die griechischen Glyphen 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} + \tud@math@set% + }% +} +% \end{macrocode} +% +% \iffalse +%<*class> +% \fi +% +% \subsubsection{Schriften für die speziellen Seitenstile} +% +% \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 +% 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@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}{\updefault}{\tud@head@fontsize}% + \DeclareFixedFont{\tud@head@font@bold}{\encodingdefault}% + {\sfdefault}{\bfseries@sf}{\updefault}{\tud@head@fontsize}% +%<*poster> + \protected\gdef\tud@head@font@@bold{% + \usefont{\encodingdefault}{\sfdefault}{\bfseries@sf}{\updefault}% + }% +%</poster> + \else% + \DeclareFixedFont{\tud@head@font@light}{\encodingdefault}% + {\sfdefault}{\mddefault}{\updefault}{\tud@head@fontsize}% + \DeclareFixedFont{\tud@head@font@bold}{\encodingdefault}% + {\sfdefault}{\bfdefault}{\updefault}{\tud@head@fontsize}% +%<*poster> + \protected\gdef\tud@head@font@@bold{% + \usefont{\encodingdefault}{\sfdefault}{\bfdefault}{\updefault}% + }% +%</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@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> +%</body> +% \fi +% +% \Finale +% +\endinput |