Discussion:
Wie vergleiche ich Strings in KOMA-Variablen ?
(zu alt für eine Antwort)
Andreas Horn
2023-05-21 18:01:40 UTC
Permalink
Hallo Allerseits,

ich sitze nun schon den ganzen Nachmittag dran und weiß wieder mal nicht
weiter. Ich 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.

LG
Andreas

(fast) Minimalbeispiel:

\documentclass[version=last,]{scrlttr2}
\KOMAoption{parskip}{full}
\usepackage{ifthen}

% funktioniert auch bei Erstellung im Vorspann nicht
%\newkomavar{atest}
%\setkomavar{atest}{Text 1}
\begin{document}

% hier gehts nicht:
\newkomavar{atest}
\setkomavar{atest}{Text 1}
\ifthenelse{\equal{Text 1}{\usekomavar{atest}}}
{"Text 1"\;ist mit komavar gleich "\usekomavar{atest}"}
{"Text 1"\;ist mit komavar ungleich "\usekomavar{atest}"}

% hier gehts:
\newcommand{\btest}{Text 2}
\ifthenelse{\equal{Text 2}{\btest}}
{"Text 2"\;ist mit newcommand gleich "\btest"}
{"Text 2"\;ist mit newcommand ungleich "\btest"}
\end{document}

liefert:

”Text 1” ist mit komavar ungleich ”Text 1”
”Text 2” ist mit newcommand gleich ”Text 2”
Ulrike Fischer
2023-05-22 08:12:30 UTC
Permalink
Post by Andreas Horn
Hallo Allerseits,
ich sitze nun schon den ganzen Nachmittag dran und weiß wieder mal nicht
weiter. Ich 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.
\ifthenelse{\equal{Text 1}{\UseName{***@atest@var}}}
{}{}
--
Ulrike Fischer
http://www.troubleshooting-tex.de/
Ulrich D i e z
2023-05-22 10:48:07 UTC
Permalink
Post by Andreas Horn
Ich 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}
Ulrich D i e z
2023-05-22 11:41:06 UTC
Permalink
Post by Ulrich D i e z
----------------------------------------------------------------------
- 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.
Korrektur:

----------------------------------------------------------------------

- Im Kapitel "Kapitel 4: Briefe mit Klasse scrlttr2 oder Paket
scrletter" der Abschnitt "4.5. Variablen".

Dort steht unter anderem,
+ dass 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 wird hier als
Inhalt bezeichnet, weil es sich bei TeX ja immer um Token handelt,
die dem Token-Stream hinzugefügt werden.
+ dass 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.


Mit freundlichem Gruß

Ulrich
Andreas Horn
2023-05-24 17:06:42 UTC
Permalink
Lieber Ulrich,

deinen Beispielcode habe ich mir angesehen und bisher genau die Sachen
verstanden, die nicht verschachtelt sind. Ich habe mir erlaubt, die
Reihenfolge der Tests thematisch zu sortieren

1, 3, 2, 4, 8=11, 5=14, 9=15,6=12, 10, 7, 13, 16

und festgestellt, dass einige davon in ihrer Aussage redundant sind.
Weiterhin habe ich die jeweiligen Inhalte von Bezeichnung, Name und Wert
sprechend gemacht.

Dein Beispielcode war ja eine kleine Lehrveranstaltung und für mich sehr
hilfreich. Bei den Verschachtelungen muss ich noch verstehen, was die
Hilfsmakros machen.

Danke nochmals und LG
Andreas

% !TeX program = lualatex
% !TeX encoding = UTF-8 Unicode
%% Dieser Quelltext ist in der Kodierung UTF-8 zu speichern und mit
%% lualatex zu kompilieren.

\documentclass{scrlttr2}
\usepackage{xcolor}
%================================================
% Hilfsmakros:
%------------------------------------------------
\newcommand\firstoftwo[2]{#1}%
\newcommand\secondoftwo[2]{#2}%

%================================================
% Deklaration und Initialisierung der Variablen:
%\setkomavar{Name}[Bezeichnung]{Inhalt}
%------------------------------------------------
\newkomavar{VarName 1}%
\setkomavar{VarName 1}[Bezeichnung 1]{Wert 1-3-4}%
%------------------------------------------------
\newkomavar[Bezeichnung 2]{VarName 2}%
\setkomavar{VarName 2}{Wert 2}%
%------------------------------------------------
\newkomavar[Bezeichnung 1]{VarName 3}%
\setkomavar{VarName 3}{Wert 1-3-4}%
%------------------------------------------------
\newkomavar[Bezeichnung 1a]{VarName 4}%
\setkomavar{VarName 4}{Wert 1-3-4}%
%------------------------------------------------
\newkomavar[Bezeichnung 1]{VarName 5}%
\setkomavar{VarName 5}{Wert 5}%
%------------------------------------------------

%\parskip=\baselineskip
%\parindent=0ex
\usepackage{parskip}[full]

\begin{document}

\textbf{Test 1: Wert mit String vergleichen (gleich)}

Die Variable ``VarName 1'' hat den
Wert ``\usekomavar{VarName 1}''.\\
Der Vergleichsstring
ist ``Wert 1-3-4''.

Die Variable ``VarName 1''
\usekomavar[{\Ifstr}]{VarName 1}{Wert 1-3-4}%
{hat }{hat nicht }%
den Wert ``Wert 1-3-4''.

\bigskip

\textbf{Test 3: Wert mit String vergleichen (ungleich)}

Die Variable ``VarName 1'' hat den
Wert ``\usekomavar{VarName 1}''.\\
Der Vergleichsstring ist ``Wert 5''.

Die Variable ``VarName 1''
\usekomavar[{\Ifstr}]{VarName 1}{Wert 5}%
{hat }{hat nicht }%
den Wert ``Wert 5''.

\bigskip

\textbf{Test 2: Bezeichnung mit String vergleichen (gleich)}

Die Variable ``VarName 1'' hat die
Bezeichnung ``\usekomavar*{VarName 1}''.\\
Der Vergleichsstring ist ``Bezeichnung 1''.

Die Variable ``VarName 1''
\usekomavar*[{\Ifstr}]{VarName 1}{Bezeichnung 1}%
{hat }{hat nicht }%
die Bezeichnung ``Bezeichnung 1''.

\bigskip

\textbf{Test 4: Bezeichnung mit String vergleichen (ungleich)}

Die Variable ``VarName 1'' hat die
Bezeichung ``\usekomavar*{VarName 1}''.\\
Der Vergleichsstring ist ``Nilpferd 1''.

Die Variable ``VarName 1''
\usekomavar*[{\Ifstr}]{VarName 1}{Nilpferd 1}%
{hat }{hat nicht }%
die Bezeichnung ``Nilpferd 1''.

\newpage

\textbf{Test 8: Werte vergleichen (gleich)} (siehe Test 11)

Die Variable ``VarName 1'' hat den Wert ``\usekomavar{VarName 1}''.\\
Die Variable ``VarName 3'' hat den Wert ``\usekomavar{VarName 3}''.

Die Werte der Variablen ``VarName 1'' und ``VarName 3'' sind
\usekomavar[{\usekomavar[{\Ifstr}]{VarName 1}}]{VarName 3}%
{gleich}{ungleich}.

\bigskip

\textbf{Test 11: Werte vergleichen (gleich)} (siehe Test 8)

Die Variable ``VarName 1'' hat den Wert ``\usekomavar{VarName 1}''.\\
Die Variable ``VarName 4'' hat den Wert ``\usekomavar{VarName 4}''.

Die Werte der Variablen ``VarName 1'' und ``VarName 4'' sind
\usekomavar[{\usekomavar[{\Ifstr}]{VarName 1}}]{VarName 4}%
{gleich}{ungleich}.

\bigskip

\textbf{Test 5: Werte vergleichen (ungleich)} (siehe Test 14)

Die Variable ``VarName 1'' hat den Wert ``\usekomavar{VarName 1}''.\\
Die Variable ``VarName 2'' hat den Wert ``\usekomavar{VarName 2}''.

Die Werte der Variablen ``VarName 1'' und ``VarName 2'' sind
\usekomavar[{\usekomavar[{\Ifstr}]{VarName 1}}]{VarName 2}%
{gleich}{ungleich}.

\bigskip

\textbf{Test 14: Werte vergleichen (ungleich)} (siehe Test 5)

Die Variable ``VarName 1'' hat den Wert ``\usekomavar{VarName 1}''.\\
Die Variable ``VarName 5'' hat den Wert ``\usekomavar{VarName 5}''.

Die Werte der Variablen ``VarName 1'' und ``VarName 5'' sind
\usekomavar[{\usekomavar[{\Ifstr}]{VarName 1}}]{VarName 5}%
{gleich}{ungleich}.

\newpage

\textbf{Test 9: Bezeichnungen vergleichen (gleich)} (siehe Test 15)

Die Variable ``VarName 1'' hat die
Bezeichnung ``\usekomavar*{VarName 1}''.\\
Die Variable ``VarName 3'' hat die
Bezeichnung ``\usekomavar*{VarName 3}''.

Die Bezeichnungen der Variablen ``VarName 1'' und ``VarName 3'' sind
\usekomavar*[{\usekomavar*[{\Ifstr}]{VarName 1}}]{VarName 3}%
{gleich}{ungleich}.

\bigskip

\textbf{Test 15: Bezeichnungen vergleichen (gleich)} (siehe Test 9)

Die Variable ``VarName 1'' hat die
Bezeichnung ``\usekomavar*{VarName 1}''.\\
Die Variable ``VarName 5'' hat die
Bezeichnung ``\usekomavar*{VarName 5}''.

Die Bezeichnungen der Variablen ``VarName 1'' und ``VarName 5'' sind
\usekomavar*[{\usekomavar*[{\Ifstr}]{VarName 1}}]{VarName 5}%
{gleich}{ungleich}.

\bigskip

\textbf{Test 6: Bezeichnungen vergleichen (ungleich)} (siehe Test 12)

Die Variable ``VarName 1'' hat die
Bezeichnung ``\usekomavar*{VarName 1}''.\\
Die Variable ``VarName 2'' hat die
Bezeichnung ``\usekomavar*{VarName 2}''.

Die Bezeichnungen der Variablen ``VarName 1'' und ``VarName 2'' sind
\usekomavar*[{\usekomavar*[{\Ifstr}]{VarName 1}}]{VarName 2}%
{gleich}{ungleich}.

\bigskip

\textbf{Test 12: Bezeichnungen vergleichen (ungleich)} (siehe Test 6)

Die Variable ``VarName 1'' hat die
Bezeichnung ``\usekomavar*{VarName 1}''.\\
Die Variable ``VarName 4'' hat die
Bezeichnung ``\usekomavar*{VarName 4}''.

Die Bezeichnungen der Variablen ``VarName 1'' und ``VarName 4'' sind
\usekomavar*[{\usekomavar*[{\Ifstr}]{VarName 1}}]{VarName 4}%
{gleich}{ungleich}.

\newpage

\textbf{Test 10: Werte und Bezeichnungen vergleichen} (gleich)
\textcolor{red}{mir noch unklar}

Die Variable ``VarName 1'' hat den Wert ``\usekomavar{VarName 1}''.\\
Die Variable ``VarName 3'' hat den Wert ``\usekomavar{VarName 3}''.\\
Die Variable ``VarName 1'' hat die
Bezeichnung ``\usekomavar*{VarName 1}''.\\
Die Variable ``VarName 3'' hat die
Bezeichnung ``\usekomavar*{VarName 3}''.

Die Werte und die Bezeichnungen der
Variablen ``VarName 1'' und ``VarName 3'' sind
\usekomavar[{\usekomavar[{\Ifstr}]{VarName 1}}]{VarName 3}%
{%
\usekomavar*[{\usekomavar*[{\Ifstr}]{VarName 1}}]{VarName 3}%
{\firstoftwo}{\secondoftwo}%
}%
{\secondoftwo}%
{beide gleich}{nicht beide gleich}.%

\bigskip

\textbf{Test 7: Werte und Bezeichnungen vergleichen} (ungleich)
\textcolor{red}{mir noch unklar}

Die Variable ``VarName 1'' hat den Wert ``\usekomavar{VarName 1}''.\\
Die Variable ``VarName 2'' hat den Wert ``\usekomavar{VarName 2}''.\\
Die Variable ``VarName 1'' hat die
Bezeichnung ``\usekomavar*{VarName 1}''.\\
Die Variable ``VarName 2'' hat die
Bezeichnung ``\usekomavar*{VarName 2}''.

Die Werte und die Bezeichnungen der
Variablen ``VarName 1'' und ``VarName 2'' sind
\usekomavar[{\usekomavar[{\Ifstr}]{VarName 1}}]{VarName 2}%
{%
\usekomavar*[{\usekomavar*[{\Ifstr}]{VarName 1}}]{VarName 2}%
{\firstoftwo}{\secondoftwo}%
}%
{\secondoftwo}%
{beide gleich}{nicht beide gleich}.%

\bigskip

\textbf{Test 13: Werte und Bezeichnungen vergleichen} (ungleich)
\textcolor{red}{mir noch unklar}

Die Variable ``VarName 1'' hat den Wert ``\usekomavar{VarName 1}''.\\
Die Variable ``VarName 4'' hat den Wert ``\usekomavar{VarName 4}''.\\
Die Variable ``VarName 1'' hat die
Bezeichnung ``\usekomavar*{VarName 1}''.\\
Die Variable ``VarName 4'' hat die
Bezeichnung ``\usekomavar*{VarName 4}''.

Die Werte und die Bezeichnungen der
Variablen ``VarName 1'' und ``VarName 4'' sind
\usekomavar[{\usekomavar[{\Ifstr}]{VarName 1}}]{VarName 4}%
{%
\usekomavar*[{\usekomavar*[{\Ifstr}]{VarName 1}}]{VarName 4}%
{\firstoftwo}{\secondoftwo}%
}%
{\secondoftwo}%
{beide gleich}{nicht beide gleich}.%

\bigskip

\textbf{Test 16: Werte und Bezeichnungen vergleichen} (ungleich)
\textcolor{red}{mir noch unklar}

Die Variable ``VarName 1'' hat den
Wert ``\usekomavar{VarName 1}''.\\
Die Variable ``VarName 5'' hat den
Wert ``\usekomavar{VarName 5}''.\\
Die Variable ``VarName 1'' hat die
Bezeichnung ``\usekomavar*{VarName 1}''.\\
Die Variable ``VarName 5'' hat die
Bezeichnung ``\usekomavar*{VarName 5}''.

Die Werte und die Bezeichnungen der
Variablen ``VarName 1'' und ``VarName 5'' sind
\usekomavar[{\usekomavar[{\Ifstr}]{VarName 1}}]{VarName 5}%
{%
\usekomavar*[{\usekomavar*[{\Ifstr}]{VarName 1}}]{VarName 5}%
{\firstoftwo}{\secondoftwo}%
}%
{\secondoftwo}%
{beide gleich}{nicht beide gleich}.%

\end{document}
Ulrich D i e z
2023-05-25 16:14:57 UTC
Permalink
Post by Andreas Horn
Lieber Ulrich,
deinen Beispielcode habe ich mir angesehen und bisher genau die Sachen
verstanden, die nicht verschachtelt sind. Ich habe mir erlaubt, die
Reihenfolge der Tests thematisch zu sortieren
1, 3, 2, 4, 8=11, 5=14, 9=15,6=12, 10, 7, 13, 16
und festgestellt, dass einige davon in ihrer Aussage redundant sind.
Weiterhin habe ich die jeweiligen Inhalte von Bezeichnung, Name und Wert
sprechend gemacht.
Dein Beispielcode war ja eine kleine Lehrveranstaltung und für mich sehr
hilfreich. Bei den Verschachtelungen muss ich noch verstehen, was die
Hilfsmakros machen.
Danke nochmals und LG
Andreas
Tut mir leid, dass du nicht alles verstanden hast.

Wenn jemand dazukommt, den man - mit "man" meine ich natürlich mich
selbst ;-) - noch nicht kennt, weiß man nicht, auf welchem Kenntnisstand
man ihn abholen kann.

Von daher, frag nur immer - dann weiß man mit der Zeit auch, auf welchem
Level man Erklärungen ansetzen sollte.
Und scheue dich im Zweifelsfall nicht, darzulegen, was du meinst, wie die
Dinge funktionieren/ineinandergreifen. Dann kann man ggfs Mißverständnisse
am besten ausräumen.

Die Hilfsmakros?

\firstoftwo{<Die Token des ersten Arguments>}{<Die Token des zweiten Arguments>}
ergibt: <Die Token des ersten Arguments>

\secondoftwo{<Die Token des ersten Arguments>}{<Die Token des zweiten Arguments>}
ergibt: <Die Token des zweiten Arguments>

\firstoftwo holt also die Token für zwei direkt aufeinander folgende
Makroargumente aus dem Token-Stream und gibt als Ersetzungstext nur
die Token des ersten Makroarguments an den Token-Stream zurück, währennd
die Token des zweiten Makroarguments im Datennirvana landen. ;-)

\secondoftwo holt also die Token für zwei direkt aufeinander folgende
Makroargumente aus dem Token-Stream und gibt als Ersetzungstext nur
die Token des zweiten Makroarguments an den Token-Stream zurück, währennd
die Token des ersten Makroarguments im Datennirvana landen. ;-)



Bei den verschachtelten Tests ist es so:

Wenn die Werte der Variablen nicht glech sind, ist man fertig, denn dann
weiß man, dass bei den betrachteten beiden Variablen nicht der Fall ist,
dass sowohl die Werte einander gleichen als auch die Bezeichnungen
einander gleichen.

Wenn die Werte der Variablen glech sind, ist man nicht fertig, sondern
muss noch prüfen, ob die Bezeichnungen gleich sind.

Man könnte es so machen:

Die Werte und die Bezeichnungen der
Variablen ``VarName 1'' und ``VarName 5'' sind
\usekomavar[{\usekomavar[{\Ifstr}]{VarName 1}}]{VarName 5}%
{%
% Die Werte sind gleich, also werden auch noch die Bezeichnungen
% verglichen:
\usekomavar*[{\usekomavar*[{\Ifstr}]{VarName 1}}]{VarName 5}%
{%
% Die Bezeichnungen sind auch gleich, also:
beide gleich%
}%
{%
% Die Werte sind zwar gleich, aber die Bezeichnungen sind nicht gleich, also:
nicht beide gleich%
}%
}%
{%
% Die Werte sind nicht gleich, also:
nicht beide gleich%
}.%


Da steht aber das, was getan werden soll, wenn nicht der Fall ist, dass
sowohl die Werte einander gleichen als auch die Bezeichnungen einander
gleichen, also die Phrase "nicht beide gleich", zweimal da.

Wenn da statt dieser kurzen Phrase viel dastehen würde, würde man das
vielleicht nicht zweimal dastehen haben wollen, weil das ja zeitweise
Speicher belegt.

Darum ist ein beliebter Trick, da stattdessen Anweisungen hinzusetzen, das
erste bzw das zweite von zwei direkt aufeinander folgenden Makroargumenten
auszuspucken und die Anweisungen für das, was im jeweiligen Fall getan
werden soll, als zwei Makroargumente hinten dran zu pappen, denn für die
Anweisung, das erste bzw zweite von zwei Makroargumenten auszuspucken
brauchts nur ein einziiges Token, nämlich das Token \firstoftwo bzw
\secondoftwo :


Die Werte und die Bezeichnungen der
Variablen ``VarName 1'' und ``VarName 5'' sind
\usekomavar[{\usekomavar[{\Ifstr}]{VarName 1}}]{VarName 5}%
{%
% Die Werte sind gleich, also werden auch noch die Bezeichnungen
% verglichen:
\usekomavar*[{\usekomavar*[{\Ifstr}]{VarName 1}}]{VarName 5}%
{%
% Die Bezeichner sind auch gleich, also spucke das erste von zwei
% hintereinander stehenden Makroargumenten aus:
\firstoftwo
}%
{%
% Die Werte sind zwar gleich, aber die Bezeichner sind nicht gleich, also
% spucke das zweite von zwei hintereinander stehenden Makroargumenten aus:
\secondoftwo
}%
}%
{%
% Die Werte sind nicht gleich, also spucke das zweite von zwei hintereinander
% stehenden Makroargumenten aus:
\secondoftwo
}%
{beide gleich}{nicht beide gleich}.% <-Das sind die beiden Makroargumente, von denen nur eins ausgespuckt werden soll.


Mit freundlichem Gruß

Ulrich
Andreas Horn
2023-05-22 17:39:15 UTC
Permalink
Liebe Ulrike, lieber Ulrich,

das Beispiel von Ulrike funktioniert prima, ich weiß aber nicht, wie ich
auf diesen Code hätte kommen sollen:

\newkomavar{aaa}
\setkomavar{aaa}{Text 1}
\newkomavar{bbb}
\setkomavar{bbb}{Text 1}
%\ifthenelse{\equal{Text 1}{\UseName{***@aaa@var}}}
\ifthenelse{\equal{\UseName{***@bbb@var}}{\UseName{***@aaa@var}}}
{gleich}{unglich}

Die ganz vielen Beispiele von Ulrich muss ich mir noch ansehen, aber
auch da habe ich nur ganz rudimentäre Ahnung und wie ich auf so was wie
das hier

\usekomavar[\usekomavar[\Ifstr]{aaa}]{bbb}
{gleich}{ungleich}

hätte kommen sollen, funktioniert auch bestens.

Danke auch für den Hinweis mit den geschweiften Klammern bei optionalen
Parametern, ist zum Entlausen auf jeden Fall sehr nützlich.

Na ja, Meister fallen höchstens vom Dach, nicht vom Himmel.
Muss ich eben noch viel durchackern.

Bis jetzt erst mal ein ganz großes

DANKESCHÖN

an euch beide und

LG
Andreas
Ulrich D i e z
2023-05-22 19:41:26 UTC
Permalink
Post by Andreas Horn
Die ganz vielen Beispiele von Ulrich muss ich mir noch ansehen, aber
auch da habe ich nur ganz rudimentäre Ahnung und wie ich auf so was wie
das hier
\usekomavar[\usekomavar[\Ifstr]{aaa}]{bbb}
{gleich}{ungleich}
hätte kommen sollen, funktioniert auch bestens.
Das muss sicherheitshalber so:

\usekomavar[{\usekomavar[{\Ifstr}]{aaa}}]{bbb}
{gleich}{ungleich}

Bei Befehlen, die auf die altmodische \newcommand-Art
definiert sind, geht ein optionales Argument nämlich
immer von der ersten nicht in geschweiften Klammern
eingefassten öffnenden rechteckigen Klammer bis zur ersten
nicht in geschweiften Klammern eingefassten schliessenden
rechteckigen Klammer. Da werden nicht groß öffnende und
schließende rechteckige Klammern gematcht.

Wenn also \usekomavar auf die altmodische \newcommand-Art
definiert w#re, dann würde das optionale Argument des
äußeren \usekomavar ohne geschweifte Klammern aus den Token
"\usekomavar[\Ifstr" bestehen und das "{aaa}" würde für das
Variablennamenargument des äußeren \usekomavar gehalten
werden, und ... es gäbe Probleme.
Post by Andreas Horn
Danke auch für den Hinweis mit den geschweiften Klammern bei optionalen
Parametern, ist zum Entlausen auf jeden Fall sehr nützlich.
Nicht nur zum Entlausen, sondern wenn optionale Argumente von
Befehlen, die mit \newcommand definiert sind, ineinander
verschachtelt werden sollen, auch zwingend notwendig, um das
richtige Matchuing von öffnenden rechteckigen Klammern
und schliessenden rechteckigen Klammern sicherzustellen.

Mit freundlichem Gruß

Ulrich
Ulrich D i e z
2023-05-22 20:10:37 UTC
Permalink
Post by Andreas Horn
Liebe Ulrike, lieber Ulrich,
das Beispiel von Ulrike funktioniert prima, ich weiß aber nicht, wie ich
\newkomavar{aaa}
\setkomavar{aaa}{Text 1}
\newkomavar{bbb}
\setkomavar{bbb}{Text 1}
{gleich}{unglich}
Die ganz vielen Beispiele von Ulrich muss ich mir noch ansehen, aber
auch da habe ich nur ganz rudimentäre Ahnung und wie ich auf so was wie
das hier
\usekomavar[\usekomavar[\Ifstr]{aaa}]{bbb}
{gleich}{ungleich}
hätte kommen sollen, funktioniert auch bestens.
Um auf so etwas zu kommen, muss man beim Lesen der Anleitung extrem
wortklauberisch sein. ;-)

In der Anleitung steht, dass das optionale Argument, hinter das der
Variablenwert - eingeschachtelt in geschweiften Klammern - als
Makroargument hingeknallt wird, eine "Anweisung" sei. Da steht
nicht dabei, dass die Anweisung nur aus einem Makrotoken bestehen
dürfe. Also dachte ich mir halt, die Anweisung im optionalen
Argument kann vielleicht auch aus mehreren Token, nämlich den Token
\usekomavar[\Ifstr]{aaa} , bestehen.

Dann wird

\usekomavar[{\usekomavar[\Ifstr]{aaa}}]{bbb}%
{gleich}{ungleich}

nämlich zu

\usekomavar[\Ifstr]{aaa}{<Wert der Variablen bbb>}%
{gleich}{ungleich}

, und das wird zu

\Ifstr{<Wert der Variablen aaa>}{<Wert der Variablen bbb>}%
{gleich}{ungleich}

.
Post by Andreas Horn
Na ja, Meister fallen höchstens vom Dach, nicht vom Himmel.
Muss ich eben noch viel durchackern.
Wenns Probleme gibt, die sich durch Recherche nicht lösen lassen,
nur immer munter nachfragen.

Für Leute, die funktionale, prozedurale und objektorientierte
Programmiersprachen gewohnt sind, stellt die
Umstellung auf das Programmierparadigma von (La)TeX schon
eine Lernkurve dar.

In TeX sind im Prinzip zwei Arten des Programmierens verwoben:

Zum einen Token- und Makroargument-basiertes Ersetzen während
Makros und andere expandierbare Kontrollsequenz-Token expandiert
werden bis nur noch Character und nicht-expandierbare Primitives
übrig bleiben.

Zum anderen das Ausführen der Primitives während der Text gesetzt
wird, was man vielleicht mit Prozedur- und Funktionsaufrufen
anderer Programmiersprachen vergleichen kann.

Mit freundlichem Gruß

Ulrich
Andreas Horn
2023-05-22 21:16:03 UTC
Permalink
Post by Ulrich D i e z
Für Leute, die funktionale, prozedurale und objektorientierte
Programmiersprachen gewohnt sind, stellt die
Umstellung auf das Programmierparadigma von (La)TeX schon
eine Lernkurve dar.
oh jaaaa- und zwar extrem steil

;-((
Ulrich D i e z
2023-05-25 18:01:54 UTC
Permalink
Post by Andreas Horn
Post by Ulrich D i e z
Für Leute, die funktionale, prozedurale und objektorientierte
Programmiersprachen gewohnt sind, stellt die
Umstellung auf das Programmierparadigma von (La)TeX schon
eine Lernkurve dar.
oh jaaaa- und zwar extrem steil
;-((
Nicht verzagen! ;-) Als ich anfing, hatte ich große Schwierigkeiten
und hin und wieder war ich ziemlich gefrustet.
Vielleicht weiß ich, wie es Dir beim Schreiben von Kummer-Smileys -
;-(( - geht. ;-)

Rückblickend denke ich, sagen zu können, dass meine größten Schwierig-
keiten daher rührten, dass ich anfangs das, was ich übers Programmieren
in Sprachen wie BASIC, Pascal, C und C++ wusste, auf TeX übertragen
wollte.
Und meinte, dabei dann schon - quasi nebenbei - zu lernen, wie man in
TeX programmiert.
Übertragen ist aber erst möglich, wenn man über die Konzepte
Bescheid weiß, auf denen das Programmieren in TeX beruht.

Als ich dazu überging, erstmal alle Terminologie, die ich von
anderweitigem Programmieren kannte, beiseite zu lassen und (La)TeX
zu lernen, indem ich das TeXbook durchackere und dabei in den
TeX-spezifischen Begriffen denke, die dort eingeführt werden, um
die Konzepte darzulegen, ging es - mit großer Unterstützung durch
die Regulars von comp.text.tex und de.comp.text.tex - aufwärts.

Die Hilfe brauchte ich unter anderem deshalb, weil im TeXbook
Information extrem komprimiert vermittelt wird, sodass man beim
Lesen wirklich auf jedes Wort achten und sich überlegen muss, was
es in dem Zusammenhang wirklich bedeutet und auf welches Stadium
des Ablaufes durch die Wortverwendung der Fokus gerichtet wird.
In diesem dicken Buch kommt es zB immer wieder vor, dass in
irgendeinem Kapitel irgendwo zwei Sätze stehen, über die man
leicht hinweg liest, die aber, wenn man sie sich kurz durch den
Kopf gehen lässt, fundamentale Konzepte erklären.
Das war ich nicht gewohnt. Als ich mal verinnerlicht hatte, dass
man beim Lesen sehr erbsenzählerisch sein muss, und das beim Lesen
dieses Buches übte, ging es plötzlich. ;-)

Mittlerweile habe ich den Eindruck, dass bei vielen Anfängern
die Schwierigkeiten vor allem davon herrühren, dass sie TeX bzw
LaTeX quasi als Nebeneffekt des Übertragens von Konzepten, die sie
von anderen Programmiersprachen kennen, in die TeX-Sprache, lernen
möchten, anstatt sich erst mit den grundlegenden Konzepten von TeX
(vor allem Tokenization und (Makro-)Expansion und Makro-Argumente
und die zu verschiedenen Zeitpunkten ablaufenden verschiedenen
Stadien der Verarbeitung) zu beschäftigen und sich dabei die von
Knuth eingeführte Terminologie anzueignen und erst dann, wenn sie
das Konzept des Ersetzens von Token verinnerlicht haben, mit dem
Übertragen anzufangen.

Mit freundlichem Gruß

Ulrich

Ulrike Fischer
2023-05-23 11:21:35 UTC
Permalink
Post by Andreas Horn
das Beispiel von Ulrike funktioniert prima, ich weiß aber nicht, wie ich
\newkomavar{aaa}
\setkomavar{aaa}{Text 1}
\newkomavar{bbb}
\setkomavar{bbb}{Text 1}
{gleich}{unglich}
Nun, genau so wie du es gemacht hast: Indem du eine Frage stellst.

Ich habe es rausgefunden, weil ich in scrlttr2.cls geschaut habe und
dort die Definition gefunden habe:

\DeclareRobustCommand*{\usekomavar}{%
\***@ifstar {\@usekomaname}{\@usekomavar}}

\newcommand*{\@usekomavar}[2][\@firstofone]{%
\@ifundefined{scr@#***@var}{%
\@***@err{use}{#2}%
}{%
#1{\@nameuse{scr@#***@var}}%
}%
}

was im Kern heißt, dass die KOMA-Variable aaa in der internen
Variable ***@aaa@var gespeichert ist. Die kann man mit
\@nameuse{***@aaa@var} benutzen, oder eben mit \UseName.
--
Ulrike Fischer
http://www.troubleshooting-tex.de/
Andreas Horn
2023-05-23 17:17:16 UTC
Permalink
Liebe Ulrike,
ich habe soeben in die Datei reingesehen, die Stellen ab Zeile 3075
gefunden - und nichts verstanden...
Post by Ulrike Fischer
Ich habe es rausgefunden, weil ich in scrlttr2.cls geschaut habe und
\DeclareRobustCommand*{\usekomavar}{%
}{%
}%
}
Da fehlt bei mir noch Einiges an Wissen und bis ich den jetzt
beschafften "Helmut Kopka" verstanden habe wird wohl noch viiiel Zeit
ins Land gehen. Ich bin ja schon froh, dass ein vernünftig angeordneter
Text aus meinem *.tex rauskommt...

Für deine Unterstützung möchte ich mich nochmals ganz herzlich bedanken
und komme bestimmt wieder darauf zurück.

LG nach Bonn
Andreas
Loading...