当里面\item
有另一个itemize
环境时,行间空间与前一个环境之间的距离\item
会比没有子环境时略小itemize
(右图)。如果两个框架恰好都由项目组成,这会导致项目符号在框架之间“跳来跳去”。请注意,一切正常\documentclass{article}
(左图)。
为什么会发生这种情况?我该如何解决?
<---------->
\documentclass{beamer}
\usepackage{tikz}
% Test material for illustration:
\def\line{\tikz[overlay] \draw[very thick] (0,0) -- (0,1.3em);}
\def\stuff{Test \line}
\begin{document}
\begin{frame}
\begin{itemize}
\item \stuff
\item \stuff
\item \stuff
\item \stuff
\begin{itemize} % This causes weird spacing
\item \stuff
\end{itemize}
\item \stuff
\item \stuff
\end{itemize}
\end{frame}
\end{document}
答案1
正如 dcmst 所指出的,可以通过\par
在每个itemize
环境之前添加来解决该问题。无需手动执行此操作,可以使用软件包提供的修补命令etoolbox
来修补环境本身:
\usepackage{etoolbox}
\BeforeBeginEnvironment{itemize}{\par}
尽管\item
和其子项之间的itemize
间距现在稍大一些,但在我看来,这看起来比默认的要好得多。此外,“After:”和第一个项目之间的间距也稍大一些。为此,可以在 之后添加额外的负空间\par
:
\BeforeBeginEnvironment{itemize}{\par\vspace{-0.3em}}
\documentclass{beamer}
\usepackage{tikz}
\usepackage{etoolbox}
% Test material for illustration:
\def\line{\tikz[overlay] \draw[thick] (0,0) -- ++(0,1.3em) -- ++(-2em,0);}
\def\stuff{Test \line}
\begin{document}
\begin{frame}
\begin{minipage}[t]{0.25\linewidth}
Before:
\begin{itemize}
\item \stuff
\item \stuff
\item \stuff
\item \stuff
\begin{itemize} % This causes weird spacing
\item \stuff
\end{itemize}
\item \stuff
\item \stuff
\end{itemize}
\end{minipage}
\begin{minipage}[t]{0.25\linewidth}
\BeforeBeginEnvironment{itemize}{\par}
After:
\begin{itemize}
\item \stuff
\item \stuff
\item \stuff
\item \stuff
\begin{itemize}
\item \stuff
\end{itemize}
\item \stuff
\item \stuff
\end{itemize}
\end{minipage}
\begin{minipage}[t]{0.25\linewidth}
\BeforeBeginEnvironment{itemize}{\par\vspace{-0.2em}}
Less space:
\begin{itemize}
\item \stuff
\item \stuff
\item \stuff
\item \stuff
\begin{itemize}
\item \stuff
\end{itemize}
\item \stuff
\item \stuff
\end{itemize}
\end{minipage}
\end{frame}
\end{document}