文字を生成する関数を作成しますか?

文字を生成する関数を作成しますか?

私はたくさんの手紙を書かなければなりませんが、そのたびに名前、日付、住所だけを修正しなければなりませんが、内容はいつも同じです。

短いバージョンは、「拝啓 [名前] 様、[住所] より [時刻] [日付] にご来社ください。」のようになります。

これを自動化する方法はありますか? テンプレートから手紙を作成するために、Latex に適切なフィールドを挿入したいだけです。

答え1

datatool私はパッケージを使ってこのようにするのが好きです(コメントでも提案されているように):

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

次に、すべてのアドレスをaddresses.csv次のように別の に格納します。

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

もちろん、完成した手紙はあなたの好みのスタイルではないかもしれません。しかし、KOMAのオプションはあなたの自由です。KOMAマニュアル

答え2

もう少し簡単な方法としては、letter1 つのドキュメントに複数の環境を含めることができるということを覚えておくことです。つまり、次のように記述できます。

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

答え3

パッケージの使用方法は次のとおりですlistofitems

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

ここに画像の説明を入力してください

データ項目を順序どおりに使用せず、繰り返し使用する必要がある場合は、次のバリエーションで十分です。

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

ここに画像の説明を入力してください

関連情報