I'm using a two column layout and I'm trying to get a figure to appear on the bottom of the page it's currently on. Floats don't work natively in a multicol environment.

Right now I'm getting around this issue by placing the following on the page before the one I want the image to appear on:


It works, but the code sure isn't pretty... What can I do to fix this?

  • 1
    You don't need \captionof here, a normal \caption will do. – Torbjørn T. Nov 22 '11 at 0:18

Quoting the multicol documentation, section 2.4:

Stared floats, e.g., figure*, denote page wide floats that are handled in a similar fashion as normal floats outside the multicols environment. However, they will never show up on the page where they are encountered. In other words, one can influence their placement by specifying a combination of t, b, and/or p in their optional argument, but h doesn’t work because the first possible place is the top of the next page.

In other words, your code may not be pretty, but it is as good as it gets in LaTeX(2e). (Float placement in multi-column environments is one of the reasons to eagerly await LaTeX3.)

|improve this answer|||||
  • Darn... Well good to know I guess. Thanks for the answer. – Zak Nov 21 '11 at 23:30
  • dont forget to change things like [width=1.0\columnwidth]! – GreyCloud May 10 '12 at 15:49

The technical reason that starred float environments never appear in LaTeX's two-column mode on the current page is that LaTeX may have already fully typeset the first column and some material at the break has been dropped. The algorithm could do a little better in case LaTeX is still assembling material for the first column, but that isn't done and would only succeed in about 1/3 of the cases.

In multicols the situation is similar: because the algorithm is gathering material for at least a page worth of text, it doesn't know at the time it sees the float, whether or not the call-out position will really end up on the current page. It therefore simply pushes the float into the queue for consideration when the next page is set up. Anything else would horribly complicate the algorithm as then multicols would need to track the callout positions, check if the page generation with the float(s) placed succeeds and if not defer the float(s) that failed and redo the processing. Conceptially possible, but I decided to follow the standard LaTeX approach for simplicitly.

|improve this answer|||||

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.