
Ich weiß nicht, wie ich mit Pycode eine Funktion aus einer anderen Datei importiere.
Ich habe eine Datei namens csv_code.py mit dem folgenden Code,
import csv
def create_csv():
header = ['name', 'degree']
data = ['Mark', 6]
with open('degrees.csv', 'w', encoding='UTF8', newline='') as f:
writer = csv.writer(f)
writer.writerow(header)
writer.writerow(data)
und im selben Verzeichnis habe ich eine .tex-Datei mit diesem Code
\documentclass{article}
\usepackage{csvsimple}
\usepackage{pythontex}
\begin{document}
\begin{pycode}
from csv_code import *
create_csv()
\end{pycode}
\csvautotabular{countries.csv}
\end{document}
Es funktioniert gut, aber wenn nach der Kompilierung der Code in csv_code geändert wird (sagen wir, dass wir jetzt statt Mark den Namen John verwenden), ändert sich das Dokument bei einer erneuten Kompilierung nicht.
Ich nehme an, LaTeX ist einfach faul und führt den Code nicht noch einmal aus, da er bereits ausgeführt wurde. Gibt es eine Möglichkeit, LaTeX zu zwingen, den Code jedes Mal auszuführen?
ich habe gelesenHiereine Lösung mit --shell-escape
. Aber ich weiß nicht, wie ich das in VSCode einrichten soll, und ich würde gerne einen Weg finden, bei dem ich nicht mit den Einstellungen herumspielen muss, um es einfacher zu machen, wenn ich meinen Code freigebe.
Antwort1
Bei mir pytex.add_dependencies('csv_code.py')
funktioniert das Hinzufügen. Ich denke, es ist kein Problem von LaTeX, sondern von PythonTeX. PythonTeX sucht nicht nach Änderungen in csv_code.py
. Ich vermute, PythonTeX sucht generell nicht nach Änderungen in Importen. Daher müssen Sie ihm mitteilen, dass die Datei eine Abhängigkeit ist.
Der Workflow zur Demonstration ist wie folgt:
- Bereinigen Sie alle möglicherweise noch vorhandenen Zusatzdateien.
- Dokument zum ersten Mal kompilieren
pdflatex main
python3 $(which pythontex) main
pdflatex main
- PDF enthältMarkieren
- ÄndernMarkierenZuJohnIn
csv_code.py
- Dokument zum zweiten Mal kompilieren
python3 $(which pythontex) main
pdflatex main
- PDF enthältJohn
Hier sind die Dateien. (Ich habe sie ein wenig geändert, um sie kompilierbar zu machen. Ich hoffe, ich habe nichts Grundlegendes zu Ihrem Problem geändert):
main.tex
:
\documentclass{article}
\usepackage{csvsimple}
\usepackage{pythontex}
\pyc{pytex.add_dependencies('csv_code.py')}
\begin{document}
\begin{pycode}
from csv_code import *
create_csv()
\end{pycode}
\IfFileExists{degrees.csv}{\csvautotabular{degrees.csv}}{}
\end{document}
csv_code.py
:
import csv
def create_csv():
header = ['name', 'degree']
data = ['Mark', 6]
with open('degrees.csv', 'w') as f:
writer = csv.writer(f)
writer.writerow(header)
writer.writerow(data)