使用 siunitx 处理 SageTeX 的数值输出

使用 siunitx 处理 SageTeX 的数值输出

以下哪三种方法可以正确处理 sagetex 的数值输出siunitx?以及如何正确地执行此操作?

\documentclass{article}
\usepackage{sagetex,siunitx,mathtools}
\begin{document}
    \begin{sagesilent}
        from sage.calculus.calculus import at
        f(x) = exp(x) * sin(2*x)
        out1 = r"\num{%f}"%(numerical_approx(diff(f(x),x,2).subs(x=2))
        out2 = numerical_approx(diff(f(x),x,2).subs(x=2))
    \end{sagesilent}
    %\num[round-precision=2]{numerical_approx(diff(f(x),x,2).subs(x=2)} or 
    \sagestr{out1} or 
    %\num[round-precision=3]{out2}
\end{document}

答案1

在你给出的 3 种方法中,只有\sagestr{out1}一种有成功的机会。这是因为它有 3 个步骤的编译过程:首先运行的是 LaTeX并且编译时必须没有错误,第二个是 Sage,第三个是 LaTeX,将 Sage 结果替换为 LaTeX 代码。粗体部分解释了为什么其他 2 种方法无法按原样工作(expl3我认为使用代码是可行的,因为之前的一些问题中出现了这种情况。请参阅 frougon 的回答这里例如)。第一次运行 LaTeX 代码时,给出的是,\num[round-precision=2]{numerical_approx(diff(f(x),x,2).subs(x=2)}它会抛出一个错误,因为 Sage 还没有运行,所以尝试在其上运行 LaTeX 是没有意义的。同样\num[round-precision=3]{out2},Sage 还没有运行,sagesilent所以现在您要尝试处理 out2,它不是一个数字。使用第一次使用 LaTeX 时给出的代码,文档为空。第二次运行 Sage 并out1 = r"\num{%f}"%(numerical_approx(diff(f(x),x,2).subs(x=2))进行计算。第三次运行并sagestr进行处理,获取所表示的字符串out1并对其进行排版。由于您已经加载了siunitx包,因此它会编译而没有错误。对我来说没有意义的是要siunitx格式化您的数字,而没有它就可以完成。这使得在 Sage 中有一个数字(例如 4.2499999995)成为可能,将其放入 a 中\num作为 4.25 并四舍五入为 4.3。您可以只使用 Sage 来处理数字格式。

以下是对您的代码的修改,以说明一些可能性:

\documentclass{article}
\usepackage{sagetex,siunitx,mathtools}
\begin{document}
\begin{sagesilent}
    from sage.calculus.calculus import at
    f(x) = exp(x)*sin(2*x)
    out = r"%f"%(n(diff(f(x),x,2).subs(x=2)))
    out1 = r"%4.2f"%(n(diff(f(x),x,2).subs(x=2))) 
    out2 = r"%f"%(n(diff(f(x),x,2).subs(x=2),digits=5))
    out3 = r"\num{%f}"%(n(diff(f(x),x,2).subs(x=2)))
\end{sagesilent}
\noindent    \sagestr{out} is the number with all its float digits or\\
\sagestr{out1} is the number with least 4 spaces, 2 digits for the decimal or\\ 
\sagestr{out2} there are 5 significant digits for float length number or\\
\sagestr{out3} puts the full float into macro for processing.
\end{document}

Cocalc 的输出是: 在此处输入图片描述

尝试更改out1 = "%4.2f"%(n(diff(f(x),x,2).subs(x=2)))f"%(n(diff(f(x),x,2).subs(x=2)))out1 = r"%4.4f"%(n(diff(f(x),x,2).subs(x=2))),你会看到数字被四舍五入。在%4.2f数字中,如 1/2 将变成 .50(占用 3 个空格),前面会多一个空格。这可以用作我的触发表以获得数据的对齐。

编辑:我忘了提两件事。第一,它n()numerical_approximation()。参见这里在文档中(靠近顶部)。第二个是解决代码中的错误。当我在 Cocalc 中运行它时,我看到: 在此处输入图片描述

错误告诉我它与行有关out2 = numerical_approx(diff(f(x),x,2).subs(x=2)),由于^指向开头,我怀疑是该行之前的行。当我单击行末时,它会以绿色显示 last与from)匹配。这意味着您缺少一个括号来与from匹配。将您的代码更改为,它将运行。((diff((numout1 = r"\num{%f}"%(numerical_approx(diff(f(x),x,2).subs(x=2)))

相关内容