mdframed вызывает неправильное выравнивание в нижней части страниц

mdframed вызывает неправильное выравнивание в нижней части страниц

Если вы будете так любезны, скомпилируйте этот документ LaTeX:

\documentclass[a4paper,11pt]{book}

\usepackage[paper=a4paper,twoside=true,lmargin=4cm,
rmargin=4cm,bindingoffset=0cm]{geometry}

\usepackage{mdframed,lipsum,kantlipsum}
\mdfsetup{font=\small}

\begin{document}
\kant[1-8]


\begin{mdframed}
\kant[1-5]
\end{mdframed}

\end{document}

Вы обнаружите, что нижние края страниц 2 и 3 смещены следующим образом:

неровные страницы

Вопросы:

  1. Не должно ли пространство между абзацем и рамкой на странице 3 расширяться так, чтобы нижние края выровнялись? Почему этого не происходит?

  2. Как бы вы добавили гибкий (ноль, плюс что-то гибкое, если нужно, как для интервала между абзацами) пробел над блоком mdframed? Это бы уменьшило нагрузку на пробел между абзацами, если бы я решил вопрос 1 выше.

решение1

По непонятным мне причинам mdframedвыводит первое (разделенное) поле таким образом, что нижняя часть страницы будет неровной, независимо от того, настроено ли \raggedbottomили \flushbottom(по умолчанию с ).book

Более нормальное поведение можно получить с помощью следующих патчей:

\usepackage{mdframed}

\makeatletter

\patchcmd\mdf@put@frame@i{\hrule \@height\z@ \@width\hsize\vfill}{}{}{}
\patchcmd\mdf@put@frame@i{\hrule \@height\z@ \@width\hsize\vfill}{}{}{}
\patchcmd\mdf@put@frame@i{\hrule \@height\z@ \@width\hsize\vfill}{}{}{}

\makeatother

Поскольку я на самом деле не знаю, чего это должно достичь, это, вероятно, что-то сломает, но, по крайней мере, теперь нижняя часть страницы выровнена ;-)

Пространство над mdframedкоробкой сконфигурировано с помощью skipabove, поэтому вы получаете гибкий клей

\mdfsetup{font=\small,skipabove=\parskip}

пример

Связанный контент