我有一张表格需要放在论文中。水平线和垂直线是虚线,但我的主管要求我使用闭合线。我无法修复它。
\usepackage{tabularx}
\begin{table}[h]
\centering
\caption{my table with broken lines}
\resizebox{\textwidth}{!}{%
\begin{tabular}{@{}|c|c|c|c|c|c|@{}}
\toprule
\multirow{3}{*}{A} & \multirow{3}{*}{B} & \multicolumn{4}{|c|}{M} \\ \cmidrule(l){3-6}
& & \multicolumn{2}{|c|}{C} & \multicolumn{2}{|c|}{D} \\ \cmidrule(l){3-6}
& & \multicolumn{1}{|c|}{e} & \multicolumn{1}{|c|}{f} & \multicolumn{1}{|c|}{e} & \multicolumn{1}{|c|}{f} \\ \midrule
\multicolumn{1}{|c|}{1} & \multicolumn{1}{|c|}{a} & \multicolumn{1}{|c|}{\multirow{4}{*}{100}} & \multicolumn{1}{|c|}{91.02} & \multicolumn{1}{|c|}{\multirow{4}{*}{90}} & \multicolumn{1}{|c|}{209.2} \\ \cmidrule(r){1-2} \cmidrule(lr){4-4} \cmidrule(l){6-6}
\multicolumn{1}{|c|}{2} & \multicolumn{1}{|c|}{b} & \multicolumn{1}{|c|}{} & \multicolumn{1}{|c|}{133.83} & \multicolumn{1}{|c|}{} & \multicolumn{1}{|c|}{239.66} \\ \cmidrule(r){1-2} \cmidrule(lr){4-4} \cmidrule(l){6-6}
\multicolumn{1}{|c|}{3} & \multicolumn{1}{|c|}{b} & \multicolumn{1}{|c|}{} & \multicolumn{1}{|c|}{159.73} & \multicolumn{1}{|c|}{} & \multicolumn{1}{|c|}{373.47} \\ \cmidrule(r){1-2} \cmidrule(lr){4-4} \cmidrule(l){6-6}
4 & \multicolumn{1}{|c|}{c} & \multicolumn{1}{c|}{} & \multicolumn{1}{|c|}{144.1} & \multicolumn{1}{|c|}{} & 317.01 \\ \bottomrule
\end{tabular}
}
\label{tbl:lbl1}
\end{table}
答案1
像这样?
\documentclass{article}
\usepackage{makecell, multirow}
\begin{document}
\begin{table}[h]
\centering
\setcellgapes{3pt}
\makegapedcells
\caption{my table with broken lines}
\label{tbl:lbl1}
\begin{tabular}{|*{6}{c|}}
\Xhline{1pt}
\multirow{3.4}{*}{A}
& \multirow{3.4}{*}{B}
& \multicolumn{4}{c|}{M} \\
\cline{3-6}
& & \multicolumn{2}{c|}{C}
& \multicolumn{2}{c|}{D} \\
\cline{3-6}
& & e & f & e & f \\
\hline
1 & a & \multirow{4.5}{*}{100}
& 91.02 & \multirow{4.5}{*}{90}
& 209.2 \\
\cline{1-2} \cline{4-4} \cline{6-6}
2 & b & & 133.83 & & 239.66 \\
\cline{1-2} \cline{4-4} \cline{6-6}
3 & b & & 159.73 & & 373.47 \\
\cline{1-2} \cline{4-4} \cline{6-6}
4 & c & & 144.1 & & 317.01 \\
\Xhline{1pt}
\end{tabular}
\end{table}
\end{document}
或者如果您喜欢表格宽度\textwidth
,那么您可以使用tabularx
表格环境(不推荐):
\documentclass{article}
\usepackage{makecell, multirow, tabularx}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\begin{document}
\begin{table}[h]
\centering
\setcellgapes{3pt}
\makegapedcells
\caption{my table with broken lines}
\label{tbl:lbl1}
\begin{tabularx}{\linewidth}{|*{6}{C|}}
\Xhline{1pt}
\multirow{4}{*}{A}
& \multirow{4}{*}{B}
& \multicolumn{4}{c|}{M} \\
\cline{3-6}
& & \multicolumn{2}{c|}{C}
& \multicolumn{2}{c|}{D} \\
\cline{3-6}
& & e & f & e & f \\
\hline
1 & a & \multirow{5.5}{=}{\centering 100}
& 91.02 & \multirow{5.5}{=}{\centering 90}
& 209.2 \\
\cline{1-2} \cline{4-4} \cline{6-6}
2 & b & & 133.83 & & 239.66 \\
\cline{1-2} \cline{4-4} \cline{6-6}
3 & b & & 159.73 & & 373.47 \\
\cline{1-2} \cline{4-4} \cline{6-6}
4 & c & & 144.1 & & 317.01 \\
\Xhline{1pt}
\end{tabularx}
\end{table}
\end{document}
附录:
两年后...... :-) 我会考虑使用带有库(加载包tabularray
)的包(版本 2022C),这样可以编写更短的表代码,并使用库在小数点处对齐的数字:siunitx
siunutx
\documentclass{article}
\usepackage[skip=1ex]{caption}
\usepackage{tabularray}
\UseTblrLibrary{siunitx}
\begin{document}
\begin{table}[h]
\caption{my table with broken lines}
\label{tbl:lbl1}
\begin{tblr}{hline{1,Z} = 1pt, hline{4} = 0.8pt, hline{2,3,5-Y}={solid},
vlines,
colspec = {*{2}{X[c]} *{4}{X[c, si={table-format=3.2}]}},
row{1-3} = {mode=text, guard}
}
\SetCell[r=3]{c} A
& \SetCell[r=3]{c} B
& \SetCell[c=4]{c} M
& & & \\
& & \SetCell[c=2]{c} C
& & \SetCell[c=2]{c} D
& \\
\cline{3-6}
& & e & f & e & f \\
1 & a & \SetCell[r=4]{c, guard} 100
& 91.02
& \SetCell[r=4]{c, guard} 100
& 209.2 \\
2 & b & & 133.83
& & 239.66 \\
3 & b & & 159.73
& & 373.47 \\
4 & c & & 144.1
& & 317.01 \\
\end{tblr}
\end{table}
\end{document}
答案2
这里有一种使用 来构建该表格的方法{NiceTabular}
(nicematrix
尽管本着 的精神进行设计booktabs
,没有任何垂直规则,会是一种更好的设计)。
在 中{NiceTabular}
,您可以使用命令 水平和垂直合并单元格\Block
。对于行,您可以指定逻辑行数(而不是像 那样的物理行数\multicolumn
)。
使用键hvlines
,绘制所有规则,但块(由 构造\Block
)除外。
\documentclass{article}
\usepackage[skip=1ex]{caption}
\usepackage{nicematrix}
\usepackage{siunitx}
\begin{document}
\begin{table}[h]
\caption{my table with broken lines}
\label{tbl:lbl1}
\centering
\begin{NiceTabular}[hvlines, columns-width=auto, cell-space-limits=2pt]
{cccS[table-format=3.2]cS[table-format=3.2]}
\Block{3-1}{A} & \Block{3-1}{B} & \Block{1-4}{M} \\
& & \Block{1-2}{C} & & \Block{1-2}{D} \\
& & e & {f} & e & {f} \\
1 & a & \Block{4-1}{100} & 91.02 & \Block{4-1}{100} & 209.2 \\
2 & b & & 133.83 & & 239.66 \\
3 & b & & 159.73 & & 373.47 \\
4 & c & & 144.1 & & 317.01 \\
\end{NiceTabular}
\end{table}
\end{document}
您需要多次编译(因为nicematrix
在后台使用 PGF/Tikz 节点)。