表格中的自定义换行符和列大小

表格中的自定义换行符和列大小

我使用以下代码来制作表格(使用 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\raggedrightX

这是第一个解决方案,它使用手动中断,使用命令\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} 

在此处输入图片描述

相关内容