我只想在列内图形的上方和下方换行

我只想在列内图形的上方和下方换行

因此,我使用该包创建了一个两列的 Latex 文档multicol。对于文本主体,代码如下所示:

\documentclass[11pt, A4]{article}
\usepackage{wrapfig}
\usepackage{graphicx}
\usepackage{multicol}

\begin{document}
   \begin{multicol*}{2}

   Some text...

   \begin{figure}[H]
     \centering
      \includegraphics[width=\linewidth]{images/test.jpg}
      \captionof{figure}{Caption}
      \label{fig:my_label1}
   \end{figure}

   More text...

   \end{multicol}    
\end{document}

其结果如下: 非包裹图

现在,我想让图形下方的文本 (Ut egestas mauris...) 环绕图形并填充前一列。我尝试使用,wrapfigure但会产生以下结果:

\begin{wrapfigure}{r}{\linewidth}
   \centering
   \includegraphics[width=\linewidth]{images/test.jpg}
   \captionof{figure}{Caption}
   \label{fig:my_label1}
\end{wrapfigure}

包装图

这很接近了,但是图形应该移动到下一列,而文本则保留以填补空白。是否有任何选项wrapfigure可以做到这一点,或者任何其他包?我想它唯一需要做的就是让文本只在图像的上方和下方换行,而不是在图像旁边换行。但是,我不太熟悉乳胶如何渲染这些东西,所以我不知道这是否可行。

答案1

此解决方案用于\split在下一列的开头的段落中间插入一个框。它适用于右列和左列。

注意,multicols 设置\pagegoal为包含所有列。

\documentclass[11pt, A4]{article}
%\usepackage{wrapfig}
\usepackage{graphicx}
\usepackage{multicol}
\usepackage{caption}
\usepackage{lipsum}% MWE only

\makeatletter
\newcommand{\split}[2]% #1 = text, #2 = insert
{\par\bgroup
  \setbox0=\vbox{\strut #1\strut}% measure height
  \sbox1{#2}% ditto
  \dimen0=\dimexpr \pagegoal-\pagetotal-\col@number\baselineskip\relax% fudge factor
  \dimen1=\pagegoal% compute height of one column
  \ifnum\col@number>1\relax
    \divide\dimen1 by \col@number
  \fi
  \advance\dimen1 by -\baselineskip% fudge factor
  \loop\ifdim\dimen0>\dimen1% space left in this column
    \advance\dimen0 by -\dimen1
  \repeat
  \dimen1=\dimexpr \ht1+\dp1+\textfloatsep\relax% space needed for insert
  \ifdim\dimen1>\dimen0
    \ifdim\ht0>\dimen0
      \setbox2=\vsplit0 to \dimen0
      \unvbox2
      \noindent\box1
      \vskip\textfloatsep
      \unvbox0
    \else% entire text will fit into column
      \unvbox0
      \vskip\textfloatsep% probably ignored
      \noindent\box1
      \vskip\textfloatsep
    \fi
  \else% insert will fit into column
    \vskip\intextsep
    \noindent\box1
    \vskip\intextsep
    \unvbox0
  \fi
\egroup\par}
\makeatother

\begin{document}
   \begin{multicols}{2}

   \lipsum[1]
   %\lipsum[2-4]% to test second column

   \split{\lipsum[2]}{\begin{minipage}{\columnwidth}
      \centering
      \includegraphics[width=\linewidth, height=0.5\textheight]{example-image}
      \captionof{figure}{Caption}
      \label{fig:my_label1}
   \end{minipage}}

   \lipsum[3-6]

   \end{multicols}    
\end{document}

相关内容