summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/tudscr/source/tudscr-area.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/tudscr/source/tudscr-area.dtx')
-rw-r--r--macros/latex/contrib/tudscr/source/tudscr-area.dtx2317
1 files changed, 2317 insertions, 0 deletions
diff --git a/macros/latex/contrib/tudscr/source/tudscr-area.dtx b/macros/latex/contrib/tudscr/source/tudscr-area.dtx
new file mode 100644
index 0000000000..818f3e0097
--- /dev/null
+++ b/macros/latex/contrib/tudscr/source/tudscr-area.dtx
@@ -0,0 +1,2317 @@
+% \CheckSum{2247}
+% \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-area.dtx
+%<*dtx>
+% \fi%
+%
+\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi
+\ProvidesFile{tudscr-area.dtx}[2019/07/19 v2.06c TUD-Script\space%
+ (type or page area)%
+]
+%
+% \iffalse
+\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-area.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.05}{2015/07/06}{Seitenstil für Poster}^^A
+% \changes{v2.05}{2016/04/03}{Unterstützung von Schnittmarken mit den Paketen
+% \pkg{geometry} und \pkg{crop}}^^A
+%
+% \section{Der Satzspiegel für \TUDScript}
+%
+% Das \CD verlangt (eigentlich) einen fest vorgegebenen Satzspiegel. Für das
+% Setzen längerer wissenschaftlicher Abhandlungen ist dieser jedoch alles
+% andere als glücklich gewählt. Insbesondere für den doppelseitigen Satz ist
+% das Standardlayout nicht gut nutzbar. Für die \TUDScript-Klassen wird
+% deshalb die Abweichung vom sonst fest vorgegebenen Satzspiegel ermöglicht.
+% \ToDo{%
+% Unterstützung von PDF-Boxen für die Druckausgabe
+%^^A\url{https://groups.google.com/forum/#!topic/de.comp.text.tex/1gouJ0Zov6o}
+%^^A\url{http://tex.stackexchange.com/questions/248902/}
+%^^A\url{https://wiki.scribus.net/canvas/PDF_Boxes_:_mediabox,_cropbox,_bleedbox,_trimbox,_artbox}
+%^^A\url{http://www.prepressure.com/pdf/basics/page-boxes}
+% }[v2.07]
+%
+% \StopEventually{\PrintIndex\PrintChanges\PrintToDos}
+%
+% \iffalse
+%<*class&body>
+% \fi
+%
+% \subsection{Kompatibilität der Satzspiegeleinstellungen mit weiteren Paketen}
+% \subsubsection{Unterstützung von Schnittmarken mit dem Paket \pkg{crop}}
+%
+% Insbesondere für das Erstelen von Postern sollen häufig Schnittmarken auf dem
+% ausgegebenen Papierbogen erscheinen. Dies lässt sich entweder mit den Mitteln
+% des Paketes \pkg{geometry} oder aber durch das Paket \pkg{crop} realisieren.
+% Für letzteres ist dafür ein kleiner Patch notwendig.
+%
+% \begin{macro}{\if@tud@x@crop@center}
+% \changes{v2.05}{2016/04/03}{neu}^^A
+% \begin{macro}{\CROP@center}
+% \changes{v2.05}{2016/04/03}{neu}^^A
+% Das Paket \pkg{crop} bietet die Option, den Satzspiegel auf dem Papierbogen
+% zu zentrieren. Diese Einstellung geht beim Laden eines neuen Satzspiegels mit
+% \cs{loadgeometry} verloren. Hiermit wird das Problem behoben.
+% \begin{macrocode}
+\newif\if@tud@x@crop@center
+\AfterPackage{crop}{%
+ \CheckCommand*\CROP@center{%
+ \voffset\stockheight
+ \advance\voffset-\paperheight
+ \voffset.5\voffset
+ \hoffset\stockwidth
+ \advance\hoffset-\paperwidth
+ \hoffset.5\hoffset
+ }%
+ \pretocmd{\CROP@center}{%
+ \@tud@x@crop@centertrue%
+ }{}{\tud@patch@wrn{CROP@center}}%
+}
+% \end{macrocode}
+% \end{macro}^^A \CROP@center
+% \end{macro}^^A \if@tud@x@crop@center
+%
+% \subsubsection{Unterstützung der Klasse \cls{standalone}}
+%
+% \changes{v2.02}{2014/07/25}{Unterstützung der \cls{standalone}-Klasse}^^A
+%
+% Mit der Klasse~\cls{standalone} können insbesondere Grafiken als separate
+% (PDF-)Dateien erzeugt und später im Dokument eingebunden werden. Diese Klasse
+% ändert allerhand an den Einstellungen der Seitenränder. Damit sich diese bei
+% der Verwendung mit den \TUDScript-Klassen nicht in die Quere kommen, müssen
+% für einige Einstellungen unterdrückt werden.
+%
+% \begin{macro}{\if@tud@x@standalone@crop}
+% \changes{v2.02}{2014/09/08}{neu}^^A
+% Mit diesem Makro kann die Verwendung der Option \opt{crop} mit der Klasse
+% \cls{standalone} geprüft werden. Das erste Argument wird ausgeführt, wenn
+% die Klasse geladen und die Option aktiv ist. Das zweite Argument wird
+% ausgeführt, wenn entweder die Option \opt{crop} deaktiviert ist oder die
+% Klasse \cls{standalone} gar nicht geladen wurde.
+% \begin{macrocode}
+\newif\if@tud@x@standalone@crop
+\AfterClass*{standalone}{\let\if@tud@x@standalone@crop\ifsa@crop}
+% \end{macrocode}
+% \end{macro}^^A \if@tud@x@standalone@crop
+%
+% \subsection{Definition der Größen und Maße in abhängig vom Papierformat}
+%
+% Die \TUDScript-Klassen sollen neben den vom \CD vorgegebenen Seitenrändern
+% weitere Satzspiegel ermöglichen und u.\,a. auch die Nutzung des Paketes
+% \pkg{typearea} erlauben. Damit ein einheitliches Verfahren zur Wahl bzw.
+% Umschaltung des Satzspiegels genutzt werden kann, wird momentan das Paket
+% \pkg{geometry} genutzt. Dabei werden entweder die gewünschten Maße der
+% Seitenränder direkt gewählt oder aber die mit \pkg{typearea} berechneten Maße
+% an \pkg{geometry} durchgereicht.
+%
+% \begin{length}{\tud@len@widemargin}
+% \begin{length}{\tud@len@slimmargin}
+% \begin{length}{\tud@len@both}
+% Die Seitenränder für links und rechts sowie deren Summe, welche später für
+% weitere Satzspiegeleinstelungen dazu verwendet wird, diese anteilig zu
+% verteilen.
+% \begin{macrocode}
+\newlength\tud@len@widemargin
+\newlength\tud@len@slimmargin
+\newlength\tud@len@both
+% \end{macrocode}
+% \end{length}^^A \tud@len@both
+% \end{length}^^A \tud@len@slimmargin
+% \end{length}^^A \tud@len@widemargin
+% \begin{length}{\tud@len@topmargin}
+% \begin{length}{\tud@len@barheight}
+% \begin{length}{\tud@len@headsep}
+% \begin{length}{\tud@len@footsep}
+% Es folgen die speziellen Maße für die Seiten mit dem TUD-Kopf, also die Höhe
+% oberhalb des Querbalkens, die Höhe des Querbalkens selbst sowie der vertikale
+% (Mindest"~)Abstand zwischen Querbalken und Textkörper sowie der Fußzeile.
+% \begin{macrocode}
+\newlength\tud@len@topmargin
+\newlength\tud@len@barheight
+\newlength\tud@len@headsep
+\newlength\tud@len@footsep
+% \end{macrocode}
+% \end{length}^^A \tud@len@footsep
+% \end{length}^^A \tud@len@headsep
+% \end{length}^^A \tud@len@barheight
+% \end{length}^^A \tud@len@topmargin
+% \begin{length}{\tud@len@logox}
+% \begin{length}{\tud@len@logoy}
+% \begin{length}{\tud@len@logowidth}
+% Außerdem müssen Abmessungen und Position des TUD-Logos definiert werden,
+% genauer der horizontale (Soll"~)Abstand zwischen linkem Seitenrand und Logo,
+% der vertikale (Soll"~)Abstand zwischen oberem Seitenrand und Logo sowie die
+% Breite und Höhe\footnote{Proportionen sind durch die Grafik vorgegeben} des
+% Logos.
+% \begin{macrocode}
+\newlength\tud@len@logox
+\newlength\tud@len@logoy
+\newlength\tud@len@logowidth
+% \end{macrocode}
+% \end{length}^^A \tud@len@logowidth
+% \end{length}^^A \tud@len@logoy
+% \end{length}^^A \tud@len@logox
+% \begin{length}{\tud@len@line}
+% \changes{v2.02}{2014/06/23}{neu}^^A
+% \begin{length}{\tud@len@heavyline}
+% \begin{length}{\tud@len@thinline}
+% Die Linienstärke der Outline im Kopf ist für ein monochromes Layout schmaler
+% als im Layout mit farbigem Hintergrund.\footnote{monochrom
+% \cs{tud@len@thinline}, koloriert \cs{tud@len@heavyline}} Da im Dokument beide
+% Varianten vorkommen können, wird die Breite \cs{tud@len@line} durch den
+% Seitenstil situativ entweder auf den Wert von \cs{tud@len@thinline} oder aber
+% \cs{tud@len@heavyline} gesetzt.
+% \begin{macrocode}
+\newlength\tud@len@line
+\newlength\tud@len@heavyline
+\newlength\tud@len@thinline
+% \end{macrocode}
+% \end{length}^^A \tud@len@thinline
+% \end{length}^^A \tud@len@heavyline
+% \end{length}^^A \tud@len@line
+% \begin{length}{\tud@len@areaheadvskip}
+% \changes{v2.02}{2014/06/23}{neu}^^A
+% \begin{length}{\tud@len@areadiff}
+% \begin{length}{\tud@len@areavskip}
+% Die Längen für den vertikalen Standardversatz der Überschriften sowie die
+% Differenz der Kopfhöhen von normalem und TUD-Kopf-Satzspiegel. Die Differenz
+% zwischen den unterschiedlichen Kopfhöhen der Satzspiegelvarianten wird durch
+% \cs{tud@cdgeometry@@process} berechnet und dabei in \cs{tud@len@areadiff}
+% gespeichert. Dabei muss unterschieden werden, ober der Satzspiegel des \CDs
+% oder der durch \pkg{typearea} berechnete respektive durch den Anwender mit
+% \pkg{geometry} vorgegebene genutzt wird. Davon abhängig wird zum Ausgleich
+% die Länge \cs{tud@len@areavskip} definiert.
+% \begin{macrocode}
+\newlength\tud@len@areaheadvskip
+\newlength\tud@len@areadiff
+\newlength\tud@len@areavskip
+% \end{macrocode}
+% \end{length}^^A \tud@len@areavskip
+% \end{length}^^A \tud@len@areadiff
+% \end{length}^^A \tud@len@areaheadvskip
+% \begin{length}{\tud@len@ddcdiff}
+% \changes{v2.02}{2014/06/23}{neu}^^A
+% Zu guter Letzt noch die Länge \cs{tud@len@ddcdiff} für den Höhenausgleich des
+% Seitenfußes, welcher bei der Verwendung des \DDC-Logos in der Fußzeile bei
+% Version~v2.02 für den Satzspiegel notwendig war. Dieser etwas verschrobene
+% Satzspiegel wird im Kompatibilitätsmodus weiterhin angeboten.
+% \begin{macrocode}
+\tud@if@v@lower{2.03}{\newlength\tud@len@ddcdiff}{}
+% \end{macrocode}
+% \end{length}^^A \tud@len@ddcdiff
+% \begin{macro}{\tud@head@fontsize}
+% Für den Querbalken wird außerdem die zu verwendende Schriftgröße definiert.
+% \begin{macrocode}
+\newcommand*\tud@head@fontsize{}
+% \end{macrocode}
+% \end{macro}^^A \tud@head@fontsize
+% \begin{macro}{\tud@cdgeometry@set}
+% \changes{v2.03}{2015/01/23}{Längenberechnung für den Satzspiegel an
+% Referenzlänge \cs{tud@len@widemargin} gekoppelt}^^A
+% \changes{v2.05}{2015/07/15}{Fallunterscheidung an DIN-B-Reihe angepasst}^^A
+% \changes{v2.05}{2016/04/03}{Option \opt{layout} von \pkg{geometry} möglich}^^A
+% \begin{macro}{\if@tud@cdgeometry@adjust}
+% \changes{v2.05}{2015/11/29}{neu}^^A
+% \begin{macro}{\tud@cdgeometry@assignlayout}
+% \changes{v2.06}{2018/08/13}{neu}^^A
+% \begin{length}{\tud@len@layoutwidth}
+% \changes{v2.05}{2016/04/03}{neu}^^A
+% \begin{length}{\tud@len@layoutheight}
+% \changes{v2.05}{2016/04/03}{neu}^^A
+% \begin{length}{\tud@len@layouthoffset}
+% \changes{v2.05}{2016/04/03}{neu}^^A
+% \begin{length}{\tud@len@layoutvoffset}
+% \changes{v2.05}{2016/04/03}{neu}^^A
+% Hiermit werden in Abhängigkeit der gewählten Papiergröße die Maße für die
+% Größe der Kopfzeile, die Position des Logos, die Seitenränder sowie die
+% Schriftgröße in der Kopfzeile definiert. Aufgerufen wird der Befehl durch
+% \cs{tud@cdgeometry@@process}. Dabei fungiert \cs{tud@len@widemargin} als
+% Bezugslänge. Die maßgebliche Papiergröße ist DIN~A4 bzw. DIN~B4. Die Längen
+% für alle anderen Papiermaße unterscheiden sich um den Faktor~$\sqrt{2}$,
+% wobei das Format DIN~A5 nach den Vorgaben des \CDs übersprungen wird.
+%
+% Um die Überschriften und den Satzspiegel auch in diesem Fall vertikal richtig
+% zu positionieren, wird der Schalter \cs{if@tud@cdgeometry@adjust} benötigt.
+% Mit der Einstellung \opt{cdgeometry}|=|\val{adapted} wird auch das Format
+% DIN~A5 mit den skalierten Seitenrändern erstellt.
+% \begin{macrocode}
+\newif\if@tud@cdgeometry@adjust
+\newlength\tud@len@layoutwidth
+\newlength\tud@len@layoutheight
+\newlength\tud@len@layouthoffset
+\newlength\tud@len@layoutvoffset
+% \end{macrocode}
+% Mit \cs{tud@cdgeometry@assignlayout} wird die Layoutgröße, welche ggf. mit
+% dem Paket \pkg{geometry} angegeben wurde, entsprechend gesetzt.
+% \begin{macrocode}
+\newcommand*\tud@cdgeometry@assignlayout{%
+ \ifdim\tud@len@layoutwidth<\p@\relax%
+ \setlength\tud@len@layoutwidth{\paperwidth}%
+ \fi%
+ \ifdim\tud@len@layoutheight<\p@\relax%
+ \setlength\tud@len@layoutheight{\paperheight}%
+ \fi%
+}
+\newcommand*\tud@cdgeometry@set{%
+ \tud@cdgeometry@assignlayout%
+ \tud@if@v@lower{2.05}{%
+ \ifdim\tud@len@layoutheight<\dimexpr105mm+1.5mm\relax%
+ \def\@tempa{0}%
+ \else\ifdim\tud@len@layoutheight<\dimexpr148mm+1.5mm\relax%
+ \def\@tempa{1}%
+ \else\ifdim\tud@len@layoutheight<\dimexpr229mm+2mm\relax%
+ \def\@tempa{2}%
+ \else\ifdim\tud@len@layoutheight<\dimexpr297mm+2mm\relax%
+ \def\@tempa{3}%
+ \else\ifdim\tud@len@layoutheight<\dimexpr420mm+2mm\relax%
+ \def\@tempa{4}%
+ \else\ifdim\tud@len@layoutheight<\dimexpr594mm+2mm\relax%
+ \def\@tempa{5}%
+ \else\ifdim\tud@len@layoutheight<\dimexpr841mm+3mm\relax%
+ \def\@tempa{6}%
+ \else\ifdim\tud@len@layoutheight<\dimexpr1189mm+3mm\relax%
+ \def\@tempa{7}%
+ \else%
+ \def\@tempa{8}%
+ \fi\fi\fi\fi\fi\fi\fi\fi%
+ }{%
+ \ifdim\tud@len@layoutheight<\dimexpr125mm+1.5mm\relax%
+ \def\@tempa{0}%
+ \else\ifdim\tud@len@layoutheight<\dimexpr176mm+2mm\relax%
+ \def\@tempa{1}%
+ \else\ifdim\tud@len@layoutheight<\dimexpr250mm+2mm\relax%
+ \def\@tempa{2}%
+ \else\ifdim\tud@len@layoutheight<\dimexpr353mm+2mm\relax%
+ \def\@tempa{3}%
+ \else\ifdim\tud@len@layoutheight<\dimexpr500mm+2mm\relax%
+ \def\@tempa{4}%
+ \else\ifdim\tud@len@layoutheight<\dimexpr707mm+3mm\relax%
+ \def\@tempa{5}%
+ \else\ifdim\tud@len@layoutheight<\dimexpr1000mm+3mm\relax%
+ \def\@tempa{6}%
+ \else\ifdim\tud@len@layoutheight<\dimexpr1414mm+3mm\relax%
+ \def\@tempa{7}%
+ \else%
+ \def\@tempa{8}%
+ \fi\fi\fi\fi\fi\fi\fi\fi%
+ }%
+% \end{macrocode}
+% In Abhängigkeit von der gefundenen Gestaltungshöhe wird nun der Satzspiegel
+% definiert. Dabei wird geprüft, ob dieser im entweder innerhalb des durch das
+% \CD vorgegebenen Rasters erzeugt oder anhand der Gestaltungshöhe berechnet
+% werden soll.
+% \begin{macrocode}
+ \@tud@cdgeometry@adjustfalse%
+% \end{macrocode}
+% Eine Berechnung des Satzspiegels findet in jedem Fall außerhalb des Rasters
+% statt. Ansonsten wird DIN~A4 als Referenzformat ausgewählt.
+% \begin{macrocode}
+ \ifnum\tud@cdgeometry@calc@num=\tw@\relax%
+ \ifnum\@tempa>\z@\relax%
+ \ifnum\@tempa<8\relax%
+ \def\@tempa{3}%
+ \fi%
+ \fi%
+ \fi%
+% \end{macrocode}
+% Bei Formaten, welche kleiner als das Raster sind, wird die Gestaltungshöhe
+% für DIN~A6 als Referenz genommen, um den Satzspiegel zu brechnen.
+% \begin{macrocode}
+ \ifcase\@tempa\relax% <=A7/B7
+ \ifnum\tud@cdgeometry@calc@num=\tw@\relax\else%
+ \ClassWarning{\TUD@Class@Name}{%
+ There's no type area defined for such a\MessageBreak%
+ small paper height. It is recommended to increase\MessageBreak%
+ the paper size. Nevertheless, it will be tried to\MessageBreak%
+ calculate a proper type area%
+ }%
+ \fi%
+ \tud@divide\@tempa{\tud@len@layoutheight}{148mm}%
+ \setlength\tud@len@widemargin{15mm}%
+ \setlength\tud@len@widemargin{\@tempa\tud@len@widemargin}%
+ \setlength\tud@len@heavyline{0.5pt}%
+ \setlength\tud@len@heavyline{\@tempa\tud@len@heavyline}%
+ \setlength\tud@len@thinline{0.25pt}%
+ \setlength\tud@len@thinline{\@tempa\tud@len@thinline}%
+ \setlength\@tempdima{4.5pt}%
+ \setlength\@tempdima{\@tempa\@tempdima}%
+ \edef\tud@head@fontsize{\strip@pt\@tempdima}%
+ \or% <=A6/B6
+ \setlength\tud@len@widemargin{15mm}%
+ \setlength\tud@len@heavyline{0.5pt}%
+ \setlength\tud@len@thinline{0.25pt}%
+ \renewcommand*\tud@head@fontsize{4.5}%
+% \end{macrocode}
+% Für Formate der Klasse~5 gibt es zwei Varianten. Entweder, es wird sich an
+% das Raster des \CDs geahtlen oder es wird ein eigener Satzspiegel für das
+% Papierformat definiert. Wird das Raster gehalten, muss bei den Überschriften
+% etwas getrickst werden, weshalb der Schalter \cs{if@tud@cdgeometry@adjust}
+% gesetzt wird.
+% \begin{macrocode}
+ \or% <=A5/B5
+ \ifnum\tud@cdgeometry@calc@num=\z@\relax% restricted
+ \@tud@cdgeometry@adjusttrue%
+ \setlength\tud@len@widemargin{30mm}%
+ \setlength\tud@len@heavyline{1pt}%
+ \setlength\tud@len@thinline{0.5pt}%
+ \renewcommand*\tud@head@fontsize{9}%
+ \else%
+ \setlength\tud@len@widemargin{21.213203mm}%
+ \setlength\tud@len@heavyline{0.707107pt}%
+ \setlength\tud@len@thinline{0.353553pt}%
+ \renewcommand*\tud@head@fontsize{6.363961}%
+ \fi%
+ \or% <=A4/B4
+ \setlength\tud@len@widemargin{30mm}%
+ \setlength\tud@len@heavyline{1pt}%
+ \setlength\tud@len@thinline{0.5pt}%
+ \renewcommand*\tud@head@fontsize{9}%
+ \or% <=A3/B3
+ \setlength\tud@len@widemargin{42.426407mm}%
+ \setlength\tud@len@heavyline{1.414214pt}%
+ \setlength\tud@len@thinline{0.707107pt}%
+ \renewcommand*\tud@head@fontsize{12.727922}%
+ \or% <=A2/B2
+ \setlength\tud@len@widemargin{60mm}%
+ \setlength\tud@len@heavyline{2pt}%
+ \setlength\tud@len@thinline{1pt}%
+ \renewcommand*\tud@head@fontsize{18}%
+ \or% <=A1/B1
+ \setlength\tud@len@widemargin{84.852814mm}%
+ \setlength\tud@len@heavyline{2.828427pt}%
+ \setlength\tud@len@thinline{1.414214pt}%
+ \renewcommand*\tud@head@fontsize{25.455844}%
+ \or% <=A0/B0
+ \setlength\tud@len@widemargin{120mm}%
+ \setlength\tud@len@heavyline{4pt}%
+ \setlength\tud@len@thinline{2pt}%
+ \renewcommand*\tud@head@fontsize{36}%
+ \else% >A0/B0
+% \end{macrocode}
+% Wei bei zu kleinen Formaten wird auch bei Formaten oberhalb des Rasters die
+% der Satzspiegel aus der Gestaltungshöhe berechnet, wobei hier DIN~A0 als
+% Referenz verwendet wird.
+% \begin{macrocode}
+ \ifnum\tud@cdgeometry@calc@num=\tw@\relax\else%
+ \ClassWarning{\TUD@Class@Name}{%
+ There's no type area defined for such a\MessageBreak%
+ huge paper height. It is recommended to reduce\MessageBreak%
+ the paper size. Nevertheless, it will be tried to\MessageBreak%
+ calculate a proper type area%
+ }%
+ \fi%
+ \tud@divide\@tempa{\tud@len@layoutheight}{1189mm}%
+ \setlength\tud@len@widemargin{120mm}%
+ \setlength\tud@len@widemargin{\@tempa\tud@len@widemargin}%
+ \setlength\tud@len@heavyline{4pt}%
+ \setlength\tud@len@heavyline{\@tempa\tud@len@heavyline}%
+ \setlength\tud@len@thinline{2pt}%
+ \setlength\tud@len@thinline{\@tempa\tud@len@thinline}%
+ \setlength\@tempdima{36pt}%
+ \setlength\@tempdima{\@tempa\@tempdima}%
+ \edef\tud@head@fontsize{\strip@pt\@tempdima}%
+ \fi%
+% \end{macrocode}
+% Wurde die Berechnung aktiviert, dann erfolgt diese anhand der Referenz im
+% Format DIN~A4.
+% \begin{macrocode}
+ \ifnum\tud@cdgeometry@calc@num=\tw@\relax%
+ \tud@divide\@tempa{\tud@len@layoutheight}{297mm}%
+ \setlength\tud@len@widemargin{\@tempa\tud@len@widemargin}%
+ \setlength\tud@len@heavyline{\@tempa\tud@len@heavyline}%
+ \setlength\tud@len@thinline{\@tempa\tud@len@thinline}%
+ \setlength\@tempdima{\tud@head@fontsize pt}%
+ \setlength\@tempdima{\@tempa\@tempdima}%
+ \edef\tud@head@fontsize{\strip@pt\@tempdima}%
+ \fi%
+% \end{macrocode}
+% Zum Schluss werden die restlichen Längen aus der Referenzlänge berechnet und
+% das Erstellen der Kopfzeile aufgrund der möglichen Änderung der Schriftgröße
+% forciert.
+% \begin{macrocode}
+ \global\@tud@head@font@settrue%
+ \setlength\tud@len@slimmargin{\dimexpr2\tud@len@widemargin/3\relax}%
+ \setlength\tud@len@both{\dimexpr5\tud@len@widemargin/3\relax}%
+ \setlength\tud@len@topmargin{\dimexpr7\tud@len@widemargin/6\relax}%
+ \setlength\tud@len@barheight{\dimexpr\tud@len@widemargin/6\relax}%
+ \setlength\tud@len@headsep{\dimexpr2\tud@len@widemargin/5\relax}%
+ \setlength\tud@len@logox{\dimexpr1.1\tud@len@widemargin/3\relax}%
+ \setlength\tud@len@logoy{\dimexpr0.45\tud@len@widemargin\relax}%
+ \setlength\tud@len@logowidth{\dimexpr1.9\tud@len@widemargin\relax}%
+ \setlength\tud@len@footsep{%
+ \dimexpr\tud@len@widemargin-.6\tud@len@topmargin\relax%
+ }%
+% \end{macrocode}
+% Wird die Gestaltungshöhe DIN~A5 im Raster verwendet, werden die Abstände
+% zwischen Kopf- unf Fußzeile angepasst.
+% \begin{macrocode}
+ \if@tud@cdgeometry@adjust%
+ \setlength\tud@len@headsep{\dimexpr.707107\tud@len@headsep\relax}%
+ \setlength\tud@len@footsep{\dimexpr.707107\tud@len@footsep\relax}%
+ \fi%
+}
+% \end{macrocode}
+% \end{length}^^A \tud@len@layoutvoffset
+% \end{length}^^A \tud@len@layouthoffset
+% \end{length}^^A \tud@len@layoutheight
+% \end{length}^^A \tud@len@layoutwidth
+% \end{macro}^^A \tud@cdgeometry@assignlayout
+% \end{macro}^^A \if@tud@cdgeometry@adjust
+% \end{macro}^^A \tud@cdgeometry@set
+%
+% \iffalse
+%</class&body>
+%<*class&option>
+% \fi
+%
+% \begin{macro}{\tud@cdgeometry@reset}
+% \changes{v2.06}{2018/08/17}{neu}^^A
+% \begin{macro}{\if@tud@cdgeometry@reset}
+% \changes{v2.06}{2018/08/17}{neu}^^A
+% Mit diesem Befehl wird das Laden von zuvor definierte Satzspiegeln durch die
+% Option \opt{cdgeometry} temporär deaktiviert. Dies geschieht, um lediglich
+% die im Hintergrund verwendeten Makros neu zu setzen.
+% \begin{macrocode}
+\newif\if@tud@cdgeometry@reset
+\newcommand*\tud@cdgeometry@reset[1]{%
+ \@tud@cdgeometry@resettrue%
+ \TUDoptions{cdgeometry=#1}%
+ \@tud@cdgeometry@resetfalse%
+}
+% \end{macrocode}
+% \end{macro}^^A \if@tud@cdgeometry@reset
+% \end{macro}^^A \tud@cdgeometry@reset
+% \subsection{Optionen für den Satzspiegel}
+% \begin{option}{cdgeometry}
+% \changes{v2.05}{2016/03/06}{\val{custom} neu}^^A
+% \begin{macro}{\tud@cdgeometry@num}
+% \begin{macro}{\if@tud@cdgeometry@num@locked}
+% \begin{macro}{\tud@cdgeometry@calc@num}
+% \changes{v2.05}{2015/11/29}{neu}^^A
+% Für das \CD sind standardmäßig feste Seitenränder vorgegeben. Diese sind
+% jedoch leider nur aus gestalterischen Motiven und ohne die Beachtung
+% typographischer Belange gewählt und festgelegt worden. Beispielweise ist ein
+% doppelseitiger Satz einer Abschlussarbeit im \CD nur mit einem grauenhaften
+% Satzspiegel möglich. Um dem Anwender einen gewissen Spielraum zu geben, wird
+% alternativ zum asymmetrischen (\opt{geometry}|=|\val{on}) ein symmetrischer
+% Satzspiegel bereitgestellt (\opt{geometry}|=|\val{normal}), welcher bei
+% einseitigem Satz zentriert ist und bei zweiseitigem Satz den inneren Rand
+% kleiner setzt als den äußeren. Des Weiteren kann die Satzspiegelberechnung
+% auch direkt durch das Paket \pkg{typearea} aus dem \KOMAScript-Paket erfolgen
+% (\opt{geometry}|=|\val{no}). Mit \cs{tud@cdgeometry@@process} werden alle
+% getroffenen Satzspiegeloptionen umgesetzt und nachfolgend definiert.
+% \begin{macrocode}
+\tud@locked@newnum{tud@cdgeometry@num}{0}
+\newcommand*\tud@cdgeometry@calc@num{0}
+\TUD@key{cdgeometry}[true]{%
+ \TUD@set@numkey{cdgeometry}{@tempa}{%
+ \TUD@bool@numkey,%
+ {typearea}{0},%
+ {cd}{1},{tud}{1},{asymmetric}{1},%
+ {symmetric}{2},{centred}{2},{centered}{2},%
+ {normal}{2},{standard}{2},{std}{2},%
+ {twoside}{3},{balanced}{3},%
+ {oneside}{4},%
+ {restricted}{5},%
+ {adapted}{6},{adapt}{6},{adapting}{6},{unrestricted}{6},%
+ {calculated}{7},{calc}{7},{calculate}{7},{calculating}{7},%
+ {custom}{8},{user}{8},{package}{8}%
+ }{#1}%
+ \ifx\FamilyKeyState\FamilyKeyStateProcessed%
+ \ifcase\@tempa\relax% false/typearea
+ \tud@locked@num@set{tud@cdgeometry@num}{0}%
+ \or% true/cd
+ \tud@locked@num@set{tud@cdgeometry@num}{2}%
+ \or% symmetric
+ \tud@locked@num@set{tud@cdgeometry@num}{3}%
+ \or% twoside
+ \tud@locked@num@set{tud@cdgeometry@num}{4}%
+ \TUD@KOMAoptions{twoside=true}%
+ \or% oneside
+ \ifnum\tud@cdgeometry@num>\thr@@\relax%
+ \tud@locked@num@set{tud@cdgeometry@num}{3}%
+ \fi%
+ \TUD@KOMAoptions{twoside=false}%
+ \or% restricted
+ \tud@locked@num@preset{tud@cdgeometry@num}{2}%
+ \renewcommand*\tud@cdgeometry@calc@num{0}%
+ \or% adapted
+ \tud@locked@num@preset{tud@cdgeometry@num}{2}%
+ \renewcommand*\tud@cdgeometry@calc@num{1}%
+ \or% calculated
+ \tud@locked@num@preset{tud@cdgeometry@num}{2}%
+ \renewcommand*\tud@cdgeometry@calc@num{2}%
+ \or% custom
+ \tud@locked@num@set{tud@cdgeometry@num}{1}%
+ \fi%
+% \end{macrocode}
+% Innerhalb des Dokumentes kann die Option genutzt werden, um zwischen den
+% unterschiedlichen Satzspiegeln zu wechseln. Da bei der Konstruktion dieser
+% die internen Längen verwendet werden, welche von \pkg{typearea} respektive
+% \pkg{geometry} definiert werden, muss beim Umschalten der jeweils zuletzt
+% definierte Satzspiegel geladen werden. Falls jedoch eine Neuberechnung
+% erfolgte, wird auf das Laden verzichtet (\cs{if@tud@cdgeometry@reset}).
+% \begin{macrocode}
+ \if@atdocument%
+ \if@tud@cdgeometry@reset\else%
+ \ifcase\tud@cdgeometry@num\relax%
+ \tud@loadgeometry{current@typearea}%
+ \@tud@x@geometry@fixmarginstrue%
+ \or%
+ \tud@loadgeometry{current@custom}%
+ \@tud@x@geometry@fixmarginstrue%
+ \fi%
+ \TUD@SpecialOptionAtDocument{tud@cdgeometry@process}%
+ \fi%
+ \fi%
+ \fi%
+}
+% \end{macrocode}
+% \end{macro}^^A \tud@cdgeometry@calc@num
+% \end{macro}^^A \if@tud@cdgeometry@num@locked
+% \end{macro}^^A \tud@cdgeometry@num
+% \end{option}^^A cdgeometry
+% \begin{option}{extrabottommargin}
+% \begin{macro}{\tud@dim@extrabottommargin}
+% Diese Option dient dazu, die Höhe des Fußes anzupassen. Dies ist jedoch nur
+% möglich, wenn der Satzspiegel des \CDs verwendet wird. Kommt \pkg{typearea}
+% zum Einsatz, ist die Option wirkungslos. Da für die Länge ggf. auch Werte
+% angegeben werden können, die abhängig von der Schriftgröße sind, wird die
+% Ausführung dieser Option verzögert.
+% \begin{macrocode}
+\newcommand*\tud@dim@extrabottommargin{\z@}
+\TUD@key{extrabottommargin}{%
+ \TUD@set@dimenkey{extrabottommargin}{\tud@dim@extrabottommargin}{#1}%
+ \ifx\FamilyKeyState\FamilyKeyStateProcessed%
+ \TUD@SpecialOptionAtDocument{tud@cdgeometry@process}%
+ \fi%
+}
+% \end{macrocode}
+% \end{macro}^^A \tud@dim@extrabottommargin
+% \begin{option}{bleedmargin}
+% \changes{v2.05}{2016/06/14}{neu}^^A
+% \begin{macro}{\tud@dim@bleedmargin}
+% \changes{v2.05}{2016/04/03}{neu}^^A
+% Wird entweder das Paket \pkg{crop} oder aber die Option \opt{layout} des
+% Paketes \pkg{geometry} für Schnittmarken verwendet, werden alle farbigen
+% Elemente des Layouts dahingehend vergrößert, dass beim Zuschneiden des
+% Papierbogens \emph{in die Farbe} geschnitten wird. Verantwortlich hierfür ist
+% das Makro \cs{tud@dim@bleedmargin}, welches natürlich auch vom Anwender mit
+% der Option \opt{bleedmargin} beliebig gesetzt werden kann. Als Standardwert
+% werden 5\% der größten Randbreite gesetzt.
+% \begin{macrocode}
+\newcommand*\tud@dim@bleedmargin{.2in}
+\TUD@key{bleedmargin}{%
+ \TUD@set@dimenkey{bleedmargin}{\tud@dim@bleedmargin}{#1}%
+% \end{macrocode}
+% Negative Werte sind nicht möglich, diese werden automatisch korrigiert.
+% \begin{macrocode}
+ \ifx\FamilyKeyState\FamilyKeyStateProcessed%
+ \ifdim\dimexpr\tud@dim@bleedmargin\relax<\z@\relax%
+ \def\@tempa-##1\@nil{\def\tud@dim@bleedmargin{##1}}%
+ \@tempa#1\@nil%
+ \fi%
+ \fi%
+}
+% \end{macrocode}
+% \end{macro}^^A \tud@dim@bleedmargin
+% \end{option}^^A bleedmargin
+% \end{option}^^A extrabottommargin
+% \begin{option}{twoside}
+% \begin{option}{twocolumn}
+% Sollte einer der beiden \KOMAScript-Optionen im Dokument nach der Präambel
+% verwendet werden, erfolgt die Anpassung des Satzspiegels.
+% \begin{macrocode}
+\DefineFamilyMember{KOMA}
+\DefineFamilyKey{KOMA}{twoside}{%
+ \TUD@SpecialOptionAtDocument{tud@cdgeometry@process}%
+ \FamilyKeyStateProcessed%
+}
+\DefineFamilyKey{KOMA}{twocolumn}{%
+ \TUD@SpecialOptionAtDocument{tud@cdgeometry@process}%
+ \FamilyKeyStateProcessed%
+}
+% \end{macrocode}
+% \end{option}^^A twocolumn
+% \end{option}^^A twoside
+%
+% \iffalse
+%</class&option>
+%<*class&body>
+% \fi
+%
+% \subsection{Realisierung der Satzspiegeleinstellungen}
+% Das Paket \pkg{geometry} erlaubt eine genaue Vorgabe des Satzspiegels und
+% der Seitenränder, wie es vom \CD der \TnUD verlangt wird.
+% \ToDo{Satzspiegel ohne \pkg{geometry}; besser über \cs{storeareas}?!}[v2.07]%
+% \ToDo{Benutzerschnittstelle äquivalent zu \pkg{geometry}}[v2.07]%
+% \begin{macro}{\tud@cdgeometry@process}
+% \changes{v2.05}{2015/11/29}{neu}^^A
+% Mit \cs{tud@cdgeometry@process} bzw. \cs{tud@cdgeometry@@process} erfolgt die
+% Festlegung des Satzspiegels. Für die Erstellung des Satzspiegels wird das
+% Paket \pkg{geometry} verwendet. Mit der Option (\opt{cdgeometry}|=|\val{no})
+% wird jedoch der von \pkg{typearea} berechnete Satzspiegel an \pkg{geometry}
+% weitergereicht. Somit wird es möglich, unabhängig vom genutzten Paket
+% (\pkg{typearea} oder \pkg{geometry}) zur Festlegung des Satzspiegels, diesen
+% innerhalb des Dokumentes zu ändern.
+% \begin{macrocode}
+\newcommand*\tud@cdgeometry@process{%
+ \tud@cdgeometry@@process%
+ \KOMAoptions{pagesize=\@pagesizelast}%
+% \end{macrocode}
+% Nachder Änderung des Satzspiegels werden alle Logoboxen neu erstellt.
+% \begin{macrocode}
+ \global\@tud@mainlogo@settrue%
+% \end{macrocode}
+% Damit Änderungen am Satzspiegel im Dokument sicher übernommen werden, wird
+% das Setzen des Satzspiegels forciert. Dafür wird \cs{tud@currentgeometry}
+% zurückgesetzt und anschließend der aktuelle Seitenstil erneut geladen, um das
+% erneute Ausführen von \cs{tud@BeforeSelectAnyPageStyle} zu erzwingen.
+% \begin{macrocode}
+ \gdef\tud@currentgeometry{}%
+ \expandafter\pagestyle\expandafter{\currentpagestyle}%
+}
+% \end{macrocode}
+% \end{macro}^^A \tud@cdgeometry@process
+% Wurde die \cls{standalone}-Klasse mit der Option \opt{crop} geladen, werden
+% sämtliche Einstellungen für den Satzspiegel unterdrückt.
+% \begin{macrocode}
+\if@tud@x@standalone@crop
+ \PreventPackageFromLoading{geometry}%
+ \let\tud@cdgeometry@process\relax%
+\else
+ \RequirePackage{geometry}[2010/09/12]%
+\fi%
+\AfterPackage*{geometry}{%
+ \CheckCommand*\Gm@initnewgm{%
+ \Gm@passfalse
+ \Gm@swap@papersizefalse
+ \Gm@dimlist={}
+ \Gm@hbodyfalse
+ \Gm@vbodyfalse
+ \Gm@heightroundedfalse
+ \Gm@includeheadfalse
+ \Gm@includefootfalse
+ \Gm@includempfalse
+ \let\Gm@width\@undefined
+ \let\Gm@height\@undefined
+ \let\Gm@textwidth\@undefined
+ \let\Gm@textheight\@undefined
+ \let\Gm@lines\@undefined
+ \let\Gm@hscale\@undefined
+ \let\Gm@vscale\@undefined
+ \let\Gm@hmarginratio\@undefined
+ \let\Gm@vmarginratio\@undefined
+ \let\Gm@lmargin\@undefined
+ \let\Gm@rmargin\@undefined
+ \let\Gm@tmargin\@undefined
+ \let\Gm@bmargin\@undefined
+ \Gm@layoutfalse
+ \Gm@layouthoffset\z@
+ \Gm@layoutvoffset\z@
+ \Gm@bindingoffset\z@
+ }%
+ \expandafter\CheckCommand%
+ \csname\expandafter\@gobble\string\Gm@changelayout\space\endcsname{%
+ \setlength{\@colht}{\textheight}
+ \setlength{\@colroom}{\textheight}%
+ \setlength{\vsize}{\textheight}
+ \setlength{\columnwidth}{\textwidth}%
+ \if@twocolumn%
+ \advance\columnwidth-\columnsep
+ \divide\columnwidth\tw@%
+ \@firstcolumntrue%
+ \fi%
+ \setlength{\hsize}{\columnwidth}%
+ \setlength{\linewidth}{\hsize}%
+ }%
+ \CheckCommand*\Gm@@process{%
+ \Gm@expandlengths
+ \Gm@adjustpaper
+ \addtolength\Gm@layoutwidth{-\Gm@bindingoffset}%
+ \Gm@adjustmp
+ \Gm@adjustbody
+ \Gm@detall{h}{width}{lmargin}{rmargin}%
+ \Gm@detall{v}{height}{tmargin}{bmargin}%
+ \setlength\textwidth{\Gm@width}%
+ \setlength\textheight{\Gm@height}%
+ \setlength\topmargin{\Gm@tmargin}%
+ \setlength\oddsidemargin{\Gm@lmargin}%
+ \addtolength\oddsidemargin{-1\Gm@truedimen in}%
+ \ifGm@includemp
+ \advance\textwidth-\Gm@wd@mp
+ \advance\oddsidemargin\Gm@odd@mp
+ \fi
+ \if@mparswitch
+ \setlength\evensidemargin{\Gm@rmargin}%
+ \addtolength\evensidemargin{-1\Gm@truedimen in}%
+ \ifGm@includemp
+ \advance\evensidemargin\Gm@even@mp
+ \fi
+ \else
+ \evensidemargin\oddsidemargin
+ \fi
+ \advance\oddsidemargin\Gm@bindingoffset
+ \addtolength\topmargin{-1\Gm@truedimen in}%
+ \ifGm@includehead
+ \addtolength\textheight{-\headheight}%
+ \addtolength\textheight{-\headsep}%
+ \else
+ \addtolength\topmargin{-\headheight}%
+ \addtolength\topmargin{-\headsep}%
+ \fi
+ \ifGm@includefoot
+ \addtolength\textheight{-\footskip}%
+ \fi
+ \ifGm@heightrounded
+ \setlength\@tempdima{\textheight}%
+ \addtolength\@tempdima{-\topskip}%
+ \@tempcnta\@tempdima
+ \@tempcntb\baselineskip
+ \divide\@tempcnta\@tempcntb
+ \setlength\@tempdimb{\baselineskip}%
+ \multiply\@tempdimb\@tempcnta
+ \advance\@tempdima-\@tempdimb
+ \multiply\@tempdima\tw@
+ \ifdim\@tempdima>\baselineskip
+ \addtolength\@tempdimb{\baselineskip}%
+ \fi
+ \addtolength\@tempdimb{\topskip}%
+ \textheight\@tempdimb
+ \fi
+ \advance\oddsidemargin\Gm@layouthoffset%
+ \advance\evensidemargin\Gm@layouthoffset%
+ \advance\topmargin\Gm@layoutvoffset%
+ \addtolength\Gm@layoutwidth{\Gm@bindingoffset}%
+ }%
+ \CheckCommand\geometry[1]{%
+ \Gm@clean
+ \setkeys{Gm}{#1}%
+ \Gm@process%
+ }%
+ \CheckCommand\newgeometry[1]{%
+ \clearpage
+ \Gm@restore@org
+ \Gm@initnewgm
+ \Gm@newgmtrue
+ \setkeys{Gm}{#1}%
+ \Gm@newgmfalse
+ \Gm@process
+ \ifnum\mag=\@m\else\Gm@magtooffset\fi
+ \Gm@changelayout
+ \Gm@showparams{newgeometry}%
+ }%
+ \CheckCommand\restoregeometry{%
+ \clearpage
+ \Gm@restore@pkg
+ \Gm@changelayout%
+ }%
+ \CheckCommand*\savegeometry[1]{%
+ \Gm@save
+ \expandafter\edef\csname Gm@restore@@#1\endcsname{\Gm@restore}%
+ }%
+ \CheckCommand*\loadgeometry[1]{%
+ \clearpage
+ \@ifundefined{Gm@restore@@#1}{%
+ \PackageError{geometry}{%
+ \string\loadgeometry : name `#1' undefined}{%
+ The name `#1' should be predefined with \string\savegeometry}%
+ }{\@nameuse{Gm@restore@@#1}%
+ \Gm@changelayout}%
+ }%
+% \end{macrocode}
+% \begin{macro}{\geometry}
+% \begin{macro}{\newgeometry}
+% \begin{macro}{\restoregeometry}
+% \begin{macro}{\Gm@changelayout}
+% \begin{macro}{\if@tud@x@geometry@enabled}
+% \changes{v2.05}{2016/03/06}{neu}^^A
+% \begin{macro}{\tud@x@geometry@fixmargins}
+% \changes{v2.06}{2018/08/13}{neu}^^A
+% \begin{macro}{\if@tud@x@geometry@fixmargins}
+% \changes{v2.06}{2018/08/13}{neu}^^A
+% Für einen benutzerdefinierten Satzspiegel ist es notwendig, die durch den
+% Anwender in der Präambel getätigten Einstellungen zu sichern und am Ende der
+% Präambel für die unterschiedlichen, durch die Klasse benötigten Satzspiegel
+% der einzelnen Seitenstile umzusetzen. Dabei werden auch etwaige Optionen von
+% \KOMAScript{} beachtet. Hierfür werden die originalen Befehle \cs{geometry}
+% und \cs{newgeometry} angepasst, weshalb diese vorher gesichert werden.
+% \begin{macrocode}
+ \newif\if@tud@x@geometry@enabled%
+ \@tud@x@geometry@enabledtrue%
+ \tud@cs@store{geometry}%
+ \tud@cs@store{newgeometry}%
+ \renewcommand*\geometry[1]{%
+ \tud@x@geometry@user{#1}{geometry}%
+ }%
+ \renewcommand*\newgeometry[1]{%
+ \tud@cs@store{Gm@restore@org}%
+ \tud@x@geometry@user{#1}{newgeometry}%
+ \tud@cs@restore{Gm@restore@org}%
+ }%
+% \end{macrocode}
+% Bei der Verwendung von \cs{restoregeometry} wird der am Ende der Präambel
+% der passend zur entsprechende Einstellung von \opt{cdgeometry} gesicherte
+% Satzspiegel geladen. Über das optinale Argument kann der gewünschte Wert für
+% die Option \opt{cdgeometry} angegeben werden.
+% \begin{macrocode}
+ \renewcommand*\restoregeometry[1][custom]{%
+ \tud@cdgeometry@reset{#1}%
+ \if@atdocument%
+ \ifcase\tud@cdgeometry@num\relax% false
+ \tud@loadgeometry{init@typearea}%
+ \@tud@x@geometry@fixmarginstrue%
+ \or% custom
+ \tud@loadgeometry{init@custom}%
+ \@tud@x@geometry@fixmarginstrue%
+ \fi%
+ \tud@cdgeometry@process%
+ \fi%
+ }%
+% \end{macrocode}
+% Sollte im Dokument durch den Anwender der Satzspiegel manuell geändert
+% werden, muss darauf reagiert und die unterschiedlichen Satzspiegel der Klasse
+% angepasst werden. Hierfür wird am Ende von \cs{Gm@changelayout} ein Patch
+% eingehängt.
+% \begin{macrocode}
+ \apptocmd{\Gm@changelayout}{%
+ \if@tud@x@geometry@enabled%
+ \if@atdocument%
+ \@tud@x@geometry@fixmarginstrue%
+ \tud@cdgeometry@reset{custom}%
+ \tud@cdgeometry@process%
+ \fi%
+ \fi%
+ }{}{\tud@patch@wrn{Gm@changelayout}}%
+% \end{macrocode}
+% Das Paket \pkg{geometry} bietet die Möglichkeit, den kompletten Satzspiegel
+% bzw. das Layout mit einem Offset zu beaufschlagen. Dieser wird den Längen
+% \cs{oddsidemargin} und \cs{evensidemargin} bzw. \cs{topmargin} zugeschlagen.
+% Da intern jedoch diese Längen nach der einmaligen Anwendung der Nutzerbefehle
+% mehrmals wiederverwendet werden, müssen diese u.U. korrigert bzw. auf ihren
+% ursprünglichen Wert zurückgesetzt werden.
+% \begin{macrocode}
+ \newif\if@tud@x@geometry@fixmargins%
+ \newcommand*\tud@x@geometry@fixmargins{%
+ \ifGm@pass\else%
+ \addtolength\oddsidemargin{-\tud@len@layouthoffset}%
+ \addtolength\evensidemargin{-\tud@len@layouthoffset}%
+ \addtolength\topmargin{-\tud@len@layoutvoffset}%
+ \@tud@x@geometry@fixmarginsfalse%
+ \fi%
+ }%
+% \end{macrocode}
+% \end{macro}^^A \if@tud@x@geometry@fixmargins
+% \end{macro}^^A \tud@x@geometry@fixmargins
+% \end{macro}^^A \if@tud@x@geometry@enabled
+% \end{macro}^^A \Gm@changelayout
+% \end{macro}^^A \restoregeometry
+% \end{macro}^^A \newgeometry
+% \end{macro}^^A \geometry
+% \begin{macro}{\tud@x@geometry@user}
+% \changes{v2.05}{2016/03/06}{neu}^^A
+% \begin{parameter}{paper}
+% \begin{parameter}{papername}
+% \begin{parameter}{paperwidth}
+% \begin{parameter}{paperheight}
+% \begin{parameter}{papersize}
+% \begin{parameter}{layout}
+% \begin{parameter}{layoutname}
+% \begin{parameter}{layoutwidth}
+% \begin{parameter}{layoutheight}
+% \begin{parameter}{layoutsize}
+% \begin{parameter}{bleedmargin}
+% \begin{macro}{\tud@x@geometry@area@def}
+% \changes{v2.05}{2016/03/06}{neu}^^A
+% \begin{macro}{\tud@x@geometry@area@set}
+% \changes{v2.05}{2016/03/06}{neu}^^A
+% \begin{macro}{\tud@x@geometry@paper}
+% \changes{v2.05}{2016/07/20}{neu}^^A
+% \begin{macro}{\tud@x@geometry@layout}
+% \changes{v2.05}{2016/07/20}{neu}^^A
+% \begin{macro}{\tud@x@geometry@parameter}
+% \changes{v2.05}{2016/07/20}{neu}^^A
+% \begin{macro}{\tud@x@geometry@init}
+% \changes{v2.05}{2016/03/06}{neu}^^A
+% Bei der Redefinition der Befehle \cs{geometry} und \cs{newgeometry} kommt
+% intern das Makro \cs{tud@x@geometry@user} zum Einsatz, womit kleinere
+% Feinheiten zwischen den beiden Befehlen unterschieden werden können.
+% \begin{macrocode}
+ \newcommand*\tud@x@geometry@paper{}%
+ \newcommand*\tud@x@geometry@layout{}%
+ \newcommand*\tud@x@geometry@parameter{}%
+ \newcommand*\tud@x@geometry@init{}%
+ \newcommand*\tud@x@geometry@user[2]{%
+ \let\tud@x@geometry@paper\@empty%
+ \let\tud@x@geometry@layout\@empty%
+ \let\tud@x@geometry@parameter\@empty%
+ \TUD@parameter@set{geometry}{#1}%
+ \ifx\tud@x@geometry@layout\@empty\else%
+ \begingroup%
+ \tud@x@geometry@area@set{layout}%
+ \edef\tud@res@a{%
+ \endgroup%
+ \noexpand\setlength\noexpand\tud@len@layoutwidth{\the\paperwidth}%
+ \noexpand\setlength\noexpand\tud@len@layoutheight{\the\paperheight}%
+ }%
+ \tud@res@a%
+ \fi%
+ \tud@x@geometry@area@set{paper}%
+ \ifstr{#2}{newgeometry}{%
+ \eappto\Gm@restore@org{%
+ \noexpand\paperwidth=\the\paperwidth\relax%
+ \noexpand\paperheight=\the\paperheight\relax%
+ }%
+ \tud@x@geometry@getlayout{\tud@res@a}%
+ \epreto\tud@x@geometry@parameter{\tud@res@a,}%
+ \def\tud@res@a{\tud@cs@use{newgeometry}}%
+ \expandafter\tud@res@a\expandafter{\tud@x@geometry@parameter}%
+ \edef\tud@x@geometry@init{\tud@x@geometry@parameter}%
+ }{%
+ \eappto\tud@x@geometry@init{\tud@x@geometry@parameter}%
+ }%
+ }%
+% \end{macrocode}
+% Das folgende Konstrukt ist aus der Idee entstanden, die Parameter \val{paper}
+% sowie \val{layout} des Paketes \pkg{geometry} auf die passenden Optionen von
+% \KOMAScript{} abbilden zu können und insbesondere Schnittmarken für alle
+% Seitenstile bereitzustellen. %
+% \ToDo{%
+% Leider ist aus der dem Versuch, eine halbwegs einheitliche Schnittstelle
+% zwischen den Paketen \pkg{typearea} und \pkg{geometry} zu schaffen, ein
+% ziemlich unübersichtliches Konstrukt geworden, weshalb das Ganze in einer
+% folgenden Version mit \KOMAScript-Mitteln neu implementiert werden soll.
+% }[v2.07]
+% \ToDo{Orientierung automatisch aus paperwidth/paperheight}[v2.07]
+% \begin{macrocode}
+ \TUD@parameter@family{geometry}{%
+ \TUD@parameter@def{paper}{\tud@x@geometry@area@def{paper}{#1}}%
+ \TUD@parameter@let{papername}{paper}%
+ \TUD@parameter@def{papersize}{%
+ \def\@tempa##1,##2,##3\@nil{%
+ \IfArgIsEmpty{##2}{%
+ \tud@x@geometry@area@def{paper}{##1:##1}%
+ }{%
+ \tud@x@geometry@area@def{paper}{##1:##2}%
+ }%
+ }%
+ \@tempa#1,,\@nil%
+ }%
+ \TUD@parameter@def{paperwidth}{%
+ \tud@x@geometry@area@def{paper}{#1:\paperheight}%
+ }%
+ \TUD@parameter@def{paperheight}{%
+ \tud@x@geometry@area@def{paper}{\paperwidth:#1}%
+ }%
+ \TUD@parameter@def{layout}{%
+ \ifstr{#1}{false}{%
+ \setlength\tud@len@layoutwidth{\z@}%
+ \setlength\tud@len@layoutheight{\z@}%
+ \setlength\tud@len@layouthoffset{\z@}%
+ \setlength\tud@len@layoutvoffset{\z@}%
+ }{%
+ \tud@x@geometry@area@def{layout}{#1}%
+ }%
+ }%
+ \TUD@parameter@let{layoutname}{layout}%
+ \TUD@parameter@def{layoutsize}{%
+ \def\@tempa##1,##2,##3\@nil{%
+ \IfArgIsEmpty{##2}{%
+ \tud@x@geometry@area@def{layout}{##1:##1}%
+ }{%
+ \tud@x@geometry@area@def{layout}{##1:##2}%
+ }%
+ }%
+ \@tempa#1,,\@nil%
+ }%
+ \TUD@parameter@def{layoutwidth}{\setlength\tud@len@layoutwidth{#1}}%
+ \TUD@parameter@def{layoutheight}{\setlength\tud@len@layoutheight{#1}}%
+ \TUD@parameter@def{layoutoffset}{%
+ \def\@tempa##1,##2,##3\@nil{%
+ \IfArgIsEmpty{##2}{%
+ \setlength\tud@len@layouthoffset{##1}%
+ \setlength\tud@len@layoutvoffset{##1}%
+ }{%
+ \setlength\tud@len@layouthoffset{##1}%
+ \setlength\tud@len@layoutvoffset{##2}%
+ }%
+ }%
+ \@tempa#1,,\@nil%
+ }%
+ \TUD@parameter@def{layouthoffset}{\setlength\tud@len@layouthoffset{#1}}%
+ \TUD@parameter@def{layoutvoffset}{\setlength\tud@len@layoutvoffset{#1}}%
+ \TUD@parameter@def{bleedmargin}{\TUDoption{bleedmargin}{#1}}%
+ \TUD@parameter@handler@macro{%
+ \eappto\tud@x@geometry@parameter{%
+ \expandonce\kv@key=\expandonce\kv@value,%
+ }%
+ }{%
+ \tud@x@geometry@area@def{paper}{#2}%
+ }%
+ }%
+% \end{macrocode}
+% Wenig Kommentar dazu, weil eigentlich schon wieder obsolet! Die möglichen
+% Werte für \val{paper} und \val{layout} werden abgefangen und für die beiden
+% Befehle \cs{geometry} und \cs{newgeometry} aufgearbeitet. Alle anderen werden
+% einfach an \pkg{geometry} durchgereicht. Dies geschieht über die jeweiligen
+% Hilfsmakros \cs{tud@x@geometry@\dots} für \val{paper}, \val{layout} sowie
+% \val{parameter} für alles Übrige.
+% \begin{macrocode}
+ \newcommand*\tud@x@geometry@area@def[2]{%
+ \tud@lowerstring{\@tempa}{#2}%
+ \def\@tempb##1paper##2\@nil{%
+ \ifstr{##2}{paper}{\def\@tempa{##1}}{}%
+ }%
+ \expandafter\@tempb\@tempa paper\@nil%
+ \@tempswafalse%
+ \ifstr{\@tempa}{seascape}{\@tempswatrue}{}%
+ \ifstr{\@tempa}{landscape}{\@tempswatrue}{}%
+ \ifstr{\@tempa}{portrait}{\@tempswatrue}{}%
+ \ifstr{\@tempa}{letter}{\@tempswatrue}{}%
+ \ifstr{\@tempa}{executive}{\@tempswatrue}{}%
+ \ifstr{\@tempa}{legal}{\@tempswatrue}{}%
+ \if@tempswa\else%
+ \ifx\@tempa\@empty\relax\else%
+ \def\@tempb##1##2\@nil{%
+ \if ##1a\@tempswatrue%
+ \else\if ##1b\@tempswatrue%
+ \else\if ##1c\@tempswatrue%
+ \else\if ##1d\@tempswatrue%
+ \fi\fi\fi\fi%
+ \if@tempswa%
+ \@tempswafalse%
+ \IfArgIsEmpty{##2}{}{\ifnumber{##2}{\@tempswatrue}{}}%
+ \fi%
+ }%
+ \expandafter\@tempb\@tempa\@nil%
+ \if@tempswa\else%
+ \def\@tempb##1:##2:##3\@nil{%
+ \IfArgIsEmpty{##2}{}{%
+ \@tempswatrue%
+ \def\@tempa{##1:##2}%
+ }%
+ }%
+ \expandafter\@tempb\@tempa::\@nil%
+ \fi%
+ \if@tempswa\else%
+ \def\tud@reserved##1:##2:##3:##4\@nil{%
+ \if@tempswa\else%
+ \ifstr{\@tempa}{##1}{%
+ \@tempswatrue%
+ \def\@tempa{##2##4:##3##4}%
+ }{}%
+ \fi%
+ }%
+ \tud@reserved b0j:1030:1456:mm\@nil%
+ \tud@reserved b1j:728:1030:mm\@nil%
+ \tud@reserved b2j:515:728:mm\@nil%
+ \tud@reserved b3j:364:515:mm\@nil%
+ \tud@reserved b4j:257:364:mm\@nil%
+ \tud@reserved b5j:182:257:mm\@nil%
+ \tud@reserved b6j:128:182:mm\@nil%
+ \tud@reserved ansia:8.5:11:in\@nil%
+ \tud@reserved ansib:11:17:in\@nil%
+ \tud@reserved ansic:17:22:in\@nil%
+ \tud@reserved ansid:22:34:in\@nil%
+ \tud@reserved ansie:34:44:in\@nil%
+ \tud@reserved screen:225:180:mm\@nil%
+ \fi%
+ \fi%
+ \fi%
+ \if@tempswa%
+ \cseappto{tud@x@geometry@#1}{\@tempa,}%
+ \else%
+ \appto\tud@x@geometry@parameter{#2,}%
+ \fi%
+ }%
+% \end{macrocode}
+% Der Befehl \cs{tud@x@geometry@area@set} bewerkstelligt die Abarbeitung der
+% zuvor gesammelten Schlüssel.
+% \begin{macrocode}
+ \newcommand*\tud@x@geometry@area@set[1]{%
+ \letcs{\@tempa}{tud@x@geometry@#1}%
+ \ifdefvoid{\@tempa}{}{%
+ \def\@tempb##1:##2:##3\@nil{%
+ \begingroup%
+ \IfArgIsEmpty{##2}{%
+ \def\@tempb{\KOMAoption{paper}{##1}}%
+ }{%
+ \if@landscape%
+ \def\@tempb{\KOMAoption{paper}{##2:##1}}%
+ \else%
+ \def\@tempb{\KOMAoption{paper}{##1:##2}}%
+ \fi%
+ }%
+ \edef\@tempb{\endgroup\expandonce\@tempb}%
+ \@tempb%
+ }%
+ \def\@tempc##1{\@tempb##1::\@nil}%
+ \expandafter\forcsvlist\expandafter\@tempc\expandafter{\@tempa}%
+ }%
+ }%
+% \end{macrocode}
+% \end{macro}^^A \tud@x@geometry@init
+% \end{macro}^^A \tud@x@geometry@parameter
+% \end{macro}^^A \tud@x@geometry@layout
+% \end{macro}^^A \tud@x@geometry@paper
+% \end{macro}^^A \tud@x@geometry@area@set
+% \end{macro}^^A \tud@x@geometry@area@def
+% \end{parameter}^^A bleedmargin
+% \end{parameter}^^A layoutsize
+% \end{parameter}^^A layoutheight
+% \end{parameter}^^A layoutwidth
+% \end{parameter}^^A layoutname
+% \end{parameter}^^A layout
+% \end{parameter}^^A papersize
+% \end{parameter}^^A paperheight
+% \end{parameter}^^A paperwidth
+% \end{parameter}^^A papername
+% \end{parameter}^^A paper
+% \end{macro}^^A \tud@x@geometry@user
+% \begin{macro}{\tud@x@geometry@getlayout}
+% \changes{v2.06}{2018/08/13}{neu}^^A
+% \begin{macrocode}
+ \newcommand*\tud@x@geometry@getlayout[1]{%
+% \end{macrocode}
+% Unabhängig von der gewählten Option \opt{cdgeometry} für den Satzspiegel
+% sollen die von \pkg{geometry} bereitgestellten Möglichkieten für den
+% Papierbogen nutzbar bleiben. Die zu setzenden Einstellungen für das Layout
+% werden in das im Argument übergebene Makro geschrieben.
+% \begin{macrocode}
+ \ifGm@pass%
+ \let#1\@empty%
+ \else%
+ \tud@cdgeometry@assignlayout%
+ \begingroup%
+% \end{macrocode}
+% Das Setzen des Layouts erfolgt nur, wenn die dazugehörigen Längen \emph{nicht}
+% denen des Papierbogens entsprechen.
+% \begin{macrocode}
+ \@tud@res@swafalse%
+ \ifdim\tud@len@layoutwidth=\paperwidth\relax\else\@tud@res@swatrue\fi%
+ \ifdim\tud@len@layoutheight=\paperheight\relax\else\@tud@res@swatrue\fi%
+ \edef\tud@res@a{%
+ \endgroup%
+ \etex@unexpanded{\def#1}{%
+ layoutoffset={%
+ \the\tud@len@layouthoffset,\the\tud@len@layoutvoffset%
+ }%
+ \if@tud@res@swa%
+ ,layoutsize={\the\tud@len@layoutwidth,\the\tud@len@layoutheight}%
+ \fi%
+ }%
+ }%
+ \tud@res@a%
+ \fi%
+ }%
+% \end{macrocode}
+% \end{macro}^^A \tud@x@geometry@getlayout
+% \begin{macro}{\tud@x@geometry@set}
+% \changes{v2.04}{2015/03/12}{neu}^^A
+% \begin{macro}{\tud@savegeometry}
+% \changes{v2.05}{2016/04/03}{neu}^^A
+% \begin{macro}{\tud@loadgeometry}
+% \changes{v2.05}{2016/03/06}{neu}^^A
+% Mit dem Befehl \cs{tud@x@geometry@set} wird abhängig davon, ob dieser in der
+% Präambel oder im Dokument von \cs{tud@cdgeometry@@process} verwendet wird,
+% entweder \cs{geometry} oder \cs{newgeometry} aufgerufen. Mit dem Schalter
+% \cs{if@tud@x@geometry@enabled} wird im Fall, dass ein der Satzspiegel durch
+% den Anwender eingestellt wurde, das rekursive Aufrufen von \cs{geometry} bzw.
+% \cs{newgeometry} und einer daraus resultierenden Endlosschleife unterbunden.
+% \begin{macrocode}
+ \newcommand*\tud@x@geometry@set[1]{%
+ \@tud@x@geometry@enabledfalse%
+% \end{macrocode}
+% Um etwaige Änderungen am Papierformat innerhalb des Dokumentes beachten zu
+% können, werden die aktuellen Maße für das Papierformat an \cs{Gm@restore@org}
+% angehangen.
+% \begin{macrocode}
+ \if@atdocument%
+ \edef\@tempa{#1}%
+ \tud@cs@store{Gm@restore@org}%
+ \eappto\Gm@restore@org{%
+ \noexpand\paperwidth=\the\paperwidth\relax%
+ \noexpand\paperheight=\the\paperheight\relax%
+ }%
+ \def\@tempc{\tud@cs@use{newgeometry}}%
+ \expandafter\@tempc\expandafter{\@tempa}%
+ \tud@cs@restore{Gm@restore@org}%
+ \else%
+% \end{macrocode}
+% Zu Beginn des Dokumentes werden mit \cs{Gm@initnewgm} vor jedem Satzspiegel
+% die zuvor gemachten Einstellungen zurückgesetzt.
+% \begin{macrocode}
+ \Gm@initnewgm%
+ \edef\@tempa{%
+ paperwidth=\the\paperwidth,paperheight=\the\paperheight,#1%
+ }%
+ \def\@tempc{\tud@cs@use{geometry}}%
+ \expandafter\@tempc\expandafter{\@tempa,driver=none}%
+ \fi%
+ \@tud@x@geometry@enabledtrue%
+ }%
+% \end{macrocode}
+% Beim Speichern eines Satzspiegels sichert \pkg{geometry} tatsächlich nicht
+% alle notwendigen Einstellungen und Befehle. Deshalb wird etwas nachgeholfen.
+% \begin{macrocode}
+ \newcommand*\tud@savegeometry[1]{%
+ \let\Gm@restore\@empty%
+ \savegeometry{#1}%
+ \csepreto{Gm@restore@@#1}{%
+ \noexpand\Gm@bindingoffset=\the\Gm@bindingoffset%
+ \ifGm@includehead%
+ \noexpand\Gm@includeheadtrue%
+ \else%
+ \noexpand\Gm@includeheadfalse%
+ \fi%
+ \ifGm@includefoot%
+ \noexpand\Gm@includefoottrue%
+ \else%
+ \noexpand\Gm@includefootfalse%
+ \fi%
+ \ifGm@includemp%
+ \noexpand\Gm@includemptrue%
+ \else%
+ \noexpand\Gm@includempfalse%
+ \fi%
+ \ifGm@layout%
+ \noexpand\Gm@layouttrue%
+ \else%
+ \noexpand\Gm@layoutfalse%
+ \fi%
+ }%
+ }%
+ \newcommand*\tud@loadgeometry[1]{%
+ \@tud@x@geometry@enabledfalse%
+ \loadgeometry{#1}%
+% \end{macrocode}
+% Die nächsten beiden Makros müssen nach der Satzspiegeländerung des ausgeführt
+% werden, um den Durchschuss und eine etwaige Zentrierung durch das Paket
+% \pkg{crop} wiederherzustellen.
+% \begin{macrocode}
+ \@currsize%
+ \if@tud@x@crop@center\CROP@center\fi%
+ \@tud@x@geometry@enabledtrue%
+ }%
+% \end{macrocode}
+% \end{macro}^^A \tud@loadgeometry
+% \end{macro}^^A \tud@savegeometry
+% \end{macro}^^A \tud@x@geometry@set
+% \begin{macro}{\tud@cdgeometry@@process}
+% \changes{v2.02}{2014/06/23}{geändert für das Paket \pkg{scrlayer-scrpage}}^^A
+% \changes{v2.03}{2015/01/09}{Satzspiegel des \CDs angepasst}^^A
+% \changes{v2.03}{2015/01/09}{intiale Festlegung der Länge \cs{marginpar}}^^A
+% \changes{v2.03}{2015/01/13}{Satzspiegel kompatibilitätsabhängig}^^A
+% \begin{macro}{\tud@cdgeometry@@@process}
+% \begin{macro}{\tud@cdgeometry@layout}
+% \changes{v2.06}{2018/08/13}{neu}^^A
+% \begin{macro}{\tud@cdgeometry@hmargin}
+% \begin{macro}{\tud@cdgeometry@vmargin}
+% \begin{macro}{\tud@cdgeometry@tudmargin}
+% \begin{macro}{\tud@cdgeometry@ddcmargin}
+% Dies sind Hilfsmakros für die Definition der unterschiedichen Seitenlayouts
+% (horizontale und vertikale Ränder). Es handelt sich dabei um die Seitenränder
+% für den normalen Textbereich sowie die angepassten vertikalen Einstellungen
+% für die Seitenstilvarianten mit TUD-Kopf. Im Kompatibilitätsmodus für die
+% Version~v2.02 gibt es außerdem einen separaten Satzspiegel für den \DDC-Fuß.
+% Gesetzt werden diese in Abhängigkeit von der Option \opt{cdgeometry} im
+% Makro \cs{tud@cdgeometry@@process} bzw. \cs{tud@cdgeometry@@@process}.
+% \begin{macrocode}
+ \newcommand*\tud@cdgeometry@layout{}%
+ \newcommand*\tud@cdgeometry@hmargin{}%
+ \newcommand*\tud@cdgeometry@vmargin{}%
+ \newcommand*\tud@cdgeometry@tudmargin{}%
+ \tud@if@v@lower{2.03}{\newcommand*\tud@cdgeometry@ddcmargin{}}{}%
+% \end{macrocode}
+% Das Makro \cs{tud@cdgeometry@@process} setzt die Option für den gewünschten
+% Satzspiegel um, sowohl für die Seitenränder als auch zur Einberechnung der
+% Kopf- und/oder Fußzeile. Um mehrere Satzspiegel verwenden zu können~-- was
+% für die unterschiedlichen Höhen für Kopf- und Fußzeile nötig ist~-- wird das
+% Paket \pkg{geometry} verwendet. Soll \pkg{typearea} zur Satzspiegelerstellung
+% genutzt werden, so werden die damit berechneten Werte an \pkg{geometry}
+% weitergereicht.
+% Es werden drei Layouts erstellt: normaler Satzspiegel, nur TUD-Kopf sowie
+% TUD-Kopf und "~Fuß und mit \cs{savegeometry}\marg{Stil} gesichert. Damit kann
+% innerhalb des Dokumentes mit dem Befehl \cs{loadgeometry}\marg{Stil} oberer
+% sowie ggf. untere Seitenrand geändert werden.
+% \begin{macrocode}
+ \newcommand*\tud@cdgeometry@@process{%
+ \csuse{@ta@usegeometryfalse}%
+% \end{macrocode}
+% Die Maßvorgaben werden entsprechend der Seitengröße gesetzt.
+% \begin{macrocode}
+ \tud@cdgeometry@set%
+% \end{macrocode}
+% Für den Fall, dass \pkg{typearea} die Satzspiegelberechnung übernimmt oder
+% dieser durch den Benutzer definiert wurde, werden die Ergebnisse aus der
+% Berechnung respektive die aktiven Einstellungen direkt an \pkg{geometry}
+% weitergereicht. Dazu werden die berechneten Werte in die entsprechenden
+% Hilfsmakros für die Erstellung der \pkg{geometry}-Satzspiegel übergeben.
+% Gegebenenfalls werden die Offsets für das Layout korrigiert.
+% \begin{macrocode}
+ \ifnum\tud@cdgeometry@num<\tw@\relax% false/custom
+ \if@tud@x@geometry@fixmargins%
+ \tud@x@geometry@fixmargins%
+ \fi%
+% \end{macrocode}
+% Die von \pkg{typearea} berechneten Seitenränder werden an \pkg{geometry}
+% weitergereicht.
+% \begin{macrocode}
+ \ifcase\tud@cdgeometry@num\relax%
+ \edef\tud@cdgeometry@hmargin{%
+ left=\the\dimexpr\oddsidemargin+1in-\ta@bcor\relax,%
+ textwidth=\the\textwidth,%
+ \tud@cdgeometry@mpincl,%
+ marginparwidth=\the\marginparwidth,%
+ marginparsep=\the\marginparsep,%
+ \if@reversemargin%
+ reversemarginpar=true,%
+ \else%
+ reversemarginpar=false,%
+ \fi%
+ bindingoffset=\the\ta@bcor%
+ }%
+ \edef\tud@cdgeometry@vmargin{%
+ \if@hincl%
+ includehead=true,%
+ top=\the\dimexpr\topmargin+1in\relax,%
+ \else%
+ includehead=false,%
+ top=\the\dimexpr\topmargin%
+ +\headheight+\headsep+1in\relax,%
+ \fi%
+ headheight=\the\headheight,%
+ headsep=\the\headsep,%
+ textheight=\the\textheight,%
+ \tud@cdgeometry@fincl,%
+ footskip=\the\footskip%
+ }%
+% \end{macrocode}
+% Und nun für den benutzerdefinierten Satzspiegel.
+% \begin{macrocode}
+ \else% custom
+ \ifGm@pass\else%
+ \edef\tud@cdgeometry@hmargin{%
+ left=\the\dimexpr\oddsidemargin+1in-\Gm@bindingoffset\relax,%
+ textwidth=\the\textwidth,%
+ \ifGm@includemp%
+ includemp=true,%
+ \else%
+ includemp=false,%
+ \fi%
+ marginparwidth=\the\marginparwidth,%
+ marginparsep=\the\marginparsep,%
+ \if@reversemargin%
+ reversemarginpar=true,%
+ \else%
+ reversemarginpar=false,%
+ \fi%
+ bindingoffset=\the\Gm@bindingoffset%
+ }%
+ \edef\tud@cdgeometry@vmargin{%
+ \ifGm@includehead%
+ includehead=true,%
+ top=\the\dimexpr\topmargin+1in\relax,%
+ \else%
+ includehead=false,%
+ top=\the\dimexpr\topmargin%
+ +\headheight+\headsep+1in\relax,%
+ \fi%
+ headheight=\the\headheight,%
+ headsep=\the\headsep,%
+ textheight=\the\textheight,%
+ \ifGm@includefoot%
+ includefoot=true,%
+ \else%
+ includefoot=false,%
+ \fi%
+ footskip=\the\footskip%
+ }%
+ \fi%
+ \fi%
+% \end{macrocode}
+% Es wird die Höhendifferenz zwischen TUD-Kopf und Standardkopfzeile für den
+% benutzerdefnierten bzw. \pkg{typearea}-Satzspiegel berechnet. Für den
+% Satzspiegel mit TUD-Kopf muss unterschieden werden, ob der Abstand zwischen
+% Kopf und Textbereich vergrößert wurde. Ist dies der Fall, wird die Höhe des
+% Textbereiches über \cs{@tempdima} entsprechend verkleinert. Sollte der
+% benutzerdefinierten bzw. \pkg{typearea}-Satzspiegel noch unterhalb des
+% TUD-Kopfes liegen, wird der Abstand zum Kopf vergrößert.
+% \begin{macrocode}
+ \setlength\tud@len@areadiff{%
+ \dimexpr\tud@len@topmargin+\tud@len@barheight+\tud@len@headsep%
+ -\topmargin-\headheight-\headsep-1in\relax%
+ }%
+ \ifdim\tud@len@areadiff<\z@\relax%
+ \addtolength\tud@len@headsep{-\tud@len@areadiff}%
+ \setlength\@tempdima{\z@}%
+ \else%
+ \setlength\@tempdima{\tud@len@areadiff}%
+ \fi%
+ \edef\tud@cdgeometry@tudmargin{%
+ ignorehead=true,%
+ top=\the\dimexpr\tud@len@topmargin+\tud@len@barheight%
+ +\tud@len@headsep\relax,%
+ headheight=\the\dimexpr\tud@len@topmargin+\tud@len@barheight%
+ -\tud@len@logoy\relax,%
+ headsep=\the\tud@len@headsep,%
+ textheight=\the\dimexpr\textheight-\@tempdima\relax%
+ }%
+% \end{macrocode}
+% Für den Kompatibilitätsmodus der Version~v2.02 gibt es für den \DDC-Fuß einen
+% separaten Satzspiegel.
+% \begin{macrocode}
+ \tud@if@v@lower{2.03}{%
+ \setlength\tud@len@ddcdiff{%
+ \dimexpr.6\tud@len@topmargin-\footskip+\tud@len@headsep%
+ +\footheight-1.25\baselineskip\relax%
+ }%
+ \edef\tud@cdgeometry@ddcmargin{%
+ textheight=\the\dimexpr\textheight-\tud@len@areadiff%
+ -\tud@len@ddcdiff\relax,%
+ footskip=\the\dimexpr\footskip+\tud@len@ddcdiff\relax%
+ }%
+ }{}%
+% \end{macrocode}
+% Sollte die Option \opt{extrabottommargin} verwendet worden sein, wird eine
+% Warnung ausgegeben, dass diese für den \pkg{typearea}-Satzspiegel wirkungslos
+% ist.
+% \begin{macrocode}
+ \ifdim\dimexpr\tud@dim@extrabottommargin\relax=\z@\relax\else%
+ \begingroup%
+ \edef\tud@res@a{%
+ The key `extrabottommargin' is ineffective\MessageBreak%
+ when\space%
+ \ifcase\tud@cdgeometry@num%
+ package `typearea' is used for layout with\MessageBreak%
+ `cdgeometry=typearea'%
+ \else%
+ a user-defined layout is used with\MessageBreak%
+ `cdgeometry=custom'%
+ \fi%
+ }%
+ \edef\tud@res@a{%
+ \endgroup%
+ \noexpand\ClassWarning{\noexpand\TUD@Class@Name}{\tud@res@a}%
+ }%
+ \tud@res@a%
+ \fi%
+% \end{macrocode}
+% Hier erfolgt die Definition der Hilfsmakros für das CD-konforme asymmetrische
+% bzw. an das \CD angelehnte Layout für einseitigen und zweiseitigen Satz.
+% Zuerst werden die verschiedenen unterschiedlichen horizontalen Ränder für die
+% unterschiedlichen Optionen definiert. Dies betrifft im einzelnen den äußeren
+% Seitenrand (\cs{@tempdima}), die Textbreite (\cs{@tempdimb}) sowie die Breite
+% der Randnotizen (\cs{@tempdimc}). Danach kommt der Gleichanteil.
+% \begin{macrocode}
+ \else% true/symmetric/twoside
+ \ifcase\tud@cdgeometry@num\relax\or\or% true
+ \setlength\@tempdima{\tud@len@widemargin}%
+ \if@reversemargin%
+ \setlength\@tempdimc{\tud@len@widemargin}%
+ \else%
+ \setlength\@tempdimc{\tud@len@slimmargin}%
+ \fi%
+% \end{macrocode}
+% Die zweite Variante ist eigentlich nicht konform mit dem \CD. Sie ist sowohl
+% im einseitigen als auch im zweiseitgigen Satz symmetrisch.
+% \begin{macrocode}
+ \or% symmetric
+ \setlength\@tempdima{.5\tud@len@both}%
+ \setlength\@tempdimc{.5\tud@len@both}%
+% \end{macrocode}
+% Eigentlich ist auch die dritte Variante nach dem \CD nicht zulässig. Sie ist
+% im einseitigen Satz symmetrisch, im zweiseitgigen Satz wird die innere Seite
+% schmaler gesetzt als die äußere, wobei hier auf das in den Seitenrand ragende
+% TUD-Logo geachtet werden muss.
+% \begin{macrocode}
+ \or% twoside
+ \if@twoside%
+ \setlength\@tempdima{.4\tud@len@both}%
+ \else%
+ \setlength\@tempdima{.5\tud@len@both}%
+ \fi%
+ \setlength\@tempdimc{.5\tud@len@both}%
+ \if@twoside%
+ \if@reversemargin%
+ \setlength\@tempdimc{.4\tud@len@both}%
+ \else%
+ \setlength\@tempdimc{.6\tud@len@both}%
+ \fi%
+ \fi%
+ \fi%
+% \end{macrocode}
+% Die \emph{Berechnung} der Textbreite ist für alle Varainten identisch. Danach
+% erfolgt die Zuweisung zum Makro.
+% \begin{macrocode}
+ \addtolength\@tempdimc{-\headsep}%
+ \setlength\@tempdimb{%
+ \dimexpr\tud@len@layoutwidth-\tud@len@both-\ta@bcor\relax%
+ }%
+ \if@mincl%
+ \addtolength\@tempdimb{-\@tempdimc}%
+ \fi%
+ \edef\tud@cdgeometry@hmargin{%
+ left=\the\@tempdima,%
+ textwidth=\the\@tempdimb,%
+ \tud@cdgeometry@mpincl,%
+ marginparwidth=\the\@tempdimc,%
+ marginparsep=\the\dimexpr.5\headsep\relax,%
+ \if@reversemargin%
+ reversemarginpar=true,%
+ \else%
+ reversemarginpar=false,%
+ \fi%
+ bindingoffset=\the\ta@bcor%
+ }%
+ \if@twoside%
+ \ifcase\tud@cdgeometry@num\relax\or\or% true
+ \appto\tud@cdgeometry@hmargin{,asymmetric}%
+ \else% symmetric/twoside
+ \appto\tud@cdgeometry@hmargin{,twoside}%
+ \fi%
+ \fi%
+ \if@twocolumn%
+ \appto\tud@cdgeometry@hmargin{,twocolumn}%
+ \fi%
+% \end{macrocode}
+% Für alle drei Varianten der vertikale Gleichanteil. Der Satzspiegel der
+% Version~v2.02 wird aus Gründen der Kompatibilität weiterhin vorgehalten.
+% \begin{macrocode}
+ \tud@if@v@lower{2.03}{%
+ \edef\tud@cdgeometry@vmargin{%
+ \tud@cdgeometry@hincl,%
+ top=\the\dimexpr.5\tud@len@both\relax,%
+ headheight=\the\headheight,%
+ headsep=\the\tud@len@headsep,%
+ bottom=\the\dimexpr.5\tud@len@both+\tud@dim@extrabottommargin\relax,%
+ \tud@cdgeometry@fincl,%
+ footskip=\the\dimexpr\tud@len@headsep+\footheight%
+ -1.25\baselineskip\relax%
+ }%
+ }{%
+ \edef\tud@cdgeometry@vmargin{%
+ \tud@cdgeometry@hincl,%
+ top=\the\tud@len@slimmargin,%
+ headheight=\the\headheight,%
+ headsep=\the\headsep,%
+ bottom=\the\dimexpr\tud@len@widemargin%
+ +\tud@dim@extrabottommargin\relax,%
+ \tud@cdgeometry@fincl,%
+ footskip=\the\dimexpr\tud@len@footsep+\footheight\relax%
+ }%
+ }%
+ \edef\tud@cdgeometry@tudmargin{%
+ ignorehead=true,%
+ top=\the\dimexpr\tud@len@topmargin+\tud@len@barheight%
+ +\tud@len@headsep\relax,%
+ headheight=\the\dimexpr\tud@len@topmargin+\tud@len@barheight%
+ -\tud@len@logoy\relax,%
+ headsep=\the\tud@len@headsep%
+ }%
+% \end{macrocode}
+% Es wird die Differenz der Höhen zwischen TUD-Kopf und Standardkopfzeile
+% für den Satzspiegel des \CDs berechnet.
+% \begin{macrocode}
+ \setlength\tud@len@areadiff{%
+ \dimexpr\tud@len@topmargin+\tud@len@barheight+\tud@len@headsep%
+ -\tud@len@slimmargin\relax%
+ }%
+% \end{macrocode}
+% Für die Kompatibilitätsvariante wieder mal die Extrawurst.
+% \begin{macrocode}
+ \tud@if@v@lower{2.03}{%
+ \setlength\tud@len@areadiff{%
+ \dimexpr\tud@len@topmargin+\tud@len@barheight+\tud@len@headsep%
+ -.5\tud@len@both\relax%
+ }%
+% \end{macrocode}
+% Wird die Fußzeile zum Satzspiegel gerechnet, ist für Seiten mit \DDC-Fuß
+% etwas Handarbeit notwendig, damit dieser nicht allzu weit nach oben ragt.
+% \begin{macrocode}
+ \setlength\tud@len@ddcdiff{.6\tud@len@topmargin}%
+ \edef\tud@cdgeometry@ddcmargin{%
+ \if@fincl%
+ bottom=\the\dimexpr.5\tud@len@both+\tud@dim@extrabottommargin%
+ +\tud@len@ddcdiff+\tud@len@headsep+\footheight%
+ -1.25\baselineskip\relax,%
+ \else%
+ bottom=\the\dimexpr.5\tud@len@both+\tud@dim@extrabottommargin%
+ +\tud@len@ddcdiff\relax,%
+ \fi%
+ footskip=\the\dimexpr\tud@len@headsep+\footheight%
+ -1.25\baselineskip+\tud@len@ddcdiff\relax,%
+ }%
+ }{}%
+ \fi%
+% \end{macrocode}
+% Es wird die Differenz der Höhen zwischen TUD-Kopf und Standardkopfzeile
+% für den Satzspiegel des \CDs berechnet. Außerdem wird die standardmäßige
+% vertikale Verschiebung der Überschriften festgelegt, wobei hier insbesondere
+% auf die Gestaltungshöhe DIN~A5 geachtet werden muss.
+% \begin{macrocode}
+ \ifdim\tud@len@areadiff<\z@\relax\setlength\tud@len@areadiff{\z@}\fi%
+ \global\tud@len@areadiff=\tud@len@areadiff%
+%<*book|report|article>
+ \setlength\tud@len@areaheadvskip{.22\tud@len@topmargin}%
+ \if@tud@cdgeometry@adjust%
+ \setlength\tud@len@areaheadvskip{.5\tud@len@areaheadvskip}%
+ \fi%
+ \global\tud@len@areaheadvskip=\tud@len@areaheadvskip%
+%</book|report|article>
+% \end{macrocode}
+% Für den Satzspiegel der Version~v2.02 wird außerdem die Länge für den höheren
+% Seitenfuß gesetzt.
+% \begin{macrocode}
+ \tud@if@v@lower{2.03}{%
+ \ifdim\tud@len@ddcdiff<\z@\relax\setlength\tud@len@ddcdiff{\z@}\fi%
+ \global\tud@len@ddcdiff=\tud@len@ddcdiff%
+ }{}%
+% \end{macrocode}
+% Es wird \cs{tud@cdgeometry@@@process} aufgerufen, was die zuvor definierten
+% Hilfsmakros nutzt, um alle benötigten Seitenlayouts optionsabhängig zu
+% erstellen.
+% \begin{macrocode}
+ \tud@cdgeometry@@@process%
+ }%
+% \end{macrocode}
+% Der Befehl \cs{tud@cdgeometry@@@process} setzt mit den zuvor definierten
+% Hilfsmakros die \pkg{geometry}-Optionen für sowohl die seitlichen als auch
+% die oberen sowie unteren Seitenränder und inkludiert ggf. Kopf- und Fußzeile
+% in den Satzspiegel. Die unterschiedlichen Layouts sind dabei \val{tudareaddc}
+% für TUD-Kopf und \DDC-Fuß, \val{tudarea} für den alleinigen TUD-Kopf sowie
+% \val{stdarea} für den normalen bzw. mit \pkg{typearea} berechneten
+% Satzspiegel.
+% \begin{macrocode}
+ \newcommand*\tud@cdgeometry@@@process{%
+ \tud@x@geometry@getlayout{\tud@cdgeometry@layout}%
+% \end{macrocode}
+% Für den Satzspiegel der Version~v2.02 wird als erstes der Satzspiegel für den
+% TUD-Kopf zusammen mit dem \DDC-Fuß erstellt. Das Einbeziehen der Fußzeile in
+% den Satzspiegel erfolgt nicht ggf. über die Option \opt{includefoot} sondern
+% manuell bei der Definition von \cs{tud@cdgeometry@ddcmargin}.
+% \begin{macrocode}
+ \tud@if@v@lower{2.03}{%
+ \tud@x@geometry@set{%
+ \tud@cdgeometry@layout,%
+ \tud@cdgeometry@hmargin,%
+ \tud@cdgeometry@vmargin,%
+ \tud@cdgeometry@tudmargin,%
+ \tud@cdgeometry@ddcmargin,%
+ ignorehead,ignorefoot%
+ }%
+ \tud@savegeometry{tudareaddc}%
+ }{}%
+% \end{macrocode}
+% Danach folgt der Seitenstil, mit dem TUD-Kopf und der Standardfußzeile.
+% \begin{macrocode}
+ \tud@x@geometry@set{%
+ \tud@cdgeometry@layout,%
+ \tud@cdgeometry@hmargin,%
+ \tud@cdgeometry@vmargin,%
+ \tud@cdgeometry@tudmargin%
+ }%
+ \tud@savegeometry{tudarea}%
+% \end{macrocode}
+% Als letztes wird der Standardsatzspiegel erstellt.
+% \begin{macrocode}
+ \tud@x@geometry@set{%
+ \tud@cdgeometry@layout,%
+ \tud@cdgeometry@hmargin,%
+ \tud@cdgeometry@vmargin%
+ }%
+ \tud@savegeometry{stdarea}%
+% \end{macrocode}
+% Je nach gewählter Option wird der aktuelle Satzspiegel für \pkg{typearea}
+% oder \pkg{geometry} gesichert.
+% \begin{macrocode}
+ \ifcase\tud@cdgeometry@num\relax% false
+ \tud@savegeometry{current@typearea}%
+ \or% custom
+ \tud@savegeometry{current@custom}%
+ \fi%
+% \end{macrocode}
+% Falls die (abermalige) Erstellung der Satzspiegel im Dokument erfolgt, sollte
+% anschließend auch der richtige Satzspiegel wieder ausgewählt werden.
+% \begin{macrocode}
+ \if@atdocument%
+ \ifstr{\tud@currentgeometry}{stdarea}{}{%
+ \expandafter\tud@loadgeometry\expandafter{\tud@currentgeometry}%
+ }%
+ \fi%
+ }%
+% \end{macrocode}
+% \end{macro}^^A \tud@cdgeometry@ddcmargin
+% \end{macro}^^A \tud@cdgeometry@tudmargin
+% \end{macro}^^A \tud@cdgeometry@vmargin
+% \end{macro}^^A \tud@cdgeometry@hmargin
+% \end{macro}^^A \tud@cdgeometry@layout
+% \end{macro}^^A \tud@cdgeometry@@@process
+% \end{macro}^^A \tud@cdgeometry@@process
+% \begin{macro}{\tud@cdgeometry@hincl}
+% \changes{v2.02}{2014/06/23}{geändert für das Paket \pkg{scrlayer-scrpage}}^^A
+% \begin{macro}{\tud@cdgeometry@fincl}
+% \begin{macro}{\tud@cdgeometry@mpincl}
+% \changes{v2.04}{2015/03/09}{neu}^^A
+% Diese Hilfsmakros werten die Optionen für das Einbeziehen von Kopf- und
+% Fußzeile sowie der Randnotizen aus.
+% \begin{macrocode}
+ \newcommand*\tud@cdgeometry@hincl{%
+ \if@hincl%
+ includehead=true%
+ \else%
+ includehead=false%
+ \fi%
+ }%
+ \newcommand*\tud@cdgeometry@fincl{%
+ \if@fincl%
+ includefoot=true%
+ \else%
+ includefoot=false%
+ \fi%
+ }%
+ \newcommand*\tud@cdgeometry@mpincl{%
+ \if@mincl%
+ includemp=true%
+ \else%
+ includemp=false%
+ \fi%
+ }%
+% \end{macrocode}
+% \end{macro}^^A \tud@cdgeometry@mpincl
+% \end{macro}^^A \tud@cdgeometry@fincl
+% \end{macro}^^A \tud@cdgeometry@hincl
+% \begin{macro}{\tud@cdgeometry@@init}
+% \changes{v2.04}{2015/03/10}{neu}^^A
+% Damit alle Satzspiegeleinstellungen korrekt vorgenommen und auch alle
+% Klassenoptionen korrekt verarbeitet werden, wird die Berechnung erstmalig mit
+% \cs{AtEndPreamble} am Ende der Präambel ausgeführt. Dabei werden sowohl der
+% benutzerdefinierte Satzspiegel als auch die durch \pkg{typearea} berechneten
+% Einstellungen gesichert.
+% \begin{macrocode}
+ \newcommand*\tud@cdgeometry@@init{%
+ \csuse{@ta@usegeometryfalse}%
+ \tud@x@geometry@getlayout{\tud@cdgeometry@layout}%
+ \tud@cs@store{tud@cdgeometry@num}%
+% \end{macrocode}
+% Bei der Initialisierung der zusätzlichen Satzspiegel soll keine Warnung
+% bezüglich der Angabe eines vergrößerten Fußbereichs erscheinen.
+% \begin{macrocode}
+ \tud@cs@store{tud@dim@extrabottommargin}%
+ \def\tud@dim@extrabottommargin{\z@}%
+% \end{macrocode}
+% Zunächst werden die benutzerdefinierten Einstellungen für den Satzspiegel
+% gesichert.
+% \begin{macrocode}
+ \tud@cdgeometry@reset{custom}%
+ \begingroup%
+ \epreto\tud@x@geometry@init{%
+ paperwidth=\the\paperwidth,paperheight=\the\paperheight,%
+ \tud@cdgeometry@layout,%
+ \tud@cdgeometry@mpincl,%
+ \if@reversemargin%
+ reversemarginpar=true,%
+ \else%
+ reversemarginpar=false,%
+ \fi%
+ bindingoffset=\the\ta@bcor,%
+ \tud@cdgeometry@hincl,%
+ \tud@cdgeometry@fincl,%
+ }%
+ \edef\tud@res@a{%
+ \endgroup%
+ \noexpand\tud@cs@use{geometry}{\tud@x@geometry@init,driver=none}%
+ \noexpand\@tud@x@geometry@fixmarginstrue%
+ }%
+ \tud@res@a%
+ \tud@cdgeometry@@process%
+ \tud@savegeometry{init@custom}%
+% \end{macrocode}
+% Und nun der Teil für \pkg{typearea}. Bei der Initialisierung werden mögliche
+% Warnungen des Paketes deaktiviert. Diese werden nur ausgegeben, wenn der
+% Schlüssel \opt{cdgeometry=typearea} angegeben wurde oder im Dokument mit
+% \cs{restoregeometry[typearea]} auf den initialen Satzspiegel umgestellt wird.
+% \begin{macrocode}
+ \tud@cdgeometry@reset{typearea}%
+ \tud@x@typearea@warnings@off[\tud@res@a]%
+ \tud@x@typearea@init%
+ \tud@x@typearea@warnings@on%
+ \tud@cdgeometry@@process%
+ \tud@savegeometry{init@typearea}%
+% \end{macrocode}
+% Alle gesammelten Warnungen von \pkg{typearea} werden dem initialisierten
+% Satzspiegel hinzugefügt.
+% \begin{macrocode}
+ \def\tud@res@b##1{%
+ \eappto\Gm@restore@@init@typearea{%
+ \noexpand\PackageWarningNoLine{typearea}{##1}%
+ }%
+ }%
+ \forlistloop\tud@res@b{\tud@res@a}%
+% \end{macrocode}
+% Hier werden die temporär geäanderten Einstellungen zurückgesetzt.
+% \begin{macrocode}
+ \tud@cs@restore{tud@cdgeometry@num}%
+ \tud@cs@restore{tud@dim@extrabottommargin}%
+% \end{macrocode}
+% Der Kopf im \CD der \TnUD erfordert einen eigenen Satzspiegel, der ggf. durch
+% \cs{tud@BeforeSelectAnyPageStyle} aktiviert bzw. deaktiviert wird.
+% \begin{macrocode}
+ \BeforeSelectAnyPageStyle{\tud@BeforeSelectAnyPageStyle{##1}}%
+% \end{macrocode}
+% Ganz zum Schluss wird der Satzspiegel für die aktuelle Einstellung von
+% \opt{cdgeometry} gesetzt.
+% \begin{macrocode}
+ \ifcase\tud@cdgeometry@num\relax% typearea
+ \tud@loadgeometry{init@typearea}%
+ \or% custom
+ \tud@loadgeometry{init@custom}%
+ \fi%
+ \@tud@x@geometry@fixmarginstrue%
+ \tud@cdgeometry@process%
+ \let\tud@cdgeometry@@init\relax%
+ }%
+% \end{macrocode}
+% \end{macro}^^A \tud@cdgeometry@@init
+% \begin{macro}{\tud@BeforeSelectAnyPageStyle}
+% \changes{v2.02}{2014/06/23}{neu}^^A
+% \changes{v2.04}{2015/04/21}{Auswahl der Schriften für Fußbereich ergänzt}^^A
+% \begin{macro}{\tud@currentgeometry}
+% \changes{v2.02}{2014/06/23}{neu}^^A
+% Mit \cs{tud@BeforeSelectAnyPageStyle} wird beim Umschalten des Seitenstils
+% ggf. der Satzspiegel geändert. Es wird der aktivierte Satzspiegel in dem
+% Makro \cs{tud@currentgeometry} gesichert, um darauf zu einem späteren
+% Zeitpunkt prüfen zu können.
+%
+% Für den Fall, dass das Dokument nicht ausschließlich mit dem Kopf im \CD
+% auf jeder Seite gesetzt wird, muss der komplette vertikale Satzspiegel
+% angepasst werden, sonst wäre der obere Rand optisch viel zu groß. Hierfür
+% wird das Paket \pkg{geometry} genutzt. Durch \cs{tud@cdgeometry@@process}
+% werden zwei~-- für die KOmpatibilitätsvariante drei~-- Layouts erstellt.
+% Diese können mit \cs{loadgeometry}\marg{Stil} geladen werden.
+% \begin{macrocode}
+ \newcommand*\tud@currentgeometry{}
+ \newcommand*\tud@BeforeSelectAnyPageStyle[1]{%
+% \end{macrocode}
+% Der \pgs{tudheadings}-Seitenstil wird mit dem Befehl \cs{newpairofpagestyles}
+% derart definiert, dass zwischen \pgs{tudheadings} und \pgs{plain.tudheadings}
+% auch mit \LaTeX-Standardseitenstilen \pgs{headings} bzw. \pgs{plain}
+% umgeschaltet werden kann. Dies wird hiermit beachtet.
+% \begin{macrocode}
+ \ifstr{#1}{\GetRealPageStyle{#1}}{%
+% \end{macrocode}
+% Für den Fall, das ein \pgs{tudheadings}-Seitenstil geladen werden soll, muss
+% der dazugehörige Satzspiegel ausgewählt werden\dots
+% \begin{macrocode}
+ \tud@if@tudheadings{#1}{%
+% \end{macrocode}
+% \dots wobei in der Version~v2.02 zwei unterschiedliche existierten, und
+% abhängig von der Verwendung des \DDC-Logos im Fuß waren.
+% \begin{macrocode}
+ \tud@if@v@lower{2.03}{%
+% \end{macrocode}
+% In diesem Fall werden die Seitenfußeinstellungen mit \cs{tud@ddc@check} in
+% \cs{@tempb} geschrieben und abhängig davon der richtige Satzspiegel geladen.
+% Dabei wird zuvor mit dem Wert aus \cs{tud@currentgeometry} geprüft, ob dies
+% überhaupt notwendig ist.
+% \begin{macrocode}
+ \tud@ddc@check%
+% \end{macrocode}
+% Das \DDC-Logo im Fuß ist nicht aktiviert.
+% \begin{macrocode}
+ \ifcase\@tempb\relax% \tud@ddc@foot@num=false
+ \ifstr{\tud@currentgeometry}{tudarea}{}{%
+ \tud@loadgeometry{tudarea}%
+ \gdef\tud@currentgeometry{tudarea}%
+ }%
+% \end{macrocode}
+% Das \DDC-Logo im Fuß ist aktiviert.
+% \begin{macrocode}
+ \else% \tud@ddc@foot@num!=false
+ \ifstr{\tud@currentgeometry}{tudareaddc}{}{%
+ \tud@loadgeometry{tudareaddc}%
+ \gdef\tud@currentgeometry{tudareaddc}%
+ }%
+ \fi%
+% \end{macrocode}
+% Ab der Version~v2.03 ist nur noch ein Satzspiegel vonnöten.
+% \begin{macrocode}
+ }{%
+ \ifstr{\tud@currentgeometry}{tudarea}{}{%
+ \tud@loadgeometry{tudarea}%
+ \gdef\tud@currentgeometry{tudarea}%
+ }%
+ }%
+% \end{macrocode}
+% Die Länge \cs{tud@len@areavskip} gibt an, wie groß die Differenz zwischen
+% Kopfhöhe zwischen aktuellem und dem speziellen \pgs{tudheadings}-Seitenstil
+% ist. Da diese in diesem Fall identisch sind, wird die Länge zu \cs{z@}
+% gesetzt.
+% \begin{macrocode}
+ \setlength\tud@len@areavskip{\z@}%
+% \end{macrocode}
+% Im Seitenfuß wird für die Seitenzahl und ggf. die Kolumnentitel die passende
+% Schrift verwendet.
+% \begin{macrocode}
+ \tud@komafont@set{pagenumber}{\usekomafont{tudheadings}}%
+ \tud@komafont@set{pagefoot}{\usekomafont{tudheadings}}%
+% \end{macrocode}
+% Dies ist der Fall, wenn kein \pgs{tudheadings}-Seitenstil geladen werden soll.
+% Zusätzlich zum Satzspeigel wird außerdem der Seitenstil \pgs{empty}
+% zurückgesetzt.
+% \begin{macrocode}
+ }{%
+ \ifstr{\tud@currentgeometry}{stdarea}{}{%
+ \tud@loadgeometry{stdarea}%
+ \gdef\tud@currentgeometry{stdarea}%
+ }%
+% \end{macrocode}
+% Die Länge \cs{tud@len@areavskip} wird auf den berechneten Wert gesetzt.
+% Nur für den Fall, dass die Kopfzeile zum Satzspiegel gerechnet wird und
+% dieser nicht durch \pkg{typearea} berechnet wurde, muss diese Länge etwas
+% angepasst werden.
+% \begin{macrocode}
+ \setlength\tud@len@areavskip{\tud@len@areadiff}%
+ \ifnum\tud@cdgeometry@num>\@ne\relax% true/symmetric/twoside
+ \if@hincl%
+ \addtolength\tud@len@areavskip{%
+ \dimexpr-\headheight-\tud@len@headsep\relax%
+ }%
+ \fi%
+ \fi%
+% \end{macrocode}
+% Die Schriften für Seitenzahl und Kolumnentitel werden zurückgesetzt.
+% \begin{macrocode}
+ \tud@komafont@unset{pagenumber}%
+ \tud@komafont@unset{pagefoot}%
+ }%
+% \end{macrocode}
+% Die Länge \cs{tud@len@areavskip} wird vorsichtshalber global gesetzt.
+% \begin{macrocode}
+ \global\tud@len@areavskip=\tud@len@areavskip%
+ }{}%
+ }
+% \end{macrocode}
+% \end{macro}^^A \tud@currentgeometry
+% \end{macro}^^A \tud@BeforeSelectAnyPageStyle
+% Damit sind alle notwendigen Satzspiegel für die unterschiedlichen Seitenstile
+% definiert. Im Normalfall werden durch \cs{tud@cdgeometry@@process} alle
+% benötigten Satzspiegel erstellt. Mit dem Setzen des Seitenstils wird der
+% jeweils richtige bzw. benötigte Satzspiegel ausgewählt.
+% \begin{macrocode}
+}
+% \end{macrocode}
+% \begin{macro}{\typearea}
+% \begin{macro}{\areaset}
+% \begin{macro}{\storereareas}
+% \begin{macro}{\tud@x@typearea@before}
+% \changes{v2.06}{2018/08/13}{neu}^^A
+% \begin{macro}{\tud@x@typearea@after}
+% \changes{v2.06}{2018/08/13}{neu}^^A
+% \begin{macro}{\tud@x@typearea@init}
+% \changes{v2.06}{2018/08/13}{neu}^^A
+% Für die Verwendung von \pkg{typearea} ist eine Sonderbehandlung notwendig,
+% falls mit \cs{geometry} eine Größe für den Druckbereich/das Layout angegeben
+% wurde. Dafür wird das Papierformat temporär auf die Größe des angegebenen
+% Layouts geändert bevor der Satzspiegel berechnet wird. Die Einstellungen in
+% der Präambel werden in \cs{tud@x@typearea@init} gesichert.
+% \begin{macrocode}
+\newcommand*\tud@x@typearea@before{%
+ \tud@skip@store{paperheight}%
+ \tud@skip@store{paperwidth}%
+ \begingroup%
+ \tud@cdgeometry@assignlayout%
+ \edef\tud@res@a{%
+ \endgroup%
+ \etex@unexpanded{\setlength\paperheight}{\the\tud@len@layoutheight}%
+ \etex@unexpanded{\setlength\paperwidth}{\the\tud@len@layoutwidth}%
+ }%
+ \tud@res@a%
+}
+\newcommand*\tud@x@typearea@after{%
+ \tud@skip@restore{paperheight}%
+ \tud@skip@restore{paperwidth}%
+ \if@atdocument%
+ \tud@cdgeometry@reset{typearea}%
+ \tud@cdgeometry@process%
+ \else%
+ \TUD@key@preset{cdgeometry}{false}%
+ \fi%
+}
+\newcommand*\tud@x@typearea@init{\recalctypearea}%
+% \end{macrocode}
+% Die notwendigen Patches für die Befehle aus \pkg{typearea}.
+% \begin{macrocode}
+\xpretocmd{\typearea}{%
+ \tud@x@typearea@before%
+ \def\tud@x@typearea@init{\typearea[#1]{#2}}%
+}{}{\tud@patch@wrn{typearea}}
+\xapptocmd{\typearea}{\tud@x@typearea@after}{}{\tud@patch@wrn{typearea}}
+\xpretocmd{\areaset}{%
+ \tud@x@typearea@before%
+ \begingroup%
+ \setlength\@tempdima{#2}%
+ \setlength\@tempdimb{#3}%
+ \edef\tud@res@a{%
+ \endgroup%
+ \noexpand\def\noexpand\tud@x@typearea@init{%
+ \noexpand\areaset[#1]{\the\@tempdima}{\the\@tempdimb}%
+ }%
+ }%
+ \tud@res@a%
+}{}{\tud@patch@wrn{areaset}}
+\xapptocmd{\areaset}{\tud@x@typearea@after}{}{\tud@patch@wrn{areaset}}
+% \end{macrocode}
+% Nach einer Wiederherstellung gespeicherter Satzspiegel durch \pkg{typearea}
+% werden die für die Seitenstile benötigten Satzspiegel mit \pkg{geometry} neu
+% erstellt.
+% \begin{macrocode}
+\tud@cs@store{storeareas}
+\renewcommand*\storeareas[1]{%
+ \begingroup
+ \tud@x@geometry@fixmargins%
+ \tud@cs@use{storeareas}{#1}%
+ \edef\tud@res@a{%
+ \endgroup%
+ \etex@unexpanded{\def#1}{%
+ \expandonce#1%
+ \def\noexpand\tud@cdgeometry@num{\tud@cdgeometry@num}%
+ }%
+ }%
+ \tud@res@a%
+}
+\AfterRestoreareas{\tud@cdgeometry@process}%
+% \end{macrocode}
+% \end{macro}^^A \tud@x@typearea@init
+% \end{macro}^^A \tud@x@typearea@after
+% \end{macro}^^A \tud@x@typearea@before
+% \end{macro}^^A \storereareas
+% \end{macro}^^A \areaset
+% \end{macro}^^A \typearea
+%
+% \iffalse
+%</class&body>
+%<*class&option>
+% \fi
+%
+% \begin{macro}{\tud@x@typearea@warnings@off}
+% \changes{v2.06}{2018/08/22}{neu}^^A
+% \begin{macro}{\tud@x@typearea@warnings@on}
+% \changes{v2.06}{2018/08/22}{neu}^^A
+% Das Paket \pkg{typearea} meldet schlechte Einstellungen für den Satzspiegel
+% mittels Warnungen an den Anwender. Diese sind allerdings~-- abhängig von der
+% gewählten Option opt{cdgeometry} für den Satzspiegel~-- gegebenefalls nicht
+% relevant. Da \TUDScript innerhalb von \cs{tud@cdgeometry@@init} am Ende der
+% Präambel ohnehin anhand von \cs{tud@x@typearea@init} den Satzspiegel von
+% \pkg{typearea} neu berechnet, werden alle relevanten Warnungen beim Laden des
+% Paketes deaktivert.
+%
+% Dem Befehl \cs{tud@x@typearea@warnings@off} kann im optionalen Argument ein
+% Makro übergeben werden, für welches eine \pkg{etoolbox}-Liste erzeugt wird,
+% in der alle Inhalte der ignorierten Warnungen gepseichert wird, um später auf
+% diese zurückgreifen zu können.
+% \begin{macrocode}
+\newcommand*\tud@x@typearea@warnings@off[1][]{%
+ \IfArgIsEmpty{#1}{}{\let#1\@empty}%
+ \tud@cs@store{PackageWarningNoLine}%
+ \renewcommand*\PackageWarningNoLine[2]{%
+ \@tud@res@swatrue%
+ \ifstr{##1}{typearea}{%
+ \ifstrstart{##2}{Bad type area settings!}{\@tud@res@swafalse}{}%
+ \ifstrstart{##2}{%
+ Maybe no optimal type area settings!%
+ }{\@tud@res@swafalse}{}%
+ \ifstrstart{##2}{Very low DIV value!}{\@tud@res@swafalse}{}%
+ }{}%
+ \if@tud@res@swa%
+ \tud@cs@use{PackageWarning}{##1}{##2}%
+ \else%
+ \IfArgIsEmpty{#1}{}{\listeadd#1{##2}}%
+ \fi%
+ }%
+}
+\newcommand*\tud@x@typearea@warnings@on{%
+ \tud@cs@restore{PackageWarningNoLine}%
+}
+\BeforePackage{typearea}{%
+ \tud@x@typearea@warnings@off%
+}
+\AfterPackage{typearea}{%
+ \tud@x@typearea@warnings@on%
+}
+% \end{macrocode}
+% \end{macro}^^A \tud@x@typearea@warnings@on
+% \end{macro}^^A \tud@x@typearea@warnings@off
+%
+% \iffalse
+%</class&option>
+%<*class&body>
+% \fi
+%
+% Die Seitenstile und Satzspiegel korrelieren sehr stark, weshalb das Paket
+% \pkg{scrlayer-scrpage} geladen sein muss und auch alle darauf aufbauenden
+% Einstellungen abgeschlossen sein müssen, um die Satzspiegel zu definieren.
+% Deshalb wird \cs{tud@cdgeometry@init} erst nach besagtem Paket aufgerufen.
+% Sollte das Laden des Paketes \pkg{geometry} verhindert werden, sind einige
+% wenige Befehle vorzuhalten.
+% \ToDo{Abhängigkeiten Satzspiegel<>Seitenstil beseitigen}[v2.07]
+% \begin{macrocode}
+\TUD@UnwindPackage{geometry}{%
+ \newcommand*\tud@cdgeometry@@init{%
+ \tud@cdgeometry@process%
+ \let\tud@cdgeometry@@init\relax%
+ }%
+ \newcommand*\tud@cdgeometry@@process{%
+ \setlength\tud@len@layoutwidth{\paperwidth}%
+ \setlength\tud@len@layoutheight{\paperheight}%
+ \tud@cdgeometry@set%
+ }%
+ \newcommand*\tud@x@geometry@fixmargins{}%
+}
+% \end{macrocode}
+% \begin{macro}{\tud@cdgeometry@@init}
+% \changes{v2.04}{2015/03/10}{neu}^^A
+% Wird das Paket \pkg{svg-extract} für das Erzeugen einer solitären Grafik
+% genutzt, so sollen keinerlei Einstellungen für den Satzspiegel vorgenommen
+% werden.
+% \begin{macrocode}
+\newcommand*\tud@cdgeometry@init{\tud@cdgeometry@@init}%
+\AfterPackage{svg-extract}{%
+ \renewcommand*\tud@cdgeometry@init{%
+ \if@svgx@standalone%
+ \@tud@x@scr@fontsize@settrue%
+ \else%
+ \tud@cdgeometry@@init%
+ \fi%
+ }%
+}
+% \end{macrocode}
+% \end{macro}^^A \tud@cdgeometry@@init
+% \begin{macro}{\cleardoubleoddpageusingstyle}
+% \begin{macro}{\cleardoubleevenpageusingstyle}
+% \begin{macro}{\cleardoublepageusingstyle}
+% Damit die Satzspiegelumstellungen nicht durchgeführt werden, wenn durch die
+% folgenden \KOMAScript-Befehle Leerseiten erzeugt werden, müssen diese minimal
+% angepasst werden.
+% \begin{macrocode}
+\patchcmd{\cleardoubleoddpageusingstyle}{\pagestyle}{%
+ \let\tud@BeforeSelectAnyPageStyle\@gobble\pagestyle%
+}{}{\tud@patch@wrn{cleardoubleoddpageusingstyle}}
+\patchcmd{\cleardoubleevenpageusingstyle}{\pagestyle}{%
+ \let\tud@BeforeSelectAnyPageStyle\@gobble\pagestyle%
+}{}{\tud@patch@wrn{cleardoubleevenpageusingstyle}}
+\patchcmd{\cleardoublepageusingstyle}{\pagestyle}{%
+ \let\tud@BeforeSelectAnyPageStyle\@gobble\pagestyle%
+}{}{\tud@patch@wrn{cleardoublepageusingstyle}}
+% \end{macrocode}
+% \end{macro}^^A \cleardoublepageusingstyle
+% \end{macro}^^A \cleardoubleevenpageusingstyle
+% \end{macro}^^A \cleardoubleoddpageusingstyle
+% \begin{macro}{\tud@ddc@enlargepage}
+% \changes{v2.02}{2014/06/23}{neu}^^A
+% Der Befehl wird nur für den Kompatibilitätsmodus zur Version~v2.02 benötigt
+% und für die Titelkopf- und Kapitelseiten verwendet. Er verkleinert die
+% entsprechenden Seiten, wenn für diese mit dem Befehl \cs{thispagestyle} einer
+% der \pgs{tudheadings}-Seitenstile gewählt wird \emph{und} das \DDC-Logo im
+% Fuß gesetzt werden soll. Der entsprechende Seitenstil kann im optionalen
+% Argument angegeben werden, wenn der Befehl bedingt ausgeführt werden soll.
+% \begin{macrocode}
+\tud@if@v@lower{2.03}{%
+ \newcommand*\tud@ddc@enlargepage[1][]{%
+ \tud@if@tudheadings{#1}{%
+ \ifstr{\tud@currentgeometry}{tudareaddc}{}{%
+ \tud@ddc@check%
+ \ifcase\@tempb\relax\else% \tud@ddc@foot@num!=false
+ \enlargethispage{-\tud@len@ddcdiff}%
+ \fi%
+ }%
+ }{}%
+ }%
+}{}
+% \end{macrocode}
+% \end{macro}^^A \tud@ddc@enlargepage
+%
+% \iffalse
+%</class&body>
+% \fi
+%
+% \Finale
+%
+\endinput