元のパスに関係なく、LaTeX ドキュメントによって呼び出されるすべてのグラフィック ファイルをサブディレクトリにコピーしますか?

元のパスに関係なく、LaTeX ドキュメントによって呼び出されるすべてのグラフィック ファイルをサブディレクトリにコピーしますか?

私は、LaTeX によって呼び出されるすべての画像ファイルを単一のディレクトリにコピーする簡単な (自動的な) 方法を望んでいます。同様の問題がここで取り上げられています:マスター LaTeX ドキュメントで使用されるすべての外部ファイルのリストを作成しますか? @imriss が提案した解決策も気に入っていますが、機能するにはすべてのファイルが tex ファイルと同じディレクトリに存在する必要があります。私の画像ファイルの一部は別の場所にあり、TEXINPUTS を介してアクセスされますが、スナップショットによって生成された dep ファイルにはファイル名のみが含まれており、パスは含まれていないため、この手法では見つかりません。

答え1

@muzimuzhi Z のコメントと @imriss の質問への回答の構築マスター LaTeX ドキュメントで使用されるすべての外部ファイルのリストを作成しますか?imgここでは、ファイル拡張子の選択に基づいて、LaTeX ドキュメントで使用されるすべての外部ファイルをディレクトリにコピーする方法を示します。

LaTeXファイルfile.texタイプから始める

pdflatex -recover file

これにより、 が作成されます。次の Python コードを含むfile.flsファイル ( など) を作成します。copy_fig_fls.py

"""Copy figures used by document."""
import os
import shutil

FLS_FILE = 'file.fls'
TARGET_DIR = 'img/'
EXTENSIONS = ['pdf', 'png', 'jpg']

def copy_image_files():
    with open(FLS_FILE, 'r') as f:
        for line in f:
            if 'INPUT' not in line:
                continue
            source = line.split(' ')[1].rstrip()
            _, e = os.path.splitext(source)
            e = e.lower()[1:]
            if e in EXTENSIONS:
                shutil.copy(source, TARGET_DIR)

if __name__ == '__main__':
    copy_image_files()

入力して実行します

python3 copy_fig_fls.py

元の画像ファイルが現在のディレクトリにあるか他の場所にあるかに関係なく、変数file.texにリストされている拡張子を持つによって使用されるすべてのファイルをディレクトリEXTENSIONSにコピーします。img

関連情報