75

I have a two column document (using multicol) and want to insert figures so that they do NOT span columns. I have searched around and the only thing I can find says that only figure* is supported which spans the whole page (both columns). Is there a way to get single column figures in a document using multicols?

4
  • 1
    @Sorush: Be aware that LaTeX questions with the programming nature are still on topic on SO. @bryanp: That said, this one doesn't really have the programming nature. You want figure without the *. Feb 27, 2011 at 22:00
  • 6
    I second this question. I would like to have a figure/table float to the top of the column, like it would using twocolumn instead of multicol (which means that Herbert's answer does not apply).
    – yo'
    May 28, 2012 at 13:50
  • I should have specified in the bounty that obviously [h]/[H] for "wide" float is a sort of a non-sense and is not needed.
    – yo'
    May 28, 2012 at 16:35
  • 12 years, since this question and the situation still seems to be the same. I assist @yo' If you wan't LaTeX to position your images, your images must float, which none of the answers provide a solution for. On the other hand: when using the multicols package, your columns will balanced and there will be no new page inserted, when changing from one- to multicolumn.
    – Jan
    May 8, 2023 at 12:40

3 Answers 3

82
\documentclass[a5paper]{article}
\usepackage{multicol,caption}
\usepackage[demo]{graphicx}
\usepackage{lipsum}
\newenvironment{Figure}
  {\par\medskip\noindent\minipage{\linewidth}}
  {\endminipage\par\medskip}
\begin{document}

\begin{multicols}{2}
\lipsum[1]
\begin{Figure}
 \centering
 \includegraphics[width=\linewidth]{foo}
 \captionof{figure}{my caption of the figure}
\end{Figure}

\lipsum[1]
\end{multicols}

\end{document}

enter image description here

Defining a placement option is not possible inside the multicols environment.

5
  • 6
    How would one go about also adding support for the [htbp] placement location specifiers? Sep 18, 2013 at 7:13
  • Great stuff +1 I was looking for this solution for a while. At first I used \begingroup & \endgroup for my tikz figures and their captions. Though it was not keeping them together and I had situations where a caption was in a different column than its figure. Thanks again this solved my problem perfectly.
    – Boro
    Nov 19, 2013 at 23:46
  • @Herbert Sir, are we supposed to insert the picture/ figure on our own in the place of "foo" of "\includegraphics[width=\linewidth]{foo}" ? cause I tried to do so, but still black box is coming. What to do?
    – KON3
    Sep 1, 2014 at 5:57
  • delete the option [demo] for package graphicx
    – user2478
    Sep 1, 2014 at 10:11
  • 1
    I would also like to know a way to specify placement when using this method (e.g. [t]). Can anyone help?
    – teeeeee
    Jul 17, 2020 at 14:59
22

"One way around this is to not make your floats float. The float package provides the [H] float specifier which avoids this" (Taken form Werner's answer here: https://tex.stackexchange.com/a/75939/182467)

\usepackage{float}
[...]
\begin{figure}[H]
    [...]
\end{figure}
3
  • Why isn't this accepted answer?
    – Marcel
    Dec 10, 2020 at 1:39
  • I tried that and my figure disappeared, ouh how much I love LaTex!
    – Nils
    Jun 7, 2022 at 16:55
  • An issue with this solution is that, having several figures in the same page, it fails to manage space for text. And a lot of empty space is drawn as a result. Jun 15, 2023 at 1:41
8

One solution is to use the nonfloat package.

\documentclass[]{article}

\usepackage{nonfloat}
\usepackage{multicol}

\usepackage[demo]{graphicx}
\usepackage{lipsum}

\newcommand\myfigure[1]{%
\medskip\noindent\begin{minipage}{\columnwidth}
\centering%
#1%
%figure,caption, and label go here
\end{minipage}\medskip}

\begin{document}
\begin{multicols}{3}
\lipsum[1]
%
\myfigure{\includegraphics[width=.9\columnwidth]{test}%
\figcaption{\emph{I am a figure caption!}}}
%
\lipsum[1]
\end{multicols}
\end{document}

example output

4
  • This answer is meant to address the original question and is not meant to satisfy the additional requirements of the bounty.
    – JohnReed
    May 28, 2012 at 17:06
  • Sorry if it's rude, but does this add anything more compared to the Herbert's answer?
    – yo'
    May 28, 2012 at 17:59
  • 2
    Your question is legitimate. In terms of features, it does not add anything that I can think of. It is merely a slightly different way of addressing the original question by using the nonfloat package. I only added this answer for the sake of completeness. It may have worked better as an addendum to Herbert's answer but I didn't feel comfortable modifying it.
    – JohnReed
    May 28, 2012 at 18:51
  • My apologies, I just wasn't sure. It is probably not wrong to provide an alternative, even though I think that caption package works great.
    – yo'
    May 28, 2012 at 19:03

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .