信件中缺少地址导致出现“此处无行结束”错误

信件中缺少地址导致出现“此处无行结束”错误

考虑以下 LaTeX 文件:

\documentclass[12pt]{scrlttr2}
\begin{document}
\begin{letter}{}
  \opening{}
\closing{}
\end{letter}
\end{document}

我得到了错误

LaTeX Error: There's no line here to end.

为什么会发生此错误?如果我向地址字段(即的第二个参数)添加某些内容,错误就会消失。\begin{letter}例如\phantom{},错误就会消失。

我正在寻找详细的分析,希望我能从中学到一些东西。

答案1

错误来自于\\如果它前面没有文本(“没有行结束”)所以推测这个类是\\在地址后面使用的。\mbox{}可能最简单的东西是一个不可见的文本

要查看更多,请添加

\errorcontextlines=100

那么你的文档就会产生错误

! LaTeX Error: There's no line here to end.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              
                                                  
\GenericError  ...                                
                                                  \endgroup 
\\->\ifhmode \unskip \else \@nolnerr 
                                     \fi \par \@ifstar {\nobreak \@xcentercr...
<argument> ...font {toname}{\usekomavar {toname}\\
                                                  }}{\usekomafont {toaddress...

\\@savevbox ...4#5#6->\begingroup \vbox to #2{#1#3
                                                  }\if@savevbox@warning \@sa...

\rlap  #1->\hb@xt@ \z@ {#1
                          \hss }
<argument> ...MessageBreak \string \specialmail }}
                                                  }
\vb@t@z ...x \z@ \vbox to\z@ {\color@begingroup #1
                                                  \color@endgroup \vss }\set...

\@addrfield ...sageBreak \string \specialmail }}}}
                                                  \vskip -\useplength {toadd...

\opening ...arks \@firstheadfootfield \@addrfield 
                                                  \@locfield \ifdim \useplen...
l.5   \opening{}
                
? 

在错误堆栈中你会看到调用

\usekomavar {toname}\\

如果其为空,则添加将会\\失败。toname

答案2

其他答案中已经解释了错误信息的原因,所以我的回答有点离题。

为了避免出现错误消息,您必须使用选项addressfield=false。对于单个字母,可以为letter环境本身设置此选项

\begin{letter}[addrfield=false]{}

或者在之前使用\KOMAoptionsor :\KOMAOption\opening

\begin{letter}{}
\KOMAoptions{addrfield=false}% or \KOMAoption{addrfield}{false}
\opening{}

如果文档中的所有信件都应该有空的地址字段,那么您可以addrfield=false在加载类时设置

\documentclass[addrfield=false]{scrlttr2}

或在序言中使用\KOMAoptions或。\KOMAOption

如果参数为空(即没有空格等),您还可以修补letter环境以自动设置:addrfield=false

\documentclass[12pt]{scrlttr2}
\usepackage{xpatch}
\xpretocmd{\letter}{\IfArgIsEmpty{#2}{\KOMAoptions{addrfield=false}}{}}{}{\PatchFailed}

\begin{document}
\begin{letter}{}
%\setkomavar{toname}{Bar}
%\setkomavar{toaddress}{Bar Address}
  \opening{}
\closing{}
\end{letter}
\begin{letter}{Foo\\Foo Address}
  \opening{}
\closing{}
\end{letter}
\end{document}

toname但这样即使变量和不为空也不会有地址字段。请注意,这些变量可以在前导码中、环境外部或和之间toaddress设置。letter\begin{letter}{}\opening

相关内容