10

Within the multicol environment I want to be able to fix a figure to be displayed at either the top or bottom of a column (as in a scientific journal).

The figure environment cannot be used in multicol and I've tried using wrapfig and even creating a minipage to do this, but the figure always seems to be placed where it is inserted in the text and therefore must be moved every time an edit is made.

Is there a way to force a figure to be positioned at the top or bottom of a column in multicol?

yo'
  • 51,322

2 Answers2

2

In my opinion, the design of the package multicol does not allow this, and cannot allow this.

I can think of only one other option, and that is using the standard [twocolumn] class option or \twocolumn command. The true problem is then the column balancing on the last page. There are several possible solutions to this problem.

  1. Manually balance the columns. This can be done by issuing the following commands in the first column of the last page (the value 0.2 has to be adjusted manually):

    \raggedbottom\enlargethispage{-0.2\textheight}
    
  2. Use the package cuted. The following commands ought to be added at the very end of the document. The only issue is that if the last page is almost full, an extra completely empty page might be created. The commands are:

    \setlength{\stripsep}{-\baselineskip}\begin{strip}\end{strip}\leavevmode
    
  3. Use the package balance. However, this package is not reliable and corrupts vertical spacing. The usage is simple: issue the command \balance in the first column of the last page.

Or of course, you can wait for the LaTeX3 team to finish the new output routine xor, but this can take some time.

yo'
  • 51,322
0

My current solution is something along these lines:

\begin{document}
\begin{multicols*}{4}
    % ===== First TWO columns of content =====

    \lipsum[1-5]
    \columnbreak

    \lipsum[1-5]
    \columnbreak

    % ===== End of my first two columasn =====

    % Fill the third column, which I want blank:

    \vfill\null
    \columnbreak

    % include graphics in minipage, set the anchor to top, then use \raggedleft
    % to produce an image at the bottom-right of my last column / the page:

    \vspace*{\fill}
    \begin{minipage}[t]{\columnwidth}
        \raggedleft
        \includegraphics[width=40px]{{myImg.png}}
    \end{minipage}

\end{multicols*}

\end{document}

As I write in the code's comments, I use a combination of what is mentioned on this and similar posts, where I use \vfill\null and \columnbreak to produce an empty column. Then, in the final column, in my situation, I am interested in an image at the bottom of the column, seated on the right side (it looks as though it sits on the bottom right corner of the page). Thus I use the combination of \vspace*{\fill} to fill the column's vertical space and a minipage anchored with t to place the image without being cut off the bottom of the page. Within the minipage I use \raggedleft to get the horizontal alignment I desire.

Please note that, in the following image, the layout of my page (e.g. is horizontal) is due to this being in the mid of an active project of mine.

image of described scenario