Ist es möglich, `\partopsep` unterhalb einer Listenumgebung hinzuzufügen, auf die ein neuer Absatz folgt?

Ist es möglich, `\partopsep` unterhalb einer Listenumgebung hinzuzufügen, auf die ein neuer Absatz folgt?

Gegeben sei das folgende Minimalbeispiel

\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}

Die erste und zweite Liste haben den erwarteten Abstand, wobei die zweite Liste als einzelner Absatz angeordnet ist (vergleichen Sie mit den letzten beiden Absätzen). Die dritte Liste hat jedoch den gleichen Abstand wie die erste, obwohl auf sie ein unabhängiger Absatz folgt.

Diese Antwortgibt an, dass \partopsepüber und unter einer Listenumgebung hinzugefügt wird, wenn ein neuer Absatz beginnt. Gibt es eine (ziemlich einfache) Möglichkeit, eine \partopsephinzugefügtenur bis zum Bodenwenn auf eine Listenumgebung ein neuer Absatz folgt?

Antwort1

Interessante Frage. Hier ist mein Lösungsversuch. Sie müssen es für eine bestimmte Liste aktivieren, indem Sie hinzufügen first={\useparbotsep}. Es ändert ein Makro von latex.ltx( \@doendpe), aber hoffentlich auf eine Weise, die nur dann einen Unterschied macht, wenn \useparbotsepaufgerufen wird.

Dies funktioniert nur für Listen der obersten Ebene. Listen der nachfolgenden Ebenen verhalten sich normal.

\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}

Ausgabe

verwandte Informationen