Balancing columns at the end of a document

The twocolumn option of the standard classes causes LaTeX to set the text of a document in two columns. However, the last page of the document typically ends up with columns of different lengths — such columns are said to be “unbalanced”. Many (most?) people don’t like unbalanced columns.

The simplest solution to the problem is to use the multicol package in place of the twocolumn option, as multicol balances the columns on the final page by default. However, the use of multicol does come at a cost: its special output routine disallows the use of in-column floats, though it does still permit full-width (e.g., figure* environment) floats.

As a result, there is a constant push for a means of balancing columns at the end of a twocolumn document. Of course, the job can be done manually: \pagebreak inserted at the appropriate place on the last page can often produce the right effect, but this seldom appeals, and if the last page is made up of automatically-generated text (for example, bibliography or index) inserting the command will be difficult.

The flushend package offers a solution to this problem. It’s a somewhat dangerous piece of macro code, which patches one of the most intricate parts of the LaTeX kernel without deploying any of the safeguards discussed in patching commands. The package only changes the behaviour at end document (its \flushend command is enabled by default), and one other command permits adjustment of the final balance; other packages in the bundle provide means for insertion of full width material in two-column documents.

The balance package also patches the output routine (somewhat more carefully than flushend).

The user should be aware that any of these packages are liable to become confused in the presence of floats: if problems arise, manual adjustment of the floats in the document is likely to be necessary. It is this difficulty (what’s required in any instance can’t really be expressed in current LaTeX) that led the author of multicol to suppress single-column-wide floats.

balance.sty
Distributed as part of preprint
flushend.sty
Distributed as part of sttools
multicol.sty
Distributed as part of 2etools