我再次遇到麻烦,tabularx
我想让表格的第 2 至 5 列具有固定宽度,并且表格的宽度与文本块一样宽。
我对第一个单元格()中的文本也存在问题multirow
,它没有垂直居中。
我目前拥有的代码是:
\documentclass[12pt, oneside]{article}
\usepackage{multicol}
\usepackage{multirow}
\usepackage{tabularx}
\usepackage{siunitx}
\usepackage{booktabs}
\renewcommand{\arraystretch}{1.3}
\setlength{\tabcolsep}{5pt}
\usepackage{caption}
\captionsetup[table]{skip=5pt}
\newcolumntype{x}[1]{>{\centering\arraybackslash\hspace{0pt}}p{#1}}
\begin{document}
\begin{table}
\caption{\label{Table}Indices}
\begin{tabularx}{\textwidth}{l c c @{\extracolsep{8pt}} c c}
\toprule
\multirow{2}{*}{\textbf{\textit{Index}}} & \multicolumn{2}{c}{\textbf{\textit{Method 1}}} & \multicolumn{2}{c}{\textbf{\textit{Method 2}}} \\
\cmidrule{2-3}\cmidrule{4-5}
& {\textbf{\textit{AA}}} & \textbf{\textit{BB}} & {\textbf{\textit{AA}}} & \textbf{\textit{BB}} \\
\midrule
A1 & 0.12\% & 0.12\% & 0.12\% & 0.12\% \\ \medskip\smallskip
A2 & 0.19\% & 0.19\% & 0.21\% & 0.21\% \\
B1 & 0.06\% & 0.06\% & 0.06\% & 0.06\% \\
B2 & 0.14\% & 0.14\% & 0.14\% & 0.14\% \\ \medskip\smallskip
B3 & 98.51\% & 98.53\% & 98.51\% & 98.46\% \\
C1 & 0.84\% & 0.83\% & 0.85\% & 0.84\% \\
C2 & 0.70\% & 0.70\% & 0.71\% & 0.71\% \\
C3 & 0.66\% & 0.66\% & 0.67\% & 0.67\% \\
C4 & 0.61\% & 0.61\% & 0.62\% & 0.61\% \\
\bottomrule
\end{tabularx}
\end{table}
\end{document}
得到以下结果:
我也尝试使用简单的\tabular
环境,但是我遇到了问题,@{\extracolsep{8pt}}
而且我认为这不是处理此问题最正确的方法。
请注意,这是一份大型文档中的表格,该文档分为多个章节,并且许多包用于满足不同的需求。表格的样式也应保持不变,以与文档的其余部分保持一致。
多谢!
编辑
我认为使用表格环境已经越来越接近了:
\begin{document}
\begin{table}
\caption{\label{Table}Indices}
\begin{tabular}{m{3.50cm} x{2.3cm} x{2.3cm} @{\extracolsep{8pt}} x{2.3cm} x{2.3cm}}
\toprule
\multirow{2}{*}{\textbf{\textit{Index}}} & \multicolumn{2}{c}{\textbf{\textit{Method 1}}} & \multicolumn{2}{c}{\textbf{\textit{Method 2}}} \\
\cmidrule{2-3}\cmidrule{4-5}
& {\textbf{\textit{AA}}} & \textbf{\textit{BB}} & {\textbf{\textit{AA}}} & \textbf{\textit{BB}} \\
\midrule
A1sometext here & 0.12\% & 0.12\% & 0.12\% & 0.12\% \\
A2 & 0.19\% & 0.19\% & 0.21\% & 0.21\% \\ \medskip\smallskip
B1 & 0.06\% & 0.06\% & 0.06\% & 0.06\% \\
B2 & 0.14\% & 0.14\% & 0.14\% & 0.14\% \\
B3 & 98.51\% & 98.53\% & 98.51\% & 98.46\% \\ \medskip\smallskip
C1 & 0.84\% & 0.83\% & 0.85\% & 0.84\% \\
C2 & 0.70\% & 0.70\% & 0.71\% & 0.71\% \\
C3 & 0.66\% & 0.66\% & 0.67\% & 0.67\% \\
C4 & 0.61\% & 0.61\% & 0.62\% & 0.61\% \\
\bottomrule
\end{tabular}
\end{table}
\end{document}
我仍然遇到第一个单元格的垂直居中和行之间的空间(A2 到 B1 和 B3 到 C1)的问题。
答案1
您正在加载siunitx
但未使用它来对齐表列,这使得98.xx
条目看起来不对齐。
我首先展示tabular
,如果您确实想将表格扭曲为全宽使用tabular*
,但这样做的主要效果是使表格更难阅读。
\documentclass[12pt, oneside]{article}
\usepackage{multicol}
\usepackage{multirow}
\usepackage{tabularx}
\usepackage{siunitx}
\usepackage{booktabs}
\renewcommand{\arraystretch}{1.3}
\setlength{\tabcolsep}{5pt}
\usepackage{caption}
\captionsetup[table]{skip=5pt}
\begin{document}
\begin{table}\centering
\caption{\label{Table}Indices}
\begin{tabular}{l S S !{\hspace{2em}} S S}
\toprule
\multirow{2}{*}{\textbf{\textit{Index}}} & \multicolumn{2}{c}{\textbf{\textit{Method 1}}} & \multicolumn{2}{c}{\textbf{\textit{Method 2}}} \\
\cmidrule{2-3}\cmidrule{4-5}
&
\multicolumn{1}{c}{\textbf{\textit{AA}}} &
\multicolumn{1}{c}{\textbf{\textit{BB}}} &
\multicolumn{1}{c}{\textbf{\textit{AA}}} &
\multicolumn{1}{c}{\textbf{\textit{BB}}} \\
\midrule
A1 & 0.12\% & 0.12\% & 0.12\% & 0.12\% \\ \medskip\smallskip
A2 & 0.19\% & 0.19\% & 0.21\% & 0.21\% \\
B1 & 0.06\% & 0.06\% & 0.06\% & 0.06\% \\
B2 & 0.14\% & 0.14\% & 0.14\% & 0.14\% \\ \medskip\smallskip
B3 & 98.51\% & 98.53\% & 98.51\% & 98.46\% \\
C1 & 0.84\% & 0.83\% & 0.85\% & 0.84\% \\
C2 & 0.70\% & 0.70\% & 0.71\% & 0.71\% \\
C3 & 0.66\% & 0.66\% & 0.67\% & 0.67\% \\
C4 & 0.61\% & 0.61\% & 0.62\% & 0.61\% \\
\bottomrule
\end{tabular}
\end{table}
\begin{table}\centering
\caption{\label{Table2}Indices}
\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}
l S S !{\hspace{2em}} S S
@{}}
\toprule
\multirow{2}{*}{\textbf{\textit{Index}}} & \multicolumn{2}{c}{\textbf{\textit{Method 1}}} & \multicolumn{2}{c}{\textbf{\textit{Method 2}}} \\
\cmidrule{2-3}\cmidrule{4-5}
&
\multicolumn{1}{c}{\textbf{\textit{AA}}} &
\multicolumn{1}{c}{\textbf{\textit{BB}}} &
\multicolumn{1}{c}{\textbf{\textit{AA}}} &
\multicolumn{1}{c}{\textbf{\textit{BB}}} \\
\midrule
A1 & 0.12\% & 0.12\% & 0.12\% & 0.12\% \\ \medskip\smallskip
A2 & 0.19\% & 0.19\% & 0.21\% & 0.21\% \\
B1 & 0.06\% & 0.06\% & 0.06\% & 0.06\% \\
B2 & 0.14\% & 0.14\% & 0.14\% & 0.14\% \\ \medskip\smallskip
B3 & 98.51\% & 98.53\% & 98.51\% & 98.46\% \\
C1 & 0.84\% & 0.83\% & 0.85\% & 0.84\% \\
C2 & 0.70\% & 0.70\% & 0.71\% & 0.71\% \\
C3 & 0.66\% & 0.66\% & 0.67\% & 0.67\% \\
C4 & 0.61\% & 0.61\% & 0.62\% & 0.61\% \\
\bottomrule
\end{tabular*}
\end{table}
\end{document}
\end{document}
答案2
由于第 2 列至第 5 列不应换行,因此使用这种tabularx
机制似乎有些过头了。我建议您改用tabular*
环境,以及第 2 列至第 5 列的基本列类型。观察宏(由软件包提供)r
的使用情况,插入更多垂直空格。\addlinespace
booktabs
\documentclass{article}
\usepackage{multirow}
\usepackage{booktabs}
\renewcommand{\arraystretch}{1.3}
\usepackage{caption}
\captionsetup[table]{skip=5pt}
\newcommand\mc[1]{\multicolumn{1}{c}{#1}} % handy shortcut macro
\begin{document}
\begin{table}
\setlength\tabcolsep{0pt} % make LaTeX figure out intercolumn whitespace
\caption{\label{Table}Indices}
\begin{tabular*}{\textwidth}{p{3cm} @{\extracolsep{\fill}} rrrr}
\toprule
\textbf{\textit{Index}} &
\multicolumn{2}{c}{\textbf{\textit{Method 1}}} &
\multicolumn{2}{c}{\textbf{\textit{Method 2}}} \\
\cmidrule{2-3} \cmidrule{4-5}
& \mc{\textbf{\textit{AA}}} & \mc{\textbf{\textit{BB}}}
& \mc{\textbf{\textit{AA}}} & \mc{\textbf{\textit{BB}}} \\
\midrule
A1 some text here& 0.12\% & 0.12\% & 0.12\% & 0.12\% \\
A2 & 0.19\% & 0.19\% & 0.21\% & 0.21\% \\
\addlinespace
B1 & 0.06\% & 0.06\% & 0.06\% & 0.06\% \\
B2 & 0.14\% & 0.14\% & 0.14\% & 0.14\% \\
B3 & 98.51\% & 98.53\% & 98.51\% & 98.46\%\\
\addlinespace
C1 & 0.84\% & 0.83\% & 0.85\% & 0.84\% \\
C2 & 0.70\% & 0.70\% & 0.71\% & 0.71\% \\
C3 & 0.66\% & 0.66\% & 0.67\% & 0.67\% \\
C4 & 0.61\% & 0.61\% & 0.62\% & 0.61\% \\
\bottomrule
\end{tabular*}
\end{table}
\end{document}
答案3
另一种解决方案是tabularx
使用数字和表格宽度来确定列数,booktabs
使用水平规则和某些行之间的额外空间,并定义两个新命令以简化表格输入。垂直居中是通过multirow
选项获得的。
对于表格宽度,我选择0.75\textwidth
,但很容易更改为所需宽度。请注意,表格中使用的是 TeX 基元,cr
而不是通常使用的\\
或tablenewline
。原因在以下文章中有解释。约瑟夫赖特答案我的问题。
\documentclass[12pt, oneside]{article}
\usepackage{multicol}
\usepackage{booktabs, multirow ,tabularx}
\usepackage{siunitx}
\usepackage{caption}
\captionsetup[table]{skip=5pt}
\newcommand\mcxbf[1]{\multicolumn{1}{>{\centering\arraybackslash}X}{\bfseries\itshape #1}}
\newcommand\mccbf[1]{\multicolumn{2}{c}{\bfseries\itshape #1}}
\begin{document}
\begin{table}
\centering
\caption{Indices}
\label{Table2}
\begin{tabularx}{0.75\textwidth}{c
*{4}{S[table-format=2.2,
table-space-text-post=\,\%]<{\,\%}}
}
\toprule
\multirow{2}{*}[-0.25ex]{\textbf{\textit{Index}}}
& \mccbf{Method 1} & \mccbf{Method 2} \cr
\cmidrule(lr){2-3}\cmidrule(lr){4-5}
& \mcxbf{AA} & \mcxbf{BB} & \mcxbf{AA} & \mcxbf{BB} \cr
\midrule
A1 & 0.12 & 0.12 & 0.12 & 0.12 \cr
A2 & 0.19 & 0.19 & 0.21 & 0.21 \cr
\addlinespace
B1 & 0.06 & 0.06 & 0.06 & 0.06 \cr
B2 & 0.14 & 0.14 & 0.14 & 0.14 \cr
B3 & 98.51 & 98.53 & 98.51 & 98.46 \cr
\addlinespace
C1 & 0.84 & 0.83 & 0.85 & 0.84 \cr
C2 & 0.70 & 0.70 & 0.71 & 0.71 \cr
C3 & 0.66 & 0.66 & 0.67 & 0.67 \cr
C4 & 0.61 & 0.61 & 0.62 & 0.61 \cr
\bottomrule
\end{tabularx}
\end{table}
\end{document}