% \iffalse meta-comment %/GitFileInfo=tudscr-area.dtx % % TUD-Script -- Corporate Design of Technische Universität Dresden % ---------------------------------------------------------------------------- % % Copyright (C) Falk Hanisch , 2012-2022 % % ---------------------------------------------------------------------------- % % This work may be distributed and/or modified under the conditions of the % LaTeX Project Public License, either version 1.3c of this license or % any later version. The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.3c or later is part of all distributions of % LaTeX version 2008-05-04 or later. % % This work has the LPPL maintenance status "maintained". % % The current maintainer and author of this work is Falk Hanisch. % % ---------------------------------------------------------------------------- % % \fi % % \iffalse ins:batch + dtx:driver %<*ins> \ifx\documentclass\undefined \input docstrip.tex \ifToplevel{\batchinput{tudscr.ins}} \else \let\endbatchfile\relax \fi \endbatchfile % %<*dtx> \ProvidesFile{tudscr-area.dtx}[2022/08/09] \RequirePackage{tudscr-gitinfo} \documentclass[english,ngerman,xindy]{tudscrdoc} \iftutex \usepackage{fontspec} \else \usepackage[T1]{fontenc} \usepackage[ngerman=ngerman-x-latest]{hyphsubst} \fi \usepackage{babel} \usepackage{tudscrfonts} \usepackage[babel]{microtype} \GitHubBase{\TUDScriptRepository} \begin{document} \author{Falk Hanisch\TUDScriptContactTitle} \maketitle \tableofcontents \DocInput{\filename} \end{document} % % \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/q/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.08] % % \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} \tud@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} \tud@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 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@dim@widemargin} % \begin{length}{\tud@dim@slimmargin} % \begin{length}{\tud@dim@bothmargin} % 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} \tud@newdim\tud@dim@widemargin \tud@newdim\tud@dim@slimmargin \tud@newdim\tud@dim@bothmargin % \end{macrocode} % \end{length}^^A \tud@dim@bothmargin % \end{length}^^A \tud@dim@slimmargin % \end{length}^^A \tud@dim@widemargin % \begin{length}{\tud@dim@topmargin} % \begin{length}{\tud@dim@barheight} % \begin{length}{\tud@dim@headsep} % \begin{length}{\tud@dim@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} \tud@newdim\tud@dim@topmargin \tud@newdim\tud@dim@barheight \tud@newdim\tud@dim@headsep \tud@newdim\tud@dim@footsep % \end{macrocode} % \end{length}^^A \tud@dim@footsep % \end{length}^^A \tud@dim@headsep % \end{length}^^A \tud@dim@barheight % \end{length}^^A \tud@dim@topmargin % \begin{length}{\tud@dim@logox} % \begin{length}{\tud@dim@logoy} % \begin{length}{\tud@dim@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} \tud@newdim\tud@dim@logox \tud@newdim\tud@dim@logoy \tud@newdim\tud@dim@logowidth % \end{macrocode} % \end{length}^^A \tud@dim@logowidth % \end{length}^^A \tud@dim@logoy % \end{length}^^A \tud@dim@logox % \begin{length}{\tud@dim@line} % \changes{v2.02}{2014/06/23}{neu}^^A % \begin{length}{\tud@dim@heavyline} % \begin{length}{\tud@dim@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@dim@thinline}, koloriert \cs{tud@dim@heavyline}} Da im Dokument beide % Varianten vorkommen können, wird die Breite \cs{tud@dim@line} durch den % Seitenstil situativ entweder auf den Wert von \cs{tud@dim@thinline} oder aber % \cs{tud@dim@heavyline} gesetzt. % \begin{macrocode} \tud@newdim\tud@dim@line \tud@newdim\tud@dim@heavyline \tud@newdim\tud@dim@thinline % \end{macrocode} % \end{length}^^A \tud@dim@thinline % \end{length}^^A \tud@dim@heavyline % \end{length}^^A \tud@dim@line % \begin{length}{\tud@dim@areaheadvskip} % \changes{v2.02}{2014/06/23}{neu}^^A % \begin{length}{\tud@dim@areadiff} % \begin{length}{\tud@dim@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@dim@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@dim@areavskip} definiert. % \begin{macrocode} \tud@newdim\tud@dim@areaheadvskip \tud@newdim\tud@dim@areadiff \tud@newdim\tud@dim@areavskip % \end{macrocode} % \end{length}^^A \tud@dim@areavskip % \end{length}^^A \tud@dim@areadiff % \end{length}^^A \tud@dim@areaheadvskip % \begin{length}{\tud@dim@ddcdiff} % \changes{v2.02}{2014/06/23}{neu}^^A % Zu guter Letzt noch die Länge \cs{tud@dim@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}{\tud@newdim\tud@dim@ddcdiff}{} % \end{macrocode} % \end{length}^^A \tud@dim@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@dim@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{macro}{\tud@cdgeometry@resetlayout} % \changes{v2.06g}{2020/06/18}{neu, Bugfix für Änderung des Papierformates}^^A % \begin{macro}{\tud@cdgeometry@papersize@store} % \changes{v2.06g}{2020/06/18}{neu}^^A % \begin{macro}{\tud@cdgeometry@papersize@last} % \changes{v2.06g}{2020/06/18}{neu}^^A % \begin{length}{\tud@dim@layoutwidth} % \changes{v2.05}{2016/04/03}{neu}^^A % \begin{length}{\tud@dim@layoutheight} % \changes{v2.05}{2016/04/03}{neu}^^A % \begin{length}{\tud@dim@layouthoffset} % \changes{v2.05}{2016/04/03}{neu}^^A % \begin{length}{\tud@dim@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@dim@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} \tud@newif\if@tud@cdgeometry@adjust \tud@newdim\tud@dim@layoutwidth \tud@newdim\tud@dim@layoutheight \tud@newdim\tud@dim@layouthoffset \tud@newdim\tud@dim@layoutvoffset \newcommand*\tud@cdgeometry@set{% \tud@cdgeometry@assignlayout% \tud@if@v@lower{2.05}{% \ifdim\tud@dim@layoutheight<\dimexpr105mm+1.5mm\relax% \def\@tempa{0}% \else\ifdim\tud@dim@layoutheight<\dimexpr148mm+1.5mm\relax% \def\@tempa{1}% \else\ifdim\tud@dim@layoutheight<\dimexpr229mm+2mm\relax% \def\@tempa{2}% \else\ifdim\tud@dim@layoutheight<\dimexpr297mm+2mm\relax% \def\@tempa{3}% \else\ifdim\tud@dim@layoutheight<\dimexpr420mm+2mm\relax% \def\@tempa{4}% \else\ifdim\tud@dim@layoutheight<\dimexpr594mm+2mm\relax% \def\@tempa{5}% \else\ifdim\tud@dim@layoutheight<\dimexpr841mm+3mm\relax% \def\@tempa{6}% \else\ifdim\tud@dim@layoutheight<\dimexpr1189mm+3mm\relax% \def\@tempa{7}% \else% \def\@tempa{8}% \fi\fi\fi\fi\fi\fi\fi\fi% }{% \ifdim\tud@dim@layoutheight<\dimexpr125mm+1.5mm\relax% \def\@tempa{0}% \else\ifdim\tud@dim@layoutheight<\dimexpr176mm+2mm\relax% \def\@tempa{1}% \else\ifdim\tud@dim@layoutheight<\dimexpr250mm+2mm\relax% \def\@tempa{2}% \else\ifdim\tud@dim@layoutheight<\dimexpr353mm+2mm\relax% \def\@tempa{3}% \else\ifdim\tud@dim@layoutheight<\dimexpr500mm+2mm\relax% \def\@tempa{4}% \else\ifdim\tud@dim@layoutheight<\dimexpr707mm+3mm\relax% \def\@tempa{5}% \else\ifdim\tud@dim@layoutheight<\dimexpr1000mm+3mm\relax% \def\@tempa{6}% \else\ifdim\tud@dim@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@dim@layoutheight}{148mm}% \tud@setdim\tud@dim@widemargin{15mm}% \tud@setdim\tud@dim@widemargin{\@tempa\tud@dim@widemargin}% \tud@setdim\tud@dim@heavyline{0.5pt}% \tud@setdim\tud@dim@heavyline{\@tempa\tud@dim@heavyline}% \tud@setdim\tud@dim@thinline{0.25pt}% \tud@setdim\tud@dim@thinline{\@tempa\tud@dim@thinline}% \tud@setdim\@tempdima{4.5pt}% \tud@setdim\@tempdima{\@tempa\@tempdima}% \edef\tud@head@fontsize{\strip@pt\@tempdima}% \or% <=A6/B6 \tud@setdim\tud@dim@widemargin{15mm}% \tud@setdim\tud@dim@heavyline{0.5pt}% \tud@setdim\tud@dim@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% \tud@setdim\tud@dim@widemargin{30mm}% \tud@setdim\tud@dim@heavyline{1pt}% \tud@setdim\tud@dim@thinline{0.5pt}% \renewcommand*\tud@head@fontsize{9}% \else% \tud@setdim\tud@dim@widemargin{21.213203mm}% \tud@setdim\tud@dim@heavyline{0.707107pt}% \tud@setdim\tud@dim@thinline{0.353553pt}% \renewcommand*\tud@head@fontsize{6.363961}% \fi% \or% <=A4/B4 \tud@setdim\tud@dim@widemargin{30mm}% \tud@setdim\tud@dim@heavyline{1pt}% \tud@setdim\tud@dim@thinline{0.5pt}% \renewcommand*\tud@head@fontsize{9}% \or% <=A3/B3 \tud@setdim\tud@dim@widemargin{42.426407mm}% \tud@setdim\tud@dim@heavyline{1.414214pt}% \tud@setdim\tud@dim@thinline{0.707107pt}% \renewcommand*\tud@head@fontsize{12.727922}% \or% <=A2/B2 \tud@setdim\tud@dim@widemargin{60mm}% \tud@setdim\tud@dim@heavyline{2pt}% \tud@setdim\tud@dim@thinline{1pt}% \renewcommand*\tud@head@fontsize{18}% \or% <=A1/B1 \tud@setdim\tud@dim@widemargin{84.852814mm}% \tud@setdim\tud@dim@heavyline{2.828427pt}% \tud@setdim\tud@dim@thinline{1.414214pt}% \renewcommand*\tud@head@fontsize{25.455844}% \or% <=A0/B0 \tud@setdim\tud@dim@widemargin{120mm}% \tud@setdim\tud@dim@heavyline{4pt}% \tud@setdim\tud@dim@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@dim@layoutheight}{1189mm}% \tud@setdim\tud@dim@widemargin{120mm}% \tud@setdim\tud@dim@widemargin{\@tempa\tud@dim@widemargin}% \tud@setdim\tud@dim@heavyline{4pt}% \tud@setdim\tud@dim@heavyline{\@tempa\tud@dim@heavyline}% \tud@setdim\tud@dim@thinline{2pt}% \tud@setdim\tud@dim@thinline{\@tempa\tud@dim@thinline}% \tud@setdim\@tempdima{36pt}% \tud@setdim\@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@dim@layoutheight}{297mm}% \tud@setdim\tud@dim@widemargin{\@tempa\tud@dim@widemargin}% \tud@setdim\tud@dim@heavyline{\@tempa\tud@dim@heavyline}% \tud@setdim\tud@dim@thinline{\@tempa\tud@dim@thinline}% \tud@setdim\@tempdima{\tud@head@fontsize pt}% \tud@setdim\@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% \tud@setdim\tud@dim@slimmargin{\tud@dim@widemargin*2/3}% \tud@setdim\tud@dim@bothmargin{\tud@dim@widemargin*5/3}% \tud@setdim\tud@dim@topmargin{\tud@dim@widemargin*7/6}% \tud@setdim\tud@dim@barheight{\tud@dim@widemargin/6}% \tud@setdim\tud@dim@headsep{\tud@dim@widemargin*2/5}% \tud@setdim\tud@dim@logox{\tud@dim@widemargin*11/30}% \tud@setdim\tud@dim@logoy{\tud@dim@widemargin*9/20}% \tud@setdim\tud@dim@logowidth{\tud@dim@widemargin*19/10}% \tud@setdim\tud@dim@footsep{\tud@dim@widemargin-\tud@dim@topmargin*3/5}% % \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% \tud@setdim\tud@dim@headsep{.707107\tud@dim@headsep}% \tud@setdim\tud@dim@footsep{.707107\tud@dim@footsep}% \fi% \tud@cdgeometry@papersize@store% } % \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@dim@layoutwidth<\p@\relax% \tud@setdim\tud@dim@layoutwidth{\paperwidth}% \fi% \ifdim\tud@dim@layoutheight<\p@\relax% \tud@setdim\tud@dim@layoutheight{\paperheight}% \fi% } % \end{macrocode} % Das Verarbeiten des Parameters \prm{layout} von \pkg{geometry} ist etwas % komplizierter. Normalerweise werden dessen Einstellungen bei einer einfachen % Änderung des Satzspiegels beibehalten. Bei einer Änderung des Papierformates % sind die damit gemachten Einstellungen nur bedingt weiterhin nutzbar. Die % Offset-Werte bleiben in diesem Fall erhalten, das Layoutformat allerdings % wird zurückgesetzt. Das aktuelle Papierformat wird nach der Prüfung auf eine % Änderung in \cs{tud@cdgeometry@papersize@last} gesichert. % \begin{macrocode} \newcommand*\tud@cdgeometry@papersize@last{} \newcommand*\tud@cdgeometry@papersize@store{% \edef\tud@cdgeometry@papersize@last{\the\paperheight:\the\paperwidth}% } \newcommand*\tud@cdgeometry@resetlayout{% \begingroup% \edef\tud@res@a{\the\paperheight:\the\paperwidth}% \def\tud@res@b{% \endgroup% \tud@cdgeometry@papersize@store% }% \ifx\tud@res@a\tud@cdgeometry@papersize@last\else% \appto\tud@res@b{% \tud@setdim\tud@dim@layoutwidth{\z@}% \tud@setdim\tud@dim@layoutheight{\z@}% \tud@x@geometry@fixmargins% }% \fi% \tud@res@b% } % \end{macrocode} % \end{length}^^A \tud@dim@layoutvoffset % \end{length}^^A \tud@dim@layouthoffset % \end{length}^^A \tud@dim@layoutheight % \end{length}^^A \tud@dim@layoutwidth % \end{macro}^^A \tud@cdgeometry@papersize@last % \end{macro}^^A \tud@cdgeometry@papersize@store % \end{macro}^^A \tud@cdgeometry@resetlayout % \end{macro}^^A \tud@cdgeometry@assignlayout % \end{macro}^^A \if@tud@cdgeometry@adjust % \end{macro}^^A \tud@cdgeometry@set % % \iffalse % %<*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} \tud@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} \tud@if@preamble{}{% \if@tud@cdgeometry@reset\else% false \ifcase\tud@cdgeometry@num\relax% \tud@loadgeometry{current@typearea}% \@tud@x@geometry@fixmarginstrue% \or% custom \tud@loadgeometry{current@custom}% \@tud@x@geometry@fixmarginstrue% \fi% \TUD@SpecialOptionAtDocument{tud@cdgeometry@process}% \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@extrabottommargin@dim} % 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@extrabottommargin@dim{0pt} \TUD@key{extrabottommargin}{% \TUD@set@dimkey{extrabottommargin}{\tud@extrabottommargin@dim}{#1}% \ifx\FamilyKeyState\FamilyKeyStateProcessed% \TUD@SpecialOptionAtDocument{tud@cdgeometry@process}% \fi% } % \end{macrocode} % \end{macro}^^A \tud@extrabottommargin@dim % \begin{option}{bleedmargin} % \changes{v2.05}{2016/06/14}{neu}^^A % \begin{macro}{\tud@bleedmargin@dim} % \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@bleedmargin@dim}, welches natürlich auch vom Anwender mit % der Option \opt{bleedmargin} beliebig gesetzt werden kann. Als Standardwert % werden 5\% der größten Randbreite gesetzt. % \ToDo{^^A% % Was genau ist der Unterschied zwischen cropmargin und bleedmargin? % Wo kommt der Standardwert her? Sinnvoll für Standardklassen? % }[v2.07]^^A % \begin{macrocode} \newcommand*\tud@bleedmargin@dim{.2in} \TUD@key{bleedmargin}{% \TUD@set@dimkey{bleedmargin}{\tud@bleedmargin@dim}{#1}% % \end{macrocode} % Negative Werte sind nicht möglich, diese werden automatisch korrigiert. % \begin{macrocode} \ifx\FamilyKeyState\FamilyKeyStateProcessed% \tud@length@setabsolute\tud@bleedmargin@dim% \fi% } % \end{macrocode} % \end{macro}^^A \tud@bleedmargin@dim % \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}{% \FamilyKeyStateUnknownValue% \TUD@SpecialOptionAtDocument{tud@cdgeometry@process}% } \DefineFamilyKey{KOMA}{twocolumn}{% \FamilyKeyStateUnknownValue% \TUD@SpecialOptionAtDocument{tud@cdgeometry@process}% } % \end{macrocode} % \end{option}^^A twocolumn % \end{option}^^A twoside % % \iffalse % %<*class&body> % \fi % % \subsection{Realisierung der Satzspiegeleinstellungen} % Das Paket \pkg{geometry} erlaubt eine genaue Vorgabe des Satzspiegels und % der Seitenränder, wie es vom \TUDCD 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} \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. % \ToDo{erweiterte Möglichkeiten von \cs{newgeometry} dokumentieren}[v2.07] % \begin{macrocode} \tud@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}% \tud@if@preamble{}{% \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% }% }% % \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% \tud@if@preamble{}{% \@tud@x@geometry@fixmarginstrue% \ifcase\tud@cdgeometry@num\relax% false \tud@cdgeometry@reset{typearea}% \or% custom \tud@cdgeometry@reset{custom}% \fi% \tud@cdgeometry@process% }% \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} \tud@newif\if@tud@x@geometry@fixmargins% \newcommand*\tud@x@geometry@fixmargins{% \ifGm@pass\else% \tud@addtodim\oddsidemargin{-\tud@dim@layouthoffset}% \tud@addtodim\evensidemargin{-\tud@dim@layouthoffset}% \tud@addtodim\topmargin{-\tud@dim@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 % \changes{v2.06g}{2020/06/18}{Bugfix für Änderung des Papierformates}^^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}% % \end{macrocode} % Bei einer Änderung des Papierformates wird das Layoutformat zurückgesetzt. % \begin{macrocode} \tud@x@geometry@area@set{paper}% \tud@cdgeometry@resetlayout% \ifx\tud@x@geometry@layout\@empty\else% \begingroup% \tud@x@geometry@area@set{layout}% \tud@cdgeometry@assignlayout% \edef\tud@res@a{% \endgroup% \unexpanded{\tud@setdim\tud@dim@layoutwidth}{\the\paperwidth}% \unexpanded{\tud@setdim\tud@dim@layoutheight}{\the\paperheight}% }% \tud@res@a% \fi% \tud@if@strequal{#2}{newgeometry}{% \edef\@tempb{% \noexpand\paperwidth=\the\paperwidth\relax% \noexpand\paperheight=\the\paperheight\relax% }% \expandafter\apptocmd\expandafter\Gm@restore@org\expandafter{% \@tempb% }{}{\tud@patch@wrn{Gm@restore@org}}% % \end{macrocode} % Wird der Befehl verwendet, wenn eigentlich \pkg{typearea} aktiv ist, so % werden lediglich die Einstellungen zu \prm{paper} und \prm{layout} beachtet. % Dies wird über die gepatchte Version von \cs{typearea} realisert. Siehe dazu % \cs{tud@x@typearea@before} und \cs{tud@x@typearea@after} für Details. % \begin{macrocode} \ifcase\tud@cdgeometry@num\relax% \typearea[current]{current}% \ifx\tud@x@geometry@parameter\@empty\else% \ClassWarning{\TUD@Class@Name}{% It isn't possible to use \string\newgeometry with any\MessageBreak% key except `paper' or `layout' when package `typearea'\MessageBreak% is used with`cdgeometry=typearea'% }% \fi% % \end{macrocode} % Die Abarbeitung der gegebenen Parameter wird mit \cs{tud@cdgeometry@process} % innerhalb von \cs{Gm@changelayout} realisiert. Letzteres Makro wird wiederum % von der originalen Definition von \cs{newgeometry} aufgerufen. % \begin{macrocode} \else% \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}% \fi% }{% \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}{% \tud@if@strequal{#1}{false}{% \tud@setdim\tud@dim@layoutwidth{\z@}% \tud@setdim\tud@dim@layoutheight{\z@}% \tud@setdim\tud@dim@layouthoffset{\z@}% \tud@setdim\tud@dim@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}{% \tud@x@geometry@area@def{layout}{#1:\tud@dim@layoutheight}% }% \TUD@parameter@def{layoutheight}{% \tud@x@geometry@area@def{layout}{\tud@dim@layoutwidth:#1}% }% \TUD@parameter@def{layoutoffset}{% \def\@tempa##1,##2,##3\@nil{% \IfArgIsEmpty{##2}{% \tud@setdim\tud@dim@layouthoffset{##1}% \tud@setdim\tud@dim@layoutvoffset{##1}% }{% \tud@setdim\tud@dim@layouthoffset{##1}% \tud@setdim\tud@dim@layoutvoffset{##2}% }% }% \@tempa#1,,\@nil% }% \TUD@parameter@def{layouthoffset}{\tud@setdim\tud@dim@layouthoffset{#1}}% \TUD@parameter@def{layoutvoffset}{\tud@setdim\tud@dim@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 |\tud@x@geometry@...| für \val{paper}, \val{layout} sowie % \val{parameter} für alles Übrige. % \begin{macrocode} \newcommand*\tud@x@geometry@area@def[2]{% \tud@strlowercase\@tempa{#2}% \def\@tempb##1paper##2\@nil{% \tud@if@strequal{##2}{paper}{\def\@tempa{##1}}{}% }% \expandafter\@tempb\@tempa paper\@nil% \@tempswafalse% \TUD@set@numkey{paper}{@tempc}{% {seascape}{0},{landscape}{0},{portrait}{0},% {letter}{0},{executive}{0},{legal}{0}% }{\@tempa}% \@tempswafalse% \ifx\FamilyKeyState\FamilyKeyStateProcessed% \ifcase\@tempc\relax% \@tempswatrue% \fi% \fi% \if@tempswa\else% \ifx\@tempa\@empty\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% \tud@if@strequal{\@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 sequentielle % 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{% \IfArgIsEmpty{##2}{% \KOMAoption{paper}{##1}% }{% % \end{macrocode} % \KOMAScript{} stellt sich ziemlich clever an und setzt das Papierformat in % dieser Notation immer korrekt im Quer- oder Hochformat, unabhängig von der % Reihenfolge der angegebenen Längen. Für den Parameter \prm{layout} ist dies % jedoch unerwünscht, weshalb der verantwortliche Befehl deaktiviert wird. % \emph{Dies geschieht hier direkt und nicht in einer Gruppe,} weil der Aufruf % von \cs{tud@x@geometry@area@set}|{layout}| lokal erfolgt. % \begin{macrocode} \tud@if@strequal{#1}{layout}{\let\scr@setpaperorientation\relax}{}% \KOMAoption{paper}{##1:##2}% }% }% \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% \begingroup% % \end{macrocode} % Das Setzen des Layouts erfolgt nur, wenn die dazugehörigen Längen \emph{nicht} % denen des Papierbogens entsprechen. % \begin{macrocode} \tud@cdgeometry@assignlayout% \@tud@res@swafalse% \ifdim\tud@dim@layoutwidth=\paperwidth\relax\else\@tud@res@swatrue\fi% \ifdim\tud@dim@layoutheight=\paperheight\relax\else\@tud@res@swatrue\fi% \edef\tud@res@a{% \endgroup% \unexpanded{\def#1}{% layoutoffset={% \the\tud@dim@layouthoffset,\the\tud@dim@layoutvoffset% }% \if@tud@res@swa% ,layoutsize={\the\tud@dim@layoutwidth,\the\tud@dim@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% \tud@if@preamble{% % \end{macrocode} % In der Präambel werden mit \cs{Gm@initnewgm} vor jedem Satzspiegel die zuvor % gemachten Einstellungen zurückgesetzt. % \begin{macrocode} \Gm@initnewgm% \edef\@tempa{papersize={\the\paperwidth,\the\paperheight},#1}% \def\@tempc{\tud@cs@use{geometry}}% \expandafter\@tempc\expandafter{\@tempa,driver=none}% }{% % \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} \edef\@tempa{#1}% \tud@cs@store{Gm@restore@org}% \edef\@tempb{% \noexpand\paperwidth=\the\paperwidth\relax% \noexpand\paperheight=\the\paperheight\relax% }% \expandafter\apptocmd\expandafter\Gm@restore@org\expandafter{% \@tempb% }{}{\tud@patch@wrn{Gm@restore@org}}% \def\@tempc{\tud@cs@use{newgeometry}}% \expandafter\@tempc\expandafter{\@tempa}% \tud@cs@restore{Gm@restore@org}% }% \@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\glueexpr\oddsidemargin+1in-\ta@bcor\relax\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. % \ToDo{Angabe von BCOR zerschießt den gewünschten Satzspiegel}[v2.07] % \begin{macrocode} \else% custom \ifGm@pass\else% \edef\tud@cdgeometry@hmargin{% left=\the\dimexpr\glueexpr\oddsidemargin+1in% -\Gm@bindingoffset\relax\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} % Die Einstellungen für zweiseitigen respektive zweispaltigen Satz. % \begin{macrocode} \if@twoside% \appto\tud@cdgeometry@hmargin{,twoside}% \fi% \if@twocolumn% \appto\tud@cdgeometry@hmargin{,twocolumn}% \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} \tud@setdim\tud@dim@areadiff{% \tud@dim@topmargin+\tud@dim@barheight+\tud@dim@headsep% -\topmargin-\headheight-\headsep-1in% }% \ifdim\tud@dim@areadiff<\z@\relax% \tud@addtodim\tud@dim@headsep{-\tud@dim@areadiff}% \tud@setdim\@tempdima{\z@}% \else% \tud@setdim\@tempdima{\tud@dim@areadiff}% \fi% \edef\tud@cdgeometry@tudmargin{% ignorehead=true,% top=\the\dimexpr\tud@dim@topmargin+\tud@dim@barheight% +\tud@dim@headsep\relax,% headheight=\the\dimexpr\tud@dim@topmargin+\tud@dim@barheight% -\tud@dim@logoy\relax,% headsep=\the\tud@dim@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}{% \tud@setdim\tud@dim@ddcdiff{% \tud@dim@topmargin*3/5-\footskip+\tud@dim@headsep% +\footheight-1\baselineskip*5/4% }% \edef\tud@cdgeometry@ddcmargin{% textheight=\the\dimexpr\textheight-\tud@dim@areadiff% -\tud@dim@ddcdiff\relax,% footskip=\the\dimexpr\footskip+\tud@dim@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@extrabottommargin@dim\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 \tud@setdim\@tempdima{\tud@dim@widemargin}% \if@reversemargin% \tud@setdim\@tempdimc{\tud@dim@widemargin}% \else% \tud@setdim\@tempdimc{\tud@dim@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 \tud@setdim\@tempdima{\tud@dim@bothmargin/2}% \tud@setdim\@tempdimc{\tud@dim@bothmargin/2}% % \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% \tud@setdim\@tempdima{\tud@dim@bothmargin*2/5}% \else% \tud@setdim\@tempdima{\tud@dim@bothmargin/2}% \fi% \tud@setdim\@tempdimc{\tud@dim@bothmargin/2}% \if@twoside% \if@reversemargin% \tud@setdim\@tempdimc{\tud@dim@bothmargin*2/5}% \else% \tud@setdim\@tempdimc{\tud@dim@bothmargin*3/5}% \fi% \fi% \fi% % \end{macrocode} % Die \emph{Berechnung} der Textbreite ist für alle Varainten identisch. Danach % erfolgt die Zuweisung zum Makro. % \begin{macrocode} \tud@addtodim\@tempdimc{-\headsep}% \tud@setdim\@tempdimb{\tud@dim@layoutwidth-\tud@dim@bothmargin-\ta@bcor}% \if@mincl% \tud@addtodim\@tempdimb{-\@tempdimc}% \fi% \edef\tud@cdgeometry@hmargin{% left=\the\@tempdima,% textwidth=\the\@tempdimb,% \tud@cdgeometry@mpincl,% marginparwidth=\the\@tempdimc,% marginparsep=\the\dimexpr\headsep/2\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\tud@dim@bothmargin/2\relax,% headheight=\the\headheight,% headsep=\the\tud@dim@headsep,% bottom=\the\dimexpr\glueexpr\tud@dim@bothmargin/2% +\tud@extrabottommargin@dim\relax\relax,% \tud@cdgeometry@fincl,% footskip=\the\dimexpr\tud@dim@headsep+\footheight% -1\baselineskip*5/4\relax% }% }{% \edef\tud@cdgeometry@vmargin{% \tud@cdgeometry@hincl,% top=\the\tud@dim@slimmargin,% headheight=\the\headheight,% headsep=\the\headsep,% bottom=\the\dimexpr\glueexpr\tud@dim@widemargin% +\tud@extrabottommargin@dim\relax\relax,% \tud@cdgeometry@fincl,% footskip=\the\dimexpr\tud@dim@footsep+\footheight\relax% }% }% \edef\tud@cdgeometry@tudmargin{% ignorehead=true,% top=\the\dimexpr\tud@dim@topmargin+\tud@dim@barheight% +\tud@dim@headsep\relax,% headheight=\the\dimexpr\tud@dim@topmargin+\tud@dim@barheight% -\tud@dim@logoy\relax,% headsep=\the\tud@dim@headsep% }% % \end{macrocode} % Es wird die Differenz der Höhen zwischen TUD-Kopf und Standardkopfzeile % für den Satzspiegel des \CDs berechnet. % \begin{macrocode} \tud@setdim\tud@dim@areadiff{% \tud@dim@topmargin+\tud@dim@barheight+\tud@dim@headsep% -\tud@dim@slimmargin% }% % \end{macrocode} % Für die Kompatibilitätsvariante wieder mal die Extrawurst. % \begin{macrocode} \tud@if@v@lower{2.03}{% \tud@setdim\tud@dim@areadiff{% \tud@dim@topmargin+\tud@dim@barheight+\tud@dim@headsep% -\tud@dim@bothmargin/2% }% % \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} \tud@setdim\tud@dim@ddcdiff{\tud@dim@topmargin*3/5}% \edef\tud@cdgeometry@ddcmargin{% \if@fincl% bottom=\the\dimexpr\glueexpr\tud@dim@bothmargin/2% +\tud@extrabottommargin@dim+\tud@dim@ddcdiff+\tud@dim@headsep% +\footheight-1\baselineskip*5/4\relax\relax,% \else% bottom=\the\dimexpr\glueexpr\tud@dim@bothmargin/2% +\tud@extrabottommargin@dim+\tud@dim@ddcdiff\relax\relax,% \fi% footskip=\the\dimexpr\tud@dim@headsep+\footheight% -1\baselineskip*5/4+\tud@dim@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@dim@areadiff<\z@\relax\tud@setdim\tud@dim@areadiff{\z@}\fi% \global\tud@dim@areadiff=\tud@dim@areadiff% %<*book|report|article> \tud@setdim\tud@dim@areaheadvskip{\tud@dim@topmargin*11/50}% \if@tud@cdgeometry@adjust% \tud@setdim\tud@dim@areaheadvskip{\tud@dim@areaheadvskip/2}% \fi% \global\tud@dim@areaheadvskip=\tud@dim@areaheadvskip% % % \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@dim@ddcdiff<\z@\relax\tud@setdim\tud@dim@ddcdiff{\z@}\fi% \global\tud@dim@ddcdiff=\tud@dim@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} \tud@if@preamble{}{% \tud@if@strequal{\tud@currentgeometry}{stdarea}{}{% \expandafter\tud@loadgeometry\expandafter{\tud@currentgeometry}% }% }% }% % \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 vollständig vorgenommen und auch alle % Klassenoptionen korrekt verarbeitet werden, wird die Berechnung erstmalig % am Ende der Präambel mit \cs{AtEndPreamble}|{|\cs{tud@cdgeometry@init}|}| % ausgeführt, nachdem der Ladezustandes des Paketes \pkg{scrlayer-scrpage} % geprüft wurde. 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@extrabottommargin@dim}% \def\tud@extrabottommargin@dim{0pt}% % \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{% papersize={\the\paperwidth,\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\do##1{% \apptocmd\Gm@restore@@init@typearea{% ##1% }{}{\tud@patch@wrn{Gm@restore@@init@typearea}}% }% \dolistloop{\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@extrabottommargin@dim}% % \end{macrocode} % Der Kopf im \TUDCD 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} \tud@if@strequal{#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 \tud@if@strequal{\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 \tud@if@strequal{\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} }{% \tud@if@strequal{\tud@currentgeometry}{tudarea}{}{% \tud@loadgeometry{tudarea}% \gdef\tud@currentgeometry{tudarea}% }% }% % \end{macrocode} % Die Länge \cs{tud@dim@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} \tud@setdim\tud@dim@areavskip{\z@}% % \end{macrocode} % Das ist der Zweig, wenn kein \pgs{tudheadings}-Seitenstil geladen werden % soll. Zusätzlich zum Satzspeigel wird außerdem der Seitenstil \pgs{empty} % zurückgesetzt. % \begin{macrocode} }{% \tud@if@strequal{\tud@currentgeometry}{stdarea}{}{% \tud@loadgeometry{stdarea}% \gdef\tud@currentgeometry{stdarea}% }% % \end{macrocode} % Die Länge \cs{tud@dim@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} \tud@setdim\tud@dim@areavskip{\tud@dim@areadiff}% \ifnum\tud@cdgeometry@num>\@ne\relax% true/symmetric/twoside \if@hincl% \tud@addtodim\tud@dim@areavskip{-\headheight-\tud@dim@headsep}% \fi% \fi% }% % \end{macrocode} % Die Länge \cs{tud@dim@areavskip} wird vorsichtshalber global gesetzt. % \begin{macrocode} \global\tud@dim@areavskip=\tud@dim@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} % \changes{v2.06g}{2020/06/18}{Sichern der Längen für \prm{layout}}^^A % \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@cdgeometry@resetlayout% \tud@cslength@store{paperheight}% \tud@cslength@store{paperwidth}% \begingroup% \tud@cdgeometry@assignlayout% \edef\tud@res@a{% \endgroup% \unexpanded{\tud@setdim\paperheight}{\the\tud@dim@layoutheight}% \unexpanded{\tud@setdim\paperwidth}{\the\tud@dim@layoutwidth}% }% \tud@res@a% } \newcommand*\tud@x@typearea@after{% \tud@cslength@restore{paperheight}% \tud@cslength@restore{paperwidth}% \tud@if@preamble{% \TUD@key@preset{cdgeometry}{false}% }{% \tud@cdgeometry@reset{typearea}% \tud@cdgeometry@process% }% } \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% \tud@setdim\@tempdima{#2}% \tud@setdim\@tempdimb{#3}% \edef\tud@res@a{% \endgroup% \def\noexpand\tud@x@typearea@init{% \unexpanded{\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}% \def\tud@res@b##1{\unexpanded{\tud@setdim##1}{\the##1}}% \edef\tud@res@a{% \endgroup% \unexpanded{\def#1}{% \tud@res@b{\tud@dim@layoutwidth}% \tud@res@b{\tud@dim@layoutheight}% \tud@res@b{\tud@dim@layouthoffset}% \tud@res@b{\tud@dim@layoutvoffset}% \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&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% \tud@if@strequal{##1}{typearea}{% \tud@if@strstart{##2}{% Bad type area settings!% }{\@tud@res@swafalse}{}% \tud@if@strstart{##2}{% Maybe no optimal type area settings!% }{\@tud@res@swafalse}{}% \tud@if@strstart{##2}{% Very low DIV value!% }{\@tud@res@swafalse}{}% }{}% \if@tud@res@swa% \tud@cs@use{PackageWarningNoLine}{##1}{##2}% \else% \IfArgIsEmpty{#1}{}{% \listeadd#1{\noexpand\tud@cs@use{PackageWarningNoLine}{##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&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{% \tud@setdim\tud@dim@layoutwidth{\paperwidth}% \tud@setdim\tud@dim@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}{% \tud@if@strequal{\tud@currentgeometry}{tudareaddc}{}{% \tud@ddc@check% \ifcase\@tempb\relax\else% \tud@ddc@foot@num!=false \enlargethispage{-\tud@dim@ddcdiff}% \fi% }% }{}% }% }{} % \end{macrocode} % \end{macro}^^A \tud@ddc@enlargepage % % \iffalse % % \fi % % \PrintBackMatter % \endinput