我使用以下代码来制作表格(使用 XeLaTex):
%!TEX encoding = UTF-8 Unicode
\documentclass[twoside,a4paper]{article}
%---- Allow the insertion of graphics and tables ----%
\usepackage{graphicx}
\usepackage{booktabs}
\usepackage{multirow}
%---- Set margins ----%
\usepackage{geometry}
\geometry{a4paper,total={210mm,297mm},
left=20mm,
right=20mm,
top=25mm,
bottom=25mm,
}
%---- Set line spacing to 1.5 lines ----%
\usepackage{setspace}
\onehalfspacing
%----- Set fonts ----%
\usepackage{fontspec}
\setmainfont{Calibri}
\begin{document}
\begin{table}[htbp]
\centering
\caption{Table title}
\resizebox{160mm}{!}{
\begin{tabular}{ccccc}
\toprule
\multirow{2}[2]{*}{\textbf{Col. 1}} & \multicolumn{2}{c}{\textbf{Section 1 title}} & \multicolumn{2}{c}{\textbf{Extremely long section title in multicolumn}} \\
& \textbf{Subtitle A} & \textbf{Subtitle B} & \textbf{Subtitle C} & \textbf{Subtitle C} \\
\midrule
Row 1 & xxx & xxx & xxx & xxx \\
Row 2 & xxx & xxx & xxx & xxx \\
Row 3 & xxx & xxx & xxx & xxx \\
Row 4 & xxx & xxx & xxx & xxx \\
Row 5 & xxx & xxx & xxx & xxx \\
\toprule
\textbf{Total} & \textbf{xxx} & \textbf{xxx} & \textbf{xxx} & \textbf{xxx} \\
\bottomrule
\end{tabular}%
}
\label{tab:addlabel}%
\end{table}%
\end{document}
我想做两件事:
在某些单元格中手动插入换行符:
“字幕 A”和“字幕 B” - 在“字幕”和“A”/“B”之间插入分隔符
“极长……” - 在“极长部分”和“多列标题”之间插入分隔符
- 使“副标题 A”至“副标题 D”的列宽度相同(大于“第 1 列”)
如何实现这一点?
答案1
您可以使用 David Carlisle 的软件包实现所有这些tabularx
。我想提供两种不同的解决方案,因为可以在环境内进行手动中断tabular
,但在我看来这并不能正确解决您的问题。
tabularx
序言中的列宽是固定的:
>{\centering\arraybackslash}X
表示“居中文本 ( >{\centering\arraybackslash}
),固定宽度 ( X
) 列”。此固定宽度取决于tabularx
总宽度。您可以使用或
代替。默认列的文本左对齐。\centering
\raggedleft
\raggedright
X
这是第一个解决方案,它使用手动中断,使用命令\break
。请注意,在参数中,手动\break
不起作用,因此\multicolumn
非常长的标题無法分開。
\documentclass[twoside,a4paper]{article}
\usepackage{booktabs}
\usepackage{multirow}
\usepackage{tabularx}
\usepackage{geometry}
\geometry{a4paper,
left=20mm,
right=20mm,
top=25mm,
bottom=25mm,
}
\usepackage{setspace}
\onehalfspacing
\usepackage{fontspec}
\setmainfont{Calibri}
\begin{document}
\begin{table}[htbp]
\centering
\caption{Table title}
\begin{tabularx}{160mm}
{c
>{\centering\arraybackslash}X %centered-text, fixed-width column
>{\centering\arraybackslash}X
>{\centering\arraybackslash}X
>{\centering\arraybackslash}X}
\toprule
\multirow{3}[3]{*}{\textbf{Col. 1}} & \multicolumn{2}{c}{\textbf{Section 1 title}} & \multicolumn{2}{c}{\textbf{Extremely long section title in multicolumn}} \\
& \textbf{Subtitle\break A} & \textbf{Subtitle\break B} & \textbf{\break Subtitle C} & \textbf{\break Subtitle D} \\
\midrule
Row 1 & xxx & xxx & xxx & xxx \\
Row 2 & xxx & xxx & xxx & xxx \\
Row 3 & xxx & xxx & xxx & xxx \\
Row 4 & xxx & xxx & xxx & xxx \\
Row 5 & xxx & xxx & xxx & xxx \\
\toprule
\textbf{Total} & \textbf{xxx} & \textbf{xxx} & \textbf{xxx} & \textbf{xxx} \\
\bottomrule
\end{tabularx}%
\label{tab:addlabel}%
\end{table}%
\end{document}
第二个不使用\break
,它多一行来正确排列每个字幕。
\documentclass[twoside,a4paper]{article}
\usepackage{booktabs}
\usepackage{multirow}
\usepackage{tabularx}
\usepackage{geometry}
\geometry{a4paper,
left=20mm,
right=20mm,
top=25mm,
bottom=25mm,
}
\usepackage{setspace}
\onehalfspacing
\usepackage{fontspec}
\setmainfont{Calibri}
\begin{document}
\begin{table}[htbp]
\centering
\caption{Table title}
\begin{tabularx}{160mm}
{c
>{\centering\arraybackslash}X %centered-text, fixed-width column
>{\centering\arraybackslash}X
>{\centering\arraybackslash}X
>{\centering\arraybackslash}X}
\toprule
\multirow{3}[3]{*}{\textbf{Col. 1}} & \multicolumn{2}{c}{\textbf{Section 1 title}} & \multicolumn{2}{c}{\textbf{Extremely long section}} \\
&\textbf{Subtitle}&\textbf{Subtitle}&\multicolumn{2}{c}{\textbf{title in multicolumn}}\\
&\textbf{A} &\textbf{B} & \textbf{Subtitle C} & \textbf{Subtitle D} \\
\midrule
Row 1 & xxx & xxx & xxx & xxx \\
Row 2 & xxx & xxx & xxx & xxx \\
Row 3 & xxx & xxx & xxx & xxx \\
Row 4 & xxx & xxx & xxx & xxx \\
Row 5 & xxx & xxx & xxx & xxx \\
\toprule
\textbf{Total} & \textbf{xxx} & \textbf{xxx} & \textbf{xxx} & \textbf{xxx} \\
\bottomrule
\end{tabularx}%
\label{tab:addlabel}%
\end{table}%
\end{document}
答案2
该makecell
包就是为此而做的:它允许在单元格中换行,并为列标题设置通用格式。另外,您不应该使用它,\esizebox
因为它还会缩放表格中的文本。我改用环境tabulars
,表格总宽度为 16 厘米。虽然不应该使用\multicolumn
跨越X
类型列的 s,但它似乎在当前情况下有效。最后,我加载了caption
包以确保标题和表格之间的垂直间距正确。
%!TEX encoding = UTF-8 Unicode
\documentclass[twoside,a4paper]{article}
%---- Allow the insertion of graphics and tables ----%
\usepackage{graphicx}
\usepackage{booktabs}
\usepackage{multirow}
%---- Set margins ----%
\usepackage{geometry}
\geometry{a4paper, hmargin=20mm, vmargin=25mm }
%---- Set line spacing to 1.5 lines ----%
\usepackage{setspace}
\onehalfspacing
%----- Set fonts ----%
\usepackage{fontspec}
\setmainfont{Calibri}
\usepackage{tabularx}
\usepackage{makecell}
\renewcommand\theadfont{\bfseries}
\usepackage{caption}
\renewcommand{\tabularxcolumn}[1]{>{\centering\arraybackslash}m{#1}}
\begin{document}
\begin{table}[htbp]
\centering
\caption{Table title}
\label{tab:addlabel}%
\begin{tabularx}{160mm}{c*{4}{X}}
\toprule
& multicolumn{2}{c}{\thead{Section 1 title}} & \multicolumn{2}{c}{\thead{Extremely long section\\ title in multicolumn}} \\
\thead{Col. 1} & \thead{Subtitle\\ A} & \thead{Subtitle\\ B} & \thead{Subtitle\\ C} & \thead{Subtitle\\ D} \\
\midrule\addlinespace
Row 1 & xxx & xxx & xxx & xxx \\
Row 2 & xxx & xxx & xxx & xxx \\
Row 3 & xxx & xxx & xxx & xxx \\
Row 4 & xxx & xxx & xxx & xxx \\
Row 5 & xxx & xxx & xxx & xxx \\
\addlinespace
\toprule
\textbf{Total} & \textbf{xxx} & \textbf{xxx} & \textbf{xxx} & \textbf{xxx} \\
\bottomrule
\end{tabularx}%
\end{table}%
\end{document}