为什么 mathtools 和 Gonzalo 的自动调整描述环境解决方案之间存在冲突?

为什么 mathtools 和 Gonzalo 的自动调整描述环境解决方案之间存在冲突?

Gonzalo Medina 提供一个巧妙的解决方案到 ”labelwidth根据最宽的标签自动设置描述列表?“(目标是定义一个description环境,其中项目文本自动缩进到最宽标签的宽度。)

我可以单独复制它的成功,但当我将它合并到我的标准软件包中时,它不再产生所需的结果。通过排除法,我发现只需加载该mathtools软件包就足以导致问题。

我不知道从哪里开始寻找冲突或解决方法,但我希望更有经验的人,特别是有经验的人mathtools,能够很快发现它。

下面是直接来自 Gonzalo 解决方案的 MWE,只是我插入了注释掉的\usepackage{mathtools}。 (我尝试了加载顺序mathtools,但没有什么能解决问题。)

如果没有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}

在此处输入图片描述

相关内容