列表环境下方的 vspace 可以与上面的 vspace 分离吗?

列表环境下方的 vspace 可以与上面的 vspace 分离吗?

环境下方的 vspace 可以list与上方的 vspace 分离吗?具体来说,当我用 开始一个定理时enumerate,我仍然希望在 和\topsep之间放置enumerate任何文本(在定理内),但看起来我必须\vspace{\topsep}手动插入才能实现这一点。我不介意在自己的文档中手动插入它,但我负责一组编辑,所以如果我能在为他们提供的类文件中解决这个问题会更好。

答案1

这似乎是一个精确的选择:列表从定理开头等位置开始,也就是说,当段落尚未开始并且 LaTeX 由于可能的\label命令而处于“暂停状态”时,条件设置为 true。负责添加最终空间\if@noparlist的定义,仅当条件为 false 时才添加垂直空间(设置为等于加上一些调整)。\endtrivlist\@topsepadd\topsep

实际上,将条件设置为真的准确位置是在之后\item:定理环境被美化trivlist并且定理语句在隐式之后进行处理\item

因此,按照您的要求操作会导致在紧接着 之后的嵌套列表之后也插入一个额外的空格\item

我想到的一个想法是发出\addvspace\@topsepadd何时\if@noparlist是真的此时列表深度为零。这也会影响环境启动list后立即启动的环境flushleft,因为再次flushleft基于trivlist。另一方面,这似乎不是理想的行为,因此这里是建议的补丁:

\documentclass{article}

\usepackage{etoolbox}

\makeatletter
% Patch a macro in the kernel: use with caution!
\patchcmd{\endtrivlist}
  {\if@noparlist}
  {\if@noparlist\ifnum\@listdepth=\z@\addvspace\@topsepadd\fi}
  {}{}
\makeatother

\newtheorem{thm}{Theorem}

\begin{document}

\section{A theorem}
\begin{thm}
\begin{enumerate}
\item a
\item b
\end{enumerate}
Some text following.
\end{thm}

\section{A nested enumerate}
\begin{enumerate}
\item \begin{enumerate}
  \item 1
  \item 2
  \end{enumerate}
\item 3
\end{enumerate}

\section{Enumerate in flushleft}
\begin{flushleft}
\begin{enumerate}
\item a
\item b
\end{enumerate}
Some text following.
\end{flushleft}
\end{document}

补丁结果

在此处输入图片描述

没有补丁的结果

在此处输入图片描述

相关内容