我正在尝试使用 在表格中显示列表,tabularx
并使用使边距/填充非常紧密enumitem
。
\documentclass{scrreprt}
\usepackage{tabularx}
\usepackage{enumitem}
\setlist{nosep,leftmargin=1em}
\begin{document}
This is a long test sentence
\begin{itemize}
\item foo
\item bar
\end{itemize}
continuing here.
\vspace{2cm}
\begin{tabularx}{\textwidth}{rX}
foo & bar
\begin{itemize}
\item test
\item foobar
\end{itemize}
\\
baz & barfoo \\
\end{tabularx}
\end{document}
虽然边距重置在表格外部工作正常(如第一个示例所示),但一旦在表格内部(如第二个示例所示),列表后就会插入一个空白行。我该如何摆脱它?
KOMAScript
(顺便说一下,我正在使用LuaLaTeX
)
答案1
每个列表都定义了topsep
,\parskip
以及\partopsep
列表上方和下方的垂直空间。这些空间 <ou 可以通过两种方式删除:
- 使用
enumitem
参数before
和after
(第一个例子) - 封装列表
minipage
(第二个例子)
\documentclass{scrreprt}
\usepackage{tabularx}
\usepackage{enumitem}
\setlist{nosep,leftmargin=1em}
\begin{document}
\begin{tabularx}{\textwidth}{rX}
foo & bar
\begin{itemize}[after=\vspace{-\baselineskip}]
\item test
\item foobar
\end{itemize}
\\
baz & barfoo \\
\end{tabularx}
\end{document}
一个更复杂的解决方案是定义新的列表,将其命名为\tabitem
,它将列表封装在minipage
:
\documentclass{scrreprt}
\usepackage{tabularx}
\usepackage{enumitem}
\newlist{tabitem}{itemize}{1} % <-- defined new list
\setlist[tabitem]{nosep=0pt,
leftmargin=*,
label=\textbullet,
after=\end{minipage}, % <---
before=\begin{minipage}[t]{\linewidth}\raggedright % <---
}
\usepackage{lipsum}
\begin{document}
\begin{tabularx}{\textwidth}{rX}
foo & bar
\begin{tabitem}
\item \lipsum[66]
\item foobar
\end{tabitem} \\
baz & \begin{tabitem}
\item \lipsum[66]
\item foobar
\end{tabitem} \\
text & \lipsum[66]
\end{tabularx}
\end{document}