Geschachtelte Umgebungen

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


Laures
Forum-Anfänger
Forum-Anfänger
Beiträge: 34
Registriert: Do 6. Aug 2009, 19:48

Geschachtelte Umgebungen

Beitrag von Laures »

Aus purer Neugier mal eine Frage:

Wie muss ich zwei Umgebungen definieren, damit sie geschachtelt werden können?

Wenn ich einfach zwei umgebungen definiere und sie verwende gibt das Fehler. Das hatte ich schon erwartet, da u.A. tabularx damit ja auch Probleme hat.

Ich habe versucht nach einer Lösung zu googlen, aber leider nichts gefunden.
\newenvironment{outerblock}{\tabularx{\columnwidth}{XX}}{\endtabularx}
\newenvironment{innerblock}{hallo&welt\\}{hallo&welt\\}
\newcommand{\innertabblock}{hallo&welt\\}

\begin{document}
	\begin{outerblock}
		\begin{innerblock}
		\end{innerblock}
		%\innertabblock
	\end{outerblock}
\end{document}
Mal wieder,
Laures
programming is like sex, one mistake and you have to support it for the rest of your life

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

In der Regel ist es überhaupt kein Problem zwei Umgebungen zu schachteln. Das ist sogar etwas ganz normales. Was allerdings nicht normal ist, ist die tabularx-Umgebung. Die ist ganz ähnlich wie alle amsmath-Umgebungen, wie verbatim oder lstlisting einfach sehr speziell.

Ein wenig speziell ist übrigens bereits die tabular-Umgebung selbst. Ein Problem dabei ist, dass jede Zelle einer Tabelle eine eigene Gruppe bildet. Da Umgebungen und Gruppen nur sauber in einander gesteckt aber nicht
verschränkt werden dürfen, kann man beispielsweise nicht in Spalte ein einer Tabelle eine Umgebung beginnen und diese in Spalte n dann schließen:
\begin{tabular}{ll}
\begin{flushleft} Ein & Test \end{flushleft}
\end{tabular}
Dabei würde etwas wie:
\begingroup \begin{flushleft} Ein\endgroup
...
\begingroup Test \end{flushleft}\endgroup
entstehen, was natürlich einen Fehler bedeutet. Genau so eine Situation hast Du in Deinem Codeschnippsel ebenfalls.

Deshalb sollte man Tabellenzeilen auch eher mit einem Makro also mit einer Umgebung erzeugen. Das geht so weit, dass man in bestimmten Situationen ein Hilfemakro benötigt, in dem man alle Tabellenzeilen aufsammelt, um sie dann im \end-Teil einer Umgebung auf einen Schlag zusammen mit der tatsächlichen Tabellenumgebung ausgeben zu können.

Da ich keine Ahnung habe, was Du eigentlich vor hast, kann ich Dir nur einen weiteren Hinweis geben: Du wirst Deinen Ansatz neu überdenken müssen. Eventuell wirst Du dazu noch einiges über Gruppen im TeXbook oder in TeX by Topic und eventuell auch einiges über die Funktion von tabular in der einschlägigen Literatur oder source2e nachlesen müssen. Hier werden wir Dir diesbezüglich nur helfen können, wenn Du möglichst klar und möglichst mit Beispiel erklärst, worum es Dir eigentlich geht und worauf Du hinaus willst. Nimm Dir dafür ggf. ruhig etwas Zeit.

Laures
Forum-Anfänger
Forum-Anfänger
Beiträge: 34
Registriert: Do 6. Aug 2009, 19:48

Beitrag von Laures »

Ich schreibe gerade einen statistikblock, der designbedingt auf einer Tabelle basiert. Dabei dienen die Umgebungen hauptsächlich zur gruppierung von latex-Befehlen, um das dokument für den späteren Autor lesbarer zu gestalten.

Deshalb hab ich jetzt auch einfach aus der inneren Umgebung einen Command gemacht. Wenn alles andere funktioniert (und das ist noch ne ganze Menge) werd ich mich nochmal da drann setzen.
programming is like sex, one mistake and you have to support it for the rest of your life

Antworten