使用 PythonTeX 排版函数然后在控制台中执行它们

使用 PythonTeX 排版函数然后在控制台中执行它们

我有以下python源代码:

def modulo(a, n):
    return a % n

print(modulo(3, 10))
print(modulo(10, 10))
print(modulo(11, 10))

第一个函数定义给出了关于实现的提示,下面的调用显示了示例用法/输出。

我想按以下方式排版(以便人们可以复制粘贴实现并查看一些实时输出):

def modulo(a, n):
    return a % n

>>> print(modulo(3, 10))
3
>>> print(modulo(10, 10))
0
>>> print(modulo(11, 10))
1

我无法使用 PythonTeX 创建它。

\begin{pyblock}[mysession][]
def modulo(a, n):
    return a % n

\end{pyblock}

\begin{pyconsole}[mysession][]
print(modulo(3, 10))
print(modulo(10, 10))
print(modulo(11, 10))

\end{pyconsole}

这让我

def modulo(a, n):
    return a % n

>>> print(modulo(3, 10))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'modulo' is not defined
>>> print(modulo(10, 10))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'modulo' is not defined
>>> print(modulo(11, 10))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'modulo' is not defined

文档提到会话,其中代码并行运行,因此我将这些代码片段明确放入同一个会话中(即使默认情况下两者都在中运行default)。

我绝对需要一个PythonTeX解决方案。有什么想法吗?

答案1

控制台代码和普通代码都有自己的分离 default会话。所有以 开头的命令/环境都pycon与以 开头的命令/环境完全分开执行py。它们之间没有重叠。

满足您需求的功能已请求并将在即将发布的 PythonTeX 版本中实现。与此同时,你可以用这个解决方法做你想做的事情,从该功能请求复制

\documentclass{article}

\usepackage{pythontex}

\newenvironment{pyconcodeblock}%
 {\VerbatimEnvironment
  \begin{VerbatimOut}{temp.py}}%
 {\end{VerbatimOut}%
  \pyconc{exec(compile(open('temp.py', 'rb').read(), 'temp.py', 'exec'))}%
  \inputpygments{python}{temp.py}}

\begin{document}

\begin{pyconcodeblock}
def foo(x):
    return 2*x
\end{pyconcodeblock}

\begin{pyconsole}
x = 10
foo(x)
\end{pyconsole}

\end{document}

相关内容