diff options
author | Karl Berry <karl@freefriends.org> | 2019-06-28 21:06:55 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2019-06-28 21:06:55 +0000 |
commit | 6677e7d16babf1c0596fd30f9aeb6b13433725cd (patch) | |
tree | 84163738e611a8ebcbbed7102f3efa9238211476 /Master/texmf-dist/source/latex/tudscr/tudscr-area.dtx | |
parent | 2a2ad17b85ef254d44022ec0fbcadb62cc90f431 (diff) |
tudscr (28jun19)
git-svn-id: svn://tug.org/texlive/trunk@51500 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/tudscr/tudscr-area.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/tudscr/tudscr-area.dtx | 1385 |
1 files changed, 791 insertions, 594 deletions
diff --git a/Master/texmf-dist/source/latex/tudscr/tudscr-area.dtx b/Master/texmf-dist/source/latex/tudscr/tudscr-area.dtx index 8a83208a5d0..b5bbf426ee7 100644 --- a/Master/texmf-dist/source/latex/tudscr/tudscr-area.dtx +++ b/Master/texmf-dist/source/latex/tudscr/tudscr-area.dtx @@ -1,10 +1,10 @@ -% \CheckSum{2186} +% \CheckSum{2247} % \iffalse meta-comment % % TUD-Script -- Corporate Design of Technische Universität Dresden % ---------------------------------------------------------------------------- % -% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2017 +% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2019 % % ---------------------------------------------------------------------------- % @@ -48,17 +48,24 @@ % % \iffalse %%% From File: tudscr-area.dtx -%<*driver> -\ifx\ProvidesFile\@undefined\def\ProvidesFile#1[#2]{}\fi -\ProvidesFile{tudscr-area.dtx}[% - 2017/03/29 v2.05l TUD-Script (type or page area)% +%<*dtx> +% \fi% +% +\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi +\ProvidesFile{tudscr-area.dtx}[2019/06/28 v2.06 TUD-Script\space% + (type or page area)% ] -\RequirePackage[ngerman=ngerman-x-latest]{hyphsubst} +% +% \iffalse \documentclass[english,ngerman,xindy]{tudscrdoc} -\usepackage[T1]{fontenc} -\usepackage{selinput}\SelectInputMappings{adieresis={ä},germandbls={ß}} +\ifpdftex{ + \usepackage[T1]{fontenc} + \usepackage[ngerman=ngerman-x-latest]{hyphsubst} +}{ + \usepackage{fontspec} +} \usepackage{babel} -\usepackage{tudscrfonts} % only load this package, if the fonts are installed +\usepackage{tudscrfonts} \KOMAoptions{parskip=half-} \usepackage{bookmark} \usepackage[babel]{microtype} @@ -75,7 +82,7 @@ \tableofcontents \DocInput{\filename} \end{document} -%</driver> +%</dtx> % \fi % % \selectlanguage{ngerman} @@ -93,8 +100,6 @@ % 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{Abhängigkeiten zwischen Satzspiegel und Seitenstilen beseitigen}[v2.07] -% \ToDo{DIV=calc vordefinieren?}[v2.07] % \ToDo{% % Unterstützung von PDF-Boxen für die Druckausgabe %^^A\url{https://groups.google.com/forum/#!topic/de.comp.text.tex/1gouJ0Zov6o} @@ -137,7 +142,7 @@ }% \pretocmd{\CROP@center}{% \@tud@x@crop@centertrue% - }{}{\tud@patch@wrn{CROP@center}} + }{}{\tud@patch@wrn{CROP@center}}% } % \end{macrocode} % \end{macro}^^A \CROP@center @@ -271,6 +276,12 @@ \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 @@ -278,10 +289,12 @@ % \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{length}{\tud@len@layoutheight} -% \changes{v2.05}{2016/04/03}{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} @@ -300,20 +313,24 @@ % DIN~A5 mit den skalierten Seitenrändern erstellt. % \begin{macrocode} \newif\if@tud@cdgeometry@adjust -\newlength\tud@len@layoutheight \newlength\tud@len@layoutwidth +\newlength\tud@len@layoutheight \newlength\tud@len@layouthoffset \newlength\tud@len@layoutvoffset -\newcommand*\tud@cdgeometry@set{% - \ifGm@layout% - \setlength\tud@len@layoutheight{\Gm@layoutheight}% - \setlength\tud@len@layoutwidth{\Gm@layoutwidth}% - \else% - \setlength\tud@len@layoutheight{\paperheight}% +% \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% - \setlength\tud@len@layouthoffset{\Gm@layouthoffset}% - \setlength\tud@len@layoutvoffset{\Gm@layoutvoffset}% + \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}% @@ -393,8 +410,8 @@ \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}% + \setlength\@tempdima{4.5pt}% + \setlength\@tempdima{\@tempa\@tempdima}% \edef\tud@head@fontsize{\strip@pt\@tempdima}% \or% <=A6/B6 \setlength\tud@len@widemargin{15mm}% @@ -467,8 +484,8 @@ \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}% + \setlength\@tempdima{36pt}% + \setlength\@tempdima{\@tempa\@tempdima}% \edef\tud@head@fontsize{\strip@pt\@tempdima}% \fi% % \end{macrocode} @@ -480,8 +497,8 @@ \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}% + \setlength\@tempdima{\tud@head@fontsize pt}% + \setlength\@tempdima{\@tempa\@tempdima}% \edef\tud@head@fontsize{\strip@pt\@tempdima}% \fi% % \end{macrocode} @@ -513,8 +530,9 @@ % \end{macrocode} % \end{length}^^A \tud@len@layoutvoffset % \end{length}^^A \tud@len@layouthoffset -% \end{length}^^A \tud@len@layoutwidth % \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 % @@ -523,6 +541,23 @@ %<*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 @@ -543,11 +578,9 @@ % (\opt{geometry}|=|\val{no}). Mit \cs{tud@cdgeometry@@process} werden alle % getroffenen Satzspiegeloptionen umgesetzt und nachfolgend definiert. % \begin{macrocode} -\cs@lock{tud@cdgeometry@num}{0} +\tud@locked@newnum{tud@cdgeometry@num}{0} \newcommand*\tud@cdgeometry@calc@num{0} \TUD@key{cdgeometry}[true]{% - \let\@tempb\tud@cdgeometry@num% - \let\@tempc\tud@cdgeometry@calc@num% \TUD@set@numkey{cdgeometry}{@tempa}{% \TUD@bool@numkey,% {typearea}{0},% @@ -563,36 +596,50 @@ }{#1}% \ifx\FamilyKeyState\FamilyKeyStateProcessed% \ifcase\@tempa\relax% false/typearea - \cs@set@lock{tud@cdgeometry@num}{0}% + \tud@locked@num@set{tud@cdgeometry@num}{0}% \or% true/cd - \cs@set@lock{tud@cdgeometry@num}{2}% + \tud@locked@num@set{tud@cdgeometry@num}{2}% \or% symmetric - \cs@set@lock{tud@cdgeometry@num}{3}% + \tud@locked@num@set{tud@cdgeometry@num}{3}% \or% twoside - \cs@set@lock{tud@cdgeometry@num}{4}% + \tud@locked@num@set{tud@cdgeometry@num}{4}% \TUD@KOMAoptions{twoside=true}% \or% oneside \ifnum\tud@cdgeometry@num>\thr@@\relax% - \cs@set@lock{tud@cdgeometry@num}{3}% + \tud@locked@num@set{tud@cdgeometry@num}{3}% \fi% \TUD@KOMAoptions{twoside=false}% \or% restricted - \cs@std@lock{tud@cdgeometry@num}{2}% + \tud@locked@num@preset{tud@cdgeometry@num}{2}% \renewcommand*\tud@cdgeometry@calc@num{0}% \or% adapted - \cs@std@lock{tud@cdgeometry@num}{2}% + \tud@locked@num@preset{tud@cdgeometry@num}{2}% \renewcommand*\tud@cdgeometry@calc@num{1}% \or% calculated - \cs@std@lock{tud@cdgeometry@num}{2}% + \tud@locked@num@preset{tud@cdgeometry@num}{2}% \renewcommand*\tud@cdgeometry@calc@num{2}% \or% custom - \cs@set@lock{tud@cdgeometry@num}{1}% + \tud@locked@num@set{tud@cdgeometry@num}{1}% \fi% - \@tempswafalse% - \ifx\@tempb\tud@cdgeometry@num\relax\else\@tempswatrue\fi% - \ifx\@tempc\tud@cdgeometry@calc@num\relax\else\@tempswatrue\fi% - \if@tempswa% - \TUD@SpecialOptionAtDocument{tud@cdgeometry@process}% +% \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% } @@ -613,7 +660,7 @@ \TUD@key{extrabottommargin}{% \TUD@set@dimenkey{extrabottommargin}{\tud@dim@extrabottommargin}{#1}% \ifx\FamilyKeyState\FamilyKeyStateProcessed% - \TUD@SpecialOptionAtDocument{tud@cdgeometry@@process}% + \TUD@SpecialOptionAtDocument{tud@cdgeometry@process}% \fi% } % \end{macrocode} @@ -654,46 +701,17 @@ % \begin{macrocode} \DefineFamilyMember{KOMA} \DefineFamilyKey{KOMA}{twoside}{% - \TUD@SpecialOptionAtDocument{tud@cdgeometry@@process}% + \TUD@SpecialOptionAtDocument{tud@cdgeometry@process}% \FamilyKeyStateProcessed% } \DefineFamilyKey{KOMA}{twocolumn}{% - \TUD@SpecialOptionAtDocument{tud@cdgeometry@@process}% + \TUD@SpecialOptionAtDocument{tud@cdgeometry@process}% \FamilyKeyStateProcessed% } % \end{macrocode} % \end{option}^^A twocolumn % \end{option}^^A twoside % -% \begin{macro}{\tud@x@typearea@warnings@off} -% \changes{v2.05}{2016/07/26}{neu}^^A -% \begin{macro}{\tud@x@typearea@warnings@on} -% \changes{v2.05}{2016/07/26}{neu}^^A -% Sollte das Paket \pkg{silence} vorhanden sein wird es geladen, um die vom -% Paket \pkg{typearea} erzeugten Warnungen beim Laden einer \TUDScript-Klasse -% zu unterdrücken, da im Normalfall das Paket gar nicht für die Berechnung des -% Satzspiegels zum Einsatz kommt. Sollte dies vom Anwender so eingestellt -% werden, wird vor dem Beginn des Dokumentes \cs{recalctypearea} aufgerufen und -% die entsprechenden Warnungen werden etwas später und in Abhängigkeit der -% verwendeten Schriftart erzeugt. -% \begin{macrocode} -\newcommand*\tud@x@ta@warnings@off{} -\newcommand*\tud@x@ta@warnings@on{} -\IfFileExists{silence.sty}{% - \RequirePackage{silence}[2012/07/02]% - \WarningFilter[typearea]{typearea}{DIV for}% - \WarningFilter[typearea]{typearea}{Bad type area settings!}% - \WarningFilter[typearea]{typearea}{Maybe no optimal type area settings!}% - \WarningFilter[typearea]{typearea}{Very low DIV value!}% - \BeforePackage{typearea}{\ActivateWarningFilters[typearea]}% - \AfterPackage{typearea}{\DeactivateWarningFilters[typearea]}% - \renewcommand*\tud@x@ta@warnings@off{\ActivateWarningFilters[typearea]} - \renewcommand*\tud@x@ta@warnings@on{\DeactivateWarningFilters[typearea]} -}{} -% \end{macrocode} -% \end{macro}^^A \tud@x@ta@warnings@on -% \end{macro}^^A \tud@x@ta@warnings@off -% % \iffalse %</class&option> %<*class&body> @@ -702,16 +720,45 @@ % \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{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} -\newcommand*\tud@cdgeometry@process{} -\newcommand*\tud@cdgeometry@@process{} \if@tud@x@standalone@crop \PreventPackageFromLoading{geometry}% + \let\tud@cdgeometry@process\relax% \else \RequirePackage{geometry}[2010/09/12]% -\fi +\fi% \AfterPackage*{geometry}{% \CheckCommand*\Gm@initnewgm{% \Gm@passfalse @@ -850,14 +897,16 @@ \Gm@changelayout}% }% % \end{macrocode} -% \begin{macro}{\tud@setgeometry} -% \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 +% \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 @@ -865,105 +914,78 @@ % \KOMAScript{} beachtet. Hierfür werden die originalen Befehle \cs{geometry} % und \cs{newgeometry} angepasst, weshalb diese vorher gesichert werden. % \begin{macrocode} - \tud@cmd@store{geometry} - \tud@cmd@store{newgeometry} -% \end{macrocode} -% Mit dem Befehl \cs{tud@setgeometry} 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} \newif\if@tud@x@geometry@enabled% \@tud@x@geometry@enabledtrue% - \newcommand*\tud@setgeometry[1]{% - \@tud@x@geometry@enabledfalse% -% \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. -% \begin{macrocode} - \ifGm@pass% - \def\@tempb{}% - \else% - \edef\@tempb{layoutoffset={\the\Gm@layouthoffset,\the\Gm@layoutvoffset}}% - \ifGm@layout% - \eappto\@tempb{,layoutsize={\the\Gm@layoutwidth,\the\Gm@layoutheight}}% - \fi% - \fi% + \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} -% 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. +% 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% - \edef\@tempa{\@tempb,#1}% - \tud@cmd@store{Gm@restore@org}% - \eappto\Gm@restore@org{% - \paperwidth=\the\paperwidth\relax% - \paperheight=\the\paperheight\relax% - }% - \def\@tempc{\tud@cmd@use{newgeometry}}% - \expandafter\@tempc\expandafter{\@tempa}% - \tud@cmd@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,\@tempb,#1% - }% - \def\@tempc{\tud@cmd@use{geometry}}% - \expandafter\@tempc\expandafter{\@tempa}% + \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% - \@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. +% 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} - \newcommand*\tud@savegeometry[1]{% - \def\Gm@restore{}% - \savegeometry{#1}% - \csepreto{Gm@restore@@#1}{% - \etex@unexpanded{\def\Gm@lmargin}{\Gm@lmargin}% - \etex@unexpanded{\def\Gm@rmargin}{\Gm@rmargin}% - \noexpand\Gm@bindingoffset=\the\Gm@bindingoffset% - \ifGm@includemp% - \noexpand\Gm@includemptrue% - \else% - \noexpand\Gm@includempfalse% - \fi% - \ifGm@layout% - \noexpand\Gm@layouttrue% - \else% - \noexpand\Gm@layoutfalse% + \apptocmd{\Gm@changelayout}{% + \if@tud@x@geometry@enabled% + \if@atdocument% + \@tud@x@geometry@fixmarginstrue% + \tud@cdgeometry@reset{custom}% + \tud@cdgeometry@process% \fi% - }% - }% - \newcommand*\tud@loadgeometry[1]{% - \@tud@x@geometry@enabledfalse% - \loadgeometry{#1}% + \fi% + }{}{\tud@patch@wrn{Gm@changelayout}}% % \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% +% 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 \tud@loadgeometry -% \end{macro}^^A \tud@savegeometry -% \end{macro}^^A \tud@setgeometry -% \begin{macro}{\geometry} -% \begin{macro}{\newgeometry} -% \begin{macro}{\tud@geometry} +% \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} @@ -976,11 +998,9 @@ % \begin{parameter}{layoutheight} % \begin{parameter}{layoutsize} % \begin{parameter}{bleedmargin} -% \begin{macro}{\tud@area@def} -% \changes{v2.05}{2016/03/06}{neu}^^A -% \begin{macro}{\tud@area@set} +% \begin{macro}{\tud@x@geometry@area@def} % \changes{v2.05}{2016/03/06}{neu}^^A -% \begin{macro}{\tud@x@geometry@init} +% \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 @@ -988,6 +1008,47 @@ % \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 @@ -998,52 +1059,73 @@ % ziemlich unübersichtliches Konstrukt geworden, weshalb das Ganze in einer % folgenden Version mit \KOMAScript-Mitteln neu implementiert werden soll. % }[v2.07] -% \ToDo{% -% Aus paperwidth und paperheight Orientierung automatisch feststellen. -% }[v2.07] +% \ToDo{Orientierung automatisch aus paperwidth/paperheight}[v2.07] % \begin{macrocode} \TUD@parameter@family{geometry}{% - \TUD@parameter@def{paper}{\tud@area@def{paper}{#1}}% + \TUD@parameter@def{paper}{\tud@x@geometry@area@def{paper}{#1}}% \TUD@parameter@let{papername}{paper}% - \TUD@parameter@def{paperwidth}{\tud@area@def{paper}{#1:\the\paperheight}}% - \TUD@parameter@def{paperheight}{\tud@area@def{paper}{\the\paperwidth:#1}}% \TUD@parameter@def{papersize}{% \def\@tempa##1,##2,##3\@nil{% \IfArgIsEmpty{##2}{% - \tud@area@def{paper}{##1:##1}% + \tud@x@geometry@area@def{paper}{##1:##1}% }{% - \tud@area@def{paper}{##1:##2}% + \tud@x@geometry@area@def{paper}{##1:##2}% }% }% \@tempa#1,,\@nil% }% - \TUD@parameter@def{layout}{\tud@area@def{layout}{#1}}% - \TUD@parameter@let{layoutname}{layout}% - \TUD@parameter@def{layoutwidth}{% - \tud@area@def{layout}{#1:\the\tud@len@layoutheight}% + \TUD@parameter@def{paperwidth}{% + \tud@x@geometry@area@def{paper}{#1:\paperheight}% }% - \TUD@parameter@def{layoutheight}{% - \tud@area@def{layout}{\the\tud@len@layoutwidth:#1}% + \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@area@def{layout}{##1:##1}% + \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}% }{% - \tud@area@def{layout}{##1:##2}% + \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@area@def{paper}{#2}% + \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 @@ -1052,7 +1134,7 @@ % Hilfsmakros \cs{tud@x@geometry@\dots} für \val{paper}, \val{layout} sowie % \val{parameter} für alles Übrige. % \begin{macrocode} - \newcommand*\tud@area@def[2]{% + \newcommand*\tud@x@geometry@area@def[2]{% \tud@lowerstring{\@tempa}{#2}% \def\@tempb##1paper##2\@nil{% \ifstr{##2}{paper}{\def\@tempa{##1}}{}% @@ -1115,118 +1197,42 @@ \fi% \if@tempswa% \cseappto{tud@x@geometry@#1}{\@tempa,}% - \def\@tempb##1:##2:##3\@nil{% - \IfArgIsEmpty{##2}{}{% - \ifstr{#1}{paper}{% - \setlength\paperwidth{##1}% - \setlength\paperheight{##2}% - }{% - \ifstr{#1}{layout}{% - \setlength\tud@len@layoutwidth{##1}% - \setlength\tud@len@layoutheight{##2}% - }{}% - }% - }% - }% - \expandafter\@tempb\@tempa::\@nil% \else% \appto\tud@x@geometry@parameter{#2,}% \fi% - } + }% % \end{macrocode} -% Der Befehl \cs{tud@area@set} bewerkstelligt die korrekte Abarbeitung der +% Der Befehl \cs{tud@x@geometry@area@set} bewerkstelligt die Abarbeitung der % zuvor gesammelten Schlüssel. % \begin{macrocode} - \newcommand*\tud@area@set[1]{% + \newcommand*\tud@x@geometry@area@set[1]{% \letcs{\@tempa}{tud@x@geometry@#1}% \ifdefvoid{\@tempa}{}{% \def\@tempb##1:##2:##3\@nil{% - \tud@cmd@store{@tempa}% - \tud@cmd@store{@tempb}% - \tud@cmd@store{@tempc}% - \IfArgIsEmpty{##2}{% - \KOMAoption{paper}{##1}% - }{% - \if@landscape% - \KOMAoption{paper}{##2:##1}% - \else% - \KOMAoption{paper}{##1:##2}% - \fi% - }% - \tud@cmd@restore{@tempa}% - \tud@cmd@restore{@tempb}% - \tud@cmd@restore{@tempc}% + \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} -% Bei der redefinition von \cs{geometry} und \cs{newgeometry} kommt intern -% \cs{tud@geometry} zum Einsatz, womit kleinere Feinheiten zwischen den beiden -% Befehlen unterschieden werden können. -% \begin{macrocode} - \newcommand*\tud@x@geometry@init{} - \newcommand*\tud@x@geometry@paper{} - \newcommand*\tud@x@geometry@layout{} - \newcommand*\tud@x@geometry@parameter{} - \newcommand*\tud@geometry[2]{% - \ifGm@layout% - \setlength\tud@len@layoutheight{\Gm@layoutheight}% - \setlength\tud@len@layoutwidth{\Gm@layoutwidth}% - \else% - \setlength\tud@len@layoutheight{\paperheight}% - \setlength\tud@len@layoutwidth{\paperwidth}% - \fi% - \let\tud@x@geometry@paper\@empty% - \let\tud@x@geometry@layout\@empty% - \let\tud@x@geometry@parameter\@empty% - \TUD@parameter@set{geometry}{#1}% - \tud@area@set{paper}% - \ifstr{#2}{newgeometry}{% - \eappto\Gm@restore@org{% - \paperwidth=\the\paperwidth\relax% - \paperheight=\the\paperheight\relax% - }% - }{% - \etex@unexpanded{\epreto{\tud@x@geometry@parameter}}{% - paperwidth=\the\paperwidth,paperheight=\the\paperheight,% - }% - }% - \ifx\tud@x@geometry@layout\@empty\else% - \begingroup% - \setlength\paperwidth{\Gm@layoutwidth}% - \setlength\paperheight{\Gm@layoutheight}% - \tud@area@set{layout}% - \edef\tud@reserved{% - \endgroup% - \etex@unexpanded{\epreto{\tud@x@geometry@parameter}}{% - layoutwidth=\the\paperwidth,layoutheight=\the\paperheight,% - }% - }% - \tud@reserved% - \fi% - \def\@tempa{\tud@cmd@use{#2}}% - \expandafter\@tempa\expandafter{\tud@x@geometry@parameter}% - \ifstr{#2}{geometry}{% - \ifbool{@tud@x@geometry@enabled}{% - \eappto\tud@x@geometry@init{,\expandonce\tud@x@geometry@parameter}% - }{}% - }{}% - } - \renewcommand*\geometry[1]{\tud@geometry{#1}{geometry}} - \renewcommand*\newgeometry[1]{% - \tud@cmd@store{Gm@restore@org}% - \tud@geometry{#1}{newgeometry}% - \tud@cmd@restore{Gm@restore@org}% - } + }% % \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@init -% \end{macro}^^A \tud@area@set -% \end{macro}^^A \tud@area@def +% \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 @@ -1238,44 +1244,144 @@ % \end{parameter}^^A paperwidth % \end{parameter}^^A papername % \end{parameter}^^A paper -% \end{macro}^^A \tud@geometry -% \end{macro}^^A \newgeometry -% \end{macro}^^A \geometry -% \begin{macro}{\restoregeometry} -% \begin{macro}{\Gm@changelayout} -% 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. +% \end{macro}^^A \tud@x@geometry@user +% \begin{macro}{\tud@x@geometry@getlayout} +% \changes{v2.06}{2018/08/13}{neu}^^A % \begin{macrocode} - \apptocmd{\Gm@changelayout}{% - \ifboolexpr{bool {@tud@x@geometry@enabled} and bool {@atdocument}}{% - \tud@cdgeometry@process% - }{}% - }{}{\tud@patch@wrn{Gm@changelayout}}% + \newcommand*\tud@x@geometry@getlayout[1]{% % \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. +% 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} - \renewcommand*\restoregeometry[1][]{% - \IfArgIsEmpty{#1}{}{% - \tud@cmd@store{TUD@SpecialOptionAtDocument}% - \let\TUD@SpecialOptionAtDocument\@gobble% - \TUDoption{cdgeometry}{#1}% - \tud@cmd@restore{TUD@SpecialOptionAtDocument}% - }% - \ifnum\tud@cdgeometry@num=\@ne\relax - \tud@loadgeometry{init@custom}% + \ifGm@pass% + \let#1\@empty% \else% - \tud@loadgeometry{init@typearea}% + \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% - \tud@AfterChangingArea% }% % \end{macrocode} -% \end{macro}^^A \Gm@changelayout -% \end{macro}^^A \restoregeometry +% \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} @@ -1288,38 +1394,12 @@ % 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} -% \end{macro}^^A \tud@cdgeometry@ddcmargin -% \end{macro}^^A \tud@cdgeometry@tudmargin -% \end{macro}^^A \tud@cdgeometry@vmargin -% \end{macro}^^A \tud@cdgeometry@hmargin -% \begin{macro}{\tud@cdgeometry@process} -% \changes{v2.05}{2015/11/29}{neu}^^A -% Nur falls \pkg{typearea} zum Einsatz kommt, wird am Ende der Präambel die -% Satzspiegelberechnung mit \cs{recalctypearea} angestoßen, ansonsten wird -% bloß \cs{tud@AfterChangingArea} ausgeführt. -% \ToDo{Alles auf Anfang!}[v2.07] -% \begin{macrocode} - \renewcommand*\tud@cdgeometry@process{% -% \ifcase\tud@cdgeometry@num\relax% -% \csuse{@ta@usegeometryfalse}% -% \recalctypearea% -% \else% - \tud@AfterChangingArea% -% \fi% - }% -% \end{macrocode} -% \end{macro}^^A \tud@cdgeometry@process -% \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} % 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 @@ -1332,7 +1412,7 @@ % innerhalb des Dokumentes mit dem Befehl \cs{loadgeometry}\marg{Stil} oberer % sowie ggf. untere Seitenrand geändert werden. % \begin{macrocode} - \renewcommand*\tud@cdgeometry@@process{% + \newcommand*\tud@cdgeometry@@process{% \csuse{@ta@usegeometryfalse}% % \end{macrocode} % Die Maßvorgaben werden entsprechend der Seitengröße gesetzt. @@ -1340,42 +1420,21 @@ \tud@cdgeometry@set% % \end{macrocode} % Für den Fall, dass \pkg{typearea} die Satzspiegelberechnung übernimmt oder -% dieser durch den Benutzerdefiniert wurde, werden die Ergebnisse aus der +% 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} -% Anschließend erfolgen die horizontalen und vertikalen Randeinstellungen. -% Zunächst für \pkg{typearea}. Hierfür 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 und der Satzspiegel neu berechnet. Damit diese Berechnung -% jedoch nicht umgesetzt wird, wird \cs{activateareas} unschädlich gemacht. +% Die von \pkg{typearea} berechneten Seitenränder werden an \pkg{geometry} +% weitergereicht. % \begin{macrocode} \ifcase\tud@cdgeometry@num\relax% - \ifGm@layout% - \tud@skip@store{paperheight}% - \tud@skip@store{paperwidth}% - \setlength\paperheight{\tud@len@layoutheight}% - \setlength\paperwidth{\tud@len@layoutwidth}% - \fi% - \tud@cmd@store{activateareas}% - \tud@cmd@store{tud@AfterChangingArea}% - \let\activateareas\relax% - \let\tud@AfterChangingArea\relax% - \recalctypearea% - \ifGm@layout% - \tud@skip@restore{paperheight}% - \tud@skip@restore{paperwidth}% - \fi% - \tud@cmd@restore{activateareas}% - \tud@cmd@restore{tud@AfterChangingArea}% -% \end{macrocode} -% Nachdem der Satzspiegel im Zweifelsfall neu berechnet wurde, werden die von -% \pkg{typearea} berechneten Seitenränder an \pkg{geometry} weitergereicht. -% \begin{macrocode} \edef\tud@cdgeometry@hmargin{% left=\the\dimexpr\oddsidemargin+1in-\ta@bcor\relax,% textwidth=\the\textwidth,% @@ -1410,8 +1469,8 @@ \else% custom \ifGm@pass\else% \edef\tud@cdgeometry@hmargin{% - left=\Gm@lmargin,% - right=\Gm@rmargin,% + left=\the\dimexpr\oddsidemargin+1in-\Gm@bindingoffset\relax,% + textwidth=\the\textwidth,% \ifGm@includemp% includemp=true,% \else% @@ -1496,11 +1555,23 @@ % ist. % \begin{macrocode} \ifdim\dimexpr\tud@dim@extrabottommargin\relax=\z@\relax\else% - \ClassWarning{\TUD@Class@Name}{% - Option `extrabottommargin' is ineffective when\MessageBreak% - package typearea or custom layout is used\MessageBreak% - (`cdgeometry=false/custom')% - }% + \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 @@ -1658,12 +1729,13 @@ % \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{.3\tud@len@topmargin}% - \else% - \setlength\tud@len@areaheadvskip{.6\tud@len@topmargin}% + \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. @@ -1689,45 +1761,53 @@ % 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} - \eappto\tud@cdgeometry@hmargin{,layouthoffset=\the\Gm@layouthoffset}% - \eappto\tud@cdgeometry@vmargin{,layoutvoffset=\the\Gm@layoutvoffset}% \tud@if@v@lower{2.03}{% - \edef\@tempa{% + \tud@x@geometry@set{% + \tud@cdgeometry@layout,% \tud@cdgeometry@hmargin,% \tud@cdgeometry@vmargin,% \tud@cdgeometry@tudmargin,% \tud@cdgeometry@ddcmargin,% ignorehead,ignorefoot% }% - \tud@setgeometry{\@tempa}% \tud@savegeometry{tudareaddc}% }{}% % \end{macrocode} % Danach folgt der Seitenstil, mit dem TUD-Kopf und der Standardfußzeile. % \begin{macrocode} - \edef\@tempa{% + \tud@x@geometry@set{% + \tud@cdgeometry@layout,% \tud@cdgeometry@hmargin,% \tud@cdgeometry@vmargin,% \tud@cdgeometry@tudmargin% }% - \tud@setgeometry{\@tempa}% \tud@savegeometry{tudarea}% % \end{macrocode} % Als letztes wird der Standardsatzspiegel erstellt. % \begin{macrocode} - \edef\@tempa{% + \tud@x@geometry@set{% + \tud@cdgeometry@layout,% \tud@cdgeometry@hmargin,% \tud@cdgeometry@vmargin% }% - \tud@setgeometry{\@tempa}% \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} @@ -1738,6 +1818,11 @@ \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} @@ -1773,13 +1858,98 @@ % \end{macro}^^A \tud@cdgeometry@mpincl % \end{macro}^^A \tud@cdgeometry@fincl % \end{macro}^^A \tud@cdgeometry@hincl -% 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{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 @@ -1797,276 +1967,303 @@ % 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]{% + \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}}{% + \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}{% + \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}{% + \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% + \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}% - }% + \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% + \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}% + }{% + \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@}% + \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@font@koma@set{pagefoot}{\usekomafont{tudheadings}}% - \tud@font@koma@set{pagenumber}{\usekomafont{tudheadings}}% + \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}% - }% + }{% + \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% - }% + \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% - \fi% % \end{macrocode} % Die Schriften für Seitenzahl und Kolumnentitel werden zurückgesetzt. % \begin{macrocode} - \tud@font@koma@unset{pagefoot}% - \tud@font@koma@unset{pagenumber}% - }% + \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% - }{}% -} + \global\tud@len@areavskip=\tud@len@areavskip% + }{}% + } % \end{macrocode} % \end{macro}^^A \tud@currentgeometry % \end{macro}^^A \tud@BeforeSelectAnyPageStyle -% \begin{macro}{\tud@AfterChangingArea} -% \changes{v2.04}{2015/03/10}{neu}^^A -% Der Befehl \cs{AfterCalculatingTypearea} wird durch das Paket \pkg{typearea} -% bereitgestellt. Die durch \pkg{typearea} berechneten Längenwerte für den -% Satzspiegel werden zur Weiterverarbeitung gesichert. Für die Erstellung des -% Satzspiegels wird das Paket \pkg{geometry} verwendet. Bei der entsprechenden -% 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@AfterChangingArea{% - \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 und korrekte Ausführen von \cs{tud@BeforeSelectAnyPageStyle} zu -% erzwingen. +% 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} - \gdef\tud@currentgeometry{}% - \expandafter\pagestyle\expandafter{\currentpagestyle}% } % \end{macrocode} -% \end{macro}^^A \tud@AfterChangingArea -% \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. Dies geschieht jedoch -% \emph{nicht}, wenn die \cls{standalone}-Klasse mit der Option \opt{crop} -% geladen wurde, um die Seitenränder nicht zu ändern. -% \begin{macrocode} -\newcommand*\tud@cdgeometry@init{% - \AtEndPreamble{% - \if@tud@x@standalone@crop% - \pagestyle{empty}% - \let\tud@AfterChangingArea\relax% - \let\tud@cdgeometry@process\relax% - \else% -% \end{macrocode} -% Am Ende der Präambel wird der Satzspiegel des Dokumentes gesetzt. Dabei -% werden auch sowohl der benutzderdefinierte Satzspiegel als auch die durch -% \pkg{typearea} berechneten Einstellungen gesichert. -% \begin{macrocode} - \csuse{@ta@usegeometryfalse}% - \def\tud@reserved##1{% - \tud@setgeometry{% - \tud@cdgeometry@mpincl,% - \if@reversemargin% - reversemarginpar=true,% - \else% - reversemarginpar=false,% - \fi% - bindingoffset=\the\ta@bcor,% - \tud@cdgeometry@hincl,% - \tud@cdgeometry@fincl,% - \tud@x@geometry@init,% - driver=none% - }% - \addtolength\oddsidemargin{-\Gm@layouthoffset}% - \addtolength\evensidemargin{-\Gm@layouthoffset}% - \addtolength\topmargin{-\Gm@layoutvoffset}% - \tud@savegeometry{init@##1}% - }% -% \end{macrocode} -% Ist die Option \opt{cdgeometry}|=|\val{custom} nicht aktiv, werden mit -% \cs{geometry} etwaig gemachte Einstellungen überschrieben. -% \begin{macrocode} - \begingroup% - \let\scr@grouplevel@test\@gobble% - \setlength\paperheight{\Gm@layoutheight}% - \setlength\paperwidth{\Gm@layoutwidth}% - \let\activateareas\relax% -% \end{macrocode} -% Der Kram ist dafür da, etwaige Warnungen von \pkg{typearea} aufgrund der -% fehlenden Wahl für die Satzspiegelaufteilung zu unterdrücken. -% \begin{macrocode} - \tud@x@ta@warnings@off% - \KOMAoptionOf[\def\@tempa]{typearea.\scr@pkgextension}{DIV}% - \def\@tempb{{0}}% - \ifx\@tempa\@tempb\relax% - \KOMAoptionOf[\def\@tempa]{typearea.\scr@pkgextension}{paper}% - \@for\@tempb:=\@tempa\do{% - \@tempswatrue% - \ifx\@tempb\defaultpapersize\relax% - \@tempswafalse% - \fi% - }% - \if@tempswa% - \KOMAoptions{DIV=11}% - \fi% - \fi% - \recalctypearea% - \tud@x@ta@warnings@on% - \edef\tud@x@geometry@init{% - left=\the\dimexpr\oddsidemargin+1in-\ta@bcor\relax,% - textwidth=\the\textwidth,% - marginparwidth=\the\marginparwidth,% - marginparsep=\the\marginparsep,% - bindingoffset=\the\ta@bcor,% - \if@hincl% - top=\the\dimexpr\topmargin+1in\relax,% - \else% - top=\the\dimexpr\topmargin% - +\headheight+\headsep+1in\relax,% - \fi% - headheight=\the\headheight,% - headsep=\the\headsep,% - textheight=\the\textheight,% - footskip=\the\footskip% - }% - \tud@reserved{typearea}% - \global\let\Gm@restore@@init@typearea\Gm@restore@@init@typearea% +% \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} -% Falls \opt{cdgeometry}|=|\val{custom} aktiv ist, werden die Einstellungen -% übernommen. -% \begin{macrocode} - \tud@reserved{custom}% -% \end{macrocode} -% Nach einer Neuberechnung oder Änderung des Satzspiegels durch \pkg{typearea} +% Nach einer Wiederherstellung gespeicherter Satzspiegel durch \pkg{typearea} % werden die für die Seitenstile benötigten Satzspiegel mit \pkg{geometry} neu % erstellt. -% \ToDo{Test für \cs{AfterRestoreareas} entfernen}[v3.18] % \begin{macrocode} - \AfterCalculatingTypearea{\tud@AfterChangingArea}% - \AfterSettingArea{\tud@AfterChangingArea}% - \ifundef{\AfterRestoreareas}{}{% - \AfterRestoreareas{\tud@AfterChangingArea}% +\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}% }% -% \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}}% - \tud@cdgeometry@process% + }% + \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% - \let\tud@cdgeometry@init\relax% }% } -\AfterPackage!{scrlayer-scrpage}{\tud@cdgeometry@init} +\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@cdgeometry@init +% \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}{% - \newif\ifGm@layout% - \newif\ifGm@showcrop% - \newif\ifGm@pass% - \let\Gm@layoutheight\paperheight% - \let\Gm@layoutwidth\paperwidth% - \let\Gm@layouthoffset\z@% - \let\Gm@layoutvoffset\z@% - \renewcommand*\tud@cdgeometry@@process{\tud@cdgeometry@set}% - \let\tud@BeforeSelectAnyPageStyle\@gobble% - \providecommand*\tud@setgeometry[1]{}% - \providecommand*\tud@savegeometry[1]{}% + \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} |