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