[Tex/LaTex] Nested columns in beamer

beamerbeamerpostercolumnshorizontal alignment

I would like to make an A0 poster using the beamerposter package. The poster content should appear in block environments, for which I need a flexible and clean layout handling. In particular, I need columns and subcolumns.

The best answer to the thread
Spanning multiple beamer columns
suggests to simply do nesting of column environments.

But this doesn't work out nicely. Because the column boundaries do not seem to be neatly aligned, nor is the space between columns the same everywhere. Oddly, the subcolumns are not even centered properly within their "master" column.

Some hfill commands and center environments do not really help. I tried to embed the blocks into minipages instead of columns, but the problem is similar: unequal and unaligned block boundaries. My understanding of the multicol environment is that it won't help either, because what I have are different column layouts stacked on top of each other, which are flanked by yet other columns.

What is a clean solution to this problem?

The result of my current attempt is the following:

enter image description here

Thanks for help,


\documentclass[final]{beamer}
\mode<presentation>{\usetheme{Berlin}}
\usepackage{multicol}
\usepackage[orientation=landscape,size=a0,scale=1.4,debug,grid]{beamerposter}

\begin{document}
\begin{frame}{}

\begin{columns}[t]
  \begin{column}{.24\linewidth}
    \begin{block}{\large First column}
      abc
    \end{block}
  \end{column}
  \begin{column}{.48\linewidth}
    \begin{block}{\large Second (double-span) column}
      abc
    \end{block}
    \begin{columns}[t]
      \begin{column}{.24\linewidth}
        \begin{block}{\large First subcolumn}
          abc
        \end{block}
      \end{column}
      \begin{column}{.74\linewidth}
        \begin{block}{\large Second subcolumn}
            abc
        \end{block}
      \end{column}
    \end{columns}
  \end{column}
  \begin{column}{.24\linewidth}
    \begin{block}{\large Third column}
      abc
    \end{block}
  \end{column}
\end{columns}

\end{frame}

\end{document}

Best Answer

\documentclass[final]{beamer}
\mode<presentation>{\usetheme{Berlin}}
\usepackage{multicol}
\usepackage[orientation=landscape,size=a0,scale=1.4,debug,grid]{beamerposter}

\newsavebox{\squaredblocktext}
\setbeamertemplate{block begin}{
    \par\vskip\medskipamount%
    \makebox[\dimexpr\textwidth-1.5ex\relax][l]{%
        \begin{beamercolorbox}[colsep*=.75ex]{block title}
            \usebeamerfont*{block title}\insertblocktitle%
        \end{beamercolorbox}}%
        \begin{lrbox}{\squaredblocktext}%
            \begin{minipage}[t]{\textwidth}%
                \ifbeamercolorempty[bg]{block body}{\vskip-.25ex}{\vskip-.75ex}\vbox{}%
            }

            \setbeamertemplate{block end}{
            \end{minipage}%
        \end{lrbox}%
        {\parskip0pt\par}%
        \ifbeamercolorempty[bg]{block title}{}
        {\ifbeamercolorempty[bg]{block body}{}{\nointerlineskip\vskip-0.5pt}}%
        \usebeamerfont{block body}%
        \makebox[\dimexpr\textwidth-1.5ex\relax][l]{%
            \begin{beamercolorbox}[colsep*=.75ex,vmode]{block body}%
                \usebox{\squaredblocktext}
            \end{beamercolorbox}%
        }\vskip\smallskipamount%
    }

\begin{document}
    \begin{frame}{}

        \begin{columns}[t]
            \begin{column}{.24\linewidth}
                \begin{block}{\large First column}
                    abc
                \end{block}
            \end{column}
            \begin{column}{.48\linewidth}
                \begin{block}{\large Second (double-span) column}
                    abc
                \end{block}
                \begin{columns}[t, totalwidth=\textwidth]
                    \begin{column}{.225\linewidth}
                        \begin{block}{\large First subcolumn}
                            abc
                        \end{block}
                    \end{column}
                    \begin{column}{.725\linewidth}
                        \begin{block}{\large Second subcolumn}
                            abc
                        \end{block}
                    \end{column}
                \end{columns}
            \end{column}
            \begin{column}{.24\linewidth}
                \begin{block}{\large Third column}
                    abc
                \end{block}
            \end{column}
        \end{columns}

    \end{frame}

\end{document}

enter image description here