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)。

絶対に必要です翻訳解決策。何かアイデアはありますか?

答え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}

関連情報