为了优化某些列的宽度,使表格适合文本,我使用了\shortstack
。但是,现在我对标题的外观并不满意(参见图片)。我使用的列中的标题文本\shortstack
现在太靠近顶部线了。此外,我没有使用的标题\shortstack
没有与顶部对齐\hline
,而它们应该对齐。在使用时有没有办法纠正这个问题\shortstack
,或者有没有更好的解决方案来解决列的宽度问题?
\documentclass[12pt]{report}
\usepackage{tabulary}
\usepackage[maxfloats=30,morefloats=12]{morefloats}
\usepackage{booktabs}
\usepackage{float,lscape}
\usepackage{longtable}
\usepackage{pdflscape}
\usepackage{tabularx}
\usepackage{multirow}
\usepackage{bigstrut}
\begin{document}
\begin{table}[htbp]
\centering
\caption{ETV 1830 - 1930}
\tiny
\begin{tabular}{rrrrrrrrr}
\hline
\multicolumn{1}{c}{\textbf{Year}} & \multicolumn{1}{c}{\textbf{Organizations}} & \multicolumn{1}{c}{\textbf{Associations}} & \multicolumn{1}{c}{\textbf{\shortstack{Paying\\ members}}} & \multicolumn{1}{c}{\textbf{in \% of total}} & \multicolumn{1}{c}{\textbf{\shortstack{Non-paying\\ members}}} & \multicolumn{1}{c}{\textbf{in \% of total}} & \multicolumn{1}{c}{\textbf{\shortstack{Total\\ members}}} & \multicolumn{1}{c}{\textbf{\shortstack{Active\\ members}}} \bigstrut\\
\hline
1830 & - & 2 & - & - & - & - & - & - \bigstrut[t]\\
31-40 & - & 7 & - & - & - & - & - & - \\
\hline
\end{tabular}%
\label{tab:addlabel}%
\end{table}%
\end{document}
答案1
为了尽量减少对原始代码的更改,从而实现所需的结果,我添加了一行并更改了另一行。我首先添加了一行\usepackage[usestackEOL]{stackengine}
以访问\addstackgap
宏。然后,我修改了 的标题行tabular
,以便将其中一个拥挤的堆栈包含在 中\addstackgap
,例如\multicolumn{1}{c}{\addstackgap{\textbf{\shortstack{Paying\\ members}}}}
。这会在对象周围应用 3pt 垂直缓冲区。
\documentclass[12pt]{report}
\usepackage{tabulary}
\usepackage[maxfloats=30,morefloats=12]{morefloats}
\usepackage{booktabs}
\usepackage{float,lscape}
\usepackage{longtable}
\usepackage{pdflscape}
\usepackage{tabularx}
\usepackage{multirow}
\usepackage{bigstrut}
\usepackage[usestackEOL]{stackengine}
\begin{document}
\begin{table}[htbp]
\centering
\caption{ETV 1830 - 1930}
\tiny
\begin{tabular}{rrrrrrrrr}
\hline
\multicolumn{1}{c}{\textbf{Year}} & \multicolumn{1}{c}{\textbf{Organizations}} & \multicolumn{1}{c}{\textbf{Associations}} & \multicolumn{1}{c}{\addstackgap{\textbf{\shortstack{Paying\\ members}}}} & \multicolumn{1}{c}{\textbf{in \% of total}} & \multicolumn{1}{c}{\textbf{\shortstack{Non-paying\\ members}}} & \multicolumn{1}{c}{\textbf{in \% of total}} & \multicolumn{1}{c}{\textbf{\shortstack{Total\\ members}}} & \multicolumn{1}{c}{\textbf{\shortstack{Active\\ members}}} \bigstrut\\
\hline
1830 & - & 2 & - & - & - & - & - & - \bigstrut[t]\\
31-40 & - & 7 & - & - & - & - & - & - \\
\hline
\end{tabular}%
\label{tab:addlabel}%
\end{table}%
\end{document}
此外,如果您希望标题行顶部对齐,则可以将每个实例更改为\shortstack
(\Shortunderstack
请注意大写的“S”),以获得:
答案2
你可以用更简单的方式得到你想要的东西:这个makecell
包允许在单元格中换行,并在特定的表格单元格中使用通用格式(包括垂直对齐),这要归功于\thead
和\makecell
命令。要获得更好的垂直间距,只需使用booktabs
包。最后,caption
当标题是多于表格,您可以进一步自定义标题。
因此,可以有一个表格,但footnotesize
列标题除外,因为列标题是scriptsize
– 而不是tiny
,这几乎不可读:
\documentclass[12pt]{report}
\usepackage{tabulary}
\usepackage[maxfloats=30,morefloats=12]{morefloats}
\usepackage{booktabs}
\usepackage{float,lscape}
\usepackage{longtable}
\usepackage{pdflscape}
\usepackage{tabularx}
\usepackage{multirow}
\usepackage{bigstrut}
\usepackage[showframe]{geometry}
\usepackage{caption, makecell, booktabs}
\captionsetup{font = footnotesize}
\renewcommand\theadfont{\bfseries\scriptsize}
\renewcommand\theadalign{bc}
\begin{document}
\begin{table}[htbp]
\centering\setlength\tabcolsep{3.5pt}
\caption{ETV 1830 - 1930}
\footnotesize
\begin{tabular}{rrrrrrrrr}
\toprule
\thead{Year} & \thead{Organizations} & \thead{Associations} & \thead{Paying\\ members} & \thead{in \%\\ of total} & \thead{Non-paying\\ members} & \thead{in \%\\ of total} & \thead{Total\\ members} & \thead{\shortstack{Active\\ members}}\\
\midrule
1830 & -- & 2 & -- & -- & -- & -- & -- & -- \\
\addlinespace
31-40 & -- & 7 & -- & -- & -- & -- & -- & -- \\
\bottomrule
\end{tabular}%
\label{tab:addlabel}%
\end{table}%
\end{document}
答案3
我不明白为什么您在序言包中有一些在 MWE 中不使用的包。所以我稍微重新排列了您的 MWE,并从所有包中仅使用booktab
和tabularx
。在 tabularx 中,我选择表格宽度\textwidth
。
\documentclass[12pt]{report}
% \usepackage{tabulary}
% \usepackage[maxfloats=30,morefloats=12]{morefloats}
\usepackage{booktabs}
% \usepackage{float,lscape}
% \usepackage{longtable}
% \usepackage{pdflscape}
\usepackage{tabularx}
\newcolumntype{R}{>{\raggedleft\arraybackslash}X}
% \usepackage{multirow}
% \usepackage{bigstrut}
\usepackage[active,floats,tightpage]{preview}
\setlength\PreviewBorder{1em}
\begin{document}
\begin{table}
\centering
\tiny
\setlength{\tabcolsep}{3pt}
\caption{ETV 1830 - 1930}
\begin{tabularx}{\textwidth}{*{9}{R}}
\toprule
\multicolumn{1}{c}{\textbf{Year}}
& \multicolumn{1}{c}{\textbf{Organizations}}
& \multicolumn{1}{c}{\textbf{Associations}}
& \multicolumn{1}{c}{\textbf{\shortstack{Paying\\ members}}}
& \multicolumn{1}{c}{\textbf{\shortstack{in \%\\ of total}}}
& \multicolumn{1}{c}{\textbf{\shortstack{Non-paying\\ members}}}
& \multicolumn{1}{c}{\textbf{\shortstack{in \%\\ of total}}}
& \multicolumn{1}{c}{\textbf{\shortstack{Total\\ members}}}
& \multicolumn{1}{c}{\textbf{\shortstack{Active\\ members}}}
\\
\midrule
1830 & - & 2 & - & - & - & - & - & - \\
31-40 & - & 7 & - & - & - & - & - & - \\
\bottomrule
\end{tabularx}%
\label{tab:addlabel}%
\end{table}%
\end{document}
编辑:这是使用上述 MWE 生成的表格的图像。