% \CheckSum{223} % \iffalse meta-comment % ====================================================================== % scrkernel-pseudolengths.dtx % Copyright (c) Markus Kohm, 2006-2019 % % This file is part of the LaTeX2e KOMA-Script bundle. % % This work may be distributed and/or modified under the conditions of % the LaTeX Project Public License, version 1.3c of the license. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.3c or later is part of all distributions of LaTeX % version 2005/12/01 or later and of this work. % % This work has the LPPL maintenance status "author-maintained". % % The Current Maintainer and author of this work is Markus Kohm. % % This work consists of all files listed in manifest.txt. % ---------------------------------------------------------------------- % scrkernel-pseudolengths.dtx % Copyright (c) Markus Kohm, 2006-2019 % % Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz, % Version 1.3c, verteilt und/oder veraendert werden. % Die neuste Version dieser Lizenz ist % http://www.latex-project.org/lppl.txt % und Version 1.3c ist Teil aller Verteilungen von LaTeX % Version 2005/12/01 oder spaeter und dieses Werks. % % Dieses Werk hat den LPPL-Verwaltungs-Status "author-maintained" % (allein durch den Autor verwaltet). % % Der Aktuelle Verwalter und Autor dieses Werkes ist Markus Kohm. % % Dieses Werk besteht aus den in manifest.txt aufgefuehrten Dateien. % ====================================================================== % \fi % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z % Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z % Digits \0\1\2\3\4\5\6\7\8\9 % Exclamation \! Double quote \" Hash (number) \# % Dollar \$ Percent \% Ampersand \& % Acute accent \' Left paren \( Right paren \) % Asterisk \* Plus \+ Comma \, % Minus \- Point \. Solidus \/ % Colon \: Semicolon \; Less than \< % Equals \= Greater than \> Question mark \? % Commercial at \@ Left bracket \[ Backslash \\ % Right bracket \] Circumflex \^ Underscore \_ % Grave accent \` Left brace \{ Vertical bar \| % Right brace \} Tilde \~} % % \iffalse %%% From File: $Id: scrkernel-pseudolengths.dtx 3262 2019-10-10 08:25:29Z kohm $ % %<*body> % \fi % % \subsection{Anweisungen für Pseudo-Längen} % % Zu Berechnung der Feldpositionen werden verschiedene Dimensions-Variablen % benötigt. Um jedoch nicht unnötig viele Längenregister zu verbrauchen, wird % hier mit einer Pseudo-Längen-Arithmetik gearbeitet. % % \selectlanguage{english}%^^A % \begin{macro}{\Ifplength} % \changes{v3.27}{2019/03/29}{new}%^^A % \begin{macro}{\if@plength} % \changes{v3.27}{2019/03/29}{new (internal)}%^^A % Test whether or not a given pseudo-length (\texttt{\#1}) already exists. If % so execute the second argument, otherwise the third. It's somehow % inconsistent to use \cs{Ifplength} instead of \cs{ifplength}, but as it does % not act as a \TeX{} switch but a \LaTeX{} command it is better not to use % \cs{if\dots}. % \begin{macrocode} \newcommand*{\if@plength}[1]{% \@ifundefined{ltr@len@#1}{\@secondoftwo}{\@firstoftwo}% } \newcommand*{\Ifplength}{\if@plength} % \end{macrocode} % \end{macro}%^^A\Ifplength % \end{macro}%^^A\if@plength % \selectlanguage{ngerman}%^^A % % \begin{macro}{\@newplength} % \changes{v2.8q}{2001/10/06}{Neu}%^^A % \changes{v2.8q}{2001/10/06}{Kompatibilität zu \texttt{scrlettr.cls}%^^A % aufgegeben} % \changes{v3.27}{2019/03/29}{Fehlermeldung angepasst}%^^A % Dieses Makro definiert eine neue Pseude-Länge und setzt sie auf den % Wert 0. Eine Pseudo-Länge ist ein Makro, das eine Länge enthält. % \begin{macrocode} \newcommand*{\@newplength}[1]{% \@ifundefined{ltr@len@#1}{% \expandafter\let\csname ltr@len@#1\endcsname=\z@% }{% % \ClassError{scrlttr2% % \PackageError{scrletter% }{% pseudo-length \expandafter\string\csname ltr@len@#1\endcsname already defined% }{% You've tried to define a new pseudo-length using\MessageBreak \string\@newplength\space or \string\newplength.\MessageBreak Please, try another name}% }% } % \end{macrocode} % \end{macro} % % \begin{macro}{\newplength} % \changes{v3.26}{2018/04/26}{Neu} % Anweisung auf Anwenderebene verfügbar. % \begin{macrocode} \newcommand*{\newplength}{\@newplength} % \end{macrocode} % \end{macro} % % \begin{macro}{\useplength} % \changes{v2.8q}{2001/10/06}{Neu}%^^A % \changes{v2.97c}{2007/09/17}{\cs{dimexpr} statt \cs{number} verwendet, % wenn \eTeX{} verwendet wird} % \changes{v3.25}{2017/11/29}{\eTeX{} ist zwingend} % \changes{v3.25}{2017/11/29}{\cs{dimexpr} durch \cs{glueexpr} ersetzt}%^^A % Natürlich muss auf eine solche Pseudo-Länge auch wieder lesend % zugeriffen werden können. Wir definieren dies hier so, dass es % außerdem möglich ist, ein Vorzeichen oder einen Faktor zu verwenden. Dafür % wird allerdings \eTeX{} benötigt. % \begin{macrocode} \newcommand*{\useplength}[1]{% \glueexpr \csname ltr@len@#1\endcsname\relax}% % \end{macrocode} % \end{macro} % % \begin{macro}{\setlengthtoplength} % \changes{v2.8q}{2001/10/06}{Neu}%^^A % Eine echte Länge soll auf das Vielfache einer Pseudo-Länge gesetzt % werden. Dabei wird der Faktor als optionaler Parameter übergeben. % Der erste obligatorische Parameter ist die Länge, der zweite % obligatorische Parameter ist die Pseudo-Länge. % \begin{macrocode} \newcommand*{\setlengthtoplength}[3][]{% \setlength{#2}{\useplength{#3}}% \setlength{#2}{#1#2}} % \end{macrocode} % \end{macro} % % \begin{macro}{\@setplength} % \changes{v2.8q}{2001/10/06}{Neu}%^^A % \changes{v3.25}{2017/11/29}{\cs{glueexpr} eingefügt}%^^A % Natürlich wird ebenfalls eine Möglichkeit benötigt, einer % Pseudo-Länge einen Wert zuzuweisen. Dies geschieht unter lokaler % Anwendung einer Länge, damit sichergestellt ist, dass eine % Längenangabe übergeben wird. Dabei wird das zuvor definierte Makro % \cs{setlengthtoplength} verwendet. % \begin{macrocode} \newcommand*{\@setplength}[3][]{% \begingroup% \setlength{\@tempskipa}{\glueexpr #3\relax}% \setlength{\@tempskipa}{#1\@tempskipa}% \edef\@tempa{\noexpand\endgroup% \noexpand\expandafter\noexpand\renewcommand\noexpand\expandafter*% \noexpand\csname ltr@len@#2\noexpand\endcsname{\the\@tempskipa}% }% \@tempa } % \end{macrocode} % \end{macro} % % \begin{macro}{\setplength} % \changes{v3.26}{2018/04/26}{Neu}%^^A % Anweisung auf Anwenderebene verfügbar. % \begin{macrocode} \newcommand*{\setplength}{\@setplength} % \end{macrocode} % \end{macro} % % \begin{macro}{\setplengthtowidth} % \changes{v3.26}{2018/04/26}{Neu} % \begin{macro}{\setplengthtoheight} % \changes{v3.26}{2018/04/26}{Neu} % \begin{macro}{\setplengthtodepth} % \changes{v3.26}{2018/04/26}{Neu} % \begin{macro}{\setplengthtototalheight} % \changes{v3.26}{2018/04/26}{Neu} % Man kann auch die Breite, Höhe, Tiefe oder Höhe + Tiefe eines Inhalts % verwenden, um eine Pseudolänge zu definieren. % \begin{macrocode} \newcommand*{\setplengthtowidth}[3][]{% \begingroup \settowidth{\@tempdima}{#3}% \setlength{\@tempdima}{#1\@tempdima}% \edef\@tempa{\noexpand\endgroup \noexpand\expandafter\noexpand\renewcommand\noexpand\expandafter*% \noexpand\csname ltr@len@#2\noexpand\endcsname{\the\@tempdima}% }% \@tempa } \newcommand*{\setplengthtoheight}[3][]{% \begingroup \settoheight{\@tempdima}{#3}% \setlength{\@tempdima}{#1\@tempdima}% \edef\@tempa{\noexpand\endgroup \noexpand\expandafter\noexpand\renewcommand\noexpand\expandafter*% \noexpand\csname ltr@len@#2\noexpand\endcsname{\the\@tempdima}% }% \@tempa } \newcommand*{\setplengthtodepth}[3][]{% \begingroup \settodepth{\@tempdima}{#3}% \setlength{\@tempdima}{#1\@tempdima}% \edef\@tempa{\noexpand\endgroup \noexpand\expandafter\noexpand\renewcommand\noexpand\expandafter*% \noexpand\csname ltr@len@#2\noexpand\endcsname{\the\@tempdima}% }% \@tempa } \newcommand*{\setplengthtototalheight}[3][]{% \begingroup \settoheight{\@tempdima}{#3}% \settodepth{\@tempdimb}{#3}% \addtolength{\@tempdima}{\@tempdimb}% \setlength{\@tempdima}{#1\@tempdima}% \edef\@tempa{\noexpand\endgroup \noexpand\expandafter\noexpand\renewcommand\noexpand\expandafter*% \noexpand\csname ltr@len@#2\noexpand\endcsname{\the\@tempdima}% }% \@tempa } % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\addtolengthplength} % \changes{v2.8q}{2001/10/06}{Neu}%^^A % Wenn wir schon dabei sind, soll statt dem Setzen auch das Addieren % funktionieren. Hier ist die Erschwernis, dass der Faktor nur für % die Pseudo-Länge und nicht für das Endergebnis gelten soll. % \begin{macrocode} \newcommand*{\addtolengthplength}[3][]{% \begingroup% \setlengthtoplength[{#1}]{\@tempskipa}{#3}% \edef\@tempa{\endgroup% \noexpand\addtolength{#2}{\the\@tempskipa}}% \@tempa% } % \end{macrocode} % % \begin{macro}{\@addtoplength} % \changes{v2.8q}{2001/10/06}{Neu}%^^A % \changes{v3.25}{2017/11/29}{\cs{glueexpr} eingefügt}%^^A % Ebenso wird ein Makro benötigt, mit dem zu einer Pseudo-Länge das % Vielfache eines Wertes addiert werden kann. % \begin{macrocode} \newcommand*{\@addtoplength}[3][]{% \begingroup% \setlength{\@tempskipa}{\glueexpr #3\relax}% \setlength{\@tempskipa}{#1\@tempskipa}% \addtolengthplength{\@tempskipa}{#2}% \edef\@tempa{\noexpand\endgroup% \noexpand\expandafter\noexpand\renewcommand\noexpand\expandafter*% \noexpand\csname ltr@len@#2\noexpand\endcsname{\the\@tempskipa}% }% \@tempa% } % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\addtoplength} % \changes{v3.26}{2018/04/26}{Neu} % Anweisung auf Anwenderebene verfügbar. % \begin{macrocode} \newcommand*{\addtoplength}{\@addtoplength} % \end{macrocode} % \end{macro} % % \iffalse % % \fi % % \iffalse % % \fi % % \Finale % \endinput % % end of file `scrkernel-pseudolengths.dtx' %%% Local Variables: %%% mode: doctex %%% TeX-master: t %%% End: