Hallo Heiko,
du hast dich einfach mit \newsavebox ausgetrickst. \newsavebox testet erst ob der angegebene Name schon belegt ist und gibt in diesem Fall eine Fehlermeldung aus. Ansonsten ist der Befehl identisch mit dem Befehl \newbox. Mit \newbox wird auf den Test verzichtet und eine neue Box angelegt oder eine schon vorhandene Box mit diesem Namen einfach ueberschrieben.
Heiko Schlittermann wrote:
Hi,
mal angenommen, ich habe vor, etwa folgendes zu schreiben:
\begin{uebung} 2 Kopfstände \end{uebung}
Die 2 Kopfstände sollen dann z.B. eingerahmt erscheinen. Also:
\newenvironment{uebung}% {\newsavebox{\tmp}\begin{lrbox}{\tmp}}% {\end{lrbox}\fbox{\usebox{\tmp}}}
Funktioniert prima, aber nur einmal. Weil er beim zweiten Mal dann sagt, daß die savebox \tmp schon existiert.
Mann kann mit \newsavebox nur neue Boxen anlegen, wenn der Name nicht schon vergeben ist.
Es gibt zwei Moeglichkeiten: * man definiert mit \newsavebox eine neue Box ausserhalb der neuen Umgebung und definiert diese nur einmal. Man kann aber jederzeit den Boxeninhalt aendern (So hast du es in deiner zweiten Mail getan.) * Oder: Man ueberschreibt die die Box immer wieder mit \newbox. Dann kann man die Boxendefinition in die neue Umgebung mit reinbauen. Das ist vermutlich der eleganteste Weg. Zumindest muss man beim Recycling nur die einzelnen Umgebungen kopieren und vergisst nicht den Rest.
\newenvironment{uebung}% {\newbox{\tmp}\begin{lrbox}{\tmp}}{\end{lr.... ^^^^^^
\begin{uebung} test 1 \end{uebung}
\begin{uebung} test 2 \end{uebung}
Das funktioniert zumindest bei mir wunderbar.
Am saubersten käme mir vor, immer die selbe savebox zu verwenden ...
Einfach immer wieder ueberschreiben.
... und diese nach der Verwenung zu löschen. (Zu jedem new gehört ein delete ...)
Ein delete habe ich nicht gefunden. Man kann anscheinend einmal definierte Boxen leeren aber nicht loeschen.
Jens Weisse