~ Simplify Collaboration on a LaTeX Documents with Dropbox and a Build Server
» By Joren on Wednesday 21 September 2011Problem
While working on a Latex document with several collaborators some problems arise:
- Who has the latest version of the TeX-files?
- Which LaTeX distributions are in use (MiKTeX, LiveTex,…)
- Are all LaTeX packages correctly installed on each computer?
- Why is the bibliography, generated with BiBTeX, not included or incomplete?
- How does the final PDF look like when it is build by one of the collaborators, with a different LaTeX distribution?
Especially installing and maintaining LaTeX distributions on different platforms (Mac OS X, Linux, Windows) in combination with a lot of LaTeX packages can be challenging. This blog post presents a way to deal with these problems.
Solution
The solution proposed here uses a build-server. The server is responsible for compiling the LaTeX source files and creating a PDF-file when the source files are modified. The source files should be available on the server should be in sync with the latest versions of the collaborators. Also the new PDF-file should be distributed. The syncing and distribution of files is done using a Dropbox install. Each author installs a Dropbox share (available on all platforms) which is also installed on the server. When an author modifies a file, this change is propagated to the server, which, in turn, builds a PDF and sends the resulting file back. This has the following advantages:
- Everyone always has the latest version of files;
- Only one LaTeX install needs to be maintained (on the server);
- The PDF is the same for each collaborator;
- You can modify files on every platform with Dropbox support (Linux, Mac OS X, Windows) and even smartphones;
- Compiling a large LaTeX file can be computationally intensive, a good task for a potentially beefy server.
Implementation
The implementation of this is done with a couple of bash-scripts running on Ubuntu Linux. LaTeX compilation is handeled by the LiveTeX distribution. The first script compile.bash
handles compilation in multiple stages: the cross referencing and BiBTeX bibliography need a couple of runs to get everything right.
1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
#first iteration: generate aux file
pdflatex -interaction=nonstopmode --src-specials article.tex
#run bibtex on the aux file
bibtex article.aux
#second iteration: include bibliography
pdflatex -interaction=nonstopmode --src-specials article.tex
#third iteration: fix references
pdflatex -interaction=nonstopmode --src-specials article.tex
#remove unused files
rm article.aux article.bbl article.blg article.out
The second script watcher.bash
is more interesting. It watches the Dropbox directory for changes (only in .tex-files) using the efficient inotify library. If a modification is detected the compile script (above) is executed.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash
directory=/home/user/Dropbox/article/
#recursivly watch te directory
while inotifywait -r $directory; do
#find all files changed the last minute that match tex
#if there are matches then do something...
if find $directory -mmin -1 | grep tex; then
#tex files changed => recompile
echo "Tex file changed... compiling"
/bin/bash $directory/compile.bash
#sleep a minute to prevent recompilation loop
sleep 60
fi
done
To summarize: a user-friendly way of collaboration on LaTeX documents was presented. Some server side configuration needs to be done but the clients only need Dropbox and a simple text editor and can start working togheter.