
Não sei como importar uma função de outro arquivo usando pycode.
Eu tenho um arquivo chamado csv_code.py com o seguinte 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)
e no mesmo diretório, tenho um arquivo .tex contendo 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 bem, mas uma vez compilado se o código em csv_code for alterado (digamos que em vez de Mark agora usamos o nome John) quando compilado novamente o documento não sofre nenhuma alteração.
Presumo que o LaTeX seja preguiçoso e, como já executou esse código, não o executa novamente. Existe uma maneira de forçar o LaTeX a executar esse código todas as vezes?
eu liaquiuma solução usando --shell-escape
. Mas não sei como configurar isso no VSCode e gostaria de encontrar uma maneira que não envolva brincar com as configurações para facilitar o compartilhamento do meu código.
Responder1
Para mim, adicionar pytex.add_dependencies('csv_code.py')
funciona. Acho que não é um problema do LaTeX, mas do PythonTeX. PythonTeX não procura alterações no csv_code.py
. Acho que o PythonTeX geralmente não procura mudanças nas importações. Portanto, você deve informar que o arquivo é uma dependência.
O fluxo de trabalho para demonstrá-lo é o seguinte:
- Limpe todos os arquivos auxiliares que ainda possam estar lá
- Compilar documento pela primeira vez
pdflatex main
python3 $(which pythontex) main
pdflatex main
- PDF contémMarca
- MudarMarcaparaJohnem
csv_code.py
- Compilar documento pela segunda vez
python3 $(which pythontex) main
pdflatex main
- PDF contémJohn
Aqui estão os arquivos. (Eu os mudei um pouco para torná-los compiláveis. Espero não ter mudado nada fundamental para o seu 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)