\def 带有参数的 sqrt 变量

\def 带有参数的 sqrt 变量

我尝试使用 sqrt 命令定义变量但无法打印结果。

\def \radius {sqrt(4^2+2^2)}
\draw (4,3) node [right] {$The radius is \radius for x=4, y=2$};

\draw 显示“Theradiusissqrt(4^2+2^2)forx=4,y=2”而不是“The radius is 4.47 for x=4, y=2”。

另外,我尝试使用如下所示的传入函数来 \def 变量:

\def \my_radius#1#2 {sqrt(#1^2+#2^2)}   % r=4.47
\draw (4,0) node [right] {$My_radius is \my_radius{4}{2}\ for x=4, y=2$};

它没有显示结果。这两个示例的正确代码是什么?顺便问一下,我正在使用 TeXnicCenter IDE,如何在不使用 \draw 的情况下进行调试/打印?

答案1

expl3

\documentclass[tikz,border=5mm]{standalone}
\begin{document}
\ExplSyntaxOn
\NewDocumentCommand \radius { m m }{
    The~radius~is~  
    $\fp_eval:n {round(sqrt(#1^2+#2^2),2)}$~
    for~$x=#1$,~$y=#2$
    }
\ExplSyntaxOff
\begin{tikzpicture}
    \draw (4,3) node [right] {\radius{4}{2}};
\end{tikzpicture}
\end{document}

在此处输入图片描述

使用pgf,在pgfmanual文档部分 94.3.8 杂项函数中

\documentclass[tikz,border=5mm]{standalone}
\begin{document}
\begin{tikzpicture}
    \draw (4,3) node [right] {The radius is $\pgfmathparse{veclen(4,2)}\pgfmathresult$ for $x=4$, $y=2$ };
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

您可以使用apnum包来评估表达式。以下示例以纯 TeX 格式编写:

\input tikz
\input apnum

\apFRAC=2
\evaldef\radius{\SQRT{4^2+2^2}}

\tikzpicture
\draw (4,0) node [right] {The radius is \radius\ for $x=4, y=2$};
\endtikzpicture

\bye

在 OpTeX 中,您可以使用\expr宏,它通过 Lua 来评估表达式。

\edef\radius{\expr[2]{math.sqrt(4^2+2^2)}}

The radius is \radius\ for $x=4, y=2$.

\bye

您也可以使用“变量”\x及其\y变量值:

\def\my_radius{\expr[2]{math.sqrt(\x^2+\y^2)}}

\def\x{4} \def\y{2}
The radius is \my_radius\ for $x=\x, y=\y$.
% prints: The radius is 4.47 for x = 4, y = 2.

\def\x{7} \def\y{1}
The radius is \my_radius\ for $x=\x, y=\y$.
% prints: The radius is 7.07 for x = 7, y = 1.

\bye

请注意,OpTeX 允许\my_radius直接定义控制序列。另一方面,如果你在 LaTeX 中说,那么你定义了一个带有强制分隔符的\def\my_radius宏。这不是你想要的。\my_radius

答案3

使用 2023 年 10 月发布的 LaTeX,您可以定义自己的\fpeval计算函数。

\documentclass{article}
\usepackage{tikz}

\ExplSyntaxOn
\fp_new_function:n { pythadd }
\fp_set_function:nnn { pythadd } { a,b } { sqrt(a^2+b^2) }
\ExplSyntaxOff

\newcommand{\radius}[2]{%
  The radius is $\fpeval{round(pythadd(#1,#2),2)}$
  for $x=#1$ and $y=#2$%
}

\begin{document}

\begin{tikzpicture}
  \draw (0,0) circle [radius=\fpeval{pythadd(4,2)}mm];
  \draw (1,0) node [right] {\radius{4}{2}};
\end{tikzpicture}

\end{document}

在以前的版本中,你可以用宏执行相同的操作

\documentclass{article}
\usepackage{tikz}

\newcommand{\pythadd}[2]{sqrt((#1)^2+(#2)^2)}

\newcommand{\radius}[2]{%
  The radius is $\fpeval{round(\pythadd{#1}{#2},2)}$
  for $x=#1$ and $y=#2$%
}

\begin{document}

\begin{tikzpicture}
  \draw (0,0) circle [radius=\fpeval{\pythadd{4}{2}}mm];
  \draw (1,0) node [right] {\radius{4}{2}};
\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容