Ich habe den folgenden Python-Quellcode:
def modulo(a, n):
return a % n
print(modulo(3, 10))
print(modulo(10, 10))
print(modulo(11, 10))
Die erste Funktionsdefinition gibt einen Hinweis auf die Implementierung und die folgenden Aufrufe zeigen eine beispielhafte Verwendung/Ausgabe.
Ich möchte dies folgendermaßen setzen (damit die Leute die Implementierung kopieren und einfügen und eine Live-Ausgabe sehen können):
def modulo(a, n):
return a % n
>>> print(modulo(3, 10))
3
>>> print(modulo(10, 10))
0
>>> print(modulo(11, 10))
1
Ich konnte dies mit PythonTeX nicht erstellen.
\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}
Das gibt mir
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
DerDokumentationerwähnt Sitzungen, in denen Code parallel ausgeführt wird, deshalb habe ich diese Codeausschnitte explizit in dieselbe Sitzung eingefügt (obwohl standardmäßig beide in ausgeführt werden default
).
Ich brauche unbedingt einePythonTeXLösung. Irgendwelche Ideen?
Antwort1
Konsolencode und normaler Code haben jeweils ihre eigenenseparate default
Sitzungen. Alle Befehle/Umgebungen, die mit beginnen, werden pycon
vollständig getrennt von denen ausgeführt, die mit beginnen py
. Es gibt keine Überschneidungen zwischen ihnen.
Eine Funktion, mit der Sie tun können, was Sie wollenwurde angefordertund wird in einer kommenden Version von PythonTeX implementiert. In der Zwischenzeit können Sie wahrscheinlich mit diesem Workaround machen, was Sie wollen,aus dieser Funktionsanforderung kopiert.
\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}