如何在投影仪演示文稿中准确插入超链接/超目标对?

如何在投影仪演示文稿中准确插入超链接/超目标对?

基于对超链接/超目标对的几个问答,我正在尝试设计带有覆盖、练习和解决方案的投影仪演示文稿。解决方案位于文档末尾,顺序与练习相同。我想自动对练习和解决方案进行编号,因此我使用了两个计数器:

\newcounter{exercise}\resetcounteronoverlays{exercise}
\newcounter{solution}\resetcounteronoverlays{solution}

我还想自动插入超链接/超目标对,以便在演示过程中来回导航。在每个练习的最后一张幻灯片中,应该有一个可点击的按钮,链接到第一的解决方案的最后一张幻灯片,每个解决方案的最后一张幻灯片应该有一个可点击的按钮,链接回最后的练习幻灯片。在讲座中,我:

  • 翻开练习页,一张接一张,直到看到解答按钮,
  • 点击“解决方案”按钮跳转到解决方案的第一张幻灯片,
  • 一张一张地揭开解决方案,直到看到练习按钮,
  • 点击“练习”按钮跳回到练习的最后一张幻灯片,
  • 练习结束后继续播放第一张幻灯片。

由于练习和解决方案的文本可长可短,我决定将所有这些分成 4 个命令,再加上一个中间的 ( \overlaynumber) 来获取当前幻灯片编号:

\makeatletter
\newcommand*{\overlaynumber}{\number\beamer@minimum}
\makeatother
\newcommand*{\newex}{\stepcounter{exercise}{Ex. \theexercise{}: }}
\newcommand*{\tosol}{\hfill{}\hyperlink<\overlaynumber{}>{sol-\theexercise}{\hypertarget{ex-\theexercise}{\beamergotobutton{}}}}
\newcommand*{\newsol}{\stepcounter{solution}\hypertarget<\overlaynumber{}>{sol-\thesolution}{}{Ex. \thesolution{}: }}
\newcommand*{\toex}{\hfill{}\hyperlink<\overlaynumber{}>{ex-\thesolution}{\beamergotobutton{}}}

\newex增加并排版计数器exercise\tosol插入sol-N超链接和ex-N返回超目标。\newsol增加并排版计数器solution,并插入sol-N超目标。最后,\toex插入ex-N返回超链接。

只要我不在块或框架标题中使用命令,一切都会按预期工作(下面示例中的练习 1 和 2)。

当解决方案需要一个或多个完整的块(如下例中的练习 3 所示)并且我将命令放在\newsol块标题的开头时,解决方案的链接不是指向首次显示该块的幻灯片,而是指向其框架的第一张幻灯片。

当解决方案需要完整的一帧或更多帧(如下例中的练习 4)并且我将命令放在\newsol帧标题的开头时,解决方案的链接指向帧的最后一张幻灯片而不是第一张。并且返回练习的链接也是错误的:它指向问题之前的幻灯片。

我怀疑我的计数器没有在正确的编译时间递增和/或我的\overlaynumber命令在块或框架标题中使用时没有按照我希望的方式运行。

有没有办法获得正确的超链接/超目标行为,即使在块或框架标题中?

梅威瑟:

\PassOptionsToPackage{unicode}{hyperref}
\documentclass{beamer}
\beamertemplatenavigationsymbolsempty{}
\newcounter{exercise}\resetcounteronoverlays{exercise}
\newcounter{solution}\resetcounteronoverlays{solution}
\makeatletter
\newcommand*{\overlaynumber}{\number\beamer@minimum}
\makeatother
\newcommand*{\newex}{\stepcounter{exercise}{Ex. \theexercise{}: }}
\newcommand*{\tosol}{\hfill{}\hyperlink<\overlaynumber{}>{sol-\theexercise}{\hypertarget{ex-\theexercise}{\beamergotobutton{}}}}
\newcommand*{\newsol}{\stepcounter{solution}\hypertarget<\overlaynumber{}>{sol-\thesolution}{}{Ex. \thesolution{}: }}
\newcommand*{\toex}{\hfill{}\hyperlink<\overlaynumber{}>{ex-\thesolution}{\beamergotobutton{}}}

\begin{document}

\begin{frame}{Frame one}
  \begin{block}{Block one}
    \begin{itemize}[<+->]
      \item \newex{}How many prime numbers less than 10?\tosol{}
      \item \newex{}How many even prime numbers?\tosol{}
      \item \newex{}Sum of prime numbers less than 10?\tosol{}
      \item \newex{}Product of prime numbers less than 10?\tosol{}
    \end{itemize}
  \end{block}
\end{frame}

\begin{frame}{Frame two}
  \begin{block}{Block one}
    \begin{itemize}[<+->]
      \item \newsol{}4 (2, 3, 5 and 7)\toex{}
      \item \newsol{}1 (2)\toex{}
    \end{itemize}
  \end{block}

  \onslide<+->
  \begin{block}{\newsol{}Sum of prime numbers less than 10?}
    \begin{itemize}[<+->]
      \item $2 + 3 + 5 + 7 = 17$
      \item Note: 17 is prime\toex{}
    \end{itemize}
  \end{block}
\end{frame}

\begin{frame}{\newsol{}Product of prime numbers less than 10?}
  \begin{block}{Block one}
    \begin{itemize}[<+->]
      \item $2 \times 3 \times 5 \times 7 = 210$
      \item Note: 210 is not prime
      \item Note: 210 is even\toex{}
    \end{itemize}
  \end{block}
\end{frame}

\end{document}

相关内容