Suppose I have a directory containing a bunch of LaTeX source files, and I want to input all of them into a single main file. I could do this by saying
\input{dir/file1.tex}
\input{dir/file2.tex}
\input{dir/file3.tex}
...
Is there some way to input all of files in the directory "dir" using a single command? This is useful, for example, if I want to keep adding files to the directory "dir" but don't want to have to remember to add further \input commands to the main file.
Best Answer
My suggestion is to create one file with all the
\input
lines automatically and use\input
to include this file (and hence, all desired files) into your main document. The best way to keep everything up to date would be a Makefile. On a Unix system you can use this command line to create the file with the input lines:You would only update
inputs.tex
once in a while (or automatically) but always use\input{inputs.tex}
in your main document. The beauty of usingls
(orfind
) is that you can combine naming some files explicitly and others using shell (glob) patterns to control what files are included in what order.Makefile
The GNU Make Makefile rule to do this automatically would look like this:
A call to
make
would trigger updating theall
target, which in turn would updateinputs.tex
if any of the included TeX files has changed or a new one was added.Shell Escapes
Reading about shell escapes in PDFLaTeX in the solution mentioned by Faheem Mitha, here is another idea: one could also execute the command line mentioned above from within the LaTeX source file and read
\input{inputs.tex}
after that. However, I haven't tried this.