我已经使用了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.))}
整个代码块。它还允许在执行或不执行的情况下排版代码。