Seite 1 von 1

eigene Umgebungen verschachteln

Verfasst: Do 30. Sep 2010, 18:56
von MickroC
Hallo zusammen,
ich möchte mit
\newenvironment
eine neue Umgebung definieren, wie es hier im Forum (http://www.golatex.de/wiki/index.php?ti ... nvironment) beschrieben ist.
Mein Problem ist genau das was da gezeigt wird, nämlich, dass die Übergabeparameter nur im begin-Teil gültig sind. Mit der Lösung, die Parameter "zwischenzuspeichern" funktioniert es im Normalfall schon, aber wie er Titel schon sagt möchte ich die Umgebungen verschachteln könne. In diesem Fall würde der "Zwischenspeicher" immer überschreiben werden.
Gibt es eine Möglichkeit das zu umgehen/lösen?

Habe natürlich breits gegoogelt und auch hier im Forum gesucht, aber letztendlich finde ich immer nur die oben erwähnte Erklärung....

Hintergrund ist, dass ich sowas wie
\index{Baum|(}
   Text, Kapitel, etc.
\index{Baum|)}
gerne als
\begin{idx} 
...
\end{idx}

anlegen möchte und in so einem Block können halt auch andere Blöcke vorkommen...


Danke schonmal

ps.: Ich habe versucht das Thema im Bereich "Eigene Strukturen" zu posten, aber aus irgendeinem Grund habe ich immer nur ne leere Seite bekommen (2 mal). Ich denke aber, dass die Frage auch hier her passt, ansonsten einfach verschieben, danke.

Verfasst: Do 30. Sep 2010, 19:09
von Mechanicus
Hi,

kannst du bitte ein Minimalbeispiel erstellen. Ich verstehe nämlich dein Problem nicht so richtig.

Gruß
Marco

Verfasst: Do 30. Sep 2010, 23:56
von MickroC
Wenn ich im Index Einträge haben möchte, wie "xy, 5-12", also, dass das Stichwort xy auf Seite 5-12 beschrieben ist, dann mache ich das noramlerweise mit makeindex so:
\index{xy|(}
   Text, der was mit xy zu tun hat
\index{xy|)}
und ich würde das gerne durch eine eigendefinierte Umgebung in der Form schreiben:
\begin{myindex}{xy}
   Text, der was mit xy zu tun hat
\end{myindex}
Hier ist natürlich die Frage ob sich der Aufwand überhaupt lohnt, weil code 1 ja schon recht einfach ist, aber ich würde auch nicht nen einfachen /index{}-Befehl nehmen sondern ebenfalls ein eigenes Makro, in dem ich die Formatierung des Indexeintrages (mit /textbf{} usw.) manipuliere.
Das Problem ist ja, dass der /end{myindex}-Teil ebenfalls die Übergabeparameter kennen muss...
In dem Tutorial hier im Forum (siehe Adresse 1. Post) würde das in dieser Art gemacht werden:
\newcommand{\help}{}
\newenvironment{myindex}[1]
{
   \renewcommand{\help}{#1}
   \index{\help|(}
}
{
   \index{\help|)}
}
Nun kann man im Übergabeparameter angeben was für ein Indexeintrag erzeugt werden soll. Soweit funktioniert das auch, nur wenn man jetzt innerhalb dieser myindex-Umgebung nochmal ein /begin{myindex} macht, würde dieser die "Hilfsvariable" /help ebenfalls benutzen und überschreiben....

Ich hoffe jetzt ist die Sache ewas verständlicher

Verfasst: Fr 1. Okt 2010, 08:28
von KOMA
Dein Beispiel ist kein vollständiges Minimalbeispiel (← dies ist ein geprüfter Link mit relevanten Informationen!). Ich kann es nämlich nicht einfach laufen lassen und sehe dann das Problem. Ich vermute, dass es deshalb schwierig wird, das Problem zu zeigen, weil Definitionen mit \renewcommand genau wie mit \newcommand normalerweise lokal sind und es deshalb gar kein Problem gibt. Damit wäre dann der Sinn eines vollständigen Minimalbeispiels wieder bewiesen.

Du solltest also das nächste Mal nicht warten, bis man Dich nach einem vollständigen Minimalbeispiel fragt und dann trotzdem keines erstellen, sondern Du solltest das sofort tun, wenn Du ein Problem vermutest.

Verfasst: Fr 1. Okt 2010, 20:24
von MickroC
Erstmal danke für die schnellen Antworten.
Im Anhang ist das Minimalbeispiel und @KOMA: du hattes Recht, ich hätte wirklich gleich ein Minimalbsp. angeben sollen, denn das Bsp. im Anhang FUNKTIONIERT!
Ich hatte angenommen, dass es um ein logisches Problem geht und nicht erwartet, dass hier lauffähiger Code nötig ist...
Als ich das Bsp. gemacht habe (und deine Antwort mit der lokalen Gültigkeit von /renewcommand gelesen habe => wieder was gelernt, danke^^ ) und es dann funktioniert hat ist mir mein eigentlicher Fehler gekommen:
Ich habe mehrere solcher Umgebungen gemacht um die Indexeinträge unterschiedlich formatieren zu können und in einer Umgebung habe ich nicht /renewcommand sondern /newcommand benutzt -.-
Auch dazu ist ein Minimalbsp. angehängt um es nachvollziehen zu können.

Danke für die Hilfe, Fehler behoben!

Verfasst: Fr 1. Okt 2010, 20:39
von Mechanicus
Hi,

du kannst auch Code hier im Forum selbst posten. Ist einfacher, für alle beteiligten.
Da deine Dateien identisch sind, habe ich sie auf ein Minimum zusammengeschrumpft.
\documentclass[a4paper,10pt]{article}
\usepackage[latin1]{inputenc}
\usepackage{makeidx}
\newcommand{\helpindex}{}
\newenvironment{myindex}[1]
{
  \renewcommand{\helpindex}{#1}
  \index{\helpindex|(}
}
{
  \index{\helpindex|)}
}
\makeindex
\begin{document}   
\begin{myindex}{Baum}
 Text (Kapitel...) über Bäume
 \newpage
 der über mehrere Seiten geht
 \begin{myindex}{Apfel}
  Text über Äpfel (Section...)
  \newpage
  der über mehrere Seiten geht...
 \end{myindex}
\end{myindex}
\printindex
\end{document}
Wo ist das Problem?

Gruß
Marco