
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 内のコードが変更され (Mark の代わりに John という名前を使用するとします)、再度コンパイルしてもドキュメントに変更は発生しません。
LaTeX は単に怠け者なので、そのコードをすでに実行しているので、再度実行しないのだと思います。LaTeX にそのコードを毎回実行させる方法はありますか?
読みましたここを使用したソリューションです--shell-escape
。しかし、VSCode でこれを設定する方法がわからないため、コードを共有する場合に簡単にするために、設定を操作しない方法を見つけたいと思います。
答え1
私の場合、追加するpytex.add_dependencies('csv_code.py')
とうまくいきます。これは LaTeX の問題ではなく、PythonTeX の問題だと思います。PythonTeX は の変更を検索しませんcsv_code.py
。PythonTeX は一般にインポートの変更を検索しないと思います。したがって、ファイルが依存関係であることを PythonTeX に伝える必要があります。
これを実証するワークフローは次のとおりです。
- まだ残っている可能性のあるすべての補助ファイルを消去します
- 初めてドキュメントをコンパイルする
pdflatex main
python3 $(which pythontex) main
pdflatex main
- PDFにはマーク
- 変化マークにジョンで
csv_code.py
- ドキュメントを2回目にコンパイルする
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)