Eine Funktion erstellen, die einen Brief generiert?

Eine Funktion erstellen, die einen Brief generiert?

Ich muss viele Briefe schreiben, bei denen ich jedes Mal nur die Namen, Daten und Adressen ändern muss, der Inhalt aber immer derselbe ist.

Eine Kurzfassung wäre etwa „Sehr geehrte/r [Name], Sie müssen sich am [Uhrzeit] [Datum] von [Adresse] aus melden.“

Gibt es eine Möglichkeit, dies zu automatisieren? Ich möchte einfach die richtigen Felder einfügen, damit Latex den Brief aus einer Vorlage erstellen kann.

Antwort1

Ich mache es gerne so, mit dem datatoolPaket(wie auch in den Kommentaren vorgeschlagen):

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

Dann habe ich alle Adressen in einer separaten addresses.csv, so:

Firstname,Lastname,Street,Postal,Town
John,Doe,Example Street 1, 12345, North Pole
Jane,Doe,Example Street 2, 12345, North Pole

Der resultierende Brief ist natürlich wahrscheinlich nicht so gestaltet, wie Sie es sich wünschen. Aber Ihnen steht die ganze Welt der KOMA-Optionen zur Verfügung. Schauen Sie einfach in dieKOMA-Handbuch!

Antwort2

Ein etwas einfacherer Ansatz besteht darin, sich zu merken, dass Sie mehrere Umgebungen in einem einzigen Dokument haben können letter. Sie könnten also etwa Folgendes schreiben:

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

Antwort3

Hier ist ein Weg mit dem listofitemsPaket.

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

Bildbeschreibung hier eingeben

Wenn Sie die Datenelemente in falscher Reihenfolge oder wiederholt verwenden müssen, reicht diese Variante aus:

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

Bildbeschreibung hier eingeben

verwandte Informationen