# Create list of all external files used by master LaTeX document?

Is there an easy way to create a list of all external files (complete path) which are used by a LaTeX document (and its "sub-documents") by

• `\input`
• `\include`
• `\includegraphics` ?

(may I have forgotten some input sources?)

-
You can parse the `.log` file (not very trivial, though). You can also use `strace` or similar tool (but this one counts as hardcore). – Andrey Vihrov Jul 31 '11 at 13:19
My `dateiliste` package includes a list of TeX files parsed in the document, but without complete path. (And not files used by includegraphics or similar.) – Paŭlo Ebermann Jul 31 '11 at 14:22

The snapshot package gives you a list of the external dependencies of a LaTeX document. Use it by saying

``````\RequirePackage{snapshot}
``````

before the `\documentclass` command (to have the information written to a `.dep` file), or by saying

``````\RequirePackage[log]{snapshot}
``````

before the `\documentclass` command (to have the information written to the `.log` file).

-
Is there any way to use this information during the LaTeX build? I am trying to include all the distributed `.tex` files during a build using `\usepackage{embedfile}` and `\embedfile{<...>.tex}`... – fgysin Feb 28 '13 at 8:38

use the perl script `mkjobtexmf` available with every TeX distribution and run it like

``````mkjobtexmf --jobname <latex file> --cmd-tex pdflatex
``````

it creates an file `<latex file>.fls` which shows all used files, e.g. for a testfile named latex6:

``````PWD /home/voss/Documents
INPUT /usr/local/texlive/2011/texmf.cnf
INPUT /usr/local/texlive/2011/texmf/web2c/texmf.cnf
INPUT /usr/local/texlive/2011/texmf-var/web2c/pdftex/latex.fmt
INPUT latex6.tex
OUTPUT latex6.log
INPUT /usr/local/texlive/2011/texmf-dist/tex/latex/base/article.cls
INPUT /usr/local/texlive/2011/texmf-dist/tex/latex/base/article.cls
INPUT /usr/local/texlive/2011/texmf-dist/tex/latex/base/size10.clo
INPUT /usr/local/texlive/2011/texmf-dist/tex/latex/base/size10.clo
[ ... ]
``````
-
Or you can simply run `pdflatex -recorder <latex-file>` to get the same effect. This is what `mkjobtexmf` does behind the scenes. – Lev Bishop Jul 31 '11 at 20:42
sure, what else should it do? However, you can create a texmf tree depending to the job which is more what `-recorder` can do. – Herbert Jul 31 '11 at 21:00
the `-recorder` option is great ! – Suresh Jul 31 '11 at 21:55
`-recorder` works better than `mkjobtexmf` when it comes to pgf plots. With `-recorder` you also get the input files used by pgf for the plots, whereas you dont with `mkjobtexmf ` – masgo Jun 26 '15 at 12:01

This is a modified version of the @Gonzales answer with an additional `python` code to copy the figures to a new folder.

After using `snapshot` package to generate the `.dep` file:

``````\RequirePackage{snapshot}
\documentclass{article}
``````

use the following `python` code (say `copy_figs.py`) to copy the figures to a separate folder (for example, `figs_used`):

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

DEP_FILE = 'main.dep'
TARGET_DIR = 'other_img/'
EXTENSIONS = ['pdf', 'pdf_tex', 'png']

def copy_image_files():
with open(DEP_FILE, 'r') as f:
for line in f:
if '*{file}' not in line:
continue
value = line.split('{')[2].split('}')
source = value[0]
_, e = os.path.splitext(source)
e = e.lower()[1:]
if e not in EXTENSIONS:
continue
print(source)
shutil.copy(source, TARGET_DIR)

if __name__ == '__main__':
copy_image_files()
``````

To run the `python` code:

``````c:\Python27\python.exe copy_figs.py
``````

in the folder where the Latex file is placed. It is assumed the original figures are in `figs` subfolder, and those figures used in the Latex file are copied to `figs_used` subfolder. The code copies `.png` and `.pdf` figure files.

-

If you put `\listfiles` as the very first line of the master file, the name of every used file is dumped to standard output, including style and font definition files. This is plain old LaTeX.

-