# How use embedfile package with pdflatex to embed entire tree of source files?

What commands with the embedfile package will embed an entire tree of source files into the output from pdfLateX?

The sort of tree, in very simplified form, that I have is as follows, where (d) denotes a directory:

                mainsourefile.tex
/          |             \
preamble (d)   main (d)     one.bib,two.bib biblatex.cfg, ...
/     |        \
chap1 (d)  chap2 (d)  chap3 (d)
/     \        :          :
sec11.tex  sec12.tex


That is, aside from the main .tex file there are individual files in the same top-level directory as mainsourcefile.tex. That top-level directory has several subdirectories (for preamble, frontmatter, mainmatter, backmatter). And the mainmatter subdirectory in turn has subdirectories for individual chapters, each such subdirectory consisting of multiple .tex files (one for each section of the chapter).

The skeleton of the tree structure is also indicated by the form of mainsourcefile.tex:

\documentclass{memoir}
\input{preamble/preamble}
\makeindex

\begin{document}

\include{front/frontmatter}
% frontmatter.tex inputs several files
\tableofcontents

\mainmater
\input{main/mainmatter}
% mainmatter.tex includes main/chap1/chap1.tex;
%      chap1.tex inputs sec11.tex, sec12.tex. etc.
% mainmatter.tex includes main/chap2/chap2.tex; etc.

\backmatter
\include{back/backmatter}
% backmatter.tex inputes back/indexes.tex, back/bibs.tex.

\end{document}


In the documentation for embedfile I could not find sufficient examples guiding me how to embed such a tree of files.

Except for the shell escape feature (running an external program) LaTeX cannot read directory listings. Also, if a file is included it is not known to the TeX language, where the file comes from. A file can be in the current directory, below the current directory, or it can come from a standard location.

## mkjobtexmf

The .log file contains file names with path, but parsing it is no fun because of the undefined structure and the hard line breaks. However, many TeX compiler (pdfTeX, XeTeX, LuaTeX) provide a file name recorder by option --recorder. This can be used to detect the input file paths. For example, this is used by the project mkjobtexmf.

The procedure would be as follows:

1. Run mkjobtexmf to generate a directory, which contains all files, used by the LaTeX compilation.

2. Delete unwanted files and maybe add other important source files.

3. Generate an archive file (zip and friends).

4. Include the archive file by embedfile. I do not think it make to much sense to include the sources as many single files.

## Version control system, e.g. git

An easier way to get all source files is to ask the version control system for it. As an example, git is used.

1. Put the project into version control:
    cd "Project directory"
git init .

1. Add the source files (git add) and commit (git commit).

2. Ask the version control system for the files. git makes it easy by its archive feature:

    git archive --format=zip -o project.zip master


This puts all versioned files of branch master to the archive file project.zip.

1. Include the archive file with embedfile.