投影机中的动态链接

投影机中的动态链接

假设我的 Beamer 文档中有附录,我想从主要部分的不同位置访问它。有没有办法让 Beamer 记住我来自哪里?

更具体地说,请考虑以下代码片段:

\documentclass{beamer}
\usepackage{lipsum}
\newcommand{\ReturnTo}{sec:2}
\begin{document}
\section{A section}\label{sec:1}
\begin{frame}
\frametitle{Some title}
\begin{overlayarea}{\textwidth}{\textheight}
\lipsum[1]\renewcommand{\ReturnTo}{sec:1}

\hfill\hyperlink{sec:AppendixA}{\beamergotobutton{details}}
\end{overlayarea}
\end{frame}
\section{Another section}\label{sec:2}
\begin{frame}
\frametitle{Another title}
\begin{overlayarea}{\textwidth}{\textheight}
\lipsum[2]\renewcommand{\ReturnTo}{sec:2}

\hfill\hyperlink{sec:AppendixA}{\beamergotobutton{details}}
\end{overlayarea}
\end{frame}
\section{And one more section}\label{sec:3}
\begin{frame}
\frametitle{And one more title}
\begin{overlayarea}{\textwidth}{\textheight}
\lipsum[3]\renewcommand{\ReturnTo}{sec:3}

\hfill\hyperlink{sec:AppendixA}{\beamergotobutton{details}}
\end{overlayarea}
\end{frame}
\appendix
\section{Some useful formulae}\label{sec:AppendixA}
\begin{frame}
\frametitle{Some useful formulae}
\begin{overlayarea}{\textwidth}{\textheight}
\begin{eqnarray*}
 F_{\mu\nu}F^{\mu\nu}&=& E^2+B^2\\
 E&=&m\,c^2\\
 \Rightarrow~F_{\mu\nu}F^{\mu\nu}&=& m^2\,c^4+B^2\quad ;-)
\end{eqnarray*}
\hfill\hyperlink{\noexpand\ReturnTo}{\beamergotobutton{back}}
\end{overlayarea}
\end{frame}
\end{document}

在这里,我希望能够从某些部分跳转到附录,然后返回到我原来的位置。当然,代码片段无法实现这一点,我明白原因。如果我可以教 beamer\ReturnTo在单击其中一个\hyperlink{sec:AppendixA}{\beamergotobutton{details}}按钮时重新定义命令,那么它可能会起作用。

如果不用\ReturnTo手动设置,而是自动设置为当前部分,那就更好了。但我还想保留\ReturnTo手动设置的灵活性。

请注意,我知道该\againframe命令。但是,在这里我真的很想输入附录,这是一个单独的部分。而且我的演示文稿太长了,我无法在标题行中显示所有部分。此外,每个部分都很长,我可能真的希望跳回到给定部分的特定幻灯片/框架。

答案1

以下解决方案利用了 Acrobat(Reader)的 JavaScript,因此仅适用于具有 JavaScript 引擎的 PDF 查看器。

我们定义

\hLink{<destination>}{<link text>}

用法和原版完全一样\hyperlink包中的命令hyperref。它用于创建“详细信息...”按钮,带您进入附录中的相应幻灯片。

但是,在通过单击按钮将您带到链接目的地之前,当前视图将保存在 JavaScript 对象中,并推送到已保存视图的堆栈中。

这 ”后退幻灯片左上角的“详细信息...”按钮允许您向后浏览单击“详细信息...”按钮的已访问幻灯片的历史记录。因此,您可以离开刚刚跳转到的当前附录幻灯片,甚至可以单击另一个“详细信息...”按钮。单击“后退”按钮将带您以相反的顺序返回到之前单击“详细信息...”的位置。

\documentclass{beamer}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%  \hLink{<destination>}{<link text>}
%
%  used like \hyperlink but saves the current view before jumping to
%  <destination>
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{pdfbase,atbegshi,amssymb,bm}
\ExplSyntaxOn
\newcommand\hLink[2]{
  \leavevmode
  \pbs_pdflink:nn{
    /Subtype/Link/Border[0~0~0]
    /A <<
      %first action: put current view on the stack of views
      /S/JavaScript/JS (
        if(typeof~viewStack==='undefined'){var~viewStack=new~Array();}
        viewStack.push(this.viewState);
      )
      %next: actual GoTo action
      /Next <</D (#1)/S/GoTo>>
    >>
  }{#2}
}
%backlink in the top-left slide corner
\AtBeginShipout{
  \AtBeginShipoutUpperLeftForeground{
    \fboxrule=0pt\fboxsep=1pt
    \raisebox{-\height}{\fbox{
      \pbs_pdflink:nn{
        /Subtype/Link/Border[0 0 0]
        /A <<
          /S/JavaScript/JS (
            try{this.viewState=viewStack.pop();}catch(e){}
          )
        >>
      }{\beamerbutton{$\bm\curvearrowleft$}}
    }}
  }
}
\ExplSyntaxOff
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\usepackage{kantlipsum}

\begin{document}

\part{My talk}
\frame{\partpage}

\begin{frame}{Some title}
  \kant[1]\hLink{frame:AppendixA}{\beamergotobutton{Details A}}
\end{frame}  

\begin{frame}{Another title}
  \kant[2]\hLink{frame:AppendixB}{\beamergotobutton{Details B}}
\end{frame}  

\begin{frame}{Yet another title}
  \kant[3]\hLink{frame:AppendixC}{\beamergotobutton{Details C}}
\end{frame}  

\begin{frame}{Something completely different}
  \kant[4]
\end{frame}  

\appendix
\frame{\partpage}

\begin{frame}{Appendix A}\label{frame:AppendixA}
  \begin{equation}
    \sqrt{16}=4
  \end{equation}
\end{frame}

\begin{frame}{Appendix B}\label{frame:AppendixB}
  \begin{equation}
    1+2=3
  \end{equation}
\end{frame}

\begin{frame}{Appendix C}\label{frame:AppendixC}
  \begin{equation}
    4<5 
  \end{equation}
\end{frame}
\end{document}

答案2

许多 pdf 查看器都有一个菜单选项(通常使用快捷键Alt + <)用于返回。您可以尝试使用 调用此菜单\Acrobatmenu。对于我使用 adobe reader 的情况,这个方法有效( \ref 仅用于测试):

\documentclass{article}
\usepackage{hyperref}
\begin{document} 
\ref{xxx} page 1\newpage 
\ref{xxx} page 2\newpage 
\ref{xxx} page 3\newpage

\section{xxx}\label{xxx}
\Acrobatmenu{GoBack}{Go Back}
\end{document} 

相关内容