PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Seitenumbruch verhindern am Ende der Definitions-Umgebung



O-Saft
18-07-2008, 17:53
Hallo,

ich habe ein Problem mit Seitenumbrüchen am Ende der Definitionsumgebung. Und zwar schließe ich meine Definitionsumgebung mit dem kleinen Beweis-Kästchen (\qed Symbol) ab. Damit der Text nicht so gequetscht wird, füge ich vor dem Symbol noch mit \\ eine neue Zeile ein. Dabei entsteht allerdings das Problem, dass das kleine Symbol dann unter Umständen alleine auf die nächste Seite rutscht, was so nicht sein soll. Dies kann komischerweise auch nicht durch \nopagebreak verhindert werden. Eine Minipage will ich auch nicht extra einrichten, da ich generell schon Seitenumbrüche in langen Definitionen haben will, aber eben nicht vor dem qed Symbol. Hier mal ein Minimalbeispiel:


\documentclass[a4paper, % Seitenformat
12pt, % Schriftgr"o"se
headsepline % Trennlinie f"ur die Kopfzeile
]{scrartcl}

%------------------------------------------------------------------------

% Pakete
\usepackage{latexsym} % Latex-Symbole
\usepackage{a4wide} % A4 Seitenformat
\usepackage[latin1]{inputenc} % Eingabekodierungen
\usepackage[ngerman]{babel} % Mehrsprachenumgebung
\usepackage{amsthm} % spezielle theorem Stile

% Theoreme

\theoremstyle{plain} % normaler Stil
\newtheorem {theorem} {Theorem} [subsection]
\theoremstyle{definition} % Definitionsstil
\newtheorem {definition} [theorem] {Definition}


\begin{document} % Start des Dokuments

Test einer Definitionsumgebung.\\
\vspace{20cm}

\begin{definition}[Testdefinition]
Dies ist eine Definition.\\
\qed
\end{definition}

\end{document} % Ende des Dokuments

Es wäre super, wenn mir jemand helfen könnte.

Stefan_K
18-07-2008, 18:31
Hallo,

das needspace-Paket (http://www.ctan.org/tex-archive/help/Catalogue/entries/needspace.html) eignet sich dafür, beispielsweise:

\usepackage{needspace}
...
\begin{definition}[Testdefinition]
...
\needspace{\baselineskip}etwas weiterer Text\\
\qed
\end{definition}

Das Paket a4wide ist übrigens veraltet und sollte nicht verwendet werden. Du kannst das Seitenlayout besser durch Parameter an scrartcl verändern, durch typearea (http://www.ctan.org/tex-archive/help/Catalogue/entries/typearea.html) oder geometry (http://www.ctan.org/tex-archive/help/Catalogue/entries/geometry.html).
Im Allgemeinen findest Du Informationen zu aktuellen und veralteten Paketen und Befehlen in l2tabu (http://www.ctan.org/tex-archive/help/Catalogue/entries/l2tabu.html).

Viele Grüße,

Stefan

O-Saft
19-07-2008, 14:40
Ok, also danke erstmal für die Hilfe, das funktioniert im Minimalbeispiel ganz gut. Aber es gibt auch einige Probleme damit. Leider kann ich keine Dokumentation zum needspace Paket finden und diese selber lösen. Konkret gibt es die folgenden Probleme:

1. Der Befehl \needspace{\baselineskip} verursacht selbst im laufenden Text einen Zeilenumbruck, der nicht gewollt ist.

2. Damit muss \needspace{\baselineskip} immer am Anfang der letzten Textpassage der Definition stehen. Außerdem muss dann manuell abgezählt werden, wieviele Zeilen dieses Textpassage umfasst, denn \needspace{\baselineskip} bringt nichts, wenn die Textpassage danach noch länger als eine Zeile ist. Das ist dann schon sehr umständlich. Außerdem müsste dann beispielsweise mit \needspace{4\baselineskip} erzweungen werden, dass im ganzen letzten Absatz einschließlich des \qed Symbols kein Seitenumbruch erfolgen darf. Das ist aber dann auch nicht sinnvoll, denn wenn der Absatz beispielsweise 10 Zeilen umfasst, dann darf da auch gerne eine neue Seite begonnen werden, nur eben nicht vor dem qed Symbol. Ich bin eher auf der Suche nach einem Befehl, der nach dem letzten Wort der Definition und vor dem Befehl \qed gesetzt wird und den Seitenumbruch verhindert. Dann könnte die ganze Prozedur durch einen Befehl der Art
\renewcommand{\qed}{\needspace{\baselineskip}\hfil l$\Box$}
erledigt werden und ich müsste nicht in jeder einzelnen Definition irgendwelche Zeilen zählen.

3. Needspace erzeugt leider auch unerwünschte "Underfull \hbox" Warnungen


Hast du oder jemand anderes vielleicht eine Idee, wie ich diese Probleme mit needspace oder einer anderen Lösung beseitigen könnte?

Stefan_K
19-07-2008, 16:13
Hallo,

die Dokumentation von nedspace ist in dessen sty-file enthalten.
Eine andere Möglichkeit wäre, keinen Zeilenumbruch vorzunehmen sondern das qed-Symbol mit raisebox zu verschieben, beispielsweise:

\hfill\llap{\raisebox{-\baselineskip}{$\Box$}}

Stefan

O-Saft
20-07-2008, 20:23
Nochmals Danke Stefan für deine Hilfe. Deine Lösung ist auf den ersten Blick schon ganz gut und funktioniert meistens.

Probleme gibt es aber noch, wenn am Ende der Definition kein normaler Text steht, sondern eine Umgebung (z.B. Aufzählung oder Formel). Dann gibt es noch Zeilenumbrüche vor dem Symbol. Gibt es dazu eine Lösung?

Generell würde ich diesen Fall sowieso gerne anders behandeln. Denn wenn am Ende der Definition eine solche Umgebung steht, wird von selbst genug Platz vor dem qed Symbol eingefügt, so dass ich keine Leerzeile vor dem qed Symbol mehr brauche. Ich kenne mich damit leider nicht aus, aber gibt es in Tex die Möglichkeit, einen Befehl variabel zu definieren? Das heißt je nachdem, was vor dem Befehl steht, verhält sich der Befehl anders. In meinem Fall:
- Wenn vor dem Befehl \qed ein "." steht, dann \qed Befehl wie von Stefan_K vorgeschlagen einfügen
- Wenn vor dem Befehl \qed ein "]" oder "}" steht (Ende einer Umgebung), dann den \qed Befehl so ändern, dass keine Leerzeile eingefügt wird und dass auch nach Umgebungen kein Seitenumbruch erzeugt werden darf.

Hat jemand Vorschläge?

Stefan_K
21-07-2008, 01:08
Das ntheorem-Paket (http://www.ctan.org/tex-archive/help/Catalogue/entries/ntheorem.html) behandelt Endmarken besser, insbesondere nach Umgebungen wie displaymath oder Listen.

Stefan

O-Saft
21-07-2008, 17:42
Danke, Stefan, was würde ich nur ohne dich machen ;)
Funktioniert bis jetzt perfekt.