
Originaltext unten
Edit: Ich habe es durch endloses Googeln und Hilfe von hier gelöst. Hier ist meine Theorie: Die Tippfehler führten expandafter
zu einem Fehler, der eine Diskrepanz zwischen dem chopline
Befehl 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.whiledo
for
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 expl3
Funktionen und \ior_map_inline
Befehlen, 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.csv
ist 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