编辑

编辑

问题:

使表格宽度为 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}

电流输出:

在此处输入图片描述

问题:

  1. 使表格拉伸 100% 的正确方法是什么?
  2. 为了给 AK 列添加垂直线,需要进行哪些修改?
  3. 有没有办法让字幕水平堆叠 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垂直规则并在其上方和下方留有间隙,那么在这种情况下,您可以将它们合并在一起。例如:

滥用 <code>booktabs</code>

\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} 

在此处输入图片描述

相关内容