beamer, \vfill and itemize

I will agree with @egreg that this does not seem to be the right way to do what you intend. In any case, if you insist, here's what I suggest.

Beamer uses \vfill to vertically justify your slide. You may think of it this way: there's a \vfill above your slide's contents and one more below them. So, roughly speaking, the \vfill that you introduce only uses one third of the slide's vertical unused space.

To use all of that space, you need the next level of TeX's glue stretching:

\def\position#1#2{\vskip 0pt plus 1filll\hfill #1-#2}

This will leave you with no space at the top or the bottom of your slide, but it may be what you were looking for.


According to the beamer manual you can use the textpos package to position things absolutely on a page:

12.8 Positioning Text and Graphics Absolutely

Normally, beamer uses TEX’s normal typesetting mechanism to position text and graphics on the page. In certain situation you may instead wish a certain text or graphic to appear at a page position that is specified absolutely. This means that the position is specified relative to the upper left corner of the slide. The package textpos provides several commands for positioning text absolutely and it works together with beamer. When using this package, you will typically have to specify the options overlay and perhaps absolute.

enter image description here

Code:

\documentclass[handout]{beamer}

\usepackage[absolute,overlay]{textpos}

\newcommand*{\XOffsetFromBottomRight}{-2.0em}%
\newcommand*{\YOffsetFromBottomRight}{2.0ex}%
\newcommand*{\BottomRightText}[2]{%
    \par%
    \begin{textblock*}{5.0cm}(\dimexpr\textwidth-\XOffsetFromBottomRight\relax,\dimexpr\textheight-\YOffsetFromBottomRight\relax)
        #1-#2%
    \end{textblock*}%
}%

\begin{document}
\begin{frame}
\begin{itemize}\item a
\item a
\item a
\end{itemize}
\BottomRightText{2}{1}
\end{frame}

\begin{frame}
\begin{itemize}\item a
\item a
\item a
\item a
\item a
\item a
\item a
\item a
\item a
\item a
\end{itemize}
\BottomRightText{2}{2}
\end{frame}
\end{document}

\vspace{\stretch{100}}    

Will do something like this:

\vfill
(top part of slide)
\vfill\vfill...\vfill (thats the \vspace{\stretch{100}} part)
(bottom part of slide)
\vfill

and will therefore simulate almost the expected \vfill result.

You can now either change only the definiton of your \position command like this

\def\position#1#2{\vspace{\stretch{100}}\hfill #1-#2}

or define your own \myvfill for BEAMER usage

\def\myvfill{\vspace{\stretch{100}}}
\def\position#1#2{\myvfill\hfill #1-#2}