我正在尝试pythontex
在 .tex 文档中使用 SAGE 计算。我知道存在一个sagetex
引擎可以满足我的用例,但是pythontex
的会话概念对我来说特别有用(有些计算很长,但不经常更改,因此拆分为会话对我来说很有意义)。
到目前为止,通过pythontex
以下方式运行可以很容易地让 pythontex 使用 SAGE 的 python:
pythontex --interpreter "python:sage -python" mainfile.tex
问题:SAGE 提供了一个preparse(string)
允许扩展语法的功能,例如以下不是合法的 python,但它是有效的 SAGE:
R.<x,y>=QQ[]
我怎么知道pythontex
我想预解析输入?
梅威瑟:
\documentclass{article}
\usepackage[pyfuture=none]{pythontex}
% Run with: pythontex --interpreter "python:sage -python" main
\begin{pythontexcustomcode}{py}
# This works, I am using SAGE's python.
from sage.all import *
x,y,z,s,t,u,v=var("x,y,z,s,t,u,v")
\end{pythontexcustomcode}
\begin{document}
\begin{pycode}
# I want to apply preparse() to every pycode:
s=preparse('R.<x,y> = QQ[]\na=1')
print "\\begin{verbatim}\n%s\\end{verbatim}" % s
\end{pycode}
\end{document}
答案1
我已经在开发版本中添加了 SAGEpythontex
支持GitHub。所有内容都已预先解析。如果您下载最新版本,并使用 加载pythontex
,usefamily=sage
您将可以访问sagecode
、sageblock
和sageverbatim
环境,以及相应的命令,外加一个\sage
命令。默认情况下,\sage
命令通过函数发送其参数latex()
,以便您获得格式化的输出。这可以通过修改实用程序类格式化函数 来更改。将来,我可能会允许以或 的pytex.formatter()
形式访问实用程序类,但目前我坚持使用以避免与 混淆sagetex
pytex
pytex
sagetex
包裹。如果您遇到任何错误或缺少的功能,请在 GitHub 上打开问题。
一旦我开始重构控制台系统,我将考虑添加 SAGE 控制台模拟,以便它可以扩展到其他语言。
这是一个简单的示例文档。
\documentclass{article}
\usepackage[usefamily=sage]{pythontex}
\begin{document}
\begin{sagecode}
f = 1 - sin(x)^2
\end{sagecode}
\[ \sage{f.simplify_trig()} \]
\[ \sage{f(x=pi/2)} \]
\[ \sage{integrate(f, x).simplify_trig()} \]
\end{document}