以下一段代码产生不同的文本间距。
\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
表现更好。(它不会尝试平衡列。)
\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