\newenvironment mit oberem Abstand

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


Sven

\newenvironment mit oberem Abstand

Beitrag von Sven »

Hallo!

Ich möchte mir eine eigene Umgebung für Definitionen bastlen. Dies findet man ja auch zuhauf im Netz. Ich habe aber nirgendwo gefunden, wie man vor Begin der Umgebung einen Abstand einfügt. Ich wollte das so machen:
\newenvironment{defi}{\vspace{1cm} Definition:}
Ergebnis ist aber, dass zunächst das Wort Definition und dann erst der Abstand ausgegeben wird. Ich hab's auch schon so versucht:
\newenvironment{geschachtelt}{\vspace{1cm}}{Definition}

\newenvironment{defi}{\begin{geschachtelt}\end{geschachtelt}}
Ergebnis ist das gleiche - ich verzweifele hier bald. Kann mir jemand sagen wie das zu lösen ist?
Falls wichtig: ich benutze Miktex 2.8 unter Win7

Gruß, Sven

Benutzeravatar
iTob
Forum-Meister
Forum-Meister
Beiträge: 1221
Registriert: Mo 19. Apr 2010, 22:19
Kontaktdaten:

Beitrag von iTob »

Das Problem liegt dra, dass diese Abstände nur zwischen den Absätzen auftauchen dürfen.
Siehe z.B. im LaTeX-Begleiter S. 890. In kurzform steht dort, dass vertikale Abstände immer zwischen Absätzen stehen müssen.

Mit einem vollständigen Minimalbeispiel, hätte ich dir das auch schnell programmiert :wink:

Außerdem bin ich nicht sicher, ob du die Syntax von \newenvironment richtig verstanden hast:
\newenvironment{<Name>}{<VOR Umgebungsinhalt>}{<NACH Umgebungsinhalt>}

% in lang:

\newenvironment{<Name>}{%
  % hier kommt alles rein, was vor dem
  % Umgebungsinhalt ausgegeben werden soll
}{%
  % hier kommt alles rein, was nach dem
  % Umgebungsinhalt ausgegeben werden soll
}

Im Wiki wird übrigens genau dein Problem als Beispiel behalndelt ;-)

Sven

Beitrag von Sven »

Da nke für die schnelle Antwort. Ja, das Bespiel hatte ich auch schon gesehen. Aber das ist doch prinzipiell genau das, was ich gemacht habe. Würde ich nur den Abstand wollen - und nicht noch das Wort Definition - so würde das ja auch klappen. Die Syntax ist mir klar.
Ich würde ja auch \newtheorem verwenden, aber da stört mich, das der Text kursiv ist und kein Zeilenumbruch in der ersten Zeile stattfindet. Wenn einer weiß, wie ich das hinbekomme wäre auch super!

Xenara
Forum-Meister
Forum-Meister
Beiträge: 682
Registriert: Mi 25. Nov 2009, 09:41

Beitrag von Xenara »

Vielleicht habe ich dich falsch verstanden, ohne Minimalbeispiel ist es of schwierig.
Aber wie wärs mit sowas?
\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}

\newenvironment{definition}{\par\vspace*{2cm}\noindent Definition:}

\begin{document}

Text ohne Absatz davor.
\begin{definition}	
Hier steht irgendwas von einer Definition. Und nach einiger Zeit, wenn die Zeile dann auch wirklich voll ist, gibt es auch einen Zeilenumbruch.
\end{definition}
Text ohne Absatz danach.

\end{document}

Sven

Beitrag von Sven »

Juchu, genau so hab ich mir das vorgestellt. Jetzt versteh ich auch, wie's funzt: mit \par macht man einen Absatz und erst zwischen Absätzen kann man ja \vspace anwenden. Hätte ich auch drauf kommen können.
Vielen vielen Dank!

Xenara
Forum-Meister
Forum-Meister
Beiträge: 682
Registriert: Mi 25. Nov 2009, 09:41

Beitrag von Xenara »

Das war eigentlich ganz einfach, denn die Lösung stand fast im Klartext in dem von iTob verlinkten Wiki:
%Umgebung mit Argument
\newenvironment{KleinerAbsatzmitAbstandDavor}[1]{\par\vspace{#1}\tiny}{\par}
Aber manchmal sieht man auch einfach den Wald vor lauter Bäumen nicht.

Antworten