我已仔细阅读了 etex 手册以了解 dimexpr 和 numexpr 的语法,但我的理解仍然有限......表达式“\dimexpr”在提到的手册中仅出现了 3 次,并且没有正式定义(我的意思是:这回答了我的问题)。
因此,详细来说,可以在网上找到这个宏:
\newcommand\dimtomm[1]{%
\strip@pt\dimexpr 0.352777778\dimexpr#1\relax\relax
}
转换毫米尺寸。问题是它似乎没有考虑到 #1 的初始单位...?事实上,我使用这个新命令,并将 zsavepos 发出的位置设置为 sp,它的工作方式就像我给新命令指定了 pt 尺寸一样!
关于维度,有一个更普遍的问题,我无法在文献(源书,...)和互联网中找到答案:当一个变量被定义为包含维度时,它是否附加了单位,或者只是一个数字,但带有标签“维度”?我猜...不是!因为 \strip@pt,但这与上面的 \dimtomm 的行为相矛盾(当然,在我看来)。
谁可以清楚地了解尺寸、坐标(zsavepos......)、如何在 sp 中添加具有 pt 尺寸的 zsavepos、dimexpr 功能等?
编辑为了更准确地回答我的问题,以免答案太笼统:我得到了一个点的 zsavepos,并且可以访问 sp 中的长度 x 和 y。然后我想使用类似以下方法在绘图中绘制定位对象:
$(current page.north west) + (0cm,\xcoordtodim{\zposy{pointA}})$
所以我面临两种不同类型的问题:
1)我希望 \xcoordtodim 返回一个 dim,但显然,以我目前的知识我无法做到这一点......
2) \xcoordtodim 添加具有给定长度(通常以 pt 表示)的点(以 sp 为单位)的 zposy:这是与 \dimtomm 和 \dimexpr 相关的“混合”单位的问题……
答案1
尺寸不以单位存储(实际上它们始终以整数形式存储,以sp
单位表示)。设置长度时使用的任何单位(如果使用单位)都\the
将使用单位显示长度pt
。
不使用任何明确单位的设置包括
\setbox0\hbox{abc} \dimen0=\wd0