我是新手。我想在多行中使用 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” 用于\multirowcell
,makecell
它是宏的稍微改进的版本multirow
。
附录:itemize
如果您由于某种原因坚持在单元格中 使用multirow
,那么您需要明确定义它:
\multirow{<number of spanned lines>}{<width>}{<itemize>}
其中<number of spanned lines>
是相邻列的行数,<width>
是列宽(不必在现场计算,而是提前确定)。
如果跨越的行数小于 中的行数itemize
,您将面临表格形式的补救措施。解决它并非易事。