summaryrefslogtreecommitdiff
path: root/support/latexn/latexn
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/latexn/latexn
Initial commit
Diffstat (limited to 'support/latexn/latexn')
-rw-r--r--support/latexn/latexn231
1 files changed, 231 insertions, 0 deletions
diff --git a/support/latexn/latexn b/support/latexn/latexn
new file mode 100644
index 0000000000..9a105737e0
--- /dev/null
+++ b/support/latexn/latexn
@@ -0,0 +1,231 @@
+#! /bin/csh -f
+# File: latexn
+
+# This is a csh script for UNIX systems. It runs Latex enough times to
+# resolve cross references, and to get the table of contents (if any) correct.
+# It also runs makeindex if needed. See the help text below for more details.
+
+# INSTALLATION: Make this an executable file: chmod a+x latexn
+# and put it in an appropriate directory for executable files.
+# If your system has non-standard commands to run bibtex, latex and makeindex,
+# then change the appropriate lines.
+
+# CUSTOMIZATION
+# Similarly, if you have personal preferences as to how these programs should
+# be used, change the appropriate lines. For example, Andrei Klot points out
+# that if you would like latex to stop automatically after the first error it
+# finds, you can replace the line
+#
+# latex $thisfile
+# by
+# echo X | latex $thisfile
+
+# FILES GENERATED: In addition to the standard LaTeX output files,
+# back-up copies of the previous .aux and .idx files are generated. These
+# have names like file.aux.bak and file.idx.bak. They are rm'd at the end.
+
+
+# J.C. Collins. collins@phys.psu.edu
+# 29 Oct 97 JCC. Try again with BiBTeX
+
+# A.S. Beach. asb4@psu.edu
+# 23 Oct 97 ASB. Attempt at integrating BiBTeX.
+
+# J.C. Collins. collins@phys.psu.edu
+# 21 Mar 97 JCC. Clean-up
+# 17 Mar 97 JCC. Try latex command line to be echo X | latex ...
+# (Suggestion from klot@priam.serma.cea.fr, so that
+# LaTeX just stops on an error, without user intervention.)
+# But leave that as suggestion for customization.
+# 20 Jan 97 JCC. Clean up from previous versions.
+
+@ maxcount = 5
+
+if ( "$1" == "" ) then
+# No command line arguments => help message.
+cat << EOT
+ Usage
+
+ latexn file
+
+ LaTeXs file.tex. If there are no errors then LaTeX is repeated as necessary
+ to fix cross references, and to ensure that the table of contents and the
+ index (if any) are correct. Makeindex and/or bibtex are run if necessary.
+ If the file has an explicit extension, then LaTeX is applied to that file
+ rather to file.tex.
+ The maximum number of attempts at LaTeX is $maxcount. If LaTeX gives an
+ error (as indicated by its exit code), then no repeated runs of LaTeX are
+ made.
+EOT
+exit
+endif
+
+
+# Variables
+# thisfile = source file.
+# thisbase= base of filename.
+# thisext = extension of filename.
+# resulttex = exitcode
+
+set thisfile=$1
+set thisbase=$thisfile:r
+set thisext=$thisfile:e
+set resulttex=0
+
+if ( "$thisext" == "" ) then
+ # No extension supplied.
+ set thisfile=$thisbase.tex
+endif
+
+if ( ! -e $thisfile ) then
+ echo File $thisfile does not exist.
+ exit
+endif
+
+@ count = 0
+# We'll repeat LaTeX until the variable dorepeat is undefined.
+# We'll use LaTeX at least once.
+set dorepeat
+while ( $?dorepeat )
+ if ( -e $thisbase.idx) then
+ echo Making backup of old .idx file: $thisbase.idx.bak. Then makeindex...
+ cp -p $thisbase.idx $thisbase.idx.bak
+ makeindex $thisbase.idx
+ echo ' '
+ endif
+
+ if ( -e $thisbase.aux) then
+ echo Making backup of old .aux file: $thisbase.aux.bak
+ cp -p $thisbase.aux $thisbase.aux.bak
+
+ grep \\\\bibdata $thisbase.aux > /dev/null
+ if ( ( $status == 0 ) && ( $count == 0 ) ) then
+ echo Need bibtex run before first pass...
+ bibtex $thisbase
+ echo ' '
+ endif
+ else if ( ! -e $thisbase.aux.bak) then
+ # Make dummy file. This will save a pass if there are no
+ # cross-references generated
+ echo "\relax " >! $thisbase.aux.bak
+ endif
+
+ if ( -e $thisbase.bbl) then
+ echo Making backup of old .bbl file: $thisbase.bbl.bak
+ cp -p $thisbase.bbl $thisbase.bbl.bak
+ endif
+
+
+
+
+ # Normal latex:
+ latex $thisfile
+ # Commented out alternative to standard latex command to make
+ # latex stop after it encounters an error.
+ # echo X | latex $thisfile
+
+ set resulttex=$status
+ @ count = $count + 1
+ echo Exit code $resulttex. Number of iterations $count.
+ # status = 0 => no error or mild error (overfull and underfull etc)
+
+
+ # Now run bibtex, if needed, i.e.,
+ # an .aux file exists, it contains the string \bibdata, and
+ # this is the first pass.
+ # The information that bibtex reads from the .aux file is
+ # pass-independent. If we find (below) that the bbl file is unchanged,
+ # then the last latex saw a correct bibliography.
+ if ( -e $thisbase.aux ) then
+ # I think I have put the correct number of \'s:
+ grep \\\\bibdata $thisbase.aux
+ if ( ( $status == 0 ) && ( $count == 1 ) ) then
+ bibtex $thisbase
+ echo ' '
+ endif
+ endif
+
+ if ( $count >= $maxcount ) then
+ unset dorepeat
+ echo "I've tried $count times. That's enough."
+ else if ( $resulttex >= 1 ) then
+ echo "Bad error. Therefore I will not run latex a second time"
+ echo Return code $resulttex
+ unset dorepeat
+ else
+ # Default to not needing to do anything more:
+ unset dorepeat
+ # Now find any conditions that require a rerun of LaTeX:
+
+ # new .aux file
+ if ( ! -e $thisbase.aux ) then
+ echo latex produced no .aux file.
+ if ( -e $thisbase.aux.bak ) then
+ echo The .aux.bak file is of no use. I will delete it.
+ rm $thisbase.aux.bak
+ endif
+ else if ( -e $thisbase.aux.bak ) then
+ # "Has the .aux file changed?"
+ diff $thisbase.aux $thisbase.aux.bak > /dev/null
+ if ( $status == 0) then
+ echo The .aux file has not changed.
+ else
+ echo The .aux file has changed. I must run latex again.
+ set dorepeat
+ endif
+ else
+ echo I have a .aux file, but there was no previous one, so I must run latex again.
+ set dorepeat
+ endif
+
+ # new .idx file
+ if ( ! -e $thisbase.idx ) then
+ if ( -e $thisbase.idx.bak ) then
+ echo latex produced no .idx file.
+ echo The .idx.bak file is of no use. I will delete it.
+ rm $thisbase.idx.bak
+ endif
+ else if ( -e $thisbase.idx.bak ) then
+ # Has the .idx file changed?
+ diff $thisbase.idx $thisbase.idx.bak > /dev/null
+ if ( $status == 0) then
+ echo The .idx file has not changed.
+ else
+ echo The .idx file has changed. I must run latex again.
+ set dorepeat
+ endif
+ else
+ echo I have a .idx file, but there was no previous one, so I must run latex again.
+ set dorepeat
+ endif
+
+ # new .bbl file
+ if ( ! -e $thisbase.bbl ) then
+ if ( -e $thisbase.bbl.bak ) then
+ echo latex produced no .bbl file.
+ echo The .bbl.bak file is of no use. I will delete it.
+ rm $thisbase.bbl.bak
+ endif
+ else if ( -e $thisbase.bbl.bak ) then
+ # Has the .bbl file changed?
+ diff $thisbase.bbl $thisbase.bbl.bak > /dev/null
+ if ( $status == 0) then
+ echo The .bbl file has not changed.
+ else
+ echo The .bbl file has changed. I must run latex again.
+ set dorepeat
+ endif
+ else
+ echo I have a .bbl file, but there was no previous one, so I must run latex again.
+ set dorepeat
+ endif
+ endif
+ echo ===============================================
+end
+
+# now delete the backup files.
+if ( -e $thisbase.aux.bak ) rm $thisbase.aux.bak
+if ( -e $thisbase.bbl.bak ) rm $thisbase.bbl.bak
+if ( -e $thisbase.idx.bak ) rm $thisbase.idx.bak
+
+exit $resulttex