为什么在 etoolbox 的 \deflength 中使用 \glueexpr 而不是 \dimexpr

为什么在 etoolbox 的 \deflength 中使用 \glueexpr 而不是 \dimexpr

请考虑以下片段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>胶水会保留下来。

相关内容