更改 Beamer 中的枚举标签对齐方式

更改 Beamer 中的枚举标签对齐方式

我想将枚举列表添加到 Beamer 演示文稿中。这是一个简单示例:

\documentclass{beamer}

\setbeamertemplate{enumerate subitem}{\Alph{enumii}}
\setbeamerfont{itemize/enumerate subbody}{size=\normalsize}

\begin{document}

\begin{frame}

\begin{enumerate}
\item First level item
\begin{enumerate}
\item Second level item 1
\item Second level item 2
\item Second level item 3
\item Second level item 4
\item Second level item 5
\item Second level item 6
\item Second level item 7
\item Second level item 8
\item Second level item 9
\item Second level item 10
\item Second level item 11
\end{enumerate}
\end{enumerate}

\end{frame}
\end{document}

如果您查看 pdf 输出,您会发现字母标签 A、B、C 等的对齐方式看起来很难看。尤其是 C 下面的 D,以及 H 和 K 之间的 I 和 J。以下是输出的图像:

beamer-枚举列表示例

我希望将标签水平居中(在内\labelwidth)。也就是说,字母的水平中心将位于垂直线上。如何在 Beamer 中做到这一点?

我想避免使用enumitem该软件包,因为它与 Beamer 配合不好。之前我enumitem在 Beamer 中遇到过与此处报告的错误类似的错误:

处理长描述环境项

!TeX 容量超出,抱歉 [grouping levels=255]。错误

答案1

您可以\makelabelcenter按如下方式定义(标准beamer版本\makelabel在内enumerate但用\clap而不是并在标签后\llap添加一个额外内容),然后在所需枚举的开头进行定义。将其自动应用于每个二级列表/枚举比较困难。\hss\let \makelabel\makelabelcenter

\documentclass{beamer}

\setbeamertemplate{enumerate subitem}{\Alph{enumii}}
\setbeamerfont{itemize/enumerate subbody}{size=\normalsize}

\providecommand\clap[1]{\hbox to0pt{\hss#1\hss}}
\def\makelabelcenter#1{{\hss\clap{{%
        \usebeamerfont*{enumerate \beameritemnestingprefix item}%
        \usebeamercolor[fg]{enumerate \beameritemnestingprefix item}#1}}\hss}}%


\begin{document}

\begin{frame}[fragile]

\begin{enumerate}
\item First level item 1
\begin{enumerate}
\let\makelabel\makelabelcenter
\item Second level item 1
\item Second level item 2
\item Second level item 3
\item Second level item 4
\item Second level item 5
\item Second level item 6
\item Second level item 7
\item Second level item 8
\item Second level item 9
\item Second level item 10
\item Second level item 11
\item[Test] Larger label
\end{enumerate}
\end{enumerate}

\end{frame}
\end{document}

输出说明

答案2

穷人的解决方案——把每个物品的标签放在一个居中的盒子里:

\documentclass{beamer}

\setbeamertemplate{enumerate subitem}{\Alph{enumii}}
\setbeamerfont{itemize/enumerate subbody}{size=\normalsize}

\begin{document}

\begin{frame}

\begin{enumerate}
\item First level item
\begin{enumerate}
\item[{\makebox[0.3cm][c]{A}}] Second level item 1 
\item[{\makebox[0.3cm][c]{B}}] Second level item 2
\item[{\makebox[0.3cm][c]{C}}] Second level item 3
\item[{\makebox[0.3cm][c]{D}}] Second level item 4
\item[{\makebox[0.3cm][c]{E}}] Second level item 5
\item[{\makebox[0.3cm][c]{F}}] Second level item 6
\item[{\makebox[0.3cm][c]{G}}] Second level item 7
\item[{\makebox[0.3cm][c]{H}}] Second level item 8
\item[{\makebox[0.3cm][c]{I}}] Second level item 9
\item[{\makebox[0.3cm][c]{J}}] Second level item 10
\item[{\makebox[0.3cm][c]{K}}] Second level item 11
\end{enumerate}
\end{enumerate}

\end{frame}
\end{document}

在此处输入图片描述

答案3

为了避免此问题,请尝试使用等宽字体(打字机字体):

(1)使用\setbeamerfont之前\begin{document}

\setbeamerfont{enumerate subitem}{family=\ttfamily}  % Typewriter Family

枚举 01


(2)如果您需要更改默认打字机字体,请使用以下命令:

\usepackage[scaled]{beramono} % Bera Mono type
\usepackage[T1]{fontenc}
\setbeamerfont{enumerate subitem}{family=\ttfamily}

打字机字体目录:http://www.tug.dk/FontCatalogue/typewriterfonts.html

枚举 02

答案4

您可以使用该enumitem包来重新定义标签\makebox

\documentclass{beamer}
\usepackage{enumitem}

\setlist[enumerate,1]{%
label=\protect\usebeamerfont{enumerate item}%
    \protect\usebeamercolor[fg]{enumerate item}%
    \insertenumlabel.%
}%http://tex.stackexchange.com/a/45950

\setlist[enumerate,2]{%
label={\protect\usebeamerfont{enumerate item}%
    \protect\usebeamercolor[fg]{enumerate item}%
    \makebox[\labelwidth][c]{\Alph*}}}

\begin{document}

\begin{frame}

\begin{enumerate}
\item First level item
\begin{enumerate}
\item Second level item 1
\item Second level item 2
\item Second level item 3
\item Second level item 4
\item Second level item 5
\item Second level item 6
\item Second level item 7
\item Second level item 8
\item Second level item 9
\item Second level item 10
\item Second level item 11
\end{enumerate}
\end{enumerate}

\end{frame}
\end{document}

相关内容