问题:
使表格宽度为 100%,并仅为字母 AK 添加垂直线。
最小工作示例(MWE):
\begin{table}[htp]
\centering
\footnotesize\setlength{\tabcolsep}{2.5pt}
\begin{tabular}{l@{\hspace{6pt}} *{11}{c}}
\toprule
\bfseries Solution & \multicolumn{11}{c}{\bfseries Criteria} \\
\cmidrule(l){2-12}
& A & B & C & D & E & F & G & H & I & J & K \\
\midrule
\bfseries Text 1
\\
\bfseries Text 2
\\
\bfseries Text 3
\\
\bfseries Text 4
\\
\bfseries Text 5
\\
\bfseries Text 6
\\
\bottomrule
\addlinespace
\multicolumn{11}{l}{A: Caption 1}\\
\multicolumn{11}{l}{B: Caption 2}
\end{tabular}
\caption{Text text text}\label{tab:comparison}
\end{table}
电流输出:
问题:
- 使表格拉伸 100% 的正确方法是什么?
- 为了给 AK 列添加垂直线,需要进行哪些修改?
- 有没有办法让字幕水平堆叠 4 x 4 x 2 而不是垂直堆叠 11 个?
答案1
tabularx
以下是获取全宽表格的方法,还展示了如何将\multicolumn
一行中的多个 s 组合在一起。这解决了问题 (1) 和 (3)。
\documentclass{article}
\usepackage{array,booktabs,tabularx}
\begin{document}
\begin{table}[htp]
\centering
\footnotesize\setlength{\tabcolsep}{2.5pt}
\begin{tabularx}{\linewidth}{>{\bfseries}l@{\hspace{6pt}} *{11}{>{\centering\arraybackslash}X}}
\toprule
Solution & \multicolumn{11}{c}{\bfseries Criteria} \\
\cmidrule(l){2-12}
& A & B & C & D & E & F & G & H & I & J & K \\
\midrule
Text 1
\\
Text 2
\\
Text 3
\\
Text 4
\\
Text 5
\\
Text 6
\\
\bottomrule
\addlinespace
\end{tabularx}
\begin{tabularx}{\linewidth}{*{3}X}
A: Caption 1\newline B: Caption 2\newline C: Caption 3\newline D: Caption 4 & E: Caption 5\newline F: Caption 6\newline G: Caption 7\newline H: Caption 8 & I: Caption 9\newline J: Caption 10\newline K: Caption 11\\
\end{tabularx}
\caption{Text text text}\label{tab:comparison}
\end{table}
\end{document}
我强烈推荐不是使用垂直规则。但是,如果出于某种原因您必须这样做(即您别无选择),那么您需要booktabs
用 LaTeX 的默认规则替换增强规则。这解决了问题 (2)。例如:
\begin{table}[htp]
\centering
\footnotesize\setlength{\tabcolsep}{2.5pt}
\begin{tabularx}{\linewidth}{>{\bfseries}l@{\hspace{6pt}} *{11}{>{\centering\arraybackslash}X}}
\hline
Solution & \multicolumn{11}{c}{\bfseries Criteria} \\
\cline{2-12}
& \multicolumn{1}{X|}{A} & \multicolumn{1}{X|}{B} & \multicolumn{1}{X|}{C} & \multicolumn{1}{X|}{D} & \multicolumn{1}{X|}{E} & \multicolumn{1}{X|}{F} & \multicolumn{1}{X|}{G} & \multicolumn{1}{X|}{H} & \multicolumn{1}{X|}{I} & \multicolumn{1}{X|}{J} & K \\
\hline
Text 1
\\
Text 2
\\
Text 3
\\
Text 4
\\
Text 5
\\
Text 6
\\
\hline
\end{tabularx}
\begin{tabularx}{\linewidth}{*{3}X}
A: Caption 1\newline B: Caption 2\newline C: Caption 3\newline D: Caption 4 & E: Caption 5\newline F: Caption 6\newline G: Caption 7\newline H: Caption 8 & I: Caption 9\newline J: Caption 10\newline K: Caption 11\\
\end{tabularx}
\caption{Text text text}\label{tab:comparison}
\end{table}
如果您不介意滥用booktabs
垂直规则并在其上方和下方留有间隙,那么在这种情况下,您可以将它们合并在一起。例如:
\documentclass{article}
\usepackage{array,booktabs,tabularx}
\newcolumntype{Y}{>{\centering\arraybackslash}X|}
\begin{document}
\begin{table}[htp]
\centering
\footnotesize\setlength{\tabcolsep}{2.5pt}
\begin{tabularx}{\linewidth}{>{\bfseries}l@{\hspace{6pt}} *{11}{>{\centering\arraybackslash}X}}
\toprule
Solution & \multicolumn{11}{c}{\bfseries Criteria} \\
\cmidrule(l){2-12}
& \multicolumn{1}{Y}{A} & \multicolumn{1}{Y}{B} & \multicolumn{1}{Y}{C} & \multicolumn{1}{Y}{D} & \multicolumn{1}{Y}{E} & \multicolumn{1}{Y}{F} & \multicolumn{1}{Y}{G} & \multicolumn{1}{Y}{H} & \multicolumn{1}{Y}{I} & \multicolumn{1}{Y}{J} & K \\
\midrule
Text 1
\\
Text 2
\\
Text 3
\\
Text 4
\\
Text 5
\\
Text 6
\\
\bottomrule
\addlinespace
\end{tabularx}
\begin{tabularx}{\linewidth}{*{3}X}
A: Caption 1\newline B: Caption 2\newline C: Caption 3\newline D: Caption 4 & E: Caption 5\newline F: Caption 6\newline G: Caption 7\newline H: Caption 8 & I: Caption 9\newline J: Caption 10\newline K: Caption 11\\
\end{tabularx}
\caption{Text text text}\label{tab:comparison}
\end{table}
\end{document}
编辑
这回答了评论中提出的问题。
\documentclass{article}
\usepackage{array,tabularx}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\begin{document}
\begin{table}[htp]
\centering
\footnotesize\setlength{\tabcolsep}{2.5pt}
\setlength\extrarowheight{5pt}
\begin{tabularx}{\linewidth}{>{\bfseries}l@{\hspace{6pt}} *{10}{Y|}Y}
\hline
Solution & \multicolumn{11}{c}{\bfseries Criteria} \\
\cline{2-12}
& A & B & C & D & E & F & G & H & I & J & K \\
\hline
Agora Voting & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$
\\
Text 2 &&&&&&&&&&
\\
Text 3 &&&&&&&&&&
\\
Text 4 &&&&&&&&&&
\\
Text 5 &&&&&&&&&&
\\
Text 6 &&&&&&&&&&
\\
\hline
\end{tabularx}
\begin{tabularx}{\linewidth}{*{3}X}
A: Caption 1\newline B: Caption 2\newline C: Caption 3\newline D: Caption 4 & E: Caption 5\newline F: Caption 6\newline G: Caption 7\newline H: Caption 8 & I: Caption 9\newline J: Caption 10\newline K: Caption 11\\
\end{tabularx}
\caption{Text text text}\label{tab:comparison}
\end{table}
\end{document}
再次编辑
这是对评论中另外两个后续问题的回应。
默认情况下,标题居中。这不是我的代码的效果。这只是默认设置。您可以使用包自caption
定义标题的格式。在下面的示例中,我将标题配置为对齐段落。
如果您希望某些列具有指定的宽度,您可以p{width}
照常使用。只要至少有一列是类型X
,并且总宽度不超过表格指定的总宽度,tabularx
就会正确计算。
下面,我假设条件 A 的列宽为 50pt,条件 F 的列宽为 10pt。所有其他条件都应排版为等宽列。
\documentclass{article}
\usepackage{array,tabularx,caption}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\newcolumntype{y}[1]{>{\centering\arraybackslash}p{#1}}
\captionsetup{justification=justified,singlelinecheck=off}
\begin{document}
\begin{table}[htp]
\centering
\footnotesize\setlength{\tabcolsep}{2.5pt}
\setlength\extrarowheight{5pt}
\begin{tabularx}{\linewidth}{>{\bfseries}l@{\hspace{6pt}}y{50pt}|*{4}{Y|}y{10pt}|*{4}{Y|}Y}
\hline
Solution & \multicolumn{11}{c}{\bfseries Criteria} \\
\cline{2-12}
& A & B & C & D & E & F & G & H & I & J & K \\
\hline
Agora Voting & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$
\\
Text 2 &&&&&&&&&&
\\
Text 3 &&&&&&&&&&
\\
Text 4 &&&&&&&&&&
\\
Text 5 &&&&&&&&&&
\\
Text 6 &&&&&&&&&&
\\
\hline
\end{tabularx}
\begin{tabularx}{\linewidth}{*{3}X}
A: Caption 1\newline B: Caption 2\newline C: Caption 3\newline D: Caption 4 & E: Caption 5\newline F: Caption 6\newline G: Caption 7\newline H: Caption 8 & I: Caption 9\newline J: Caption 10\newline K: Caption 11\\
\end{tabularx}
\caption{Text text text}\label{tab:comparison}
\end{table}
\end{document}
答案2
如果我理解了你想要什么,这里有两个解决方案。它们都基于tabularx
。第一个是为标题添加第二个 tabularx 环境;第二个使用multicols
环境。该makecell
包用于列标题的通用格式和行的一些垂直填充:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[showframe]{geometry}
\usepackage{tabularx, array, makecell, booktabs}
\renewcommand\theadfont{\bfseries}
\setcellgapes{4pt}
\usepackage{multicol}
\begin{document}
\begin{table}[!htp]
\makegapedcells
\footnotesize\setlength{\tabcolsep}{2.5pt}
\begin{tabularx}{\linewidth}{ >{\bfseries}l@{\hspace{6pt}} *{11}{X}}
\toprule
& \multicolumn{11}{c}{\bfseries Criteria} \\
\cmidrule(l){2-12}
Solution & \thead{A} & \thead{B} & \thead{C} & \thead{D} & \thead{E} & \thead{F} & \thead{G} & \thead{ H} & \thead{I} & \thead{J} & \thead{K} \\
\midrule
Text 1
\\
Text 2
\\
Text 3
\\
Text 4
\\
Text 5
\\
Text 6
\\
\bottomrule
\end{tabularx}
\setlength\columnseprule{0.6pt}
\setlength\columnsep{2em}
\begin{multicols}{3}
A: Caption 1 \\
B: Caption 2 \\
C: Caption 3 \\
D: Caption 4 \\
E: Caption 5 \\
F: Caption 6 \\
G: Caption 7 \\
H: Caption 8 \\
I : Caption 9 \\
J: Caption 10 \\
K: Caption 11 \\
\end{multicols}
\caption{Text text text}\label{tab:comparison}
\end{table}
\vskip3ex
\begin{table}[!hbp]
\footnotesize\setlength{\tabcolsep}{2.5pt}
{\makegapedcells
\begin{tabularx}{\linewidth}{>{\bfseries}l@{\hspace{6pt}} *{11}{X}}
\toprule
& \multicolumn{11}{c}{\bfseries Criteria} \\
\cmidrule(l){2-12}
Solution & \thead{A} & \thead{B} & \thead{C} & \thead{D} & \thead{E} & \thead{F} & \thead{G} & \thead{ H} & \thead{I} & \thead{J} & \thead{K} \\
\midrule
Text 1
\\
Text 2
\\
Text 3
\\
Text 4
\\
Text 5
\\
Text 6
\\
\bottomrule
\end{tabularx}}
\setlength\tabcolsep{6pt}
\begin{tabularx}{\linewidth}{|X|X|X|}
\addlinespace[3ex]
A: Caption 1 & E: Caption 5 & I : Caption 9 \\
B: Caption 2 & F: Caption 6 & J: Caption 10 \\
C: Caption 3 & G: Caption 7 & K: Caption 11 \\
D: Caption 4 & H: Caption 8
\end{tabularx}
\caption{Text text text}\label{tab:comparison}
\end{table}
\end{document}