Post by Andreas HornIch möchte in einem Brief Strings in KOMA-Variablen vergleichen.
Mit selbstdefinierten Kommandos gehts, das hilft mir aber nicht, da ich
die von mir verwendeten Variablen in scrlttr2 als KOMA-Variablen
brauche. Ich habe schon versucht die KOMA-Variablen in Kommandos zu
kopieren und dann zu verwenden, hatte leider keinen Erfolg.
Gibts hier eine Lösung oder bin ich nur zu blöd das in scrguide.pdf von
2023-04-24 zu finden? Wäre prima, wenn Jemand weiterhelfen könnte.
Hallo!
Interessant für deine Frage scheinen folgende Abschnitte von scrguide.pdf
zu sein:
- Im Kapitel "Kapitel 22: Zusätzliche Informationen zur Klasse scrlttr2
und Paket scrletter" der Abschnitt "22.1. Variablen für
fortgeschrittene Anwender".
Dort steht unter anderem,
+ dass Variablen einen Namen, eine Bezeichnung und einen Wert haben
und dass man neue Variablen deklariert mit
\newkomavar[<Bezeichnung>]{<Name>}
Der Wert einer Variablen ist eine Art Datum/etwas Gegebenes.
Die "Bezeichnung" ist eine Beschreibung, um was für eine Art Datum
es sich handelt.
Die "Bezeichnung"/Beschreibung kann man im Dokument verwenden, um
den Leser darüber in Kenntnis zu setzen, um was für eine Art Datum
es sich bei dem Wert der Variablen handelt.
+ dass man auf den Wert einer Variablen zugreift mittels
\usekomavar[<Anweisung>]{<name>} .
+ dass man auf die "Bezeichnung" einer Variablen zugreift mittels
\usekomavar*[<Anweisung>]{<name>} .
Das optionale Argument <Anweisung> ist etwas nebulös erklärt.
Wenn man das angibt, wird der Wert bzw die "Bezeichnung" anscheinend
zu einem Makroargument in geschweiften Klammern, das hinter die
Token gesetzt wird, die die <Anweisung> darstellen.
Es steht nicht da, dass <Anweisung> aus nur einem einzigen
Kontrollsequenz-Token bestehen darf!
----------------------------------------------------------------------
- Im Kapitel "Kapitel 4: Briefe mit Klasse scrlttr2 oder Paket
scrletter" der Abschnitt "4.5. Variablen".
Dort steht unter anderem,
+ dass man mit
\setkomavar{<Name>}[<Bezeichnung>]{<Inhalt>}
sowohl die "Bezeichnung" als auch den Wert der Variable, die den
Namen <Name> hat, geändert werden kann. Der Wert witd hier als
Inhalt bezeichnet, weil es sich bei TeX ja immer um Token handelt,
die dem Token-Stream hinzugefügt werden.
+ dass man mit
\setkomavar*{<Name>}[<Bezeichnung>]
die "Bezeichnung" der Variable, die den Namen <Name> hat, geändert
werden kann, während der Wert/Inhalt nicht geändert wird.
----------------------------------------------------------------------
- Im Kapitel "12 Grundlegende Funktionen im Paket scrbase" der Abschnitt
"12.3. Verzweigungen".
Dort steht unter anderem:
| \Ifstr{<Zeichenfolge>}{<Zeichenfolge>}{<Dann-Teil>}{<Sonst-Teil>}
|
| Die beiden Argumente Zeichenfolge werden expandiert und dann
| verglichen. Sind sie gleich, so wird der Dann-Teil ausgeführt,
| anderenfalls der Sonst-Teil .
------------------------------------------------------------------------
Dabei, aus diesen Informationen den Code richtig zusammenzusetzen,
kommt es darauf an, welche Elemente von Koma-Variablen du vergleichen
möchtest und ob der Vergleich expandibel sein muss.
Wenn du den Wert/Inhalt einer Variablen mit einem String vergleichen
möchtest, kannst du etwas in der folgenden Art machen:
\usekomavar[{\Ifstr}]{<Variable>}{<String>}%
{<Tokens wenn Wert gleich String>}%
{<Tokens wenn Wert ungleich String>}%
Wenn du die Werte/Inhalte zweier Variablen vergleichen möchtest und der
Vergleich nicht expandibel sein muss, kannst du etwas in der folgenden
Art machen:
\usekomavar[{\usekomavar[{\Ifstr}]{<Variable 1>}}]%
{<Variable 2>}%
{<Tokens wenn Werte gleich sind>}%
{<Tokens wenn Werte ungleich sind>}%
Wenn du die Bezeichnungen vergleichen möchtest und der Vergleich nicht
expandibel sein muss, kannst du etwas in der folgenden Art machen:
\usekomavar*[{\usekomavar*[{\Ifstr}]{<Variable 1>}}]%
{<Variable 2>}%
{<Tokens wenn Bezeichnungen gleich sind>}%
{<Tokens wenn Bezeichnungen ungleich sind>}%
Wenn du beides vergleichen möchtest, kannst du das ineinander
verschachteln:
\usekomavar[{\usekomavar[{\Ifstr}]{<Variable 1>}}]
{<Variable 2>}%
{%
\usekomavar*[{\usekomavar*[{\Ifstr}]{<Variable 1>}}]%
{<Variable 2>}%
{\firstoftwo}%
{\secondoftwo}%
}%
{\secondoftwo}%
{<Tokens wenn Bezeichnungen und Werte gleich sind>}%
{<Tokens wenn nicht der Fall ist, dass Bezeichnungen und Werte gleich sind>}
, wobei \firstoftwo / \secondoftwo Hilfsmakros sind, die das
erste bzw zweite von zwei Makroargumenten ausspucken.
Beachte, dass ich die Angewohnheit habe, optionale Argumente immer
komplett in geschweifte Klammern einzuschachteln.
Diese geschweiften Klammen werden von TeX "abgestreift", verhindern
aber beim Ineinanderverschachteln von optionalen Argumente Probleme
beim Zuordnen von öffnenden rechteckigen Klammern zu schließenden e
rechtckigen Klammern.
Mit freundlichem Gruß
Ulrich
Ein Beispiel könnte so aussehen:
\documentclass{scrlttr2}
%================================================
% Hilfsmakros:
%------------------------------------------------
\newcommand\firstoftwo[2]{#1}%
\newcommand\secondoftwo[2]{#2}%
%================================================
% Deklaration und Initialisierung der Variablen:
%------------------------------------------------
\newkomavar[Elefant 1]{Erstes Wesen}%
\setkomavar{Erstes Wesen}{Dumbo}%
%------------------------------------------------
\newkomavar[Elefant 2]{Zweites Wesen}%
\setkomavar{Zweites Wesen}{Babar}%
%------------------------------------------------
\newkomavar[Elefant 1]{Drittes Wesen}%
\setkomavar{Drittes Wesen}{Dumbo}%
%------------------------------------------------
\newkomavar[Elefant 1a]{Viertes Wesen}%
\setkomavar{Viertes Wesen}{Dumbo}%
%------------------------------------------------
\newkomavar[Elefant 1]{Fuenftes Wesen}%
\setkomavar{Fuenftes Wesen}{Benjamin Bluemchen}%
%------------------------------------------------
\parskip=\baselineskip
\parindent=0ex
\begin{document}
\textbf{Test 1}
Die Variable ``Erstes Wesen'' hat den Wert ``\usekomavar{Erstes Wesen}''.
Die Variable ``Erstes Wesen''
\usekomavar[{\Ifstr}]{Erstes Wesen}{Dumbo}{hat }{hat nicht }%
den Wert ``Dumbo''.
\bigskip
\textbf{Test 2}
Die Variable ``Erstes Wesen'' hat die Bezeichnung ``\usekomavar*{Erstes Wesen}''.
Die Variable ``Erstes Wesen''
\usekomavar*[{\Ifstr}]{Erstes Wesen}{Elefant 1}{hat }{hat nicht }%
die Bezeichnung ``Elefant 1''.
\bigskip
\textbf{Test 3}
Die Variable ``Erstes Wesen'' hat den Wert ``\usekomavar{Erstes Wesen}''.
Die Variable ``Erstes Wesen''
\usekomavar[{\Ifstr}]{Erstes Wesen}{Benjamin Bluemchen}{hat }{hat nicht }%
den Wert ``Benjamin Bluemchen''.
\bigskip
\textbf{Test 4}
Die Variable ``Erstes Wesen'' hat die Bezeichung ``\usekomavar*{Erstes Wesen}''.
Die Variable ``Erstes Wesen''
\usekomavar*[{\Ifstr}]{Erstes Wesen}{Nilpferd 1}{hat }{hat nicht }%
die Bezeichnung ``Nilpferd 1''.
%------------------------------------------------------------------------
\bigskip
\textbf{Test 5}
Die Variable ``Erstes Wesen'' hat den Wert ``\usekomavar{Erstes Wesen}''.\\
Die Variable ``Zweites Wesen'' hat den Wert ``\usekomavar{Zweites Wesen}''.
Die Werte der Variablen ``Erstes Wesen'' und ``Zweites Wesen'' sind
\usekomavar[{\usekomavar[{\Ifstr}]{Erstes Wesen}}]{Zweites Wesen}{gleich}{ungleich}.
\bigskip
\textbf{Test 6}
Die Variable ``Erstes Wesen'' hat die Bezeichnung ``\usekomavar*{Erstes Wesen}''.\\
Die Variable ``Zweites Wesen'' hat die Bezeichnung ``\usekomavar*{Zweites Wesen}''.
Die Bezeichnungen der Variablen ``Erstes Wesen'' und ``Zweites Wesen'' sind
\usekomavar*[{\usekomavar*[{\Ifstr}]{Erstes Wesen}}]{Zweites Wesen}{gleich}{ungleich}.
\bigskip
\textbf{Test 7}
Die Variable ``Erstes Wesen'' hat den Wert ``\usekomavar{Erstes Wesen}''.\\
Die Variable ``Zweites Wesen'' hat den Wert ``\usekomavar{Zweites Wesen}''.\\
Die Variable ``Erstes Wesen'' hat die Bezeichnung ``\usekomavar*{Erstes Wesen}''.\\
Die Variable ``Zweites Wesen'' hat die Bezeichnung ``\usekomavar*{Zweites Wesen}''.
Die Werte und die Bezeichnungen der Variablen ``Erstes Wesen'' und ``Zweites Wesen'' sind
\usekomavar[{\usekomavar[{\Ifstr}]{Erstes Wesen}}]{Zweites Wesen}%
{%
\usekomavar*[{\usekomavar*[{\Ifstr}]{Erstes Wesen}}]{Zweites Wesen}%
{\firstoftwo}{\secondoftwo}%
}%
{\secondoftwo}%
{beide gleich}{nicht beide gleich}.%
%------------------------------------------------------------------------
\bigskip
\textbf{Test 8}
Die Variable ``Erstes Wesen'' hat den Wert ``\usekomavar{Erstes Wesen}''.\\
Die Variable ``Drittes Wesen'' hat den Wert ``\usekomavar{Drittes Wesen}''.
Die Werte der Variablen ``Erstes Wesen'' und ``Drittes Wesen'' sind
\usekomavar[{\usekomavar[{\Ifstr}]{Erstes Wesen}}]{Drittes Wesen}{gleich}{ungleich}.
\bigskip
\textbf{Test 9}
Die Variable ``Erstes Wesen'' hat die Bezeichnung ``\usekomavar*{Erstes Wesen}''.\\
Die Variable ``Drittes Wesen'' hat die Bezeichnung ``\usekomavar*{Drittes Wesen}''.
Die Bezeichnungen der Variablen ``Erstes Wesen'' und ``Drittes Wesen'' sind
\usekomavar*[{\usekomavar*[{\Ifstr}]{Erstes Wesen}}]{Drittes Wesen}{gleich}{ungleich}.
\bigskip
\textbf{Test 10}
Die Variable ``Erstes Wesen'' hat den Wert ``\usekomavar{Erstes Wesen}''.\\
Die Variable ``Drittes Wesen'' hat den Wert ``\usekomavar{Drittes Wesen}''.\\
Die Variable ``Erstes Wesen'' hat die Bezeichnung ``\usekomavar*{Erstes Wesen}''.\\
Die Variable ``Drittes Wesen'' hat die Bezeichnung ``\usekomavar*{Drittes Wesen}''.
Die Werte und die Bezeichnungen der Variablen ``Erstes Wesen'' und ``Drittes Wesen'' sind
\usekomavar[{\usekomavar[{\Ifstr}]{Erstes Wesen}}]{Drittes Wesen}%
{%
\usekomavar*[{\usekomavar*[{\Ifstr}]{Erstes Wesen}}]{Drittes Wesen}%
{\firstoftwo}{\secondoftwo}%
}%
{\secondoftwo}%
{beide gleich}{nicht beide gleich}.%
%------------------------------------------------------------------------
\bigskip
\textbf{Test 11}
Die Variable ``Erstes Wesen'' hat den Wert ``\usekomavar{Erstes Wesen}''.\\
Die Variable ``Viertes Wesen'' hat den Wert ``\usekomavar{Viertes Wesen}''.
Die Werte der Variablen ``Erstes Wesen'' und ``Viertes Wesen'' sind
\usekomavar[{\usekomavar[{\Ifstr}]{Erstes Wesen}}]{Viertes Wesen}{gleich}{ungleich}.
\bigskip
\textbf{Test 12}
Die Variable ``Erstes Wesen'' hat die Bezeichnung ``\usekomavar*{Erstes Wesen}''.\\
Die Variable ``Viertes Wesen'' hat die Bezeichnung ``\usekomavar*{Viertes Wesen}''.
Die Bezeichnungen der Variablen ``Erstes Wesen'' und ``Viertes Wesen'' sind
\usekomavar*[{\usekomavar*[{\Ifstr}]{Erstes Wesen}}]{Viertes Wesen}{gleich}{ungleich}.
\bigskip
\textbf{Test 13}
Die Variable ``Erstes Wesen'' hat den Wert ``\usekomavar{Erstes Wesen}''.\\
Die Variable ``Viertes Wesen'' hat den Wert ``\usekomavar{Viertes Wesen}''.\\
Die Variable ``Erstes Wesen'' hat die Bezeichnung ``\usekomavar*{Erstes Wesen}''.\\
Die Variable ``Viertes Wesen'' hat die Bezeichnung ``\usekomavar*{Viertes Wesen}''.
Die Werte und die Bezeichnungen der Variablen ``Erstes Wesen'' und ``Viertes Wesen'' sind
\usekomavar[{\usekomavar[{\Ifstr}]{Erstes Wesen}}]{Viertes Wesen}%
{%
\usekomavar*[{\usekomavar*[{\Ifstr}]{Erstes Wesen}}]{Viertes Wesen}%
{\firstoftwo}{\secondoftwo}%
}%
{\secondoftwo}%
{beide gleich}{nicht beide gleich}.%
%------------------------------------------------------------------------
\bigskip
\textbf{Test 14}
Die Variable ``Erstes Wesen'' hat den Wert ``\usekomavar{Erstes Wesen}''.\\
Die Variable ``Fuenftes Wesen'' hat den Wert ``\usekomavar{Fuenftes Wesen}''.
Die Werte der Variablen ``Erstes Wesen'' und ``Fuenftes Wesen'' sind
\usekomavar[{\usekomavar[{\Ifstr}]{Erstes Wesen}}]{Fuenftes Wesen}{gleich}{ungleich}.
\bigskip
\textbf{Test 15}
Die Variable ``Erstes Wesen'' hat die Bezeichnung ``\usekomavar*{Erstes Wesen}''.\\
Die Variable ``Fuenftes Wesen'' hat die Bezeichnung ``\usekomavar*{Fuenftes Wesen}''.
Die Bezeichnungen der Variablen ``Erstes Wesen'' und ``Fuenftes Wesen'' sind
\usekomavar*[{\usekomavar*[{\Ifstr}]{Erstes Wesen}}]{Fuenftes Wesen}{gleich}{ungleich}.
\bigskip
\textbf{Test 16}
Die Variable ``Erstes Wesen'' hat den Wert ``\usekomavar{Erstes Wesen}''.\\
Die Variable ``Fuenftes Wesen'' hat den Wert ``\usekomavar{Fuenftes Wesen}''.\\
Die Variable ``Erstes Wesen'' hat die Bezeichnung ``\usekomavar*{Erstes Wesen}''.\\
Die Variable ``Fuenftes Wesen'' hat die Bezeichnung ``\usekomavar*{Fuenftes Wesen}''.
Die Werte und die Bezeichnungen der Variablen ``Erstes Wesen'' und ``Fuenftes Wesen'' sind
\usekomavar[{\usekomavar[{\Ifstr}]{Erstes Wesen}}]{Fuenftes Wesen}%
{%
\usekomavar*[{\usekomavar*[{\Ifstr}]{Erstes Wesen}}]{Fuenftes Wesen}%
{\firstoftwo}{\secondoftwo}%
}%
{\secondoftwo}%
{beide gleich}{nicht beide gleich}.%
\end{document}