我想知道,是否可以使用相同的 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}