diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/tudscr/tudscr-area.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/tudscr/tudscr-area.dtx | 165 |
1 files changed, 124 insertions, 41 deletions
diff --git a/Master/texmf-dist/source/latex/tudscr/tudscr-area.dtx b/Master/texmf-dist/source/latex/tudscr/tudscr-area.dtx index 0c1c3f1f6ba..0d5e1e0b25e 100644 --- a/Master/texmf-dist/source/latex/tudscr/tudscr-area.dtx +++ b/Master/texmf-dist/source/latex/tudscr/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}% }% |