我想为从到开始的某些列添加垂直线,\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
例如\midrule
用Xhline{<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 节点,第一次可能需要两次编译。
这是代码。如你所见,非常紧凑且易于维护。
\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}