給出以下最小範例
\documentclass[parskip=full]{scrreprt}
\usepackage[onehalfspacing]{setspace}
\usepackage{enumitem}
\usepackage{lipsum}
\setlist{
parsep=\parsep,
itemsep=-.5\parsep,
topsep=-.5\parsep,
partopsep=.5\parsep
}
\begin{document}
\lipsum[1]
\begin{itemize}
\item list
\item between
\item paragraphs
\end{itemize}
\lipsum[2]
\begin{itemize}
\item list
\item in
\item own
\item paragraph
\end{itemize}
\lipsum[3]
\begin{itemize}
\item list
\item above
\item paragraph
\end{itemize}
\lipsum[4-5]
\end{document}
第一個和第二個清單按預期間隔,第二個清單作為單一段落間隔(與最後兩個段落比較)。然而,第三個清單的間距與第一個清單相同,儘管它後面跟著一個不相關的段落。
這個答案表示\partopsep
如果開始一個新段落,則加入到清單環境的上方和下方。有沒有一種(相當簡單的)方法來獲得\partopsep
添加只到底部如果列表環境後面跟著一個新段落?
答案1
有趣的問題。這是我嘗試的解決方案。您必須透過新增 來為特定清單啟用它first={\useparbotsep}
。它修改latex.ltx
( ) 中的一個宏,但希望以一種僅在呼叫\@doendpe
時產生影響的方式。\useparbotsep
它僅適用於頂級列表。後續級別列表表現正常。
\documentclass[parskip=full]{scrreprt}
\usepackage[onehalfspacing]{setspace}
\usepackage{enumitem}
\makeatletter
\newskip\bottomsepadd
\newif\ifparbotsep
\def\useparbotsep{%
\ifnum\@listdepth=\@ne
\global\bottomsepadd\partopsep
\global\@topsepadd\topsep
\global\parbotseptrue
\fi}
\def\@doendpe{% <- modified from latex.ltx (hopefully with no side effects)
\@endpetrue
\def\par{\@restorepar
\clubpenalty\@clubpenalty
\everypar{}%
\ifparbotsep
\ifnum\@listdepth=\z@
\if@endpe\vskip\bottomsepadd\fi
\global\parbotsepfalse
\fi
\fi
\par\@endpefalse}
\everypar{{\setbox\z@\lastbox}%
\everypar{}\@endpefalse}}
\makeatother
\setlist{
parsep=\parsep,
itemsep=-.5\parsep,
topsep=-.5\parsep,
partopsep=.5\parsep,
first={\useparbotsep}
}
\begin{document}
\vskip 5pt\hrule\vskip 5pt
List within paragraph:
\begin{itemize}
\item List item.
\item List item.
\item List item.
\end{itemize}
End of List within paragraph.
\vskip 5pt\hrule\vskip 5pt
List as its on paragraph:
\begin{itemize}
\item List item.
\item List item.
\item List item.
\end{itemize}
Paragraph following list as its own paragraph.
\vskip 5pt\hrule\vskip 5pt
List above paragraph:
\begin{itemize}
\item List item.
\item List item.
\item List item.
\end{itemize}
Text following list.
\vskip 5pt\hrule\vskip 5pt
List below paragraph:
\begin{itemize}
\item List item.
\item List item.
\item List item.
\end{itemize}
Paragraph following list.
\vskip 5pt\hrule\vskip 5pt
\end{document}