问题是:
如何编写宏投影机 \coveredIfTF{true code}{false code}
测试文档的“当前执行”部分是否将显示。
实际上,投影仪框架可能会执行多次;每次都必须制作不同的幻灯片。在 的情况下,例如,\uncover<3->{content}
命令,content
在每次迭代时执行(包括具有副作用的内部命令),但仅从第三张幻灯片开始显示。如果发生在 中content
,将对前两张幻灯片\coveredIfTF{true code}{false code}
执行,并从第三张幻灯片开始执行 。false code
true code
背景是知识包。我们希望能够写入以下内容(此代码不完整):
\documentclass{beamer}
\newcommand\intro[1]{---suitable code---}
\newcommand\kl[1]{---suitable code---}
\begin{document}
\begin{frame}
\begin{itemize}[<+->]
\item A \intro{duck} is a \dots
\item A \intro{cat} is a \dots
\end{itemize}
\end{frame}
\begin{frame}
Take a \kl{duck}, \dots{}
Consider now a \kl{cat}, \dots
\end{frame}
\end{document}
预期结果将是以下代码编译的结果:
\documentclass{beamer}
\begin{document}
\begin{frame}
\begin{itemize}[<+->]
\item A \hypertarget<.>{duck}{duck} is a \dots
\item A \hypertarget<.>{cat}{cat} is a \dots
\end{itemize}
\end{frame}
\begin{frame}
Take a \hyperlink{duck}{duck}, \dots{}
Consider now a \hyperlink{cat}{cat}, \dots
\end{frame}
\end{document}
的效果\intro
是将目标添加到幻灯片中第一次\intro
将是显示(因此问题有一个宏\coveredIfTF
可以完全隔离这个问题),并\kl
隐藏到这个目标的链接。
但是,简单的解决方案例如:
\newcommand\intro[1]{\hypertarget<.>{#1}{#1}}
由于多种原因,它并不令人满意。
- 它在其他情况下不起作用投影机,例如
\begin{itemize} \item<1-> A \intro{duck} is a \dots \item<2-> A \intro{cat} is a \dots \end{itemize}
这似乎是因为 te<.>
符号是为使用 而定制的<+->
。 - 我需要对宏进行细粒度的控制,以便将其与知识包的现在和将来的功能相结合。
- 因为这是针对软件包开发,而不是针对单个文档,所以解决方案必须强大,并且兼容所有方式投影机必须处理隐藏和显示材料。
- 出于同样的原因,由用户明确提供幻灯片编号的解决方案是不可接受的。
因此,对我来说,解决这个问题的最好方法是使用宏\coveredIfTF{true code}{false code}
。我愿意相信这样的宏在内部已经存在投影机。
答案1
我猜你的问题可以简化为将超目标设置为当前幻灯片。这样链接就会跳转到正确的覆盖层。
不幸的是,您分享的代码片段你的评论没有产生任何链接(添加后\usepackage{knowledge}
),因此这里有一个使用普通 hyperref 命令的简短示例:
\documentclass{beamer}
\begin{document}
\begin{frame}
\hypertarget<.->{duck}{duck}
\begin{itemize}[<+->]
\item \hypertarget<.->{rabbit}{rabbit}
\item \hypertarget<.->{dog}{dog}
\item \hypertarget<.->{cat}{cat}
\end{itemize}
\end{frame}
\begin{frame}
\hyperlink{duck}{duck}
\hyperlink{rabbit}{rabbit}
\hyperlink{dog}{dog}
\hyperlink{cat}{cat}
\end{frame}
\end{document}