Можно ли добавить `\partopsep` под списком окружения, за которым следует новый абзац?

Можно ли добавить `\partopsep` под списком окружения, за которым следует новый абзац?

Приведем следующий минимальный пример

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

выход

Связанный контент