I don't know of a pre-built package that allows you to do this, but if I correctly understand what you're after then it is achievable by combining a counter with custom commands and the hyperref
package. The first step is to create a new counter for the described items, and a pair of new commands to use in place of \item
and \ref
. In the preamble, put the following:
\newcounter{desccount}
\newcommand{\descitem}[1]{%
\item[#1] \refstepcounter{desccount}\label{#1}
}
\newcommand{\descref}[1]{\hyperref[#1]{#1}}
The new command \descitem
is to be used in place of \item
within a description
environment. It takes a single argument and creates an item labeled with it. It also increments the new counter, sets it as the current value for the \ref
command, and labels the location with the item's descriptor. The new command \descref
takes the same argument and makes a hyperlink reference to the label, displaying the argument instead of the counter's value.
The commands work together like this:
\begin{description}
\descitem{foo} foo is good
\descitem{bar} bar is bad
\end{description}
...
For good things (see, for example \descref{foo})...
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}
Best Answer
With the help of the enumitem package, it's straightforward to set different fonts and font shapes for the labels of items of varying hierarchical levels in a
description
list. The following MWE keeps the default for labels of level-1 description items (bold) but uses non-bold italics for the labels of level-2 description items. (If you wanted to use plain non-italics for the labels of level-2 description items, just leave off the\itshape
directive.) Hopefully you can find some combination of font shapes and weights which doesn't strike you as ugly...