# Balancing multicols with non-stretchable parskip

I want to use multicols with \parskip fixed to \baselineskip (i.e. without stretchable glue) in order to get a two column document with grid typesetting.

The problem is that when I want to insert content with a height that is not a multiple of \baselineskip (like images or environment with different fontsizes) the balancing at \end{\multicols} fails.

Here's an example:

\documentclass{book}
\usepackage[utf8]{inputenc}
\usepackage{multicol}
\usepackage{parskip}
\usepackage{lipsum}

\begin{document}

\parskip 1\baselineskip

\begin{multicols}{2}

\lipsum[1-2]

\vspace{0pt plus 1\baselineskip}
{\footnotesize \lipsum[3]}
\vspace{0pt plus 1\baselineskip}

\lipsum[4]

\end{multicols}

\end{document}


Even though I manually inserted glue around {\footnotesize \lipsum[3]}, the balancing doesn't work.

One can use \parbox to force odd sized blocks to fit into a given number of \baselineskips. However, you first have to know how many \baselineskips to use. In addition, LaTeX uses a different rule when the depth and height of 2 consecutive lines are more than \baselineskip. When the last line has no descenders, you need to add about about .3\baselineskip (depending on \lineskip}.

\documentclass{book}
\usepackage[utf8]{inputenc}
\usepackage{multicol}
\usepackage{parskip}
\usepackage{lipsum}

\begin{document}

\parskip=1\baselineskip
\lineskip=1pt

\begin{multicols}{2}

\lipsum[1-2]

\parbox[c][\dimexpr 13.3\baselineskip][c]{\columnwidth}{\footnotesize \lipsum[3]}

\lipsum[4]
\end{multicols}

\end{document}


You can force multicol to try a bit harder by adding

\setcounter{columnbadness}{2000}


before the environment.