\documentclass{article}
\begin{document}
\begin{tabular}{r|r@{\,}l|}
1&2&300\\
10&-2&X\\
\multicolumn{2}{r@{\,}}{2}&\multicolumn{1}{l}{X}
\end{tabular}
\end{document}
根据 Lamport 的说法,列格式由三部分组成:
r|
+ r@{\,}
+l|
因此我期望两个 X 位于同一位置。但第三行中的 X 向右移动(与第二行中的 X 相比)。
通过反复试验,我找到了一个解决方案,即\multicolumn{1}{l}{X}
用替换\multicolumn{1}{@{}l}{X}
。这种行为背后的原因是什么?
答案1
你只给出了规则的一部分,而你展示的输出受到另一部分的影响。
确实(除了第一列之外)列间材料来自@{..}
或被|
添加到列的右边缘,因此@{\,}
在第 2 列的右边缘而不是第 3 列的左边缘添加了一个窄空间。
但(@
与!
array
)不仅添加其参数中指定的材料;它移除空间\tabcolsep
。\tabcolsep
被添加到两个都每列的两侧并使用@
将其从当前列的右侧移除和下面的左边缘。
\tabcolsep
因此,第 3 列左侧没有填充并且与第 2 列齐平,实现此目的的最简单方法\multicolumn
就是如您所展示的那样应用,@{}
这不会增加任何内容但会删除\tabcolsep
空间。