在 LaTeX 中使用 Python 并访问其变量

在 LaTeX 中使用 Python 并访问其变量

我已经使用了python包将 Python 包含在我的 LaTeX 文档中,效果很好。

我正在尝试访问 Python 变量/计算外部\begin{python} ... \end{python},没有运气。

我的问题是:我可以吗?或者如何访问 LaTeX 中嵌入的 Python 代码中的变量/计算?

简单示例

\begin{python}
tdegc = 25.0
tdegf = (tdegc - 32.0)/1.0
print 'T in DegC is ', tdegc , ' in Deg F is ', tdegf
\end{python}

我的计算表明$\mbox{tdegf} = $ tdegf(这是的值tdegf

答案1

我玩了一下sagetex包(设计可以随机化的测试),我认为你应该研究一下其文档.sagetex允许您合并智者到您的 LaTeX 代码中。由于 Sage 基于 Python,因此您可以使用 运行 Python sagetex。有一个\sage命令可让您跳回到使用之前定义的变量,我认为这就是您关心的问题。您可以找到CTAN 上的一些示例。以下是精简示例:

\documentclass[10pt]{article} 
\usepackage{sagetex} 

\begin{document} 
\begin{sagesilent}%use sage without producing output
n, x = var('n x')
a = ZZ.random_element(-10,10)
while a == 0:
   a = ZZ.random_element(-10,10)
b = ZZ.random_element(-10,10)
c = ZZ.random_element(-10,10)
d = ZZ.random_element(2,9)
ratexp1 = (a*n)/(a*n+1)
ratexp2 = (d**(d*n-1))/((d+1)**n)
ratexp3 = 1/(a*x+b)
deriv1 = diff(ratexp3,x,1)
\end{sagesilent}
\begin{enumerate} %creates the numbering for the problems.
\item $\Sigma_{n=1}^{\infty} \sage{ratexp2}$

\vskip 2 in %leaves 2 inches of space for student work
\item Find the derivative of $\sage{ratexp3}$. The answer is $\sage{deriv1}$

\vskip 2 in %leaves 2 inches of space for student work
\item Consider the series: $ \Sigma_{n=1}^{\infty}\sage{ratexp1} $
Find a formula for $s_n$, the nth partial sum. 
\end{enumerate}
\end{document}

代码正在为 a、b、c、d 选择随机元素,但如果 a=0,则会抛出 a。然后我定义了有理表达式(用于问题),甚至计算了导数。此时,我离开了 Sage,但我仍然可以使用以下命令访问过去的工作(即使在数学模式下)\sage;例如\sage{ratexp2}

注意:虽然我以前a = ZZ.random_element(-10,10)生成随机整数,但您可以使用典型的 Python 命令来生成随机数。您还需要安装 Sage 以及样式文件。就像包一样python,编译代码会生成一个中间文件(.sage文件),您可以使用 Sage 来处理它。 sagetex是一个非常强大的包。

答案2

还有SympyTeX一个包允许您在 LaTeX 文档中使用 python 和 sympy 的完整功能。

这里有一个例子:在 LaTeX 文档中使用 sympy 非常简单$2+2=\sympy{2+2}$

You can write a block, and then use the variables defined later in your code!
\begin{sympyblock}
    x = sympy.Symbol('x')
    h = sympy.integrate(1+x,x)
\end{sympyblock}
The variable $h$, how can be called using {\verb \sympy{h} }, and you will get $h =  
\sympy{h}$. Similarly, the integral of $1+x^4$ is $\sympy{sympy.integrate(1+x**4,x)}$.

这将导致: 在此处输入图片描述

据我所知,它尚未在 CTAN 上提供,但你可以从作者的主页下载它: SympyTeX

答案3

所有选项之间的比较。

包裹名字 乳胶 加拿大运输安全局 同步 1次 去蟒蛇? 引擎。 经验值 背面 版本 笔记
⟨列标题长名称⟩ 它真的是 LaTeX 吗? 是在 CTAN 上吗? 持久变量? 同步 只需运行一次? 需要 shell 转义吗? 可以转换为独立于 Python 的 TeX 文档吗? 独立于引擎? 有可扩展的命令吗? 在 underleaf 上工作吗? 与哪个 Python 版本兼容? 补充笔记
稳健外化 是的 是的 是的 是的 (*) 选修的 是的 是的 是的 -
皮卢泰克斯 是的 是的 是的 是的 是的 是的 是的 -
pythontex 是的 是的 是的 部分带有depythontex脚本 是的 Python 2.7 或 3.2+ 要插入图表,我猜您可以使用 matplotlib ,.savefig()然后\includegraphics得到结果。
合生纲 是的 是的 是的 可以将生成的.sout文件附加到 TeX 文档中 是的 需要 Python 2 提供\sympyplot插入图的命令;需要 sympy 包
鼠尾草 是的 是的 是的 可以将生成的.sout文件附加到 TeX 文档中;部分附加makestatic.py(未维护) 是的 提供\sageplot命令
pythonimmediate我的包裹 是的 是的 是的 是的 是的 是的 还没有) 是的 还没有) 是的 Python 3 无需 LuaTeX 即可工作,但命令无法扩展(目前)。还有更好的调试/回溯支持等。(参见软件包说明)
Python 是的 是的 是的 是的 是的 是的 似乎无人维护,与 LuaTeX 不兼容
疯狂蟒蛇 是的 是的 是的 是的 是(LuaTeX 需要加载动态链接库) 否,但可以手动实现 是的 需要手动安装/配置,可能是在 Lua 端和 Python 端之间共享数据最方便的解决方案,例如从 Lua 使用 Python 回调?
拉特克斯 预处理器输出 LaTeX 是的 是的 是的 是的 是的 - -
泰克斯外科 预处理器输出 LaTeX 是的 - -
混合乳胶 预处理器输出 LaTeX 是的(.sty 文件名为 pylatex) - -
塑料 可能是 是的 是的 可能是 是的 - -
编织 不,这是降价 可能是 是的 是的 - 是的 - -
(注:有 0 个用户)特克斯 预处理器输出 LaTeX - 是的 似乎根本没有任何用户......?

当然还有“无包装”解决方案但这个实际上不算数,因为你可以实现任何事情。

对一些列的澄清

  • “同步”表示 Python 运行与 TeX 运行交错。例如,Python 环境后面的 TeX 代码仅在 Python 代码运行完成后才运行。

    如果这是错误的,一些其他软件包会使用收集第一次运行的所有 Python 代码的方法,运行 Python,然后使用结果重新运行 LaTeX。

  • “单次运行”意味着您只需运行一次 LaTeX。(也许需要多运行几次才能解析引用,但 Python 功能不需要这样做)

  • “持久变量”意味着一个 Python 代码块中的 Python 变量可以在后续的 Python 代码块中重复使用。

  • “depython” 表示是否可以修改文档,以便它可以在没有 Python 的机器上编译。“partially” 表示对于某些“表现良好”的文档子集来说是可能的。

  • 实际上“shell 逃逸”并不重要,因为 Python 代码无论如何都可以执行任意系统 shell 命令。因此,如果你想要编译使用此功能的不受信任的代码,你也需要对 Python 进程进行沙盒处理

  • “引擎独立”意味着它可以在 pdflatex/xelatex/lualatex 上运行。否则它只能在 lualatex 上运行

(*):robust-externalize如果启用了 shell-escape,则单独运行。

sympytex/sagetex 需要相应安装 sympy/sage。

请注意,我不一定有使用过这里的许多软件包的经验,我仅查看手册以了解如何调用它等等。

答案4

在 CTAN 或 gitHub 上查找该pythontex包。它允许您在 LaTeX 文档中嵌入 Python 代码(包括 sympy 和 pyplot 代码)并访问结果进行排版。您可以直接访问变量值或让 Pythonprint语句生成 LaTeX 命令。它处理单个语句(\py{math.cos(3.14159/4)} 或\py{"The square root of 2. is {0:3g}".format(math.sqrt(2.))}整个代码块。它还允许在执行或不执行的情况下排版代码。

相关内容