Dealing with long description environment items
Using the enumitem
package with beamer
is not a good idea; for example, just by loading enumitem
, the default beamer font and color specifications for description
are lost; moreover \setbeamercolor
and \setbeamerfont
will have no effect on description item
; even worst, the enumitem package will also interfere with the beamer
layout for itemize
and enumerate
; in fact, it will produce errors for the enumerate
environment (See example at the bottom).
In the following example I defined a Ldescription
environment based on the beamer definition of standard description
; since the new definition follows the "beamer way", it will behave as expected (it's overaly aware, for exampe, and respects the color and font templates) and will give you the desired layout (feel free to adjust the lengths according to your needs):
\documentclass{beamer}
\usepackage{lipsum}
\makeatletter
\def\Ldescription{%
\@ifnextchar[{\beamer@testforospec}{\beamer@descdefault\beamer@descriptionwidth\@@Ldescription}%
}
\def\beamer@testforospec[{\@ifnextchar<{\beamer@scandefaultospec[}{\@Ldescription[}}%
\def\beamer@scandefaultospec[#1]{\def\beamer@defaultospec{#1}\Ldescription}
\def\@Ldescription[#1]{%
\setbox\beamer@tempbox=\hbox{\def\insertdescriptionitem{#1}
\usebeamertemplate**{description item}}%
\beamer@descdefault\wd\beamer@tempbox\@@description%
}%
\def\@@Ldescription{%
\beamer@descdefault35pt%
\list
{}
{\labelwidth\beamer@descdefault\leftmargin2.8em\let\makelabel\beamer@Ldescriptionitem}%
\beamer@cramped%
\raggedright
\beamer@firstlineitemizeunskip%
}
\def\endLdescription{\ifhmode\unskip\fi\endlist}
\long\def\beamer@Ldescriptionitem#1{%
\def\insertdescriptionitem{#1}%
\hspace\labelsep{\parbox[b]{\dimexpr\textwidth-\labelsep\relax}{%
\usebeamertemplate**{description item}%
}}}
\makeatother
\begin{document}
\begin{frame}
\begin{Ldescription}
\item<1->[very very very very long item] \lipsum[2]
\item<2,4>[short titem] description 2
\item<3->[another very very very very long item] description 3
\item<4->[short item] description 4
\end{Ldescription}
\end{frame}
\end{document}
An image of the fourth frame:
Why enumitem shouln't be used with beamer
Processing the following code:
\documentclass{beamer}
%\usepackage{enumitem}
\setbeamercolor{description item}{fg=olive!80!black}
\setbeamerfont{description item}{size=\footnotesize}
\begin{document}
\begin{frame}
\begin{description}
\item[item] description
\end{description}
\begin{itemize}
\item description
\end{itemize}
\end{frame}
\end{document}
produces the following (expected) output:
Now uncomment-out the line loading enumitem
. reprocess and now you'll get the following undesired result:
Now, try this simple document:
\documentclass{beamer}
\usepackage{enumitem}
\begin{document}
\begin{frame}
\begin{enumerate}
\item test
\end{enumerate}
\end{frame}
\end{document}
and you'll receive:
! TeX capacity exceeded, sorry [grouping levels=255].
\labelenumi ->{
\labelenumi }
l.10 \end{frame}
! ==> Fatal error occurred, no output PDF file produced!
The moral is clear: enumitem
and beamer
a are incompatible. Perhaps using the loadonly
package option to create own lists could be safe:
\usepackage[loadonly]{enumitem}
You can use the great enumitem package for this. It's already defined as a style under the descriptions class with nextline
\documentclass{beamer}
\usepackage{enumitem}
\begin{document}
\begin{frame}
\begin{description}[style=nextline]
\item<1->[veryveryveryverylongitem] description 1
\item<2-3>[shortitem] description 2
\item<3->[shortitem2] description 3
\item<4->[shortitem3] description 4
\end{description}
\end{frame}
\end{document}
For the overlay specification declaration one can use
\documentclass{beamer}
\usepackage{enumitem}
\begin{document}
\begin{frame}
\beamerdefaultoverlayspecification{<+->}
\begin{description}[style=nextline]
\item[veryveryveryverylongitem] description 1
\item[shortitem] description 2
\item[shortitem] description 2
\item[shortitem] description 2
\end{description}
\beamerdefaultoverlayspecification{}
\end{frame}
\begin{frame}[fragile]
\begin{description}[style=nextline]
\item[Any overlay?] No overlay!
\item[Yes] I see them all...
\item[Can make the command] {\verb|\beamerdefaultoverlayspecification{<+->}|}
\item[something] shorter
\end{description}
\end{frame}
\end{document}
thanks to Marco Daniel, enumitem seems to be not that innocent to use in beamer. Also cmhughes' comment can be another option.