summary refs log tree commit diff
path: root/pkgs/tools/typesetting/tex/nix/run-latex.sh
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/tools/typesetting/tex/nix/run-latex.sh')
-rw-r--r--pkgs/tools/typesetting/tex/nix/run-latex.sh165
1 files changed, 165 insertions, 0 deletions
diff --git a/pkgs/tools/typesetting/tex/nix/run-latex.sh b/pkgs/tools/typesetting/tex/nix/run-latex.sh
new file mode 100644
index 000000000000..6c18721eed6b
--- /dev/null
+++ b/pkgs/tools/typesetting/tex/nix/run-latex.sh
@@ -0,0 +1,165 @@
+source $stdenv/setup
+
+ensureDir $out
+
+export TEXMFCNF=$TMPDIR:
+echo 'max_print_line = 8192' >> $TMPDIR/texmf.cnf
+
+mkdir root
+cd root
+
+startDir=$(perl $copyIncludes $includes)
+cd $startDir
+
+for i in $extraFiles; do
+    if test -d $i; then
+        ln -s $i/* .
+    else
+        ln -s $i $(stripHash $i; echo $strippedName)
+    fi
+done
+
+rootName=$(basename $(stripHash "$rootFile"; echo $strippedName))
+
+rootNameBase=$(echo "$rootName" | sed 's/\..*//')
+
+if test -n "$generatePDF"; then
+    latex=pdflatex
+else
+    latex=latex
+fi
+
+latexFlags="-file-line-error"
+tmpFile=$out/log
+
+showError() {
+    echo
+    echo "LATEX ERROR (LAST LOG LINES SHOWN):"
+    tail -n 20 $tmpFile
+    bzip2 $tmpFile
+    exit 1
+}
+
+runLaTeX() {
+    if ! $latex $latexFlags $rootName >$tmpFile 2>&1; then showError; fi
+    runNeeded=
+    if fgrep -q \
+        -e "LaTeX Warning: Label(s) may have changed." \
+        -e "Rerun to get citations correct." \
+        "$tmpFile"; then
+        runNeeded=1
+    fi
+}
+
+echo
+
+
+if test -n "$copySources"; then
+    cp -prd $TMPDIR/root $out/tex-srcs
+fi
+
+
+echo "PASS 1..."
+runLaTeX
+echo
+
+
+for auxFile in $(find . -name "*.aux"); do
+    # Run bibtex to process all bibliographies.  There may be several
+    # when we're using the multibib package.
+    if grep -q '\\citation' $auxFile; then
+        auxBase=$(basename $auxFile .aux)
+        if [ -e $auxBase.bbl ]; then
+            echo "SKIPPING BIBTEX ON $auxFile!"
+        else
+            echo "RUNNING BIBTEX ON $auxFile..."
+            bibtex --terse $auxBase
+            cp $auxBase.bbl $out
+            runNeeded=1
+        fi
+        echo
+    fi
+
+    # "\pgfsyspdfmark" in the aux file seems to indicate that PGF/TikZ
+    # requires a second run (e.g. to resolve arrows between pictures).
+    if grep -q pgfsyspdfmark $auxFile; then
+        runNeeded=1
+    fi
+done
+
+
+if test "$runNeeded"; then
+    echo "PASS 2..."
+    runLaTeX
+    echo
+fi
+
+
+if test -f $rootNameBase.idx; then
+    echo "MAKING INDEX..."
+    if test -n "$compressBlanksInIndex"; then
+        makeindexFlags="$makeindexFlags -c"
+    fi
+    makeindex $makeindexFlags $rootNameBase.idx
+    runNeeded=1
+    echo
+fi    
+
+
+if test "$runNeeded"; then
+    echo "PASS 3..."
+    runLaTeX
+    echo
+fi
+
+
+if test "$runNeeded"; then
+    echo "PASS 4..."
+    runLaTeX
+    echo
+fi
+
+
+if test "$runNeeded"; then
+    echo "Hm, still not done :-("
+    echo
+fi
+
+
+if test -n "$generatePDF"; then
+    cp $rootNameBase.pdf $out
+else
+    cp $rootNameBase.dvi $out
+    if test -n "$generatePS"; then
+        echo "CONVERTING TO POSTSCRIPT..."
+        dvips $rootNameBase.dvi -o $out/$rootNameBase.ps
+        echo
+    fi
+fi
+
+
+echo "WARNINGS:"
+cat $tmpFile | grep "Warning:" | grep -v "Citation.*undefined" || true
+
+echo
+echo "OVERFULL/UNDERFULL:"
+cat $tmpFile | egrep "Overfull|Underfull" || true
+
+echo
+echo "UNDEFINED REFERENCES:"
+cat $tmpFile | grep "Reference.*undefined" || true
+
+echo
+echo "UNDEFINED CITATIONS:"
+cat $tmpFile | grep "Citation.*undefined" || true
+
+echo
+echo "STATS:"
+printf "%5d overfull/underfull h/vboxes\n" $(cat $tmpFile | egrep -c "Overfull|Underfull" || true)
+printf "%5d undefined references\n" $(cat $tmpFile | grep -c "Reference.*undefined" || true)
+printf "%5d undefined citations\n" $(cat $tmpFile | grep -c "Citation.*undefined" || true)
+printf "%5d pages\n" \
+    $(cat $tmpFile | grep "Output written.*(.*pages" | sed "s/.*(\([0-9]*\) pages.*/\1/" || true)
+echo
+
+bzip2 $tmpFile