2 # texi2dvi --- produce DVI (or PDF) files from Texinfo (or (La)TeX) sources.
3 # $Id: texi2dvi,v 1.135 2008/09/18 18:46:01 karl Exp $
5 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001,
6 # 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
8 # This program is free software; you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation; either version 3 of the License,
11 # or (at your option) any later version.
13 # This program is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
18 # You should have received a copy of the GNU General Public License
19 # along with this program. If not, see <http://www.gnu.org/licenses/>.
21 # Original author: Noah Friedman.
23 # Please send bug reports, etc. to bug-texinfo@gnu.org.
24 # If possible, please send a copy of the output of the script called with
25 # the `--debug' option when making a bug report.
27 test -f /bin
/ksh
&& test -z "$RUNNING_KSH" \
28 && { UNAMES
=`uname -s`; test "x$UNAMES" = xULTRIX
; } 2>/dev
/null \
29 && { RUNNING_KSH
=true
; export RUNNING_KSH
; exec /bin
/ksh
$0 ${1+"$@"}; }
32 # No failure shall remain unpunished.
35 if ! command -v tex
>/dev
/null
2>&1; then
37 You don
't have a working TeX binary installed, but the texi2dvi script
38 can't proceed without it. If you want to use this
script, you have to
39 install some kind of TeX
, for example the MikTeX package from
40 http
://miktex.org
/ (which is not part of the typical MSYS environment
).
45 # This string is expanded by rcs automatically when this file is checked out.
46 rcs_revision
='$Revision: 1.135 $'
47 rcs_version
=`set - $rcs_revision; echo $2`
48 program
=`echo $0 | sed -e 's!.*/!!'`
50 build_mode
=${TEXI2DVI_BUILD_MODE:-local}
51 build_dir
=${TEXI2DVI_BUILD_DIRECTORY:-.}
53 # Initialize variables for option overriding and otherwise.
54 # Don't use `unset' since old bourne shells don't have this command.
55 # Instead, assign them an empty value.
57 batch=false
# true for batch mode
61 expand= # t for expansion via makeinfo
63 line_error
=true
# Pass --file-line-error to TeX.
64 no_line_error
=false
# absolutely do not pass --file-line-error to TeX
67 quiet
=false
# by default let the tools' message be displayed
71 textra
= # Extra TeX commands to insert in the input file.
72 txiprereq
=19990129 # minimum texinfo.tex version with macro expansion
73 verb
=false
# true for verbose mode
74 translate_file
= # name of charset translation file
75 recode_from
= # if not empty, recode from this encoding to @documentencoding
79 # We have to initialize IFS to space tab newline since we save and
80 # restore IFS and apparently POSIX allows stupid/broken behavior with
82 # http://lists.gnu.org/archive/html/automake-patches/2006-05/msg00008.html
83 # We need space, tab and new line, in precisely that order. And don't leave
89 IFS
="$space$tab$newline"
91 # In case someone pedantic insists on using grep -E.
94 # Systems which define $COMSPEC or $ComSpec use semicolons to separate
95 # directories in TEXINPUTS -- except for Cygwin et al., where COMSPEC
96 # might be inherited, but : is used.
97 if test -n "$COMSPEC$ComSpec" \
98 && uname |
$EGREP -iv 'cygwin|mingw|djgpp' >/dev
/null
; then
104 # Pacify verbose cds.
105 CDPATH
=${ZSH_VERSION+.}$path_sep
107 # If $TEX is set to a directory, don't use it.
108 test -n "$TEX" && test -d "$TEX" && unset TEX
111 ## --------------------- ##
112 ## Auxiliary functions. ##
113 ## --------------------- ##
115 # In case `local' is not supported by the shell, provide a function
116 # that simulates it by simply performing the assignments. This means
117 # that we must not expect `local' to work, i.e., we must not (i) rely
118 # on it during recursion, and (ii) have two local declarations of the
119 # same variable. (ii) is easy to check statically, and our test suite
120 # does make sure there is never twice a static local declaration of a
121 # variable. (i) cannot be checked easily, so just be careful.
123 # Note that since we might use a function simulating `local', we can
124 # no longer rely on the fact that no IFS-splitting is performed. So,
129 # is fine (no IFS-splitting), never write
152 # Return to the original directory.
155 # In case $orig_pwd is on a different drive (for DOS).
158 # Return to the original directory so that
159 # - the next file is processed in correct conditions
160 # - the temporary file can be removed
161 cd "$orig_pwd" ||
exit 1
166 # Return the directory part of FILE.
169 dirname "$1" 2>/dev
/null \
170 ||
{ echo "$1" |
sed 's!/[^/]*$!!;s!^$!.!'; }
174 # absolute NAME -> ABS-NAME
175 # -------------------------
176 # Return an absolute path to NAME.
181 # Absolute paths don't need to be expanded.
185 slashes
=`echo "$1" | sed -n 's,.*[^/]\(/*\)$,\1,p'`
187 rel
=$orig_pwd/`func_dirname "$1"`
188 if test -d "$rel"; then
189 (cd "$rel" 2>/dev
/null
&&
191 n
=`pwd`/`basename "$1"`"$slashes"
194 error
1 "not a directory: $rel"
201 # ensure_dir DIR1 DIR2...
202 # -----------------------
203 # Make sure the directories exist.
210 || error
1 "cannot create directory: $dir"
215 # error EXIT_STATUS LINE1 LINE2...
216 # --------------------------------
217 # Report an error and exit with failure if EXIT_STATUS is non null.
223 if test "$s" != 0; then
231 # Return true if PROG is somewhere in PATH, else false.
235 IFS
=$path_sep # break path components at the path separator
238 # The basic test for an executable is `test -f $f && test -x $f'.
239 # (`test -x' is not enough, because it can also be true for directories.)
240 # We have to try this both for $1 and $1.exe.
242 # Note: On Cygwin and DJGPP, `test -x' also looks for .exe. On Cygwin,
243 # also `test -f' has this enhancement, bot not on DJGPP. (Both are
244 # design decisions, so there is little chance to make them consistent.)
245 # Thusly, it seems to be difficult to make use of these enhancements.
247 if { test -f "$dir/$1" && test -x "$dir/$1"; } ||
248 { test -f "$dir/$1.exe" && test -x "$dir/$1.exe"; }; then
255 # report LINE1 LINE2...
256 # ---------------------
257 # Report some information on stderr.
269 # Run the COMMAND-LINE verbosely, and catching errors as failures.
280 # Display usage and exit successfully.
283 # We used to simply have `echo "$usage"', but coping with the
284 # changing behavior of `echo' is much harder than simply using a
287 # echo '\noto' echo '\\noto' echo -e '\\noto'
288 # bash 3.1 \noto \\noto \noto
289 # bash 3.2 %oto \noto -e \noto
291 # where % denotes the eol character.
293 Usage: $program [OPTION]... FILE...
295 Run each Texinfo or (La)TeX FILE through TeX in turn until all
296 cross-references are resolved, building all indices. The directory
297 containing each FILE is searched for included files. The suffix of FILE
298 is used to determine its language ((La)TeX or Texinfo). To process
299 (e)plain TeX files, set the environment variable LATEX=tex.
301 In order to make texi2dvi a drop-in replacement of TeX/LaTeX in AUC-TeX,
302 the FILE may also be composed of the following simple TeX commands.
303 \`\\input{FILE}' the actual file to compile
304 \`\\nonstopmode' same as --batch
306 Makeinfo is used to perform Texinfo macro expansion before running TeX
310 -b, --batch no interaction
311 -D, --debug turn on shell debugging (set -x)
312 -h, --help display this help and exit successfully
313 -o, --output=OFILE leave output in OFILE (implies --clean);
314 only one input FILE may be specified in this case
315 -q, --quiet no output unless errors (implies --batch)
316 -s, --silent same as --quiet
317 -v, --version display version information and exit successfully
318 -V, --verbose report on what is done
321 -@ use @input instead of \input for preloaded Texinfo
322 --dvi output a DVI file [default]
323 --dvipdf output a PDF file via DVI (using dvipdf)
324 -e, -E, --expand force macro expansion using makeinfo
325 -I DIR search DIR for Texinfo files
326 -l, --language=LANG specify LANG for FILE, either latex or texinfo
327 --no-line-error do not pass --file-line-error to TeX
328 -p, --pdf use pdftex or pdflatex for processing
329 -r, --recode call recode before TeX to translate input
330 --recode-from=ENC recode from ENC to the @documentencoding
331 --src-specials pass --src-specials to TeX
332 -t, --command=CMD insert CMD in copy of input file
333 or --texinfo=CMD multiple values accumulate
334 --translate-file=FILE use given charset translation file for TeX
337 --build=MODE specify the treatment of auxiliary files [$build_mode]
338 --tidy same as --build=tidy
339 -c, --clean same as --build=clean
340 --build-dir=DIR specify where the tidy compilation is performed;
342 defaults to TEXI2DVI_BUILD_DIRECTORY [$build_dir]
343 --mostly-clean remove the auxiliary files and directories
346 The MODE specifies where the TeX compilation takes place, and, as a
347 consequence, how auxiliary files are treated. The build mode
348 can also be set using the environment variable TEXI2DVI_BUILD_MODE.
351 \`local' compile in the current directory, leaving all the auxiliary
352 files around. This is the traditional TeX use.
353 \`tidy' compile in a local *.t2d directory, where the auxiliary files
354 are left. Output files are copied back to the original file.
355 \`clean' same as \`tidy', but remove the auxiliary directory afterwards.
356 Every compilation therefore requires the full cycle.
358 Using the \`tidy' mode brings several advantages:
359 - the current directory is not cluttered with plethora of temporary files.
360 - clutter can be even reduced using --build-dir=dir: all the *.t2d
361 directories are stored there.
362 - clutter can be reduced to zero using, e.g., --build-dir=/tmp/\$USER.t2d
363 or --build-dir=\$HOME/.t2d.
364 - the output file is updated after every succesful TeX run, for
365 sake of concurrent visualization of the output. In a \`local' build
366 the viewer stops during the whole TeX run.
367 - if the compilation fails, the previous state of the output file
369 - PDF and DVI compilation are kept in separate subdirectories
370 preventing any possibility of auxiliary file incompatibility.
372 On the other hand, because \`tidy' compilation takes place in another
373 directory, occasionally TeX won't be able to find some files (e.g., when
374 using \\graphicspath): in that case use -I to specify the additional
375 directories to consider.
377 The values of the BIBTEX, LATEX (or PDFLATEX), MAKEINDEX, MAKEINFO,
378 TEX (or PDFTEX), TEXINDEX, and THUMBPDF environment variables are used
379 to run those commands, if they are set. Any CMD strings are added
380 after @setfilename for Texinfo input, in the first line for LaTeX input.
382 Email bug reports to <bug-texinfo@gnu.org>,
383 general questions and discussion to <help-texinfo@gnu.org>.
384 Texinfo home page: http://www.gnu.org/software/texinfo/
390 # verbose WORD1 WORD2
391 # -------------------
392 # Report some verbose information.
403 # Display version info and exit succesfully.
407 texi2dvi (GNU Texinfo 4.13) $rcs_version
409 Copyright (C) 2008 Free Software Foundation, Inc.
410 License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
411 This is free software: you are free to change and redistribute it.
412 There is NO WARRANTY, to the extent permitted by law.
418 ## ---------------- ##
419 ## Handling lists. ##
420 ## ---------------- ##
423 # list_append LIST-NAME ELEM
424 # --------------------------
425 # Set LIST-NAME to its former contents, with ELEM appended.
430 eval set X \$
$la_l "$@"
436 # list_concat_dirs LIST-NAME DIR-LIST
437 # -----------------------------------
438 # Append to LIST-NAME all the components (included empty) from
439 # the $path_sep separated list DIR-LIST. Make the paths absolute.
443 # Empty path components are meaningful to tex. We rewrite them as
444 # `EMPTY' so they don't get lost when we split on $path_sep.
445 # Hopefully no one will have an actual directory named EMPTY.
446 local replace_EMPTY
="-e 's/^$path_sep/EMPTY$path_sep/g' \
447 -e 's/$path_sep\$/${path_sep}EMPTY/g' \
448 -e 's/$path_sep$path_sep/${path_sep}EMPTY:/g'"
451 set x
`echo "$2" | eval sed $replace_EMPTY`; shift
458 list_append
$lcd_list ""
461 if test -d $dir; then
462 dir
=`absolute "$dir"`
463 list_append
$lcd_list "$dir"
471 # list_prefix LIST-NAME SEP -> STRING
472 # -----------------------------------
473 # Return a string that is composed of the LIST-NAME with each item
483 lp_res
="$lp_res \"$lp_p\" \"$i\""
488 # list_infix LIST-NAME SEP -> STRING
489 # ----------------------------------
490 # Same as list_prefix, but a separator.
501 # list_dir_to_abs LIST-NAME
502 # -------------------------
503 # Convert the list to using only absolute dir names.
504 # Currently unused, but should replace absolute_filenames some day.
513 dir
=`absolute "$dir"`
514 test -d "$dir" ||
continue
515 ld_res
="$ld_res \"$dir\""
522 ## ------------------------------ ##
523 ## Language auxiliary functions. ##
524 ## ------------------------------ ##
528 # Return the tex output language (DVI or PDF) for $OUT_LANG.
532 dvi | ps | dvipdf
) echo dvi
;;
533 pdf
) echo $out_lang;;
534 html | info | text
) echo $out_lang;;
535 *) error
1 "$0: invalid out_lang: $1";;
542 # Return the extension for $OUT_LANG.
547 dvi | html | info | pdf | ps | text
) echo $out_lang;;
548 *) error
1 "$0: invalid out_lang: $1";;
553 ## ------------------------- ##
554 ## TeX auxiliary functions. ##
555 ## ------------------------- ##
557 # Save TEXINPUTS so we can construct a new TEXINPUTS path for each file.
558 # Likewise for bibtex and makeindex.
559 tex_envvars
="BIBINPUTS BSTINPUTS DVIPSHEADERS INDEXSTYLE MFINPUTS MPINPUTS \
561 for var
in $tex_envvars; do
562 eval ${var}_orig
=\$
$var
567 # absolute_filenames TEX-PATH -> TEX-PATH
568 # ---------------------------------------
569 # Convert relative paths to absolute paths, so we can run in another
570 # directory (e.g., in tidy build mode, or during the macro-support
571 # detection). Prepend ".".
572 absolute_filenames
()
574 # Empty path components are meaningful to tex. We rewrite them as
575 # `EMPTY' so they don't get lost when we split on $path_sep.
576 # Hopefully no one will have an actual directory named EMPTY.
577 local replace_empty
="-e 's/^$path_sep/EMPTY$path_sep/g' \
578 -e 's/$path_sep\$/${path_sep}EMPTY/g' \
579 -e 's/$path_sep$path_sep/${path_sep}EMPTY:/g'"
581 res
=`echo "$1" | eval sed $replace_empty`
593 if test -d "$dir"; then
594 res
=$res$path_sep`absolute "$dir"`
596 # Even if $dir is not a directory, preserve it in the path.
597 # It might contain metacharacters that TeX will expand in
598 # turn, e.g., /some/path/{a,b,c}. This will not get the
599 # implicit absolutification of the path, but we can't help that.
600 res
=$res$path_sep$dir
609 # output_base_name FILE
610 # ---------------------
611 # The name of FILE, possibly renamed to satisfy --output.
617 out_noext
=`echo "$oname" | sed 's/\.[^.]*$//'`
619 file_ext
=`echo "$1" | sed 's/^.*\.//'`
620 echo "$out_noext.$file_ext"
626 # move_to_dest FILE...
627 # --------------------
628 # Move FILE to the place where the user expects it. Truly move it, that
629 # is, it must not remain in its build location unless that is also the
630 # output location. (Otherwise it might appear as an extra file in make
633 # FILE can be the principal output (in which case -o directly applies), or
634 # an auxiliary file with the same base name.
647 true
:) dest
=$orig_pwd;;
649 *:*) dest
=`output_base_name "$file"`;;
651 if test ! -f "$file"; then
652 error
1 "no such file or directory: $file"
654 if test -n "$dest"; then
655 # We need to know whether $dest is a directory.
656 if test -d "$dest"; then
660 destdir
="`dirname $dest`"
663 # We want to compare the source location and the output location,
664 # and if they are different, do the move. But if they are the
665 # same, we must preserve the source. Since we can't assume
666 # stat(1) or test -ef is available, resort to comparing the
667 # directory names, canonicalized with pwd. We can't use cmp -s
668 # since the output file might not actually change from run to run;
669 # e.g., TeX DVI output is timestamped to only the nearest minute.
670 destdir
=`cd $destdir && pwd`
671 destbase
=`basename $destfile`
673 sourcedir
=`dirname $file`
674 sourcedir
=`cd $sourcedir && pwd`
675 sourcebase
=`basename $file`
677 if test "$sourcedir/$sourcebase" != "$destdir/$destbase"; then
678 verbose
"Moving $file to $destfile"
680 mv "$file" "$destfile"
687 ## --------------------- ##
688 ## Managing xref files. ##
689 ## --------------------- ##
693 # Return with success with FILE is an aux file.
696 test -f "$1" ||
return 1
705 # Return with success with FILE is an aux file containing citation
709 test -s "$1" ||
return 1
710 if (grep '^\\bibstyle[{]' "$1" \
711 && grep '^\\bibdata[{]' "$1" \
712 ## The following line is suspicious: fails when there
713 ## are citations in sub aux files. We need to be
714 ## smarter in this case.
715 ## && grep '^\\citation[{]' "$f"
725 # Return with success with FILE is an index file.
726 # When index.sty is used, there is a space before the brace.
729 test -f "$1" ||
return 1
730 case `sed '1q' "$1"` in
731 "\\entry{"*|
"\\indexentry{"*|
"\\indexentry {"*) return 0;;
738 # Return with success if FILE is an xref file (indexes, tables and lists).
741 test -f "$1" ||
return 1
742 # If the file is not suitable to be an index or xref file, don't
743 # process it. It's suitable if the first character is a
744 # backslash or right quote or at, as long as the first line isn't
746 case `sed '1q' "$1"` in
747 "\\input texinfo"*) return 1;;
754 # generated_files_get FILENAME-NOEXT [PREDICATE-FILTER]
755 # -----------------------------------------------------
756 # Return the list of files generated by the TeX compilation of FILENAME-NOEXT.
757 generated_files_get
()
760 if test -n "$2"; then
764 # Gather the files created by TeX.
766 if test -f "$1.log"; then
767 sed -n -e "s,^\\\\openout.* = \`\\(.*\\)'\\.,\\1,p" "$1.log"
771 # Depending on these files, infer outputs from other tools.
776 # texindex: texinfo.cp -> texinfo.cps
777 if index_file_p
$file; then
782 if aux_file_p
$file; then
783 # bibtex: *.aux -> *.bbl and *.blg.
784 echo $file |
sed 's/^\(.*\)\.aux$/\1.bbl/'
785 echo $file |
sed 's/^\(.*\)\.aux$/\1.blg/'
787 echo $file |
sed 's/^\(.*\)\.aux$/\1.fls/'
792 # Filter existing files matching the criterion.
794 # With an input file name containing a space, this produces a
795 # "command not found" message (and filtering is ineffective).
796 # The situation with a newline is presumably even worse.
798 if $filter "$file"; then
803 # Some files are opened several times, e.g., listings.sty's *.vrb.
810 # Save the xref files.
813 # Save copies of auxiliary files for later comparison.
814 xref_files_orig
=`generated_files_get "$in_noext" xref_file_p`
815 if test -n "$xref_files_orig"; then
816 verbose
"Backing up xref files: $xref_files_orig"
817 # The following line improves `cp $xref_files_orig "$work_bak"'
818 # by preserving the directory parts. Think of
819 # cp chap1/main.aux chap2/main.aux $work_bak.
821 # Users may have, e.g., --keep-old-files. Don't let this interfere.
822 # (Don't use unset for the sake of ancient shells.)
823 TAR_OPTIONS
=; export TAR_OPTIONS
824 tar cf
- $xref_files_orig |
(cd "$work_bak" && tar xf
-)
831 # Whether the xref files were changed since the previous run.
832 xref_files_changed
()
834 # LaTeX (and the package changebar) report in the LOG file if it
835 # should be rerun. This is needed for files included from
836 # subdirs, since texi2dvi does not try to compare xref files in
837 # subdirs. Performing xref files test is still good since LaTeX
838 # does not report changes in xref files.
839 if grep "Rerun to get" "$in_noext.log" >&6 2>&1; then
843 # If old and new lists don't at least have the same file list,
844 # then one file or another has definitely changed.
845 xref_files_new
=`generated_files_get "$in_noext" xref_file_p`
846 verbose
"Original xref files = $xref_files_orig"
847 verbose
"New xref files = $xref_files_new"
848 if test "x$xref_files_orig" != "x$xref_files_new"; then
852 # Compare each file until we find a difference.
853 for this_file
in $xref_files_new; do
854 verbose
"Comparing xref file `echo $this_file | sed 's|\./||g'` ..."
855 # cmp -s returns nonzero exit status if files differ.
856 if cmp -s "$this_file" "$work_bak/$this_file"; then :; else
857 verbose
"xref file `echo $this_file | sed 's|\./||g'` differed ..."
859 diff -u "$work_bak/$this_file" "$this_file"
871 ## ----------------------- ##
872 ## Running the TeX suite. ##
873 ## ----------------------- ##
879 # Run TeX as "$tex $in_input", taking care of errors and logs.
882 case $in_lang:`out_lang_tex` in
883 latex
:dvi
) tex
=${LATEX:-latex};;
884 latex
:pdf
) tex
=${PDFLATEX:-pdflatex};;
886 # MetaPost also uses the TEX environment variable. If the user
887 # has set TEX=latex for that reason, don't bomb out.
889 *latex
) tex
=tex
;; # don't bother trying to find etex
892 texinfo
:pdf
) tex
=$PDFTEX;;
894 *) error
1 "$0: $out_lang not supported for $in_lang";;
897 # Beware of aux files in subdirectories that require the
898 # subdirectory to exist.
899 case $in_lang:$tidy in
901 sed -n 's|^[ ]*\\include{\(.*\)/.*}.*|\1|p' "$in_input" |
905 ensure_dir
"$work_build/$d"
910 # Note that this will be used via an eval: quote properly.
913 # If possible, make TeX report error locations in GNU format.
914 if test "${tex_help:+set}" != set; then
915 # Go to a temporary directory to try --help, since old versions that
916 # don't accept --help will generate a texput.log.
917 tex_help_dir
=$t2ddir/tex_help
918 ensure_dir
"$tex_help_dir"
919 tex_help
=`cd "$tex_help_dir" >&6 && $tex --help </dev/null 2>&1`
921 if $no_line_error; then :; else
922 # The mk program and perhaps others want to parse TeX's
923 # original error messages.
924 case $line_error:$tex_help in
925 true
:*file-line-error
*) cmd
="$cmd --file-line-error";;
929 # Tell TeX about TCX file, if specified.
930 test -n "$translate_file" && cmd
="$cmd --translate-file=$translate_file"
932 # Tell TeX to make source specials (for backtracking from output to
933 # source, given a sufficiently smart editor), if specifed.
934 test -n "$src_specials" && cmd
="$cmd $src_specials"
936 # Tell TeX to be batch if requested.
938 # \batchmode does not show terminal output at all, so we don't
939 # want that. And even in batch mode, TeX insists on having input
940 # from the user. Close its stdin to make it impossible.
941 cmd
="$cmd </dev/null '${escape}nonstopmode'"
944 # we'd like to handle arbitrary input file names, especially
945 # foo~bar/a~b.tex, since Debian likes ~ characters.
946 if $catcode_special; then
947 # $normaltilde is just to reduce line length in this source file.
948 # The idea is to define \normaltilde as a catcode other ~ character,
949 # then make the active ~ be equivalent to that, instead of the plain
950 # TeX tie. Then when the active ~ appears in the filename, it will
951 # be expanded to itself, as far as \input will see. (This is the
952 # same thing that texinfo.tex does in general, BTW.)
953 normaltilde
="${escape}catcode126=12 ${escape}def${escape}normaltilde{~}"
954 cmd
="$cmd '$normaltilde${escape}catcode126=13 ${escape}let~\normaltilde '"
956 # Other special (non-active) characters could be supported by
957 # resetting their catcodes to other on the command line and changing
958 # texinfo.tex to initialize everything to plain catcodes. Maybe someday.
960 # append the \input command.
961 cmd
="$cmd '${escape}input'"
963 # TeX's \input does not (easily or reliably) support whitespace
964 # characters or other special characters in file names. Our intensive
965 # use of absolute file names makes this worse: the enclosing directory
966 # names may include white spaces. Improve the situation using a
967 # symbolic link to the filename in the current directory, in tidy mode
968 # only. Do not alter in_input.
970 # The filename is almost always tokenized using plain TeX conventions
971 # (the exception would be if the user made a texinfo.fmt file). Not
972 # all the plain TeX special characters cause trouble, but there's no
973 # harm in making the link.
975 case $tidy:`func_dirname "$in_input"` in
976 true
:*["$space$tab$newline\"#\$%\\^_{}~"]*)
977 _run_tex_file_name
=`basename "$in_input"`
978 if test ! -f "$_run_tex_file_name"; then
979 # It might not be a file, clear it.
980 run
rm -f "$_run_tex_file_name"
981 run
ln -s "$in_input"
983 cmd
="$cmd '$_run_tex_file_name'"
987 cmd
="$cmd '$in_input'"
991 verbose
"$0: Running $cmd ..."
992 if eval "$cmd" >&5; then
994 dvi | pdf
) move_to_dest
"$in_noext.$out_lang";;
997 error
1 "$tex exited with bad status, quitting."
1003 # Run bibtex on current file.
1004 # - If its input (AUX) exists.
1005 # - If some citations are missing (LOG contains `Citation').
1006 # or the LOG complains of a missing .bbl
1008 # Don't try to be too smart:
1010 # 1. Running bibtex only if the bbl file exists and is older than
1011 # the LaTeX file is wrong, since the document might include files
1012 # that have changed.
1014 # 3. Because there can be several AUX (if there are \include's),
1015 # but a single LOG, looking for missing citations in LOG is
1016 # easier, though we take the risk to match false messages.
1020 latex
) bibtex
=${BIBTEX:-bibtex};;
1024 # "Citation undefined" is for LaTeX, "Undefined citation" for btxmac.tex.
1025 # The no .aux && \bibdata test is also for btxmac, in case it was the
1026 # first run of a bibtex-using document. Otherwise, it's possible that
1027 # bibtex would never be run.
1028 if test -r "$in_noext.aux" \
1029 && test -r "$in_noext.log" \
1030 && (grep 'Warning:.*Citation.*undefined' "$in_noext.log" \
1031 ||
grep '.*Undefined citation' "$in_noext.log" \
1032 ||
grep 'No file .*\.bbl\.' "$in_noext.log") \
1033 ||
(grep 'No \.aux file' "$in_noext.log" \
1034 && grep '^\\bibdata' "$in_noext.aux") \
1037 for f
in `generated_files_get "$in_noext" bibaux_file_p`
1046 # Run texindex (or makeindex) on current index files. If they already
1047 # exist, and after running TeX a first time the index files don't
1048 # change, then there's no reason to run TeX again. But we won't know
1049 # that if the index files are out of date or nonexistent.
1053 latex
) texindex
=${MAKEINDEX:-makeindex};;
1054 texinfo
) texindex
=${TEXINDEX:-texindex};;
1056 index_files
=`generated_files_get $in_noext index_file_p`
1057 if test -n "$texindex" && test -n "$index_files"; then
1058 run
$texindex $index_files
1067 if test `out_lang_tex` = pdf \
1068 && test -r "$in_noext.log" \
1069 && grep 'thumbpdf\.sty' "$in_noext.log" >&6 2>&1; \
1071 thumbpdf
=${THUMBPDF:-thumbpdf}
1072 thumbcmd
="$thumbpdf $in_dir/$in_noext"
1073 verbose
"Running $thumbcmd ..."
1074 if $thumbcmd >&5; then
1077 report
"$thumbpdf exited with bad status." \
1078 "Ignoring its output."
1084 # run_dvipdf FILE.dvi
1085 # -------------------
1086 # Convert FILE.dvi to FILE.pdf.
1089 # Find which dvi->pdf program is available.
1090 if test -z "$dvipdf"; then
1091 for i
in "$DVIPDF" dvipdfmx dvipdfm dvipdf dvi2pdf dvitopdf
;
1093 if findprog
$i; then
1098 # These tools have varying interfaces, some 'input output', others
1099 # 'input -o output'. They all seem to accept 'input' only,
1100 # outputting using the expected file name.
1102 if test ! -f `echo "$1" | sed -e 's/\.dvi$/.pdf/'`; then
1103 error
1 "$0: cannot find output file"
1109 # Run the TeX tools until a fix point is reached.
1112 # Move to the working directory.
1114 verbose
"cd $work_build"
1115 cd "$work_build" ||
exit 1
1118 # Count the number of cycles.
1122 cycle
=`expr $cycle + 1`
1123 verbose
"Cycle $cycle for $command_line_filename"
1127 # We run bibtex first, because I can see reasons for the indexes
1128 # to change after bibtex is run, but I see no reason for the
1134 xref_files_changed ||
break
1137 # If we were using thumbpdf and producing PDF, then run thumbpdf
1138 # and TeX one last time.
1141 # Install the result if we didn't already (i.e., if the output is
1145 run_dvipdf
"$in_noext.`out_lang_tex`"
1146 move_to_dest
"$in_noext.`out_lang_ext`"
1149 dvips
-o "$in_noext.`out_lang_ext`" "$in_noext.`out_lang_tex`"
1150 move_to_dest
"$in_noext.`out_lang_ext`"
1157 ## -------------------------------- ##
1158 ## TeX processing auxiliary tools. ##
1159 ## -------------------------------- ##
1162 # A sed script that preprocesses Texinfo sources in order to keep the
1163 # iftex sections only. We want to remove non TeX sections, and comment
1164 # (with `@c texi2dvi') TeX sections so that makeinfo does not try to
1165 # parse them. Nevertheless, while commenting TeX sections, don't
1166 # comment @macro/@end macro so that makeinfo does propagate them.
1167 # Unfortunately makeinfo --iftex --no-ifinfo doesn't work well enough
1168 # (yet), makeinfo can't parse the TeX commands, so work around with sed.
1171 '/^@tex/,/^@end tex/{
1174 /^@iftex/,/^@end iftex/{
1176 /^@c texi2dvi@macro/,/^@c texi2dvi@end macro/{
1180 /^@ifnottex/,/^@end ifnottex/{
1183 /^@ifinfo/,/^@end ifinfo/{
1185 /^@menu/,/^@end menu/p
1189 s/^@ifnotinfo/@c texi2dvi@ifnotinfo/
1190 s/^@end ifnotinfo/@c texi2dvi@end ifnotinfo/'
1192 # Uncommenting is simple: Remove any leading `@c texi2dvi'.
1193 uncomment_iftex
='s/^@c texi2dvi//'
1198 # Expand macro commands in the original source file using Makeinfo.
1199 # Always use `end' footnote style, since the `separate' style
1200 # generates different output (arguably this is a bug in -E). Discard
1201 # main info output, the user asked to run TeX, not makeinfo.
1204 test $in_lang = texinfo \
1207 # Unless required by the user, makeinfo expansion is wanted only
1208 # if texinfo.tex is too old.
1209 if test "$expand" = t
; then
1210 makeinfo
=${MAKEINFO:-makeinfo}
1212 # Check if texinfo.tex performs macro expansion by looking for
1213 # its version. The version is a date of the form YEAR-MO-DA.
1214 # We don't need to use [0-9] to match the digits since anyway
1215 # the comparison with $txiprereq, a number, will fail with non
1217 # Run in a temporary directory to avoid leaving files.
1218 version_test_dir
=$t2ddir/version_test
1219 ensure_dir
"$version_test_dir"
1221 cd "$version_test_dir"
1222 echo '\input texinfo.tex @bye' >txiversion.tex
1223 # Be sure that if tex wants to fail, it is not interactive:
1225 $TEX txiversion.tex
</dev
/null
>txiversion.out
2>txiversion.err
1227 if test $?
!= 0; then
1228 cat "$version_test_dir/txiversion.out"
1229 cat "$version_test_dir/txiversion.err" >&2
1230 error
1 "texinfo.tex appears to be broken, quitting."
1232 eval `sed -n 's/^.*\[\(.*\)version \(....\)-\(..\)-\(..\).*$/txiformat=\1 txiversion="\2\3\4"/p' "$version_test_dir/txiversion.out"`
1233 verbose
"texinfo.tex preloaded as \`$txiformat', version is \`$txiversion' ..."
1234 if test "$txiprereq" -le "$txiversion" >&6 2>&1; then
1237 makeinfo
=${MAKEINFO:-makeinfo}
1239 # As long as we had to run TeX, offer the user this convenience:
1240 if test "$txiformat" = Texinfo
; then
1245 if test -n "$makeinfo"; then
1246 # in_src: the file with macros expanded.
1247 # Use the same basename to generate the same aux file names.
1248 work_src
=$workdir/src
1249 ensure_dir
"$work_src"
1250 in_src
=$work_src/$in_base
1252 miincludes
=`list_prefix includes -I`
1253 verbose
"Macro-expanding $command_line_filename to $in_src ..."
1254 # eval $makeinfo because it might be defined as something complex
1255 # (running missing) and then we end up with things like '"-I"',
1256 # and "-I" (including the quotes) is not an option name. This
1257 # happens with gettext 0.14.5, at least.
1258 sed "$comment_iftex" "$command_line_filename" \
1259 |
eval $makeinfo --footnote-style=end
-I "$in_dir" $miincludes \
1260 -o /dev
/null
--macro-expand=- \
1261 |
sed "$uncomment_iftex" >"$in_src"
1262 # Continue only if everything succeeded.
1264 ||
test ! -r "$in_src"; then
1265 verbose
"Expansion failed, ignored...";
1272 # insert_commands ()
1273 # ------------------
1274 # Used most commonly for @finalout, @smallbook, etc.
1279 latex
) textra_cmd
=1i
;;
1280 texinfo
) textra_cmd
='/^@setfilename/a';;
1281 *) error
1 "internal error, unknown language: $in_lang";;
1284 if test -n "$textra"; then
1285 # _xtr. The file with the user's extra commands.
1286 work_xtr
=$workdir/xtr
1287 in_xtr
=$work_xtr/$in_base
1288 ensure_dir
"$work_xtr"
1289 verbose
"Inserting extra commands: $textra"
1291 $textra" "$in_input" >"$in_xtr"
1298 # If this is a Texinfo file with a specified input encoding, and
1299 # recode is available, then recode to plain 7 bit Texinfo.
1305 if test $in_lang = texinfo
; then
1306 pgm
='s/^ *@documentencoding *\([^ ][^ ]*\) *$/\1/
1311 encoding
=`sed -e "$pgm" "$in_input"`
1312 if $recode && test -n "$encoding" && findprog
recode; then
1313 if test -n "$recode_from"; then
1320 verbose
"Recoding from $from to $to."
1321 # _rcd. The Texinfo file recoded in 7bit.
1322 work_rcd
=$workdir/recode
1323 in_rcd
=$work_rcd/$in_base
1324 ensure_dir
"$work_rcd"
1325 if recode "$encoding..$to" <"$in_input" >"$in_rcd" \
1326 && test -s "$in_rcd"; then
1329 verbose
"Recoding failed, using original input."
1335 # compute_language FILENAME
1336 # -------------------------
1337 # Return the short string describing the language in which FILENAME
1338 # is written: `texinfo' or `latex'.
1341 # If the user explicitly specified the language, use that.
1342 # Otherwise, if the first line is \input texinfo, assume it's texinfo.
1343 # Otherwise, guess from the file extension.
1344 if test -n "$set_language"; then
1346 elif sed 1q
"$1" |
grep 'input texinfo' >&6; then
1349 # Get the type of the file (latex or texinfo) from the given language
1350 # we just guessed, or from the file extension if not set yet.
1352 *.ltx |
*.tex |
*.drv |
*.dtx
) echo latex
;;
1361 # Convert to HTML/INFO/TEXT.
1363 # Don't pass `-noiso' to hevea: it's useless in HTML since anyway the
1364 # charset is set to latin1, and troublesome in other modes since
1365 # accented characters loose their accents.
1367 # Don't pass `-o DEST' to hevea because in that case it leaves all its
1368 # auxiliary files there too... Too bad, because it means we will need
1369 # to handle images some day.
1372 local hevea
="${HEVEA:-hevea}"
1373 local run_hevea
="$hevea"
1377 text|info
) run_hevea
="$run_hevea -$1";;
1378 *) error
1 "run_hevea: invalid argument: $1";;
1381 # Compiling to the tmp directory enables to preserve a previous
1382 # successful compilation.
1383 run_hevea
="$run_hevea -fix -O -o '$out_base'"
1384 run_hevea
="$run_hevea `list_prefix includes -I` -I '$orig_pwd' "
1385 run_hevea
="$run_hevea '$in_input'"
1388 run_hevea
="$run_hevea -v -v"
1391 verbose
"running $run_hevea"
1392 if eval "$run_hevea" >&5; then
1393 # hevea leaves trailing white spaces, this is annoying.
1394 case $1 in text|info
)
1395 perl
-pi -e 's/[ \t]+$//g' "$out_base"*;;
1398 html|text
) move_to_dest
"$out_base";;
1399 info
) # There can be foo.info-1, foo.info-2 etc.
1400 move_to_dest
"$out_base"*;;
1403 error
1 "$hevea exited with bad status, quitting."
1408 # run_core_conversion ()
1409 # ----------------------
1410 # Run the TeX (or HeVeA).
1411 run_core_conversion
()
1413 case $in_lang:`out_lang_tex` in
1416 latex
:html|latex
:text|latex
:info
)
1417 run_hevea
$out_lang;;
1419 error
1 "invalid input/output combination: $in_lang/$out_lang";;
1426 # Run the full compilation chain, from pre-processing to installation
1427 # of the output at its expected location.
1430 # Source file might include additional sources.
1431 # We want `.:$orig_pwd' before anything else. (We'll add `.:' later
1432 # after all other directories have been turned into absolute paths.)
1433 # `.' goes first to ensure that any old .aux, .cps,
1434 # etc. files in ${directory} don't get used in preference to fresher
1435 # files in `.'. Include orig_pwd in case we are in clean build mode, where
1436 # we've cd'd to a temp directory.
1437 txincludes
=`list_infix includes $path_sep`
1438 common
="$orig_pwd$path_sep$in_dir$path_sep$txincludes$path_sep"
1439 for var
in $tex_envvars; do
1440 eval val
="\$common\$${var}_orig"
1441 # Convert relative paths to absolute paths, so we can run in another
1442 # directory (e.g., in clean build mode, or during the macro-support
1443 # detection). ".:" is added here.
1444 val
=`absolute_filenames "$val"`
1445 eval $var="\"$val\""
1447 eval verbose
\"$var=\'\$
${var}\'\"
1453 # --command, --texinfo
1459 # Run until a fix point is reached.
1468 verbose
"Removing" "$@"
1475 # Remove auxiliary files and directories. Changes the current directory.
1482 local log
="$work_build/$in_noext.log"
1483 set X
${1+"$@"} "$log" `generated_files_get "$work_build/$in_noext"`
1492 # Remove what should be removed according to options.
1493 # Called at the end of each compilation cycle, and at the end of
1494 # the script. Changes the current directory.
1498 local) cd_orig
; remove
"$t2ddir";;
1499 clean
) mostly_clean
;;
1506 ## ---------------------- ##
1507 ## Command line parsing. ##
1508 ## ---------------------- ##
1510 # Push a token among the arguments that will be used to notice when we
1511 # ended options/arguments parsing.
1512 # Use "set dummy ...; shift" rather than 'set - ..." because on
1513 # Solaris set - turns off set -x (but keeps set -e).
1514 # Use ${1+"$@"} rather than "$@" because Digital Unix and Ultrix 4.3
1515 # still expand "$@" to a single argument (the empty string) rather
1516 # than nothing at all.
1518 set dummy
${1+"$@"} "$arg_sep"; shift
1521 # Parse command line arguments.
1522 while test x
"$1" != x
"$arg_sep"; do
1524 # Handle --option=value by splitting apart and putting back on argv.
1527 opt
=`echo "$1" | sed -e 's/=.*//'`
1528 val
=`echo "$1" | sed -e 's/[^=]*=//'`
1530 set dummy
"$opt" "$val" ${1+"$@"}; shift
1534 # This recognizes --quark as --quiet. So what.
1537 # Silently and without documentation accept -b and --b[atch] as synonyms.
1538 -b |
--batch) batch=true
;;
1539 --build) shift; build_mode
=$1;;
1540 --build-dir) shift; build_dir
=$1; build_mode
=tidy
;;
1541 -c |
--clean) build_mode
=clean
;;
1542 -D |
--debug) debug
=true
;;
1543 --dvi) out_lang
=dvi
;;
1544 --dvipdf) out_lang
=dvipdf
;;
1545 -e |
-E |
--expand) expand=t
;;
1546 -h |
--help) usage
;;
1547 --html) out_lang
=html
;;
1548 -I) shift; list_concat_dirs includes
"$1";;
1549 --info) out_lang
=info
;;
1550 -l |
--lang |
--language) shift; set_language
=$1;;
1551 --mostly-clean) action
=mostly-clean
;;
1552 --no-line-error) no_line_error
=true
;;
1553 -o |
--out |
--output)
1555 # Make it absolute, just in case we also have --clean, or whatever.
1556 oname
=`absolute "$1"`;;
1557 -p |
--pdf) out_lang
=pdf
;;
1559 -q |
-s |
--quiet |
--silent) quiet
=true
; batch=true
;;
1560 -r |
--recode) recode=true
;;
1561 --recode-from) shift; recode=true
; recode_from
="$1";;
1562 --src-specials) src_specials
=--src-specials;;
1563 -t |
--texinfo |
--command ) shift; textra
="$textra\\
1564 "`echo "$1" | sed 's/\\\\/\\\\\\\\/g'`;;
1565 --text) out_lang
=text
;;
1566 --translate-file ) shift; translate_file
="$1";;
1567 --tidy) build_mode
=tidy
;;
1568 -v |
--vers*) version
;;
1569 -V |
--verb*) verb
=true
;;
1570 --) # What remains are not options.
1572 while test x
"$1" != x
"$arg_sep"; do
1573 set dummy
${1+"$@"} "$1"; shift
1578 error
1 "Unknown or ambiguous option \`$1'." \
1579 "Try \`--help' for more information."
1581 *) set dummy
${1+"$@"} "$1"; shift;;
1588 # $tidy: compile in a t2d directory.
1589 # $clean: remove all the aux files.
1591 local) clean
=false
; tidy
=false
;;
1592 tidy
) clean
=false
; tidy
=true
;;
1593 clean
) clean
=true
; tidy
=true
;;
1594 *) error
1 "invalid build mode: $build_mode";;
1597 # Interpret remaining command line args as filenames.
1600 error
2 "Missing file arguments." "Try \`--help' for more information."
1604 if test -n "$oname"; then
1605 error
2 "Can't use option \`--output' with more than one argument."
1611 # We can't do much without tex.
1613 if findprog
${TEX:-tex}; then :; else cat <<EOM
1614 You don't have a working TeX binary (${TEX:-tex}) installed anywhere in
1615 your PATH, and texi2dvi cannot proceed without one. If you want to use
1616 this script, you'll need to install TeX (if you don't have it) or change
1617 your PATH or TEX environment variable (if you do). See the --help
1618 output for more details.
1620 For information about obtaining TeX, please see http://www.tug.org. If
1621 you happen to be using Debian, you can get it with this command:
1622 apt-get install tetex-bin
1628 # We want to use etex (or pdftex) if they are available, and the user
1629 # didn't explicitly specify. We don't check for elatex and pdfelatex
1630 # because (as of 2003), the LaTeX team has asked that new distributions
1631 # use etex by default anyway.
1633 # End up with the TEX and PDFTEX variables set to what we are going to use.
1634 if test -z "$TEX"; then
1635 if findprog etex
; then TEX
=etex
; else TEX
=tex
; fi
1638 if test -z "$PDFTEX"; then
1639 if findprog pdfetex
; then PDFTEX
=pdfetex
; else PDFTEX
=pdftex
; fi
1643 # File descriptor usage:
1645 # 1 standard output (--verbose messages)
1647 # 3 some systems may open it to /dev/tty
1648 # 4 used on the Kubota Titan
1649 # 5 tools output (turned off by --quiet)
1650 # 6 tracing/debugging (set -x output, etc.)
1653 # Main tools' output (TeX, etc.) that TeX users are used to seeing.
1655 # If quiet, discard, else redirect to the message flow.
1663 # Enable tracing, and auxiliary tools output.
1665 # Should be used where you'd typically use /dev/null to throw output
1666 # away. But sometimes it is convenient to see that output (e.g., from
1667 # a grep) to aid debugging. Especially debugging at distance, via the
1678 # input_file_name_decode
1679 # ----------------------
1680 # Decode COMMAND_LINE_FILENAME, and compute:
1681 # - COMMAND_LINE_FILENAME clean of TeX commands
1683 # The directory to the input file, possibly absolute if needed.
1685 # The absolute directory of the input file.
1687 # The input file base name (no directory part).
1689 # The input file name without extensions (nor directory part).
1691 # Defaults to COMMAND_LINE_FILENAME, but might change if the
1692 # input is preprocessed (recode etc.). With directory, possibly absolute.
1693 input_file_name_decode
()
1695 # See if we are run from within AUC-Tex, in which case we are
1696 # passed `\input{FOO.tex}' or even `\nonstopmode\input{FOO.tex}'.
1697 case $command_line_filename in
1701 case $command_line_filename in
1703 # Let AUC-TeX error parser deal with line numbers.
1705 command_line_filename
=`\
1706 expr X"$command_line_filename" : X'.*input{\([^}]*\)}'`
1710 # If the COMMAND_LINE_FILENAME is not absolute (e.g., --debug.tex),
1711 # prepend `./' in order to avoid that the tools take it as an option.
1712 echo "$command_line_filename" |
$EGREP '^(/|[A-z]:/)' >&6 \
1713 || command_line_filename
="./$command_line_filename"
1715 # See if the file exists. If it doesn't we're in trouble since, even
1716 # though the user may be able to reenter a valid filename at the tex
1717 # prompt (assuming they're attending the terminal), this script won't
1718 # be able to find the right xref files and so forth.
1719 test -r "$command_line_filename" ||
1720 error
1 "cannot read $command_line_filename, skipping."
1722 # Get the name of the current directory.
1723 in_dir
=`func_dirname "$command_line_filename"`
1724 in_dir_abs
=`absolute "$in_dir"`
1725 # In a clean build, we `cd', so get an absolute file name.
1730 # Strip directory part but leave extension.
1731 in_base
=`basename "$command_line_filename"`
1733 in_noext
=`echo "$in_base" | sed 's/\.[^.]*$//'`
1735 # The normalized file name to compile. Must always point to the
1736 # file to actually compile (in case of recoding, macro-expansion etc.).
1737 in_input
=$in_dir/$in_base
1740 # Compute the output file name.
1741 if test x
"$oname" != x
; then
1744 out_name
=$in_noext.
`out_lang_ext`
1746 out_dir
=`func_dirname "$out_name"`
1747 out_dir_abs
=`absolute "$out_dir"`
1748 out_base
=`basename "$out_name"`
1749 out_noext
=`echo "$out_base" | sed 's/\.[^.]*$//'`
1753 ## -------------- ##
1755 ## -------------- ##
1757 for command_line_filename
1759 verbose
"Processing $command_line_filename ..."
1761 input_file_name_decode
1763 # `texinfo' or `latex'?
1764 in_lang
=`compute_language "$command_line_filename"`
1766 # An auxiliary directory used for all the auxiliary tasks involved
1767 # in compiling this document.
1769 '' | .
) t2ddir
=$out_noext.t2d
;;
1770 *) # Avoid collisions between multiple occurrences of the same
1771 # file. The sed expression is fragile if the cwd has
1772 # active characters.
1773 t2ddir
=$build_dir/`echo "$out_dir_abs/$out_noext.t2d" |
1774 sed "s,^$orig_pwd/,," |
1777 # Remove it at exit if clean mode.
1778 trap "cleanup" 0 HUP INT TERM
1780 ensure_dir
"$build_dir" "$t2ddir"
1782 # We will change directory, better work with an absolute path...
1783 t2ddir
=`absolute "$t2ddir"`
1784 # Sometimes there are incompatibilities between auxiliary files for
1785 # DVI and PDF. The contents can also change whether we work on PDF
1786 # and/or DVI. So keep separate spaces for each.
1787 workdir
=$t2ddir/`out_lang_tex`
1788 ensure_dir
"$workdir"
1790 # _build. In a tidy build, where the auxiliary files are output.
1792 work_build
=$workdir/build
1797 # _bak. Copies of the previous auxiliary files (another round is
1798 # run if they differ from the new ones).
1799 work_bak
=$workdir/bak
1801 # Make those directories.
1802 ensure_dir
"$work_build" "$work_bak"
1806 # Compile the document.
1818 exit 0 # exit successfully, not however we ended the loop.