在侧边表中添加垂直线

在侧边表中添加垂直线

我想为从到开始的某些列添加垂直线,\midrule如下\bottomrule图所示。

在此处输入图片描述

我还提供了 MWE。我尝试使用*{3}{c}| *{2}{r r r}},但它没有生成我想要的精确输出(不需要的输出如下所示)。

在此处输入图片描述

\documentclass[11pt]{article}
\usepackage{rotating}
\usepackage{booktabs, makecell} 
\usepackage{multicol}
\usepackage{multirow}
\usepackage{mathtools}
\usepackage[flushleft]{threeparttable}
\usepackage{newtxtext}

\usepackage{booktabs}
\usepackage{makecell}

\begin{document}

\begin{sidewaystable}

  \begin{center}
\setlength\tabcolsep{0pt}
\renewcommand{\cellset}{\bfseries\linespread{1}\selectfont}
\renewcommand\cellalign{bc}
  \centering
  \caption{My Table}{
 \small
    \begin{tabular*}{\linewidth}{@{\extracolsep{\fill}} 
                        *{3}{c}
                        *{2}{r r r}}
                        
     \toprule
    &  &   & \multicolumn{3}{c}{First}  & \multicolumn{3}{c}{ Second}   \\
    \cmidrule(l){4-6} \cmidrule(l){7-9}
    {A} & {B}  & {C} 
    & {\makecell{D}} & {\makecell{E}} & {\makecell{F}}  & {\makecell{X}} & {\makecell{Y}} & {\makecell{Z}}  \\
    \midrule
    
 1 & 2 & 3 &4 & 5& 6 &7 & 8& 9  \\
 11 & 12 & 13 &14 & 15& 16 &17 & 18& 19  \\
  21 & 22 & 23 &24 & 25& 26 &27 & 28& 29  \\
    \bottomrule
    \end{tabular*}
}
   \end{center}
\end{sidewaystable}

\end{document}

答案1

编辑:

为了确保垂直规则不会被booktabs您应该替换的包中定义的规则所打断\toprule\bottomrule例如\midruleXhline{<width>}

在 MWE 中,下面使用S列来更好地对齐数字。使用表格时tabularx规定了列宽:

\documentclass[11pt]{article}
\usepackage{newtxtext}
\usepackage{rotating}
\usepackage{booktabs, makecell, tabularx}
\renewcommand\theadfont{\bfseries}
\renewcommand\theadgape{}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\usepackage[flushleft]{threeparttable}
\NewExpandableDocumentCommand\mcc{O{1}m}{\multicolumn{#1}{c}{#2}}
\NewExpandableDocumentCommand\mcx{O{1}m}{\multicolumn{#1}{C}{#2}}

%\usepackage{multicol}
%\usepackage{mathtools}
\usepackage{siunitx}    % new

\begin{document}

\begin{sidewaystable}[hp]
    \setcellgapes{5pt}
    \makegapedcells
    \sisetup{table-format=2, 
             table-column-width=4em}
    \setlength\tabcolsep{0pt}
    \centering
\caption{My Table}
    \begin{tabularx}{\linewidth}{ *{3}{S}| *{3}{S}| *{3}{S} }
    \Xhline{1.2pt}
\mcc[3]{}           & \mcc[3]{First}& \mcc[3]{Second}       \\
    \cmidrule(lr){4-6}  \cmidrule(l){7-9}
\mcx{A} & \mcx{B}   & \mcx{C}   & \mcx{D}   & \mcx{E}   & \mcx{F}   & \mcx{X}   & \mcx {Y}  & \mcx{Z}   \\
    \Xhline{0.8pt}
 1      &  2        &  3        &  4        &  5        &  6        &  7        &  8        &  9        \\
11      & 12        & 13        & 14        & 15        & 16        & 17        & 18        & 19        \\
21      & 22        & 23        & 24        & 25        & 26        & 27        & 28        & 29        \\
    \Xhline{1.2pt}
    \end{tabular*}
\end{sidewaystable}

\end{document}

在此处输入图片描述

答案2

可以使用该nicematrix包重现您的 MWE。它创建 TikZ 节点,因此可以使用两个 tikz 命令绘制所需的垂直线。

\Block该包提供了能够创建多列/多行单元格的命令。

\Block{1-3}{First}创建一个 1 行 x 3 列的单元格,内部居中First

意识到这是超级简化的 MWE,我添加了另一个更完整的示例,使用\Block

\Block{}{<content>}创建一个 1 行 x 1 列的单元格,允许\\在内部使用。

假设第二行标题的文本可能比 A、B、C 等更长,并且其中一些可能需要分成两行或更多行,则所有这些标题都包含在一个\Block命令中,该命令也将它们居中。

由于 tikz 节点,第一次可能需要两次编译。

应收账

br

这是代码。如你所见,非常紧凑且易于维护。

\documentclass[11pt]{article}
\usepackage{rotating}

\usepackage{nicematrix}
\usepackage{tikz}

\begin{document}

\begin{sidewaystable}

\centering
  \caption{My Table I}
  \medskip
\small

\begin{NiceTabular}{!{\extracolsep{4pt}}*{3}{c} *{2}{r r r}}[%
    cell-space-limits=5pt, %expand cells vertically
    columns-width = 1.8cm, %adjust as needed
    ]   
    \hline
    &   &   &\Block{1-3}{First} &   &   & \Block{1-3}{Second}   &   &   \\
    \cline{4-6} \cline{7-9}
    A   &B  &C  &
    \bfseries D &
    \bfseries E &
    \bfseries F &
    \bfseries X &
    \bfseries Y &
    \bfseries Z \\
    \hline
1   &2  &3  &4  &5  &6  &7  &8  &9  \\
11  &12 &13 &14 &15 &16 &17 &18 &19 \\
21  &22 &23 &24 &25 &26 &27 &28 &29 \\
\hline
\CodeAfter
{%
    \tikz \draw (row-3-|col-4) -- (row-6-|col-4);
    \tikz \draw (row-3-|col-7) -- (row-6-|col-7);
}
\end{NiceTabular}
\end{sidewaystable}


\begin{sidewaystable}
    \centering
    \caption{My Table II}
    \medskip
    \small
\begin{NiceTabular}{!{\extracolsep{4pt}}*{3}{c} *{2}{r r r}}[%
    cell-space-limits=5pt, %expand cells vertically
    columns-width = 1.8cm, %adjust as needed
    ]   
    \hline
    &   &   &\Block{1-3}{First} &   &   & \Block{1-3}{Second}   &   &   \\
    \cline{4-6} \cline{7-9}
    \Block{}{A }    &
    \Block{}{B \\ line} &
    \Block{}{C \\ line} &
    \Block[c]{}<\bfseries>{D \\ line}   &
    \Block[c]{}<\bfseries>{E }  &
    \Block[c]{}<\bfseries>{F \\ line}   &
    \Block[c]{}<\bfseries>{X \\ line}   &
    \Block[c]{}<\bfseries>{Y \\ line}   &
    \Block{}<\bfseries>{Z}                 \\
    \hline
    1   &2  &3  &4  &5  &6  &7  &8  &9  \\
    11  &12 &13 &14 &15 &16 &17 &18 &19 \\
    21  &22 &23 &24 &25 &26 &27 &28 &29 \\
    \hline
    \CodeAfter
    {%
        \tikz \draw (row-3-|col-4) -- (row-6-|col-4);
        \tikz \draw (row-3-|col-7) -- (row-6-|col-7);
    }
\end{NiceTabular}

\end{sidewaystable}

\end{document}

相关内容