我不知道这是 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}
如第一个列表所示,正如预期的那样,列表的上方和下方添加了topsep
of 10pt
。此处列表前面是一些文本。
在第二个列表中,topsep
完全被忽略,打印b紧接在列表末尾。此处列表直接在后面开始,\item
没有文本。我期望topsep
列表后面至少会放置一个垂直空格。如果用 替换,也会发生同样的a
情况\leavevmode
。
如果一个人用列表启动一个类似定理的环境,然后输入文本,这个问题就会变得特别严重。根据列表的样式,这可能会与普通段落难以区分。
那么为什么会出现这种情况呢?如何才能解决这个问题呢?修复方法可能是使用 key after
,但应该以某种方式检测这种特定情况(即,如果嵌套,列表开始时没有文本)。
编辑:显然,amsthm
也意识到了这个问题。摘自amsthm
文档第 4 页:
如果没有提供文本,列表将在同一行上跟随标题。这有三个不良影响:定理头和第一项之间的水平空间将大得令人无法接受,指向该定理的超链接在 PDF 文件中不会“实时”(尽管会被标记),并且列表末尾应有的额外垂直空间将消失[强调我的]。
答案1
也许可以帮忙:
- 没有
\topsep
但有before
和after={\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}