PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Inhalt aus Umgebung später verwenden



rafael
03-01-2012, 12:47
Sicherlich ein leicht zu lösendes Problem:
Ich möchte den Inhalt einer Umgebung irgendwo hinterlegen und später (also außerhalb der Umgebung) an anderer Stelle ausführen.
1. Ich habs zuerst mit dem Paket environ versucht. Dort habe ich das Makro \BODY in einem Makro oder einem Token zu hinterlegt. Doch außerhalb der Umgebung sind die Behälter stets leer.

2. Mit der lrbox umgebung gibt es das gleiche Problem:


\documentclass{scrartcl}

\newsavebox{\mystuffbox}
\sbox{\mystuffbox}{Voreinstellung}

\newenvironment{mystuff}[1][]
{\begin{lrbox}{\mystuffbox}}
{\end{lrbox}}

\begin{document}

Voreinstellung: \usebox{\mystuffbox}

\begin{mystuff}
neuer Inhalt
\end{mystuff}
neuer Test:\usebox{\mystuffbox}
\end{document}

u_fischer
03-01-2012, 13:57
Du musst halt den Kram vor dem Ende der Umgebung in eine globale Variable/Box umspeichern. Boxen und Variablen/Befehle sind übrigens sehr unterschiedliche Dinge. Wähle also das richtige Speichermedium.


\documentclass{scrartcl}
\usepackage{environ}
\newsavebox{\mystuffbox}
\sbox{\mystuffbox}{Voreinstellung}

\newenvironment{mystuff}[1][]
{\begin{lrbox}{\mystuffbox}}
{\end{lrbox}\global\sbox\mystuffbox{\usebox{\mystu ffbox}}}

\begin{document}

Voreinstellung: \usebox{\mystuffbox}

\begin{mystuff}
neuer Inhalt
\end{mystuff}
neuer Test:\usebox{\mystuffbox}

\newcommand\myBody{Vorher}

\NewEnviron{test}[1][]{%
\global\let\myBody\BODY}

\myBody

\begin{test}
blub nachher
\end{test}

\myBody


\end{document}

The EYE
03-01-2012, 15:52
Hallo!

Könnte jmd. ein paar Worte dazu schreiben, wozu dies gut sein könnte?

Gruß Max

rafael
03-01-2012, 19:00
Du musst halt den Kram vor dem Ende der Umgebung in eine globale Variable/Box umspeichern. Boxen und Variablen/Befehle sind übrigens sehr unterschiedliche Dinge. Wähle also das richtige Speichermedium.

Danke, den Befehl \global kannte ich noch nicht

rafael
03-01-2012, 19:07
Könnte jmd. ein paar Worte dazu schreiben, wozu dies gut sein könnte
Naja, alles was in der Umgebung steht, brauchst du vielleicht gerade nicht (eventuell sind es Lösungen zu gestellten Aufgaben) willst sie aber an späterer Stelle ausgeben:


\documentclass[ngerman]{scrartcl}

\usepackage{environ,babel,blindtext}

\newcommand{\mysolution}{}
\NewEnviron{loesung}{\global\let\mysolution\BODY}% auslesen

\newenvironment{aufgabe}{
}
{ \vfill
L\"osungen auf der n\"achsten Seite.\clearpage
\mysolution
}
\begin{document}

\begin{aufgabe}
\blindtext
\begin{loesung}Dinge, die zwischen den Zeilen stehen und am Ende au\ss erhalb ausgegeben werden.\end{loesung}
\blindtext
\end{aufgabe}
\end{document}

The EYE
04-01-2012, 18:09
Alles klar, danke!

Gruß Max