\documentclass{article}
\begin{document}
\begin{figure}
\centering
\begin{tabular}{*{3}{c}}
1 & 1 & 1 \\
1 & 1 & 1 \\
\end{tabular}
\vspace{3mm}
\begin{tabular}{*{3}{c}}
1 & 1 & 1 \\
1 & 1 & 1 \\
\end{tabular}
\end{figure}
\end{document}
我想创建两个相互叠放的表格。但是,底部表格略微向顶部表格的右侧对齐。差异很小,但很明显。为什么会这样?我该如何修复?
答案1
您必须在 之前留一个空行\vspace{3mm}
,而不是在 之后。另一方面,您也可以只使用一个空行tabular
,并使用 添加垂直空格\\[3mm]
。
\documentclass{article}
\begin{document}
\begin{figure}[htb]
\centering
\begin{tabular}{*{3}{c}}
1 & 1 & 1 \\
1 & 1 & 1 \\
\end{tabular}
\vspace{3mm}
\begin{tabular}{*{3}{c}}
1 & 1 & 1 \\
1 & 1 & 1 \\
\end{tabular}
\end{figure}
Or
\begin{figure}[htb]
\centering
\begin{tabular}{*{3}{c}}
1 & 1 & 1 \\
1 & 1 & 1 \\[3mm]
1 & 1 & 1 \\
1 & 1 & 1 \\
\end{tabular}
\end{figure}
\end{document}
答案2
这是一个有趣的谜题,但也有一个解释。
- 行尾
\end{tabular}
算作一个空格 - 后面的空行
\vspace{3mm}
与 相同\par
。
因此,我们可以这样审视情况:
\mbox{X} \vspace{3mm}\par
因为表格和框之间没有概念上的区别。
由于\vspace
TeX 仍在创建段落时发现 ,因此\@bsphack
–\@esphack
机制开始发挥作用。此机制用于避免在\linebreak[2]
处理类似命令时插入比所需更多的空格。由于\vspace{3mm}
前面有一个空格,因此 TeX 将根据\@bsphack
–规则忽略后面的空格\@esphack
;但相同的规则意味着在 之后插入一个零粘连块\vspace{3mm}
。
因此我们有这个:
X<normal space><vadjust item><zero space>\par
(其中<vadjust item>
表示将要考虑的垂直空间后段落被分割成行)。执行 now\par
操作,删除最后一块粘连(零空格),但<vadjust item>
保留 X 和 之间的正常空格。
这个空间是造成轻微但明显的错位的原因。
解决方案:使用\vspace
后尽可能使用空白行;在某些情况下,将其放在段落内有其优势,但绝不能将其作为段落的最后一项。