multicol:如何避免环境重叠(图片)

multicol:如何避免环境重叠(图片)

在此处输入图片描述

为了保持一致的风格,我始终需要将图片放在多列环境的开头。但图片不能与页面底部重叠。

是什么正确的方法避免多级环境中的环境(图片)重叠?

使用\setlength\premulticols{10\baselineskip}(在手册“2 用户界面”中找到)我解决了这个问题。
但是如何解决这个问题呢?

\documentclass[fontsize=9pt, paper=a5]{scrreprt}%
\usepackage{caption}
\captionsetup[figure]{skip=2pt}

\usepackage{multicol}
\setlength{\multicolsep}{2.0pt plus 2.0pt minus 1.5pt}% 50%/3 of original values
\setlength\columnseprule{0.4pt}

% Solution?
\setlength\premulticols{10\baselineskip}

% https://tex.stackexchange.com/questions/12262/multicol-and-figures
\newenvironment{Figure}
  {\medskip\noindent\minipage{\linewidth}}
  {\endminipage\par\medskip}

\usepackage{mwe}
\usepackage{showframe}
\begin{document}
%\tableofcontents
\chapter{Erstes Kapitel}
\lipsum[1-3]
\begin{multicols}{2}
\begin{Figure}
 \centering
 \includegraphics[width=\linewidth, height=4cm]{example-image-a}
 \captionof{figure}{my caption of the figure}
\end{Figure}
\lipsum[65-69]
\end{multicols}

\end{document}

答案1

我的解决方案是定义一个新环境,将要包含的文件和标题作为参数。这样,​​我们可以在开始之前设置图形multicols,并将所需的空间传递给\premulticols

\documentclass[fontsize=9pt, paper=a5]{scrreprt}%

\usepackage{multicol}
\usepackage{graphicx}
\usepackage{caption}

\usepackage{showframe,lipsum}% for the example

\captionsetup[figure]{skip=2pt}

\setlength{\multicolsep}{2.0pt plus 2.0pt minus 1.5pt}% 50%/3 of original values
\setlength\columnseprule{0.4pt}

\newsavebox{\figuremcbox}
\newenvironment{figuremc}[3][]
 {% #1 = options for includegraphics
  % #2 = file to include
  % #3 = caption (with label)
  \par
  \sbox{\figuremcbox}{%
    \begin{minipage}[b]{\dimexpr(\textwidth-\columnsep)/2}
    \centering
    \includegraphics[#1]{#2}
    \captionof{figure}{#3}
    \end{minipage}%
  }%
  \setlength{\premulticols}{\ht\figuremcbox}
  \begin{multicols}{2}
  \noindent\usebox{\figuremcbox}\medskip
 }{\end{multicols}}


\begin{document}
%\tableofcontents

\chapter{Erstes Kapitel}
\lipsum[1-3]

\begin{figuremc}[width=\columnwidth, height=4cm]{example-image-a}{my caption of the figure}
\lipsum[65-69]
\end{figuremc}

\end{document}

在此处输入图片描述

答案2

嗯,这里的问题是环境中multicols不允许浮动,所以你不能使用环境figure让图形浮动到下一页。

我认为解决这个问题的唯一方法是手动(当然只能在之后完成)文本已修复并且不会再改变...)移动Figure文本中的代码以获得无错误放置的图形......

因此,请参阅以下 mwe 中添加的盲文来解决问题(只能手动进行):

\documentclass[fontsize=9pt, paper=a5]{scrreprt}%

\usepackage{caption}
\captionsetup[figure]{skip=2pt}

\usepackage{multicol}
\setlength{\multicolsep}{2.0pt plus 2.0pt minus 1.5pt}% 50%/3 of original values
\setlength\columnseprule{0.4pt}

% Solution?
%\setlength\premulticols{10\baselineskip}

% https://tex.stackexchange.com/questions/12262/multicol-and-figures
\newenvironment{Figure}
  {\medskip\noindent\minipage{\linewidth}}
  {\endminipage\par\medskip}

\usepackage{mwe} % loads lipsum too
\usepackage{showframe}


\begin{document}
%\tableofcontents
\chapter{Erstes Kapitel}
\lipsum[1-3]
\begin{multicols}{2}
Dies ist ein Blindtext. Dies ist ein Blindtext. Dies ist ein Blindtext. % <======================
Dies ist ein Blindtext. Dies ist ein Blindtext. Dies ist ein Blindtext. 
Dies ist ein Blindtext. Dies ist ein Blindtext. Dies ist ein Blindtext. 
Dies ist ein Blindtext. Dies ist ein Blindtext. Dies ist ein Blindtext. 
Dies ist ein Blindtext. Dies ist ein Blindtext. Dies ist ein Blindtext. 
Dies ist ein Blindtext. Dies ist ein Blindtext. Dies ist ein Blindtext. 
\begin{Figure}
 \centering
 \includegraphics[width=\linewidth, height=4cm]{example-image-a}
 \captionof{figure}{my caption of the figure}
\end{Figure}
\lipsum[65-69]
\end{multicols}

\end{document}

结果(看起来有点丑,一页上只有一列文本和两列文本不太好):

结果页面

相关内容