我有一张这样的桌子:
\documentclass{article}
\begin{document}
\begin{tabular}{rp{1cm}}%
1&\nobreak\hfill\rlap{9}\\
1&a\nobreak\hfill\rlap{9}
\end{tabular}
\end{document}
编译后的结果如下:
如果我明确添加,为什么会发生这种情况\nobreak
?
我的第一个想法是,也许当启动表格单元格时,TeX 处于垂直模式,然后会\nobreak
产生不同的效果,但后来我尝试了这个:
\documentclass{article}
\begin{document}
\begin{tabular}{rp{1cm}}%
1&\ifvmode v\else h\fi\nobreak\hfill\rlap{9}\\
1&a\nobreak\hfill\rlap{9}
\end{tabular}
\end{document}
编译结果为:
这表明 TeX是水平模式。或者是排版触发了水平模式h
(我知道这没有意义)。或者 TeX 处于薛定谔模式 :)
答案1
在列的开头,p
tex 处于垂直模式,因此\nobreak
(这实际上是普通的 tex,不能在 latex 中使用)将向垂直列表添加惩罚,以防止中断(如果您使用了,\nolinebreak
行为会有所不同)
在单元格开头进行的测试\ifvmode
不会按预期执行,因为您会获得相同的值,l
或者p
单元格或数组数学单元格,因为扩展发生在 tex 正在寻找\omit
(\multicolumn
)时,因此它会为所有单元格提供相同的答案前tex 决定为列插入隐式 parbox p
。(将其&\ifvmode
与触发列模板插入的&\relax\ifvmode
位置进行比较,然后您就可以区分 h 模式列和 v 模式列。)relax
c
p
您看到的垂直偏移是因为在列的开始p
处有一个\everypar
添加的设置\strut
(具有正常表格支柱的高度但没有深度),所以如果段落是通过正常段落材料开始的,那么这种方法很有效,但是a
如果您使用 tex 原始框(例如\rlap
不开始段落的框),则效果会更差。