表格环境中的奇怪输出

表格环境中的奇怪输出

\\我创建了一个表格,但在最后一行之前没有使用\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 为使自身回到正轨而采取的任何其他行动,没有任何真正的理由。

相关内容