PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : \equal und \usekomavar



JVP
02-10-2006, 08:49
Hallo zusammen,

ich möchte den Inhalt einer Komavariable mit einer bestimmten Zeichenkette abgleichen. Je nach Ergebnis dieses Vergleichs soll dann ein Text angezeigt werden:



\documentclass{scrlttr2}
\usepackage{ifthen}
\setkomavar{toname}{abc}
\begin{document}
\begin{letter}
\ifthenelse{\equal{\usekomavar{toname}}{abc}}{true }{false}
\end{letter}
\end{document}


Eigentlich sollte im angegebenen Beispiel "true" erscheinen. Leider erscheint aber tatsächlich immer "false". Kann mir jemand sagen, was ich falsch mache?

JVP

rais
03-10-2006, 15:13
Hallo zusammen,

ich möchte den Inhalt einer Komavariable mit einer bestimmten Zeichenkette abgleichen. Je nach Ergebnis dieses Vergleichs soll dann ein Text angezeigt werden:



\documentclass{scrlttr2}
\usepackage{ifthen}
\setkomavar{toname}{abc}
\begin{document}
\begin{letter}
\ifthenelse{\equal{\usekomavar{toname}}{abc}}{true }{false}
\end{letter}
\end{document}


Eigentlich sollte im angegebenen Beispiel "true" erscheinen. Leider erscheint aber tatsächlich immer "false". Kann mir jemand sagen, was ich falsch mache?

JVP
Schau Dir mal im scrguide den Abschnitt über \usekomavar an, ins Besondere den Absatz über Expandierbarkeit.

Davon mal abgesehen: Macht \usekomavar denn das, was Du Dir davon versprichst? Wie sieht die Ausgabe von \usekomavar{toname} statt dem kompletten \ifthenelse-Ausdruck denn aus?
MfG,

JVP
04-10-2006, 10:48
Schau Dir mal im scrguide den Abschnitt über \usekomavar an, ins Besondere den Absatz über Expandierbarkeit.

Den Abschnitt habe ich mir schon mehrfach durchgelesen. Als Laie fällt es mir aber schwer, daraus konkrete Schlüsse zu ziehen. Oder anders ausgedrückt: Ich weiß nicht, was ich damit anfangen soll.


Davon mal abgesehen: Macht \usekomavar denn das, was Du Dir davon versprichst? Wie sieht die Ausgabe von \usekomavar{toname} statt dem kompletten \ifthenelse-Ausdruck denn aus?
MfG,

In meinem konkreten, umfangreicheren Anwendungsfall macht \usekomavar bisher immer das, was es soll. In dem Beispiel hier ist das leider nicht so, was mich noch mehr verwirrt. \usekomavar{toname} liefert im oberen Beispiel als Ergebnis "toname". Das ist mir leider auch nicht einsichtig. Wenn ich eine zweite Variable hinzunehme, funktioniert allerdings zumindest die Wertabfrage:


\documentclass{scrlttr2}
\usepackage{ifthen}
\setkomavar{toname}{abc}
\setkomavar{fromname}{def}
\begin{document}
\begin{letter}
\usekomavar{toname}\\
\usekomavar{fromname}\\
\ifthenelse{\equal{\usekomavar{fromname}}{def}}{tr ue}{false}
\end{letter}
\end{document}

Als Ergebnis bekomme ich hier drei Zeilen:
toname
def
false

Also wie gesagt, ich bin ziemlicher Laie und mit den dahinterliegenden, LaTeX-spezifischen Mechanismen nicht sonderlich vertraut. Warum die erste Zuweisung oder Abfrage nicht funktioniert, ist mir ein Rätsel. Im Ergebnis von \usekomavar stecken evtl. noch irgendwelche Makros drin, weshalb der Test auf Gleichheit mit der zugewiesenen Zeichenketten immer "false" ergibt. Aber auch das ist lediglich eine Vermutung von mir. Gibt es hierzu eine kurze, verständliche Erklärung?

Eigentlich ist eine solche Wenn-Bedingung ja keine komplizierte Sache. Falls es aber zu komplex wird, muss ich es halt von Hand abfangen.

JVP