多列布局与部分问题

多列布局与部分问题

问题

当在页面上使用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}

演示

  1. 附有剖面

带部分

  1. 无节

无章节

  1. .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如果在段落中使用会有点奇怪,但无论如何,有些东西也许可以改进(有一天)。

相关内容