我如何定义一个由不同变量计算出来的变量,如下所示:
\newcommand \varA {3}
\newcommand \varB {2}
\newcommand \varC {\varB*\varA}
因此\varC
将包含6
而不是3*2
。这很重要,因为\varC
将在文本和 pgfplot 中用作变量。
答案1
如果你的目的是使用浮点数,pgfmath
那就不好了。看下面的例子。
\documentclass{article}
\usepackage{xfp}
\usepackage{pgfmath}
\ExplSyntaxOn
\NewDocumentCommand{\setvar}{mm}
{
\fp_zero_new:c { l_flobue_var_#1_fp }
\fp_set:cn { l_flobue_var_#1_fp } { #2 }
}
\NewExpandableDocumentCommand{\usevar}{m}
{
\fp_use:c { l_flobue_var_#1_fp }
}
\ExplSyntaxOff
\begin{document}
\section{PGF}
\pgfmathsetmacro\varA{123.45}
\pgfmathsetmacro\varB{0.012345}
\pgfmathsetmacro\varC{\varA/\varB}
\verb|\varA| is \varA \\
\verb|\varB| is \varB \\
\verb|\varC| is \varC
\section{xfp}
\setvar{A}{123.45}
\setvar{B}{0.012345}
\setvar{C}{\usevar{A}/\usevar{B}}
\verb|A| is \usevar{A} \\
\verb|B| is \usevar{B} \\
\verb|C| is \usevar{C}
\setvar{B}{0.0012345}
\setvar{C}{\usevar{A}/\usevar{B}}
\noindent
Now \verb|C| is \usevar{C}; try with pgfmath
\end{document}
xfp
采用\setvar
和的方法有几个优点\usevar
:
- 更高的准确性
- 范围更大
- 不
\pgfmathsetmacro
检查所定义的命令 - 更大的灵活性
第四点值得举个例子:如果你需要使用上一次除法的结果,你可以简单地这样做
\fpeval{\usevar{A}/\usevar{B}}
不需要设置另一个变量来获取结果可扩展。