我想很多人都想知道这个函数,我知道这个问题一定有一个很好的答案。但是,我找不到它,可能是因为我不知道这个问题的合适关键字。
当我使用 beamer 时,我在 \begin{document} 之后立即使用以下代码。
\let\OLDitemize\itemize
\let\OLDenumerate\enumerate
\renewcommand\itemize{\OLDitemize\addtolength{\itemsep}{??\baselineskip}}
\renewcommand\enumerate{\OLDenumerate\addtolength{\itemsep}{???\baselineskip}}
然后,我可以通过将数字代入 ?? 来调整 itemize 环境的项目间间隙。同样,也可以通过将数字代入 ??? 来调整 enumerate 环境之一。
例如,如果我将 2 改为 ?? 并将 4 改为 ???,则 itemize 和 enumerate 环境的整个项目间间隙都会发生变化。
但是,我想根据整个程序中的项目级别调整项目的间隙。也就是说,如果我编写以下代码,
\begin{itemize}
\item a
\item b
\item c
\begin{itemize}
\item d
\item e
\item f
\end{itemize}
\item g
\item h
\item i
\end{itemize}
请告诉我如何根据项目的级别更改项目间隙。有时,我会使用 \vspace 命令,例如 \vspace{.7\baselineskip}。这会使代码变得非常脏,无法阅读。
其实label不是我的目的,我想随意设置item的间距,不管是itemize还是enumerate。
答案1
使用该enumitem
包,您可以为 的每个级别独立指定间距参数itemize
,其中\seteumerate[<level>]{}
。下面,我用一个独特的itemsep
和来展示它topsep
,尽管所有间距参数都可以发挥作用。
\documentclass{article}
\usepackage{enumitem}
\setitemize[1]{itemsep=10pt,topsep=10pt}
\setitemize[2]{itemsep=0pt,topsep=-2pt}
\begin{document}
\begin{itemize}
\item a
\item b
\item c
\begin{itemize}
\item d
\item e
\item f
\end{itemize}
\item g
\item h
\item i
\end{itemize}
\end{document}
PS MWEbeamer
也可以在 中使用。但是,Alan Munn 在评论中指出,由于beamer
修改了列表环境以使其具有覆盖感知能力,因此它实际上无法与 很好地配合使用enumitem
。
\documentclass{beamer}
\usepackage{enumitem}
\setitemize[1]{itemsep=10pt,topsep=10pt}
\setitemize[2]{itemsep=0pt,topsep=-2pt}
\begin{document}
\begin{frame}{beamer frame title}
\begin{itemize}
\item a
\item b
\item c
\begin{itemize}
\item d
\item e
\item f
\end{itemize}
\item g
\item h
\item i
\end{itemize}
\end{frame}
\end{document}