Sie sind hier

Wie kann ich bei Verwendung einer adr-Datei testen, ob ein Feld leer ist?

Bild von Markus Kohm

Tests auf leere Felder funktionieren genau wie Tests auf Felder mit bestimmtem Inhalt am einfachsten mit \ifstr. Die Anweisung ist im Abschnitt »Verzweigungen« im Kapitel »Grundlegende Funktionen im Paket scrbase« der KOMA-Script-Anleitung, scrguide.pdf, dokumentiert.

Hier ein ganz einfaches Beispiel mit scraddr, bei dem zwischen Vorname und Nachname nur dann ein Leerzeichen gesetzt werden soll, wenn der Vorname nicht leer ist:

\begin{filecontents}{\jobname.adr}
\addrentry{Nachname}{}{Stra\ss e 1\\12345 Hier}{}{}{}{}{}{TESTA}
\addrentry{Nachname}{Vorname}{Stra\ss e 2\\54321 Dort}{}{}{}{}{}{TESTB}
\end{filecontents}
 
\documentclass{scrlttr2}
 
\usepackage{scraddr}
 
\usepackage[ngerman]{babel}
\usepackage{selinput}
\SelectInputMappings{
  adieresis={ä},
  germandbls={ß},
  Euro={},
}
\usepackage[T1]{fontenc}
 
% Empfänger
\newcommand{\Recip}{TESTA}% zum Vergleich durch TESTB ersetzbar
 
\newcommand*{\IntelliName}[1]{%
  \ifstr{\FirstName{#1}}{}{}{\FirstName{#1} }%
  \LastName{#1}%
}
 
% Adressen laden
\InputAddressFile{\jobname}	% für \Name{Kürzel}
 
% Betreff
\setkomavar{subject}{Test}
 
\begin{document}
 
\begin{letter}{\IntelliName{\Recip}\\\Address{\Recip}}
 
\opening{\FreeI{\Recip}}
 
Funktioniert:
 
\IntelliName{\Recip} (ohne Leerzeichen vor den Nachnamen)
 
\Name{\Recip} (mit Leerzeichen vor dem Nachnamen)
 
\closing{Mit freundlichen Grüßen}
\end{letter}
\end{document}

Kommentare

Hier ein unter Umständen interessanter Link hinsichtlich der Funktionsweise von \ifstr und Co.:

http://tex.stackexchange.com/questions/59565

Bild von Markus Kohm

Wobei im konkreten Fall die Frage nach der Expandierbarkeit (und darum geht es in der Diskussion auf stackexchange) eher nicht ins Gewicht fallen dürfte.

Aber wäre es unter Umständen wert, darüber nachzudenken, \ifstr in die auf Stack Exchange diskutierte Richtung zu verbessern? Anwendung gäbe es sicher genug … :-)

Bild von Markus Kohm

Die Anweisung ist für einige einfache intern benötigten Vergleiche entstanden, bei denen die volle Expandierbarkeit keine Rolle spielt. Der implementierte Test ist für diesen Zweck schnell und ausreichend und seit Jahren erprobt. Das jetzt zu ändern könnte unvorhergesehene Auswirkungen haben und wäre gleichzeitig mit Kanonen auf Spatzen geschossen. Stell Dir vor, ich würde das ändern und irgendwer nutzt das neue Verhalten. Dann stellt sich heraus, dass irgend etwas, das vor der Änderung funktionierte, plötzlich nicht mehr funktioniert. Wenn ich dann zurück ändere, beschweren sich diejenigen, die sich auf die Expandierbarkeit verlassen haben. Das würde mich ins Teufels Küche bringen!

Ich könnte allenfalls ein \ifstringsequal zusätzlich implementieren.

Würde ich sofort verwenden :-)

Bild von Markus Kohm

Ich war jetzt tatsächlich drauf und dran, das zu implementieren. Allerdings haben alle auf TeX.SX vorgeschlagenen Lösungen immer irgendeinen Haken. Die beste Idee ist noch pdftexcmds zu verwenden, das allerdings entweder pdfTeX oder luaTeX benötigt und davon abgesehen hat es wohl wenig Sinn, die Definition zu klauen.

Die anderen Lösungen haben mir zu viele Haken. Da müsste man noch reichlich Hand anlegen, um sie eventuell zu verbessern. Ich werde gelegentlich sicher noch einmal darüber nachdenken, aber vorerst lasse ich doch lieber die Finger davon, Sorry.

Comments for "Wie kann ich bei Verwendung einer adr-Datei testen, ob ein Feld leer ist?" abonnieren