multicol: balanceamento de coluna somente após um número mínimo de linhas?

multicol: balanceamento de coluna somente após um número mínimo de linhas?

Estou usando multicol.stycolunas balanceadas em uma pequena parte da página. Geralmente eu quero que essas colunas sejam balanceadas, mas não se a parte de duas colunas resultante tiver menos de 3 linhas de altura. Como posso fazer isso? (Por automação?)

MWE:

\documentclass{scrartcl}
\usepackage{multicol}
\parindent 0pt

\begin{document}

Some onecolumn text goes here on top of the page \ldots 

\begin{multicols}{2}
    This text is balanced into two columns, although it is very
    short. How can I prevent balancing below 3 lines minimum
    height?
\end{multicols}%

Some more onecolumn text goes here below the twocol part \ldots 

\end{document} 

Portanto, neste exemplo, quero que todo o texto de duas colunas apareça apenas na coluna da esquerda.

insira a descrição da imagem aqui

Responder1

No momento, a automação total só é possível com uma alteração de código. Como único, é fácil: antes do ambiente, defina o contador unbalancepara 2. Isso aumentará o tamanho vertical inicial em 2 \baselineskips.

O contador será zerado após cada ambiente.

Uma solução mais geral que faz isso automaticamente poderia ser assim:

\documentclass{scrartcl}
\usepackage[balancingshow]{multicol}
\parindent 0pt

%-------------------------------------------------------------------------------
\usepackage{regexpatch}

\newcounter{multicolminlines}
\setcounter{multicolminlines}{1}

\makeatletter
\xpatchcmd\balance@columns
   {\ifnum\dimen@<\topskip
     \mult@info\@ne
       {Start value
          \the\dimen@  \space ->
          \the\topskip \space (corrected)}%
     \dimen@\topskip
   \fi}
   {\skip@\c@multicolminlines\baselineskip
   \advance\skip@-\baselineskip
   \advance\skip@\topskip
   \ifnum\dimen@<\skip@
     \mult@info\@ne
       {Start value
          \the\dimen@  \space ->
          \the\skip@ \space (corrected)}%
     \dimen@\skip@
   \fi
   }
   {\typeout{Success!}}{\patchFAILED}
\makeatother
%-------------------------------------------------------------------------------

\begin{document}

Some onecolumn text goes here on top of the page \ldots 

\setcounter{multicolminlines}{3}
\begin{multicols}{2}
    This text is balanced into two columns, although it is very
    short. How can I prevent balancing below 3 lines minimum
    height?
\end{multicols}

Some more onecolumn text goes here below the twocol part \ldots 


\setcounter{multicolminlines}{2}
\begin{multicols}{2}
    This text is balanced into two columns, although it is very
    short. How can I prevent balancing below 3 lines minimum
    height?
\end{multicols}


\begin{multicols}{2}
    This text is balanced into two columns, although it is very
    short. 
\end{multicols}

\setcounter{multicolminlines}{1}
\begin{multicols}{2}
    This text is balanced into two columns, although it is very
    short. 
\end{multicols}

\end{document} 

Se aplicarmos este patch, obteremos a seguinte saída (observe que altero o número mínimo de linhas para os vários ambientes):

insira a descrição da imagem aqui

informação relacionada