Forçando o LaTeX a executar novamente o mesmo código sempre com pythontex

Forçando o LaTeX a executar novamente o mesmo código sempre com pythontex

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:

  1. Limpe todos os arquivos auxiliares que ainda possam estar lá
  2. Compilar documento pela primeira vez
pdflatex main
python3 $(which pythontex) main
pdflatex main
  1. PDF contémMarca
  2. MudarMarcaparaJohnemcsv_code.py
  3. Compilar documento pela segunda vez
python3 $(which pythontex) main
pdflatex main
  1. 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)

informação relacionada