newenvironment

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: newenvironment

von marcelinho » Mi 16. Sep 2009, 20:28

Ok, das klappt, danke!

von Saubär » Mi 16. Sep 2009, 15:23

ratte hat geschrieben:
\newenvironment{foo}[2]{%
  \def\fooparA}{#1}%
  \def\fooparB}{#2}%
  ...
}{%
  Parameter 1 war: \fooparA, Parameter 2 war \fooparB
}
\newcommand*{\fooparA}{}
\newcommand*{\fooparB}{}
Da sind zwei Klammern zu viel. Richtig wäre;
\newenvironment{foo}[2]{%
  \def\fooparA{#1}%
  \def\fooparB{#2}%
  ...
}{%
  Parameter 1 war: \fooparA, Parameter 2 war \fooparB
}
\newcommand*{\fooparA}{}
\newcommand*{\fooparB}{}
Hattest Du da etwa auch erst \newcommand stehen? ;-)

von Saubär » Mi 16. Sep 2009, 15:19

Das mit dem \newcommand\Xarg geht aber in die Hose, wenn man die Umgebung in sich selbst nochmal aufruft, also etwas wie
\begin{X}
  ...
  \begin{X}
  ...
  \end{X}
  ...
\end{X}
verwendet. Die Lösung von ratte mit einen \def\fooargA, das außerhalb der Definition der Umgebung mit einem \newcommand*{\fooargA}{} abgesichert wird, würfte also deutlich besser sein, als Deine nachgeschobene Lösung. Statt einem leeren Argument kann man beim Schreiben eines Pakets dann zur Sicherheit auch gleich etwas wie:
\newcommand*{\fooargA}{%
   \PackageWarning{foo}{command \string\fooargA\space should not be used by user or outside \string\begin{foo}...\string\end{foo}}%
}
definieren.

Re: newenvironment

von phi » Mi 16. Sep 2009, 12:24

marcelinho hat geschrieben:Warum kann ich die Parameter beim Definieren einer neuen Umgebung (newenvironment) nur für den Beginn der Umgebung benutzen
Weil Umgebungen nur eine andere Schreibweise für Befehle sind. \begin{X} wird grob gesagt ersetzt durch \begingroup\X, deswegen kann der Befehl \X auf Argumente, die nach \begin{X} kommen, zugreifen. \end{X} entspricht grob \endX\endgroup, der Befehl \endX ist dabei völlig unabhängig von \X.
marcelinho hat geschrieben:und kennt jemand vielleicht einen Weg, sie auch für das Ende zu benutzen?
Du musst sie zwischenspeichern:
\newenvironment{X}[1]{%
  \newcommand*{\Xarg}{#1}%
}{%
  % hier kann jetzt \Xarg benutzt werden
}

von ratte » Mi 16. Sep 2009, 10:33

Bei \newenvironment{foo}[n]Minimalbeispiel{BEGIN}{END} macht LaTeX intern im Prinzip \newcommand{\foo}[n]Minimalbeispiel{BEGIN}\newcommand{\endfoo}{END}. Damit dürfte klar sein, warum die Parameter nur in BEGIN zur Verfügung stellen. Die allgemeine Empfehlung für Parameter im END-Teil ist etwas wie:
\newenvironment{foo}[2]{%
  \def\fooparA}{#1}%
  \def\fooparB}{#2}%
  ...
}{%
  Parameter 1 war: \fooparA, Parameter 2 war \fooparB
}
\newcommand*{\fooparA}{}
\newcommand*{\fooparB}{}

newenvironment

von marcelinho » Di 15. Sep 2009, 20:56

Hallo,

Warum kann ich die Parameter beim Definieren einer neuen Umgebung (newenvironment) nur für den Beginn der Umgebung benutzen und kennt jemand vielleicht einen Weg, sie auch für das Ende zu benutzen?

Nach oben