在 LaTeX 中定义变量,其值包含数学运算符

在 LaTeX 中定义变量,其值包含数学运算符
\documentclass[a4paper,oneside,12pt]{book}
\begin{document}
    \def\s{(1/(2+sqrt(2)))}
    \s
\end{document}

我想创建一个\s值为 的变量1/(2+sqrt(2))。LaTeX 无法自动计算\s0.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}

在此处输入图片描述

相关内容