Sage 无法处理由 sagetex 创建的 .sagetex.sage 文件

Sage 无法处理由 sagetex 创建的 .sagetex.sage 文件

这是一个简单的.tex文件,它定义了一个 sage 函数p(n),该函数返回 2 的幂n

\documentclass{article}
\usepackage{sagetex}
\begin{document}

\begin{sagesilent}
def p(n):
    return 2**n
\end{sagesilent}

2 to the power of 50 equals $\sagestr{p(50)}$.

\end{document}

正如预期的那样,编译.tex文件会生成一个.sagetex.sage文件。但是,当我sage test.sagetex.sage在终端上运行时,我意外地收到了一条错误消息。

Processing Sage code for test.tex...
Code block (line 5) begin...end
Inline formula 0 (line 10)

**** Error in Sage code on line 10 of test.tex! Traceback follows.
Traceback (most recent call last):
  File "test.sagetex.sage.py", line 20, in <module>
    _st_.inline(_sage_const_0 , p(_sage_const_50 ))
  File "/usr/lib/python3/dist-packages/sagetex.py", line 122, in inline
    '}{{%\n' + s.rstrip() + '}{}{}{}{}}\n')
  File "sage/structure/element.pyx", line 493, in sage.structure.element.Element.__getattr__ (build/cythonized/sage/structure/element.c:4708)
    return self.getattr_from_category(name)
  File "sage/structure/element.pyx", line 506, in sage.structure.element.Element.getattr_from_category (build/cythonized/sage/structure/element.c:4820)
    return getattr_from_other_class(self, cls, name)
  File "sage/cpython/getattr.pyx", line 372, in sage.cpython.getattr.getattr_from_other_class (build/cythonized/sage/cpython/getattr.c:2619)
    raise AttributeError(dummy_error_message)
AttributeError: 'sage.rings.integer.Integer' object has no attribute 'rstrip'

**** Running Sage on test.sage failed! Fix test.tex and try again.

我的 TeX 代码有问题吗?编译文件的顺序是否不正确?我的 Sage 安装是否已损坏?

答案1

您使用了错误的函数。根据 SageTeX 官方手册:

\sage

\sage{<Sage code>}获取您提供的任何 Sage 代码,在其上运行 Sage 的 latex 函数,并将结果放入您的文档中。

\sagestr

\sagestr{<Sage code>}等同于\sage,但是不是在您提供的代码上运行 Sage 的 LaTeX 函数;它只是运行 Sage 代码并将结果拉入您的 LaTeX 文件中。这对于调用返回 LaTeX 代码的函数很有用;

因此这\sage是正确的选择。只需用 替换即可\sagestr。之后\sage只需再次编译.tex文件即可看到??用 替换1125899906842624

\documentclass{article}
\usepackage{sagetex}
\begin{document}

\begin{sagesilent}
def p(n):
    return 2**n
\end{sagesilent}

2 to the power of 50 equals $\sage{p(50)}$.

\end{document}

相关内容