我对 LateX 还不是很熟悉。我想实现的是让 3 列表格中的两列过度支撑。我的意思是,我不想让任何一列都过度支撑。
现在我得到了这个:
\begin{tabular}{c | p{2cm} | c@{,} l}
\multicolumn{2}{c}{$overbrace{Col1 | Col2}$} & \multicolumn{2}{c}{Col3} \\
R1C1 & R1C2 & 1&24123
R2C1 & R2C2 & 12&3123
\end{tabular}
我认为该解决方案可能很简单,但我无法理解。有什么想法吗?
答案1
这是您可以做到的一种方法。我稍微简化了表格的结构,只是为了让后面的内容更清晰。(顺便说一句,您\\
在第一行的末尾漏掉了一个。)
% name a new length:
\newlength{\TwoColumnWidth}
% set it to the width of the first two columns:
\settowidth{\TwoColumnWidth}{%
\begin{tabular}{ll}
R1C1 & R1C2\\
R2C1 & R2C2\\
\end{tabular}}
% create a zero-width box on the left of your table:
\makebox[0pt][l]{%
% put the contents of the box high enough to sit above the table:
\raisebox{2ex}{%
% fill the box with your overbrace of the previously specified length:
$\overbrace{\hspace{\TwoColumnWidth}}$}}%
% and then put your table in (making sure to align it at the top `[t]`):
\begin{tabular}[t]{llll}
R1C1 & R1C2 & 1&24123\\
R2C1 & R2C2 & 12&3123
\end{tabular}
另外两条评论:
许多出版社避免在表格中使用垂直线。严格的左边距使它们变得多余。为了获得更高质量的表格,请查看booktabs.sty
,事实上,这使得垂直线略微不可靠。
对于您的特定表格,我认为如果您消除与过度支撑相关的列边缘周围的默认间距,效果会更好。即使用:
\settowidth{\TwoColumnWidth}{\begin{tabular}{@{}ll@{}}
和
\begin{tabular}[t]{@{}llll}
后期编辑
我不知道这是否与您的目的相关,但我只想评论一下您的初始草图(BeUndead 对此进行了跟进)和我的回复之间的区别。本质上,这与表格顶行相对于文本的基线有关。按照我所建议的方式,文本和表格顶行的基线保持不变。将括号放在表格顶行会使括号与普通文本对齐。不确定这对您是否重要:
如果你将括号放在表格中,你可能仍想减少它下面的空间,在后面使用方括号高度\\
:
\multicolumn2{@{}c@{}}{$\overbrace{\hspace{\TwoColumnWidth}}$}\\[-.8ex]%
答案2
这是另一种方法,使用时可能需要稍微弄乱一下,但应该不会太难:
\documentclass{article}
\usepackage{multirow}
\begin{document}
\begin{table}[h]
\centering
\begin{tabular}{ c|c|c|c }
\multicolumn{2}{c}{$\overbrace{\rule{2.6cm}{0pt}}$} & \multicolumn{2}{c}{} \\
Col1 & Col2 & \multicolumn{2}{c}{Col3} \\
R1C1 & R1C2 & R1C3 & R1C4 \\
R2C1 & R2C2 & R2C3 & R2C4
\end{tabular}
\end{table}
\end{document}
这将产生类似的效果(忽略丑陋的支撑,文档我端的缩放级别选择不当):