![为什么在 etoolbox 的 \deflength 中使用 \glueexpr 而不是 \dimexpr](https://linux22.com/image/309376/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%9C%A8%20etoolbox%20%E7%9A%84%20%5Cdeflength%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20%5Cglueexpr%20%E8%80%8C%E4%B8%8D%E6%98%AF%20%5Cdimexpr.png)
请考虑以下片段etoolbox
:
\newrobustcmd*{\deflength}[2]{%
\ifundef{#1}
{\etb@noglobal\etb@err@nolen{#1}}%
{#1\glueexpr#2\relax}}
也许我不理解\numexpr
、\dimexpr
和(e-TeX 表达式)之间的区别,但我怀疑在的定义中的使用就像在的定义中的使用\glueexpr
一样, 有人可以解释一下区别吗?\muglueexpr
\dimexpr
\deflength
\numexpr
\defcounter
答案1
以下内容应回答该问题:
\documentclass{article}
\newlength{\mylenA}
\newlength{\mylenB}
\begin{document}
\mylenA=5pt plus 2pt
\showthe\mylenA % \mylenA = 5pt plus 2pt
\setlength{\mylenB}{\mylenA}
\showthe\mylenB % \mylenB = 5pt plus 2pt
\setlength{\mylenB}{\dimexpr\mylenA}
\showthe\mylenB % \mylenB = 5pt (no glue)
\setlength{\mylenB}{\glueexpr\mylenA}
\showthe\mylenB % \mylenB = 5pt plus 2pt
\end{document}
输出.log
:
> 5.0pt plus 2.0pt.
l.7 \showthe\mylenA
> 5.0pt plus 2.0pt.
l.10 \showthe\mylenB
> 5.0pt.
l.13 \showthe\mylenB
> 5.0pt plus 2.0pt.
l.16 \showthe\mylenB
如果设置了使用长度,\dimexpr<len>
则会损失所有胶水。使用\glueexpr<len>
胶水会保留下来。