\cmidrule 外边缘未正确水平对齐且文本行之间的垂直空间较小

\cmidrule 外边缘未正确水平对齐且文本行之间的垂直空间较小

我添加了 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} 

在此处输入图片描述

相关内容