It’s now possible to set up a functional system for editing and viewing LaTeX documents on the iPad for under $15 and a few minutes of shell scripting. All the necessary tools are readily available: TeX Touch as the LaTeX editor, Good Reader as the PDF viewer,1 and Dropbox as the synchronization backend. All that remains is a remote compile server. For that, A simple bash script called from a cron job or executed in a loop on your main computer will work nicely.
TeX Touch seems to be the best LaTeX editor currently available for the iPad. It has syntax highlighting, quick access to common LaTeX commands and symbols, support for Dropbox, and provides for two remote compilation methods. A “TeX Cloud” service is provided by the author, or you can provide your own compile service which must be able to detect changed files in your Dropbox account and recompile them as needed. The second approach is of course more flexible, if you have the ability to set this up yourself. A diagram overview of this approach is available on the TeX Touch homepage. A couple of example shell scripts are offered below.
The Compile Server
If you have a primary computer with a Unix-like operating system that’s usually connected to the internet and has access to your Dropbox account, then you can write a simple shell script to handle compiling your documents. This can be as simple or as complex as you need.
Consider this simple script that runs in an infinite loop and, every
five seconds, recompiles any documents for which the
.tex file has
#!/bin/bash TEX_PATH="$HOME/Dropbox/latexbot" SLEEP_TIME=5 TIMESTAMP_FILE="$HOME/.latexbot-timestamp" LATEX="pdflatex -interaction=nonstopmode" cd "$TEX_PATH" while true; do for file in *.tex; do if [ "$file" -nt "$TIMESTAMP_FILE" ]; then $LATEX "$file" fi done touch "$TIMESTAMP_FILE" sleep $SLEEP_TIME done
Of course, you’ll have to kill it manually if you ever want to stop
it. This should work fine for cases where all of your documents are
.tex files, for example, academic articles, lecture notes,
resumes, and so on.
If you have more complex multi-file projects, or if you want to
compile the files in place (instead of collecting them in a single
latexbot directory), then the following script might work better.
It reads a file,
$HOME/.latexbot, which consists of a list of paths
to directories and/or single
.tex files. When it encounters a
directory, it processes any
.tex files in that directory that have
changed since the last run. When it encounters a filename, it
assumes this is the master file for a LaTeX project contained in the
same directory. In this case, it will check to see if any of the
.tex files in the directory have changed. If so, then it runs LaTeX
on the master file only. This second case is useful for a large
project like a book, thesis, or dissertation, where you might want to
\input the individual chapter files.
#!/bin/bash PATH_FILE="$HOME/.latexbot" TIMESTAMP_FILE="$HOME/.latexbot-timestamp" LATEX="pdflatex -interaction=nonstopmode" while read path; do if [ -d "$path" ]; then cd $path for file in *.tex; do if [ "$file" -nt $TIMESTAMP_FILE ]; then $LATEX "$file" fi done elif [ -f "$path" ]; then dir=$(dirname $path) file=$(basename $path) cd $dir for other in *.tex; do if [ "$other" -nt $TIMESTAMP_FILE ]; then $LATEX "$file" break fi done fi done < $PATH_FILE touch $TIMESTAMP_FILE
Notice that both scripts have some configurable variables at the top.
You can change the location of the path file or timestamp file by
TIMESTAMP_FILE accordingly. If you need to
pass different command-line options to LaTeX, change the command
stored in the
LATEX variable. The path file should contain absolute
paths to your projects, like so:
The first line instructs the script to watch all
.tex files in the
latexbot directory. The second line contains the path to a master
.tex file for a project in the
Note that this script does not run in a loop like the previous one.
It’s straightforward to make it do so, but as it stands it should be
called periodically from
cron (or some other scheduler) like so:
# min hr dom mon dow command */1 * * * * /path/to/latexbot
If you don’t have a Linux or OS X machine with a consistent internet connection, a small Linode server with the Linux Dropbox client and a TeX Live installation would also work well.
Good Reader is an excellent PDF viewer for the iPad which also has builtin support for almost every type of file server imaginable. You can transfer files to and from services such as SFTP, Dropbox, WebDav, FTP, IMAP, SugarSync, and many more. Of particular relevance to our iPad LaTeX system, Good Reader allows you to syncronize individual files (bi-directional or read-only), keeping them updated if they change. So, you can ask it to sync the PDF file that gets produced for each of your LaTeX projects. After this sync is configured, each time you finish editing a file (and once the compile server has finished processing it), you only have to click the sync button to fetch the latest version. Only files that have been updated will be downloaded, saving time and bandwidth.
Putting it Together
In practice, first you’ll run TeX Touch and open a LaTeX file from your Dropbox account. After editing the file you’ll either use the built-in compilation interface or save the file and upload it back to your Dropbox account. Either way, once Dropbox updates the file back on your compile server, your script will re-compile the document and produce an updated PDF file. Then, you can open Good Reader, press sync, and read your new document.
TeX Touch includes a basic PDF viewer, but I prefer Good Reader for serious reading. ↩