![multicol: балансировка столбцов только после минимального количества строк?](https://rvso.com/image/310315/multicol%3A%20%D0%B1%D0%B0%D0%BB%D0%B0%D0%BD%D1%81%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0%20%D1%81%D1%82%D0%BE%D0%BB%D0%B1%D1%86%D0%BE%D0%B2%20%D1%82%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%20%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE%20%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%3F.png)
Я использую 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}
Если мы применим этот патч, то получим следующий вывод (обратите внимание, что я изменил минимальное количество строк для различных сред):