Sie sind hier

Elternsprecher erstellt Adressliste mit Mail, Telefon, Mutter, Vater -- ausführlich halt

Ich möchte eine ästhetisch ansprechende Adressliste für meine Klasse erstellen. Die Daten dazu umfassen knapp 100 Personen, da ich zum Kind auch die Eltern nennen möchte, die dann wiederum mit eigener Mail und Telefonnummer vertreten sein sollen.

Im Prinzip:
Müller, Hans(Name des Kindes, exponiert)

Franka Hansch
Müllerstraße 17 16207 Berlin
E-Mail Mutter: 42@Müller.de
Festnetz: 030 785004685
Mobil: 0176 458003325

Franka Hansch
Müllerstraße 17 16207 Berlin
E-Mail Mutter: 42@Müller.de
Festnetz: 030 785004685
Mobil: 0176 458003325

Für Tipps zu dieser Aufgabe wäre ich sehr dankbar. Bisher habe ich nur vom Datatool-Paket gehört. Ich habe mit Latex zwar meine Magisterarbeit geschrieben und bin heute noch dankbar, das nicht mit Word gemacht zu haben, doch wäre es mir nur allzu recht, wenn ich keine zu lange Einarbeitungszeit für diese Aufgabe bräuchte. Das Beste, was mir demzufolge passieren könnte, wäre eine Grundmaske.

Herzliche Grüße

frank

Bild von Markus Kohm

Hier eine KOMA-Script-Lösung:

\begin{filecontents*}{elternsprecher.adr}
\addrentry{Müller}{Leonard}{Müllerstraße 10\\ 16507 Berlin}
          {030~78554685}{}{Leonard@Müller.de}
          {MuellerFranka}{MuellerFranz}{MuellerLeonard}
\addrentry{Müller}{Franka}{Müllerstraße 10\\ 16507 Berlin}
          {030~78554685}{0176 458763325}{Franka@Müller.de}
          {MuellerFranka}{MuellerFranz}{MuellerFranka}
\addrentry{Müller}{Franz}{Müllerstraße 10\\ 16507 Berlin}
          {030~78554685}{0176 458763327}{Franz\_Peter@Müller.de}
          {MuellerFranka}{MuellerFranz}{MuellerFranz}
\end{filecontents*}
 
\documentclass[DIV=18,fontsize=10,pagesize]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
 
\usepackage{scraddr}
\InputAddressFile{elternsprecher}
 
\newcommand*{\addrentry}[9]{%
  \ifstr{#7}{#9}{% selbst = Mutter, also ignorieren
  }{%
    \ifstr{#8}{#9}{% selbst = Vater, also ignorieren
    }{% selbst != Mutter AND selbst != Vater, also Kind
      \minisec{#2\nobreakspace #1}
      \begin{minipage}{\linewidth}% die ganze Familie zusammen halten
        \showvalues{#3}{#4}{#5}{#6}% Adresse, Telefon, E-Mail anzeigen
        \ifstr{#7}{}{% keine Mutter, also ignorieren
        }{%
          \medskip\hspace*{1em}\parbox[t]{\dimexpr \linewidth-1em\relax}{%
            \FirstName{#7}\nobreakspace\LastName{#7}\par
            \showvalues{\Address{#7}}{\Telephone{#7}}{\FreeI{#7}}{\FreeII{#7}}%
          }\par
        }%
        \ifstr{#8}{}{% kein Vater, also ignorieren
        }{%
          \medskip\hspace*{1em}\parbox[t]{\dimexpr \linewidth-1em\relax}{%
            \FirstName{#8}\nobreakspace\LastName{#8}\par
            \showvalues{\Address{#8}}{\Telephone{#8}}{\FreeI{#8}}{\FreeII{#8}}%
          }\par
        }%
      \end{minipage}\par
    }%
  }%
}
 
\newcommand*{\showvalues}[4]{%
  \strut{\renewcommand*\\[1][]{, }#1}\par\noindent
  \mbox{Festnetz: \ifstr{#2}{}{---}{#2}}, 
  \mbox{Mobil: \ifstr{#3}{}{---}{#3}}, 
  \mbox{#4}\par
}
 
\begin{document}
 
\input{elternsprecher.adr}
 
\end{document}

Zur Änderung der Formatierung sind schlicht die Anweisungen \addrentry und \showvalues entsprechend zu ändern. Ich habe mich bei der Lösung ganz bewusst auf LaTeX-Anweisungen beschränkt und keine einzige Low-Level TeX-Anweisung verwendet. Damit sollten alle Anweisungen entweder in der KOMA-Script-Anleitung oder der einschlägigen Anfängerliteratur erklärt sein.

Danke vielmals für die schnelle und gute Hilfe.

Herzliche Grüße

frank

Ich bin sehr einverstanden mit dieser Form, auch die Schrift passt genau.
Mir selbst ist es allerdings ein Rätsel, warum es mir nicht gelingt, die nächste Adresse einzufügen. Wie selbstverständlich hatte ich dazu den Inhalt des "filecontent" kopiert und eingefügt, um dann die neuen Daten einzutragen, doch es tut sich nichts. Nach 30 Minuten suchen und der Vermutung, es kann sich doch nur um eine Kleinigkeit handeln, schlage ich wieder diesen Weg ein und erlaube mir ein zweites Mal zu fragen.

Herzliche Grüße

frank

Bild von Markus Kohm

Die filecontents-Umgebung ist ganz prima für ein vollständiges Minimalbeispiel, weil dann alles bereits mit passenden Dateinamen in einer Datei steht. In Dokumenten, die Änderungen unterworfen sind, hat sie den Nachteil, dass die Datei nur angelegt wird, wenn sie nicht bereits existiert. Wenn sie bereits existiert, gibt LaTeX hingegen nur eine entsprechende Warnung aus:

File `elternsprecher.adr' already exists on the system.
Not generating it from this source

Das kann man ändern, indem man vor der Umgebung das Paket filecontents lädt. Die einfachste Lösung ist aber, die Datei »elternsprecher.adr« direkt zu editieren und die filecontents-Umgebung aus der tex-Datei zu entfernen.

Das würde ich gern tun, aber wie kann ich eine adr-datei erzeugen. Nirgendwo ist das erklärt, mir fehlt anscheinend eine grundlegende Info.
\begin[elternsprecher.adr}

\end{elternsprechenr.adr}

funktioniert nicht.

Grüße

Bild von Markus Kohm

Wenn Du das Beispiel hast laufen lassen, dann existiert die Datei bereits und kann einfach mit einem Editor geöffnet werden. Du siehst dann auch, was da drin stehen muss.

Soll ich also eine separate Datei anlegen, die alle Adresseinträge enthält? Sie müsste dann die .adr Endung haben, wo erzeugt man das? Dann müsste ich mit dem Texinput-Befehl auf diese Datei vereisen oder?

Grüße

Bild von Markus Kohm

Dateien, die im aktuellen Verzeichnis liegen, findet TeX, ohne dass man irgendwie darauf verweisen muss. Genau so funktioniert das ja auch in meinem Beispiel. Also einfach die adr-Datei in dasselbe Verzeichnis legen, in dem auch Deine tex-Datei ist. Inhalt der adr-Datei siehe anderer Kommentar.

Die Lösung sieht so aus:

\documentclass[DIV=18,fontsize=10,pagesize]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
 
\usepackage{scraddr}
\InputAddressFile{elternsprecher}
 
\newcommand*{\addrentry}[9]{%
  \ifstr{#7}{#9}{% selbst = Mutter, also ignorieren
  }{%
    \ifstr{#8}{#9}{% selbst = Vater, also ignorieren
    }{% selbst != Mutter AND selbst != Vater, also Kind
      \minisec{#2\nobreakspace #1}
      \begin{minipage}{\linewidth}% die ganze Familie zusammen halten
        \showvalues{#3}{#4}{#5}{#6}% Adresse, Telefon, E-Mail anzeigen
        \ifstr{#7}{}{% keine Mutter, also ignorieren
        }{%
          \medskip\hspace*{1em}\parbox[t]{\dimexpr \linewidth-1em\relax}{%
            \FirstName{#7}\nobreakspace\LastName{#7}\par
            \showvalues{\Address{#7}}{\Telephone{#7}}{\FreeI{#7}}{\FreeII{#7}}%
          }\par
        }%
        \ifstr{#8}{}{% kein Vater, also ignorieren
        }{%
          \medskip\hspace*{1em}\parbox[t]{\dimexpr \linewidth-1em\relax}{%
            \FirstName{#8}\nobreakspace\LastName{#8}\par
            \showvalues{\Address{#8}}{\Telephone{#8}}{\FreeI{#8}}{\FreeII{#8}}%
          }\par
        }%
      \end{minipage}\par
    }%
  }%
}
 
\newcommand*{\showvalues}[4]{%
  \strut{\renewcommand*\\[1][]{, }#1}\par\noindent
  \mbox{Festnetz: \ifstr{#2}{}{---}{#2}},
  \mbox{Mobil: \ifstr{#3}{}{---}{#3}},
  \mbox{#4}\par
}
 
\begin{document}
 
 
\addrentry{Müller}{Leonard}{Müllerstraße 10\\ 16507 Berlin}
          {030~78554685}{}{Leonard@Müller.de}
          {MuellerFranka}{MuellerFranz}{MuellerLeonard}
\addrentry{Müller}{Franka}{Müllerstraße 10\\ 16507 Berlin}
          {030~78554685}{0176 458763325}{Franka@Müller.de}
          {MuellerFranka}{MuellerFranz}{MuellerFranka}
\addrentry{Müller}{Franz}{Müllerstraße 10\\ 16507 Berlin}
          {030~78554685}{0176 458763327}{Franz\_Peter@Müller.de}
          {MuellerFranka}{MuellerFranz}{MuellerFranz}
 
\addrentry{Müller}{Leonard}{Müllerstraße 10\\ 16507 Berlin}
          {030~78554685}{}{Leonard@Müller.de}
          {MuellerFranka}{MuellerFranz}{MuellerLeonard}
\addrentry{Müller}{Franka}{Müllerstraße 10\\ 16507 Berlin}
          {030~78554685}{0176 458763325}{Franka@Müller.de}
          {MuellerFranka}{MuellerFranz}{MuellerFranka}
\addrentry{Müller}{Franz}{Müllerstraße 10\\ 16507 Berlin}
          {030~78554685}{0176 458763327}{Franz\_Peter@Müller.de}
          {MuellerFranka}{MuellerFranz}{MuellerFranz}
 
 
\end{document}

Danke nocheinmal für die, ich meine das wirklich ernst, sehr gute Hilfe. Ich habe jetzt endlich das beruhigende Gefühl, ein ansehnliches Dokument erstellen zu können und freue mich schon darauf.

Die lange Latex-Pause hat leider zu einigen Anfangsschwierigkeiten beigetragen, die jetzt aber hoffentlich überwunden sind.

Herzliche Grüße
frank

[Admin-Edit:] <code>...</code> eingefügt. Bitte künftig selbst beachten!

Bild von Markus Kohm

Bitte verwenden Code-Tags zum Einfügen von Code. Du hast bei der Anmeldung eine Mail bekommen, in der ein Link auf einen entsprechenden Beitrag enthalten ist. Bitte beachte diesen von Admin nochmals angegebenen Link unbedingt!

Bitte auch nicht für ein und dasselbe Thema mehrere Themen im Forum beginnen. Ich habe den Themen-Dupe deshalb gelöscht.

Außerdem wird das, was Du da machst aus zwei Gründen so nicht funktionieren. Zum einen muss das letzte Argument von \addrentry bei allen Einträgen unterschiedlich sein. Es darf also keine zwei Einträge geben, bei denen das letzte Argument gleich – beispielsweise MuellerFranz – ist. Zum anderen wird eine externe Datei benötigt, weil die einmal über das Paket scraddr eingelesen werden muss (Anweisung \InputAddressFile{elternsprecher} im Beispiel), um die Elterneinträge zum jeweiligen Kind zu haben, und einmal, um die Einträge sortiert nach den Kindern ausgeben zu können.

Bitte lies unbedingt die Anleitung zum Paket scraddr in der KOMA-Script-Anleitung, scrguide.pdf, nach, damit Du eine Chance hast, das zu verstehen! Lies außerdem den Abschnitt über Serienbriefe im scrlttr2-Kapitel nach. Dort sind die Grundlagen der Verwendung von \addrfield erklärt. Lies auch die Erklärung zu den weiteren verwendeten KOMA-Script-Anweisungen wie \ifstr in der KOMA-Script-Anleitung nach (leicht über den Befehlsindex zu finden).

Außerdem solltest Du Dich mit LaTeX-Grundlagen wie \input und \newcommand beschäftigen. Es würde den Rahmen sprengen, Dir diese hier bei zu bringen.

Hallo Markus,

zunächst danke für deine Hilfe bis hier hin.

Ich habe jetzt alles so weit aufgebaut wie du es empfiehlst: separate adr.Datei, die über den Input-Befehl eingebunden wird. Du sagtest schon, es würde nicht funktionieren, wenn nicht das letzte Argument in jedem addrentry-Eintrag, also das Argument Nummer 9, was im Buch als "Kürzel" gekennzeichnet ist, ein anderes wäre. Aber ich muss die letzten drei Argumente für jede neue Familie neu bestimmen:
Die adr.Datei kann dann so aussehen, damit es funktioniert:¹

\addrentry{Johann}{Butt,}{Füllstraße 17\\ 16064 Berlin}
          {}{0178 3000164}{E-Mail:---}
          {MuellerFranka}{MuellerFranz}{AlbertaIsabel-Luisa}
\addrentry{Johann}{Vater}{Füllstraße 17\\ 16064 Berlin}
          {}{0178 3348164}{E-Mail:---}
          {MuellerFranka}{MuellerFranz}{MuellerFranka}
\addrentry{Hanuta}{Vater}{Müllerstraße 10\\ 10463 Berlin}
          {}{0178 3348164}{E-Mail:---}
          {MuellerFranka}{MuellerFranz}{MuellerFranz}        
 
 
\addrentry{Hans}{Berta,}{Balckstr. 101\\ 12927 Berlin}
          {}{0171113161}{web@gmx.de}
          {ellerFra}{llerFra}{taIsa}
\addrentry{Stiefel}{Mutter}{Balckstr 101\\ 12927 Berlin}
          {}{0171113161}{E-Mail:---}
          {ellerFra}{llerFra}{llerFra}
\addrentry{Stiefel}{Vater}{Balckstr 101\\ 12927 Berlin}
          {}{01702111161}{E-Mail:---}
          {ellerFra}{llerFra}{ellerFra}

Herzliche Grüße

frank

[Admin-Edit:] <code>...</code> eingefügt. Bei fortgesetzter Missachtung der Formatierungsvorschriften muss leider das Schreibrecht entzogen werden.

Bild von Markus Kohm

Zur Erklärung:

  • Argument 9 ist das Kürzel, unter dem u. a. scraddr den Datensatz zur Verfügung stellt. Daher muss dieses Argument eindeutig sein.
  • Argument 8 ist das Kürzel des Vaters (beim Datensatz eines Kindes) bzw. des Ehemanns (beim Datensatz einer Mutter). Väter werden daran erkannt, dass Argument 8 und Argument 9 gleich sind. Bei Kindern wird dieses Argument dazu verwendet, den Datensatz des Vaters zusammen mit dem Datensatz des Kindes auszugeben.
  • Argument 7 ist das Kürzel der Mutter (beim Datensatz eines Kindes) bzw. der Ehefrau (beim Datensatz eines Vaters). Mütter werden daran erkannt, dass Argument 7 und Argument 9 gleich sind. Bei Kindern wird diese Argument dazu verwendet, den Datensatz der Mutter zusammen mit dem Datensatz des Kindes auszugeben.

Als Kürzel (Argument 7, 8, und 9) sollten möglichst nur Buchstaben verwendet werden. Keinesfalls sollten aktive Zeichen (siehe Erklärung zu \catcode im TeXbook oder in TeX by Topic) darin verwendet werden. Bei Argument 9 von \addrentry und Argument 8 von \adrentry ist das übrigens immer so. Siehe auch hierzu wieder die Anleitung zum Paket scraddr in der KOMA-Script-Anleitung, scrguide.pdf.

Ich denke, die anderen Felder sind klar und bedürfen keiner weiteren Erklärung.

Comments for "Elternsprecher erstellt Adressliste mit Mail, Telefon, Mutter, Vater -- ausführlich halt" abonnieren