Seite 1 von 1

Umgebungsinhalt zweimal ausgeben mit unexpandierten Befehlen

Verfasst: Di 17. Aug 2010, 17:51
von iTob
Hallo,

ratet mal, wer schon wieder eine Frage hat :oops:
Genau ich...

Diesmal geht es um Folgendes:
Ich möchte gerne, dass der Inhalt einer Umgebung – also das zwischen \begin{} und \end{} – automatisch zweimal ausgegeben wird. Das Problem dabei ist, dass in der Umgebung Befehle stehen, deren Definition sich zwischen dem ersten und zweiten Ausgeben verändern soll.
Ich habe es mit einer savebox versucht, die scheint aber den vollständig expandierten Text zu speichern, so dass die Veränderung der Definition keine Wirkung mehr hat. Wie kann ich den Inhalt der Umgebung unexpandiert speichern, so dass er bei jeder Ausgabe erneut ausgewertet wird?

Hier das Beispiel, in dem die Veränderung der Definition durch eine if-Abfrage geschieht.
\documentclass[11pt,a4paper]{scrartcl}
\usepackage[latin1]{inputenc}
\usepackage{ifthen}

\newboolean{mybool}% neue boolsche Variable, ist mit false bvoreingestellt
\newsavebox{\mybox}% neue sbox anlegen
\newenvironment{myenv}{% Umgebung definieren
	\begin{lrbox}{\mybox}% Box öffnen
}{
	\end{lrbox}% Box schließen
	\par Zunächst die Ausgabe, mit als falsch eingestellter Variable:\par
	\usebox{\mybox}% Box das erste Mal ausgeben
	\setboolean{mybool}{true}% boolsche Variable ändern
	\par Jetzt die Ausgabe mit umgestellter Variable (wahr):\par
	\usebox{\mybox}% Box das zweite mal Ausgeben
}

\newcommand{\mycmd}{%neuer Befel, der sich abhängig von der boolschen Variable verhält
	\ifthenelse{\boolean{mybool}}{
		\texttt{mybool} ist wahr.
	}{
		\texttt{mybool} ist falsch.
	}
}

\begin{document}
\section*{Minimalbeispiel -- unausgeführte Befehle in sbox}
\begin{myenv}
\par Diese Inhalt wird mehrfach Ausgegeben.

Mit dem Befehl
\mycmd
\end{myenv}
\end{document}
Kann ich ein derartiges Ziel überhaupt mit einer savebox erreichen? Wenn nicht, womit dann?
Vielleicht mit Zwischenspeichern in einer externen Datei...?

Und noch eine Frage: Kann die savebox keine Umbrüche speichern? Wenn ich die \par-Befehle weglasse, steht alles in einer über den Rand hinausragenden Zeile...

Vielen Dank und
liebe Grüße!
Tobi

Re: Umgebungsinhalt zweimal ausgeben mit unexpandierten Befe

Verfasst: Di 17. Aug 2010, 19:41
von CrazyHorse
iTob hat geschrieben:Ich möchte gerne, dass der Inhalt einer Umgebung – also das zwischen \begin{} und \end{} – automatisch zweimal ausgegeben wird. Das Problem dabei ist, dass in der Umgebung Befehle stehen, deren Definition sich zwischen dem ersten und zweiten Ausgeben verändern soll.
theoretisch könnte man den Inhalt der Umgebung erstmal
in eine externe Datei schreiben und dann zweimal mit \input
einlesen. Mal sehen, ob ich da was zum Laufen bekomme.

Herbert

Re: Umgebungsinhalt zweimal ausgeben mit unexpandierten Befe

Verfasst: Di 17. Aug 2010, 21:02
von CrazyHorse
iTob hat geschrieben:Diesmal geht es um Folgendes:
Ich möchte gerne, dass der Inhalt einer Umgebung – also das zwischen \begin{} und \end{} – automatisch zweimal ausgegeben wird. Das Problem dabei ist, dass in der Umgebung Befehle stehen, deren Definition sich zwischen dem ersten und zweiten Ausgeben verändern soll.
es geht einfacher ...
\documentclass{article}% Idee von Rolf Niepraschk
\usepackage[utf8]{inputenc}
\usepackage{environ}

\newif\ifMyBool \MyBoolfalse

\def\mycmd{%
   \ifMyBool \texttt{mybool} ist wahr.
   \else \texttt{mybool} ist falsch. \fi}

\NewEnviron{myenv}{%
  \par Zunächst die Ausgabe, mit als falsch eingestellter Variable:\par
  \BODY
  \global\MyBooltrue%
  \par Jetzt die Ausgabe mit umgestellter Variable (wahr):\par
  \BODY
}

\begin{document}
\begin{myenv}
\par Diese Inhalt wird mehrfach Ausgegeben.

Mit dem Befehl
\mycmd
\end{myenv}

\end{document} 
Herbert

Verfasst: Mi 18. Aug 2010, 17:43
von iTob
Super!!

Funktioniert, genau wie ich es brauche und auch lange Sätze werde wie gewohnt umbrochen.

Danke dir!

nur so aus Neugier: Nach was hast du gesucht (gegooglet) um das zu finden? Ich bin nämlich bei Google zu keinem Ergebnis gekommen...

Liebe Grüße
Tobi

Verfasst: Mi 18. Aug 2010, 19:35
von CrazyHorse
iTob hat geschrieben: nur so aus Neugier: Nach was hast du gesucht (gegooglet) um das zu finden? Ich bin nämlich bei Google zu keinem Ergebnis gekommen...
Ich wusste, dass es irgendwo ein Paket gibt, habe aber wie üblich
den Namen vergessen und 2TeraByte Plattenplatz überfordern
mich ... also frage ich jemanden, der ähnlich viel mit LaTeX macht,
aber nur dass vergisst, was ich nicht vergesse ... :D
So bleibt immer die Hoffnung, dass es einer weiß ...

Herbert

Verfasst: Do 19. Aug 2010, 12:28
von iTob
Ahh... sehr gute Taktik :wink:

Dann nochmal vielen Danke euch beiden!