重新定义 beamer 中的枚举计数器

重新定义 beamer 中的枚举计数器

我想利用enumerate环境做两件事beamer

  1. 我想重新格式化它,以便它显示为

    (1) An item
      a. A subitem
      b. Another subitem
    
  2. 我希望能够使用常用\ref标签引用这些项目。不幸的是,我发现唯一能正确显示环境内项目的方法无法提供正确的引用结果。

这是一个最小的工作示例。

\documentclass{beamer}

\setbeamertemplate{enumerate item}{(\insertenumlabel)}
\setbeamertemplate{enumerate subitem}{\alph{enumii}.}

\begin{document}

\begin{enumerate}
\item Foo\label{item:1}
  \begin{enumerate}
  \item Bar\label{item:2}
  \item Zip\label{item:3}
  \end{enumerate}
\end{enumerate}

Reference to ``Foo'': (\ref{item:1}).

Reference to ``bar'': (\ref{item:2}). 

Reference to ``zip'': (\ref{item:3}).
\end{document}

不幸的是,这导致所有三个引用都采用阿拉伯数字,即,,(1)(1)三个(2)' \ref,按此顺序。

所需的输出将(\ref{item:3})呈现为(1b)

答案1

重新定义枚举的开始

\documentclass{beamer}   
\setbeamertemplate{itemize/enumerate body begin}
  {\renewcommand\theenumii{\theenumi\alph{enumii}}}
\setbeamertemplate{enumerate item}{(\insertenumlabel)}
\setbeamertemplate{enumerate subitem}{\alph{enumii}.}

\begin{document}

\begin{frame}{}
\begin{enumerate}
\item Foo\label{item:1}
  \begin{enumerate}
  \item Bar\label{item:2}
  \item Zip\label{item:3}
  \end{enumerate}
\end{enumerate}

Reference to ``Foo'': (\ref{item:1}).

Reference to ``bar'': (\ref{item:2}). 

Reference to ``zip'': (\ref{item:3}).
\end{frame}
\end{document}

在此处输入图片描述

答案2

以下是部分解决方案:

\documentclass{beamer}

\setbeamertemplate{enumerate item}{(\insertenumlabel)}

\begin{document}

\begin{frame}
\begin{enumerate}
\item Foo\label{item:1}
  \begin{enumerate}[a.]
  \item Bar\label{item:2}
  \item Zip\label{item:3}
  \end{enumerate}
\end{enumerate}

Reference to ``Foo'': \ref{item:1}

Reference to ``bar'': \ref{item:2} 

Reference to ``zip'': \ref{item:3}
\end{frame}

\end{document}

这将嵌套环境中的标签固定为a.b.。但\refs 最终相同。

article使用包中的类中的相同代码enumerate,您也会看到第二个效果:bar 和 zip 的标签设置为1a1b。但要让 beamer 做同样的事情需要一点挖掘。我会尝试进行挖掘,看看我能找到什么。

相关内容