pythontex + sage 预解析

pythontex + sage 预解析

我正在尝试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。所有内容都已预先解析。如果您下载最新版本,并使用 加载pythontexusefamily=sage您将可以访问sagecodesageblocksageverbatim环境,以及相应的命令,外加一个\sage命令。默认情况下,\sage命令通过函数发送其参数latex(),以便您获得格式化的输出。这可以通过修改实用程序类格式化函数 来更改。将来,我可能会允许以或 的pytex.formatter()形式访问实用程序类,但目前我坚持使用以避免与 混淆sagetexpytexpytexsagetex 包裹。如果您遇到任何错误或缺少的功能,请在 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}

相关内容