关于调用 xfp、Tikz、sqrt 和 ^2 的奇怪计算

关于调用 xfp、Tikz、sqrt 和 ^2 的奇怪计算

我们现在知道 (-3)^2+(-4)^2 的平方根是 25 的平方根,等于 5。然而,我们在调用 xfp 包和 Tikz 时收到一个奇怪的错误,提示:

\LaTeX3 错误:无效运算 sqrt(-25) 以下是代码:

\documentclass{standalone}
\usepackage{tikz}
\usepackage{xfp}
\begin{document}

\begin{tikzpicture}

\edef\u{-3};
\edef\v{-4};
\edef\w{\fpeval{sqrt(\fpeval{\u^2}+\fpeval{\v^2})}};

\node   at (0,0) {Ans=\fpeval{\w}};

\end{tikzpicture}
\end{document}

答案1

\u不是一个“变量”,而是一个宏,TeX 会对其进行扩展,这样你就得到了

\u^2-3^2-9

使用(\u)^2。顺便说一下

\edef\w{\fpeval{sqrt((\u)^2+(\v)^2)}}

效率更高。而且你不需要\fpeval{\w},只要就\w足够了。

答案2

运算顺序...指数运算优先于负数运算。因此,必须明确地(通过括号)对负数进行分组,以免 -3^2 被计算为 -9。

\documentclass{standalone}
\usepackage{tikz}
\usepackage{xfp}
\begin{document}

\begin{tikzpicture}

\def\u{(-3)};
\def\v{(-4)};
\edef\w{\fpeval{sqrt(\fpeval{\u^2}+\fpeval{\v^2})}};

\node   at (0,0) {Ans=\fpeval{\w}};

\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容