# Odd vertical gap with multicol, scrreprt and parskip=half

I'm having a weird vertical gap in one of my documents, which only is there when I use multicol together with \documentclass[parskip=half]{scrreprt}.

Minimal example

\documentclass[parskip=half]{scrreprt}
\usepackage{multicol}
\begin{document}

\begin{multicols}{2}
\subsubsection{title}
this \\
is \\
a long \\
text
\vfill
\columnbreak
\subsubsection{title}
foo
\end{multicols}

\end{document}


Output

I'd expect the "foo" to be at the top line of the left column, not on the bottom. What's going wrong there?

This is fairly standard multicols behaviour when the text in the first column is short:

\documentclass{article}
\usepackage{multicol}
\begin{document}

\begin{multicols}{2}
\subsubsection{title}
Broken text that spreads over two lines to demonstrate behaviour.
\columnbreak
\subsubsection{title}
foo
\end{multicols}

\begin{multicols}{2}
\subsubsection{title}
Broken text that spreads over two lines to demonstrate behaviour.
Now extended to another line.
\columnbreak
\subsubsection{title}
foo
\end{multicols}

\end{document}


The \subsection has stretchable glue after it, and multicols uses it in the first example to try to balance the bottom of the columns. When the difference is greater, there is not enough glue to achieve this. (In your example you are seeing a larger vertical space as there is more glue available when the parskip=half option is set; suprisingly much as @lockstep points out.)

To over come this there is actually a simple solution using the \raggedcolumns command of multicol:

\documentclass{article}
\usepackage{multicol}
\begin{document}

\begin{multicols}{2}
\raggedcolumns
\subsubsection{title}
Broken text that spreads over two lines to demonstrate behaviour.
\columnbreak
\subsubsection{title}
foo
\end{multicols}

Text below
\end{document}


I have added text below the multicols to demonstrate that there is no flushing of the page in this case, in contrast to the multicols* environment.

• I've tried using multicols*, but then the \vfill did fill out the rest of the page instead of the minimum amount needed. This is visible by adding a \section{another title} after the \end{multicols*} which then lands on the next page. Apr 25, 2013 at 12:19
• I have now added a simpler suggestion to avoid that. Apr 25, 2013 at 12:35

While I can't tell what's going on, I can offer a workaround based on the fact that things work as expected with parskip=full: Reduce the stretchability included in the definition of parskip=half (plus 0.5\baselineskip) to that of parskip=full (plus 0.1\baselineskip).

\documentclass[parskip=half]{scrreprt}
\makeatletter
\setparsizes{\z@}{.5\baselineskip \@plus .1\baselineskip}{%
1em \@plus 1fil}%
\makeatother
\usepackage{multicol}
\begin{document}

\begin{multicols}{2}
\subsubsection{title}
this \\
is \\
a long \\
text
\vfill
\columnbreak
\subsubsection{title}
foo
\end{multicols}

\end{document}


• parskip=full just makes the left column longer so the effect disappears. Apr 25, 2013 at 12:00
• The effect is still there with a parskip=full plus enlarged stretchability, so something else seems to be going on. Add the following to the OP's example: \makeatletter\setparsizes{\z@}{\baselineskip \@plus .5\baselineskip}{1em \@plus 1fil} \makeatother Apr 25, 2013 at 12:04
• Agreed. As I said in my answer this is associated to the last column balancing of multicols. Apr 25, 2013 at 12:11
• +1 for your answer because it offers an explanation, not only a workaround. Still, it's strange that KOMA-Script's stretchability for parskip=half is bigger than for either full or off. If the OP doesn't use my workaround, I'll delete my answer. Apr 25, 2013 at 12:16
• I don't think you should delete your answer. This observation about these parskip settings is interesting. Apr 25, 2013 at 12:21