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