文書に埋め込まれた図のファイル名のリストを取得する方法

文書に埋め込まれた図のファイル名のリストを取得する方法

fig膨大な量の他の図がいっぱい入ったフォルダーから大量の図を埋め込んだ TeX ドキュメントがあります。

ドキュメントをその中の図と一緒に移動したいのですが、フォルダー全体ではなくfig、ドキュメントに埋め込まれている図だけを移動したいのです。

たとえば、ドキュメントに埋め込まれたすべての図のファイル名を印刷できるパッケージ (または他の方法) はありますか? たとえば、次のようなものです:

fig/figurename1.eps
fig/figurename2.eps
...
etc

次に、そのリストをコピーして貼り付け、cpプレーンテキスト ファイルにいくつかの 's を追加し、シェルでファイルを実行して、それらのファイルのコピーを目的の場所に自動化します。

$ cp fig/figurename1.eps wherever/fig/
$ cp fig/figurename2.eps wherever/fig/
...
etc

もちろんこれは単なるアイデアです。誰かが「シェル ファイルでのファイル リストとコピー アンド ペースト」に代わる方法をお持ちであれば、喜んでお聞きします =)

答え1

\includegraphcsマクロを変更してリストに追加し、そのリストをドキュメントの最後に印刷することができます。以下の MWE では、次の出力が生成されます。

Figures included were
 images/figA.jpg
 images/figB.png

ノート:

  • この場合\letもうまくいくでしょう(egregのコメントによるとLatex内のすべての画像のサイズをパーセンテージ幅に変更する\LetLtxMacro)ですが、私はそのletltxmacro包みオプションパラメータを持つマクロの場合。の詳細な説明は、\LetLtxMacroこの質問で確認できます。閉じた平方根記号

  • この[demo]オプションは、デモの目的で図が配置される場所にブラック ボックスを配置するために使用されます。実際の使用では (実際に図が利用できる場合)、このオプションを削除する必要があります。

  • 必要に応じて、ループ内でシェル コマンドを使用し\immediate\write18て実行し、タイプセットの最後に含まれた画像を含むディレクトリを作成することもできます。それ以上の処理は必要ありません。cp\foreach

コード:

\documentclass{article}
\usepackage[demo]{graphicx}% Remove [demo] option in real usage.
\usepackage{letltxmacro}
\usepackage{pgffor}


%% https://tex.stackexchange.com/questions/14393/how-keep-a-running-list-of-strings-and-then-process-them-one-at-a-time
\newcommand\FigList{}
\newcommand\AddFigToList[1]{\edef\FigList{\FigList#1,}}

\LetLtxMacro{\OldIncludegraphics}{\includegraphics}
\renewcommand{\includegraphics}[2][]{%
    \AddFigToList{#2}%
    \OldIncludegraphics[#1]{#2}%
}

\newcommand*{\ShowListOfFigures}{%
    \typeout{Figures included were}%
    \foreach \x in \FigList {%
        %\par\x% <-- uncomment if you want the list in the PDF as well
        \typeout{ \x}
    }%
}
\AtEndDocument{\ShowListOfFigures}

\begin{document}
\includegraphics{images/figA.jpg}

\includegraphics{images/figB.png}
\end{document}

答え2

pdflatex-recorderは、ファイルを書き込むフラグを提供します.flsINPUTそこにマークされているものはすべて、処理中に開かれたファイルです。 latexmkフラグ-depsまたはを使用して、適切性を示し、最後のケースでは、それらをフォーマットされ-deps-out=FILENAMEた に保存します。makeFILENAME

答え3

Linux では、ソースを変更せずに次のようにすれば十分です。

strace -fe open  make 2>&1  1>/dev/null | grep plots | sed 's/.*\"\(.*\)\".*/\1/' > plots.list

どこ :

  • makeは、出力を構築するために使用するコマンドです ( のバリエーションの場合もあります pdflatex file.tex)。

  • straceシステムコールを表示します。提供しているオプションを使用すると、-e挿入された数値 (および現在開いている他のファイル) を取得するために、「開いている」システムコール (オプション) のみを保持します。-fオプションはサブプロセスのシステムコールを表示するためのもので、リダイレクトは strace 出力のみを保持するためのものです。

  • grep plotsパス内の共通文字列 (この場合は「plots」) を含む行を選択します。

  • sed引用符内の内容を選択します。

  • 最後のリダイレクトにより、結果がファイルにダンプされます。

この方法ではファイル名が重複する可能性がありますが、目的によってはこれで十分かもしれません。

答え4

perlCTANにはスクリプトがあります。テックス依存これらすべてとそれ以上のことを実行します。あらゆる種類の内部および外部の依存関係を処理し、 、または 1 行に 1 つの形式で情報を生成できMakefileますperl

>texdepend
Find LaTex dependencies, Version: 0.96, Michael Friendly ([email protected])
Usage: C:\batchfiles\texdepend.pl <options> texfile[.tex]
  where <options> may be abbreviated to unique truncations, and are:
   -help               print this measly help
   -expand             expand package/include file to full path names
   -format = make      print dependencies in Makefile format
             perl      print in the form of perl assignments (LatexMk)
             1         print one per line (with # separators)
   -ignore = list      list of file types to be ignored in .log [default: fd]
   -out = filename     send output to filename
   -print =            Any one or more of i (includes) p (packages)
                       f (figs) b (bibfiles) s (styles) d (all dependencies)
   -styles = list      list of file types for  from .log [default: sty]
   -verbose

関連情報