在 Latex Beamer 中,当我有一个带有自定义标签的枚举时,例如使用\begin{enumerate}[a]
“a ... b ... c ...”或\begin{enumerate}[i]
“i ... ii ... iii ...”而不是“1. ... 2. ... 3. ...”,左边距似乎较小,因此与其他幻灯片不一致。
例子:
\documentclass{beamer}
\begin{document}
\begin{frame}
\begin{enumerate}
\item normal margin
\end{enumerate}
\begin{enumerate}[i]
\item smaller margin
\end{enumerate}
\begin{enumerate}[a]
\item much smaller margin
\end{enumerate}
\begin{enumerate}
\item[a] normal margin, but manual labels
\end{enumerate}
\end{frame}
\end{document}
当我使用item[a]
等item[b]
时,边距是正确的,但出于显而易见的原因,这也不完美。有什么办法可以解决这个问题吗?
更新:问题似乎不是特定于beamer
类的,而是特定于enumerate
包(由中使用或从中复制的beamer
),因为相同的行为会发生:
\documentclass{article}
\usepackage{enumerate}
不过,我主要感兴趣的是与之配合良好的解决方案beamer
。
答案1
你可以注释掉重新设置缩进的行
\documentclass{beamer}
\makeatletter
\def\beamer@@@enum@[#1]{% partly copied from enumerate.sty
\@enLab{}\let\@enThe\@enQmark
\@enloop#1\@enum@
\ifx\@enThe\@enQmark\@warning{The counter will not be printed.%
^^J\space\@spaces\@spaces\@spaces The label is: \the\@enLab}\fi
\def\insertenumlabel{\the\@enLab}
\def\beamer@enumtempl{enumerate mini template}%
\expandafter\let\csname the\@enumctr\endcsname\@enThe
% \csname c@\@enumctr\endcsname7
% \expandafter\settowidth
% \csname leftmargin\romannumeral\@enumdepth\endcsname
% {\the\@enLab\hspace{\labelsep}}%
\beamer@enum@}
\makeatother
\begin{document}
\begin{frame}
\begin{enumerate}
\item normal margin
\end{enumerate}
\begin{enumerate}[i]
\item smaller margin
\end{enumerate}
\begin{enumerate}[a]
\item much smaller margin
\end{enumerate}
\begin{enumerate}
\item[a] normal margin, but manual labels
\end{enumerate}
\end{frame}
\end{document}
答案2
为了获得与使用相同的边距,\item[a]
您可以简单地定义自己的枚举项\setbeamertemplate{enumerate item}{\alph{enumi}}
\documentclass{beamer}
\begin{document}
\begin{frame}
\begin{enumerate}
\item normal margin
\end{enumerate}
\begin{enumerate}[i]
\item smaller margin
\end{enumerate}
{
\setbeamertemplate{enumerate item}{\alph{enumi}}
\begin{enumerate}
\item much smaller margin
\end{enumerate}
}
\begin{enumerate}
\item[a] normal margin, but manual labels
\end{enumerate}
\end{frame}
\end{document}
答案3
我发现的解决/规避该问题的另一种相当棘手的方法是将填充直接插入到[a.]
或[i.]
参数中。
\documentclass{beamer}
\begin{document}
\begin{frame}
\begin{enumerate}
\item normal margin
\end{enumerate}
\begin{enumerate}[~~a.]
\item normal margin (almost)
\end{enumerate}
\end{frame}
\end{document}
当然,这并不能完美地对齐不同的枚举,也可能取决于所使用的字体。我可能不会在打印的文档中使用它,但对于某些幻灯片来说,它可能已经足够好了。同样的方法也适用于(但精度更高)例如[\hspace{8pt}a.]
。