问题
当在页面上使用multicolumn
具有部分标题的环境时,两列最终会一个接一个地排列,而不是并排排列。
如果图像的宽度小于或等于 79%,则似乎也可以解决linewidth
(参见下面的屏幕截图)。
问题
如何防止这种行为?
平均能量损失
\documentclass{article}
\usepackage{mwe}
\usepackage{parskip}
\usepackage{multicol}
\begin{document}
\section{Section}\label{sec:section}
\lipsum[1]
\begin{multicols}{2}
\includegraphics[width=\linewidth]{example-image-a}
\columnbreak
\includegraphics[width=\linewidth]{example-image-b}
\end{multicols}
\vspace{-1em}
\lipsum[2]
\end{document}
演示
- 附有剖面
- 无节
- 和
.79\linewidth
答案1
似乎您在图形中遇到了一个错误(真的很神奇),并且您的示例也展示了一个错误,或者至少是多列中的一个可疑功能。
至于图形中的错误:\includegraphics
如果像您的示例中那样开始一个段落,则会执行\leavevmode
(应该如此),但在组内执行(不应该如此)。
结果,\clubpenalty
第二段中应该重置的标题设置没有重置,或者说重置后又立即改回原样。因此,多行段落(每行包含一张图片)两行之间的惩罚是 10150,即不允许中断。
证明:
\documentclass{article}
\usepackage{mwe}
\begin{document}
\section{Section}\label{sec:section}
\lipsum[1]
\includegraphics{example-image-a}
\showthe\clubpenalty
\lipsum[1]
\stop
结果是:
<example-image-a.pdf, id=1, 321.2pt x 240.9pt> <use example-image-a.pdf>
> 10000.
l.9 \showthe\clubpenalty
?
如果在图形前添加第二个段落,那么一切都很好(这就是\leavevmode
建议的做法。
好的,那么为什么\columnbreak
两行之间没有换行呢?答案是,列换行不会出现在两个图形之间,它实际上出现在它们之后,即一个相当无用的位置。
这是为什么呢?它添加了一个特殊的惩罚(使用\vadjust
),这意味着它被插入到当前行之后,但是由于源代码说
\includegraphics[width=\linewidth]{example-image-a}
\columnbreak
我们有一个全行图形,后跟一个空格(标志着行的结束),因此分栏命令最终出现在第二行,因此出现\vadjust
在第二行之后。
\includegraphics[width=\linewidth]{example-image-a}%
\columnbreak
\includegraphics[width=\linewidth]{example-image-b}
也不起作用,因为图形之间没有任何断点,并且 vadjust 将再次在同一个位置结束。
所以你必须写
\includegraphics[width=\linewidth]{example-image-a}%
\columnbreak{}
\includegraphics[width=\linewidth]{example-image-b}
使其工作。我认为 multicol 文档中有一个警告,\columnbreak
如果在段落中使用会有点奇怪,但无论如何,有些东西也许可以改进(有一天)。