我在课堂上使用 SageTeX 和 Beamer。我需要两套 pdf 文件,一套是用于屏幕暂停,另一套是用于保存树木的讲义。我在 Windows 下使用 MikTeX。
为了同时获得两者,我从两行开始
%\documentclass[handout]{beamer}
\documentclass{beamer}
并注释掉其中一个。
要使用 SageTeX,我需要使用 Linux 虚拟机再次编译我的文件,以获得计算结果,例如
\[2+2={\sage{2+2}}\]
我希望对这两个版本只执行一次,但是在以下 MWE 中遇到了以下困难:
%\documentclass[handout]{beamer}
\documentclass{beamer}
\usepackage{sagetex}% To compute with SAGE within the text
\begin{document}
\begin{frame}[fragile]{Minimum Working Example}
\textit{Compatibility SageTeX - Beamer in HandOut - Pause mode}
This is the first slide with a first Sage operation
\[2+2={\sage{2+2}}\]
Result should be $4$! and we pause
\pause
\
We add some new text before the next slide
\
\end{frame}
\begin{frame}[fragile]{Minimum Working Example}
\textit{Compatibility SageTeX - Beamer in HandOut - Pause mode}
A new Sage operation on this second slide
\[3+3={\sage{3+3}}\]
Result should be $6$!
Beamer requests three inline formulas from SageTeX in pause mode but only two in Handout mode.
So the result is six in pause mode and four in handout mode.
\end{frame}
\end{document}
正如 MWE 中所描述的,似乎不可能仅在 SageTeX 中编译一次即可获得暂停和讲义文档。
如果你以暂停形式编译,Beamer 将从 sageTeX 请求三个内联公式,两次 2+2(因为暂停)和一次 3+3,因此当你以 Handout 形式再次进行 Texify 时,Beamer 只需要前两个内联公式并给出 3+3=4!
如果您从讲义形式开始,那么 Beamer 只会向 SageTeX 请求两个公式。当然,对于讲义来说,它工作正常,但是当您想要暂停版本时,您会在暂停前得到 2+2=4,在暂停后得到 2+2=6,而在第二张幻灯片上您会得到 3+3=??
这是一个双输的局面。当然,我可以通过编译两个版本来解决这个问题,但这会让讲义选项变得毫无用处,因为我需要更改 TeX 源的名称,以避免使用 SageTeX 重新编译。
答案1
这个问题还没有得到一个答案。我真的认为这两个包至少在想要使用 Beamer 覆盖和 SageTeX 计算时是不兼容的。
从设计的角度看,很明显的是,如果您的幻灯片有五个覆盖层,并且您需要 Sage 进行相当长的计算,比如说 5 分钟,那么调用相同计算 5 次的技术是效率低下的。
因此,作为一种解决方法,我认为应该避免使用 SageTeX 和 Beamer 的叠加层,除非您在幻灯片的最后一个叠加层(最后一个 \pause 指令和 \end{frame} 之间)调用 SageTeX。在这种情况下,一切都运行良好。两个用户手册中都应该有关于它的警告。要使用这个,应该将关键字“叠加层”和“讲义”添加到此帖子中(我不认为我能做到)。
答案2
sagesilient
我同意 - 一个可能的解决方案是在框架开始之前创建一个环境,为结果分配一个变量,然后使用\sage{var}
命令在框架中引用该变量。
这将解决您提到的 ?? 问题 - 只需确保使用 [handout] 选项编译 sagetex 文件即可。然后您应该能够[handout]
根据需要进行切换,而无需重新编译 sagetex 文件。
否则,当您切换到讲义模式时,只需重新编译 sagetex 文件,您的 MWE 就可以正常工作。