#!/bin/bash ## Process *.Rnw files ## Written May 14, 2010 ## Taha Ahmed #################################################### # For now, MAKE SURE that the argument consists of # a complete filename, with extension, and # in the directory of the Rnw file #################################################### clear echo "---------------------------------------------------------------" echo "cheRTeX -- a script for processing R-Sweave-LaTeX-TikZ projects" echo "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" echo "MMX -- taha.ahmed@mkem.uu.se -- CHEPEC doctoral degree project" echo "---------------------------------------------------------------" ## If the file .latexmkrc exists in the current directory, ## set the flag ltxmkrc=TRUE ltxmkrc=false echo "--- Looking for .latexmkrc" if [ -e .latexmkrc ]; then ltxmkrc=true echo "+++ LaTeXMK RC file invoked" else echo "--- This job did not request LaTeXMK RC file" fi Rfiletype="R" TeXfiletype="tex" tikzfiles="*.tikz" Rnwfiles="*.Rnw" auxfiles="*.aux *.bbl *.bcf *.blg *.fdb* *.figlist *.lof *.log *.lot *.lox *.makefile *.map *.out *.run* *.tdo *.toc *.dep *.dpth" if [ $# -eq 1 ]; then # Check if the argument contains a filetype # Assumes a complete filename was passed jobfilename=$1 jobfiletype=${jobfilename#*.} # File extension jobname=${jobfilename%.*} # Filename without extension part echo " Detected filename: " $jobname echo " Detected extension:" $jobfiletype # Verifying that the file extension is *.Rnw if [[ $jobfiletype == "Rnw" || $jobfiletype == "rnw" || $jobfiletype == "RNW" ]]; then # File extension is *.Rnw echo " Detected *.Rnw extension" jobfiletype="Rnw" else # File extension is not *.Rnw echo " File extension should be *.Rnw" echo " Terminating..." exit 1 fi # Introducing a short delay to enable on-screen reading of previous echo simpledelay.sh 2 echo "Delay completed" # Tangle echo " Tangling..." R CMD Stangle $jobname.$jobfiletype # Weave echo " Weaving..." R CMD pgfsweave --graphics-only $jobname.$jobfiletype # Introduce delay to give time to read R CMD exit status echo " -------------------------" echo " R CMD pgfsweave completed" echo " -------------------------" simpledelay.sh 4 # Run vc script if vc exists in working directory echo " Running vc script" if [ -f vc ]; then ./vc fi # Run pdflatex, bibtex, and company if $ltxmkrc; then echo " Calling LaTeXMK with RC file" simpledelay.sh 2 latexmk -r .latexmkrc -pdf -bibtex $jobname else echo " Calling LaTeXMK" simpledelay.sh 2 latexmk -pdf -bibtex $jobname fi #echo " Calling texi2dvi()" #R CMD texi2dvi --pdf --verbose $jobname.tex ### Perhaps the choice should be dictated from a command-line argument? # Don't bother with this. Let latexmk take care of cleaning up # Move unnecessary auxiliary files generated #echo " _________________________" #echo " =========================" #echo " Moving auxiliary files..." #mv *.aux logs #mv *.log logs #mv *.out logs else # Either no arguments, or more than one argument if [ $# -eq 0 ]; then # Zero arguments. Present a menu of choices echo "This is cheRTeX POST-PROCESSING" # only one choice for now echo "<1> 'pdf-all' -- Process all .tikz files to pdf graphics" echo "<2> 'clean-up' -- Remove all auxiliary files" echo "<3> 'wipe-dir' -- Remove all non-essential files and subdirectories" echo "Any other input exits the program" read usrchoice ## Determine number of .Rnw files in current directory #Rnwfileno=$(ls -1 $Rnwfiles | wc -l) #echo "No of .Rnw files: $Rnwfileno" # ## Check if number of .Rnw files larger than one #if [ $Rnwfileno -gt 1 ]; then # # If larger than one, ask for user input # # Indicates more than one Rnw file in current directory. # # This introduces a naming ambiguity. # # Resolve by asking user for current jobname # echo "Found $Rnwfileno .Rnw files in current directory" # echo "Please specify the jobname" # read jobname # if [ -z "$jobname" ]; then # # string is null # echo "Specified jobname cannot be parsed. Terminating..." # exit 1 # fi #else # # There is exactly one *.Rnw file is current directory # # Fetch the jobname from the .Rnw filename by stripping off the file extension # Rnwfilename=$(ls -1 $Rnwfiles) # jobname=${Rnwfilename%.*} #fi # #echo "Jobname set to: $jobname" if [[ $usrchoice == "pdf-all" || $usrchoice == "1" ]]; then echo "<1> 'pdf-all' chosen" # This for loop ONLY USED to determine number of *.tikz files in directory for tikzfiles in "$tikzfiles"; do tikzfilenumber=${#tikzfiles}; done echo "cheRTeX detected $tikzfilenumber TikZ files for processing" echo "Starting TikZ file processing..." simpledelay.sh 2 for tikzfilename in $tikzfiles; do # Call tikz2pdf echo " tikz2pdf $tikzfilename" tikz2pdf --once $tikzfilename done echo "Completed TikZ file processing" fi if [[ $usrchoice == "clean-up" || $usrchoice == "2" ]]; then echo "<2> 'clean-up' chosen" rm $auxfiles # Still, a rather crude way of cleaning up... fi if [[ $usrchoice == "wipe-dir" || $usrchoice == "3" ]]; then echo "<3> 'wipe-dir' chosen" ## Remove all but non-essential files # get the name of the current directory currdirname=${PWD##*/} # get a timestamp timestamp=$(date +%s) # create a unique tmp-dir name tmpdirname="${timestamp}-${currdirname}" # make a directory in chepec/tmp with the name of the current dir mkdir /home/taha/chepec/tmp/$tmpdirname # Copy the contents of the current directory to the tmp/$currdirname directory cp * -R /home/taha/chepec/tmp/$tmpdirname # Empty the current directory of all contents rm * -R # note: hidden files and subdir unaffected # Return the stuff we want to keep after wipe-dir cp /home/taha/chepec/tmp/$tmpdirname/*.Rnw . cp /home/taha/chepec/tmp/$tmpdirname/vc .e cp /home/taha/chepec/tmp/$tmpdirname/vc.tex . cp /home/taha/chepec/tmp/$tmpdirname/vc-git.awk . # Ditto for the stuff that may not always exist... if [ -e *.Rproj ]; then cp /home/taha/chepec/tmp/$tmpdirname/*.Rproj . fi fi echo "Terminating..." exit 1 fi ## Here is the wild land of more than one *.Rnw file in current directory echo " This script can be run with one argument is process mode," echo " or with zero arguments in post-processing mode." echo " Terminating..." exit 1 fi exit 1