如何对齐表格中旋转的列标题?

如何对齐表格中旋转的列标题?

我有这段代码,是我改编的使用 booktabs 的带有旋转列标签的大表

\usepackage{booktabs}
\begin{document}

\begin{table*}  
\centering
\begin{tabular}{cccccccccc}  

\toprule  
& \multicolumn{2}{>{\begin{minipage}[c]{2cm}}l<{\end{minipage}}}{\centering Group 1\\ some subtitle}
& \multicolumn{4}{>{\begin{minipage}[c]{2cm}}l<{\end{minipage}}}{\centering Group 2\\ some subtitle}
& \multicolumn{3}{>{\begin{minipage}[c]{2cm}}l<{\end{minipage}}}{\centering Group 3\\ some subtitle} \\

 \cmidrule(lr){2-3} \cmidrule(lr){4-7}\cmidrule(lr){8-10}

& \multicolumn{1}{>{\begin{turn}{90}\begin{minipage}[c][0.5cm][c]{2cm}}l<{\end{minipage}\end{turn}}}{some heading\\ blabla}
& \multicolumn{1}{>{\begin{turn}{90}\begin{minipage}[c][0.5cm][c]{2cm}}l<{\end{minipage}\end{turn}}}{not correctly\\ aligned with data}
& \multicolumn{1}{>{\begin{turn}{90}\begin{minipage}[c][0.5cm][c]{2cm}}l<{\end{minipage}\end{turn}}}{some heading \\ blabla}
& \multicolumn{1}{>{\begin{turn}{90}\begin{minipage}[c][0.5cm][c]{2cm}}l<{\end{minipage}\end{turn}}}{some heading}
& \multicolumn{1}{>{\begin{turn}{90}\begin{minipage}[c][0.5cm][c]{2cm}}l<{\end{minipage}\end{turn}}}{some heading}
& \multicolumn{1}{>{\begin{turn}{90}\begin{minipage}[c][0.5cm][c]{2cm}}l<{\end{minipage}\end{turn}}}{some heading\\ this one is long}
& \multicolumn{1}{>{\begin{turn}{90}\begin{minipage}[c][0.5cm][c]{2cm}}l<{\end{minipage}\end{turn}}}{some heading}
& \multicolumn{1}{>{\begin{turn}{90}\begin{minipage}[c][0.5cm][c]{2cm}}l<{\end{minipage}\end{turn}}}{some heading}
& \multicolumn{1}{>{\begin{turn}{90}\begin{minipage}[c][0.5cm][c]{2cm}}l<{\end{minipage}\end{turn}}}{some heading\\ this one is long}\\

\midrule

Sample1 & 122 & 109 &  0 & 0 & 55 & 48 & 63 & 61 & 1 \\
Sample2 & 122 & 109 &  0 & 0 & 55 & 48 & 63 & 61 & 1 \\ 
Sample3 & 122 & 109 &  0 & 0 & 55 & 48 & 63 & 61 & 1 \\ 
Sample4 & 122 & 109 &  0 & 0 & 55 & 48 & 63 & 61 & 1 \\ 

\midrule
Total   & 122 & 109 &  0 & 0 & 55 & 48 & 63 & 61 & 1 \\ 

\bottomrule

\end{tabular}
\end{table*}
\end{document}

它生成了以下内容: 在此处输入图片描述

以下是一些我不太清楚该怎么做的事情:

1) “第 2 组”和“第 3 组”标题未正确居中。我希望每个“第 x 组”标题都居中,无论该标题下方有多少列。

2) 第 1 组的第二个旋转子标题与数据未正确对齐。我希望每个旋转子标题都与相应的数据对齐。

3) 此外,我想在每个组之间插入一个(小的)空白列(例如,在第 1 组和第 2 组之间)。

答案1

makecell使用该包,您可以获得更简单的代码,\rothead无需使用 minipage,只需使用其命令即可。将旋转标题的宽度设置为最长标题行的长度,这样就大功告成了。makecell 包允许在单元格中换行,同时保持单元格在垂直和水平方向上居中(默认情况下)。

此外,cellspace如果此列的说明符以字母为前缀,我会使用该包来确保列单元格内容上方和下方的最小间距S

 \documentclass{article}
\usepackage{array, booktabs}
\usepackage{rotating}
\usepackage{makecell}
\renewcommand\theadfont{\normalsize}

\usepackage{cellspace}
\setlength\cellspacetoplimit{3pt}
\setlength\cellspacebottomlimit{3pt}

\begin{document}

\begin{table*}
\settowidth\rotheadsize{\theadfont aligned with data}
\centering
\begin{tabular}{Scc@{\hskip 1pt}cc@{\hskip 3pt}cc@{\hskip 3pt}ccc@{\hskip 3pt}c}
\toprule
& \multicolumn{2}{c}{\thead{Group 1\\some subtitle}}
& \multicolumn{4}{c}{\thead {Group 2\\ some subtitle}}
& \multicolumn{3}{c}{\thead {Group 3\\ some subtitle}} \\
 \cmidrule(lr){2-3} \cmidrule(lr){4-7}\cmidrule(lr){8-10}
& \rothead{some heading\\[-0.5ex] blabla}
& \rothead{now correctly\\[-0.5ex] aligned with data}
& \rothead{some heading \\[-0.5ex] blabla}
& \rothead{some heading}
& \rothead{some heading}
& \rothead{some heading\\[-0.5ex] this one is long}
& \rothead{some heading}
& \rothead{some heading}
& \rothead{some heading\\[-0.5ex] this one is long}\\
\midrule
\addlinespace
Sample1 & 122 & 109 & 0 & 0 & 55 & 48 & 63 & 61 & 1 \\
Sample2 & 122 & 109 & 0 & 0 & 55 & 48 & 63 & 61 & 1 \\
Sample3 & 122 & 109 & 0 & 0 & 55 & 48 & 63 & 61 & 1 \\
Sample4 & 122 & 109 & 0 & 0 & 55 & 48 & 63 & 61 & 1 \\
\midrule
Total & 122 & 109 & 0 & 0 & 55 & 48 & 63 & 61 & 1 \\
\addlinespace
\bottomrule
\end{tabular}
\end{table*}

\end{document} 

在此处输入图片描述

相关内容