Anforderung:
Variablen sollen abhängig von ihren Inhalten formatiert werden. Konkret betrifft dies die Setzung der Signatur. Sind die Inhalte der Variablen "fromname" und "signature" identisch, soll ein Abstand zwischen Gruß und Signature mit
\@setplength{sigbeforevskip}{2\baselineskip}
gesetzt werden.
Andernfalls kann davon ausgegangen werden, dass "signature" eine Graphik enthält, bei der dann
\@setplength{sigbeforevskip}{0\baselineskip}
angebracht ist.
Lösungsansätze und Problem:
Lösungen über die Befehle \ifthenelse
(xifthen) oder \ifdefstrequal
(etoolbox) bringen leider nicht das gewünscht Resultat, da die Variablen immer als verschieden interpretiert werden, selbst wenn
\setkomavar{signature}{\usekomavar{fromname}}
benutzt wurde.
Minimalbeispiel
\RequirePackage{filecontents} \begin{filecontents}{myloc.lco} %%eine loc.datei, die nur Formatierung beinhaltet \usepackage{etoolbox,xifthen} \AtBeginLetter{% %% 1. variante: xifthen \ifthenelse{\equal{\usekomavar{fromname}}{\usekomavar{signature}}} {\setkomavar{signature}{gleich}} {\setkomavar{signature}{ungleich}} %% 2. Variante: etoolbox % \ifdefstrequal{\usekomavar{fromname}}{\usekomavar{signature}} % {\setkomavar{signature}{gleich}} % {\setkomavar{signature}{ungleich}} % {\@setplength{sigbeforevskip}{2\baselineskip}} % {\@setplength{sigbeforevskip}{0\baselineskip}}%falls signature verschieden (Bild) dann hochziehen } \end{filecontents} \documentclass[myloc]{scrlttr2} \usepackage[ngerman]{babel} \begin{document} %%Daten \setkomavar{fromname}{Mini} \setkomavar{signature}{%\includegraphics[height=30px]{signatureMini}\\* \usekomavar{fromname}} %%Brief \begin{letter}{Mickey} \opening{Lieber Mickey,} Briefinhalt \closing{Gru\ss} \end{letter} \end{document}
Das kann aus zwei Gründen
Das kann aus zwei Gründen nicht funktionieren:
\usekomavar
hat eine Sternvariante und ein optionales Argument und ist damit nicht voll expandiertbar.\def\foo{A}
und\def\bar{\foo}
miteinander vergleicht, so sind die beiden i. a. nicht identisch.Das zweite Problem könnte man mit
\edef
statt\def
lösen, das geht aber wegen des ersten Problems nicht.Vermutlich musst Du Dir da etwas anderes einfallen lassen.
Wer sich selbst zu wichtig nimmt, braucht von anderen nicht mehr wichtig genommen zu werden.
Schnelle Lösung
Eine schnelle (aber eher unschöne, da auf internen Makros beruhende) Lösung könnte folgendermaßen aussehen: Ersetze
durch
Wenn du dann die Daten im Dokument mit
setzt, sollte der Test funktionieren.
Wenn man innerhalb der einen
Wenn man innerhalb der einen Variable nicht auf eine andere Variable zugreift, dann braucht man nicht auf Interna zurück zu greifen, sondern kann den dokumentierten, sauberen Weg beschreiten:
Ein Problem tritt erst auf, wenn wie ursprünglich gefordert auch,
funktionieren soll. Dann funktioniert aber auch der Hack mit den internen Makros nicht. Also würde ich gleich darauf verzichten und etwas wie:
greifen.
Danke
@Ratte: Danke für den Hinweis, mit dem man wieder mehr versteht
@MHP: das ist zwar nicht ganz so sauber, aber hilft mir schon mal weiter
Solch ein Test, der Inhalte von Variablen überprüft wäre sicherlich auch für andere Zwecke gut. Bsp, wenn man aus Versehen Daten doppelt eingibt, aber nur einfach ausgeben möchte. Ich denke da an falsche Benutzereingaben mittels
wobei ein automatischer Test ein Warnung ausgibt, wenn beide irrtümlich identisch deklariert sind. Oder beide Variablen führen bei langen .lco Dateien irgendwann mit
zu unliebsamen Redundanzen.