Compreendendo o espaço vertical negativo "elástico" acima dos títulos dos capítulos emoldurados

Compreendendo o espaço vertical negativo "elástico" acima dos títulos dos capítulos emoldurados

Esta pergunta está um pouco relacionada à minha pergunta anteriorhbox muito cheio em capítulos com linha acima/abaixo do título do capítulo usando script KOMA, já que (partes de) o problema ocorre com vários/todos os métodos de adição das linhas superior e inferior (não apenas mdframedo que achei mais fácil de controlar).

Dado o seguinte exemplo mínimo para mostrar o problema

\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}

Eu recebo os dois problemas a seguir:

  1. Preciso definir um skip para que a linha superior do título não saia da caixa de texto. Isso parece indicar que beforeskipin \RedeclareSectionCommandnão resulta em um salto zero, mas em um salto negativo.
  2. Quando o espaçamento entre parágrafos é ampliado para evitar órfãos/viúvas, a posição do título do capítulo em relação à página muda, pois aparentemente o espaço negativo não está apenas presente, mas também "elástico".

Portanto, a minha pergunta é a seguinte: Porque é que existe um espaço negativo e como posso removê-lo ou, pelo menos, evitar que se estique para que o título do capítulo permaneça numa posição fixa?

Depois de algumas experiências, o seguinte parece resolver o problema, mas ainda gostaria de saber a causa (soluções mais simples também são bem-vindas!):

\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}%
}}

Isso \makeboxé necessário para evitar o problema original do hbox cheio demais, e a minipágina parece resolver o problema de espaçamento. Ainda há um vspace negativo menor, mas aparentemente constante, de 1,6pt. Pode ou não ser a soma da largura da linha e da margem inferior interna.

Responder1

olhando para a saída do showbox, o código está compensando, \parskipmas apenas seu comprimento natural, então você acaba com (apenas) o componente stretch antes do título. Não rastreei exatamente onde, mas ambos os títulos chegam ao mesmo ponto se você usar localmente um parskip fixo:

\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}

O original produz

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

esse acréscimo de -1,360008 nunca é compensado e, como a página está cheia, qualquer componente de estiramento de qualquer valor pode esticar para preencher o espaço.

informação relacionada