Заставляем LaTeX каждый раз перезапускать один и тот же код с помощью pythontex

Заставляем LaTeX каждый раз перезапускать один и тот же код с помощью pythontex

Я не знаю, как импортировать функцию из другого файла с помощью pycode.

У меня есть файл с именем csv_code.py со следующим кодом:

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)

и в том же каталоге у меня есть файл .tex, содержащий этот код

\documentclass{article}
\usepackage{csvsimple}
\usepackage{pythontex}

\begin{document}

\begin{pycode}
from csv_code import *
create_csv()
\end{pycode}

\csvautotabular{countries.csv}

\end{document}

Он работает хорошо, но если после компиляции изменить код в csv_code (скажем, вместо Марка теперь использовать имя Джон), то при повторной компиляции документ не претерпит никаких изменений.

Я предполагаю, что LaTeX просто ленивый, и поскольку он уже выполнил этот код, он не запускает его снова. Есть ли способ заставить LaTeX выполнять этот код каждый раз?

я прочиталздесьрешение с использованием --shell-escape. Но я не знаю, как настроить это в VSCode, и я хотел бы найти способ, который не требует игры с настройками, чтобы было проще, если я поделюсь своим кодом.

решение1

Для меня добавление pytex.add_dependencies('csv_code.py')работает. Я думаю, что это проблема не LaTeX, а PythonTeX. PythonTeX не ищет изменения в csv_code.py. Я думаю, PythonTeX обычно не ищет изменения в импортах. Поэтому вы должны сообщить ему, что файл является зависимостью.

Рабочий процесс для демонстрации этого выглядит следующим образом:

  1. Очистите все вспомогательные файлы, которые могут там остаться.
  2. Составить документ в первый раз
pdflatex main
python3 $(which pythontex) main
pdflatex main
  1. PDF содержитОтметка
  2. ИзменятьОтметкакДжонвcsv_code.py
  3. Составить документ во второй раз
python3 $(which pythontex) main
pdflatex main
  1. PDF содержитДжон

Вот файлы. (Я немного изменил их, чтобы сделать их компилируемыми. Надеюсь, я не изменил ничего принципиально важного для вашей проблемы):

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)

Связанный контент