在多色环境中放置图片的敏感度

在多色环境中放置图片的敏感度

以下一段代码产生不同的文本间距。

\documentclass{article}

\usepackage{graphicx}
\graphicspath{{Picture/}}
\usepackage{multicol}
\usepackage{lipsum}
\usepackage{amsmath, amssymb}   

\newtheorem{exercise}{Exercise}

\begin{document}

\begin{multicols}{2}[\columnsep 2em]
\includegraphics[width=\linewidth]{picture-sample}
\columnbreak
\begin{exercise}
Compute the integral
\[
\iint_{D}y\,\mathrm{dx}\mathrm{dy},
\]%
where $D$ is represented in the picture to the left.
\end{exercise}
\end{multicols}

\begin{multicols}{2}[\columnsep 2em]
\begin{exercise}
Compute the integral
\[
\iint_{D}y\,\mathrm{dx}\mathrm{dy},
\]%
where $D$ is represented in the picture to the right.
\end{exercise}
\columnbreak
\includegraphics[width=\linewidth]{picture-sample}
\end{multicols}

\end{document} 

代码效果 为什么会发生这种情况?我很清楚左侧的图片与右侧的图片处理方式不同。但为什么呢?我该如何解决这个问题?或者也许可以使用不同的包或其他环境产生相同的效果?

答案1

您没有说明picture-sample包含的内容,因此无法看出您观察到的差异,但我推测您的图片比另一列中的文本高度更大。如果是这样,那么您的示例应该在第一个多列中显示一个较短的第二列,其中包含文本,底部有一个间隙,而在第二个多列中,文本在第一列中展开以匹配第二列中图形的高度。这是您的问题吗?

原因是 multicols 主要用于“文本”,并且通常情况下,如果没有足够的文本来填充最后一列,则您希望最后一列变短。

这是由计数器控制的,finalcolumnbadness其默认值为9999。您的文本产生了 (丑陋) 的不良效果,10000这就是缩短列的原因。当您使用选项运行示例时,您可以看到这一点balancingshow,即,

\usepackage[balancingshow]{multicol}

因此,使两者相同的一种方法是添加\setcounter{finalbadness}{10000}

但你可能不想扩散,在这种情况下,解决方案是

\vspace*{\fill}
\columnbreak

有一个缩写\newcolumn --- 只是我错误地实现了它 -- 所以它不起作用并且需要修复。修复如下,将出现在软件包的下一个版本中:

\makeatletter
\renewcommand\newcolumn{%
   \ifnum\col@number<\tw@
   \PackageError{multicol}%
    {\noexpand\newcolumn outside multicols}%
    {This command can only be used within
     a multicols or multicols* environment.}%
  \else
    \ifvmode
     \nobreak\vfill\kern\z@\penalty -\@Mv\relax  % <--- this was missing the kern
   \else
     \@bsphack
     \vadjust{\nobreak\vfill\kern\z@\penalty -\@Mv\relax}%
     \@esphack
   \fi
  \fi}
\makeatother

答案2

在这种情况下,该包paracol表现更好。(它不会尝试平衡列。)

C

\documentclass{article}

\usepackage{graphicx}
\graphicspath{{Picture/}}
%\usepackage{multicol} % not used
\usepackage{lipsum}
\usepackage{amsmath, amssymb}   

\newtheorem{exercise}{Exercise}

\usepackage{paracol} % <<<<<<<<<<<<<<<<<< added
\setcolumnwidth{0.5\textwidth/2em,0.5\textwidth}%  column separation =2em
\globalcounter{exercise} % counter execise made global

\begin{document}
    
\begin{paracol}{2}
    \noindent\includegraphics[width=\linewidth]{example-image-a}% starts in the left column
    \switchcolumn % go to  the right column
    \begin{exercise}
        Compute the integral
        \[
        \iint_{D}y\,\mathrm{dx}\mathrm{dy},
        \]%
        where $D$ is represented in the picture to the left.
    \end{exercise}
    %   \vspace*{50pt}% <<<<<<<<<<< add some separation
    \switchcolumn% go to  the left column
    \begin{exercise}
        Compute the integral
        \[
        \iint_{D}y\,\mathrm{dx}\mathrm{dy},
        \]%
        where $D$ is represented in the picture to the right.
    \end{exercise}
    \switchcolumn% go to  the right columnt
    \includegraphics[width=\linewidth]{example-image-b} 
\end{paracol}   

\end{document}

要在练习之间添加一些空间,请使用

\end{exercise}
\vspace*{50pt}% <<<<<<<<<<< add some separation
\switchcolumn% go to  the left column

d

相关内容