¿Crear una función que genere una letra?

¿Crear una función que genere una letra?

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 datatoolpaquete.(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 letterentornos 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 listofitemspaquete.

\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}

ingrese la descripción de la imagen aquí

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}

ingrese la descripción de la imagen aquí

información relacionada