Beamer 在下一列继续块

Beamer 在下一列继续块

我正在使用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 的另一个回答以获得进一步的启发。

相关内容