环境下方的 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}