次の最小限の例を考えてみましょう
\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}
最初のリストと 2 番目のリストは予想どおりに間隔が空けられており、2 番目のリストは個別の段落として間隔が空けられています (最後の 2 つの段落と比較)。ただし、3 番目のリストは、関連のない段落が続いているにもかかわらず、最初のリストと同じように間隔が空けられています。
この答え\partopsep
新しい段落が始まるとリスト環境の上下に追加される状態。\partopsep
追加された状態を取得する(かなり単純な)方法はありますか?一番下までリスト環境の後に新しい段落が続く場合はどうなりますか?
答え1
興味深い質問ですね。これが私の解決策の試みです。 を追加して、特定のリストに対してこれを有効にする必要があります。 ( )first={\useparbotsep}
の 1 つのマクロを変更しますが、が呼び出されたときにのみ違いが生じるようにすることが期待されます。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}