pythontex を使って LaTeX に毎回同じコードを再実行させる

pythontex を使って LaTeX に毎回同じコードを再実行させる

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 に伝える必要があります。

これを実証するワークフローは次のとおりです。

  1. まだ残っている可能性のあるすべての補助ファイルを消去します
  2. 初めてドキュメントをコンパイルする
pdflatex main
python3 $(which pythontex) main
pdflatex main
  1. PDFにはマーク
  2. 変化マークジョンcsv_code.py
  3. ドキュメントを2回目にコンパイルする
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)

関連情報