创建乳胶表并强制多行作为长列标题

创建乳胶表并强制多行作为长列标题

我想创建一个包含不同汇总统计数据的表格。但是,表格对于页面来说太宽,因此无法显示整个表格。这是因为列标题太长,我尝试自动将列标题拆分为多行,以便整个表格显示在页面内。

这是一个例子:

\documentclass[a4paper,12pt]{article}
\usepackage{booktabs}
\usepackage{threeparttable}
\usepackage{multirow}
\usepackage{booktabs}

\begin{document}

\begin{table}
\centering
\begin{threeparttable}
\caption{Title of table}
\label{Label}

\begin{tabular}{lrrrr}
\toprule
&  Long column header 1 &  Long column header 2 &  Long column header 3 &  Long column header 4 \\
\midrule
2013 & 0.00 & 0.00 & 0.00 & 0.00 \\
2014 & 0.00 & 0.00 & 0.00 & 0.00 \\
2015 & 0.00 & 0.00 & 0.00 & 0.00 \\
2016 & 0.00 & 0.00 & 0.00 & 0.00 \\
\bottomrule
\end{tabular}

    \begin{tablenotes}[para, flushleft] 
    \small
    Description of table
    \end{tablenotes}
    \end{threeparttable}
\end{table}

\end{document}

是否有一种简单有效的方法可以将长列标题拆分为两行或三行子行,以便整个表格在文本宽度内显示在页面上?

非常感谢您的建议!

答案1

您可以通过用列类型的居中版本替换列类型的四个实例r(正如您(重新)发现的那样,它不允许自动换行)p并适当选择四个数据列的宽度(例如,)来轻松实现格式化目标2.5cm

在此处输入图片描述

\documentclass[a4paper,12pt]{article}
\usepackage{booktabs,threeparttable}
\usepackage{array} % <-- new
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}} % <-- new

\begin{document}

\begin{table}
\centering
\begin{threeparttable}

\caption{Title of table}
\label{Label}

\begin{tabular}{@{} l *{4}{C{2.5cm}} @{}}
\toprule
&  Long column header 1 &  Long column header 2 
&  Long column header 3 &  Long column header 4 \\
\midrule
2013 & 0.00 & 0.00 & 0.00 & 0.00 \\
2014 & 0.00 & 0.00 & 0.00 & 0.00 \\
2015 & 0.00 & 0.00 & 0.00 & 0.00 \\
2016 & 0.00 & 0.00 & 0.00 & 0.00 \\
\bottomrule
\end{tabular}

\smallskip
\begin{tablenotes}[para, flushleft] 
\small
    Description of table \dots
\end{tablenotes}

\end{threeparttable}
\end{table}

\end{document}

答案2

使用tabularray包装很简单:

\documentclass{article}
\usepackage{tabularray}
\UseTblrLibrary{booktabs, siunitx}

\begin{document}
    \begin{table}[ht]
\begin{talltblr}[
caption = {Title of table},
  label = {tab:Label},
remark{Note} = {Something noteworthy.},
                ]{colspec={l *{4}{X[c, si={table-format=1.3}]}}
                 }
    \toprule
    &  {{{Long column header 1}}} 
            &  {{{Long column header 2}}} 
                    &  {{{Long column header 3}}} 
                            &  {{{Long column header 4}}} \\
    \midrule
2013 & 0.00 & 0.00  & 0.00  & 0.00 \\
2014 & 0.00 & 0.00  & 0.00  & 0.00 \\
2015 & 0.00 & 0.00  & 0.00  & 0.00 \\
2016 & 0.00 & 0.00  & 0.00  & 0.00 \\
    \bottomrule
\end{talltblr}
    \end{table}
\end{document}

在此处输入图片描述

正如您所看到的,表中的S列封装在X列类型中。而不是threeparttable使用包talltblr中定义的环境tabularray。有关此(相对较新的)包的详细信息,请参阅其文档。

答案3

该包通过其命令makecell可以帮助您解决此类问题;\thead

\documentclass{article}
\usepackage{threeparttable, booktabs}
\usepackage{makecell}
\renewcommand{\theadfont}{\small\bfseries}
\usepackage{showframe}

\begin{document}

\begin{table}
\centering
\begin{threeparttable}
\caption{Title of table}
\label{Label}

\begin{tabular}{lrrrr}
\toprule
& \thead{Long column\\ header 1}& \thead{Long column\\ header 2} & \thead{Long column\\ header 3} & \thead{Long column\\ header 4} \\
\midrule
2013 & 0.00 & 0.00 & 0.00 & 0.00 \\
2014 & 0.00 & 0.00 & 0.00 & 0.00 \\
2015 & 0.00 & 0.00 & 0.00 & 0.00 \\
2016 & 0.00 & 0.00 & 0.00 & 0.00 \\
\bottomrule
\end{tabular}

    \begin{tablenotes}[para, flushleft]
    \small
    Description of table
    \end{tablenotes}
    \end{threeparttable}
\end{table}

\end{document} 

在此处输入图片描述

相关内容