diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/tudscr/tudscrbase.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/tudscr/tudscrbase.sty | 793 |
1 files changed, 577 insertions, 216 deletions
diff --git a/Master/texmf-dist/tex/latex/tudscr/tudscrbase.sty b/Master/texmf-dist/tex/latex/tudscr/tudscrbase.sty index c7024addb8e..34ca264af1b 100644 --- a/Master/texmf-dist/tex/latex/tudscr/tudscrbase.sty +++ b/Master/texmf-dist/tex/latex/tudscr/tudscrbase.sty @@ -4,14 +4,15 @@ %% %% The original source files were: %% -%% tudscr-version.dtx (with options: `package,base') +%% tudscr-version.dtx (with options: `package,base,identify') %% tudscr-base.dtx (with options: `package,base') %% %% TUD-Script -- Corporate Design of Technische Universitaet Dresden +%% 2022/08/09 v2.06o TUD-Script %% -%% 2021/07/15 v2.06n TUD-Script -%% -%% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2021 +%% Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2022 +%% https://github.com/tud-cd/tudscr +%% https://latex.wcms-file3.tu-dresden.de/phpBB3/ %% %% This file was generated from file(s) of the TUD-Script bundle. %% ---------------------------------------------------------------------------- @@ -27,101 +28,257 @@ %% %% The current maintainer and author of this work is Falk Hanisch. %% -%%% From File: tudscr-version.dtx +%%%% From File: tudscr-version.dtx (no git version info was found) +\NeedsTeXFormat{LaTeX2e}[2022-06-01] \begingroup - \catcode`\@11\relax - \ifx\TUD@Version\@undefined - \newcommand*\TUD@Version@Check[1]{% + \catcode`\@11\relax% + \ifx\TUD@Version\@undefined% + \newcommand*\TUD@@Version[2]{% \gdef\TUD@Version{#1}% - \gdef\TUDScriptVersion{#1}% - \def\@tempb##1 v##2 ##3\relax##4\relax{\gdef\TUDScriptVersionNumber{##2}}% - \edef\@tempa{\TUD@Version}% - \expandafter\@tempb\@tempa\relax? ? \relax\relax% - \gdef\TUD@Version@KOMA{3.32}% - } - \else - \newcommand*\TUD@Version@Check[1]{% + \gdef\TUD@KOMAVersion{#2}% + }% + \else% + \newcommand*\TUD@@Version[2]{% \def\@tempa{#1}% \ifx\TUD@Version\@tempa\else% \@latex@warning@no@line{% \noexpand\TUD@Version\space is `\TUD@Version',\MessageBreak% but `#1' was expected!\MessageBreak% You should not use classes, packages or files from\MessageBreak% - different TUD-Script-Bundle versions% + different TUD-Script bundle versions% }% \fi% - } - \fi - \TUD@Version@Check{2021/07/15 v2.06n TUD-Script} + }% + \fi% + \TUD@@Version{2022/08/09 v2.06o TUD-Script}{2022/05/01 v3.36 KOMA-Script}% + \ifx\TUDScriptVersion\@undefined% + \xdef\TUDScriptVersion{\TUD@Version}% + \def\@tempa#1 v#2 #3\relax#4\relax#5{\gdef#5{#2}}% + \expandafter\@tempa\TUD@Version ? ?\relax\relax{\TUDScriptVersionNumber}% + \expandafter\@tempa\TUD@KOMAVersion ? ?\relax\relax{\TUD@KOMAVersionNumber}% + \fi% \endgroup -\NeedsTeXFormat{LaTeX2e}[2019/10/01] -\providecommand*\tudscrmail{hanisch.latex@outlook.com} \@ifundefined{TUDScript}{% \DeclareRobustCommand\TUDScript{% - \textsf{% - T\kern.05em U\kern.05em D\kern.1em-\kern.1em Script% - }% - \ifcsname xspace\endcsname% - \xspace% - \fi% + \mbox{% + \textsf{% + T\kern.05em U\kern.05em D\kern.1em-\kern.1em Script% + }% + }\ifcsname xspace\endcsname\xspace\fi% }% }{} -%%% From File: tudscr-base.dtx +\providecommand*\TUDScriptContact{hanisch.latex@outlook.com} +\providecommand*\TUDScriptRepository{https://github.com/tud-cd/tudscr} +\providecommand*\TUDScriptForum{https://latex.wcms-file3.tu-dresden.de/phpBB3/} +%%%% From File: tudscr-base.dtx (no git version info was found) \ProvidesPackage{tudscrbase}[% - 2021/07/15 v2.06n TUD-Script - package - (basics for the bundle)% + 2022/08/09 v2.06o TUD-Script + package (basics for the bundle)% +] +\AtBeginDocument{% + \ifcsundef{scr@v@first}{}{% + \ifcsundef{scr@v@\TUD@KOMAVersionNumber}{% + \PackageError{tudscrbase}{% + KOMA-Script v\TUD@KOMAVersionNumber\space is required% + }{% + \TUD@Version\space must be used at least with\MessageBreak% + \TUD@KOMAVersion, but only\MessageBreak% + \KOMAScriptVersion\space was found.% + }% + }{% + \expandafter\ifnum\scr@v@is@lt{3.12}\relax% + \PackageError{tudscrbase}{% + KOMA-Script compatibility level too low% + }{% + \TUD@Version\space must be used at least with\MessageBreak% + `version=3.12' KOMA-Script compatibility option.% + }% + \fi% + }% + }% +} +\RequirePackage{scrbase}[% + 2022/05/01 v3.36 KOMA-Script ] -\providecommand*{\ifstr}{\Ifstr} -\providecommand*{\ifstrstart}{\Ifstrstart} -\providecommand*{\ifisskip}{\Ifisskip} -\providecommand*{\ifdimen}{\Ifdimen} -\providecommand*{\ifisdimen}{\Ifisdimen} -\providecommand*{\ifisdimension}{\Ifisdimension} -\providecommand*{\ifnumber}{\Ifnumber} -\RequirePackage{scrbase}[2020/09/21] -\RequirePackage{iftex}[2019/11/07] -\RequirePackage{etoolbox}[2011/01/03] -\RequirePackage{xpatch}[2012/10/02] -\RequirePackage{letltxmacro}[2016/05/16] -\RequirePackage{etexcmds}[2011/02/16] -\RequirePackage{kvsetkeys}[2012/04/25] -\RequirePackage{trimspaces}[2009/09/17] +\RequirePackage{iftex} +\RequirePackage{etoolbox} +\RequirePackage{xpatch} +\RequirePackage{letltxmacro} +\RequirePackage{kvsetkeys} +\RequirePackage{trimspaces} +\AfterPackage*{hyperref}{% + \pdfstringdefDisableCommands{% + \def\TUDScript{TUD-Script}% + \def\KOMAScript{KOMA-Script}% + }% +} +\newcommand*\tud@newif[1]{\@ifdefinable#1{\newif#1}} +\newcommand*\tud@newcount[1]{\@ifdefinable#1{\newcount#1}} +\newcommand*\tud@newtoks[1]{\@ifdefinable#1{\newtoks#1}} +\newcommand*\tud@newread[1]{\@ifdefinable#1{\newread#1}} +\newcommand*\tud@newwrite[1]{\@ifdefinable#1{\newwrite#1}} +\newcommand*\tud@newglue[1]{\@ifdefinable#1{\newskip#1}} +\newcommand*\tud@newdim[1]{\@ifdefinable#1{\newdimen#1}} +\newrobustcmd*\tud@setglue[2]{% + \ifdefdimen{#1}{% + \PackageWarning{tudscrbase}{% + You tried to assign dimen \string#1\MessageBreak% + so \string\tud@setdim\space is used% + }% + \tud@setdim{#1}{#2}% + }{% + \setlength#1{\glueexpr#2\relax}% + }% +} +\newrobustcmd*\tud@setdim[2]{% + \begingroup% + \@tud@res@swafalse% + \setlength\@tempskipa{\glueexpr#2\relax}% + \ifdim\gluestretch\@tempskipa=\z@\relax\else% + \@tud@res@swatrue% + \fi% + \ifdim\glueshrink\glueexpr\@tempskipa\relax=\z@\relax\else% + \@tud@res@swatrue% + \fi% + \if@tud@res@swa% + \PackageWarning{tudscrbase}{% + You tried to use \string\tud@setdim\string#1\MessageBreak% + with glue \detokenize{#2} (\the\@tempskipa)\MessageBreak% + but only the base value is used% + }% + \fi% + \endgroup% + \setlength#1{\dimexpr\glueexpr#2\relax\relax}% +} +\newrobustcmd*\tud@addtoglue[2]{% + \tud@setglue#1{\glueexpr#1+#2\relax}% +} +\newrobustcmd*\tud@addtodim[2]{% + \tud@setdim#1{\glueexpr#1+#2\relax}% +} +\tud@newglue\tud@res@glue +\newcommand*\tud@if@lengthregister[1]{% + \begingroup% + \@tud@res@swafalse% + \ifdeflength{#1}{\@tud@res@swatrue}{}% + \ifdefdimen{#1}{\@tud@res@swatrue}{}% + \if@tud@res@swa% + \aftergroup\@firstoftwo% + \else% + \aftergroup\@secondoftwo% + \fi% + \endgroup% +} +\newcommand*\tud@length@setabsolute[1]{% + \tud@if@lengthregister{#1}{% + \ifdim#1<\z@% + \setlength#1{-\glueexpr#1\relax}% + \fi% + }{% + \protected@edef#1{% + \noexpand\ifdim\noexpand\glueexpr\expandonce#1\relax<\z@-\noexpand\fi% + \noexpand\glueexpr\expandonce#1\relax% + }% + }% +} \newcommand*\tud@reserved{} \newcommand*\tud@res@a{} \newcommand*\tud@res@b{} \newcommand*\tud@res@c{} -\newif\if@tud@res@swa -\newcount\tud@res@cnt -\newread\tud@res@read -\newtoks\tud@toks@ -\newcommand*\eaddto@hook[2]{% +\newcommand*\tud@res@d{} +\tud@newif\if@tud@res@swa +\tud@newcount\tud@res@cnt +\tud@newtoks\tud@toks@ +\newcommand*\addto@hook@expandafter[2]{% \expandafter\addto@hook\expandafter#1\expandafter{#2}% } -\newcommand*\ifxblank{\ifstr{}} -\newcommand*\ifstrbool[4]{% - \ifstr{#1}{true}{#2}{% - \ifstr{#1}{on}{#2}{% - \ifstr{#1}{yes}{#2}{% - \ifstr{#1}{false}{#3}{% - \ifstr{#1}{no}{#3}{% - \ifstr{#1}{off}{#3}{% - #4% - }% - }% - }% +\newcommand*\tud@if@preamble{} +\let\tud@if@preamble\@firstoftwo +\AfterEndPreamble{\let\tud@if@preamble\@secondoftwo} +\newcommand*\tud@if@strequal[2]{% + \begingroup% + \protected@edef\tud@res@a{% + \endgroup% + \noexpand\ifstrequal{#1}{#2}% + }% + \tud@res@a% +} +\newcommand*\tud@if@strstart[2]{% + \begingroup% + \protected@edef\tud@res@a{% + \endgroup% + \noexpand\Ifstrstart{\noexpand\detokenize{#1}}{\noexpand\detokenize{#2}}% + }% + \tud@res@a% +} +\newcommand*\tud@if@strempty{\tud@if@strequal{}} +\newcommand*\tud@if@strblank[1]{% + \begingroup% + \protected@edef\tud@res@a{% + \endgroup% + \noexpand\ifblank{#1}% + }% + \tud@res@a% +} +\newcommand*\tud@if@strbool[4]{% + \TUD@set@ifkey{strbool}{@tempswa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \if@tempswa#2\else#3\fi% + \else% + #4 + \fi% +} +\newcommand*\tud@strlowercase[2]{% + \protected@edef#1{% + \lowercase{\def\noexpand#1{#2}}% + }#1% +} +\newcommand*\tud@strlength[2]{% + \begingroup% + \def\tud@res@c{\glueexpr#2\relax}% + \edef\tud@res@a{\strip@pt\dimexpr\tud@res@c\relax pt}% + \edef\tud@res@b{\strip@pt\dimexpr\gluestretch\tud@res@c\relax}% + \ifdim\tud@res@b\p@=\z@\relax\else% + \eappto\tud@res@a{% + \space\@plus\space\tud@res@b% + \ifcase\gluestretchorder\tud@res@c pt\or fil\or fill\or filll\fi% + }% + \fi% + \edef\tud@res@b{\strip@pt\dimexpr\glueshrink\tud@res@c\relax}% + \ifdim\tud@res@b\p@=\z@\relax\else% + \eappto\tud@res@a{% + \space\@minus\space\tud@res@b% + \ifcase\glueshrinkorder\tud@res@c pt\or fil\or fill\or filll\fi% }% + \fi% + \edef\tud@res@a{% + \endgroup% + \unexpanded{\def#1}{\tud@res@a}% }% - }% + \tud@res@a% } -\newcommand*\iflanguageloaded[1]{% - \PackageWarning{tudscrbase}{% - Whether package `babel' nor package `polyglossia' has been loaded% +\newcommand*\tud@remove@spaces@within[1]{% + \begingroup% + \protected@edef\tud@res@a{\noexpand\zap@space#1\space\noexpand\@empty}% + \protected@edef\tud@res@a{% + \endgroup% + \unexpanded{\def#1}{\tud@res@a}% + }% + \tud@res@a% +} +\AtEndPreamble{% + \providecommand*\iflanguageloaded[1]{% + \PackageWarning{tudscrbase}{% + `\string\iflanguageloaded' is not defined. Loading\MessageBreak% + either package `babel' or package `polyglossia'\MessageBreak% + is recommended% + }% + \def\iflanguageloaded##1{\expandafter\@secondoftwo}% + \iflanguageloaded{#1}% }% - \expandafter\@secondoftwo% } \AfterPackage*{babel}{% - \renewcommand*\iflanguageloaded[1]{% + \providecommand*\iflanguageloaded[1]{% \@expandtwoargs\in@{,#1,}{,\bbl@loaded,}% \ifin@% \expandafter\@firstoftwo% @@ -130,7 +287,6 @@ \fi% }% } -\BeforePackage{polyglossia}{\undef\iflanguageloaded} \providecommand*\protected@expandtwoargs[3]{% \protected@edef\reserved@a{\noexpand#1{#2}{#3}}\reserved@a% } @@ -140,41 +296,35 @@ \@defaultunits\@tempdimb #3pt\relax\@nnil% \ifdim\@tempdima>\@tempdimb\relax% \@whiledim\@tempdimb>1pt\relax\do{% - \setlength\@tempdima{.1\@tempdima}% - \setlength\@tempdimb{.1\@tempdimb}% + \setlength\@tempdima{\dimexpr\@tempdima/10\relax}% + \setlength\@tempdimb{\dimexpr\@tempdimb/10\relax}% }% \setlength\@tempdimc{\@tempdima}% \else% \@whiledim\@tempdima>1pt\relax\do{% - \setlength\@tempdima{.1\@tempdima}% - \setlength\@tempdimb{.1\@tempdimb}% + \setlength\@tempdima{\dimexpr\@tempdima/10\relax}% + \setlength\@tempdimb{\dimexpr\@tempdimb/10\relax}% }% \setlength\@tempdimc{\@tempdimb}% \fi% \@tempcnta=1\relax% - \@whiledim\dimexpr\@tempcnta\@tempdimc\relax<.01\maxdimen\do{% + \@whiledim% + \dimexpr\@tempcnta\@tempdimc\relax<\dimexpr\maxdimen/100\relax% + \do{% \multiply\@tempcnta by 10\relax% }% - \setlength\@tempdimc{% - \dimexpr(\@tempcnta\@tempdima / \@tempdimb * \p@)\relax% - }% - \setlength\@tempdimc{\dimexpr \@tempdimc/\@tempcnta\relax}% + \setlength\@tempdimc{\dimexpr(\@tempcnta\@tempdima/\@tempdimb*\p@)\relax}% + \setlength\@tempdimc{\dimexpr\@tempdimc/\@tempcnta\relax}% \edef\@tempa{\endgroup\def\noexpand#1{\strip@pt\@tempdimc}}% \@tempa% } -\newcommand*\tud@lowerstring[2]{% - \protected@edef#1{#2}% - \lowercase\expandafter{% - \expandafter\def\expandafter #1\expandafter{#1}% - }% -} \newcommand*\tud@if@fdfileexists[2]{% \begingroup% \@tud@res@swatrue% - \tud@lowerstring\tud@res@a{#1#2.fd}% + \tud@strlowercase\tud@res@a{#1#2.fd}% \IfFileExists{\tud@res@a}{\@tud@res@swafalse}{}% \if@tud@res@swa% - \tud@lowerstring\tud@res@a{#1}% + \tud@strlowercase\tud@res@a{#1}% \edef\tud@res@a{\tud@res@a#2.fd}% \IfFileExists{\tud@res@a}{\@tud@res@swafalse}{}% \fi% @@ -194,9 +344,10 @@ \expandafter\csname #1\expandafter\endcsname\csname #2\endcsname% } \newrobustcmd*\tud@cs@store[1]{% - \tud@cs@check{#1}% - \ifcsdef{@@tud@#1}{}{% - \tud@cs@letltx{@@tud@#1}{#1}% + \tud@cs@check{#1}{% + \ifcsdef{@@tud@#1}{}{% + \tud@cs@letltx{@@tud@#1}{#1}% + }% }% } \newrobustcmd*\tud@cs@restore[1]{% @@ -205,92 +356,109 @@ \cslet{#1}{\relax}% }{}% }% - \tud@cs@check{#1}% - \ifcsdef{@@tud@#1}{% - \tud@cs@letltx{#1}{@@tud@#1}% - \csundef{@@tud@#1}% - }{}% + \tud@cs@check{#1}{% + \ifcsdef{@@tud@#1}{% + \tud@cs@letltx{#1}{@@tud@#1}% + \csundef{@@tud@#1}% + }{}% + }% } \newrobustcmd*\tud@cs@reset[1]{% - \tud@cs@check{#1}% - \ifcsdef{@@tud@#1}{% - \tud@cs@letltx{#1}{@@tud@#1}% - }{}% + \tud@cs@check{#1}{% + \ifcsdef{@@tud@#1}{% + \tud@cs@letltx{#1}{@@tud@#1}% + }{}% + }% } \newrobustcmd*\tud@cs@update[1]{% - \tud@cs@check{#1}% - \ifcsdef{@@tud@#1}{% - \tud@cs@letltx{@@tud@#1}{#1}% - }{}% -} -\newrobustcmd*\tud@cs@use[1]{% - \tud@cs@check{#1}% - \ifcsdef{@@tud@#1}{% - \csuse{@@tud@#1}% - }{% - \csuse{#1}% + \tud@cs@check{#1}{% + \ifcsdef{@@tud@#1}{% + \tud@cs@letltx{@@tud@#1}{#1}% + }{}% }% } -\newrobustcmd*\tud@cs@check[1]{% - \ifcsdef{#1}{}{% - \PackageError{tudscrbase}{% - `\@backslashchar#1' is not defined}{% - The command `\@backslashchar#1' was never defined. \MessageBreak% - Please contact the TUD-Script maintainer\MessageBreak% - via \tudscrmail. A bugfix is urgently required.% +\newrobustcmd*\tud@cs@use[1]{% + \tud@cs@check{#1}{% + \ifcsdef{@@tud@#1}{% + \csuse{@@tud@#1}% + }{% + \csuse{#1}% }% }% } -\newcommand*\tud@skip@store[1]{% - \tud@skip@check{#1}{% - \ifcsdef{@@tud@skip@#1}{}{% - \csedef{@@tud@skip@#1}{\expandafter\the\csname #1\endcsname}% - }% - }% +\newrobustcmd*\tud@cs@check[1]{% + \begingroup% + \ifcsdef{#1}{\@tud@res@swatrue}{\@tud@res@swafalse}% + \if@tud@res@swa% + \ifcscounter{#1}{\@tud@res@swafalse}{}% + \ifcslength{#1}{\@tud@res@swafalse}{}% + \ifcsdimen{#1}{\@tud@res@swafalse}{}% + \fi% + \if@tud@res@swa% + \aftergroup\@firstofone% + \else% + \PackageError{tudscrbase}{`\@backslashchar#1' is not a defined macro}{% + The macro `\@backslashchar#1' was never defined. \MessageBreak% + Please contact the TUD-Script maintainer\MessageBreak% + via \TUDScriptContact. A bugfix is urgently required.% + }% + \aftergroup\@gobble% + \fi% + \endgroup% } -\newcommand*\tud@skip@restore[1]{% - \tud@skip@check{#1}{% - \ifcsdef{@@tud@skip@#1}{% - \csname #1\endcsname=\csname @@tud@skip@#1\endcsname% - \csundef{@@tud@skip@#1}% +\newcommand*\tud@cslength@store[1]{% + \tud@cslength@check{#1}{% + \ifcsundef{@@tud@length@#1}{% + \csedef{@@tud@length@#1}{\expandafter\the\csname #1\endcsname}% }{}% }% } -\newcommand*\tud@skip@reset[1]{% - \tud@skip@check{#1}{% - \ifcsdef{@@tud@skip@#1}{% - \csname#1\endcsname=\csname @@tud@skip@#1\endcsname% - }{}% +\newcommand*\tud@cslength@restore[1]{% + \tud@cslength@check{#1}{% + \ifcsundef{@@tud@length@#1}{}{% + \expandafter\setlength\csname #1\endcsname{% + \csname @@tud@length@#1\endcsname% + }% + \csundef{@@tud@length@#1}% + }% }% } -\newcommand*\tud@skip@set[2]{% - \tud@skip@check{#1}{% - \expandafter\setlength\csname #1\endcsname{#2}% +\newcommand*\tud@cslength@reset[1]{% + \tud@cslength@check{#1}{% + \ifcsundef{@@tud@length@#1}{}{% + \expandafter\setlength\csname #1\endcsname{% + \csname @@tud@length@#1\endcsname% + }% + }% }% } -\newcommand*\tud@skip@check[1]{% - \begingroup% - \@tempswafalse% - \expandafter\ifisskip\expandafter{\csname#1\endcsname}{\@tempswatrue}{}% - \expandafter\ifisdimen\expandafter{\csname#1\endcsname}{\@tempswatrue}{}% - \if@tempswa% - \aftergroup\@firstofone% - \else% - \aftergroup\@gobble% - \fi% - \endgroup% +\newcommand*\tud@cslength@check[1]{% + \expandafter\tud@if@lengthregister\expandafter{\csname #1\endcsname}{% + \expandafter\@firstofone% + }{% + \PackageError{tudscrbase}{`\@backslashchar#1' is not a defined length}{% + The length `\@backslashchar#1' was never defined. \MessageBreak% + Please contact the TUD-Script maintainer\MessageBreak% + via \TUDScriptContact. A bugfix is urgently required.% + }% + \expandafter\@gobble% + }% } \newcommand*\tud@patch@wrn[1]{% \PackageWarning{tudscrbase}{% It wasn't possible to patch `\@backslashchar#1'\MessageBreak% Please contact the TUD-Script maintainer\MessageBreak% - via \tudscrmail. Without a bugfix an\MessageBreak% + via \TUDScriptContact. Without a bugfix an\MessageBreak% erroneous output may occur% }% } \DefineFamily{TUD} -\newcommand*\TUDProcessOptions{\FamilyProcessOptions{TUD}} -\newcommand*\TUDExecuteOptions{\FamilyExecuteOptions{TUD}} +\newcommand*\TUDProcessOptions[1][.\@currname.\@currext]{% + \FamilyProcessOptions[{#1}]{TUD}% +} +\newcommand*\TUDExecuteOptions[1][.\@currname.\@currext]{% + \FamilyExecuteOptions[{#1}]{TUD}% +} \newcommand*\TUDoptions{\FamilyOptions{TUD}} \newcommand*\TUDoption{\FamilyOption{TUD}} \newcommand*\TUD@key[2][.\@currname.\@currext]{% @@ -325,29 +493,215 @@ }% } \newcommand*\TUD@set@ifkey[3]{% - \tud@lowerstring\tud@res@a{#3}% - \edef\tud@res@b{% - \etex@unexpanded{\FamilySetBool{TUD}{#1}{#2}}{\tud@res@a}% - }\tud@res@b% + \begingroup% + \tud@strlowercase\tud@res@a{#3}% + \edef\tud@res@a{% + \endgroup% + \unexpanded{\FamilySetBool{TUD}{#1}{#2}}{\tud@res@a}% + }% + \tud@res@a% } \newcommand*\TUD@set@numkey[4]{% - \tud@lowerstring\tud@res@a{#4}% - \edef\tud@res@b{% - \etex@unexpanded{\FamilySetNumerical{TUD}{#1}{#2}{#3}}{\tud@res@a}% - }\tud@res@b% + \begingroup% + \tud@strlowercase\tud@res@a{#4}% + \edef\tud@res@a{% + \endgroup% + \unexpanded{\FamilySetNumerical{TUD}{#1}{#2}{#3}}{\tud@res@a}% + }% + \tud@res@a% } \newcommand*\TUD@bool@numkey{% {false}{0},{off}{0},{no}{0},{true}{1},{on}{1},{yes}{1}% } -\newcommand*\TUD@set@dimenkey[3]{% - \tud@lowerstring\tud@res@a{#3}% - \edef\tud@res@b{% - \etex@unexpanded{\FamilySetUseLengthMacro{TUD}{#1}{#2}}{\tud@res@a}% - }\tud@res@b% +\newcommand*\TUD@set@gluekey[4][pt]{% + \begingroup% + \tud@strlowercase\tud@res@a{#4}% + \edef\tud@res@b{\detokenize\expandafter{\tud@res@a}}% + \edef\tud@res@c{\detokenize\expandafter{\@backslashchar}}% + \@expandtwoargs\in@{\tud@res@c}{\tud@res@b}% + \ifin@\else% + \tud@normalize@gluekey\tud@res@a{#1}% + \fi% + \protected@edef\tud@res@a{% + \endgroup% + \ifx\tud@res@a\@empty% + \noexpand\FamilyKeyStateUnknownValue% + \else% + \unexpanded{\tud@validate@gluekey{#2}}{\tud@res@a}{#4}% + \unexpanded{\FamilySetUseLengthMacro{TUD}{#2}{#3}}{\tud@res@a}% + \fi% + }% + \tud@res@a% +} +\newcommand*\tud@normalize@gluekey[2]{% + \begingroup% + \edef\tud@res@c{#1}% + \def\tud@res@a##1plus##2plus##3\@nil{% + \let\tud@res@a\@empty% + \tud@res@b##1minusminus\@nil% + \tud@res@b##2minusminus\@nil% + }% + \def\tud@res@b##1minus##2minus##3\@nil{% + \eappto\tud@res@a{{\trim@spaces{##1}}{\trim@spaces{##2}}}% + }% + \expandafter\tud@res@a\tud@res@c plusplus\@nil% + \def\tud@res@b##1##2##3##4{% + \IfArgIsEmpty{##2}{% + \def\tud@res@a{{##1}{##3}{##4}}% + }{% + \def\tud@res@a{{##1}{##3}{##2}}% + }% + }% + \expandafter\tud@res@b\tud@res@a% + \edef\tud@res@b{% + \unexpanded{\@tfor\tud@res@b:=}\tud@res@a% + }% + \let\tud@res@c\@empty% + \@tud@res@swatrue% + \tud@res@b\do{% + \tud@normalize@@gluekey\tud@res@a{\tud@res@b}{#2}% + \ifx\tud@res@a\relax% + \@tud@res@swafalse% + \@break@tfor% + \else% + \eappto\tud@res@c{{\tud@res@a}}% + \fi% + }% + \let\tud@res@a\@empty% + \if@tud@res@swa% + \def\tud@res@b##1##2##3{% + \IfArgIsEmpty{##1}{\def\tud@res@b{0#2}}{\def\tud@res@b{##1}}% + \Ifdimen{\tud@res@b}{% + \edef\tud@res@a{% + \tud@res@b% + \IfArgIsEmpty{##2}{}{\space\@plus\space##2}% + \IfArgIsEmpty{##3}{}{\space\@minus\space##3}% + }% + }{}% + }% + \expandafter\tud@res@b\tud@res@c% + \fi% + \edef\tud@res@c{% + \endgroup% + \unexpanded{\def#1}{\tud@res@a}% + }% + \tud@res@c% +} +\newcommand*\tud@normalize@@gluekey[3]{% + \begingroup% + \edef\tud@res@a{#2}% + \@tud@res@swafalse% + \expandafter\if\expandafter\@car\tud@res@a\relax\@nil+\@tud@res@swatrue\fi% + \expandafter\if\expandafter\@car\tud@res@a\relax\@nil-\@tud@res@swatrue\fi% + \if@tud@res@swa% + \protected@edef\tud@res@b{\expandafter\@car\tud@res@a\relax\@nil}% + \protected@edef\tud@res@a{\expandafter\@gobble\tud@res@a}% + \else% + \let\tud@res@b\@empty% + \fi% + \@tud@res@swatrue% + \Ifdimen{\tud@res@a}{}{% + \Ifdimen{\tud@res@a#3}{% + \appto\tud@res@a{#3}% + }{% + \@tud@res@swafalse% + }% + }% + \if@tud@res@swa% + \Ifisdimension{\tud@res@a}{}{% + \let\tud@res@a\@empty% + \let\tud@res@b\@empty% + }% + \else% + \def\tud@res@c##1fil##2fil##3\@nil{% + \IfArgIsEmpty{##1}{\def\tud@res@a{1}}{\def\tud@res@a{##1}}% + \Ifdimen{\tud@res@a pt}{\@tud@res@swatrue}{\@tud@res@swafalse}% + \if@tud@res@swa% + \appto\tud@res@a{fil##2}% + \tud@if@strequal{##2}{}{}{% + \tud@if@strequal{##2}{l}{}{% + \tud@if@strequal{##2}{ll}{}{\@tud@res@swafalse}% + }% + }% + \fi% + }% + \expandafter\tud@res@c\tud@res@a filfil\@nil% + \fi% + \edef\tud@res@c{% + \endgroup% + \if@tud@res@swa% + \unexpanded{\def#1}{\tud@res@b\tud@res@a}% + \else% + \unexpanded{\let#1\relax}% + \fi% + }% + \tud@res@c% +} +\newcommand*\tud@validate@gluekey[3]{% + \begingroup% + \protected@edef\tud@res@a{#2}% + \protected@edef\tud@res@b{#3}% + \tud@remove@spaces@within\tud@res@a% + \tud@remove@spaces@within\tud@res@b% + \ifx\tud@res@a\tud@res@b% + \aftergroup\@gobble% + \else% + \aftergroup\@firstofone% + \fi% + \endgroup{% + \PackageWarning{tudscrbase}{% + The length `#3'\MessageBreak% + seems to be wrong formatted. Assuming, you meant\MessageBreak% + `#1=#2'% + }% + }% +} +\newcommand*\TUD@set@dimkey[4][pt]{% + \begingroup% + \TUD@set@gluekey[{#1}]{#2}{\tud@res@a}{#4}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \@tud@res@swafalse% + \Ifisskip{\tud@res@a}{% + \protected@edef\tud@res@a{\dimexpr\tud@res@a\relax}% + \def\tud@res@b{a \string\skip\space register}% + \@tud@res@swatrue% + }{% + \Ifisglueexpr{\tud@res@a}{% + \protected@edef\tud@res@a{\dimexpr\tud@res@a\relax}% + \def\tud@res@b{a glue expression}% + \@tud@res@swatrue% + }{% + \Ifisglue{\tud@res@a}{% + \Ifisdimension{\tud@res@a}{}{% + \setlength\@tempdima{\dimexpr\glueexpr\tud@res@a\relax\relax}% + \tud@strlength\tud@res@a{\@tempdima}% + \def\tud@res@b{something containing glue}% + \@tud@res@swatrue% + }% + }{}% + }% + }% + \if@tud@res@swa% + \PackageWarning{tudscrbase}{% + Using option `#2' with\MessageBreak% + \tud@res@b\space(#4)\MessageBreak% + is not recommended. You should consider to use\MessageBreak% + an expression for a dimen instead. Setting\MessageBreak% + `#2=\tud@res@a'% + }% + \fi% + \protected@edef\tud@res@a{% + \endgroup% + \unexpanded{\FamilySetUseLengthMacro{TUD}{#2}{#3}}{\tud@res@a}% + }% + \else% + \def\tud@res@a{\endgroup\FamilyKeyStateUnknownValue}% + \fi% + \tud@res@a% } \newcommand*\TUD@unknown@keyval{\FamilyUnknownKeyValue{TUD}} \newcommand*\tud@locked@newnum[2]{% - \expandafter\newcommand\expandafter*\csname#1\endcsname{#2}% + \expandafter\newcommand\expandafter*\csname #1\endcsname{#2}% \newbool{#1@locked}% \tud@num@set{#1}{#2}% } @@ -362,8 +716,15 @@ \booltrue{#1@locked}% } \newcommand*\tud@num@set[2]{% - \ifcsdef{#1}{% - \ifnumber{#2}{% + \ifcsundef{#1}{% + \PackageError{tudscrbase}{% + `\@backslashchar#1' was never defined% + }{% + You tried using the numerical expression `\@backslashchar#1'\MessageBreak% + but you didn't define it with `\string\tud@locked@newnum'.% + }% + }{% + \Ifnumber{#2}{% \csdef{#1}{#2}% }{% \PackageError{tudscrbase}{% @@ -373,13 +734,6 @@ to value `#2', which isn't numerical.% }% }% - }{% - \PackageError{tudscrbase}{% - `\@backslashchar#1' was never defined% - }{% - You tried using the numerical expression `\@backslashchar#1'\MessageBreak% - but you didn't define it with `\string\tud@locked@newnum'.% - }% }% } \newcommand*\tud@locked@newbool[2][false]{% @@ -398,7 +752,7 @@ \booltrue{#1@locked}% } \newcommand*\tud@bool@set[2]{% - \ifstrbool{#2}{\booltrue{#1}}{\boolfalse{#1}}{% + \tud@if@strbool{#2}{\booltrue{#1}}{\boolfalse{#1}}{% \PackageError{tudscrbase}{% `#2' is not a valid boolean expression% }{% @@ -415,7 +769,7 @@ \gdef\TUD@parameter@@family{}% } \newcommand*\TUD@parameter@checkfamily[2]{% - \ifxblank{#1}{% + \tud@if@strblank{#1}{% \PackageError{tudscrbase}{% No family for \@backslashchar#2 defined% }{% @@ -470,7 +824,7 @@ \newcommand*\TUD@parameter@handler@macro[3][\TUD@parameter@@family]{% \TUD@parameter@checkfamily{#1}{TUD@parameter@handler@macro}% \expandafter\kv@set@family@handler\expandafter{#1}{% - \ifstr{\kv@key}{\TUD@parameter@nokey}{#3}{#2}% + \tud@if@strequal{\kv@key}{\TUD@parameter@nokey}{#3}{#2}% }% } \newcommand*\TUD@parameter@handler@value[2][\TUD@parameter@@family]{% @@ -478,27 +832,29 @@ \protected@edef\@tempa{% \noexpand\TUD@parameter@set{#1}{#2=\noexpand\kv@value}% }% - \def\@tempb{\TUD@parameter@handler@macro[#1]{\kv@handled@false}}% + \def\@tempb{\TUD@parameter@handler@macro[{#1}]{\kv@handled@false}}% \expandafter\@tempb\expandafter{\@tempa}% } \newcommand*\TUD@parameter@handler@default[2][\TUD@parameter@@family]{% \TUD@parameter@checkfamily{#1}{TUD@parameter@handler@default}% - \ifxblank{#2}{% + \tud@if@strblank{#2}{% \def\@tempa{\let\tud@reserved\relax}% }{% \def\@tempa{\def\tud@reserved{#2=\kv@value}}% }% \appto\@tempa{% - \ifstr{\kv@value}{twocolumn}{\def\kv@value{2}}{}% - \ifnumber{\kv@value}{\def\tud@reserved{columns=\kv@value}}{}% + \tud@if@strequal{\kv@value}{twocolumn}{\def\kv@value{2}}{}% + \Ifnumber{\kv@value}{\def\tud@reserved{columns=\kv@value}}{}% \iflanguageloaded{\kv@value}{\def\tud@reserved{language=\kv@value}}{}% \ifx\tud@reserved\relax% - \PackageError{tudscrbase}{% - Unknown default value `\kv@value'% - }{% - If `\kv@value' is a language, you haven't loaded it. \MessageBreak% - Otherwise, there's no handler for the given value. \MessageBreak% - You should specify a certian key (<key>=\kv@value).% + \tud@if@strblank{\kv@value}{}{% + \PackageError{tudscrbase}{% + Unknown default value `\kv@value'% + }{% + If `\kv@value' is a language, you haven't loaded it. \MessageBreak% + Otherwise, there's no handler for the given value. \MessageBreak% + You should specify a certian key (<key>=\kv@value).% + }% }% \fi% }% @@ -507,21 +863,25 @@ \noexpand\TUD@parameter@set{#1}{\noexpand\tud@reserved}% \noexpand\fi% }% - \def\@tempb{\TUD@parameter@handler@macro[#1]{\kv@handled@false}}% + \def\@tempb{\TUD@parameter@handler@macro[{#1}]{\kv@handled@false}}% \expandafter\@tempb\expandafter{\@tempa}% } -\newcommand*\TUD@parameter@error[2]{% +\newcommand*\TUD@parameter@err[2]{% \PackageError{tudscrbase}{Unsupported value for parameter `#1'}{% `#1' can only be used with values:\MessageBreak#2% + \MessageBreak Please choose a valid one.% }% } -\newcommand*\TUD@UnwindPackage[2]{\AtEndPreamble{\@ifpackageloaded{#1}{}{#2}}} +\NewDocumentCommand\TUD@UnwindPackage{s m m}{% + \IfBooleanT{#1}{\AfterPackage*{#2}{#3}}% + \AtEndPreamble{\@ifpackageloaded{#2}{}{#3}}% +} \@onlypreamble\TUD@UnwindPackage \newcommand*\TUD@CheckPackage[2]{% \tud@if@packagelater@exists{#1}{#2}{}{% \PackageWarningNoLine{tudscrbase}{% The version `#2' of package `#1'\MessageBreak% - is urgently required. An erroneous output\MessageBreak + is urgently required. An erroneous output\MessageBreak% may occur. Please update your distribution% }% \IfFileExists{#1.sty}{}{\RequirePackage{#1}[#2]}% @@ -533,37 +893,38 @@ \let\tud@res@a\@empty% \def\tud@res@b[##1]{\def\tud@res@a{##1}}% \def\ProvidesPackage##1{% - \@ifnextchar[%] - {\tud@res@b}{\tud@res@b[]}% + \kernel@ifnextchar[%] + {\tud@res@b}% + {\tud@res@b[]}% }% \IfFileExists{#1.sty}{% - \openin\tud@res@read=#1.sty% + \openin\@inputcheck=#1.sty% \@tud@res@swatrue% \loop% - \read\tud@res@read to\tud@res@c% + \read\@inputcheck to\tud@res@c% \@expandtwoargs\in@{\string\ProvidesPackage}% {\expandafter\detokenize\expandafter{\tud@res@c}}% \ifin@% \@tud@res@swafalse% \tud@res@c% \fi% - \ifeof\tud@res@read\@tud@res@swafalse\fi% + \ifeof\@inputcheck\@tud@res@swafalse\fi% \if@tud@res@swa% \repeat% - \closein\tud@res@read% + \closein\@inputcheck% }{}% - \edef\tud@res@a{\endgroup\noexpand\@ifl@t@r{\tud@res@a}{#2}} + \edef\tud@res@a{\endgroup\noexpand\@ifl@t@r{\tud@res@a}{#2}}% \tud@res@a% } \@onlypreamble\tud@if@packagelater@exists \newcommand*\TUD@RecommendPackage[1]{% \kernel@ifnextchar[%] - {\TUD@@RecommendPackage#1}% - {\TUD@@RecommendPackage#1[]}% + {\TUD@Recommend@Package#1}% + {\TUD@Recommend@Package#1[]}% } \@onlypreamble\TUD@RecommendPackage -\newcommand*\TUD@@RecommendPackage{} -\def\TUD@@RecommendPackage#1[#2]{% +\newcommand*\TUD@Recommend@Package{} +\def\TUD@Recommend@Package#1[#2]{% \IfFileExists{#1.sty}{% \RequirePackage{#1}[#2]% }{% @@ -573,23 +934,22 @@ }% }% } -\@onlypreamble\TUD@@RecommendPackage +\@onlypreamble\TUD@Recommend@Package \newcommand*\TUD@AfterPackage@set[1]{% \newbool{@tud@#1@loaded}% \AfterAtEndOfPackage*{#1}{\booltrue{@tud@#1@loaded}}% } \newcommand*\TUD@AfterPackage@do[2]{% - \ifcsdef{if@tud@#1@loaded}{% - \if@atdocument% - \ifbool{@tud@#1@loaded}{#2}{}% - \else% - \AfterAtEndOfPackage*{#1}{#2}% - \fi% - }{% + \ifcsundef{if@tud@#1@loaded}{% \PackageError{tudscrbase}{\string\TUD@AfterPackage@set{#1} missing}{% You have to set \string\TUD@AfterPackage@set{#1} before\MessageBreak% - the usage of \string\TUD@AfterPackage@do{#1}{<code>} is\MessageBreak% - possible.% + using \string\TUD@AfterPackage@do{#1}{<code>}.% + }% + }{% + \tud@if@preamble{% + \AfterAtEndOfPackage*{#1}{#2}% + }{% + \ifbool{@tud@#1@loaded}{#2}{}% }% }% } @@ -597,13 +957,14 @@ \ifundef{\KOMAClassName}{% \renewcommand*\TUD@KOMAoptions[1]{% \PackageWarning{tudscrbase}{% - You should load package `scrextend' right after the\MessageBreak% - documentclass. Option \string\TUD@KOMAoptions{`#1'} is gobbled% + You should load package `scrextend' right after\MessageBreak% + the documentclass. The following option is gobbled:\MessageBreak% + \string\KOMAoptions{`#1'}% }% }% - \AfterPackage*{scrextend}{\let\TUD@KOMAoptions\KOMAoptions}% + \AfterPackage*{scrextend}{\def\TUD@KOMAoptions{\KOMAoptions}}% }{% - \let\TUD@KOMAoptions\KOMAoptions% + \def\TUD@KOMAoptions{\KOMAoptions}% } \endinput %% |