#!/usr/bin/expect proc tryInstallPackage { name } { global latexpid oldresult result spawn_id argv # Set result set result $name send_user "\nTrying to install missing package\n" # Encountering this result for the second time... if {$oldresult == $result} { send_user "$result has been tried twice with no results\n" send_user "Is this not an image? Aborting...\n" exit # Install the package with tlmgri } { spawn tlmgri $result interact # Reset spawn id to kill original pdflatex set spawn_id $latexpid close wait # Respawn pdflatex spawn pdflatex {*}$argv set oldresult $result exp_continue } } # Start latex and save the pid to kill it later spawn pdflatex {*}$argv set latexpid $spawn_id # Initialize the saved result to compare later set oldresult "" set result "" expect { # Regular sty file is missing -re "^.*File .(.*). not found.*$" { tryInstallPackage $expect_out(1,string) } -re "^.*language definition file (.*) was not foun" { # Bibtex ldf file is missing tryInstallPackage $expect_out(1,string) } -re "^.*Encoding file .(.*). not found." { # Font encoding file is missing tryInstallPackage $expect_out(1,string) } timeout { # Timeout send_user "Compilation timed out???" exit } }