我尝试使用 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}