Anzeige:
Ergebnis 1 bis 9 von 9

Thema: Probleme mit meinem Environment...

  1. #1
    Registrierter Benutzer Avatar von PhanTOOM
    Registriert seit
    22.07.2008
    Beiträge
    13

    Question Probleme mit meinem Environment...

    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:

    Code:
    \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
    Code:
    \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
    Code:
    $[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.

  2. #2
    Registrierter Benutzer Avatar von Stefan_K
    Registriert seit
    05.04.2007
    Ort
    Hamburg
    Beiträge
    3.534

    eckige Klammern in optionalen Parametern

    Hallo,

    Zitat Zitat von PhanTOOM Beitrag anzeigen
    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:
    Code:
    begin{RR}[{$[a,b]$}]
    Viele Grüße,

    Stefan

  3. #3
    Registrierter Benutzer Avatar von PhanTOOM
    Registriert seit
    22.07.2008
    Beiträge
    13

    Smile

    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?

  4. #4
    Registrierter Benutzer Avatar von PhanTOOM
    Registriert seit
    22.07.2008
    Beiträge
    13

    Unhappy Keine Idee?

    Hat keiner einen Tipp für den Abstand überhalb der Umgebung? Ich habe da einfach keine Idee...

  5. #5
    Registrierter Benutzer
    Registriert seit
    11.06.2008
    Beiträge
    151
    Hallo,

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

    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, 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.
    Code:
    \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.
    Geändert von krihaa (08-08-2008 um 01:17 Uhr)

  6. #6
    Registrierter Benutzer Avatar von PhanTOOM
    Registriert seit
    22.07.2008
    Beiträge
    13

    Thumbs up Vielen Dank

    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!

  7. #7
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.045
    Zitat Zitat von PhanTOOM Beitrag anzeigen
    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
    Code:
    \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
    Code:
    $[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.
    Code:
      \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\theRRCounter}}
    		{\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

  8. #8
    Registrierter Benutzer
    Registriert seit
    11.06.2008
    Beiträge
    151
    Dann aber doch wohl eher so:
    Code:
    ...
    \ifnum\@enumdepth=0 ~\newline\fi
    ...
    Sonst ist es ja genau anders herum. Leerzeile wenn Umgebung in der Liste, keine wenn außerhalb. Oder?

    Gruß

  9. #9
    Registrierter Benutzer Avatar von PhanTOOM
    Registriert seit
    22.07.2008
    Beiträge
    13

    Thumbs up

    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:

    Code:
    \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}
    Geändert von PhanTOOM (09-04-2009 um 14:31 Uhr)

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •