summary refs log tree commit diff
path: root/pkgs/misc/tex/nix/run-latex.sh
blob: 31056094fc225b44c05e9fc16a20d2583fd309b5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
source $stdenv/setup

ensureDir $out

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
    exit 1
}

runLaTeX() {
if ! $latex $latexFlags $rootName >$tmpFile 2>&1; then showError; fi
}

echo

echo "PASS 1..."
runLaTeX
echo

if grep -q '\\citation' $rootNameBase.aux; then
    echo "RUNNING BIBTEX..."
    bibtex --terse $rootNameBase
    cp $rootNameBase.bbl $out
    echo
fi

echo "PASS 2..."
runLaTeX
echo

if test -f $rootNameBase.idx; then
    echo "MAKING INDEX..."
    if test -n "$compressBlanksInIndex"; then
        makeindexFlags="$makeindexFlags -c"
    fi
    makeindex $makeindexFlags $rootNameBase.idx
    echo
fi    

echo "PASS 3..."
runLaTeX
echo
if test -n "$generatePDF"; then
    cp $rootNameBase.pdf $out
else
    cp $rootNameBase.dvi $out
fi

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