带有 scrlttr2 的信件:如何从一个 *.tex 文件中包含地址和文本

带有 scrlttr2 的信件:如何从一个 *.tex 文件中包含地址和文本

我想知道,是否可以使用相同的 Latex 文档来编写不同的信件,而无需复制包含所有 tex 文件的整个文件夹。要开始写一封新信件,我想输入一个 (!) 包含新地址和 (!) 新文本的单个 *.tex 文件。我可以通过使用两个独立的文件来解决这个问题 - 但是否可以只使用一个包含地址和文本的文件!?

%%% scrlttr2 
\input{praeambel}
\begin{letter}{%
\input{adress1}
%\input{adress2}
%
}
%%%
\input{text1.tex}
\%input{text2.tex}
%%%
\closing{Sincerely yours}
\end{letter}
\end{document}

Source for letter: “adress_and_text.tex”
%%% address 
\setkomavar{subject}{xxx}
\opening{Dear Mr. xxx}
%%%text

答案1

也许你想要:

\begin{filecontents*}{letter1.tex}
\begin{letter}{name 1\\address 1}
\setkomavar{subject}{xxx}
\opening{Dear Mr. xxx}
Text 1
\closing{Sincerely yours}
\end{letter}
\end{filecontents*}

\begin{filecontents*}{letter2.tex}
\begin{letter}{name 2\\address 2}
\setkomavar{subject}{yyy}
\opening{Dear Mr. yyy}
Text 2
\closing{Best regards}
\end{letter}
\end{filecontents*}

\documentclass{scrlttr2}
\begin{document}
\input{letter1}
\input{letter2}
\end{document}

或者

\begin{filecontents*}{letterA.tex}
\setkomavar{address}{name A\\address A}
\setkomavar{subject}{xxx}
\opening{Dear Mr. xxx}
Text A
\closing{Sincerely yours}
\end{filecontents*}

\begin{filecontents*}{letterB.tex}
\setkomavar{address}{name B\\ address B}
\setkomavar{subject}{yyy}
\opening{Dear Mr. yyy}
Text B
\closing{Best regards}
\end{filecontents*}

\documentclass{scrlttr2}
\newkomavar{address}{}
\begin{document}
\begin{letter}{\usekomavar{address}}
  \input{letterA}
\end{letter}

\begin{letter}{\usekomavar{address}}
  \input{letterB}
\end{letter}
\end{document}

答案2

如果我理解正确的话,您想要的是批量信件之类的东西,因此以下代码应该可以满足您的需求。

您在序言中定义联系人和文本,然后它将输出每个人的信件。如果您每次想要不同的文本,只需使用第四个参数\newletter并将其附加到序列中。然后使用它代替\tl_use:N \g_trjw_text_tl

\documentclass{scrlttr2}

\usepackage{xparse}
\ExplSyntaxOn
\seq_new:N \g_trjw_letters_seq
\tl_new:N \g_trjw_text_tl
\NewDocumentCommand { \newletter } { m m m }
    {
        \seq_gput_right:Nn \g_trjw_letters_seq
            {
                {#1}, {#2}, {#3}
            }
    }
\NewDocumentCommand { \settext } { +m }
    {
        \tl_gset:Nn \g_trjw_text_tl { #1 }
    }
\NewDocumentCommand { \typesetletters } { }
    {
        \seq_map_inline:Nn \g_trjw_letters_seq
            {
                \seq_set_from_clist:Nn \l_tmpa_seq { ##1 }
                \setkomavar { subject } { \seq_item:Nn \l_tmpa_seq { 1 } }
                \begin{letter} { \seq_item:Nn \l_tmpa_seq { 2 } }
                    \opening { Dear ~ Mr. ~ \seq_item:Nn \l_tmpa_seq { 3 } }
                    \tl_use:N \g_trjw_text_tl
                    \closing{Sincerely ~ yours}
                \end{letter}
            }
    }
\ExplSyntaxOff
\newletter{Subject}{Some\\ address}{Quack}
\newletter{Subject 2}{Some\\ other\\ address}{Quack2}
\settext{Some long text}

\begin{document}
\typesetletters
\end{document}

相关内容