请考虑以下示例:
\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 最终用户。)