나는 패키지를 사용하여 간단한 3열 레이아웃의 문서를 작성하고 있습니다 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}
결과: