
No sé cómo importar una función desde otro archivo usando pycode.
Tengo un archivo llamado csv_code.py con el siguiente código,
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)
y en el mismo directorio, tengo un archivo .tex que contiene este código
\documentclass{article}
\usepackage{csvsimple}
\usepackage{pythontex}
\begin{document}
\begin{pycode}
from csv_code import *
create_csv()
\end{pycode}
\csvautotabular{countries.csv}
\end{document}
Funciona bien, pero una vez compilado si se cambia el código en csv_code (digamos que en lugar de Mark ahora usamos el nombre John) al compilarlo nuevamente el documento no sufre ningún cambio.
Supongo que LaTeX es simplemente vago y, como ya ejecutó ese código, no lo vuelve a ejecutar. ¿Hay alguna forma de obligar a LaTeX a ejecutar ese código cada vez?
he leídoaquíuna solución usando --shell-escape
. Pero no sé cómo configurar esto en VSCode y me gustaría encontrar una manera que no implique jugar con la configuración para que sea más fácil si comparto mi código.
Respuesta1
Para mí, agregar pytex.add_dependencies('csv_code.py')
funciona. Creo que no es un problema de LaTeX sino de PythonTeX. PythonTeX no busca cambios en csv_code.py
. Supongo que PythonTeX generalmente no busca cambios en las importaciones. Por lo tanto, debes decirle que el archivo es una dependencia.
El flujo de trabajo para demostrarlo es el siguiente:
- Limpia todos los archivos auxiliares que aún puedan estar ahí
- Compilar el documento la primera vez.
pdflatex main
python3 $(which pythontex) main
pdflatex main
- PDF contieneMarca
- CambiarMarcaaJohnen
csv_code.py
- Compilar el documento por segunda vez.
python3 $(which pythontex) main
pdflatex main
- PDF contieneJohn
Aquí están los archivos. (Los cambié un poco para hacerlos compilables. Espero no haber cambiado nada fundamental en tu problema):
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)