Dado o seguinte exemplo mínimo
\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}
A primeira e a segunda listas são espaçadas conforme esperado, com a segunda lista espaçada como um parágrafo individual (compare com os dois últimos parágrafos). No entanto, a terceira lista está espaçada da mesma forma que a primeira, embora seja seguida por um parágrafo não relacionado.
Esta respostaafirma que \partopsep
é adicionado acima e abaixo de um ambiente de lista se iniciar um novo parágrafo. Existe uma maneira (razoavelmente simples) de obter um \partopsep
valor adicionalsó até o fundose um ambiente de lista for seguido por um novo parágrafo?
Responder1
Pergunta interessante. Aqui está minha tentativa de solução. Você deve habilitá-lo para uma lista específica adicionando first={\useparbotsep}
. Ele modifica uma macro de latex.ltx
( \@doendpe
), mas esperançosamente de uma forma que só faça diferença quando \useparbotsep
for chamada.
Funciona apenas para listas de nível superior. As listas de níveis subsequentes se comportam normalmente.
\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}