% \CheckSum{273}
% \iffalse meta-comment
% ======================================================================
% scrkernel-variables.dtx
% Copyright (c) Markus Kohm, 2008-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-variables.dtx
% Copyright (c) Markus Kohm, 2008-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-variables.dtx 3393 2019-11-19 10:33:44Z kohm $
%
%<*body>
% \fi
%
% \subsection{Anweisungen zum Anlegen und Verwenden von Variablen}
%
% \begin{macro}{\newkomavar}
% \changes{v2.8q}{2002/01/14}{Neu}%^^A
% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
% ersetzt}%^^A
% Es wird zwischen zwei Arten von Feldern unterschieden:
% \begin{itemize}
% \item Felder für die Geschäftszeile
% \item Felder für sonstige Verwendung
% \end{itemize}
% Felder können aber auch nachträglich zur Geschäftszeile
% hinzugefügt werden. Die Sternvariante von \cs{newkomavar} führt
% dies jedoch automatisch durch.
% \begin{macro}{\@newkomavar}
% Da mit einer Sternvariante gearbeitet wird, wird ein Hilfsmakro
% benötigt. Das Makro erhält ein optionales und
% ein obligatorisches Argument. Das optionale Argument ist dabei die
% Voreinstellung für den \emph{Ausgabenamen} des Feldes, der
% ggf. ausgegeben werden soll. Das obligatorische Argument ist
% \emph{Name} des Feldes, über den das Feld angesprochen wird.
% Das Makro definiert zwei weitere Makros: \cs{\emph{scr@Name}@var} und
% \cs{scr@\emph{Name}@name}.
% \begin{macrocode}
\newcommand*{\newkomavar}{%
\kernel@ifstar {\@tempswatrue\@newkomavar}{\@tempswafalse\@newkomavar}}
\newcommand*{\@newkomavar}[2][\relax]{%
\@ifundefined{scr@#2@name}{%
\@ifundefined{scr@#2@var}{%
\begingroup
\def\@tempa{#1}\def\@tempb{\relax}%
\ifx\@tempa\@tempb\endgroup\else
\endgroup\@namedef{scr@#2@name}{#1}%
\fi%
\expandafter\let\csname scr@#2@var\endcsname=\@empty
\if@tempswa\addtoreffields{#2}\fi
}{%
% \ClassError{scrlttr2%
% \PackageError{scrletter%
}{%
This should never happen%
}{%
The contents of the KOMA-Script variable `#2'\MessageBreak
is undefined, but the name of the variable is
defined.\MessageBreak
This should never happen. So someone crashs me!%
}%
}%
}{%
% \ClassError{scrlttr2%
% \PackageError{scrletter%
}{%
Variable `#2' already defined%
}{%
I'll ignore this command, if you'll continue.%
}%
}%
}
% \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\setkomavar}
% \changes{v2.8q}{2002/01/14}{Neu}%^^A
% \changes{v3.08}{2010/10/28}{\cs{scr@\emph{Name}@postsetname} und
% \cs{scr@\emph{Name}@postsetvar}}%^^A
% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
% ersetzt}%^^A
% Natürlich wird auch ein Befehl benötigt, um die Feldvariable zu setzen und
% ihnen ggf. einen neuen Namen für die Ausgabe zu geben. Der \emph{Name} der
% Feldvariable wird als obligatorisches erstes Argument übergeben. Zusätzlich
% zum Setzen von Ausgabename oder Wert werden ggf. auch die Hooks
% \cs{scr@\emph{Name}@postsetname} bzw. \cs{scr@\emph{Name}@postsetvar}
% ausgeführt.
% \begin{macro}{\@setkomavar}
% \changes{v2.8q}{2002/01/14}{Neu}%^^A
% \changes{v3.20}{2016/04/12}{\cs{@ifnextchar} replaced by
% \cs{kernel@ifnextchar}}%^^A
% Da dann zwischen einer Sternvariante und einer normalen unterschieden werden
% soll wird ein Hilfsmakro benötigt.
% \begin{macro}{\@setkomaname}
% \changes{v2.8q}{2002/01/14}{Neu}%^^A
% Die Sternvariante definiert nur den Ausgabename neu.
% \begin{macro}{\@@setkomavar}
% \changes{v2.8q}{2002/01/14}{Neu}%^^A
% Da in der normalen Variante nach dem Stern ein optionales Argument folgen
% kann, wird mit einem weiteren Hilfsmakro gearbeitet. Der \emph{Ausgabename}
% wird dabei als optionales, zweites Argument übergeben. Der \emph{Inhalt}
% wird als obligatorisches, drittes Argument übergeben.
% \begin{macrocode}
\newcommand*{\setkomavar}{%
\kernel@ifstar {\@setkomaname}{\@setkomavar}}
\newcommand*{\@setkomavar}[1]{%
\kernel@ifnextchar [%]
{\@@setkomavar{#1}}{\@@setkomavar{#1}[\relax]}}
\newcommand*{\@setkomaname}[2]{%
\@ifundefined{scr@#1@var}{%
\@komavar@err{set}{#1}%
}{%
\@namedef{scr@#1@name}{#2}%
\csname scr@#1@postsetname\endcsname
}%
}
\newcommand*{\@@setkomavar}{}
\long\def\@@setkomavar#1[#2]#3{%
\@ifundefined{scr@#1@var}{%
\@komavar@err{set}{#1}%
}{%
\@namedef{scr@#1@var}{#3}%
\csname scr@#1@postsetvar\endcsname
\begingroup
\def\@tempa{#2}\def\@tempb{\relax}%
\ifx\@tempa\@tempb\endgroup\else
\endgroup\@namedef{scr@#1@name}{#2}%
\csname scr@#1@postsetname\endcsname
\fi
}%
}
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\@komavar@err}
% \changes{v2.8q}{2002/01/14}{Neu}%^^A
% Dieses Makro wird intern in den Makros \cs{setkomavar} und
% \cs{usekomavar} verwendet.
% \begin{macrocode}
\newcommand*{\@komavar@err}[2]{%
% \ClassError{scrlttr2%
% \PackageError{scrletter%
}{%
KOMA-Script variable not defined%
}{%
You've tried to #1 the not defined KOMA-Script variable
`#2'.\MessageBreak
You have to define the variable using \string\newkomavar\space
before\MessageBreak
you do this.%
}%
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\usekomavar}
% \changes{v2.8q}{2002/01/14}{Neu}%^^A
% \changes{v2.9i}{2002/09/04}{robust}%^^A
% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
% ersetzt}%^^A
% Selbstverständlich wird auch ein Makro benötigt, um auf den
% Inhalt oder den Ausgabename einer Variablen zugreifen zu
% können. Mit der normalen Variante wird dabei der Inhalt, mit der
% Sternvariante der Name ausgegeben.
% \begin{macro}{\@usekomavar}
% \changes{v2.8q}{2002/01/14}{Neu}%^^A
% \changes{v2.9i}{2002/09/04}{optionales Argument}%^^A
% \changes{v2.9j}{2002/09/18}{\cs{@firstofone} als Defaultargument
% eingefügt}
% \begin{macro}{\@usekomaname}
% \changes{v2.8q}{2002/01/14}{Neu}%^^A
% \changes{v2.9i}{2002/09/04}{optionales Argument}%^^A
% \changes{v2.9j}{2002/09/18}{\cs{@firstofone} als Defaultargument
% eingefügt}
% Da mir einer Sternvariante gearbeitet wird, werden zwei Hilfsmakros
% benötigt.
% \begin{macrocode}
\DeclareRobustCommand*{\usekomavar}{%
\kernel@ifstar {\@usekomaname}{\@usekomavar}}
\newcommand*{\@usekomavar}[2][\@firstofone]{%
\@ifundefined{scr@#2@var}{%
\@komavar@err{use}{#2}%
}{%
#1{\@nameuse{scr@#2@var}}%
}%
}
\newcommand*{\@usekomaname}[2][\@firstofone]{%
\@ifundefined{scr@#2@var}{%
\@komavar@err{use}{#2}%
}{%
#1{\@nameuse{scr@#2@name}}%
}%
}
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\ifkomavar}
% \changes{v3.03}{2009/03/04}{Neu}%^^A
% \changes{v3.28}{2019/11/15}{umbenannt in \cs{Ifkomavar}}%^^A
% \begin{macro}{\Ifkomavar}
% \changes{v3.28}{2019/11/15}{Neu aus Umbenennung von \cs{ifkomavar}}%^^A
% Feststellen, ob eine \KOMAScript-Variable überhaupt definiert ist. Weil
% einige Mitglieder des \LaTeX3-Teams sich beschwert haben, dass trotz fehlens
% einer eindeutigen Empfehlung, \KOMAScript{} \LaTeX-Verzweigungen mit
% \cs{if\dots} definiert, statt dies \TeX-Verzweigungen vorzubehalten, habe
% ich das hier nach mehr zehn Jahren geändert. Sollte es öffentliche
% Beschwerden dazu geben und Ulrike diese sehen, will sie übrigens darauf
% antworten.
% \begin{macrocode}
\newcommand*{\ifkomavar}{%
% \PackageWarning{scrletter}{%
% \ClassWarning{\KOMAClassName}{%
Usage of deprecated command `\string\ifkomavar'.\MessageBreak
The command has been renamed to because of a\MessageBreak
recommendation of LaTeX3 team members.\MessageBreak
Please replace `\string\ifkomavar' by `\string\Ifkomavar'%
}%
\Ifkomavar
}
\DeclareRobustCommand*{\Ifkomavar}[1]{%
\scr@ifundefinedorrelax{scr@#1@var}{%
\expandafter\@secondoftwo
}{%
\expandafter\@firstoftwo
}%
}
% \end{macrocode}
% \end{macro}%^^A \Ifkomavar
% \end{macro}%^^A \ifkomavar
%
% \begin{macro}{\ifkomavarempty}
% \changes{v2.8q}{2002/01/14}{Neu}%^^A
% \changes{v2.9i}{2002/09/04}{Leerzeichen rausgeworfen}%^^A
% \changes{v2.9i}{2002/09/04}{robust}%^^A
% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
% ersetzt}%^^A
% \changes{v3.28}{2019/11/15}{umbenannt in \cs{Ifkomavar}}%^^A
% \begin{macro}{\Ifkomavarempty}
% \changes{v3.28}{2019/11/15}{Neu aus Umbenennung von \cs{ifkomavarempty}}%^^A
% Es gibt auch noch ein Makro, um zu testen, ob eine \KOMAScript{}
% Variable oder deren Name leer ist. Die Sternvariante ist wieder für
% den Namen zuständig. Weil einige Mitglieder des \LaTeX3-Teams sich beschwert
% haben, dass trotz fehlens einer eindeutigen Empfehlung, \KOMAScript{}
% \LaTeX-Verzweigungen mit \cs{if\dots} definiert, statt dies
% \TeX-Verzweigungen vorzubehalten, habe ich das hier nach mehr 17 Jahren
% geändert. Sollte es öffentliche Beschwerden dazu geben und Ulrike diese
% sehen, will sie übrigens darauf antworten.
% \begin{macro}{\if@komavarempty}
% \changes{v2.8q}{2002/01/14}{Neu}%^^A
% \changes{v3.03}{2009/03/04}{die neue Anweisung \cs{ifkomavar} wird
% verwendet}
% \changes{v3.03}{2009/03/04}{die Argumente werden nicht mehr direkt
% gelesen}%^^A
% \changes{v3.28}{2019/11/15}{\cs{ifkomavar} durch \cs{Ifkomavar} ersetzt}%^^A
% Da mit einer Sternvariante gearbeitet wird, wird wieder ein
% Hilfsmakro verwendet.
% \begin{macrocode}
\newcommand*{\ifkomavarempty}{%
% \PackageWarning{scrletter}{%
% \ClassWarning{\KOMAClassName}{%
Usage of deprecated command `\string\ifkomavarempty'.\MessageBreak
The command has been renamed to because of a\MessageBreak
recommendation of LaTeX3 team members.\MessageBreak
Please replace `\string\ifkomavarempty' by `\string\Ifkomavarempty'%
}%
\Ifkomavarempty
}
\DeclareRobustCommand*{\Ifkomavarempty}{%
\begingroup
\kernel@ifstar {\@tempswatrue\@ifkomavarempty}%
{\@tempswafalse\@ifkomavarempty}%
}
\newcommand{\@ifkomavarempty}[1]{%
\Ifkomavar{#1}{%
\if@tempswa
\@ifundefined{scr@#1@name}{%
\aftergroup\@firstoftwo
}{%
\expandafter\ifx\csname scr@#1@name\endcsname\@empty
\aftergroup\@firstoftwo
\else
\aftergroup\@secondoftwo
\fi
}%
\else
\expandafter\ifx\csname scr@#1@var\endcsname\@empty
\aftergroup\@firstoftwo
\else
\aftergroup\@secondoftwo
\fi
\fi
}{%
\@komavar@err{use}{#1}%
\aftergroup\@gobbletwo
}%
\endgroup
}
% \end{macrocode}
% \end{macro}%^^A \@ifkomavarempty
% \end{macro}%^^A \Ifkomavarempty
% \end{macro}%^^A \ifkomavarempty
%
% \selectlanguage{english}
% \begin{macro}{\foreachkomavar}
% \changes{v3.27}{2019/03/13}{new}%^^A
% Executes \texttt{\#2} for each variable in the comma separated list
% \texttt{\#1}. An argument is appended to \texttt{\#2} which is the current
% variable to be processed. This command is short. So if you want so execute
% long code you should define a command for it. Sideeffect: \cs{reserved@a} is
% changed.
% \begin{macrocode}
\newcommand*{\foreachkomavar}[2]{%
\@for \reserved@a:=#1\do{%
\scr@trim@spaces\reserved@a
\ifx\reserved@a\@empty\else
\edef\reserved@a{\unexpanded{#2}{\reserved@a}}\expandafter\reserved@a
\fi
}%
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\foreachkomavarifempty}
% \changes{v3.27}{2019/03/13}{new}%^^A
% \changes{v3.28}{2019/11/15}{\cs{ifkomavarempty} durch \cs{Ifkomavarempty}
% ersetzt}%^^A
% Same like \cs{foreachkomavar} but \texttt{\#2} is called only for empty
% variables and \texttt{\#3} is called for non empty.
% \begin{macrocode}
\newcommand*{\foreachkomavarifempty}[3]{%
\@for \reserved@a:=#1\do{%
\scr@trim@spaces\reserved@a
\ifx\reserved@a\@empty\else
\edef\reserved@a{%
\noexpand\Ifkomavarempty{\reserved@a}%
{\unexpanded{#2}{\reserved@a}}%
{\unexpanded{#3}{\reserved@a}}%
}\expandafter\reserved@a
\fi
}%
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\foreachemptykomavar}
% \changes{v3.27}{2019/03/13}{new}%^^A
% \changes{v3.28}{2019/11/15}{\cs{ifkomavarempty} durch \cs{Ifkomavarempty}
% ersetzt}%^^A
% Similar to \cs{foreachemptykomavar} with \texttt{\#3}=\cs{@gobble}.
% \begin{macrocode}
\newcommand*{\foreachemptykomavar}[2]{%
\@for \reserved@a:=#1\do{%
\scr@trim@spaces\reserved@a
\ifx\reserved@a\@empty\else
\edef\reserved@a{%
\noexpand\Ifkomavarempty{\reserved@a}{\unexpanded{#2}{\reserved@a}}{}%
}\expandafter\reserved@a
\fi
}%
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\foreachnonemptykomavar}
% \changes{v3.27}{2019/03/13}{new}%^^A
% \changes{v3.28}{2019/11/15}{\cs{ifkomavarempty} durch \cs{Ifkomavarempty}
% ersetzt}%^^A
% Similar to \cs{foreachemptykomavar} with \texttt{\#2}=\cs{@gobble}.
% \begin{macrocode}
\newcommand*{\foreachnonemptykomavar}[2]{%
\@for \reserved@a:=#1\do{%
\scr@trim@spaces\reserved@a
\ifx\reserved@a\@empty\else
\edef\reserved@a{%
\noexpand\Ifkomavarempty{\reserved@a}{}{\unexpanded{#2}{\reserved@a}}%
}\expandafter\reserved@a
\fi
}%
}
% \end{macrocode}
% \end{macro}
% \selectlanguage{ngerman}
%
% \iffalse
%
% \fi
%
% \iffalse
%
% \fi
%
% \Finale
%
\endinput
%
% end of file `scrkernel-variables.dtx'
%%% Local Variables:
%%% mode: doctex
%%% TeX-master: t
%%% End: