\ sbox来自环境

时间:2010-06-01 18:00:46

标签: latex

我正在尝试在环境中保存一些文本供以后使用。我能想到的最小的测试用例就是这个。环境关闭后,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}

2 个答案:

答案 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 \ {端文档}