When you're sharing a document with someone else (perhaps as part of a
co-development cycle) it's as well to arrange that both correspondents
have the same set of auxiliary files, as well as the document in
question. Your correspondent obviously needs the same set of files
(if you use the url package, she has to have url
too, for example). But suppose you have a bug-free version of the
shinynew package but her copy is still the unstable
original; until you both realise what is happening, such a situation
can be very confusing.
The simplest solution is the LaTeX
\listfiles command. This
places a list of the files used and their version numbers in the log
file. If you extract that list and transmit it with your file, it can
be used as a check-list in case that problems arise.
\listfiles only registers things that are input by the
“standard” LaTeX mechanisms (
\includegraphics and so on).
\input command, as modified by LaTeX and used, with
LaTeX syntax, as:
records file details for
mymacros.tex, but if you use TeX
primitive syntax for
mymacros.tex won't be recorded, and so won't listed by
\listfiles - you've bypassed the mechanism that records its use.
The snapshot package helps the owner of a LaTeX document obtain a list of the external dependencies of the document, in a form that can be embedded at the top of the document. The intended use of the package is the creation of archival copies of documents, but it has application in document exchange situations too.
bundledoc system uses the snapshot to produce an
zip) of the files needed by your
document; it comes with configuration files for use with
MiKTeX. It's plainly useful when
you're sending the first copy of a document.
mkjobtexmf finds which files are used in a “job”,
either via the
-recorder option of TeX, or by using the
strace to keep an eye on what TeX is
doing. The files thus found are copied (or linked) to a directory
which may then be saved for transmission or archiving.