
Я не знаю, как импортировать функцию из другого файла с помощью 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 обычно не ищет изменения в импортах. Поэтому вы должны сообщить ему, что файл является зависимостью.
Рабочий процесс для демонстрации этого выглядит следующим образом:
- Очистите все вспомогательные файлы, которые могут там остаться.
- Составить документ в первый раз
pdflatex main
python3 $(which pythontex) main
pdflatex main
- PDF содержитОтметка
- ИзменятьОтметкакДжонв
csv_code.py
- Составить документ во второй раз
python3 $(which pythontex) main
pdflatex main
- 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)