这是一个简单的.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}