假设我的 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}