Perhaps this is what you need?
\documentclass[10pt,xcolor=table]{beamer}
\usetheme{Madrid}
\usepackage{tikz}
\usepackage{twoopt}
\usetikzlibrary{calc}
\makeatletter
\tikzset{%
remember picture with id/.style={%
remember picture,
overlay,
save picture id=#1,
},
save picture id/.code={%
\edef\pgf@temp{#1}%
\immediate\write\pgfutil@auxout{%
\noexpand\savepointas{\pgf@temp}{\pgfpictureid}}%
},
if picture id/.code args={#1#2#3}{%
\@ifundefined{save@pt@#1}{%
\pgfkeysalso{#3}%
}{
\pgfkeysalso{#2}%
}
}
}
\def\savepointas#1#2{%
\expandafter\gdef\csname save@pt@#1\endcsname{#2}%
}
\def\tmk@labeldef#1,#2\@nil{%
\def\tmk@label{#1}%
\def\tmk@def{#2}%
}
\tikzdeclarecoordinatesystem{pic}{%
\pgfutil@in@,{#1}%
\ifpgfutil@in@%
\tmk@labeldef#1\@nil
\else
\tmk@labeldef#1,(0pt,0pt)\@nil
\fi
\@ifundefined{save@pt@\tmk@label}{%
\tikz@scan@one@point\pgfutil@firstofone\tmk@def
}{%
\pgfsys@getposition{\csname save@pt@\tmk@label\endcsname}\save@orig@pic%
\pgfsys@getposition{\pgfpictureid}\save@this@pic%
\pgf@process{\pgfpointorigin\save@this@pic}%
\pgf@xa=\pgf@x
\pgf@ya=\pgf@y
\pgf@process{\pgfpointorigin\save@orig@pic}%
\advance\pgf@x by -\pgf@xa
\advance\pgf@y by -\pgf@ya
}%
}
\makeatother
\newcommand\tikzmark[2][]{%
\tikz[remember picture with id=#2] #1;}
\newcommandtwoopt\DrawBox[4][][-\labelwidth+\labelsep]{%
\begin{tikzpicture}[overlay,remember picture]
\draw[red,#1]
($(pic cs:#3)+(-0.2em+#2,0.9em)$) rectangle
($(pic cs:#4)+(0.2em,-0.3em)$);
\end{tikzpicture}}
\begin{document}
\begin{frame}
\begin{block}{\centering Unsteady models}
\only<3->{\DrawBox[thick, green!50!black, fill=green!80!black]{lefta}{righta}}
\only<4->{\DrawBox[thick, green!50!black, fill=green!80!black]{leftb}{rightb}}
\begin{itemize}\setbeamertemplate{itemize item}[triangle]\small
\item\tikzmark{lefta}\textbf{Aerodynamics}
\begin{itemize}\small
\item[+] \textbf<3->{Accuracy}
\item[+] \textbf<3->{Flow physics}\tikzmark{righta}
\end{itemize}
\item\tikzmark{leftb}\textbf{Structure}
\begin{itemize}\small
\item[+] \textbf<3->{Full wing flexibility}\tikzmark{rightb}
\end{itemize}
\item \textbf{Implementation}
\begin{itemize}\small
\item[-] Complex formulation
\item[-] High computational load
\end{itemize}
\end{itemize}
\end{block}
\end{frame}
\end{document}
The new \DrawBox
command has two optional arguments: the first one, to pass options to the \draw
command internally used for the frame, and the second one, to control the horizontal offset to the left (default value=-\labelwidth+\labelsep
); the two mandatory arguments are for the marks which should be set in the proper locations.
I used the improved \tikzmark
defined by Andrew Stacey in his answer to tikzmark to have different behaviour if first run (and mark locations not yet available). This, in particular, places the box behind the text, so no need to use opacity (unless its effect is really required).
All the magic is in the definitions at the top of the file. The only unique things in my slide content itself is that: 1) I did not leave a blank line before and after \[...\]
equation construct; and 2) the \columnskip
specification mentioned below.
Here I addressed normal text, equations, centering, center environment, itemize environment. EDITED to address columns environment. I have REEDITED to introduce the macros \stretchon
and \stretchoff
to make this process selectable. Just issue one of these commands between frames to change the current mode. I have also REEDITED to provide the redefined \item
with an optional argument, as it should be.
Generally, the main thing is to redefine \par
to add a \vfill
after the \par
. However, a few additional refinements are required. The first invocation of \item
in an environment should just use the regularly defined \item
, but then redefine \item
to add a \vfill
prior to subsequent \item
s. Environments like center
and itemize
also may need to reinvoke the \vfill
ed version of \par
, either coming into the environment, leaving it, or both.
In my edit to address the columns
environment, I determined that \vfill
solutions seemed to have no effect, which must have something to do with the way the two columns are separately constructed and aligned. So my solution was to introduce a length \columnskip
, which will be the \parskip
introduced between items in the column
environment and upon exiting that environment. Thus, for any particular slide, one may have to adjust it once or twice to get a good match to the remaining \vfill
s on the page
\documentclass{beamer}
\def\itemsymbol{$\blacktriangleright$}
\let\svpar\par
\let\svitemize\itemize
\let\svenditemize\enditemize
\let\svitem\item
\let\svcenter\center
\let\svendcenter\endcenter
\let\svcolumn\column
\let\svendcolumn\endcolumn
\def\newitem{\renewcommand\item[1][\itemsymbol]{\vfill\svitem[##1]}}%
\def\newpar{\def\par{\svpar\vfill}}%
\newcommand\stretchon{%
\newpar%
\renewcommand\item[1][\itemsymbol]{\svitem[##1]\newitem}%
\renewenvironment{itemize}%
{\svitemize}{\svenditemize\newpar\par}%
\renewenvironment{center}%
{\svcenter\newpar}{\svendcenter\newpar}%
\renewenvironment{column}[2]%
{\svcolumn{##1}\setlength{\parskip}{\columnskip}##2}%
{\svendcolumn\vspace{\columnskip}}%
}
\newcommand\stretchoff{%
\let\par\svpar%
\let\item\svitem%
\let\itemize\svitemize%
\let\enditemize\svenditemize%
\let\center\svcenter%
\let\endcenter\svendcenter%
\let\column\svcolumn%
\let\endcolumn\svendcolumn%
}
\newlength\columnskip
\columnskip 0pt
\begin{document}
\stretchon
\begin{frame}{A few paragraphs (with stretching)}
As any dedicated reader can clearly see, the Ideal of practical reason is a representation of the things in themselves.
I have shown elsewhere, the phenomena should only be used as a canon for our understanding.
The paralogisms of practical reason are what first give rise to the architectonic of practical reason.
\end{frame}
\begin{frame}{Displayed Equation (with stretching)}
As any dedicated reader can clearly see, the ideal of practical
reason is a representation of the things in themselves
I have shown elsewhere, the phenomena should only be used as a canon for our understanding.
\[
x^2 +y^2 = z^2
\]
The paralogisms of practical reason are what first give rise to the architectonic of practical reason.
Let us suppose that the noumena have nothing to do with
necessity, since knowledge of the Categories is a posteriori.
\end{frame}
\begin{frame}{\textbackslash centering}
As any dedicated reader can clearly see, the ideal of practical
reason is a representation of the things in themselves
{\centering
BEGINNING CENTERING. I have shown elsewhere, the phenomena should only be used as a canon for our understanding.
The paralogisms of practical reason are what first give rise to the architectonic of practical reason. ENDING CENTERING.
}
Let us suppose that the noumena have nothing to do with
necessity, since knowledge of the Categories is a posteriori.
\end{frame}
\begin{frame}{center Environment (extra space before/after env)}
As any dedicated reader can clearly see, the ideal of practical
reason is a representation of the things in themselves
\begin{center}
BEGINNING \{CENTER\}. I have shown elsewhere, the phenomena should only be used as a canon for our understanding.
The paralogisms of practical reason are what first give rise to the architectonic of practical reason. ENDING \{CENTER\}.
\end{center}
Let us suppose that the noumena have nothing to do with
necessity, since knowledge of the Categories is a posteriori.
\end{frame}
\begin{frame}{itemize environment}
As any dedicated reader can clearly see, the Ideal of practical reason is a representation of the things in themselves.
Begin itemize now
\begin{itemize}
\item[$\bullet$] I have shown elsewhere, the phenomena should only be used as a canon for our understanding.
\item The paralogisms of practical reason are what first give rise to the architectonic of practical reason.
\end{itemize}
Let us suppose that the noumena have nothing to do with
necessity, since knowledge of the Categories is a posteriori.
\end{frame}
\begin{frame}{columns environment}
I have shown elsewhere, the phenomena should only be used as a canon for our understanding.
\columnskip 2ex%
\begin{columns}[totalwidth=\linewidth]
\begin{column}{.5\linewidth}
xxx
yyy
zzz
\end{column}
\begin{column}{.5\linewidth}
qqq
rrr
\end{column}
\end{columns}
The paralogisms of practical reason are what first give rise to the architectonic of practical reason.
Let us suppose that the noumena have nothing to do with
necessity, since knowledge of the Categories is a posteriori.
\end{frame}
\end{document}
Best Answer
A sort of nasty hack would be