summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/tudscr/tudscrbase.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/tudscr/tudscrbase.sty')
-rw-r--r--Master/texmf-dist/tex/latex/tudscr/tudscrbase.sty793
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
%%