\documentclass[a4paper,oneside,12pt]{book}
\begin{document}
\def\s{(1/(2+sqrt(2)))}
\s
\end{document}
我想创建一个\s
值为 的变量1/(2+sqrt(2))
。LaTeX 无法自动计算\s
为0.29289321881
。如何在 LaTeX 中定义值包含数学运算符/数学函数的变量?
答案1
我建议使用\fpeval
,所以
\edef\s{\fpeval{(1/(2+sqrt(2)))}}
将存储
0.2928932188134525
在\s
。
但是,如果你有许多这样的常量,命名就变得很重要:例如,你不应该将其中\c
一个作为其中之一,因为你将重新定义基本的 LaTeX 命令,并且可能会出现非常奇怪的错误。一般规则是不是\def
除非您确切知道所定义的命令尚不存在,否则请使用。
我建议使用某种命名空间。
\documentclass{article}
\ExplSyntaxOn
% constant store
\NewDocumentCommand{\CS}{mm}
{% #1 = name, #2 = value
\ongky_constant_store:nn { #1 } { #2 }
}
% constant use
\NewExpandableDocumentCommand{\UC}{m}
{% #1 = name
\ongky_constant_use:n { #1 }
}
\cs_new_protected:Nn \ongky_constant_store:nn
{
\fp_gzero_new:c { g_ongky_constant_#1_fp }
\fp_gset:cn { g_ongky_constant_#1_fp } { #2 }
}
\cs_new:Nn \ongky_constant_use:n
{
\fp_use:c { g_ongky_constant_#1_fp }
}
\ExplSyntaxOff
\CS{s}{(1/(2+sqrt(2)))}
\begin{document}
\UC{s}
\fpeval{(1/\UC{s}-2)^2}
\end{document}