我不知道如何使用 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)