嵌套列表中的 \topsep 被忽略

嵌套列表中的 \topsep 被忽略

我不知道这是 LaTeX 问题还是问题,但如果列表以垂直模式开始,则enumitem似乎\topsep(和类似地)在嵌套列表中被忽略。\partopsep

考虑以下topsep=10pt带有夸张的例子。

\documentclass{article}
\usepackage{enumitem}
\begin{document}

\begin{enumerate}
    \item a % list starts after text
        \begin{enumerate}[topsep=10pt]
            \item 
        \end{enumerate}
        b
\end{enumerate}

\begin{enumerate}
    \item % list starts without text
        \begin{enumerate}[topsep=10pt]
            \item 
        \end{enumerate}
        b
\end{enumerate}

\end{document}

在此处输入图片描述

如第一个列表所示,正如预期的那样,列表的上方和下方添加了topsepof 10pt。此处列表前面是一些文本。

在第二个列表中,topsep完全被忽略,打印b紧接在列表末尾。此处列表直接在后面开始,\item没有文本。我期望topsep列表后面至少会放置一个垂直空格。如果用 替换,也会发生同样的a情况\leavevmode

如果一个人用列表启动一个类似定理的环境,然后输入文本,这个问题就会变得特别严重。根据列表的样式,这可能会与普通段落难以区分。

那么为什么会出现这种情况呢?如何才能解决这个问题呢?修复方法可能是使用 key after,但应该以某种方式检测这种特定情况(即,如果嵌套,列表开始时没有文本)。


编辑:显然,amsthm也意识到了这个问题。摘自amsthm文档第 4 页:

如果没有提供文本,列表将在同一行上跟随标题。这有三个不良影响:定理头和第一项之间的水平空间将大得令人无法接受,指向该定理的超链接在 PDF 文件中不会“实时”(尽管会被标记),并且列表末尾应有的额外垂直空间将消失[强调我的]。

答案1

也许可以帮忙:

  • 没有\topsep但有beforeafter={\leavevmode\vspace{10pt}}

\leavevmode备注:在代码中测试是否使用before

\documentclass{article}
\usepackage{enumitem}
\begin{document}

\setlist[enumerate,2]{%
  % before={\vspace{10pt}},
  before={\leavevmode\vspace{10pt}},
  after={\leavevmode\vspace{10pt}}
  }

\begin{enumerate}
    \item a % list starts after text
        \begin{enumerate}
            \item 
        \end{enumerate}
        b
\end{enumerate}

\begin{enumerate}
    \item % list starts without text
        \begin{enumerate}
            \item 
        \end{enumerate}
        b
\end{enumerate}
\end{document}

在此处输入图片描述

相关内容