我正在使用由用户121799来源于贡萨洛·梅迪纳(主要代码在第一个链接中给出,该宏取description
enumitem包中定义的环境的标签文本,计算文本的宽度,并labelwidth
根据宽度估算进行调整,其中align=parleft
在原代码中添加):
\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}[
align=parleft,
leftmargin=\dimexpr\widest+0.5em\relax,
labelindent=0pt,
labelwidth=\widest]
\BODY
\end{description}%
}
\makeatother
我对宽度估计部分很好奇:
\@tempdima{\textbf{##1}}
如果##1
包含手动换行符,代码将无法正常工作;它只是忽略\\
宏,可以通过以下代码看到:
\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 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}
估计带有换行符的段落宽度的最简单的方法是什么?
答案1
如果要测量某些可能涉及手动换行的文本的宽度,请使用表格而不是段落(绝对不是\hbox
)
##1
在\begin{tabular}[t]{@{}l@{}}##1\end{tabular}
两种情况下您都可以替换。