![如何扩展提取盒子的长度](https://linux22.com/image/330192/%E5%A6%82%E4%BD%95%E6%89%A9%E5%B1%95%E6%8F%90%E5%8F%96%E7%9B%92%E5%AD%90%E7%9A%84%E9%95%BF%E5%BA%A6.png)
我以为这个构造\wd\bopxcontrolsequence
是可扩展的。但在乱搞事情时,似乎并非如此。至少在下文中,代码表明\wd\aetmpbox
在 的定义中从未完全展开\aewidth
。
\documentclass{article}
\usepackage{pgffor}
\newsavebox\aetmpbox
\begin{document}
\def\aewidth{0pt}%%
\foreach \myitem in {first,a,a bit longer,shorter,very very very very very long}
{\savebox\aetmpbox{\myitem}%%
\ifdim\wd\aetmpbox>\aewidth\relax
\xdef\aewidth{\wd\aetmpbox}%%
\typeout{---> \detokenize\expandafter{\aewidth} :L: \myitem }%%
\else
\typeout{---> \detokenize\expandafter{\aewidth} :s: \myitem }%%
\fi
}
hello
\end{document}
我不想创建新的长度(无论出于什么原因)。我只想获取框的宽度值,并将其保存在宏中\aewidth
以供以后使用。
答案1
\wd
是不可扩展的原语;\aetempbox
是字符定义标记,所以它是不可扩展的。因此
\xdef\aewidth{\wd\aetmpbox}
完全等同于\def\aewidth{\wd\aetmpbox}
但是,\the
是可扩展的!
\xdef\aewidth{\the\wd\aetmpbox}
看\命令