为什么 \dim_eval:n 没有返回适当的结果并且行为怪异?

为什么 \dim_eval:n 没有返回适当的结果并且行为怪异?

我只需除以 即可300pt得到5mm结果,无论是pt还是mm单位。但我得到的是其他结果。

\documentclass[varwidth]{standalone}
\usepackage{expl3}
\begin{document}
  \ExplSyntaxOn
    % following is 60.0ptmm (which is 300/5,
    %  not to mention silly units; ridiculous)
    \dim_eval:n{300pt/5mm}\\

    % following is 14.22636pt (I guess/hope it's correct
    %  conversion of 5mm to pt units)
    \dim_eval:n{5mm}\\

    % following is 21.42857pt (which is 300/14,
    %  not 300/14.22636)
    %   followed by .22636pt (decimal of 14.22636pt;
    %    which is also ridiculous)
    \dim_eval:n{300pt/14.22636pt}
  \ExplSyntaxOff
\end{document}

当用毫米除以内部点时,如何获得正确的pt单位结果(如果答案能够显示单位结果,mm将不胜感激)\dim_eval:n

答案1

\dim_eval:n使用 ε-TeX\dimexpr进行计算,\dimexpr不进行浮点运算;它只能用整数除以维度。当你这样做时,你会得到

\dim_eval:n{300pt/5mm}

实际上是

\dim_eval:n{300pt/5}mm

(因此被称为“愚蠢的单位”),并且

\dim_eval:n{300pt/14.22636pt}

你实际上正在做

\dim_eval:n{300pt/14}.22636pt

这正是您所看到的输出。

使用\fp_to_dim:n(或\fp_to_decimal:n如果您不想要单位)。对于expl3早于2019 年 5 月 23 日您需要将分母放在括号内,以便将单位与数字联系起来。在较新的版本中,乘法通过并置(例如, 5mm2pi)比显式乘法和除法具有更高的优先级,因此单位在除法之前转换:

\documentclass[varwidth]{standalone}
\usepackage{expl3}
\begin{document}
  \ExplSyntaxOn
    \fp_to_dim:n{300pt/5mm}\\
    % \fp_to_dim:n{300pt/(5mm)}\\
    \fp_to_dim:n{5mm}\\
    % \fp_to_dim:n{300pt/(14.22636pt)}
    \fp_to_dim:n{300pt/14.22636pt}
  \ExplSyntaxOff
\end{document}

在此处输入图片描述

答案2

将两个长度的比率表示为数字比表示为长度更自然:

在此处输入图片描述

\documentclass[varwidth]{standalone}
\usepackage{expl3}
\begin{document}
  \ExplSyntaxOn

    \fp_eval:n{(300pt)/(5mm)}

   \ExplSyntaxOff
\end{document}

相关内容