Я создаю постер с использованием beamer
класса document. Я разделил постер на две колонки. В каждой колонке у меня есть несколько блоков с контентом. Я хочу продолжить тело блока в следующей колонке на случай, если оно не поместится в первой. Возможно ли это как-то?
Ниже я привожу минимальный пример моей конфигурации.
\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
Вот решение, основанное наэтот ответпо эгрегору. (РЕДАКТИРОВАТЬ: Я упростил свое первоначальное решение). Я изменил ваши размеры и выбор абзацев 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
. Теперь, когда мы добираемся до соответствующих точек, мы просто распаковываем наши vboxes. Чтобы убедиться, что правильные блоки существуют вне определяющей среды, мы предваряем команды \global
. Обратите внимание, что также необходимо было поместить пару \strut
команд, чтобы совпасть высоты строк.
На этапе, когда это \vsplit
произойдет, вы получите предупреждение о недостаточном заполнении vbox. Смотритеэтот вопросесли вы хотите это скрыть.
Видетьдругой ответ от egregдля дальнейшего вдохновения.