Ambiente de descrição "aninhado" que encontra automaticamente a largura de etiqueta mais larga em cada nível?

Ambiente de descrição "aninhado" que encontra automaticamente a largura de etiqueta mais larga em cada nível?

Estou animado por ter encontrado uma maneira de ajustar automaticamente a largura do rótulo para uma lista de descrição de acordo com o rótulo mais largo (deA resposta de Gonzalo Medina a esta pergunta). Aqui está o código que Gonzalo Medina escreveu:

\documentclass{article}
\usepackage{enumitem}
\usepackage{environ}

\newlength\widest
\makeatletter
\NewEnviron{ldescription}{%
  \vbox{%
    \global\setlength\widest{0pt}%
    \def\item[##1]{%
      \settowidth\@tempdima{\textbf{##1}}%
      \ifdim\@tempdima>\widest\global\setlength\widest{\@tempdima}\fi%
    }%
    \setbox0=\hbox{\BODY}%
  }
  \begin{description}[
    leftmargin=\dimexpr\widest+0.5em\relax,
    labelindent=0pt,
    labelwidth=\widest]
  \BODY
  \end{description}%
}
\makeatother

\begin{document}

\begin{ldescription}
\item[Short] text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text
\item[A really really long label] text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text
\end{ldescription}

\begin{ldescription}
\item[Short] text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text
\item[A medium label] text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text
\end{ldescription}

\end{document}

insira a descrição da imagem aqui Eu queria saber, porém, se é possível tornar esse ambiente "aninhável". Simplesmente tentar aninhá-lo como eu faria com "descrição" ou "enumeração" não funcionou:

\documentclass{article}
\usepackage{enumitem}
\usepackage{environ}

\newlength\widest
\makeatletter
\NewEnviron{ldescription}{%
  \vbox{%
    \global\setlength\widest{0pt}%
    \def\item[##1]{%
      \settowidth\@tempdima{\textbf{##1}}%
      \ifdim\@tempdima>\widest\global\setlength\widest{\@tempdima}\fi%
    }%
    \setbox0=\hbox{\BODY}%
  }
  \begin{description}[
    leftmargin=\dimexpr\widest+0.5em\relax,
    labelindent=0pt,
    labelwidth=\widest]
  \BODY
  \end{description}%
}
\makeatother

\begin{document}

\begin{ldescription}
\item[Short] text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text
\item[A label with a nested list] I would like a nested list here. 
    \begin{ldescription}
        \item[Short] text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text
        \item[A long label] text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    \end{ldescription}
\end{ldescription}

\end{document}

Particularmente:

(1) Gostaria que cada lista/lista aninhada tivesse sua própria largura de rótulo, igual à largura do rótulo mais largo dessa lista específica (sem levar em consideração qualquer rótulo de sua lista pai ou qualquer rótulo de uma lista aninhada nela ); e

(2) Eu gostaria de poder alterar o alinhamento dos rótulos (ou seja, poder escolher entre "align=left" e "align=right") para cada lista/lista aninhada.

Eu não me importaria de definir vários ambientes (desde que não precise especificar quantos níveis aninhados o documento terá (ou seja, desde que o processo seja automatizado)); meu objetivo principal é fazer isso automaticamente.

Responder1

insira a descrição da imagem aqui

\documentclass{article}
\usepackage{enumitem}
\usepackage{environ}

\newlength\widest
\let\saveditem\item
\makeatletter
\NewEnviron{ldescription}{%
  \dimen0=\widest
  \let\item\saveditem
  \vbox{%
    \global\setlength\widest{0pt}%
    \def\item[##1]{%
      \settowidth\@tempdima{\textbf{##1}}%
      \ifdim\@tempdima>\widest\global\setlength\widest{\@tempdima}\fi%
    }%
    \setbox0=\vbox{\BODY}%
  }
  \begin{description}[
    leftmargin=\dimexpr\widest+0.5em\relax,
    labelindent=0pt,
    labelwidth=\widest]
  \BODY
  \end{description}%
  \global\widest\dimen0
}
\makeatother

\begin{document}

\begin{ldescription}
\item[Short] text text text text text text text text text text text
  text text text text text text text text text text text text text
  text text text text text text text text
\item[A label with a nested list] I would like a nested list here. 
    \begin{ldescription}
    \item[Short] text text text text text text text text text text
      text text text text text text text text text text text text text
      text text text text text text text text text
    \item[A long label] text text text text text text text text text
      text text text text text text text text text text text text text
      text text text text text text text text text text
    \end{ldescription}
\end{ldescription}

\end{document}

informação relacionada