
我不知道如何使用 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 中的程式碼發生變更(假設我們現在使用名稱 John 而不是 Mark),那麼當再次編譯時,文件不會發生任何變更。
我認為 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)