„Dehnbaren“ negativen vertikalen Raum über gerahmten Kapitelüberschriften verstehen

„Dehnbaren“ negativen vertikalen Raum über gerahmten Kapitelüberschriften verstehen

Diese Frage hängt in gewisser Weise mit meiner vorherigen Frage zusammen.Überfüllte Hbox bei Kapiteln mit Zeilen über/unter dem Kapiteltitel mithilfe von KOMA-Skript, da (Teile) des Problems bei verschiedenen/allen Methoden zum Hinzufügen der oberen und unteren Zeilen auftreten (nicht nur mdframedbei der, die ich am einfachsten zu steuern fand).

Das folgende Minimalbeispiel soll das Problem veranschaulichen

\documentclass[
    parskip=full,
    open=any,
]{scrreprt}
\usepackage{mdframed}
\usepackage{lipsum}

\RedeclareSectionCommand[
    beforeskip=0pt,
    afterskip=0pt,
]{chapter}

\newmdenv[
    skipabove=16pt, % why is this necessary?
    leftline=false,
    rightline=false,
    innerleftmargin=0.5mm,
    innerrightmargin=0.5mm,
    innertopmargin=4pt,
    innerbottommargin=1pt,
    linewidth=.6pt,
]{chapterframe}

\makeatletter
\renewcommand{\chapterlinesformat}[3]{%
\begin{chapterframe}%
    \raggedchapter%
    \@hangfrom{\vphantom(#2}{#3}%
\end{chapterframe}%
\nointerlineskip}

\widowpenalty10000
\clubpenalty10000
\begin{document}
\flushbottom
\chapter{Foo}
\lipsum[1-4]
\chapter{Bar}
\lipsum[1-4]

% just the right amount of text to cause paragraph spacing to stretch
Fusce mauris. Vestibulum luctus nibh at lectus. Sed
bibendum, nulla a faucibus semper, leo velit ultricies
tellus, ac venenatis arcu wisi vel nisl. Vestibulum
diam. Aliquampellentesque, augue quis sagittis posuere,
turpis lacus congue quam, in hendrerit risus eros eget
felis.
\end{document}

Ich habe die folgenden zwei Probleme:

  1. Ich muss einen Sprung definieren, damit die obere Zeile des Titels nicht über das Textfeld hinausgeht. Dies scheint darauf hinzudeuten, dass das beforeskipin \RedeclareSectionCommandnicht zu einem Nullsprung, sondern zu einem negativen Sprung führt.
  2. Wenn der Absatzabstand gedehnt wird, um Hurenkinder/Hurken zu vermeiden, ändert sich die Position des Kapiteltitels relativ zur Seite, da der negative Raum offensichtlich nicht nur vorhanden, sondern auch „dehnbar“ ist.

Meine Frage ist daher folgende: Warum ist ein Leerraum vorhanden und wie kann ich diesen entfernen oder zumindest seine Ausdehnung verhindern, sodass die Kapitelüberschrift an einer festen Position bleibt?

Nach einigen Experimenten scheint das Folgende das Problem zu lösen, aber ich würde trotzdem gerne die Ursache wissen (auch sauberere Lösungen sind willkommen!):

\makeatletter
\renewcommand{\chapterlinesformat}[3]{%
\makebox[.65\linewidth][l]{%
\begin{minipage}{\linewidth}%
\vspace{1.6pt}
\begin{chapterframe}%
    \raggedchapter%
    \@hangfrom{\vphantom(#2}{#3}%
\end{chapterframe}%
\end{minipage}%
}}

Dies \makeboxist erforderlich, um das ursprüngliche Problem der überfüllten Hbox zu vermeiden, und die Minipage scheint das Abstandsproblem zu lösen. Es gibt immer noch einen geringfügig negativen, aber anscheinend konstanten Vspace von 1,6pt. Dies kann die Summe der Linienbreite und des inneren unteren Rands sein oder auch nicht.

Antwort1

Wenn man sich die Showbox-Ausgabe ansieht, gleicht der Code dies aus, \parskipaber nur seine natürliche Länge, sodass man am Ende (nur) die Stretch-Komponente vor der Überschrift hat. Ich habe nicht genau nachverfolgt, wo, aber beide Überschriften kommen an die gleiche Stelle, wenn man lokal einen festen Parskip verwendet:

\documentclass[
    parskip=full,
    open=any,
]{scrreprt}
\usepackage{mdframed}
\usepackage{lipsum}

\RedeclareSectionCommand[
    beforeskip=0pt,
    afterskip=0pt,
]{chapter}

\newmdenv[
    skipabove=16pt, % why is this necessary?
    leftline=false,
    rightline=false,
    innerleftmargin=0.5mm,
    innerrightmargin=0.5mm,
    innertopmargin=4pt,
    innerbottommargin=1pt,
    linewidth=.6pt,
]{chapterframe}

\makeatletter

\showoutput
\showboxdepth=1
\renewcommand{\chapterlinesformat}[3]{%
\begin{chapterframe}%
    \raggedchapter%
    \@hangfrom{\vphantom(#2}{#3}%
\end{chapterframe}%
\nointerlineskip}

\widowpenalty10000
\clubpenalty10000
\begin{document}
\flushbottom
{\parskip=1\parskip\chapter{Foo}}

\lipsum[1-4]

{\parskip=1\parskip\chapter{Bar}}
\lipsum[1-4]

% just the right amount of text to cause paragraph spacing to stretch
Fusce mauris. Vestibulum luctus nibh at lectus. Sed
bibendum, nulla a faucibus semper, leo velit ultricies
tellus, ac venenatis arcu wisi vel nisl. Vestibulum
diam. Aliquampellentesque, augue quis sagittis posuere,
turpis lacus congue quam, in hendrerit risus eros eget
felis.
\end{document}

Das Original produziert

Underfull \vbox (badness 1783) has occurred while \output is active
\vbox(595.80026+0.0)x418.25555, glue set 2.61316
.\write-{}
.\write1{\@writefile{toc}{\protect \contentsline {chapter}{\protect \numberline
 \ETC.}
.\write1{\@writefile{lof}{\protect \addvspace {10\p@ }}}
.\write1{\@writefile{lot}{\protect \addvspace {10\p@ }}}
.\glue(\topskip) 11.0
.\vbox(0.0+0.0)x0.0, glue set 13.6fil []
.\glue -13.6 plus -1.36008
.\glue -13.6

Dieser Wert plus -1,360008 wird nie ausgeglichen, und da die Seite nicht voll ist, kann jede Dehnungskomponente beliebiger Stärke den Raum ausfüllen.

verwandte Informationen