새 단락이 이어지는 목록 환경 아래에 `\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}

산출

관련 정보