强制 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)

相关内容