我正在尝试在环境中保存一些文本供以后使用。我能想到的最小的测试用例就是这个。环境关闭后,sbox
中保存的文本不可用。我该如何解决这个问题?感谢。
\documentclass{article}
\begin{document}
\newsavebox{\somebox}
\begin{itemize}
\item hello1
\item hello1 \sbox{\somebox}{Some text}
\end{itemize}
This should show something, but does not: "\usebox{\somebox}"
\end{document}
答案 0 :(得分:2)
您在这里遇到的是一个范围问题。在(La)TeX中,您可以使用{ ... }
,\bgroup ... \egroup
或\begingroup ... \endgroup
引入范围。前两者大致相同,\bgroup
和\egroup
由\let\bgroup{
和\let\egroup}
定义;最后一个略有不同。但是作用域属性是相同的:在这些作用域内创建或修改的任何命令,boxen等在外部都不可见。在LaTeX中,所有环境\begin{env} ... \end{env}
都隐式地将其内容包装在\begingroup ... \endgroup
中。这意味着您的\sbox{\somebox}{Some text}
修改仅在\end{itemize}
之前可见;之后,撤消修改。要解决此问题,请在\newcommand
之前添加\def
,\newsavebox
,\sbox
,\global
等任何命令,这会强制执行定义在全球范围内,随处可见。
另外,要在(La)TeX中使用引号,请写``double quoted''
,``double quoted"
或`single quoted'
; "
字符仅用于关闭引号,而不是打开引号。将所有内容放在一起会为您提供修订后的代码段
\documentclass{article}
\begin{document}
\newsavebox{\somebox}
\begin{itemize}
\item hello1
\item hello1 \global\sbox{\somebox}{Some text}
\end{itemize}
This should show something, and in fact does: ``\usebox{\somebox}''
\end{document}
答案 1 :(得分:1)
我想我可以使用\def
来解决这个问题。像这样:
\ {的DocumentClass文章} \ {开始}文件 \ {开始逐项} \ item hello1 \ item hello1 \ global \ def \ somebox {some text} \ {端逐项} 这应该显示一些东西:\ somebox \ {端文档}