각 레벨에서 가장 넓은 라벨 너비를 자동으로 찾는 "중첩 가능한" 설명 환경은 무엇입니까?

각 레벨에서 가장 넓은 라벨 너비를 자동으로 찾는 "중첩 가능한" 설명 환경은 무엇입니까?

가장 넓은 레이블에 따라 자동으로 설명 목록의 레이블 너비를 조정하는 방법을 발견하게 되어 기쁩니다.이 질문에 대한 Gonzalo Medina의 답변). Gonzalo Medina가 작성한 코드는 다음과 같습니다.

\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}

여기에 이미지 설명을 입력하세요 하지만 이 환경을 "중첩 가능"하게 만드는 것이 가능한지 궁금합니다. 단순히 "설명" 또는 "열거"처럼 중첩하려고 하면 작동하지 않았습니다.

\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}

특히:

(1) 각 목록/중첩 목록이 해당 특정 목록에서 가장 넓은 레이블의 너비와 동일한 자체 레이블 너비를 갖기를 원합니다. (상위 목록의 레이블이나 중첩된 목록의 레이블은 고려하지 않음) ); 그리고

(2) 각 목록/중첩 목록에 대해 레이블 정렬을 변경할 수 있기를 원합니다(예: "align=left"와 "align=right" 중에서 선택할 수 있음).

여러 환경을 정의해야 하는 것은 괜찮습니다(문서에 얼마나 많은 중첩 수준이 포함될지 지정할 필요가 없는 한(즉, 프로세스가 자동화되는 한)). 나의 주요 목표는 이 작업을 자동으로 수행하는 것입니다.

답변1

여기에 이미지 설명을 입력하세요

\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}

관련 정보