eigene Umgebungen verschachteln

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


MickroC
Forum-Newbie
Forum-Newbie
Beiträge: 9
Registriert: Mo 11. Jan 2010, 18:14

eigene Umgebungen verschachteln

Beitrag 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.

Mechanicus
Forum-Guru
Forum-Guru
Beiträge: 322
Registriert: Mi 8. Okt 2008, 18:41
Wohnort: Hamburg

Beitrag von Mechanicus »

Hi,

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

Gruß
Marco
Personalführung ist die Kunst der Vorgesetzten den Untergebenen so schnell über den Tisch zu ziehen, dass er die Reibungshitze als Nestwärme empfindet.

MickroC
Forum-Newbie
Forum-Newbie
Beiträge: 9
Registriert: Mo 11. Jan 2010, 18:14

Beitrag 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

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

Beitrag 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.

MickroC
Forum-Newbie
Forum-Newbie
Beiträge: 9
Registriert: Mo 11. Jan 2010, 18:14

Beitrag 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!
Dateianhänge
myindex_falsch.tex
(884 Bytes) 587-mal heruntergeladen
myindex_richtig.tex
(675 Bytes) 579-mal heruntergeladen

Mechanicus
Forum-Guru
Forum-Guru
Beiträge: 322
Registriert: Mi 8. Okt 2008, 18:41
Wohnort: Hamburg

Beitrag 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
Personalführung ist die Kunst der Vorgesetzten den Untergebenen so schnell über den Tisch zu ziehen, dass er die Reibungshitze als Nestwärme empfindet.

Antworten