Umgebungsinhalt zweimal ausgeben mit unexpandierten Befehlen

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Umgebungsinhalt zweimal ausgeben mit unexpandierten Befehlen

von iTob » Do 19. Aug 2010, 12:28

Ahh... sehr gute Taktik :wink:

Dann nochmal vielen Danke euch beiden!

von CrazyHorse » Mi 18. Aug 2010, 19:35

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

von iTob » Mi 18. Aug 2010, 17:43

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

Re: Umgebungsinhalt zweimal ausgeben mit unexpandierten Befe

von CrazyHorse » Di 17. Aug 2010, 21:02

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

Re: Umgebungsinhalt zweimal ausgeben mit unexpandierten Befe

von CrazyHorse » Di 17. Aug 2010, 19:41

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

Umgebungsinhalt zweimal ausgeben mit unexpandierten Befehlen

von iTob » Di 17. Aug 2010, 17:51

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

Nach oben