如何使用 itemize 正确格式化表格

如何使用 itemize 正确格式化表格

我有这个 LaTeX 代码

\documentclass{article}
\usepackage{diagbox}
\usepackage{amsmath,array,graphicx}

\begin{document}
    \begin{table}[htb]
        \centering
        \caption{Classifiaction}
        \label{table:cc}
        \resizebox{\columnwidth}{!}{%
            \begin{tabular}{|c||*{1}{c|}|p{0.4\textwidth}|*{2}{c|}}\hline
                \backslashbox{Classification}{Model}
                & Model 1 & Model 2 & Model 3 & Model 4\\\hline\hline
                Class & Class 1 & \begin{itemize}
                    \item Class 1 if $A=B$
                    \item Class 2 otherwise
                \end{itemize} & Class 2 & Class 2\\\hline
                Method & Method 1 & Method 2 & Method 1 & Method 2\\\hline
                Time & Constant & Linear & Polylogarithmic & Exponential \\\hline
            \end{tabular}
        }
    \end{table}
\end{document}

生成一个包含带有项目项目符号的单元格的表格。表格看起来很丑陋,因为文本不在单元格内居中,有一些无用的空间(例如在带有项目的单元格中),行间距不均匀等。

我怎样才能改进这个表格?

在此处输入图片描述

我曾尝试使用这种添加项目符号的方法如何在 Table 环境中使用 itemize但我没有成功,即当我使用\tabitem ....\\ \tabitem ...新项目时它不在同一个单元格中而是在新行中。

答案1

我会按照以下形式重新设计您的表格:

在此处输入图片描述

(红线表示文本区域边框)

\documentclass{article}
\usepackage{booktabs, multirow}
\usepackage[skip=1ex]{caption}
\usepackage{enumitem}

\begin{document}
    \begin{table}[htb]
\centering
\setlength\tabcolsep{0pt}
    \caption{Classifiaction}
    \label{table:cc}
\begin{tabular*}{\linewidth}{@{\extracolsep{\fill}} *{2}{l} p{0.28\textwidth} *{2}{l} }
    \toprule
\multirow{2.2}{*}{Classification}
        & \multicolumn{4}{c}{Model}                 \\
    \cmidrule{2-5}
        & Model 1 & Model 2 & Model 3 & Model 4     \\
        \midrule
Class   & Class 1 & \begin{itemize}[nosep, leftmargin=*,
                                    before=\vspace{-0.6\baselineskip},
                                    after =\vspace{-\baselineskip}
                                    ]
                    \item Class 1 if $A=B$
                    \item Class 2 otherwise
                    \end{itemize}
                            & Class 2 & Class 2     \\  \midrule
Method & Method 1 & Method 2 & Method 1 & Method 2  \\  \midrule
Time   & Constant & Linear   & Polylogarithmic & Exponential    \\
    \bottomrule
\end{tabular*}
    \end{table}
\end{document}

如您所见,\diagbox被“模型”的新行替换,“分类”被放入multirow单元格中。

对于表格使用环境tabular*,其宽度等于文本宽度;对于列表使用enumitem包。垂直线被删除,对于水平线使用包中的规则booktabs

答案2

您不应该将\resizebox和 一起使用——它会导致字体大小不一致。我建议使用\small字体大小、减小的\tabcolsep和更合适的文本宽度以及geometry包和tabularx使表格适合边距之间的解决方案。我减小了第一列的宽度,使用了heightwidth的参数\diagbox。对于 liqst 问题,我认为它在单元格的左边框处左对齐看起来会更好,并且没有垂直间距。最后,我将其替换\hline\ hhline以使垂直和水平规则之间的交叉点更好。

\documentclass{article}
\usepackage[showframe]{geometry} 
\usepackage{amsmath, graphicx} 
\usepackage{diagbox}
\usepackage{array, caption, tabularx, hhline}
\usepackage{enumitem} 

\makeatletter
\newcommand*{\compress}{\@minipagetrue}
\makeatother

\begin{document}

    \begin{table}[htb]
    \centering\small
    \setlength{\extrarowheight}{2pt}
    \caption{Classification}
     \setlength{\tabcolsep}{2pt}
    \label{table:cc}
        \begin{tabularx}{\linewidth}{|c||*{1}{c|}| >{\compress}X|*{2}{c|}}
        \hhline{-||-||---}
            \diagbox[height=7ex, width=9em]{Classification}{\raisebox{-1.6ex}{Model}}
            & Model 1 & Model 2 & Model 3 & Model 4\\
            \hhline{=::=::===}
            Class & Class 1 & \begin{itemize}[wide=0pt, leftmargin=*, topsep=0pt, itemsep =0pt, after=\vspace{-\baselineskip}]
                \item Class 1 if $A=B$
                \item Class 2 otherwise
            \end{itemize} & Class 2 & Class 2\\
        \hhline{-||-||---}
            Method & Method 1 & Method 2 & Method 1 & Method 2\\
        \hhline{-||-||---}
            Time & Constant & Linear & Polylogarithmic & Exponential \\
        \hhline{-||-||---}
        \end{tabularx}
    \end{table}

\end{document} 

在此处输入图片描述

答案3

像这样:

\documentclass{article}
\usepackage{diagbox}
\usepackage{amsmath,array,graphicx}

\begin{document}
\renewcommand*{\arraystretch}{2}
    \begin{table}[htb]
        \centering
        \caption{Classifiaction}
        \label{table:cc}
        \resizebox{\columnwidth}{!}{%
            \begin{tabular}{|c||*{1}{c|}|>\centering m{0.4\textwidth}|*{2}{c|}}\hline
                \backslashbox{Classification}{Model}
                & Model 1 & Model 2 & Model 3 & Model 4\\\hline\hline
                Class & Class 1 & \begin{itemize}
                    \item Class 1 if $A=B$
                    \item Class 2 otherwise
                \end{itemize} & Class 2 & Class 2\\\hline
                Method & Method 1 & Method 2 & Method 1 & Method 2\\\hline
                Time & Constant & Linear & Polylogarithmic & Exponential \\\hline
            \end{tabular}
        }
    \end{table}
\end{document}

答案4

以下解决方案似乎可以提供您想要的东西:

在此处输入图片描述

我所做的事情有三个关键:

  • 在制作表格之前,我已将列表保存在框中。然后,在表格中,我可以应用\usebox框来获取已格式化的内容。通过这样做,我可以使第三列居中(正如您想要的那样)。使用可minipage删除列表前后不需要的空白itemize(前提是列表外没有内容)。
  • 通过使用\raisebox,我基本上能够给出在上方和下方添加空白缓冲区的外观列表。这有点用词不当,因为我实际上做的只是告诉 LaTeX,盒子的高度和深度比实际要大一点。语法\raisebox
\raisebox{<lift>}
        [<optional height specification>]
        [<optional depth specification>]
        {<content>}
  • 我用支柱对间距进行一些控制。

代码如下:

\documentclass{article}
\usepackage{diagbox}
\usepackage{amsmath,array,graphicx}

\newcommand\aestrut[2]{\rule[#1]{0pt}{1pt}%%
                       \rule[#2]{0pt}{1pt}}
\newcommand\fixedstrut{\aestrut{2.5ex}{-1.5ex}}

\begin{document}
\newsavebox\aebox
\begin{lrbox}\aebox
  \begin{minipage}{0.4\textwidth-6pt}
    \begin{itemize}
      \item Class 1 if $A=B$
      \item Class 2 otherwise
    \end{itemize} 
  \end{minipage}%%
\end{lrbox}

\begin{table}[htb]
  \centering
  \caption{Classifiaction\aestrut{0pt}{-2ex}}
  \label{table:cc}
  \resizebox{\columnwidth}{!}{%
    \begin{tabular}{|c||*{1}{c|}|c|*{2}{c|}}\hline
      \backslashbox{\fixedstrut Classification}
                   {\fixedstrut Model} & 
      Model 1                          & 
      Model 2                          & 
      Model 3                          & 
      Model 4  
      \\\hline\hline
      Class                            & 
      Class 1                          & 
      \raisebox{0pt}[\height+2ex][\depth+2.5ex]{\usebox{\aebox}}
                                       & 
      Class 2                          & 
      Class 2  
      \\\hline
      \aestrut{3ex}{-2ex}%%
      Method                           & 
      Method 1                         & 
      Method 2                         & 
      Method 1                         & 
      Method 2
      \\\hline
      \aestrut{3ex}{-2ex}%%
      Time                             & 
      Constant                         & 
      Linear                           & 
      Polylogarithmic                  & 
      Exponential 
      \\\hline
    \end{tabular}
  }
\end{table}

\end{document}

相关内容