multicol: 最小行数の後にのみ列のバランスをとる?

multicol: 最小行数の後にのみ列のバランスをとる?

ページの小さな部分でバランスの取れた列を使用していますmulticol.sty。通常、これらの列はバランスが取れたものにしたいのですが、結果の 2 列部分の高さが 3 行未満の場合はバランスが取れません。どうすればこれを実現できますか? (自動化によって?)

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} 

したがって、この例では、2 列のテキストすべてを左の列にのみ表示します。

ここに画像の説明を入力してください

答え1

完全な自動化は、現時点ではコードの変更によってのみ可能です。1 回限りであれば簡単です。環境の前にカウンターをunbalance2 に設定します。これにより、開始垂直サイズが 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} 

このパッチを適用すると、次の出力が得られます (さまざまな環境に応じて最小行数を変更していることに注意してください)。

ここに画像の説明を入力してください

関連情報