考虑以下 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]{}
或者在之前使用\KOMAoptions
or :\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