% \CheckSum{160}
% \iffalse meta-comment
% ======================================================================
% scrkernel-variables.dtx
% Copyright (c) Markus Kohm, 2008-2017
%
% 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-2017
%
% 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 2640 2017-05-08 09:36:55Z 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}}
% \changes{v3.20}{2016/04/12}{\cs{@ifstar} durch \cs{kernel@ifstar}
% ersetzt}^^A
% Natürlich wird auch ein Befehl benötigt, um die Feldvariablen
% 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
% Feststellen, ob eine \KOMAScript-Variable überhaupt definiert ist.
% \begin{macrocode}
\DeclareRobustCommand*{\ifkomavar}[1]{%
\scr@ifundefinedorrelax{scr@#1@var}{%
\expandafter\@secondoftwo
}{%
\expandafter\@firstoftwo
}%
}
% \end{macrocode}
% \end{macro}
%
% \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
% 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.
% \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
% Da mit einer Sternvariante gearbeitet wird, wird wieder ein
% Hilfsmakro verwendet.
% \begin{macrocode}
\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}
% \end{macro}
%
%
% \iffalse
%
% \fi
%
% \iffalse
%
% \fi
%
% \Finale
%
\endinput
%
% end of file `scrkernel-variables.dtx'
%%% Local Variables:
%%% mode: doctex
%%% TeX-master: t
%%% End: