我有以下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}