我正在使用beamer
文档类制作一张海报。我所做的是将海报分成两列。每列中都有一些包含内容的块。我想要做的是将块的主体延续到下一列,以防它不适合第一列。这有可能吗?
下面我提供了我的配置的最小示例。
\documentclass{beamer}
\usepackage{lipsum}
\newlength{\columnheight}
\setlength{\columnheight}{25cm}
\begin{document}
\begin{frame}[fragile]
\begin{columns}
% ---------------------------------------------------------%
% Set up a column
\begin{column}{.49\textwidth}
\begin{beamercolorbox}[center,wd=\textwidth]{postercolumn}
\begin{minipage}[T]{.95\textwidth}
\parbox[t][\columnheight]{\textwidth}{
\begin{block}
\lipsum[1-2]
\end{block}
}
\end{minipage}
\end{beamercolorbox}
\end{column}
\begin{column}{.49\textwidth}
\begin{beamercolorbox}[center,wd=\textwidth]{postercolumn}
\begin{minipage}[T]{.95\textwidth}
\parbox[t][\columnheight]{\textwidth}{
}
\end{minipage}
\end{beamercolorbox}
\end{column}
\end{columns}
\end{frame}
\end{document}
答案1
这是一个基于的解决方案这个答案作者:egreg。(编辑:我简化了我原来的解决方案)。我更改了您的尺寸和 Lipsum 段落的选择,以使材料适合一张投影仪幻灯片。
\documentclass{beamer}
\usepackage{lipsum}
\newlength{\columnheight}
\setlength{\columnheight}{8cm}
\newlength{\flowheight}
\setlength{\flowheight}{\columnheight}
\advance\flowheight-2\baselineskip
\newbox\flowtextbox
\newbox\curblockbox
\begin{document}
\begin{frame}[fragile]
\begin{columns}
% ---------------------------------------------------------%
% Set up a column
\begin{column}[T]{.49\textwidth}
\begin{beamercolorbox}[center,wd=\textwidth]{postercolumn}
\begin{minipage}[t]{.95\textwidth}
\parbox[t][\columnheight]{\textwidth}{
\begin{block}{Head\strut}
\global\setbox\flowtextbox=\vbox{\lipsum[43]\lipsum[11]}
\global\setbox\curblockbox=\vsplit\flowtextbox
to \flowheight
\unvbox\curblockbox
\end{block}
}
\end{minipage}
\end{beamercolorbox}
\end{column}
\begin{column}[T]{.49\textwidth}
\begin{beamercolorbox}[center,wd=\textwidth]{postercolumn}
\begin{minipage}[t]{.95\textwidth}
\parbox[t][\columnheight]{\textwidth}{
\begin{block}{Head (cont.)}
\unvbox\flowtextbox
\end{block}
}
\end{minipage}
\end{beamercolorbox}
\end{column}
\end{columns}
\end{frame}
\end{document}
基本思想是让 LaTeX 在 vbox 中排版材料\flowtextbox
。 通过在我们希望使用第一个框的位置执行此操作,我们可以从当前环境中获得正确的宽度设置。 (这假设第二列具有相同的宽度。)然后,我们使用命令\vsplit
从这个框中截断垂直材料到所需的高度。 这将小于您的\columnheight
,因为我们需要为标题留出空间,因此我计算了一个 的值\columnheight - 2\baselineskip
。 现在,当我们到达适当的点时,我们只需解开我们的 vbox。 为了确保在定义环境之外存在正确的框,我们在命令前面加上\global
。 请注意,还需要放置几个\strut
命令来使行高匹配。
当\vsplit
发生这种情况时,您将收到 vbox 未满警告。请参阅这个问题如果你想抑制这一点。
看egreg 的另一个回答以获得进一步的启发。