Wie kann man sicher stellen, dass eine Überschrift mit dem folgenden Bereich zuverlässig zusammen gehalten wird?

Meist funktioniert es ja gut, aber manchmal... habe ich immer wieder die Überschrift als "Schusterjunge" am Ende der vorherigen Seite alleine stehen, auch wenn nur so wenig Platz war, dass eben nur die Überschrift noch passte.

Anfänglich habe ich es damit versucht, interessiert ihn aber meist nicht:

\subsection(...)\nopagebreak

dann, dachte mir vfill expandiert von 0-~ und füllt, je nach freiem Bereich, den Rest, hilft nur manchmal:

\vfill
\subsection(...)

und am ehesten hilft:

\pagebreak[2]
\subsection(...)

Auffällig ist jedoch, wenn auf eine Überschrift kein Text, sondern eine Aufzählung, ein Bild oder multicols anfängt - dann tritt es am häufigsten und dann auch hartnäckig auf.

Im aktuellen Dokument verwende ich viel die multicols Umgebung, und nun nervt es mal richtig.

Wenn so ein hartnäckiger Fall eintritt, hilft meist nur ein \clearpage oder expliziter \pagebreak, was ich aber eigentlich vermeiden möchte, wenn ein längeres Dokument in Arbeit ist und sich ständig verändert, muss man dann bis ans Ende später wieder nach korrigieren.

Ist TeX überhaupt bekannt, das es sich um eine "Überschrift" handelt um so etwas zu vermeiden oder wie kann ich zuverlässig erreichen, eine Überschrift soll nie alleine stehen. Und zwar nicht durch die workarrounds oben, bei jeder Überschrift. Ich denke das ist doch eine Standard Anforderung und schon gelöst worden, ohne eigenes macro für die section commands.


Nachtrag: Die 3 genannten kritischen Übergänge als example. Wenn microtype aktiv ist, tritt der genannte Effekt bei Section 2 und Section 4 auf, bei 3 habe ich es im Beispiel nicht triggern können.

\documentclass[DIV=11,10pt,a4paper,oneside]{scrartcl}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[ngerman]{babel}
\usepackage{microtype}
\usepackage{graphicx} 
\usepackage{multicol} 
\usepackage{blindtext}

\begin{document}

\section{Allgemeines}

\begin{multicols}{2}
  \blindtext[4]
\end{multicols}

\medskip

\begin{multicols}{2}
  \blindtext

  Eine Leerzeile nach \verb|\section| hat keinen Einfluss, das \verb|\label| 
  an \verb|\section| auch nicht, wie mehrfach ausgetestet, wenn ein unschöner
  Umbruch erfolgte. "`Section 2"' sollte nun alleine am Ende der Seite stehen 
  und \verb|\pagebreak[2]| oder \verb|\pagebreak[3]| wird ignoriert,  
  wirkt erst bei hartem pagebreak.
  Auch \verb|\section{Section 2}\nopagebreak| hilft nicht.
\end{multicols}

\pagebreak[2]

\section{Section 2}\nopagebreak\label{sec:Section2}

\begin{multicols}{2}
  \blindtext
\end{multicols}

\noindent\rule{\textwidth}{4cm}%Platzhalter für Grafik

\begin{multicols}{2}
  \blindtext[2]
\end{multicols}

\section{Section 3}\label{sec:Section3}

\begin{center}
  \rule{13cm}{6.5cm}%Platzhalter für
  %\includegraphics[width=.7\textwidth,keepaspectratio]{images/some-image-1}
\end{center}

\begin{multicols}{2}
  Der Übergang zur Section 3 ist auch so ein Kandidat. Den bekomme ich 
  im Beispiel aber nicht getriggert, tritt dann wie bei Section 2 zwischen 
  Überschrift und einer Grafik auf, die von der Größe maximal 1/3 der Seite 
  belegt. Ich denke es hängt vom Text/Weißbereich der Vorseite ab. 
  Wenn ich wieder einen solchen Fall habe, werde ich darauf achten, 
  ob es nur auftritt, wenn \verb|includegraphics| 
  ohne \verb|center| Umgebung verwendet wird.

  \blindtext\par\blindtext\par\blindtext  
\end{multicols}

%\pagebreak[2] %meist guter hint, hilft aber nicht immer zuverlässig

\section{Section 4}\nopagebreak\label{sec:Section4}

Folgende Punkte sind absolut uninteressant:\nopagebreak
\begin{itemize}
  \item item 1 Der Umbruch erfolgt auch mit Direktiven hier direkt
  \item item 2 vor dem Beginn der Aufzählung.
  \item item 3
  \item item 4
  \item item 5
  \item item 6
  \item item 7
\end{itemize}

\end{document}

alt text alt text

gefragt 22 Aug, 20:37

Zuio's gravatar image

Zuio
213
Akzeptiert-Rate: 0%

bearbeitet 24 Aug, 03:57

1

Willkommen auf TeXwelt! Kannst Du bitte ein Minimalbeispiel für das beschriebene Verhalten angeben? Also ein möglichst kurzes, aber vollständiges Codebeispiel damit andere Dein Problem nachvollziehen können.

(22 Aug, 22:43) esdd
4

LaTeX weiß, dass \subsection eine Überschrift ist, und der Befehl enthält auch Code um einen Seitenumbruch zu unterdrücken. Wenn du dennoch einen bekommst, dann weil der nachfolgende Code den Seitenumbruch wieder ermöglicht. Es hängt also vom dem ab, warum es passiert, und was man tun soll, um ihn dennoch zu vermeiden.

(23 Aug, 11:04) Ulrike Fischer

Prinzipiell macht LaTeX das schon perfekt, nur manchmal steht die Überschrift als Einzelzeile am Ende einer Seite, die eigentlich voll ist, nur noch Platz für die Überschrift hat. Das kann auftreten, wenn auf die Überschrift direkt ein Bild, ein einzeiliger Absatz mit folgender Aufzählung oder ein multicols Abschnitt direkt folgt. Dabei ist das Bild mit includegraphics in center gesetzt, nicht in einer Gleitumgebung.

Die Gliederungsebene spielt dabei keine Rolle, habe oben nur subsection als Beispiel gewählt.

(23 Aug, 19:40) Zuio
1

Ich versuche TeX besser zu verstehen und Dokumente so zu schreiben, dass ich bei Überarbeitungen vorne, hinten nicht nach korrigieren muss und sicher stelle, dass egal wie der Text fließt, solche Effekte nicht auftreten.

Muss ich jetzt bei jeder Überschrift entsprechende Direktiven setzen oder kann ich irgendwie sicher stellen, dass eine Überschrift mit dem folgenden Absatz, egal was da kommt, zusammen gehalten wird, wenn dieser nicht die Seite komplett füllt und dadurch vielleicht ein Problem verursacht.

(23 Aug, 19:43) Zuio

In Erinnerung habe ich, TeX ermittelt einen score Wert, der ein max von 10000 hat. Der optionale Parameter bei pagebreak ist eine Empfehlung in die Richtung, ob ein break günstig ist oder nicht. Manchmal hilft das auch, manchmal nur ein harter \pagebreak, der einem \pagebreak[4] entspricht, denke ich. Eine solche Stelle ist ein Kandidat für nachträgliche erneute Korrektur. Das will ich eigentlich nicht.

(23 Aug, 19:44) Zuio

Gib doch bitte ein vollständiges/lauffähiges Beispiel in der Frage an, dass möglichst kurz ist, aber das problematische Verhalten aufweist. Sonst wird es extrem schwierig bis nahezu unmöglich Dir zu helfen.

(23 Aug, 19:50) esdd

Geht nicht, habe das schon den ganzen Nachmittag versucht, kann das mit einem mwe nicht triggern. Das Originaldokument kann ich dir nicht schicken, wäre auch nicht minimal. Dort habe ich gestern 2 Stellen rausgeworfen, wo nach Textergänzung die vorherigen Problemstellen verschoben wurden und nun, die vorher harten pagebreaks unpassend waren. Bei den beiden Stellen half zuvor nur ein harter pagebreak! Nun ist bei der einen Stelle auf Vorseite noch ca. 8cm Platz und er bricht korrekt und sauber um, ohne harten Eingriff. Überschrift+Bild auf Folgeseite, ohne inhaltlicher Änderung an der Stelle.

(23 Aug, 20:12) Zuio

Vorher ca. 1.5cm Platz, Überschrift dort erschienen am Seitenende, nun ca. 8cm Platz und korrekter Umbruch, Überschrift und Bild auf Folgeseite. Ich kann es in einem mwe nicht triggern und beim letzten Dokument vor 8 Wochen, ca. 200 Seiten, hatte ich auch solche Stellen, wenn auf eine Überschrift Bild, Aufzählung oder multicols folgt. Kennt das Verhalten niemand aus eigenen Dokumenten?

(23 Aug, 20:20) Zuio

Hi Zuio, könnte es klappen, ein Problembeispiel zu reproduzieren, anhand einer erstellten Kopie des Dokuments, was geschickt reduziert wird (mit zwischendurch Testen) so dass die Problemstelle in einem kleinen Dokument sichtbar wird?

(23 Aug, 20:45) stefan ♦♦
1

Also wie gesagt: Code kann einen Seitenumbruch ermöglichen, selbst wenn eine Überschrift ihn erstmal ermöglicht. Ich kenne genügend Beispiele und weiß auch, was man machen muss. Aber ich werde darüber keinen langen Aufsatz schreiben. Du musst schon eine konkrete Kombination Überschrift + Folgecode zeigen. Es ist nicht nötig, dass wirklich ein Seitenumbruch da ist. Das kann ich ggfs schon erzwingen.

(23 Aug, 21:25) Ulrike Fischer

Hat mir doch keine Ruhe gelassen, habe die package includes auf möglichen Einfluss durchgesehen und dabei microtype identifiziert. Wenn aktiv, tritt der Effekt im Beispiel oben 2 von 3 mal auf, auskommentiert saubere Umbrüche. Nun kann ich mutmaßen, aber Ihr kennt euch besser aus - microtype trimmt den Blocksatz ein Stück schöner und kürzer, die area oder Umbruchberechnung erfolgte aber vorher?

(24 Aug, 03:04) Zuio

Nur eine Nebenbemerkung: Du schreibst „wenn ein längeres Dokument in Arbeit ist und sich ständig verändert, muss man dann bis ans Ende später wieder nach korrigieren“ – Gerade bei einem längeren Dokument muss man am Ende sowieso noch mal alle Seiten prüfen und korrigieren. Man gewinnt also eher nichts (oder nur wenig), wenn man das zwischendurch dauernd macht. :)

(24 Aug, 09:33) cgnieder

Klar, aber es gibt auch Zwischenversionen die ordentlich aussehen sollen. Ich möchte so schreiben, dass ich (im wesentlichen) weiß wie es am Ende raus kommt, bis auf die üblichen Feinschliffe am Ende jeder Erweiterung. Bereiche oder Texte mit Nachschlage- oder Anleitungen, die, aufgrund der Kürze textlicher Absätze, nach obigen Problem rufen. Dazu gehören: Überschrift + 1-3-Zeiler + Aufzählung oder Bild, bevor ein Textblock kommt. Wird regelmäßig zerrissen und sieht wirklich unsauber aus, wenn Vorseite nichts damit zu tun hat. Kapitel sind problemlos, am Übergang setze ich clearpage.

(24 Aug, 12:35) Zuio
Ergebnis 5 von 13 show 8 more comments

Wie bereits in den Kommentaren erwähnt: Eine Überschrift vor multicols gehört in das optionale Argument:

\begin{multicols}{2}[\section{Section 2\label{sec:Section2}}]
  \blindtext
\end{multicols}

Der \label gehört dabei in das \section-Argument (\label enthält ein \write-Befehl, und der kann Abstände ändern, es ist nicht immer relevant, aber hier schon).

Der Umbruch nach Section 4 ist kein Umbruch nach einer Überschrift, der Satz ist ja da, sondern ein Umbruch zwischen normalem Text und einer Liste. Den kann man unterdrücken, indem man das Paket enumitem lädt, und dann beginpenalty setzt:

Folgende Punkte sind absolut uninteressant:
\begin{itemize}[beginpenalty=10000]
Permanenter link

beantwortet 24 Aug, 09:12

Ulrike%20Fischer's gravatar image

Ulrike Fischer
3.4k23
Akzeptiert-Rate: 51%

Das klärt einiges. Bei multicols dachte ich, das optionale Argument ist für einen Bereich über mehrere Spalten über dem multicols Abschnitt und nicht Pflicht um eine Überschrift damit zusammen zu halten. Habe das für Überschriften bisher nicht benutzt, weil bei Erweiterungen vor multicols man \section wieder herauslösen muss und das nicht übersehen darf.

Das mit \label im Argument wusste ich nicht, hatte aber bisher auch keinen Einfluss, wenn ich das auf Verdacht auskommentierte an den Stellen.

(24 Aug, 13:48) Zuio

Zum besseren Verständnis: Warum wirkt ein \nopagebreak nicht an solchen Stellen, Überschriften, erster kurzer Absatz nach einer Überschrift, Aufzählungen? Ist das generell falsch, wie ich das zu lösen versucht habe?

Wie erklärt sich der Einfluss von microtype? Auskommentiert erfolgt der Umbruch im Beispiel erwartungsgemäß.

(24 Aug, 13:50) Zuio

Was würdest bei abc\nopagebreak\newpage abc erwarten? Seitenumbruch oder kein Seitenumbruch?

(24 Aug, 13:59) Ulrike Fischer

Seitenumbruch, wenn du es so schreibst. (abc\nopagebreak\newpage abc kommt von einer Umgebung oder Page Algorithmus, richig?) Aber wenn ein Algorithmus zur Entscheidung für einen Umbruch kommt, davor bzw. im Kontext \nopagebreak steht, würde ich erwarten, er sucht eine andere Alternative, i.R. davor, nimmt mehr mit. Also sind meine Versuche damit an den gezeigten Stellen unsinnig?

(24 Aug, 15:02) Zuio

Ja, so wie \newpage code enthält "hier ein Seitenumbruch", so enthalten manche Umgebungen (u.a. multicols) Code "hier ist eine gute Stelle für einen Seitenumbruch". Das kannst mit \nopagebreak nicht verhindern. Und hinter section macht \nopagebreak sowieso keinen Sinn. Dort wird sowieso schon den Seitenumbruch unterdrückt, und mehr als unterdrücken kann man nicht.

(24 Aug, 16:45) Ulrike Fischer

Ok, fürs Verständnis: Das führt zu der von dir gezeigten informellen Befehlskette. \section\code-von-section-zur-unterdrückung-pagebreak\mein-nopagebreak\pagebreak[multicols:gute-stelle-hint]und wird somit immer ausgeführt, je nachdem was am Ende steht, gewinnt? Deshalb die eigene Behandlung in multicols und das Zusatzpaket für die Aufzählungen. Das bedeutet für mich in Zukunft, bei neu eingesetzten Paketen, die Doku daraufhin zu untersuchen. Im Falle beginpenalty wäre ich nicht so einfach darauf gekommen.

(24 Aug, 17:33) Zuio

Bisher habe ich mir vorgestellt, macros/code, Umgebungen zeichnen in Bereiche/"box'en" auf einem area, was wiederum in anderen enthalten sein kann bis zu root, der Seite, expandieren entsprechend dem benötigten oder limitierten Platz. Um die sichtbare Qualität zu erreichen, ist eine bedingte Rekursion mit Bewertung des Zwischenergebnis und Neuberechnung der Aufteilung notwendig, bevor diese interne Repräsentation einer Ausgaberoutine zugeführt wird. Auf dieser Zwischenrepräsentation würden nopagebreaks, pagebreaks noch bekannt sein, könnten sich aufheben, wenn ein Alg. darüber entscheidet.:-)

(24 Aug, 17:56) Zuio

Nun klingt es für mich so, das Pakete mehr über ihren Kontext wissen müssen als gut ist, eine hohe Anforderung an Paketentwickler, vieles selber handeln müssen, weil ein command Strom erzeugt wird, der an die darunter liegende TeX Schicht übergeben und dort die Möglichkeiten, mangels Einfluss auf die vorherige Erzeugung, eingeschränkt sind. Eine echte Zwischenrepräsentation existiert nicht? - Ich weiß, geht ein bisschen weit, aber hier sind auch Paketentwickler unterwegs und ich versuche das besser zu verstehen. Sry. :-)

(24 Aug, 18:10) Zuio

Besorg dir das TeXbook und lies das Kapitel wie TeX aus Zeilen Seiten bastelt. Für so ein Diskussion ist das hier nicht der richtige Platz.

(24 Aug, 18:34) Ulrike Fischer
Ergebnis 5 von 9 show 4 more comments
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×1
×1

gestellte Frage: 22 Aug, 20:37

Frage wurde gesehen: 462 Mal

zuletzt geändert: 24 Aug, 18:34

verwandte Fragen