\\
我创建了一个表格,但在最后一行之前没有使用\hline
(我知道这是错误的),并且在最后一个单元格及其内容中也有一个单词“height”。这个词是从哪里来的?为什么?
\documentclass[12pt]{article}
\begin{document}
\begin{tabular}{|l|l|}
\hline
1 & 2\\
\hline
3 & 4\\
\hline
5 & 6
\hline
\end{tabular}
\end{document}
答案1
当 TeX 生成错误时(如果您不停止并让它继续),它会进行本质上任意的“更正”,旨在使其摆脱困境并允许它处理文档的其余部分,以加快查找后续错误的速度,而不是只修复一个错误然后重新运行。因此,在这种情况下,TeX 的实际输出是
! Misplaced \noalign.
\hline ->\noalign
{\ifnum 0=`}\fi \hrule \@height \arrayrulewidth \futurelet...
l.12 \hline
\\
通过在之前添加 来修复\hline
。任何在错误后生成的 PDF 都应仅被视为可能的调试辅助,您不应认为任何输出是“奇怪的”。PDF 输出本质上是任意的,在这种情况下\noalign
和\hrule
在此上下文中被忽略(在错误之后),因此\@height
扩展为height
不会被用作 的参数\hrule
,而是被排版。
每个 TeX 基元都具有内置的“校正”行为,以防在错误情况下使用,这不受 LaTeX 等宏的控制。
这里\noalign
不是表格行的开始,错误发生后它将被忽略。
这意味着\noalign
没有启动垂直模式,因此\hrule
会产生错误。由于您处于l
列中,因此处于内部水平模式,因此在这种情况下\hrule
错误更正将不执行任何操作,因此height
将进行排版。如果您处于p
列中,您将处于外部水平模式,并且更正会有所不同,\hrule
将使用最后一列单元格开始一个新段落,然后在该单元格上方绘制一条规则,并且不会height
进行排版。(尝试在您的示例中更改|l|l|
为)|p{3cm}|p{3cm}|
因此,在发生错误后实际排版的内容本质上只是任意的垃圾,因为 TeX 会插入或忽略它需要的任何标记以恢复无错误的情况。因此,关于这种 pdf 唯一有用的问题是垃圾出现在哪里,因为这是一个调试辅助工具,可以指出源代码中需要修复的内容。对于任何排版或消失或在数学模式下设置的特定文本或 TeX 为使自身回到正轨而采取的任何其他行动,没有任何真正的理由。