
Texto original abaixo
Editar: resolvi com intermináveis pesquisas no Google e ajuda daqui. Aqui está minha teoria: os erros de digitação causaram expandafter
falha, o que causou uma incompatibilidade entre o chopline
comando e o restante da linha cortada do loop anterior. Outro erro foi o ifeof
. Latex tentou ler uma linha depois eof
. Isso fez com que "ler para" falhasse
Código de trabalho:
O formato do csv deve ser
academicTitle(might be empty);surname;prename;Street+Number;ZIP-code;city;addressExtension;postbox(0 or certainValue)\n
O arquivo começa aqui:
\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}
Pergunta original:
Esta é minha primeira pergunta. Pesquisei bastante no Google, mas ainda não consegui.
Fiz um gerador automático para envelopes de cartas. Isso lê um arquivo csv. Eu sigo as instruções dadas emde.wikibooks Serienbrief. Mas infelizmente não vai funcionar.
Eu uso Texmaker e MikTex no Windows 7, mas poderia mudar para Manjaro, se necessário.
Este é o meu código:
Former code
Ele trava após "ler para". Este parece ser o problema, mas não consigo entender o porquê. Além disso, o loop não funciona de forma alguma. Não importa que tipo de loop ( loop
, whiledo
, for
) eu configure, ele só faz um loop uma vez. Mesmo se eu definir um loop for para 30 repetições. Na verdade, deveria produzir 30 quadros.
Não me julgue por usar o beamer para os envelopes. Eu daria mais tags, mas não tenho permissão.
Responder1
Talvez não seja a melhor maneira, mas um tanto 'à prova de falhas' é usar os expl3
recursos e \ior_map_inline
comandos que lêem o arquivo linha por linha e processam a linha de entrada.
Usei uma sequência para dividir a linha em várias partes relevantes.
Observe que esse espaço em branco deve ser inserido com 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}
E Adressen.csv
está aqui:
;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