PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit meinem Environment...



PhanTOOM
04-08-2008, 23:25
Hallo wieder,

ich hätte wiedermal zwei Fragen, die ich nicht selbst ausgetüftelt bekomme. Ich habe meine eigene Umgebung für Rechenregeln geschrieben (auf die ich auch ein bisschen stolz bin :) ), die auch soweit ganz gut funktioniert. Hier erstmal das Minimalbeispiel:



\documentclass{scrartcl}

\usepackage[ngerman]{babel}
\usepackage{tikz}

\newcounter{RRCounter}
\newenvironment{RR}[1][]{
\begin{samepage}
\hspace*{1mm}\newline
\textbf{Rechenregeln}#1:
\begin{list}{
\begin{tabular}{c}
\begin{tikzpicture}
\draw (0,0) circle (0.2cm);
\draw (0,0) node{\arabic{RRCounter}};
\end{tikzpicture}
\end{tabular}
}
{\usecounter{RRCounter}
\setlength{\itemsep}{0cm}
\setlength{\parsep}{0cm}
}
}
{ \end{list}
\end{samepage}
\vspace{0.5cm}
}


\begin{document}

\begin{enumerate}
\item \begin{RR}[ (Umgebung 1)]
\item Rechenregel 1
\item Rechenregel 2
\end{RR}
\item Hier steht normal noch irgendeine andere Umgebung
\end{enumerate}

\end{document}


Nun habe ich folgende Probleme:

Einmal will ich die Rechenregeln vom restlichen Text etwas absetzen, indem ich oberhalb einen Abstand einfüge. Da ich das nicht jedes Mal neu machen will, sollte das ja wohl direkt bei der Definition der Umgebung passieren, denke ich. Ich habe das mit
\hspace*{1mm}\newline gemacht. Mein Problem dabei ist, dass ich den Abstand (oder die Leerzeile, was auch immer) nicht haben will, wenn die Umgebung in einer Liste steht, so wie im Minimalbeispiel. Gibt es eine Möglichkeit, Abstand einzufügen, die diese Anforderung erfüllt, oder muss ich eine komplett andere Lösung finden?

Das zweite Problem betrifft das optionale Argument der Umgebung (der Text, der in der Überschrift der Umgebung eingefügt wird). Ich will in dieser Überschrift ein mathematisches Intervall mit eckigen Klammern angeben. Schreibe ich etwas wie
$[a,b]$ in das Argument, produziert das über 20 Fehler. So richtig kann ich mir das nicht erklären, habe ich die Klammern doch ordnungsgemäß geschachtelt. Neben dem einfachsten Ausweg aus diesem Problem würde mich auch das "Warum" des Fehlers interessieren.

Stefan_K
04-08-2008, 23:39
Hallo,


Ich will in dieser Überschrift ein mathematisches Intervall mit eckigen Klammern angeben. Schreibe ich etwas wie $[a,b]$ in das Argument, produziert das über 20 Fehler.

gruppiere zusätzlich mit geschweiften Klammern:

begin{RR}[{$[a,b]$}]

Viele Grüße,

Stefan

PhanTOOM
04-08-2008, 23:49
Jep, das funktioniert, vielen Dank. Wieso verträgt der Compiler denn keine Schachtelung von eckigen Klammern?

Wie sieht es mit dem Abstand aus? Gibt es da auch eine so einfache Lösung?

PhanTOOM
07-08-2008, 23:24
Hat keiner einen Tipp für den Abstand überhalb der Umgebung? Ich habe da einfach keine Idee...

krihaa
08-08-2008, 01:14
Hallo,

habe mal ein bisschen rumgespielt und mich dabei natürlich fortgebildet -- man weiß ja nie was kommt.:cool:

Es ist zwar keine Lösung, die automatisch den Abstand einfügt, aber doch relativ simpel, finde ich zumindest.
Du benötigst also das xargs-Paket (http://www.ctan.org/tex-archive/macros/latex/contrib/xargs/), welches mehr als ein optionales Argument ermöglicht und das ifthen-Paket, aber das sollte glaub ich bei jeder Distribution dabei sein.
Die Umgebung hat nun 2 optionale Argumente, das erste für die Entscheidung ob mit/ohne Abstand, das zweite für deinen Text "(Umgebung 1)". Das erste Argument wird per default auf 1 gesetzt, das zweite bleibt leer. Wenn du das erste Argument "1" setzt oder leer lässt, dann kommt der Abstand, wenn du eine andere Zahl eingibst, dann bekommst du ihn nicht.
Du kannst natürlich mit einem kurzen Blick in die beiden Dokus die Abfrage ändern und auch nachlesen, warum "usedefault" in den Optionen stehen muss.

\documentclass{scrartcl}

\usepackage[ngerman]{babel}
\usepackage{tikz,xargs,ifthen}

\newcounter{RRCounter}
\newenvironmentx{RR}[2][1=1,2={},usedefault]{
\begin{samepage}
\ifthenelse{#1=1}{\hspace*{1mm}\newline}{}
\textbf{Rechenregeln}#2:
\begin{list}{
\begin{tabular}{c}
\begin{tikzpicture}
\draw (0,0) circle (0.2cm);
\draw (0,0) node{\arabic{RRCounter}};
\end{tikzpicture}
\end{tabular}
}
{\usecounter{RRCounter}
\setlength{\itemsep}{0cm}
\setlength{\parsep}{0cm}
}
}
{ \end{list}
\end{samepage}
\vspace{0.5cm}
}


\begin{document}
\begin{enumerate}
\item \begin{RR}[][ (Umgebung 1)]
\item Rechenregel 1
\item Rechenregel 2
\end{RR}
\item Hier steht normal noch irgendeine andere Umgebung
\end{enumerate}
\begin{enumerate}
\item \begin{RR}[0][ (Umgebung 1)]
\item Rechenregel 1
\item Rechenregel 2
\end{RR}
\item Hier steht normal noch irgendeine andere Umgebung
\end{enumerate}
\end{document}

Ich hoffe, dass dich das etwas weiter bringt. Eventuell postet ja noch jemand eine vollautomatische Lösung.

Gruß und gute Nacht.

PhanTOOM
09-08-2008, 14:42
Wow, da hast Du dir aber echt Mühe gemacht.. Auch wenn es keine vollautomatische Lösung ist, erfüllt es doch den Zweck. :)

Also nochmal n dickes Merci dafür!

voss
09-08-2008, 15:38
Nun habe ich folgende Probleme:

Einmal will ich die Rechenregeln vom restlichen Text etwas absetzen, indem ich oberhalb einen Abstand einfüge. Da ich das nicht jedes Mal neu machen will, sollte das ja wohl direkt bei der Definition der Umgebung passieren, denke ich. Ich habe das mit
\hspace*{1mm}\newline gemacht. Mein Problem dabei ist, dass ich den Abstand (oder die Leerzeile, was auch immer) nicht haben will, wenn die Umgebung in einer Liste steht, so wie im Minimalbeispiel. Gibt es eine Möglichkeit, Abstand einzufügen, die diese Anforderung erfüllt, oder muss ich eine komplett andere Lösung finden?

Das zweite Problem betrifft das optionale Argument der Umgebung (der Text, der in der Überschrift der Umgebung eingefügt wird). Ich will in dieser Überschrift ein mathematisches Intervall mit eckigen Klammern angeben. Schreibe ich etwas wie
$[a,b]$ in das Argument, produziert das über 20 Fehler. So richtig kann ich mir das nicht erklären, habe ich die Klammern doch ordnungsgemäß geschachtelt. Neben dem einfachsten Ausweg aus diesem Problem würde mich auch das "Warum" des Fehlers interessieren.


\documentclass{scrartcl}

\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[ngerman]{babel}

\newcounter{RRCounter}
\makeatletter
\newenvironment{RR}[1]{%
\begin{samepage}
\ifnum\@enumdepth>0 ~\newline\fi
\textbf{Rechenregeln}#1:
\begin{list}{\Large\textcircled{\normalsize\theRRC ounter}}
{\usecounter{RRCounter}
\setlength{\itemsep}{0cm}
\setlength{\parsep}{0cm}}}
{\end{list}
\end{samepage}
\vspace{0.5cm}}
\makeatother

\begin{document}
\begin{RR}{ (Umgebung 1)}
\item Rechenregel 1
\item Rechenregel 2
\end{RR}

\begin{enumerate}
\item \begin{RR}{ (Umgebung 1)}
\item Rechenregel 1
\item Rechenregel 2
\end{RR}
\item Hier steht normal noch irgendeine andere Umgebung
\end{enumerate}
\end{document}


Herbert

krihaa
09-08-2008, 16:00
Dann aber doch wohl eher so:
...
\ifnum\@enumdepth=0 ~\newline\fi
...
Sonst ist es ja genau anders herum. Leerzeile wenn Umgebung in der Liste, keine wenn außerhalb. Oder?

Gruß

PhanTOOM
09-04-2009, 14:08
So, hallo wieder wollte mich nur nochmal melden in diesem Thread, weil ich die Vorschläge jetzt einbinde. Funktioniert jetzt echt super. Falls es interessiert: So sieht das jetzt ungefähr aus:



\documentclass{scrartcl}

\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{tikz}

\newcounter{RRCounter}
\makeatletter
\newenvironment{RR}[1][]{%
\begin{samepage}
\ifnum\@enumdepth=0 ~\vspace{8px}\newline\fi
\textbf{Rechenregeln}#1:
\begin{list}{
\begin{tabular}{c}
\begin{tikzpicture}
\draw (0,0) circle (0.2cm);
\draw (0,0) node{\arabic{RRCounter}};
\end{tikzpicture}
\end{tabular}
}
{\usecounter{RRCounter}
\setlength{\itemsep}{0cm}
\setlength{\parsep}{0cm}
}
}
{\end{list}
\end{samepage}
\vspace{0.5cm}}
\makeatother

\begin{document}
Hier steht irgendein Text... Beziehungsweise steht hier versuchsweise sogar nochmehr Text, damit man sieht, wie lang ein
Absatz ist. Die Stelle des automatischen Umbruchs gibt Aufschluss darüber. Außerdem sehe ich, wie lang der Abstand zur folgenden RR-Umgebung ist.
\begin{RR}{ (Umgebung 1)}
\item Rechenregel 1
\item Rechenregel 2
\end{RR}
Dann steht hier wieder Fülltext, damit ich den Abstand unter der RR-Umgebung sehe und im Vergleich dazu auchnoch den
Abstand vor einer enumerate-Umgebung.
\begin{enumerate}
\item Das ist irgendein Punkt, muss keine Umgebung sein
\item \begin{RR}{ (Umgebung 1)}
\item Rechenregel 1
\item Rechenregel 2
\end{RR}
\end{enumerate}
Nochmal Text zur Abstandskontrolle. Und um Euch allen danke zu sagen, die ihr mir geholfen habt, dass das hier so aussieht, wie es das jetzt tut... DANKE!!!
\end{document}