考虑以下例子(我編輯包含 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
。