Comprender el espacio vertical negativo "elástico" sobre los títulos de los capítulos enmarcados

Comprender el espacio vertical negativo "elástico" sobre los títulos de los capítulos enmarcados

Esta pregunta está algo relacionada con mi pregunta anterior.hbox demasiado lleno en capítulos con línea arriba/debajo del título del capítulo usando KOMA-script, ya que (partes de) el problema ocurre con varios/todos los métodos para agregar las líneas superior e inferior (no solo mdframedel que me pareció más fácil de controlar).

Dado el siguiente ejemplo mínimo para mostrar el 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}

Recibo los siguientes dos problemas:

  1. Necesito definir un salto para que la línea superior del título no salga del cuadro de texto. Esto parecería indicar que la beforeskipentrada \RedeclareSectionCommandno da como resultado un salto cero, sino un salto negativo.
  2. Cuando el espaciado entre párrafos se estira para evitar huérfanos/viudas, la posición del título del capítulo en relación con la página cambia, ya que aparentemente el espacio negativo no sólo está presente sino que es "estirado".

Por lo tanto mi pregunta es la siguiente: ¿Por qué hay un espacio negativo y cómo puedo eliminarlo o al menos evitar que se estire para que el título del capítulo permanezca en una posición fija?

Después de experimentar un poco, lo siguiente parece resolver el problema, pero aún así me gustaría saber la causa (¡también se aceptan soluciones más claras!):

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

Es \makeboxnecesario para evitar el problema original de hbox lleno y la minipágina parece resolver el problema de espaciado. Todavía hay un espacio virtual negativo menor, pero aparentemente constante, de 1,6 puntos. Esto puede ser o no la suma del ancho de línea y el margen inferior interior.

Respuesta1

Al observar la salida del cuadro de presentación, el código está compensando, \parskippero solo su longitud natural, por lo que termina con (solo) el componente elástico antes del encabezado. No rastreé exactamente dónde, pero ambos encabezados llegan al mismo punto si usas localmente un parskip fijo:

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

El original produce

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

ese plus -1.360008 nunca se compensa y, como la página no está llena, cualquier componente de estiramiento de cualquier cantidad puede estirarse para llenar el espacio.

información relacionada