beamer tikz add tag
Skillmon
When using `beamer` I like to add a bit of stretch to lists to give a more balanced look if I don't have a complete frame's worth of contents. This works for a `frame` and with a small adjustment also for `minipage` (why does `beamer` use second order of infinity, it is supposed to use only first order...). But since one shouldn't use `minipage` but `beamer`'s `columns` (why again?) I'd like to make it also work inside those. But it doesn't.

MWE:

```tex
\documentclass[]{beamer}

\usepackage{xparse}

\ExplSyntaxOn
\makeatletter
\let\my@orig@listi   \@listi
\let\my@orig@listii  \@listii
\let\my@orig@listiii \@listiii
\NewDocumentCommand\ResetLists{}%>>=
  {%
    \let\@listi   \my@orig@listi
    \let\@listI   \@listi
    \let\@listii  \my@orig@listii
    \let\@listiii \my@orig@listiii
  }%=<<
\newcommand\my@StretchyLists[1]%>>=
  {%
    \def\@listi
      {%
        \leftmargin\leftmargini
        \topsep  3\p@ \@plus2\p@ \@minus2.5\p@
        \parsep  0\p@
        \itemsep 3\p@ \@plus#1   \@minus3\p@
      }%
    \let\@listI\@listi
    \def\@listii
      {%
        \leftmargin\leftmarginii
        \topsep  2\p@ \@plus#1  \@minus2\p@
        \parsep  0\p@ \@plus\p@
        \itemsep 0\p@ \@plus#1
      }%
    \def\@listiii
      {%
        \leftmargin\leftmarginiii
        \topsep  2\p@ \@plus#1  \@minus2\p@
        \parsep  0\p@ \@plus\p@
        \itemsep 0\p@ \@plus#1
      }%
  }%=<<
\NewDocumentCommand\StretchyLists{t! s O{0.3}}%>>=
  {%
    \IfBooleanTF{#1}
      {\my@StretchyLists{#3}}
      {%
        \IfBooleanTF{#2}
          {\my@StretchyLists{#3fil}}
          {\my@StretchyLists{#3fill}}%
      }%
  }%=<<
\makeatother
\ExplSyntaxOff

\StretchyLists

\begin{document}
\begin{frame}{}{}
  \begin{itemize}
    \item first item
    \item second item
    \item third item
  \end{itemize}
\end{frame}

\begin{frame}{}{}
  \begin{columns}[onlytextwidth]
    \begin{column}{.45\textwidth}
      \begin{itemize}
        \item first item
        \item second item
        \item third item
      \end{itemize}
    \end{column}
  \end{columns}
\end{frame}

\begin{frame}{}{}
  \begin{minipage}[c][\textheight][c]{.45\textwidth}
    \StretchyLists*
    \begin{itemize}
      \item first item
      \item second item
      \item third item
    \end{itemize}
  \end{minipage}
\end{frame}
\end{document}
```
Top Answer
samcarter
Beamer columns are basically just minipages with some `\hfill` between them to distribute them across the page (and a couple of extra features like making them overlay aware etc.). So I would not say "don't use minipages with beamer" but rather that is normally easier to use columns instead of minipages.

In your example, you don't get any extra stretch between your items because the minipages beamer uses for the columns don't have any fixed height, this means they will take the height of the content. Now if the surrounding box has the same height as the content, it will look the same if stretched from from top to bottom of this box or not.

As a proof of concept you could redefine the column environment to use minipages of fixed height and you will see that suddenly you can see the stretch you added. (I added `\vfill` above and below the list, because this is normally add by beamer to the normal frame content)

Caveat: for everybody not using your custom class but the ordinary beamer class, `\textheight` will be too height, especially in case there is also a frametitle


```
\documentclass[]{beamer}

\makeatletter
\renewenvironment<>{beamer@columnenv}[2][\beamer@colmode]{%
  \beamer@colclose\def\beamer@colclose{}%
  \begin{actionenv}#3%
    \setkeys{beamer@col}{#1}%
    \begin{minipage}[\beamer@colalign][.99\textheight][c]{#2}%
      \leavevmode\raggedright\beamer@colheadskip\ignorespaces}
    {\end{minipage}\hfill\end{actionenv}\@ignoretrue}
\makeatother

\usepackage{xparse}

\ExplSyntaxOn
\makeatletter
\let\my@orig@listi   \@listi
\let\my@orig@listii  \@listii
\let\my@orig@listiii \@listiii
\NewDocumentCommand\ResetLists{}%>>=
  {%
    \let\@listi   \my@orig@listi
    \let\@listI   \@listi
    \let\@listii  \my@orig@listii
    \let\@listiii \my@orig@listiii
  }%=<<
\newcommand\my@StretchyLists[1]%>>=
  {%
    \def\@listi
      {%
        \leftmargin\leftmargini
        \topsep  3\p@ \@plus2\p@ \@minus2.5\p@
        \parsep  0\p@
        \itemsep 3\p@ \@plus#1   \@minus3\p@
      }%
    \let\@listI\@listi
    \def\@listii
      {%
        \leftmargin\leftmarginii
        \topsep  2\p@ \@plus#1  \@minus2\p@
        \parsep  0\p@ \@plus\p@
        \itemsep 0\p@ \@plus#1
      }%
    \def\@listiii
      {%
        \leftmargin\leftmarginiii
        \topsep  2\p@ \@plus#1  \@minus2\p@
        \parsep  0\p@ \@plus\p@
        \itemsep 0\p@ \@plus#1
      }%
  }%=<<
\NewDocumentCommand\StretchyLists{t! s O{0.3}}%>>=
  {%
    \IfBooleanTF{#1}
      {\my@StretchyLists{#3}}
      {%
        \IfBooleanTF{#2}
          {\my@StretchyLists{#3fil}}
          {\my@StretchyLists{#3fill}}%
      }%
  }%=<<
\makeatother
\ExplSyntaxOff

\StretchyLists

\begin{document}
\begin{frame}{}{}
  \begin{itemize}
    \item first item
    \item second item
    \item third item
  \end{itemize}
\end{frame}

\begin{frame}{}{}
  \begin{columns}[onlytextwidth]
    \begin{column}{.45\textwidth}
      \begin{itemize}
        \vfill
        \item first item
        \item second item
        \item third item
        \vfill
      \end{itemize}
    \end{column}
  \end{columns}
\end{frame}

\end{document}
```

Enter question or answer id or url (and optionally further answer ids/urls from the same question) from

Separate each id/url with a space. No need to list your own answers; they will be imported automatically.