runLaTeX: rerun at least twice + refactor (#104185)

Building a simple LaTeX document without bibTeX with a table of contents yielded a document with an empty table of contents since LaTeX was only run once
This commit is contained in:
iko 2020-11-27 20:32:29 +03:00 committed by GitHub
parent f5edf8aedb
commit eb7d367200
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -41,7 +41,11 @@ showError() {
exit 1
}
pass=0
runLaTeX() {
((pass=pass+1))
echo "PASS $pass..."
if ! $latex $latexFlags $rootName >$tmpFile 2>&1; then showError; fi
runNeeded=
if fgrep -q \
@ -51,6 +55,7 @@ runLaTeX() {
"$tmpFile"; then
runNeeded=1
fi
echo
}
echo
@ -61,10 +66,7 @@ if test -n "$copySources"; then
fi
echo "PASS 1..."
runLaTeX
echo
for auxFile in $(find . -name "*.aux"); do
# Run bibtex to process all bibliographies. There may be several
@ -89,11 +91,8 @@ for auxFile in $(find . -name "*.aux"); do
fi
done
if test "$runNeeded"; then
echo "PASS 2..."
runLaTeX
echo
fi
@ -105,20 +104,18 @@ if test -f $rootNameBase.idx; then
makeindex $makeindexFlags $rootNameBase.idx
runNeeded=1
echo
fi
if test "$runNeeded"; then
echo "PASS 3..."
runLaTeX
echo
fi
# We check that pass is less than 2 to catch situations where the document is
# simple enough (no bibtex, etc.) so that it would otherwise require only one
# pass but also contains a ToC.
# In essence this check ensures that we do at least two passes on all documents.
if test "$runNeeded" = 1 -o "$pass" -lt 2 ; then
runLaTeX
fi
if test "$runNeeded"; then
echo "PASS 4..."
runLaTeX
echo
fi