参考幻灯片,而不是框架

参考幻灯片,而不是框架

此 MWE 为我提供了框架 (1) 的参考,而不是幻灯片 (2)。我需要知道幻灯片的编号,其中有一个标签,该怎么做?

\documentclass{beamer}
\begin{document}

\begin{frame}[label=frame]

\begin{itemize}[<+->]

\item 
\item \label{slide}
\item \ref{slide}
\end{itemize}

\end{frame}

\end{document}

答案1

主要问题是,这是\label在框架的第一张幻灯片上创建的,因此即使创建一个新的计数器或使用类似的东西

\makeatletter
\newcommand{\mylabel}[2]% #1 = label name, #2 = text for \ref
{\protected@write\@auxout{}{\string\newlabel{#1}{{#2}{\thepage}}}}
\makeatother

它总是引用该帧的第一张幻灯片。为了说明这一点,请考虑以下内容:

\documentclass{beamer}
\begin{document}

\begin{frame}[label=frame]

\begin{itemize}[<+->]

\item \thepage
\item \label{slide}
\item \ref{slide}
\item \pageref{slide}
\item \pageref{frame<2>}
\end{itemize}

\end{frame}

\end{document}

顺便说一句,您需要运行两次才能摆脱??


根据 Tarass 的提示:

\documentclass{beamer}
\usepackage{hyperref}

\makeatletter
\newcommand{\mylabel}[1]% #1 = label name
{\bgroup
\advance\c@beamerpauses by -1 %normally off by 1
\hypertarget<\thebeamerpauses>{#1}{}%
\only<\thebeamerpauses>{\protected@write\@auxout{}{\string\newlabel{#1}{{\thebeamerpauses}{\thepage}{}{#1}}}}
\egroup}
\makeatother

\begin{document}
\begin{frame}[label=frame]
\begin{itemize}[<+->]
\item
\item \mylabel{slide}
\item \ref{slide}
\end{itemize}
\end{frame}

\begin{frame}
\frametitle{page vs. beamerpauses}
Page \thepage\par
beamerpauses \thebeamerpauses
\begin{itemize}[<+->]
\item beamerpauses \thebeamerpauses
\item beamerpauses \thebeamerpauses
\end{itemize}
\end{frame}

\end{document}

相关内容