PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Seite ausnahmsweise nach Überschrift umbrechen und trotzdem flushbottom erreichen



rstuby
21-06-2012, 14:26
Hallo!

Da ich ja unsere Agenden etwas überarbeite, kann ich ja mal ein "finetuning"-Problem angehen. Ich habe dort häufig Überschriften, denen kein Text folgt. Teilweise ganze Serien (Predigt - Lied nach der Predigt - Abkündigungen - Lied nach den Abkündigunge - Kollekte). Natürlich ist das ein gewisser Missbrauch der Überschriftenfunktion, aber ich habe ja auch andere Elemente der gleichen Ebene, die durchaus Text haben und evtl. sogar noch feiner unterteilt sind.
Mit \pagebreak[3] kann ich erfolgreich den Seitenumbruch zwischen zwei solchen textlosen Überschriften erlauben. Allerdings ist die letzte Überschrift auf der Seite dann nicht ganz unten ausgerichtet. Da ich noch andere Elemente (Lieder) habe, die "gröber" aussehen als normaler Text und trotzdem schön unten ausgerichtet sind, fällt das dann doch auf. Im MB sieht es dagegen nicht schlimm aus, aber man sieht es schon, besonders wenn man "Buchansicht" einstellt:

\documentclass[paper=A5,openany,DIV=calc]{scrbook}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{blindtext}
\usepackage{hyperref}
\begin{document}
\chapter{Vorbereitung}
\blindtext
\chapter{Anfang}
\blindtext
\section{Überschrift eines Abschnittes mit Text}
etwas Text
\section{Überschrift eines Abschnittes mit fehlendem Text}
\pagebreak[3]
\section{Überschrift eines Abschnittes mit fehlendem Text}
\pagebreak[3]
\section{Überschrift eines Abschnittes mit fehlendem Text}
\pagebreak[3]
\section{Überschrift eines Abschnittes mit fehlendem Text}
\pagebreak[3]
\section{Überschrift eines Abschnittes mit mehr Text}
\Blindtext
\end{document}
Kann man da was machen und woher kommt dieses Phänomen überhaupt?

rstuby
22-06-2012, 07:24
Ich habs:
\pagebreak[3] ersetzen durch die Konstruktion:

\vspace*{-\baselineskip}\pagebreak[3]\vspace{\baselineskip}

Dass der Abstand nach einer section-Überschrift \baselineskip beträgt, habe ich allerdings nach Augenmaß geraten.

klops
22-06-2012, 07:46
Warum definierst Du Dir für Pesudo-Überschriften nicht einfach Pseudo-Überschriften-Anweisungen, die keinen Abstand nach der Überschrift einfügen und einen Seitenumbruch erlauben (oder so gar präferieren)? Wenn ich das richtig verstehe, brauchst Du das doch ohnehin nur auf section-Ebene. Dann sollte es rasch definiert sein. Wobei ich für Hinweise wie "Predigt" ohnehin keine nummerierten Überschriften verwenden würde, sondern eher etwas wie \minisec …

rstuby
22-06-2012, 08:20
Section- und Subsection-Ebene. Viel Arbeit wäre es nicht. Aber:
Zur Zeit steht secnumdepth ohnehin auf -2. Und die Elemente hätte ich eigentlich lieber gleichberechtigt, so dass sie auch in den pdf-Bookmarks erscheinen und so dass man jederzeit einen kleinen erklärenden Text oder z.B. den Wortlaut des Vaterunsers (subsection) hinzufügen kann.

klops
22-06-2012, 11:18
Die Argumentation spricht doch sehr für die Definition eines \sectionbreak{…} und \subsectionbreak{…}. Dann musst Du, wenn Du Text einfügen willst, nur das "break" entfernen. Jetzt musst Du ja auch etwas entfernen, nämlich das Gesumsel mit \pagebreak …

rstuby
22-06-2012, 11:50
Ich möchte aber wie gesagt gern die volle Funktionalität der Überschrift beibehalten. pdf-bookmark, Kopfzeile, potenziell auch Nummerierung, obwohl ich die zur Zeit im ganzen Dokument nicht nutze. Also einfach die richtige Schrift und Abstände definieren wäre für mich eine minderwertige Alternative. Wenn ich hingegen vom section-Befehl ausginge, würde ich im Prinzip auch nur das Gleiche machen, worauf ich schon gekommen bin, bloß global.

klops
22-06-2012, 12:33
Nö. Entscheidender Unterschied bei folgender Lösung ist, dass Du nicht mit negativen Abständen arbeiten musst, von denen Du nicht weißt, wie groß sie sind:


\documentclass[paper=A5,openany,DIV=calc]{scrbook}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{blindtext}
\usepackage{hyperref}

\makeatletter
\newcommand*{\sectionbreak}{%
\global\let\@afterheading\@breakafterheading
\section
}
\newcommand*{\subsectionbreak}{%
\global\let\@afterheading\@breakafterheading
\subsubsection
}
\newcommand*{\@savedafterheading}{}
\let\@savedafterheading\@afterheading
\newcommand*{\@breakafterheading}{%
\global\let\@afterheading\@savedafterheading
\vskip-\@tempskipa % nachträglich korrigiert
\if@afterindent\else\noindent\fi% siehe HINWEIS
}
\makeatother

\begin{document}
\chapter{Vorbereitung}
\blindtext
\chapter{Anfang}
\blindtext
\section{Überschrift eines Abschnittes mit Text}
etwas Text
\sectionbreak{Überschrift eines Abschnittes mit fehlendem Text}
\sectionbreak{Überschrift eines Abschnittes mit fehlendem Text}
\sectionbreak{Überschrift eines Abschnittes mit fehlendem Text}
\sectionbreak{Überschrift eines Abschnittes mit fehlendem Text}
\section{Überschrift eines Abschnittes mit mehr Text}
\Blindtext
\end{document}

Hinweis: Prinzipiell kann die markierte Zeile auch noch entfallen. Wenn kein Text folgt, nutzt die ohnehin nichts.

rstuby
22-06-2012, 15:45
Das hätte ich nicht gewusst, wie man das macht.
Es bringt aber in dieser Form auch nicht das, was ich möchte. Der "Abstand nach" wird auch am Seitenende eingefügt, was ich ja gerade vermeiden wollte. Schlimmer noch, jetzt wird auch noch der "Abstand vor" zwischen zwei Überschriften nicht ignoriert, wie es sonst automatisch der Fall ist.

u_fischer
22-06-2012, 16:21
\documentclass[paper=A5,openany,DIV=calc]{scrbook}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{blindtext}
\usepackage{hyperref}
\makeatletter
\let\save@afterheading\@afterheading
\newcommand\restoreafterheading{\let\@afterheading \save@afterheading}
\newcommand\disableafterheading{\let\@afterheading \relax}

\newcommand\breaksection{\@startsection{section}{1 }{\z@}%
{-3.5ex \@plus -1ex \@minus -.2ex}%
{1sp}% <---Positiv, aber klein
{\ifnum \scr@compatibility>\@nameuse{scr@v@2.96}\relax
\setlength{\parfillskip}{\z@ plus 1fil}\fi
\raggedsection\normalfont\sectfont\nobreak\size@se ction}%
}
\makeatother

\begin{document}

\chapter{Anfang}
\blindtext
\vspace{3cm}
\section{Überschrift eines Abschnittes mit Text}
etwas Text
\disableafterheading
\breaksection{Überschrift eines Abschnittes mit fehlendem Text}

\breaksection{Überschrift eines Abschnittes mit fehlendem Text}

\breaksection{Überschrift eines Abschnittes mit fehlendem Text}

\breaksection{Überschrift eines Abschnittes mit fehlendem Text}

\restoreafterheading
\section{Überschrift eines Abschnittes mit mehr Text}
\Blindtext
\end{document}

rstuby
22-06-2012, 17:28
Du bist mal wieder super!

klops
22-06-2012, 20:02
Der "Abstand nach" wird auch am Seitenende eingefügt, was ich ja gerade vermeiden wollte.
Sorry, da hatte ich beim nachträglichen Editieren eine Zeile zu viel gelöscht, also ich die überflüssige \everypar-Zeile noch entfernt habe. So geht es:


\newcommand*{\@breakafterheading}{%
\global\let\@afterheading\@savedafterheading
\vskip-\@tempskipa
\if@afterindent\else\noindent\fi% siehe HINWEIS
}

Ich werde das oben noch korrigieren, damit die dortige Lösung vollständig ist.