% \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: