multicol: балансировка столбцов только после минимального количества строк?

multicol: балансировка столбцов только после минимального количества строк?

Я использую multicol.styдля сбалансированных колонок на небольшой части страницы. Обычно я хочу, чтобы эти колонки были сбалансированы, но не если результирующая часть из двух колонок меньше 3 строк в высоту. Как это сделать? (Автоматически?)

МВЭ:

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

Поэтому в этом примере я хочу, чтобы весь текст twocol отображался только в левом столбце.

введите описание изображения здесь

решение1

Полная автоматизация сейчас возможна только с изменением кода. Как одноразовый вариант, это просто: Перед средой установите счетчик unbalanceна 2. Это увеличит начальный вертикальный размер на 2 \baselineskipс.

Счетчик будет сбрасываться на ноль после каждой среды.

Более общее решение, которое делает это автоматически, может выглядеть так:

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

Если мы применим этот патч, то получим следующий вывод (обратите внимание, что я изменил минимальное количество строк для различных сред):

введите описание изображения здесь

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