l3fp“数字太大”错误

l3fp“数字太大”错误

请考虑以下示例:

\documentclass{article}

\usepackage{pstricks-add}
\usepackage{expl3}

\ExplSyntaxOn
  \cs_new_eq:NN \calc \fp_eval:n
\ExplSyntaxOff

\newcommand*\SideLength[1]{\calc{sqrt(#1)}}
\newcommand*\Angle[1]{\calc{asin(1/sqrt(#1))}}

\begin{document}

\begin{pspicture}(-2.9,-3.5)(4.5,2.2)
  \multido{\iA = 2+1, \iB = 1+1}{16}{%
    \psRelLine[angle = \Angle{\iA}](0,0)(2,0){\SideLength{\iB}}{A}}
\end{pspicture}

\end{document}

编译时,我收到错误

! Number too big.
<argument> 7853981633
                     974483
l.17 ...ngle{\iA}](0,0)(2,0){\SideLength{\iB}}{A}}

我该如何解决?

答案1

您正在将完整的数字集从l3fp传递回pstricks,但这太多了!(LaTeX3 FPU 符合 IEEE 标准,因此可以以 16 位精度工作。)与许多 TeX 包一样,pstricks这里的 期望数字不超过 TeX 接受的 位数\number。可能最简单的解决方法是在 FPU 内舍入:

\newcommand*\Angle[1]{\calc{round(asin(1/sqrt(#1)),5)}}

或者

\ExplSyntaxOn
  \cs_new:Npn \calc #1 { \fp_eval:n { round ( #1 , 5 ) } }
\ExplSyntaxOff

取决于您的使用情况。(五位小数可能足以传回给大多数 TeX 最终用户。)

相关内容