2

It is feasible to transfer from two columns to one column or from one column to two columns in text or with figures or tables based on the twocolumn parameters on one page. But Transfer from two columns to one column and then to two columns on one page is a question. For example:

\documentclass[twocolumn]{book}
\usepackage{graphicx,caption,lipsum,balance}
\begin{document}
\lipsum[1]\par\balance
\twocolumn[
\begin{@twocolumnfalse}
    {
    \centering
    \includegraphics[width=0.8\textwidth]{example-image-a}
    \captionof{figure}{Example image}
    }
\end{@twocolumnfalse}
]
\par
\lipsum[1-3]
\end{document}

produces:

enter image description here

How to move the content of the second page to the bottom of the first page keeping the figure in the middle of the first page? I don't know how to achieve this effect.

2
  • 2
    Is there a reason the image has to be directly below the first paragraph? As you may know, Latex normaly uses floating figures for a better typesetted result. In twocolumn documents you can easily achieve this with the figure* environment.
    – lukeflo
    Jun 12 at 9:37
  • @lukeflo I this the root cause is twocolumn is not compatible with [h] parameter of floats.
    – Y. zeng
    Jun 12 at 10:16

1 Answer 1

3

To really switch between different numbers of columns, you could use package multicol:

\documentclass{book}
\usepackage{mwe}
\usepackage{caption}
\usepackage{multicol}
\begin{document}
\begin{multicols}{2}
  \lipsum[1]
\end{multicols}
\noindent\begin{minipage}{\textwidth}
\begin{centering}
  \includegraphics[width=0.8\textwidth]{example-image-a}
  \captionof{figure}{Example image}
\end{centering}
\end{minipage}

\begin{multicols}{2}
  \lipsum[1-3]
\end{multicols}

\end{document}

using multicols

But usually I would suggest to use a figure* to float the figure to the top of the next page:

\documentclass[twocolumn]{book}
\usepackage{mwe}
\usepackage{caption}
\begin{document}
\lipsum[1]
\begin{figure*}[t]
  \centering
  \includegraphics[width=0.8\textwidth]{example-image-a}
  \caption{Example image}
\end{figure*}

\lipsum[1-8]

\end{document}

with figure*

You can also trick with mixing native twocolumn mode and multicols:

\documentclass[twocolumn]{book}
\usepackage{graphicx,caption,lipsum,balance,multicol}
\begin{document}
\twocolumn[%
{\begin{@twocolumnfalse}
  \begin{multicols}{2}
    \lipsum[1]
  \end{multicols}
    \centering
    \includegraphics[width=0.8\textwidth]{example-image-a}
    \captionof{figure}{Example image}
\end{@twocolumnfalse}}%
]
\par
\lipsum[1-3]
\end{document}

enter image description here

But I would not recommend to do so.

7
  • multicol has two defects. 1. Can't add line numbers at the outside margins of the two columns; 2. Not compatible with the float environment. As these these two defects, I transfer from multicol to twocolumn. Thanks.
    – Y. zeng
    Jun 12 at 10:15
  • @Y.zeng I can only answer, what has been asked. 1. You question does not show, that you need line numbers and that this is your real problem. 2. Your question does not use a float environment. However inside multicols star floats like figure* and table* are supported (see section 2.4 of the manual). My answer shows an alternative with ending the multicols environment, printing the figure and start a new one. 3. I've also shown an alternative using native twocolumn mode, but moving the figure. Because using the native twocolumn mode with h floats spanning two columns is not possible.
    – cabohah
    Jun 12 at 10:26
  • Yes. Your way does good. multicol support figure* and table* to accross the two or more columns, but inside one column, it doesn't.
    – Y. zeng
    Jun 12 at 10:29
  • @Y.zeng But you can place non-floating figures inside a column, if you need. However this is more manual work than using a float. But you cannot have everything.
    – cabohah
    Jun 12 at 10:30
  • 1
    @Y.zeng As I already said: However this is more manual work than using a float.
    – cabohah
    Jun 12 at 10:36

You must log in to answer this question.

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