Beamer:盒子寄存器中的内容不存在 \end{frame}

Beamer:盒子寄存器中的内容不存在 \end{frame}

考虑以下例子(我編輯包含 LaTeX 环境的示例lrbox):

\documentclass{beamer}
\newsavebox\mybox
\newsavebox\myboxb

\begin{document}
\frame{
  \sbox\mybox{Hello World!}\usebox\mybox %works

  \begin{lrbox}\myboxb Bonjour!\end{lrbox}\usebox\myboxb %works
}

\frame{
  \usebox\mybox %is empty

  \usebox\myboxb %is empty
}
\end{document}

为什么第二帧是空白的? 有解决方法吗?

答案1

使用\global,让其\sbox具有全局效果。否则,它就是局部的,在环境范围内frame

\begin{frame}
  \global\sbox\mybox{Hello World!}
  \usebox\mybox
\end{frame}

答案2

您可以使用\global\sbox(但\global\savebox不起作用);对于“全局”,lrbox您可以定义自己的环境:

\usepackage{etoolbox}
\cslet{lrbox*}\lrbox
\expandafter\patchcmd\csname lrbox*\endcsname{\setbox}{\global\setbox}{}{}
%\expandafter\show\csname lrbox*\endcsname % uncomment to see if it has worked
\cslet{endlrbox*}\endlrbox

现在

\begin{lrbox*}{\mybox}
Hello world!
\end{lrbox*}

将全局设置的内容\mybox

相关内容