Gonzalo Medina 提供一个巧妙的解决方案到 ”labelwidth
根据最宽的标签自动设置描述列表?“(目标是定义一个description
环境,其中项目文本自动缩进到最宽标签的宽度。)
我可以单独复制它的成功,但当我将它合并到我的标准软件包中时,它不再产生所需的结果。通过排除法,我发现只需加载该mathtools
软件包就足以导致问题。
我不知道从哪里开始寻找冲突或解决方法,但我希望更有经验的人,特别是有经验的人mathtools
,能够很快发现它。
下面是直接来自 Gonzalo 解决方案的 MWE,只是我插入了注释掉的\usepackage{mathtools}
。 (我尝试了加载顺序mathtools
,但没有什么能解决问题。)
\documentclass{article}
\usepackage{enumitem}
\usepackage{environ}
%\usepackage{mathtools}
\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}
答案1
加载后,长度\widest
会被“重置”。这实际上不是由 触发的mathtools
,而是由 触发的calc
,由 加载mathtools
,如中所述这个很好的答案。那么解决这个问题就很容易了:使用=
而不是 来设置距离\setlength
。
\documentclass{article}
\usepackage{enumitem}
\usepackage{environ}
\usepackage{mathtools}
\newlength\widest
\makeatletter
\NewEnviron{ldescription}{%
\vbox{%
\global\widest=0pt%
\def\item[##1]{%
\settowidth\@tempdima{\textbf{##1}}%
\ifdim\@tempdima>\widest\relax
\global\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}