在多行内逐项列出

在多行内逐项列出

我是新手。我想在多行中使用 itemize。但是 latex 显示错误。我找到了一些类似的问题,但无法解决我的问题。

\documentclass[a4paper,11pt]{report}

\usepackage{multirow}
\usepackage{enumitem}

\begin{document}
\begin{table}[h]
  \renewcommand{\arraystretch}{1.1}
  \caption{Overview}
  \label{tab:data_overview}
  \centering
  \begin{tabular}{|p{3cm}|p{3cm}|p{8.5cm}|}
    \hline
    \multicolumn{1}{|c|}{\textbf{ABC}} & \multicolumn{1}{c|}{\textbf{XYZ}} & \multicolumn{1}{c|}{\textbf{DEF}} \\
    \hline
    firstcol & secondcol & thirdcol\\
    \hline
        \multirow{7}{*}{firstcol} & secondcol & \multirow{7}{*}{
        \begin{itemize}
            \item firstitem
            \begin{itemize}
            \item subitem1
            \end{itemize}
        \item seconditem
            \begin{itemize}
            \item subitem1
            \item subitem2
            \item subitem3
            \end{itemize}
        \end{itemize}
        }
    \\
    \hline

  \end{tabular}
\end{table}
\end{document}

但是它会弹出如下错误

LaTeX Error: Something's wrong--perhaps a missing \item

有沒有任何選擇?

答案1

第一个使用tabularx环境的解决方案存在一些故障:在带有 itemize 的列中,宽度列无法按预期工作。因此,同时我找到了更好的tabular环境解决方案:

\documentclass{report}
\usepackage{makecell,multirow}
\renewcommand\theadfont{\bfseries\normalsize}
\usepackage{caption}
\usepackage{calc}
\usepackage{enumitem}
\newcommand{\tablistcommand}{% <-- for eliminating vertical space
                             %     before and after itemize
            \leavevmode\par\vspace{-\baselineskip}
                            }
\newcolumntype{P}[1]{p{#1-2\tabcolsep-\arrayrulewidth}}

\begin{document}
    \begin{table}[h]
\setcellgapes{3pt}
\makegapedcells
\caption{Overview}
\label{tab:data_overview}
    \centering
\begin{tabular}{|*{2}{P{0.2\textwidth}|}P{0.6\textwidth}|}
    \hline
\thead{ABC} &   \thead{XYZ} &   \thead{DEF}     \\
    \hline
first col   &   second col  &   third col third col third col third col third col third col third col third col third col   \\
    \hline
\multirowcell{7}{first\\ multirow}
           &   second col  & 
    \begin{itemize}[leftmargin=0cm,noitemsep,topsep=0pt,                     
                    before = \tablistcommand,
                    after  = \tablistcommand]
    \item[] first item
        \begin{itemize}[leftmargin=0.3cm]
        \item item 1
        \end{itemize}
    \item[] second item
        \begin{itemize}[leftmargin=0.3cm]
        \item subitem 1
        \item subitem 2
        \item subitem 3
        \end{itemize}
    \end{itemize}                               \\
   \hline
\end{tabular}
    \end{table}
\end{document}

在此处输入图片描述

从你的 MWE 看不出itemize你为什么需要multirow单元格。如你所见,我使用标准单元格。在 itemize 中,我特别注意了 itemize 前后的垂直空间。

对于列头,我建议使用\thead包中的宏makcell。从包中,我现在还使用宏\setcellgapes{3pt}\makegapedcells,它可以提供良好的单元格内容间距。随着它们的使用增加,arraystretch剩余的也随之增加。

对于文本的垂直居中,“first multirow” 用于\multirowcellmakecell它是宏的稍微改进的版本multirow

附录:itemize如果您由于某种原因坚持在单元格中 使用multirow,那么您需要明确定义它:

\multirow{<number of spanned lines>}{<width>}{<itemize>}

其中<number of spanned lines>是相邻列的行数,<width>是列宽(不必在现场计算,而是提前确定)。

如果跨越的行数小于 中的行数itemize,您将面临表格形式的补救措施。解决它并非易事。

相关内容