以下 M(merly)WE 有一个缺陷:它将材料 5 和 6 放在了两个不同的页面上。这是它的一个正常功能,multicols
也是我认为的好功能。
既然我不能使用浮点数(由于教学上的不良原因),我该如何避免这种情况?玩惩罚?使用不同的方法?
\documentclass[a4paper, 12pt]{article}
\usepackage{multicol}
\newcommand\fakematerial[1]{
Material #1 - START
\vspace{7cm}
Material #1 - END
}
\begin{document}
\begin{multicols}{2}
\fakematerial{1}
\columnbreak
\fakematerial{2}
\end{multicols}
\begin{multicols}{2}
\fakematerial{3}
\columnbreak
\fakematerial{4}
\end{multicols}
\begin{multicols}{2}
\fakematerial{5}
\columnbreak
\fakematerial{6}
\end{multicols}
\end{document}
答案1
什么失败?
您使用了 3 次宏,每次都插入 7 厘米的固定空间(总计超过 597 pt
,不包括文本行数和行间空格),但文本可用的所有垂直空间为592 pt
。
您只需校正垂直空间。只需将垂直空间减少到文本高度的 1/3,减去文本行和跳行的空间:
\documentclass[a4paper, 12pt]{article}
\usepackage{multicol}
\newcommand\fakematerial[1]{%
Material #1 - START%
\par\vspace{\dimexpr.33\textheight-2\baselineskip-2\lineskip}\par%
Material #1 - END\par}
\begin{document}
\begin{multicols}{2}
\fakematerial{1}
\columnbreak
\fakematerial{2}
\end{multicols}
\begin{multicols}{2}
\fakematerial{3}
\columnbreak
\fakematerial{4}
\end{multicols}
\begin{multicols}{2}
\fakematerial{5}
\columnbreak
\fakematerial{6}
\end{multicols}
\end{document}
但是,这仍然不必要地复杂和僵化(任何布局变化,例如 \parskip 的变化,都足以破坏这个解决方案)。
对于只有两列的情况,你只需要\vfill
在真正的双列模式下,不需要multicol
。这样你甚至可以在\fakematerial
一列的树宏之间输入一些额外的内容(包括一个以上的宏),而 LaTeX 会负责在列中分配可用空间(如果还有的话):
\documentclass[twocolumn, 12pt]{article}
\newcommand\fakematerial[1]{Material #1 - START \vfill Material #1 - END\par}
\begin{document}
\fakematerial{1}
\fakematerial{3}
\fakematerial{5} \newpage
\fakematerial{2}
\fakematerial{4}
\fakematerial{6}
\end{document}
答案2
minipage
一个好方法是使用斯基尔蒙和莱安德里斯。
这是一个硬编码解决方案(这只是专用宏或环境的起点)。
\documentclass[a4paper, 12pt]{article}
\newcommand\fakematerial[1]{
Material #1 - START
\vspace{7cm}
Material #1 - END
}
\begin{document}
\begin{minipage}[t]{0.45\linewidth}
\fakematerial{1}%
\end{minipage}
\hfill%
\begin{minipage}[t]{0.45\linewidth}
\fakematerial{2}
\end{minipage}%
\medskip
\begin{minipage}[t]{0.45\linewidth}
\fakematerial{3}%
\end{minipage}
\hfill%
\begin{minipage}[t]{0.45\linewidth}
\fakematerial{4}
\end{minipage}%
\medskip
\begin{minipage}[t]{0.45\linewidth}
\fakematerial{5}%
\end{minipage}
\hfill%
\begin{minipage}[t]{0.45\linewidth}
\fakematerial{6}
\end{minipage}%
\end{document}