summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/tudscr/source/tudscr-area.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/tudscr/source/tudscr-area.dtx')
-rw-r--r--macros/latex/contrib/tudscr/source/tudscr-area.dtx165
1 files changed, 124 insertions, 41 deletions
diff --git a/macros/latex/contrib/tudscr/source/tudscr-area.dtx b/macros/latex/contrib/tudscr/source/tudscr-area.dtx
index 0c1c3f1f6b..0d5e1e0b25 100644
--- a/macros/latex/contrib/tudscr/source/tudscr-area.dtx
+++ b/macros/latex/contrib/tudscr/source/tudscr-area.dtx
@@ -1,4 +1,4 @@
-% \CheckSum{2247}
+% \CheckSum{2307}
% \iffalse meta-comment
%
% TUD-Script -- Corporate Design of Technische Universität Dresden
@@ -52,7 +52,7 @@
% \fi%
%
\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi
-\ProvidesFile{tudscr-area.dtx}[2019/07/19 v2.06c TUD-Script\space%
+\ProvidesFile{tudscr-area.dtx}[2020/06/18 v2.06g TUD-Script\space%
(type or page area)%
]
%
@@ -291,6 +291,12 @@
% \changes{v2.05}{2015/11/29}{neu}^^A
% \begin{macro}{\tud@cdgeometry@assignlayout}
% \changes{v2.06}{2018/08/13}{neu}^^A
+% \begin{macro}{\tud@cdgeometry@resetlayout}
+% \changes{v2.06g}{2020/06/18}{neu, Bugfix für Änderung des Papierformates}^^A
+% \begin{macro}{\tud@cdgeometry@papersize@store}
+% \changes{v2.06g}{2020/06/18}{neu}^^A
+% \begin{macro}{\tud@cdgeometry@papersize@last}
+% \changes{v2.06g}{2020/06/18}{neu}^^A
% \begin{length}{\tud@len@layoutwidth}
% \changes{v2.05}{2016/04/03}{neu}^^A
% \begin{length}{\tud@len@layoutheight}
@@ -317,18 +323,6 @@
\newlength\tud@len@layoutheight
\newlength\tud@len@layouthoffset
\newlength\tud@len@layoutvoffset
-% \end{macrocode}
-% Mit \cs{tud@cdgeometry@assignlayout} wird die Layoutgröße, welche ggf. mit
-% dem Paket \pkg{geometry} angegeben wurde, entsprechend gesetzt.
-% \begin{macrocode}
-\newcommand*\tud@cdgeometry@assignlayout{%
- \ifdim\tud@len@layoutwidth<\p@\relax%
- \setlength\tud@len@layoutwidth{\paperwidth}%
- \fi%
- \ifdim\tud@len@layoutheight<\p@\relax%
- \setlength\tud@len@layoutheight{\paperheight}%
- \fi%
-}
\newcommand*\tud@cdgeometry@set{%
\tud@cdgeometry@assignlayout%
\tud@if@v@lower{2.05}{%
@@ -526,12 +520,57 @@
\setlength\tud@len@headsep{\dimexpr.707107\tud@len@headsep\relax}%
\setlength\tud@len@footsep{\dimexpr.707107\tud@len@footsep\relax}%
\fi%
+ \tud@cdgeometry@papersize@store%
+}
+% \end{macrocode}
+% Mit \cs{tud@cdgeometry@assignlayout} wird die Layoutgröße, welche ggf. mit
+% dem Paket \pkg{geometry} angegeben wurde, entsprechend gesetzt.
+% \begin{macrocode}
+\newcommand*\tud@cdgeometry@assignlayout{%
+ \ifdim\tud@len@layoutwidth<\p@\relax%
+ \setlength\tud@len@layoutwidth{\paperwidth}%
+ \fi%
+ \ifdim\tud@len@layoutheight<\p@\relax%
+ \setlength\tud@len@layoutheight{\paperheight}%
+ \fi%
+}
+% \end{macrocode}
+% Das Verarbeiten des Parameters \prm{layout} von \pkg{geometry} ist etwas
+% komplizierter. Normalerweise werden dessen Einstellungen bei einer einfachen
+% Änderung des Satzspiegels beibehalten. Bei einer Änderung des Papierformates
+% sind die damit gemachten Einstellungen nur bedingt weiterhin nutzbar. Die
+% Offset-Werte bleiben in diesem Fall erhalten, das Layoutformat allerdings
+% wird zurückgesetzt. Das aktuelle Papierformat wird nach der Prüfung auf eine
+% Änderung in \cs{tud@cdgeometry@papersize@last} gesichert.
+% \begin{macrocode}
+\newcommand*\tud@cdgeometry@papersize@last{}
+\newcommand*\tud@cdgeometry@papersize@store{%
+ \edef\tud@cdgeometry@papersize@last{\the\paperheight:\the\paperwidth}%
+}
+\newcommand*\tud@cdgeometry@resetlayout{%
+ \begingroup%
+ \edef\tud@res@a{\the\paperheight:\the\paperwidth}%
+ \def\tud@res@b{%
+ \endgroup%
+ \tud@cdgeometry@papersize@store%
+ }%
+ \ifx\tud@res@a\tud@cdgeometry@papersize@last\else%
+ \appto\tud@res@b{%
+ \setlength\tud@len@layoutwidth{\z@}%
+ \setlength\tud@len@layoutheight{\z@}%
+ \tud@x@geometry@fixmargins%
+ }%
+ \fi%
+ \tud@res@b%
}
% \end{macrocode}
% \end{length}^^A \tud@len@layoutvoffset
% \end{length}^^A \tud@len@layouthoffset
% \end{length}^^A \tud@len@layoutheight
% \end{length}^^A \tud@len@layoutwidth
+% \end{macro}^^A \tud@cdgeometry@papersize@last
+% \end{macro}^^A \tud@cdgeometry@papersize@store
+% \end{macro}^^A \tud@cdgeometry@resetlayout
% \end{macro}^^A \tud@cdgeometry@assignlayout
% \end{macro}^^A \if@tud@cdgeometry@adjust
% \end{macro}^^A \tud@cdgeometry@set
@@ -630,11 +669,11 @@
% erfolgte, wird auf das Laden verzichtet (\cs{if@tud@cdgeometry@reset}).
% \begin{macrocode}
\if@atdocument%
- \if@tud@cdgeometry@reset\else%
+ \if@tud@cdgeometry@reset\else% false
\ifcase\tud@cdgeometry@num\relax%
\tud@loadgeometry{current@typearea}%
\@tud@x@geometry@fixmarginstrue%
- \or%
+ \or% custom
\tud@loadgeometry{current@custom}%
\@tud@x@geometry@fixmarginstrue%
\fi%
@@ -913,6 +952,7 @@
% der einzelnen Seitenstile umzusetzen. Dabei werden auch etwaige Optionen von
% \KOMAScript{} beachtet. Hierfür werden die originalen Befehle \cs{geometry}
% und \cs{newgeometry} angepasst, weshalb diese vorher gesichert werden.
+% \ToDo{erweiterte Möglichkeiten von \cs{newgeometry} dokumentieren}[v2.07]
% \begin{macrocode}
\newif\if@tud@x@geometry@enabled%
\@tud@x@geometry@enabledtrue%
@@ -955,7 +995,11 @@
\if@tud@x@geometry@enabled%
\if@atdocument%
\@tud@x@geometry@fixmarginstrue%
- \tud@cdgeometry@reset{custom}%
+ \ifcase\tud@cdgeometry@num\relax% false
+ \tud@cdgeometry@reset{typearea}%
+ \or% custom
+ \tud@cdgeometry@reset{custom}%
+ \fi%
\tud@cdgeometry@process%
\fi%
\fi%
@@ -987,6 +1031,7 @@
% \end{macro}^^A \geometry
% \begin{macro}{\tud@x@geometry@user}
% \changes{v2.05}{2016/03/06}{neu}^^A
+% \changes{v2.06g}{2020/06/18}{Bugfix für Änderung des Papierformates}^^A
% \begin{parameter}{paper}
% \begin{parameter}{papername}
% \begin{parameter}{paperwidth}
@@ -1023,9 +1068,15 @@
\let\tud@x@geometry@layout\@empty%
\let\tud@x@geometry@parameter\@empty%
\TUD@parameter@set{geometry}{#1}%
+% \end{macrocode}
+% Bei einer Änderung des Papierformates wird das Layoutformat zurückgesetzt.
+% \begin{macrocode}
+ \tud@x@geometry@area@set{paper}%
+ \tud@cdgeometry@resetlayout%
\ifx\tud@x@geometry@layout\@empty\else%
\begingroup%
\tud@x@geometry@area@set{layout}%
+ \tud@cdgeometry@assignlayout%
\edef\tud@res@a{%
\endgroup%
\noexpand\setlength\noexpand\tud@len@layoutwidth{\the\paperwidth}%
@@ -1033,17 +1084,36 @@
}%
\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}%
+% \end{macrocode}
+% Wird der Befehl verwendet, wenn eigentlich \pkg{typearea} aktiv ist, so
+% werden lediglich die Einstellungen zu \prm{paper} und \prm{layout} beachtet.
+% Dies wird über die gepatchte Version von \cs{typearea} realisert. Siehe dazu
+% \cs{tud@x@typearea@before} und \cs{tud@x@typearea@after} für Details.
+% \begin{macrocode}
+ \ifcase\tud@cdgeometry@num\relax%
+ \typearea[current]{current}%
+ \ifx\tud@x@geometry@parameter\@empty\else%
+ \ClassWarning{\TUD@Class@Name}{%
+ It isn't possible to use \string\newgeometry with any\MessageBreak%
+ key except `paper' or `layout' when package `typearea'\MessageBreak%
+ is used with`cdgeometry=typearea'%
+ }%
+ \fi%
+% \end{macrocode}
+% Die Abarbeitung der gegebenen Parameter wird mit \cs{tud@cdgeometry@process}
+% innerhalb von \cs{Gm@changelayout} realisiert. Letzteres Makro wird wiederum
+% von der originalen Definition von \cs{newgeometry} aufgerufen.
+% \begin{macrocode}
+ \else%
+ \def\tud@res@a{\tud@cs@use{newgeometry}}%
+ \expandafter\tud@res@a\expandafter{\tud@x@geometry@parameter}%
+ \edef\tud@x@geometry@init{\tud@x@geometry@parameter}%
+ \fi%
}{%
\eappto\tud@x@geometry@init{\tud@x@geometry@parameter}%
}%
@@ -1052,7 +1122,7 @@
% Das folgende Konstrukt ist aus der Idee entstanden, die Parameter \val{paper}
% sowie \val{layout} des Paketes \pkg{geometry} auf die passenden Optionen von
% \KOMAScript{} abbilden zu können und insbesondere Schnittmarken für alle
-% Seitenstile bereitzustellen. %
+% Seitenstile bereitzustellen.%
% \ToDo{%
% Leider ist aus der dem Versuch, eine halbwegs einheitliche Schnittstelle
% zwischen den Paketen \pkg{typearea} und \pkg{geometry} zu schaffen, ein
@@ -1101,8 +1171,12 @@
}%
\@tempa#1,,\@nil%
}%
- \TUD@parameter@def{layoutwidth}{\setlength\tud@len@layoutwidth{#1}}%
- \TUD@parameter@def{layoutheight}{\setlength\tud@len@layoutheight{#1}}%
+ \TUD@parameter@def{layoutwidth}{%
+ \tud@x@geometry@area@def{layout}{#1:\tud@len@layoutheight}%
+ }%
+ \TUD@parameter@def{layoutheight}{%
+ \tud@x@geometry@area@def{layout}{\tud@len@layoutwidth:#1}%
+ }%
\TUD@parameter@def{layoutoffset}{%
\def\@tempa##1,##2,##3\@nil{%
\IfArgIsEmpty{##2}{%
@@ -1202,25 +1276,27 @@
\fi%
}%
% \end{macrocode}
-% Der Befehl \cs{tud@x@geometry@area@set} bewerkstelligt die Abarbeitung der
-% zuvor gesammelten Schlüssel.
+% Der Befehl \cs{tud@x@geometry@area@set} bewerkstelligt die sequentielle
+% Abarbeitung der zuvor gesammelten Schlüssel.
% \begin{macrocode}
\newcommand*\tud@x@geometry@area@set[1]{%
\letcs{\@tempa}{tud@x@geometry@#1}%
\ifdefvoid{\@tempa}{}{%
\def\@tempb##1:##2:##3\@nil{%
- \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%
+ \IfArgIsEmpty{##2}{%
+ \KOMAoption{paper}{##1}%
+ }{%
+% \end{macrocode}
+% \KOMAScript{} stellt sich ziemlich clever an und setzt das Papierformat in
+% dieser Notation immer korrekt im Quer- oder Hochformat, unabhängig von der
+% Reihenfolge der angegebenen Längen. Für den Parameter \prm{layout} ist dies
+% jedoch unerwünscht, weshalb der verantwortliche Befehl deaktiviert wird.
+% \emph{Dies geschieht hier direkt und nicht in einer Gruppe,} weil der Aufruf
+% von \cs{tud@x@geometry@area@set}|{layout}| lokal erfolgt.
+% \begin{macrocode}
+ \ifstr{#1}{layout}{\let\scr@setpaperorientation\relax}{}%
+ \KOMAoption{paper}{##1:##2}%
+ }%
}%
\def\@tempc##1{\@tempb##1::\@nil}%
\expandafter\forcsvlist\expandafter\@tempc\expandafter{\@tempa}%
@@ -1258,12 +1334,12 @@
\ifGm@pass%
\let#1\@empty%
\else%
- \tud@cdgeometry@assignlayout%
\begingroup%
% \end{macrocode}
% Das Setzen des Layouts erfolgt nur, wenn die dazugehörigen Längen \emph{nicht}
% denen des Papierbogens entsprechen.
% \begin{macrocode}
+ \tud@cdgeometry@assignlayout%
\@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%
@@ -2081,6 +2157,7 @@
% \begin{macro}{\typearea}
% \begin{macro}{\areaset}
% \begin{macro}{\storereareas}
+% \changes{v2.06g}{2020/06/18}{Sichern der Längen für \prm{layout}}^^A
% \begin{macro}{\tud@x@typearea@before}
% \changes{v2.06}{2018/08/13}{neu}^^A
% \begin{macro}{\tud@x@typearea@after}
@@ -2094,6 +2171,7 @@
% der Präambel werden in \cs{tud@x@typearea@init} gesichert.
% \begin{macrocode}
\newcommand*\tud@x@typearea@before{%
+ \tud@cdgeometry@resetlayout%
\tud@skip@store{paperheight}%
\tud@skip@store{paperwidth}%
\begingroup%
@@ -2148,9 +2226,14 @@
\begingroup
\tud@x@geometry@fixmargins%
\tud@cs@use{storeareas}{#1}%
+ \def\tud@res@b##1{\unexpanded{\setlength##1}{\the##1}}%
\edef\tud@res@a{%
\endgroup%
\etex@unexpanded{\def#1}{%
+ \tud@res@b{\tud@len@layoutwidth}%
+ \tud@res@b{\tud@len@layoutheight}%
+ \tud@res@b{\tud@len@layouthoffset}%
+ \tud@res@b{\tud@len@layoutvoffset}%
\expandonce#1%
\def\noexpand\tud@cdgeometry@num{\tud@cdgeometry@num}%
}%