我想修改 itemize 命令投影机包,使其在每个项之前添加一些垂直空间,其中前一个项包含嵌套的子列表。以下是一个例子:
\documentclass{beamer}
\mode<presentation>
\begin{document}
\begin{frame}{}
\begin{itemize}
\item 1
\begin{itemize}
\item 1.1
\item 1.2
\end{itemize}
\item 2
\begin{itemize}
\item 2.1
\begin{itemize}
\item 2.1.1
\item 2.1.2
\end{itemize}
\item 2.2
\end{itemize}
\item 3
\begin{itemize}
\item 3.1
\begin{itemize}
\item 3.1.1
\end{itemize}
\end{itemize}
\end{itemize}
\end{frame}
\end{document}
我希望示例中的列表排版如下:
1
1.1
1.2
<-- space here
2
2.1
2.1.1
2.1.2
<-- space here
2.2
<-- space here
3
3.1
3.1.1
一个重要的要求是,后整个环境。以下小“算法”应该可以阐明我想要实现的目标:
- 维护一个变量最后项目级别,最初设置为 0。
- 启动物品时,如果当前物品的等级小于最后项目级别,添加一些垂直空间;并且,无论如何,重置最后项目级别至当前项目的级别。
不幸的是,我不明白 LaTeX 的内部原理,投影机足以实现这个想法。
答案1
之前和之后:
你唯一需要知道的是\@itemdepth
,(TeX)计数器存储当前级别。顺便说一句,如果你有这么多itemize
,你想使用easylist 与 beamer?
\documentclass[handout,draft]{beamer}
\begin{document}
\begin{frame}
\begin{itemize}
\item 1
\item 2
\begin{itemize}
\item 2.1
\item 2.2
\end{itemize}
\item 3
\begin{itemize}
\item 3.1
\begin{itemize}
\item 3.1.1
\item 3.1.2
\end{itemize}
\end{itemize}
\item 4
\end{itemize}
outside itemize
\end{frame}
\makeatletter
\newcount\lastItemLevel\lastItemLevel1
\let\olditem\item
\def\item{%
\ifnum\@itemdepth<\lastItemLevel\vspace*{1em}\fi%
\global\lastItemLevel\@itemdepth%
\olditem}
\makeatother
\begin{frame}
\begin{itemize}
\item 1
\item 2
\begin{itemize}
\item 2.1
\item 2.2
\end{itemize}
\item 3
\begin{itemize}
\item 3.1
\begin{itemize}
\item 3.1.1
\item 3.1.2
\end{itemize}
\end{itemize}
\item 4
\end{itemize}
outside itemize
\end{frame}
\end{document}