我添加了 2 个新命令来添加行间空间和列间空间(见下面的代码),但这样做会导致错位\cmidrule
(见下图)。此外,当我在行间添加空间时,文本之间也会产生空间。是否可以删除此空间?
\documentclass{article}
\usepackage{booktabs}
\usepackage{array}
\renewcommand\arraystretch{1.2}
\renewcommand{\tabcolsep}{15pt}
\begin{document}
\begin{table}
\begin{tabular}{@{} lll @{}}
\toprule
Samples & \multicolumn{2}{l}{Observations}\\
\cmidrule(lr){2-3}
&New & Old\\
&Region & Region \\
\midrule
Sample 1&1&5\\
Sample 2&2&6\\
\midrule[\heavyrulewidth]
\end{tabular}
\end{table}
\end{document}
答案1
“多余”的空间并不意外,因为您设置\tabcolsep
为 15pt,而不是默认的 6pt。
默认的修剪量是\cmidrulekern
,一开始是 0.5em,除非您指定l{<dimen>}
或r{<dimen>}
。因此,在 10pt 大小下,修剪量与默认值大致相同(请记住,除非 取消命令,否则会在列的左侧和右侧插入 的\tabcolsep
空间量)。\tabcolsep
@{<tokens>}
右侧的问题是,尽管有尾随,您仍进行修剪@{}
,因此规则将比右边缘短\cmidrulekern
。
标题行之间的间距应设置为 1.2。如果使用标准\arraystretch
设置嵌套标题单元格,则可以缩短间距。tabular
\arraystretch
\documentclass{article}
\usepackage{booktabs}
\usepackage{array}
\renewcommand\arraystretch{1.2}
\setlength{\tabcolsep}{15pt}
\newcommand{\splitcell}[2][c]{%
\begingroup
\renewcommand{\arraystretch}{1}%
\begin{tabular}{@{}#1@{}}
#2
\end{tabular}%
\endgroup
}
\begin{document}
\begin{table}
\begin{tabular}{@{} lll @{}}
\toprule
Samples & \multicolumn{2}{l@{}}{Observations} \\
\cmidrule(l{\tabcolsep}){2-3}
& \splitcell[l]{New \\ Region} & \splitcell[l]{Old \\ Region} \\
\midrule
Sample 1&1&5\\
Sample 2&2&6\\
\bottomrule
\end{tabular}
\end{table}
\end{document}
最后说明:\tabcolsep
必须设置为\setlength
,不同于\arraystretch
(这不是长度,而是因子)。底线规则不应该是\midrule[\heavyrulewidth]
,而应该只是\bottomrule
。
答案2
我发现从左侧修剪 1em 并且完全不从右侧修剪很有用cmidrule
。我还引用了 Steven Segletes 的建议。这是第一个代码,我还将第二列和第三列居中,我认为这样看起来更好;我也用在了bottomrule
最后一条规则中
\documentclass{article}
\usepackage{booktabs}
\usepackage{array,multirow}
\renewcommand\arraystretch{1.2}
\setlength{\tabcolsep}{15pt}
\begin{document}
\begin{table}
\begin{tabular}{@{}lcc@{}}
\toprule
Samples & \multicolumn{2}{c}{Observations}\\
\cmidrule(l{1em}){2-3}
&New & Old\\[-2pt]
&Region & Region \\
\midrule
Sample 1&1&5\\
Sample 2&2&6\\
\bottomrule
\end{tabular}
\end{table}
\end{document}
另外,如果您知道列的宽度,您可以尝试对“新区域”和“旧区域”使用多行。这可能有风险,但您可以尝试:
\documentclass{article}
\usepackage{booktabs}
\usepackage{array,multirow}
\renewcommand\arraystretch{1.2}
\setlength{\tabcolsep}{15pt}
\begin{document}
\begin{table}
\begin{tabular}{@{}lcc@{}}
\toprule
Samples & \multicolumn{2}{c}{Observations}\\
\cmidrule(l{1em}){2-3}
&\multirow{2}{1cm}{New Region} &\multirow{2}{1cm}{Old Region}\\
& & \\
\midrule
Sample 1&1&5\\
Sample 2&2&6\\
\bottomrule
\end{tabular}
\end{table}
\end{document}
答案3
由于您使用的是booktabs
,因此无需手动重置\arraystretch
,它会为您重置。要调整\cmidrule
,请@{\hspace{30pt}}
在第二列规范之前使用 ,无需(lr)
设置。请注意30pt=2*15pt=2\tabcolsep
。
\documentclass{article}
\usepackage{booktabs}
\usepackage{array}
%\renewcommand\arraystretch{1.2}
\renewcommand{\tabcolsep}{15pt}
\begin{document}
\begin{table}
\begin{tabular}{@{}l@{\hspace{30pt}}ll@{}}
\toprule
Samples & \multicolumn{2}{l}{Observations} \\ \cmidrule{2-3}
& New & Old \\
& Region & Region \\ \midrule
Sample 1 & 1 & 5 \\
Sample 2 & 2 & 6 \\
\midrule[\heavyrulewidth]
\end{tabular}
\end{table}
\end{document}