
Tengo que escribir muchas cartas donde cada vez tengo que modificar solo los nombres, fechas y dirección, pero siempre es el mismo contenido.
Una versión corta sería algo así como "Estimado [nombre], desde [dirección] tienes que presentarte a las [hora] [fecha]".
¿Hay alguna forma de automatizar esto? Solo me gustaría insertar los campos correctos para que Latex cree la carta a partir de una plantilla.
Respuesta1
Me gusta hacerlo así, usando el datatool
paquete.(como también se sugiere en los comentarios):
\documentclass[10pt,a4paper]{scrlttr2}
\usepackage{datatool}
\begin{document}
\setkomavar{date}{\today}
\setkomavar{subject}{Very Important Letter}
\setkomavar{fromname}{Tom}
\setkomavar{fromaddress} {%
My Company\\
Company Way 42\\
1337~Corporatetown%
}
\DTLloaddb{list}{addresses.csv}
\DTLforeach{list}{\first=Firstname,\last=Lastname,\address=Street,
\town=Town,\postal=Postal}{% start of loop
\begin{letter}{\first~\last \\ \address \\ \postal~\town}%
\opening{Dear \first~\last,}%
some text
some more text
\closing{Best regards}
\end{letter}
} % end of for loop
\end{document}
Luego tengo todas las direcciones en un archivo separado addresses.csv
, como este:
Firstname,Lastname,Street,Postal,Town
John,Doe,Example Street 1, 12345, North Pole
Jane,Doe,Example Street 2, 12345, North Pole
Por supuesto, la carta resultante probablemente no tenga el estilo que usted prefiere. Pero tienes todo el mundo de opciones KOMA a tu disposición, solo consulta elmanual de koma!
Respuesta2
Un enfoque algo más sencillo es recordar que puedes tener múltiples letter
entornos en un solo documento. Por lo tanto, podrías escribir algo como esto:
\documentclass{letter}
\address{YOUR ADDRESS GOES HERE}
\signature{YOUR SIGNATURE INFO HERE}
\NewDocumentCommand{\myletter}{mmmm}
{
\begin{letter}{#1}
\opening{Dear #2:}
Please present yourself at the #3 at #4 on #5.
\closing{Threateningly,}
\end{letter}
}
\begin{document}
\myletter{Julius Caesar\\Subura\\Rome}{Julius}{Curia of Pompey}{3:00PM}{15 March 44 BC}
\myletter{Gaius Germanicus\\Temple of Castor and Pollux\\Rome}{Caligula}{Cryptoporticus}{3:00PM}{24 January 41}
\end{document}
Respuesta3
Aquí hay una manera con el listofitems
paquete.
\documentclass{article}
\usepackage{listofitems}
\newcommand\letterdata{
Sam, Main Street, 3 p.m., 14 April 2022\\
Lisa, Elm St., 1500, 25 December 2022}
\newcommand\stencil{
\noindent Dear <data>,
Please report to our <data> location at <data> on <data>.
\noindent kind regards,\\
The Management}
\setsepchar{\\/,}
\readlist\letteritems{\letterdata}
\setsepchar{<data>}
\readlist\stencilitems{\stencil}
\begin{document}
\foreachitem\z\in\letteritems[]{%
\foreachitem\zz\in\stencilitems[]{%
\zz
\ifnum\zzcnt<\listlen\stencilitems[]\letteritems[\zcnt,\zzcnt]\fi%
}%
\par\bigskip\noindent\hrulefill\par\bigskip
}
\end{document}
Si necesita utilizar los elementos de datos fuera de secuencia o repetidamente, esta variación sería suficiente:
\documentclass{article}
\usepackage{listofitems}
\newcommand\letterdata{
Sam, Main Street, 3 p.m., 14 April 2022\\
Lisa, Elm St., 1500, 25 December 2022}
\newcommand\stencil{%
\noindent Dear <data>{1},
Please report to our <data>{2} location at <data>{3} on <data>{4}.
Thank you again, <data>{1}, for your willingness to assist us in
this matter.
\noindent kind regards,\\
The Management}
\setsepchar{\\/,}
\readlist*\letteritems{\letterdata}
\setsepchar{<data>}
\readlist\stencilitems{\stencil}
\newcommand\fillinthedata[2]{\letteritems[#1,#2]}
\newtoks\lettertoks
\newcommand\addtolettertoks[1]{%
\lettertoks\expandafter{\the\lettertoks#1}}
\newcommand\xaddtolettertoks[1]{%
\lettertoks\expandafter\expandafter\expandafter{\expandafter
\the\expandafter\lettertoks#1}}
\begin{document}
\foreachitem\z\in\letteritems[]{%
\lettertoks{}%
\foreachitem\zz\in\stencilitems[]{%
\xaddtolettertoks{\zz}%
\ifnum\zzcnt<\listlen\stencilitems[]\relax
\addtolettertoks{\fillinthedata}%
\xaddtolettertoks{\expandafter{\zcnt}}%
\fi%
}%
\the\lettertoks
\par\bigskip\noindent\hrulefill\par\bigskip
}
\end{document}