这个问题:\addvspace 不能替代 \vspace显示了一种错误消息可能令人困惑的情况。如果\addvspace
在非 vmode 模式下使用,则获取的错误消息为
! LaTeX Error: Something's wrong--perhaps a missing \item.
例如,编译以下简单示例
\documentclass{article}
\begin{document}
a\addvspace{3em}
\end{document}
在这种情况下,错误消息并不是真正具有描述性,可能会产生误导。\addvspace
(第节
16.5 垂直间距)解释了source2e
发生了什么:
\def\addvspace#1{%
\ifvmode
\if@minipage\else
\ifdim \lastskip =\z@
\vskip #1\relax
\else
\@tempskipb#1\relax
\@xaddvskip
\fi
\fi
\else
\@noitemerr
\fi}
因此当 \addvspace 不在 vmode 下使用时,\@noitemerr
会被调用并产生所提到的错误消息,如在 中所见lterror.dtx
。
\gdef\@noitemerr{%
<!autoload> \@latex@error{Something's wrong--perhaps a missing %
<!autoload> \protect\item}\@ehc}
<autoload> \@autoerr\@noitemerr}
您还遇到过哪些其他情况,其中收到的错误消息似乎令人困惑并且(显然)与导致错误的问题无关?
我建议每个答案都附上文本错误消息、产生错误的最小示例代码以及该错误消息原因的简要说明。
答案1
有很多,我更喜欢那些带有一点 TeX 本身幽默风格的,我最喜欢的两个:
对不起,潘多拉。(你这个鬼鬼祟祟的魔鬼。)
要触发此消息类型:
\setbox0=\vbox{\halign{#\hfil\cr a\cr b\cr}}
\unhbox0
\bye
这将触发错误Incompatible list can't be unboxed
。按“h”获取帮助,您将看到错误。
和
假装你是赫尔克里·波洛:检查所有线索
如何触发此消息留给读者练习。线索在文件中TEX.POOL
。
答案2
部分内容取自 TeX FAQ 条目超出容量 [语义嵌套…]:MWE
\documentclass{article}
\begin{document}
\def\silly{\hbox{here's \silly being executed}}
\silly% Be silly
\end{document}
产生以下错误:
! TeX capacity exceeded, sorry [grouping levels=255].
<to be read again>
{
l.4 \silly
If you really absolutely need more capacity,
you can ask a wizard to enlarge me.
答案3
无限循环是否算作令人困惑的错误消息?
在使用 catcodes 的一些早期实验中,我尝试了以下操作:
\documentclass{article}
\newcommand{\makeunderscoreactive}{\catcode`_=\active }
\newcommand{\makeunderscoreother}{\catcode`_=12\relax}
\makeunderscoreother
\def\underscoreother{_}
\makeunderscoreactive
\def_{\underscoreother}
\begin{document}
\texttt{hello_world.txt} % this is fine
$a_0$ % this causes an infinite loop
\end{document}
说实话我还是不太清楚它为什么会表现成那样。