0

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.

balancing problem

1

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

You can force multicol to try a bit harder by adding

\setcounter{columnbadness}{2000}

before the environment.

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.