Umgebungsinhalt zweimal ausgeben mit unexpandierten Befehlen

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


Benutzeravatar
iTob
Forum-Meister
Forum-Meister
Beiträge: 1221
Registriert: Mo 19. Apr 2010, 22:19
Kontaktdaten:

Umgebungsinhalt zweimal ausgeben mit unexpandierten Befehlen

Beitrag 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

CrazyHorse
Forum-Guru
Forum-Guru
Beiträge: 252
Registriert: Di 16. Mär 2010, 09:39

Re: Umgebungsinhalt zweimal ausgeben mit unexpandierten Befe

Beitrag 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

CrazyHorse
Forum-Guru
Forum-Guru
Beiträge: 252
Registriert: Di 16. Mär 2010, 09:39

Re: Umgebungsinhalt zweimal ausgeben mit unexpandierten Befe

Beitrag 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

Benutzeravatar
iTob
Forum-Meister
Forum-Meister
Beiträge: 1221
Registriert: Mo 19. Apr 2010, 22:19
Kontaktdaten:

Beitrag 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

CrazyHorse
Forum-Guru
Forum-Guru
Beiträge: 252
Registriert: Di 16. Mär 2010, 09:39

Beitrag 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

Benutzeravatar
iTob
Forum-Meister
Forum-Meister
Beiträge: 1221
Registriert: Mo 19. Apr 2010, 22:19
Kontaktdaten:

Beitrag von iTob »

Ahh... sehr gute Taktik :wink:

Dann nochmal vielen Danke euch beiden!

Antworten