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 mdframed
el 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:
- 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
beforeskip
entrada\RedeclareSectionCommand
no da como resultado un salto cero, sino un salto negativo. - 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 \makebox
necesario 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, \parskip
pero 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.