为什么 \setlist{nosep} 在表格环境中不起作用?

为什么 \setlist{nosep} 在表格环境中不起作用?

我希望有一个紧凑的列表,项目之前、之后或之间没有空格。我根据这个问题的答案设法做到了这一点: 如何删除 itemize/enumerate 之前的空格?

\usepackage{enumitem}
\setlist{nosep}

当列表位于段落之前和/或之后时,这种方法很有效。

但是:这在表格环境中不起作用。列表前后有一些额外的垂直空间。有人能告诉我为什么,更重要的是如何修复它吗?

预先感谢您的帮助。

表格中的额外空间

可以使用以下代码重现该问题:

\documentclass{article}

\usepackage{enumitem}
\setlist{nosep,noitemsep }

\begin{document}

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea 
\begin{itemize}
\item Item 1
\item Item 2
\end{itemize}
Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,     
\begin{table}[h]
\begin{tabular}{|p{1\textwidth}|}\hline
\begin{itemize}[itemparsep=0pt]
\item Item 1
\item Item 2
\end{itemize}\\
\hline
\end{tabular}
\end{table} 

\end{document}

答案1

以下代码使 latex 认为列表位于 minipage 中,因此它不添加垂直空间。在列表末尾,它添加了负垂直空间:

\documentclass{article}
\usepackage{array}
\usepackage{enumitem}
\setlist{nosep, noitemsep }
\makeatletter
\newcommand*{\compress}{\@minipagetrue}
\makeatother

\begin{document}

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea
\begin{itemize}
\item Item 1
\item Item 2
\end{itemize}
Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,     
\begin{table}[h]
\begin{tabular}{|>{\compress}p{1\textwidth}|}\hline
\begin{itemize}[parsep=0pt, after=\vspace*{-\baselineskip}]
\item Item 1
\item Item 2
\end{itemize}\\
\hline
\end{tabular}
\end{table}

\end{document} 

在此处输入图片描述

答案2

直接使用更简单minipage,只[after=\strut]需要选项,因为后面的空格itemize也被删除了。

\documentclass{article}    
\usepackage{enumitem}
\setlist{nosep }

\begin{document}

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea 
\begin{itemize}
  \item Item 1
  \item Item 2
\end{itemize}
Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,     
\begin{table}[h]
\begin{tabular}{|p{\textwidth}|}\hline
  \begin{minipage}[t]{\linewidth}
    \begin{itemize}[after=\strut]
      \item Item 1
      \item Item 2
    \end{itemize}
  \end{minipage}\\
  \hline
\end{tabular}
\end{table} 

\end{document}

在此处输入图片描述

答案3

无需太多努力即可拥有围栏良好且狭窄的列表的其他方法:

那 呢 \vbox

\documentclass{article}
\usepackage{enumitem}\setlist{nosep,noitemsep}
\begin{document}
\noindent\fbox{\vbox{\begin{itemize}
\item Item 1    
\item Item 1    
\end{itemize}}}

或者是一个没有表格的迷你页面:

\documentclass{article}
\usepackage{enumitem}\setlist{noitemsep}
\begin{document}
\noindent\fboxsep2pt\fbox{\begin{minipage}{\dimexpr\linewidth-2\fboxsep-2\fboxrule}
\begin{itemize}
\item Item 1    
\item Item 1    
\end{itemize}
\end{minipage}}
\end{document}

或者“像表格一样的列表”(或者相反,不确定......):

\documentclass{article}
\usepackage{listliketab,array}
\usepackage{tabularx}
\begin{document}
\storestyleof{itemize}
\begin{listliketab}
\renewcommand\arraystretch{1} % is not better the default?
\begin{tabularx}{\linewidth}{|LX|}\hline
\textbullet & Item 1 \\
\textbullet & Item 2 \\\hline
\end{tabularx}
\end{listliketab}
\end{document}

相关内容