使用 booktabs 的带有旋转列标签的大表

使用 booktabs 的带有旋转列标签的大表

我正在尝试使用 booktabs 包将一个大表格放入我的文档中,但它太宽了。下面给出了表格中几行的示例。我使用行是\noindent\makebox[\textwidth]{% 因为以前它似乎对我有用,但现在没有帮助。

例子:

\usepackage{graphicx}  
\usepackage{booktabs}  

\begin{document}  

\begin{table}  
\small  
\begin{center}  
\noindent\makebox[\textwidth]{%  
\begin{tabular}{lcccccccccccccccccc}  
\toprule  
Event & \multicolumn{2}{c}{Counts}& \multicolumn{8}{c}{Genres} &\multicolumn{8}{c}{Genres blabla} \\  
\cmidrule(r){1-1} \cmidrule(r){2-3} \cmidrule(r){4-11}\cmidrule(r){12-19}  
&&&&&&&&&&&&&&&&&&\\  
\midrule  
Test1 & 138 & 8 & 0 & 0 & 60 & 4 & 61 & 4 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 16 & 0\\  
Test2 & 162 & 136 & 0 & 0 & 71 & 63 & 89 & 72 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 2 & 1\\  
Test3 & 161 & 120 & 0 & 0 & 66 & 40 & 85 & 77 & 0 & 0 & 0 & 0 & 0 & 0 & 6 & 3 & 4 & 0\\  
Test4 & 122 & 109 & 0 & 0 & 55 & 48 & 63 & 61 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 3 & 0\\  
Test5 & 126 & 3 & 1 & 0 & 45 & 1 & 36 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 43 & 1\\  
\bottomrule
\end{tabular}
}
\end{center}
\end{table}

\end{document}

其次,&&&&&&&&&&&&&&&&&&\\我需要在行上添加列名。但是这些列名很长,所以我想将它们旋转大约 45 度并彼此靠近。我试过了,\rotatebox{45}{sentence1} & \rotatebox{45}{sentence2} & ... ,但那并没有完全达到我想要的效果。使用\rotatebox, 的头部sentence2将从 的尾部sentence1结束的地方开始。我希望 的头部sentence2紧挨着 的头部sentence1

下面是我的意思的一个例子。编译此代码时,3 个标题之间有很大的间距。我希望第二个标题的单词“this”紧挨着第一个标题的“this”。等等。

\documentclass[12pt]{article}
\usepackage{graphicx}

\begin{document} 
\begin{table}  
\begin{tabular}{ccc}
\rotatebox{45}{This is a very long heading} & \rotatebox{45}{This is a very long heading} & \rotatebox{45}{This is a very long heading}
\end{tabular}
\end{table}
\end{document}

我希望这是有道理的

答案1

您可以尝试减少\tabcolsep(列开头和其内容之间的空间;默认值为6pt)并更改为较小的字体大小。

编辑:将标题旋转 45 度然后重叠并不是一个好主意,因为它可能会在视觉上造成混淆;更好的方法是将标题旋转 90 度;这可以通过旋转环境minipage来实现。turn旋转包裹:

\documentclass{article}
\usepackage{rotating} 
\usepackage{array}
\usepackage{booktabs}  

\newcolumntype{R}[1]{>{\begin{turn}{90}\begin{minipage}{#1}\scriptsize}l%
<{\end{minipage}\end{turn}}%
}

\begin{document}  

\begin{table}  
  \footnotesize
  \setlength\tabcolsep{3pt}
  \centering
  \begin{tabular}{lcccccccccccccccccc}  
    \toprule  
    Event & \multicolumn{2}{c}{Counts}& \multicolumn{8}{c}{Genres} &
      \multicolumn{8}{c}{Genres blabla} \\  
    \cmidrule(r){1-1} \cmidrule(r){2-3} \cmidrule(r){4-11}\cmidrule(l){12-19}  
    \multicolumn{1}{R{2cm}}{some long long\\ heading} 
      & \multicolumn{1}{R{2cm}}{some long long\\ heading}
      & \multicolumn{1}{R{2cm}}{some long long\\ heading}
      & \multicolumn{1}{R{2cm}}{short heading}
      & \multicolumn{1}{R{2cm}}{some long long\\ heading}
      & \multicolumn{1}{R{2cm}}{some long long\\ heading}
      & \multicolumn{1}{R{2cm}}{short heading}
      & \multicolumn{1}{R{2cm}}{some long long\\ heading}
      & \multicolumn{1}{R{2cm}}{some long long\\ heading}
      & \multicolumn{1}{R{2cm}}{short heading}
      & \multicolumn{1}{R{2cm}}{some long long\\ heading}
      & \multicolumn{1}{R{2cm}}{short heading}
      & \multicolumn{1}{R{2cm}}{some long long\\ heading}
      & \multicolumn{1}{R{2cm}}{short heading}
      & \multicolumn{1}{R{2cm}}{some long long\\ heading}
      & \multicolumn{1}{R{2cm}}{short heading}
      & \multicolumn{1}{R{2cm}}{short heading}
      & \multicolumn{1}{R{2cm}}{short heading}
      & \multicolumn{1}{R{2cm}}{short heading} \\
    \cmidrule(r){1-1} \cmidrule(rl){2-2} \cmidrule(rl){3-3} \cmidrule{4-4} \cmidrule(rl){5-5}
       \cmidrule(rl){6-6} \cmidrule{7-7} \cmidrule(rl){8-8} \cmidrule(rl){9-9} \cmidrule{10-10}
       \cmidrule(rl){11-11} \cmidrule{12-12} \cmidrule(rl){13-13} \cmidrule{14-14}
      \cmidrule(rl){15-15} \cmidrule(r{1pt}){16-16} \cmidrule(l{1pt}r{1pt}){17-17}
      \cmidrule(l{1pt}r{1pt}){17-17}\cmidrule(l{1pt}r{1pt}){18-18}\cmidrule(l{1pt}){19-19}  
    Test1 & 138 & 8 & 0 & 0 & 60 & 4 & 61 & 4 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 16 & 0 \\  
    Test2 & 162 & 136 & 0 & 0 & 71 & 63 & 89 & 72 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 2 & 1 \\  
    Test3 & 161 & 120 & 0 & 0 & 66 & 40 & 85 & 77 & 0 & 0 & 0 & 0 & 0 & 0 & 6 & 3 & 4 & 0 \\  
    Test4 & 122 & 109 & 0 & 0 & 55 & 48 & 63 & 61 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 3 & 0 \\  
    Test5 & 126 & 3 & 1 & 0 & 45 & 1 & 36 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 43 & 1 \\  
  \bottomrule
  \end{tabular}
\end{table}

\end{document}

如果以上方法都不适用,另一个选择是旋转整个桌子,例如使用旋转包裹。

答案2

{NiceTabular}这是一种使用(≥ 6.22 2023-08-14)构建该表的方法,nicematrix其中标签旋转 90°,如 Gonzalo Medina 所建议的那样。

\documentclass{article}
\usepackage{booktabs}  
\usepackage{nicematrix}

\begin{document}  

\begin{table}  
  \footnotesize
  \setlength\tabcolsep{3pt}
  \centering
  \begin{NiceTabular}{l*{18}{c}}  
    \toprule  
    Event & \Block{1-2}{Counts} && \Block{1-8}{Genres} &&&&&&&&
      \Block{1-8}{Genres blabla} \\  
    \cmidrule(r){1-1} \cmidrule(r){2-3} \cmidrule(r){4-11}\cmidrule(l){12-19}  
    \RowStyle{\rotate\scriptsize}
        \Block{}{some long long\\ heading} 
      & \Block{}{some long long\\ heading}
      & \Block{}{some long long\\ heading}
      & short heading
      & \Block{}{some long long\\ heading}
      & \Block{}{some long long\\ heading}
      & short heading
      & \Block{}{some long long\\ heading}
      & \Block{}{some long long\\ heading}
      & short heading
      & \Block{}{some long long\\ heading}
      & short heading
      & \Block{}{some long long\\ heading}
      & short heading
      & \Block{}{some long long\\ heading}
      & short heading
      & short heading
      & short heading
      & short heading \\
    \cmidrule(r){1-1} \cmidrule(rl){2-2} \cmidrule(rl){3-3} \cmidrule{4-4} \cmidrule(rl){5-5}
       \cmidrule(rl){6-6} \cmidrule{7-7} \cmidrule(rl){8-8} \cmidrule(rl){9-9} \cmidrule{10-10}
       \cmidrule(rl){11-11} \cmidrule{12-12} \cmidrule(rl){13-13} \cmidrule{14-14}
      \cmidrule(rl){15-15} \cmidrule(r{1pt}){16-16} \cmidrule(l{1pt}r{1pt}){17-17}
      \cmidrule(l{1pt}r{1pt}){17-17}\cmidrule(l{1pt}r{1pt}){18-18}\cmidrule(l{1pt}){19-19}  
    Test1 & 138 & 8 & 0 & 0 & 60 & 4 & 61 & 4 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 16 & 0 \\  
    Test2 & 162 & 136 & 0 & 0 & 71 & 63 & 89 & 72 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 2 & 1 \\  
    Test3 & 161 & 120 & 0 & 0 & 66 & 40 & 85 & 77 & 0 & 0 & 0 & 0 & 0 & 0 & 6 & 3 & 4 & 0 \\  
    Test4 & 122 & 109 & 0 & 0 & 55 & 48 & 63 & 61 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 3 & 0 \\  
    Test5 & 126 & 3 & 1 & 0 & 45 & 1 & 36 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 43 & 1 \\  
  \bottomrule
  \end{NiceTabular}
\end{table}

\end{document}

上述代码的输出

相关内容