以下为原文
编辑:我通过无休止的谷歌搜索和这里的帮助解决了这个问题。这是我的理论:拼写错误导致失败,这导致命令与上一个循环的其余部分expandafter
不匹配。另一个错误是。Latex 试图读取一行之后。这导致“读取”失败chopline
ifeof
eof
工作代码:
csv 的格式必须是
academicTitle(might be empty);surname;prename;Street+Number;ZIP-code;city;addressExtension;postbox(0 or certainValue)\n
文件从这里开始:
\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}
原始问题:
这是我的第一个问题。我在 Google 上搜索了很多次,但仍然没有成功。
我制作了一个信封自动生成器。它从 csv 文件读取。我遵循de.wikibooks 系列简报。但不幸的是它不起作用。
我在 Windows 7 上使用 Texmaker 和 MikTex,但如果有必要,我可以换成 Manjaro。
这是我的代码:
Former code
“read to” 后崩溃。这似乎是问题所在,但我不知道为什么。此外,循环根本不起作用。无论我设置哪种循环(loop
、whiledo
、for
),它都只循环一次。即使我将 for 循环设置为 30 次重复。实际上它应该产生 30 帧。
不要因为我使用投影仪来制作信封而评判我。我本可以给出更多标签,但我不被允许这样做。
答案1
也许不是最好的方法,但某种程度上的“故障安全”是使用逐行读取文件并处理输入行的expl3
功能和命令。\ior_map_inline
我使用序列将该行分成几个相关部分。
请注意,必须输入空格foo\ some other stuff
!
\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}
这里Adressen.csv
是:
;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