根据最宽标签设置描述列表“labelwidth”(加载数学工具)

根据最宽标签设置描述列表“labelwidth”(加载数学工具)

我想将描述的宽度自动设置为最宽。解决方案是根据最宽的标签自动设置描述列表“标签宽度”? 对我有用,除了如果我已经加载了 mathtools 包。

以下 MWE 与 Gonzalo 的相同,但加载了 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}

如果我删除 mathtools,它就可以正常工作。但我需要 mathtools。

答案1

我不明白问题的原因,但出于某种原因,当mathtools加载时,对\widest内部的更改\vbox{...}仅在本地进行,而不会全局传播(您可以通过\typeout{...}在适当的位置添加一些命令来查看这一点)。 一个修复方法是使用\newdimen而不是newlength创建\widest。 使用尺寸而不是长度,您可以得到您想要的。

以下是修改后的工作 MWE:

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

\newdimen\widest
\makeatletter
\NewEnviron{ldescription}{%
  \global\widest=0pt%
  \vbox{%
    \def\item[##1]{%
      \settowidth\@tempdima{\textbf{##1}}%
      \ifdim\@tempdima>\widest\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}

相关内容