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

我認為 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)

相關內容