Massenbrief, "Schleife" funktioniert nicht, "Vorlesen" funktioniert nicht

Massenbrief, "Schleife" funktioniert nicht, "Vorlesen" funktioniert nicht

Originaltext unten

Edit: Ich habe es durch endloses Googeln und Hilfe von hier gelöst. Hier ist meine Theorie: Die Tippfehler führten expandafterzu einem Fehler, der eine Diskrepanz zwischen dem choplineBefehl und dem Rest der abgeschnittenen Zeile der vorherigen Schleife verursachte. Ein weiterer Fehler war der ifeof. Latex versuchte, eine Zeile nach zu lesen eof. Dies führte dazu, dass „read to“ fehlschlug.

Funktionierender Code:

Das Format der CSV-Datei muss

academicTitle(might be empty);surname;prename;Street+Number;ZIP-code;city;addressExtension;postbox(0 or certainValue)\n

Die Datei beginnt hier:

\documentclass[12pt,a4paper,landscape]{article}
\usepackage[utf8]{inputenc}
\usepackage[german]{babel}
\usepackage{graphicx}
\usepackage[verbose]{placeins}


%What do we do? Delete all the margins!!! How do we do it? By force!!!
\setlength{\leftmargin}{0pt}
\setlength{\rightmargin}{0pt}
\setlength{\topmargin}{0pt}
\setlength{\textheight}{845pt}
\setlength{\hoffset}{-3.3in}
\setlength{\voffset}{-1.5in}
\setlength{\textheight}{845pt}
\setlength{\textwidth}{597pt}


%Personal chopline command from https://de.wikibooks.org/wiki/LaTeX-W%C3%B6rterbuch:_Serienbrief_mit_externen_Daten
\def\chopline#1;#2;#3;#4;#5;#6;#7;#8 \\{
\def\Titel{#1}
\def\Name{#2}
\def\Vorname{#3}
\def\Strasse{#4}
\def\PLZ{#5}
\def\Ort{#6}
\def\Adresszusatz{#7}
\def\Postfach{#8}
}

\newif\ifmore \moretrue



\begin{document}
\pagenumbering{gobble}

\newread\quelle
\openin\quelle=Adressen.csv %Here we get the addresses from

\loop

\read\quelle to\zeile
\ifeof\quelle
\global\morefalse
\else{

%write you stuff here

\newpage %gets ignored on first page


\expandafter\chopline\zeile\\
\vspace*{-0.02\paperwidth} %due to my Brief.pdf
\hspace*{0.0\paperheight}  %same here
\includegraphics[width=\paperwidth]{./Brief.pdf}

\FloatBarrier
\vspace*{-0.23\paperheight} %shift the box where desired
\hspace*{0.65\paperwidth}   %same here
\parbox{0.4\textwidth}{
\Titel \ \Vorname \ \Name \ \\
\ifx\Adresszusatz\empty %if it isn't empty, it is printed
\else
\Adresszusatz \\
\fi
\ifnum\Postfach=0 %if the value is 0 in the .csv, it isn't printed
\else
Postfach \ \Postfach
\fi
\Strasse \ \\
\PLZ \ \Ort
}

%stop with you writing here

}
\fi

\ifmore\repeat

\closein\quelle


\end{document}

Ursprüngliche Frage:

Dies ist meine erste Frage. Ich habe viel gegoogelt, bin aber immer noch nicht weitergekommen.

Ich habe einen automatischen Generator für Briefumschläge erstellt. Dieser liest aus einer csv-Datei. Ich halte mich an die Anleitung inde.wikibooks Serienbrief. Aber leider klappt es nicht.

Ich verwende Texmaker und MikTex unter Windows 7, könnte aber bei Bedarf auf Manjaro umsteigen.

Dies ist mein Code:

Former code

Es stürzt nach "read to" ab. Das scheint das Problem zu sein, aber ich kann nicht herausfinden, warum. Außerdem funktioniert die Schleife in KEINER Weise. Egal, welche Art von Schleife ( ,,, loop) ich einrichte, sie wird nur einmal wiederholt. Selbst wenn ich eine For-Schleife auf 30 Wiederholungen einstelle. Eigentlich sollte sie 30 Frames erzeugen.whiledofor

Verurteilen Sie mich nicht dafür, dass ich Beamer für die Umschläge verwende. Ich würde mehr Tags angeben, aber das darf ich nicht.

Antwort1

Dies ist vielleicht nicht die beste Methode, aber einigermaßen sicher ist die Verwendung von expl3Funktionen und \ior_map_inlineBefehlen, die die Datei zeilenweise lesen und die Eingabezeile verarbeiten.

Ich habe eine Sequenz verwendet, um die Zeile in die verschiedenen relevanten Teile aufzuteilen.

Bitte beachten Sie, dass Leerzeichen mit foo\ some other stuff! eingegeben werden müssen.

\documentclass[12pt,a4paper]{beamer}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
%\usepackage{amsmath}
%\usepackage{amsfonts}
%\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{forloop}

\usepackage{xparse}

\begin{document}



\ExplSyntaxOn
\int_const:Nn \c_maestro_titel_int {1}
\int_const:Nn \c_maestro_vorname_int {2}
\int_const:Nn \c_maestro_name_int {3}
\int_const:Nn \c_maestro_strasse_int {4}
\int_const:Nn \c_maestro_plz_int {5}
\int_const:Nn \c_maestro_ort_int {6}
\int_const:Nn \c_maestro_zusatz_int {7}
\int_const:Nn \c_maestro_postfach_int {8}


\ior_new:N \l_maestro_quelle_stream

\ior_open:Nn  \l_maestro_quelle_stream  {Adressen.csv}

\ior_map_inline:Nn \l_maestro_quelle_stream {%
  \seq_set_split:Nnn \l_tmpa_seq {;} {#1}% Split the sequence
  \begin{frame}
    \includegraphics[scale=0.2]{beeduck.jpg}\par

%    \vspace{0.6\paperheight}
%    \hspace{0.6\paperheight}????
    \seq_item:Nn \l_tmpa_seq {\c_maestro_titel_int}~\seq_item:Nn \l_tmpa_seq {\c_maestro_vorname_int}~\seq_item:Nn \l_tmpa_seq {\c_maestro_name_int}\par
    \tl_set:Nx \l_tmpa_tl {\seq_item:Nn \l_tmpa_seq {\c_maestro_zusatz_int}}
    \tl_if_empty:NF \l_tmpa_tl {%
      \tl_use:N \l_tmpa_tl\par
    }
    \tl_set:Nx \l_tmpa_tl {\seq_item:Nn \l_tmpa_seq {\c_maestro_postfach_int}}
    \tl_if_empty:NF \l_tmpa_tl {%
      Postfach~\tl_use:N \l_tmpa_tl\par
    }
    \seq_item:Nn \l_tmpa_seq {\c_maestro_strasse_int}\par
    \seq_item:Nn \l_tmpa_seq {\c_maestro_plz_int}~\seq_item:Nn \l_tmpa_seq {\c_maestro_ort_int}
  \end{frame}
}
\ExplSyntaxOff


\end{document}

Und Adressen.csvist hier:

;Gandalf;Stormcrow;Shireroad;10000;Shire;bei\ Schmidt;11111
;Baggins;Bilbo;Shireroad;10000;Shire;bei\ Müller;22222
Dwarf-King;Thorin;Oak-Shield;Erebor\ Road;Middle\ Earth;Arkenstone;at\ Smaug's\ cave;33333

Bildbeschreibung hier eingeben

verwandte Informationen