TeX 在内部以缩放点为单位存储尺寸,但操作\the
会扩展为以点为单位的相应值。我们能否避免转换并获取更精确的“原始”值?
答案1
$ tex \\relax
This is TeX, Version 3.14159265 (TeX Live 2014) (preloaded format=tex)
*
(Please type a command or say `\end')
*\dimen0=3.5in
*\showthe\dimen0
> 252.94499pt.
<*> \showthe\dimen0
?
*\count0=\dimen0
*\showthe\count0
> 16577003.
<*> \showthe\count0
dimen 值只是解释为的整数值,sp
因此您可以执行上述操作(尽管实际上我认为 tex 显示的分数值并没有精度损失pt
,它总是显示足够的小数位来确定精确的值sp
)
答案2
要按单位打印长度sp
,定义
\newcommand\lengthinsp[1]{\number\dimexpr#1\relax sp}
这将接受\lengthinsp{\parindent}
(带有寄存器)甚至\lengthinsp{3.5in}
。
例子:
\documentclass{article}
\newcommand\lengthinsp[1]{\number\dimexpr#1\relax sp}
\begin{document}
\lengthinsp{\parindent}
\lengthinsp{3.5in}
\end{document}
这是完全可扩展的。如果你不想依赖 e-TeX,则需要一个不可扩展的版本:
\makeatletter
\newcommand{\lengthinsp}[1]{%
\begingroup
\dimen@=#1\relax
\number\dimen@ sp%
\endgroup
}
\makeatother