summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/tudscr/tudscr-area.dtx
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2019-06-28 21:06:55 +0000
committerKarl Berry <karl@freefriends.org>2019-06-28 21:06:55 +0000
commit6677e7d16babf1c0596fd30f9aeb6b13433725cd (patch)
tree84163738e611a8ebcbbed7102f3efa9238211476 /Master/texmf-dist/source/latex/tudscr/tudscr-area.dtx
parent2a2ad17b85ef254d44022ec0fbcadb62cc90f431 (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.dtx1385
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}