如何设置列的子列?

如何设置列的子列?

我正在用该longtable包在不同的页面上制作一个表格:

\begin{landscape}
\begin{longtable}{|c|c|c|c|c|c|c|}

\caption{Table noMCI.} \label{tab:long} \\
\hline 
\multicolumn{1}{|c|}{\textbf{Study}} & 
\multicolumn{1}{ c|}{\textbf{Participants}} & 
\multicolumn{1}{ c|}{\textbf{Inclusion Criteria}} & 
\multicolumn{1}{ c|}{\textbf{Study Design}} & 
\multicolumn{1}{ c|}{\textbf{Intervention}} & 
\multicolumn{1}{ c|}{\textbf{Primary Outcome}} & 
\multicolumn{1}{ c|}{\textbf{Cognitive Function}}\\ 
\hline 
\endfirsthead

\hline 
\multicolumn{1}{|c|}{\textbf{Study}} & 
\multicolumn{1}{ c|}{\textbf{Participants}} & 
\multicolumn{1}{ c|}{\textbf{Inclusion Criteria}} & 
\multicolumn{1}{ c|}{\textbf{Study Design}} & 
\multicolumn{1}{ c|}{\textbf{Intervention}} & 
\multicolumn{1}{ c|}{\textbf{Primary Outcome}} & 
\multicolumn{1}{ c|}{\textbf{Cognitive Function}}\\  
\hline 
\endhead

\hline
\endfoot

\hline
\endlastfoot

One & abcdef ghjijklmn & 123.456778 & x & x & x & x \\

\end{longtable}
\end{landscape}

我想将“参与者”、“干预”和“认知功能”列分别拆分为 2、5 和 6 个子列。但是当我以这种方式更改代码时:

\hline 
\multicolumn{1}{|c|}{\textbf{Study}} & 
\multicolumn{2}{ c|}{\textbf{Participants}} & 
\multicolumn{1}{ c|}{\textbf{Inclusion Criteria}} & 
\multicolumn{1}{ c|}{\textbf{Study Design}} & 
\multicolumn{5}{ c|}{\textbf{Intervention}} & 
\multicolumn{1}{ c|}{\textbf{Primary Outcome}} & 
\multicolumn{6}{ c|}{\textbf{Cognitive Function}}\\

我收到此错误“额外的对齐标签已更改为 \cr”,并且输出表导致:

在此处输入图片描述

如何修复?

编辑:如何在列之间设置垂直线?

答案1

首先,您必须指定包括形成“子列”的列在内的总列数,然后用于\multicolumn合并特定行中的列,例如标题。

该表将包含大量列。我建议缩短标题列或至少添加换行符;你会发现制造细胞包与以下宏一起使用非常有用:\thead因为\makecell它们允许您在参数中添加换行符\\。另一个优点是可以在一个地方添加格式,例如以粗体显示标题列,如示例中所示(参见 的行\theadfont)。

您还可以考虑添加标题包以格式化标题。在示例中,我更改了表格和标题之间的距离。

我认为你应该删除垂直线。特别是在那个表中,你可以更灵活地减少列之间的空间并为内容添加更多空间。这可以通过更改来完成\tabcolsep,这会影响整个表格(env 中示例中的注释行longtable)。或者,可以在表格的序言中本地设置列之间的距离:只需@{<macro>}在列之间插入;空参数@{}完全删除间距,而<macro>应该是任何插入额外空间的命令,例如\hspace{3pt}\quad\;

请参阅下面的示例

\documentclass{article}
\usepackage{pdflscape}
\usepackage{longtable}
\usepackage{caption}      % To format captions
\usepackage{makecell}     % For \thead and \makecell
\usepackage{booktabs}     % For \toprule, \midrule and \bottomrule
\usepackage{kantlipsum}   % For a dummy text, only for example

\captionsetup[table]{position=top,skip=3pt}

\renewcommand*\theadfont{\small\bfseries}
\renewcommand*\cellset{\small}
\renewcommand*\theadgape{\Gape[0pt]}


\begin{document}
\kant[1]

\begin{landscape}
  \small
  % \setlength\tabcolsep{3pt}
  \begin{longtable}{@{} *{17}{c} @{}}
    \caption{Table noMCI.}\label{tab:long} \\
    \toprule
    \thead{Study}
    & \multicolumn{2}{c}{\thead{Parti-\\cipants}}
    & \thead{Inclusion\\Criteria}
    & \thead{Study\\Design}
    & \multicolumn{5}{c}{\thead{Intervention}}
    & \thead{Primary\\Outcome}
    & \multicolumn{6}{c}{\thead{Cognitive Function}} \\
    \midrule\endfirsthead
    \toprule
    \thead{Study}
    & \multicolumn{2}{c}{\thead{Parti-\\cipants}}
    & \thead{Inclusion\\Criteria}
    & \thead{Study\\Design}
    & \multicolumn{5}{c}{\thead{Intervention}}
    & \thead{Primary\\Outcome}
    & \multicolumn{6}{c}{\thead{Cognitive Function}} \\
    \midrule\endhead
    \bottomrule\endfoot
    \bottomrule\endlastfoot
    One
    & A1 & A2
    & 123.4
    & B
    & C1 & C2 & C3 & C4 & C5
    & E
    & F1 & F2 & F3 & F4 & F5 & F6 \\
    Two
    & G1 & G2
    & 56.78
    & H
    & I1 & I2 & I3 & I4 & I5
    & J
    & K1 & K2 & K3 & K4 & K5 & K6 \\
    Three
    & A1 & A2
    & 90.12
    & B
    & C1 & C2 & C3 & C4 & C5
    & E
    & F1 & F2 & F3 & F4 & F5 & F6 \\
    Four
    & G1 & G2
    & 3.456
    & H
    & I1 & I2 & I3 & I4 & I5
    & J
    & K1 & K2 & K3 & K4 & K5 & K6 \\
  \end{longtable}
\end{landscape}

\kant[2]
\end{document}

在此处输入图片描述


编辑

你真的需要注意这些标题。你把它们写得太长了!

如果您想添加额外的标题,只需添加额外的行。在前面的例子中,我使用了c-column 类型,但由于您的表格包含文本,我会将列更改为p{<column-width>}。它在单元格中形成段落。一个结果是文本在列边界处收到自然换行符。否则,长文本将排版在一行中。p{}保持段落对齐,文本从左侧开始。为了正确左对齐,需要一个额外的选项:>{\raggedright\arraybackslash},您将其插入到列定义前面

... >{\raggedright\arraybackslash}p{1.5cm} ...

或者,也可以使用\centering\raggedleft。如果使用额外的对齐,则\arraybackslash在最后一列定义中是强制性的,因为这些宏重新定义了\\。值得注意的是,该包ragged2e提供了改进的对应项 sa或\Centering,它们不需要。\RaggedRight\RaggedLeft\arraybackslash

还有一点,你的表格真的很大,有 17 列!很容易让表格太宽。因此,我建议使用替代包xltabular。该包提供X-column 类型。X这是一个非常方便的附加功能,因为它将剩余空间分配给所有这些列。然后,所有定义为的列都X获得相同的宽度。默认情况下,它还会创建具有标准对齐方式的段落。您可以插入上述表达式以获得不同的对齐方式。如果您有兴趣,还有一种方法可以全局执行此操作(请参阅文档)。

一种方案是将所有包含数字的列设置为 ,X并将包含文本的其他列设置为固定宽度,因为您可能需要为不同的文本设置不同的宽度。或者,您可以r为数字和X文本定义常规列。只需确保所有包含文本的列都形成段落:使用 或Xp{}但是,您仍然需要注意避免使表格太宽。

还有一个建议,考虑使用几何学包以减少边距。这将为表格增加更多空间。您可以\newgeometry{}在表格之前和\restoregeometry之后使用以仅针对表格更改页面布局。请记住,这两个宏都会插入分页符。您可以在之前和之后使用它们\begin{landscape}...\end{landscape}

最后,如果您要缩短列,则可能需要附加注释。我放了两个示例(参见宏\tnote)。这\rlap{}是一个方便的宏,因为里面的任何内容都不会占用额外空间。它不会影响对齐,并且是为了保持演示整洁。

\documentclass{article}
\usepackage[pass]{geometry}   % [pass] 
\usepackage{pdflscape}
\usepackage{xltabular}
\usepackage{ragged2e,microtype}
\usepackage{caption}          % To format captions
\usepackage{makecell}         % For \thead and \makecell
\usepackage{booktabs}         % For \toprule, \midrule and \bottomrule
\usepackage[nopar]{kantlipsum}   % For a dummy text, only for example

\captionsetup[table]{position=top,skip=3pt}

\renewcommand*\theadfont{\small\bfseries}
\renewcommand*\cellset{\small}
\renewcommand*\theadgape{\Gape[0pt]}
\renewcommand*{\theadalign}{ct}

\newcolumntype{L}[1]{>{\RaggedRight}p{#1}}
\newcolumntype{C}[1]{>{\Centering}p{#1}}
\newcolumntype{R}[1]{>{\RaggedLeft}p{#1}}
\newcolumntype{Y}{>{\Centering}X}

\newcommand\tnote[1]{\rlap{\,\textsuperscript{#1}}}   % For annotations


\begin{document}
\kant[1]

\newgeometry{margin=1cm}
\begin{landscape}
  \small\sloppy
  \setlength\tabcolsep{3pt}
  \setlength\cmidrulekern{\tabcolsep}
  \begin{xltabular}{\linewidth}{@{}
    p{1.5cm}
    *2{Y}
    L{1.75cm}
    L{1.75cm}
    L{1.75cm} *4{Y}
    C{1.75cm}
    *6{Y}
    @{}}
    \caption{Table noMCI.}\label{tab:long} \\
    \toprule
    % Heading - first row
    \thead[l]{Study}
    & \multicolumn{2}{c}{\thead{Parti-\\cipants}}
    & \thead{Inclusion\\Criteria}
    & \thead{Study\\Design}
    & \multicolumn{5}{c}{\thead{Intervention}}
    & \thead{Primary\\Outcome}
    & \multicolumn{6}{c}{\thead{Cognitive Function}} \\
    \cmidrule(lr){2-3}\cmidrule(lr){6-10}\cmidrule(lr){12-17}
    % Heading - second row
    & \thead{N} & \thead{Age}
    & &
    & \thead[l]{Training} & \thead{Ses.\\(n)} & \thead{Len.\tnote{2}\\(min)} & \thead{Freq.\\(n/w)\tnote{1}} & \thead{Total\\(n)}
    & & \thead{WM} & \thead{PS} & \thead{Att.} & \thead{EF} & \thead{Vis.} & \thead{WM} \\
    \midrule\endfirsthead
    \toprule
    % Heading - first row
    \thead[l]{Study}
    & \multicolumn{2}{c}{\thead{Parti-\\cipants}}
    & \thead{Inclusion\\Criteria}
    & \thead{Study\\Design}
    & \multicolumn{5}{c}{\thead{Intervention}}
    & \thead{Primary\\Outcome}
    & \multicolumn{6}{c}{\thead{Cognitive Function}} \\
    \cmidrule(lr){2-3}\cmidrule(lr){6-10}\cmidrule(lr){12-17}
    % Heading - second row
    & \thead{N} & \thead{Age}
    & &
    & \thead[l]{Training} & \thead{Ses.\\(n)} & \thead{Len.\\(min)} & \thead{Freq.\\(n/w)\tnote{1}} & \thead{Total\\(n)}
    & & \thead{WM} & \thead{PS} & \thead{Att.} & \thead{EF} & \thead{Vis.} & \thead{WM} \\
    \midrule\endhead
    \bottomrule\endfoot
    \bottomrule\endlastfoot
    % Table body
    One
    & 123.4 & 56.78
    & \kant[2][2]
    & Sample sample sample
    & \kant[2][1] & 40 & 60 & 5 & 40
    & E
    & F1 & F2 & F3 & F4 & F5 & F6 \\
  \end{xltabular}
  \vspace{-0.75\baselineskip}%  
  \textsuperscript{1} Measured in a number of something per week\par
  \textsuperscript{2} Length of something etc.
\end{landscape}
\restoregeometry

\kant[2]
\end{document}

在此处输入图片描述


编辑2

为了添加垂直线,只需添加|列定义。在我看来,你的表格包含很多列,看起来不太好。

Booktabs 宏不再起作用,因为当规则和栏交叉时,每个宏都会添加一个间隙。如果您愿意,您可以简单地使用\hline或使用我建议的技巧(参见代码)。

您可能需要拉伸该表 - 查看其线条\arraystretch并根据您的喜好更改其因子。

我发现带有表格的页面上的页码由于边距较小而被部分截断。我通过设置自定义footskip选项纠正了这个问题。

\documentclass{article}
\usepackage[pass]{geometry}   % [pass] 
\usepackage{pdflscape}
\usepackage{xltabular}
\usepackage{ragged2e,microtype}
\usepackage{caption}          % To format captions
\usepackage{makecell}         % For \thead and \makecell
\usepackage{booktabs}         % For \toprule, \midrule and \bottomrule
\usepackage[nopar]{kantlipsum}   % For a dummy text, only for example

\captionsetup[table]{position=top,skip=3pt}

\renewcommand*\theadfont{\small\bfseries}
\renewcommand*\cellset{\small}
\renewcommand*\theadgape{\Gape[0pt]}
\renewcommand*{\theadalign}{ct}

\newcolumntype{L}[1]{>{\RaggedRight}p{#1}}
\newcolumntype{C}[1]{>{\Centering}p{#1}}
\newcolumntype{R}[1]{>{\RaggedLeft}p{#1}}
\newcolumntype{Y}{>{\Centering}X}

\NewDocumentCommand\tnote{sm}{%
  \rlap{\IfBooleanF{#1}{\,}\textsuperscript{#2}}}   % For annotations


\begin{document}
\kant[1]

\newgeometry{margin=1cm,footskip=24pt}
\begin{landscape}
  \renewcommand*\arraystretch{1.25}
  \small\sloppy
  \setlength\parindent{0pt}
  \setlength\tabcolsep{3pt}
  \setlength\cmidrulekern{\tabcolsep}
  \begin{xltabular}{\linewidth}{|
    p{1.5cm} |
    *2{Y|}
    L{1.75cm} |
    L{1.75cm} |
    L{1.75cm} | *4{Y|}
    C{1.75cm} |
    *6{Y|}
    @{}}
    \caption{Table noMCI.}\label{tab:long} \\
    %\toprule
    \noalign{\hrule height \heavyrulewidth}
    %%% Heading - first row
    \thead[l]{Study}
    & \multicolumn{2}{c|}{\thead{Parti-\\cipants}}
    & \thead{Inclusion\\Criteria}
    & \thead{Study\\Design}
    & \multicolumn{5}{c|}{\thead{Intervention}}
    & \thead{Primary\\Outcome}
    & \multicolumn{6}{c|}{\thead{Cognitive Function}} \\
    % \cmidrule(lr){2-3}\cmidrule(lr){6-10}\cmidrule(lr){12-17}
    \cline{2-3}\cline{6-10}\cline{12-17}
    % Heading - second row
    & \thead{N} & \thead{Age}
    & &
    & \thead[l]{Training} & \thead{Ses.\\(n)} & \thead{Len.\tnote{2}\\(min)} & \thead{Freq.\\(n/w)\tnote*{1}} & \thead{Total\\(n)}
    & & \thead{WM} & \thead{PS} & \thead{Att.} & \thead{EF} & \thead{Vis.} & \thead{WM} \\
    % \midrule\endfirsthead
    \noalign{\hrule height \lightrulewidth}\endfirsthead
    %%% Heading - consequtive rows
    % \toprule
    \noalign{\hrule height \heavyrulewidth}
    \thead[l]{Study}
    & \multicolumn{2}{c|}{\thead{Parti-\\cipants}}
    & \thead{Inclusion\\Criteria}
    & \thead{Study\\Design}
    & \multicolumn{5}{c|}{\thead{Intervention}}
    & \thead{Primary\\Outcome}
    & \multicolumn{6}{c|}{\thead{Cognitive Function}} \\
    % \cmidrule(lr){2-3}\cmidrule(lr){6-10}\cmidrule(lr){12-17}
    \cline{2-3}\cline{6-10}\cline{12-17}
    % Heading - second row
    & \thead{N} & \thead{Age}
    & &
    & \thead[l]{Training} & \thead{Ses.\\(n)} & \thead{Len.\\(min)} & \thead{Freq.\\(n/w)\tnote*{1}} & \thead{Total\\(n)}
    & & \thead{WM} & \thead{PS} & \thead{Att.} & \thead{EF} & \thead{Vis.} & \thead{WM} \\
    % \midrule\endhead
    % \bottomrule\endfoot
    % \bottomrule\endlastfoot
    \noalign{\hrule height \lightrulewidth}\endhead
    \noalign{\hrule height \heavyrulewidth}\endfoot
    \noalign{\hrule height \heavyrulewidth}\endlastfoot
    % Table body
    One
    & 123.4 & 56.78
    & \kant[2][2]
    & Sample sample sample
    & \kant[2][1] & 40 & 60 & 5 & 40
    & E
    & F1 & F2 & F3 & F4 & F5 & F6 \\
  \end{xltabular}
  \vspace{-\baselineskip}%  
  \textsuperscript{1} Measured in a number of something per week\par
  \textsuperscript{2} Length of something etc.
\end{landscape}
\restoregeometry

\kant[2]
\end{document}

在此处输入图片描述

相关内容