我正在使用该包编写一个具有简单三列布局的文档multicols
。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{lipsum}
\usepackage{multicol}
\begin{document}
\begin{multicols}{3}
[
\section{First Section}
All human things are subject to decay. And when fate summons, Monarchs must obey.
]
\lipsum
\end{multicols}
\end{document}
其中“摘要”部分占两列。有什么简单的方法可以做到这一点吗?
答案1
如果flowfram
不符合您的需求,没有简单的方法可以做到这一点,但可以做到。此解决方案修补程序multicol
将环境中第二列的高度缩小到 中指定的量\columnshrink
。通过在保存框中设置跨越前两列的摘要并测量其总高度来计算所需的高度。
\documentclass{article}
\usepackage{lipsum}
\usepackage{multicol}
\usepackage{xpatch}
\newlength{\abstractwidth}
\newlength{\columnshrink}
\newsavebox{\twocolinsert}
\makeatletter
\newlength{\resized@col}
\newcounter{column@count}
\xpatchcmd{\multi@column@out}{\process@cols\mult@gfirstbox{%
\setbox\count@
\vsplit\@cclv to\dimen@
\set@keptmarks
\setbox\count@
\vbox to\dimen@
{\unvbox\count@
\ifshr@nking\vfilmaxdepth\fi}%
}%
}{\process@cols\mult@gfirstbox{%
\global\advance\c@column@count\@ne
\resized@col\dimen@%
\ifnum\c@column@count=\tw@
\advance\resized@col-\columnshrink
\fi%
\setbox\count@
\vsplit\@cclv to\resized@col
\set@keptmarks
\setbox\count@
\vbox to\dimen@
{ \ifnum\c@column@count=\tw@ \vspace*{\columnshrink} \fi%
\unvbox\count@
\ifshr@nking\vfilmaxdepth\fi}%
}%
}{\typeout{Success}}{\typeout{Failure}}
\makeatother
\begin{document}
\begin{multicols}{3}
\setlength{\abstractwidth}{2\linewidth}
\addtolength{\abstractwidth}{\columnsep}
\savebox{\twocolinsert}{\begin{minipage}{\abstractwidth}
\section*{Abstract}
\lipsum[1]
\end{minipage}}
\setlength{\columnshrink}{\ht\twocolinsert}
\addtolength{\columnshrink}{\dp\twocolinsert}
\noindent\usebox{\twocolinsert}
\section*{Introduction}
\lipsum[2-10]
\end{multicols}
\end{document}
结果: