自动将覆盖编号传递给 beamer 中的 \hypetarget,第 2 部分

自动将覆盖编号传递给 beamer 中的 \hypetarget,第 2 部分

此主题,@diabonas 教我如何自动将覆盖编号传递给环境\hypertarget中的过程itemize。构造是\hypertarget<.>{label4}{\beamerbutton{something}} 这很好用,但仅限于itemizeenumerate环境中。当我在任何环境之外尝试它时,<.>构造都不太有效。在下面的示例中,当我单击第二帧中的按钮时,它会跳回到第三行而不是第四行,并且按钮不显示。有人可以建议如何解决这个问题吗?

\documentclass{beamer}
\begin{document}
\begin{frame}[<+->]
First  \\
\pause
Second \\
\pause
Third \\
\pause
Fourth \hypertarget<.>{label4}{\beamerbutton{I'm on the fourth line}} \\
\pause
Fifth \\
\pause
Sixth \\
\end{frame}
\begin{frame}
\hyperlink{label4}{\beamerbutton{I jump to the fourth line of previous frame}}
\end{frame}
\end{document}

答案1

使用的计数器\pausebeamerpauses,它比 count 更容易使用beamer@minimum。但两者都有效。

\documentclass{beamer}
\makeatletter
\newcommand*{\overlaynumber}{\number\beamer@minimum}
\makeatother
\begin{document}
\begin{frame}[<+->]
First  \par
\pause
Second \par
\pause
Third \hypertarget<\overlaynumber>{label3}{\beamerbutton{I'm on the third line}} \par
\pause
Fourth \hypertarget<\thebeamerpauses>{label4}{\beamerbutton{I'm on the fourth line}} \par
\pause
Fifth \par
\pause
Sixth \par
\end{frame}
\begin{frame}
\hyperlink{label3}{\beamerbutton{I jump to the third line of previous frame}}\par
\hyperlink{label4}{\beamerbutton{I jump to the fourth line of previous frame}}\par
\end{frame}
\end{document}

答案2

对于或 列表环境,计数器的beamerpause递增方式不同。和都会递增计数器。 这导致计数器在列表环境中为滑动数字 + 1。 由于主要用于列表,因此它会减少数字。 因此,在您的情况下使用会导致,因此不会打印按钮。\pause\pause\item<.><.>\pause<3>

但可以添加偏移量(<.(1)>)。这可用于纠正错误。

此代码显示了行为和修复:

\documentclass{beamer}
\makeatletter
\newcommand*{\overlaynumber}{\number\beamer@minimum}
\makeatother
\begin{document}
\begin{frame}[<+->]
First  (\thebeamerpauses) \\
\pause
Second (\thebeamerpauses) \\
\pause
Third  (\thebeamerpauses) \\
\pause
Fourth (\thebeamerpauses) \hypertarget<.(1)>{label4}{\beamerbutton{I'm on the fourth line}} \\
% fix here -----------------------------^^^
\pause
Fifth  (\thebeamerpauses) \\
\pause
Sixth  (\thebeamerpauses) \\
\end{frame}
\begin{frame}
\hyperlink{label4}{\beamerbutton{I jump to the fourth line of previous frame}}
\end{frame}

\begin{frame}[<+->]
\begin{itemize}
\item First  (\thebeamerpauses)
\item Second (\thebeamerpauses)
\item Third  (\thebeamerpauses)
\item Fourth (\thebeamerpauses) \hypertarget<.>{label42}{\beamerbutton{I'm on the fourth line}}
\item Fifth  (\thebeamerpauses)
\item Sixth  (\thebeamerpauses)
\end{itemize}
\end{frame}
\begin{frame}
\hyperlink{label42}{\beamerbutton{I jump to the fourth line of previous frame}}
\end{frame}

\end{document}

相关内容