I would do this a bit differently. Rather than using a list environment for the first occurrences of the animal names, I would use it for the main description and use references for the initial list. One advantage of this is that TeX will issue warnings if you forget to actually say anything about any of the animals in your initial list. But mostly, this just seems to me the more natural way to do it since it is the descriptions which you really want formatted as a list.
In the following, I use enumitem
to define a new list. I then define a new environment animals
for the main list of descriptions, and a new command \animalref
to use for the initial listing. The usual \item
is redefined within the animals
environment in order to accept a tag (the group of animals) which is used to automatically set a label we can reference in the definition of \animalref
. The upshot of this is as follows:
- environment
animals
takes one optional argument. If the optional argument is used, its contents are basically passed to enumitem
's enumerate
environment. You only need to worry about this if you want to change something about the list format.
\item[]{}
within animals
only takes one optional and one mandatory argument. The optional one is the usual optional argument for \item
. The mandatory one is a tag such as dogs
or cats
.
\animalsref{}
takes one mandatory argument. This argument is intended to correspond to the tag set for the item in the main list e.g. dogs
or cats
. It will typeset the relevant item label followed by the tag itself. So you'll get e.g. '(i) dogs' or '(ii) cats'. If you pass a tag which does not occur in the main list, you'll get question marks e.g. '?? rabbits' and TeX will output a warning.
This sounds a lot more complicated than it really is.
\documentclass{article}
\usepackage{enumitem, xparse, kantlipsum}
\newlist{animalslist}{enumerate}{1}
\setlist[animalslist]{label=(\roman*)}
\global\let\olditem\item
\NewDocumentCommand\animalsitem { o m }{%
\IfNoValueTF{#1}{%
\olditem\label{animals:#2}}{%
\olditem[#1]\label{animals:#2}}%
}
\newenvironment{animals}[1][]{%
\let\item\animalsitem
\begin{animalslist}[#1]%
}{%
\end{animalslist}%
}
\newcommand*\animalsref[1]{\ref{animals:#1} #1}
\begin{document}
Among pets the most common ones are \animalsref{dogs}, \animalsref{cats} and \animalsref{rabbits}.
\begin{animals}
\item{dogs} Some people consider dogs very nice animals. However they need to be walked several times a day and tend to eat your shoes.
\kant[1]
\item{cats} Cats are nicer animals but need to be worshipped several times a day and tend to walk over your keyboard.
\kant[2]
\end{animals}
\end{document}
As you can see, '??' show that I've not remembered to actually say anything about rabbits, while the cats and dogs get their appropriate labels. Compile twice to stabilise the references.

enumerate
. Please check this for understand it better. And please add an MWE to your questions.