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