Dado el siguiente ejemplo 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}
La primera y la segunda lista están espaciadas como se esperaba, y la segunda lista está espaciada como un párrafo individual (compárese con los dos últimos párrafos). Sin embargo, la tercera lista está espaciada de la misma manera que la primera, aunque va seguida de un párrafo no relacionado.
esta respuestaindica que \partopsep
se agrega encima y debajo de un entorno de lista si comienza un nuevo párrafo. ¿Existe alguna forma (razonablemente sencilla) de obtener un \partopsep
complemento?solo hasta el fondo¿Si un entorno de lista va seguido de un nuevo párrafo?
Respuesta1
Interesante pregunta. Aquí está mi intento de solución. Debe habilitarlo para una lista en particular agregando first={\useparbotsep}
. Modifica una macro de latex.ltx
(\@doendpe
), pero con suerte de una manera que solo marque la diferencia cuando \useparbotsep
se llama.
Sólo funciona para listas de nivel superior. Las listas de niveles posteriores se comportan 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}