2010-06-01 38 views
2

我試圖在環境中保存一些文本供以後使用。我能想到的最小的測試案例就是這個。環境關閉後,sbox中保存的文本不可用。我該如何解決這個問題?謝謝。 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

你在這裏遇到的是一個範圍界定問題。在(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"`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} 
+0

感謝您的解釋。那'全球'確實是個伎倆 – 2010-06-02 15:08:56

1

我想我可以通過使用\def解決此問題。像這樣:

\的DocumentClass {文章} \開始{文件} \開始{逐項} \項目hello1 \項目hello1 \全球\高清\ somebox {一些文本} \結束{逐項} 這應該顯示的東西:\ somebox \ end {document}