summaryrefslogtreecommitdiff
path: root/Master
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2011-03-22 23:35:00 +0000
committerKarl Berry <karl@freefriends.org>2011-03-22 23:35:00 +0000
commit95b6c856b96c6328dc0e449574046ef4218c9f23 (patch)
tree801301fe5272c05157403c30fc6a34352c2e3184 /Master
parentc231b52342d5ce2940f7d8b66a94ffd87ad016a0 (diff)
latexmk (22mar11)
git-svn-id: svn://tug.org/texlive/trunk@21806 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r--Master/texmf-dist/doc/support/latexmk/CHANGES13
-rw-r--r--Master/texmf-dist/doc/support/latexmk/INSTALL2
-rw-r--r--Master/texmf-dist/doc/support/latexmk/README36
-rw-r--r--Master/texmf-dist/doc/support/latexmk/latexmk.pdfbin82989 -> 95808 bytes
-rw-r--r--Master/texmf-dist/doc/support/latexmk/latexmk.txt1510
-rwxr-xr-xMaster/texmf-dist/scripts/latexmk/latexmk.pl662
-rw-r--r--Master/texmf/doc/man/man1/latexmk.1271
-rw-r--r--Master/texmf/doc/man/man1/latexmk.man1.pdfbin94122 -> 108188 bytes
8 files changed, 1621 insertions, 873 deletions
diff --git a/Master/texmf-dist/doc/support/latexmk/CHANGES b/Master/texmf-dist/doc/support/latexmk/CHANGES
index 620b7dc9951..c046c2857a7 100644
--- a/Master/texmf-dist/doc/support/latexmk/CHANGES
+++ b/Master/texmf-dist/doc/support/latexmk/CHANGES
@@ -236,3 +236,16 @@ From v. 4.22d to v. 4.22e
(Sometimes an error was incorrectly detected, after which latexmk
stopped.)
+From v. 4.22e to v. 4.23
+ Deal with problem that if maximum number of runs of (pdf)latex is
+ exceeded, -pvc mode infinitely repeats (pdf)latex
+ Fix problem that changes in generated files during run of
+ (pdf)latex may not be detected if the run is shorter than the
+ granularity of file times.
+ Corrections of comments and messages. Documentation improvement.
+ Correctly parse blg files of biber 0.8
+ Correct handling of errors given by rc files
+ Enhancements for convenient use of latexmk with Makefiles (options
+ -deps, -deps-out, -use-make)
+ -recorder option for improved detection of input and output files.
+
diff --git a/Master/texmf-dist/doc/support/latexmk/INSTALL b/Master/texmf-dist/doc/support/latexmk/INSTALL
index fc116c4407f..b6b1966e736 100644
--- a/Master/texmf-dist/doc/support/latexmk/INSTALL
+++ b/Master/texmf-dist/doc/support/latexmk/INSTALL
@@ -1,6 +1,6 @@
INSTALLING latexmk
==================
- (Version 4.22e, 3 February 2011)
+ (Version 4.23, 19 March 2011)
John Collins
Physics Department
diff --git a/Master/texmf-dist/doc/support/latexmk/README b/Master/texmf-dist/doc/support/latexmk/README
index c8e1faa0a94..196f0e6a392 100644
--- a/Master/texmf-dist/doc/support/latexmk/README
+++ b/Master/texmf-dist/doc/support/latexmk/README
@@ -1,4 +1,4 @@
-Latexmk, version 4.22e, 3 Feb. 2011
+Latexmk, version 4.23, 19 Mar. 2011
-----------------------------------
Latexmk completely automates the process of generating a LaTeX
@@ -92,7 +92,7 @@ NOTES:-
John Collins
---------------------------- "latexmk -h" ----------------------------
-Latexmk 4.22e: Automatic LaTeX document generation routine
+Latexmk 4.23: Automatic LaTeX document generation routine
Usage: latexmk [latexmk_options] [filename ...]
@@ -110,18 +110,21 @@ Usage: latexmk [latexmk_options] [filename ...]
-C - clean up (remove) all nonessential files
including aux, dep, dvi, postscript and pdf files
and file of database of file information
- -CA - clean up (remove) absolutely ALL nonessential files.
- Now equivalent to -C option.
+ -CA - clean up (remove) all nonessential files.
+ Equivalent to -C option.
-CF - Remove file of database of file information before doing
other actions
-cd - Change to directory of source file when processing it
-cd- - Do NOT change to directory of source file when processing it
- -dependents - Show list of dependent files after processing
- -dependents- - Do not show list of dependent files after processing
+ -dependents or -deps - Show list of dependent files after processing
+ -dependents- or -deps- - Do not show list of dependent files
+ -deps-out=file - Set name of output file for dependency list,
+ and turn on showing of dependency list
-dF <filter> - Filter to apply to dvi file
-dvi - generate dvi
-dvi- - turn off required dvi
- -e <code> - Execute specified PERL code
+ -e <code> - Execute specified Perl code (as part of latexmk start-up
+ code)
-f - force continued processing past errors
-f- - turn off forced continuing processing past errors
-gg - Super go mode: clean out generated files (-CA), and then
@@ -162,11 +165,18 @@ Usage: latexmk [latexmk_options] [filename ...]
(Side effect: turn off ordinary preview mode.)
-pvc- - turn off -pvc
-r <file> - Read custom RC file
- -silent - silence progress messages from called programs
- -time - show CPU time used
- -time- - don't show CPU time used
- -v - display program version
- -verbose - display usual progress messages from called programs
+ -recorder - Use -recorder option for (pdf)latex
+ (to give list of input and output files)
+ -recorder- - Do not use -recorder option for (pdf)latex
+ -rules - Show list of rules after processing
+ -rules- - Do not show list of rules after processing
+ -silent - silence progress messages from called programs
+ -time - show CPU time used
+ -time- - don't show CPU time used
+ -use-make - use the make program to try to make missing files
+ -use-make- - don't use the make program to try to make missing files
+ -v - display program version
+ -verbose - display usual progress messages from called programs
-version - display program version
-view=default - viewer is default (dvi, ps, pdf)
-view=dvi - viewer is for dvi
@@ -176,7 +186,7 @@ Usage: latexmk [latexmk_options] [filename ...]
filename = the root filename of LaTeX document
-p, -pv and -pvc are mutually exclusive
--h, -c and -C overides all other options.
+-h, -c and -C override all other options.
-pv and -pvc require one and only one filename specified
All options can be introduced by '-' or '--'. (E.g., --help or -help.)
Contents of RC file specified by -r overrides options specified
diff --git a/Master/texmf-dist/doc/support/latexmk/latexmk.pdf b/Master/texmf-dist/doc/support/latexmk/latexmk.pdf
index ac989e8bba4..0cd8f9ef2ae 100644
--- a/Master/texmf-dist/doc/support/latexmk/latexmk.pdf
+++ b/Master/texmf-dist/doc/support/latexmk/latexmk.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/support/latexmk/latexmk.txt b/Master/texmf-dist/doc/support/latexmk/latexmk.txt
index 7ef1258c7b1..8ccb793ca4b 100644
--- a/Master/texmf-dist/doc/support/latexmk/latexmk.txt
+++ b/Master/texmf-dist/doc/support/latexmk/latexmk.txt
@@ -23,42 +23,42 @@ DESCRIPTION
on-screen view of the compiled document.
Latexmk determines which are the source files by examining the log
- file. When latexmk is run, it examines properties of the source files,
- and if any have been changed since the last document generation,
- latexmk will run the various LaTeX processing programs as necessary.
- In particular, it will repeat the run of LaTeX (or pdflatex) often
+ file. (Optionally, it also examines the list of input and output files
+ generated by the -recorder option of modern versions of latex and
+ pdflatex. See the documentation for the -recorder option of latexmk
+ below.) When latexmk is run, it examines properties of the source
+ files, and if any have been changed since the last document generation,
+ latexmk will run the various LaTeX processing programs as necessary.
+ In particular, it will repeat the run of LaTeX (or pdflatex) often
enough to resolve all cross references; depending on the macro packages
- used. With some macro packages and document classes, four, or even
- more, runs may be needed. If necessary, latexmk will also run bibtex,
- biber, and/or makeindex. In addition, latexmk can be configured to
- generate other necessary files. For example, from an updated figure
+ used. With some macro packages and document classes, four, or even
+ more, runs may be needed. If necessary, latexmk will also run bibtex,
+ biber, and/or makeindex. In addition, latexmk can be configured to
+ generate other necessary files. For example, from an updated figure
file it can automatically generate a file in encapsulated postscript or
another suitable format for reading by LaTeX.
- Latexmk has two different previewing options. In the simple -pv
- option, a dvi, postscript or pdf previewer is automatically run after
- generating the dvi, postscript or pdf version of the document. The
- type of file to view is selected according to configuration settings
+ Latexmk has two different previewing options. In the simple -pv
+ option, a dvi, postscript or pdf previewer is automatically run after
+ generating the dvi, postscript or pdf version of the document. The
+ type of file to view is selected according to configuration settings
and command line options.
- The second previewing option is the powerful -pvc option (mnemonic:
+ The second previewing option is the powerful -pvc option (mnemonic:
"preview continuously"). In this case, latexmk runs continuously, reg-
- ularly monitoring all the source files to see if any have changed.
- Every time a change is detected, latexmk runs all the programs neces-
+ ularly monitoring all the source files to see if any have changed.
+ Every time a change is detected, latexmk runs all the programs neces-
sary to generate a new version of the document. A good previewer (like
gv) will then automatically update its display. Thus the user can sim-
ply edit a file and, when the changes are written to disk, latexmk com-
- pletely automates the cycle of updating the .dvi (and possibly the .ps
+ pletely automates the cycle of updating the .dvi (and possibly the .ps
and .pdf) file, and refreshing the previewer's display. It's not quite
WYSIWYG, but usefully close.
- For other previewers, the user may have to manually make the previewer
- update its display, which can be (some versions of xdvi and gsview) as
+ For other previewers, the user may have to manually make the previewer
+ update its display, which can be (some versions of xdvi and gsview) as
simple as forcing a redraw of its display.
- Latexmk has the ability to print a banner in gray diagonally across
- each page when making the postscript file. It can also, if needed,
-
1
@@ -70,43 +70,45 @@ DESCRIPTION
LATEXMK(1L) LATEXMK(1L)
- call an external program to do other postprocessing on the generated
+ Latexmk has the ability to print a banner in gray diagonally across
+ each page when making the postscript file. It can also, if needed,
+ call an external program to do other postprocessing on the generated
files.
- Latexmk is highly configurable, both from the command line and in con-
- figuration files, so that it can accommodate a wide variety of user
- needs and system configurations. Default values are set according to
+ Latexmk is highly configurable, both from the command line and in con-
+ figuration files, so that it can accommodate a wide variety of user
+ needs and system configurations. Default values are set according to
the operating system, so latexmk often works without special configura-
- tion on MS-Windows, cygwin, Linux, OS-X, and other UNIX systems
+ tion on MS-Windows, cygwin, Linux, OS-X, and other UNIX systems
(notably Solaris).
- A very annoying complication handled very reliably by Latexmk, is that
- LaTeX is a multiple pass system. On each run, LaTeX reads in informa-
+ A very annoying complication handled very reliably by Latexmk, is that
+ LaTeX is a multiple pass system. On each run, LaTeX reads in informa-
tion generated on a previous run, for things like cross referencing and
- indexing. In the simplest cases, a second run of LaTeX suffices, and
- often the log file contains a message about the need for another pass.
- However, there is a wide variety of add-on macro packages to LaTeX,
- with a variety of behaviors. The result is to break simple-minded
- determinations of how many runs are needed and of which programs. In
+ indexing. In the simplest cases, a second run of LaTeX suffices, and
+ often the log file contains a message about the need for another pass.
+ However, there is a wide variety of add-on macro packages to LaTeX,
+ with a variety of behaviors. The result is to break simple-minded
+ determinations of how many runs are needed and of which programs. In
its new version, latexmk has a highly general and efficient solution to
these issues. The solution involves retaining between runs information
- on the source files, and a symptom is that latexmk generates an extra
+ on the source files, and a symptom is that latexmk generates an extra
file (with extension .fdb_latexmk, by default) that contains the source
file information.
LATEXMK OPTIONS AND ARGUMENTS ON COMMAND LINE
- (All options can be introduced by single or double "-" characters,
+ (All options can be introduced by single or double "-" characters,
e.g., "latexmk -help" or "latexmk --help".)
- file One or more files can be specified. If no files are specified,
- latexmk will, by default, run on all files in the current work-
- ing directory with a ".tex" extension. This behavior can be
+ file One or more files can be specified. If no files are specified,
+ latexmk will, by default, run on all files in the current work-
+ ing directory with a ".tex" extension. This behavior can be
changed: see the description concerning the @default_files vari-
- able in the section "List of configuration variables usable in
+ able in the section "List of configuration variables usable in
initialization files".
- If a file is specified without an extension, then the ".tex" extension
+ If a file is specified without an extension, then the ".tex" extension
is automatically added, just as LaTeX does. Thus, if you specify:
latexmk foo
@@ -117,17 +119,16 @@ LATEXMK OPTIONS AND ARGUMENTS ON COMMAND LINE
When the source file uses bbl files for bibliography, run bibtex
or biber as needed to regenerate the bbl files.
- This property can also be configured by setting the $bibtex_use
+ This property can also be configured by setting the $bibtex_use
variable to 2 in a configuration file
-bibtex-
Never run bibtex or biber.
- A common use for this option is when a document comes from an
- 3 February 2011 2
+ 21 March 2011 2
@@ -136,49 +137,50 @@ LATEXMK OPTIONS AND ARGUMENTS ON COMMAND LINE
LATEXMK(1L) LATEXMK(1L)
- external source, complete with its bbl file(s), and the user
- does not have the corresponding bib files available. In this
- situation use of the -bibtex- option will prevent latexmk from
+ A common use for this option is when a document comes from an
+ external source, complete with its bbl file(s), and the user
+ does not have the corresponding bib files available. In this
+ situation use of the -bibtex- option will prevent latexmk from
trying to run bibtex or biber, which would result in overwriting
of the bbl files.
-bibtex-cond
- When the source file uses bbl file(s) for the bibliography, run
- bibtex or biber as needed to regenerate the bbl files, but only
- if the relevant bib file(s) exist. Thus when the bib files are
- not available, bibtex or biber is not run, thereby avoiding
+ When the source file uses bbl file(s) for the bibliography, run
+ bibtex or biber as needed to regenerate the bbl files, but only
+ if the relevant bib file(s) exist. Thus when the bib files are
+ not available, bibtex or biber is not run, thereby avoiding
overwriting of the bbl file(s). This is the default setting.
- (Note that it is possible for latexmk to decide that the bib
- file does not exist, even though the bib file does exist and
- bibtex or biber finds it. The problem is that the bib file may
- not be in the current directory but in some search path; the
+ (Note that it is possible for latexmk to decide that the bib
+ file does not exist, even though the bib file does exist and
+ bibtex or biber finds it. The problem is that the bib file may
+ not be in the current directory but in some search path; the
places latexmk and bibtex or biber cause to be searched need not
- be identical. On modern installations of TeX and related pro-
- grams this problem should not arise, since latexmk uses the
+ be identical. On modern installations of TeX and related pro-
+ grams this problem should not arise, since latexmk uses the
kpsewhich program to do the search, and kpsewhich should use the
- same search path as bibtex and biber. If this problem arises,
+ same search path as bibtex and biber. If this problem arises,
use the -bibtex option when invoking latexmk.)
-bm <message>
- A banner message to print diagonally across each page when con-
- verting the dvi file to postscript. The message must be a sin-
- gle argument on the command line so be careful with quoting
+ A banner message to print diagonally across each page when con-
+ verting the dvi file to postscript. The message must be a sin-
+ gle argument on the command line so be careful with quoting
spaces and such.
- Note that if the -bm option is specified, the -ps option is
+ Note that if the -bm option is specified, the -ps option is
assumed.
-bi <intensity>
- How dark to print the banner message. A decimal number between
+ How dark to print the banner message. A decimal number between
0 and 1. 0 is black and 1 is white. The default is 0.95, which
is OK unless your toner cartridge is getting low.
-bs <scale>
- A decimal number that specifies how large the banner message
- will be printed. Experimentation is necessary to get the right
- scale for your message, as a rule of thumb the scale should be
- about equal to 1100 divided by the number of characters in the
+ A decimal number that specifies how large the banner message
+ will be printed. Experimentation is necessary to get the right
+ scale for your message, as a rule of thumb the scale should be
+ about equal to 1100 divided by the number of characters in the
message. The default is 220.0 which is just right for 5 charac-
ter messages.
@@ -188,12 +190,12 @@ LATEXMK(1L) LATEXMK(1L)
-c Clean up (remove) all regeneratable files generated by latex and
bibtex or biber except dvi, postscript and pdf. These files are
- a combination of log files, aux files, latexmk's database file
- of source file information, and those with extensions specified
+ a combination of log files, aux files, latexmk's database file
+ of source file information, and those with extensions specified
- 3 February 2011 3
+ 21 March 2011 3
@@ -202,64 +204,65 @@ LATEXMK(1L) LATEXMK(1L)
LATEXMK(1L) LATEXMK(1L)
- in the @generated_exts configuration variable. In addition,
- files with extensions by the $clean_ext configuration variable
+ in the @generated_exts configuration variable. In addition,
+ files with extensions by the $clean_ext configuration variable
are removed.
- This cleanup is instead of a regular make. See the -gg option
+ This cleanup is instead of a regular make. See the -gg option
if you want to do a cleanup then a make.
- If $bibtex_use is set to 0 or 1, bbl files are counted as non-
+ If $bibtex_use is set to 0 or 1, bbl files are counted as non-
regeneratable.
- If $cleanup_includes_cusdep_generated is nonzero, regeneratable
- files are considered as including those generated by custom
- dependencies and are also deleted. Otherwise these files are
+ If $cleanup_includes_cusdep_generated is nonzero, regeneratable
+ files are considered as including those generated by custom
+ dependencies and are also deleted. Otherwise these files are
not deleted.
-C Clean up (remove) all regeneratable files generated by latex and
- bibtex or biber. This is the same as the -c option with the
+ bibtex or biber. This is the same as the -c option with the
addition of dvi, postscript and pdf files, and those with exten-
sions in the $clean_full_ext configuration variable.
- This cleanup is instead of a regular make. See the -gg option
+ This cleanup is instead of a regular make. See the -gg option
if you want to do a cleanup than a make.
- If $bibtex_use is set to 0 or 1, bbl files are counted as non-
+ If $bibtex_use is set to 0 or 1, bbl files are counted as non-
regeneratable.
- If $cleanup_includes_cusdep_generated is nonzero, regeneratable
- files are considered as including those generated by custom
- dependencies and are also deleted. Otherwise these files are
+ If $cleanup_includes_cusdep_generated is nonzero, regeneratable
+ files are considered as including those generated by custom
+ dependencies and are also deleted. Otherwise these files are
not deleted.
- -CA Clean up (remove) absolutely all regeneratable files. It is now
- equivalent to the -C option. See that option for details.
+ -CA (Obsolete). Now equivalent to the -C option. See that option
+ for details.
- -CF Remove the file containing the database of source file informa-
+ -CF Remove the file containing the database of source file informa-
tion, before doing the other actions requested.
- -d Set draft mode. This prints the banner message "DRAFT" across
- your page when converting the dvi file to postscript. Size and
+ -d Set draft mode. This prints the banner message "DRAFT" across
+ your page when converting the dvi file to postscript. Size and
intensity can be modified with the -bs and -bi options. The -bm
- option will override this option as this is really just a short
+ option will override this option as this is really just a short
way of specifying:
latexmk -bm DRAFT
- Note that if the -d option is specified, the -ps option is
+ Note that if the -d option is specified, the -ps option is
assumed.
- -dF Dvi file filtering. The argument to this option is a filter
- which will generate a filtered dvi file with the extension
- ".dviF". All extra processing (e.g. conversion to postscript,
- preview, printing) will then be performed on this filtered dvi
- file.
+ -deps Show a list of dependent files after processing. This is in the
+ form of a dependency list of the form used by the make program,
+ and it is therefore suitable for use in a Makefile. It gives an
+ overall view of the files without listing intermediate files, as
+ well as latexmk can determine them.
+ By default the list of dependent files is sent to stdout (i.e.,
- 3 February 2011 4
+ 21 March 2011 4
@@ -268,204 +271,238 @@ LATEXMK(1L) LATEXMK(1L)
LATEXMK(1L) LATEXMK(1L)
+ normally to the screen unless you've redirected latexmk's out-
+ put). But you can set the filename where the list is sent by
+ the -deps-out= option.
+
+ See the section "USING latexmk WITH make" for an example of how
+ to use a dependency list with make.
+
+ Users familiar with GNU automake and gcc will find that the
+ -deps option is very similar in its purpose and results to the
+ -M option to gcc.
+
+ -dependents
+ Equivalent to -deps.
+
+ -deps- Do not show a list of dependent files after processing. (This
+ is the default.)
+
+ -dependents-
+ Equivalent to -deps-.
+
+ -deps-out=FILENAME
+ Set the filename to which the list of dependent files is writ-
+ ten. If the FILENAME argument is omitted or set to '-', then
+ the output is sent to stdout.
+
+ Use of this option also turns on the output of the list of
+ dependent files after processing.
+
+ -dF Dvi file filtering. The argument to this option is a filter
+ which will generate a filtered dvi file with the extension
+ ".dviF". All extra processing (e.g. conversion to postscript,
+ preview, printing) will then be performed on this filtered dvi
+ file.
+
Example usage: To use dviselect to select only the even pages of
the dvi file:
latexmk -dF 'dviselect even' foo.tex
-diagnostics
- Print detailed diagnostics during a run. This may help for
+ Print detailed diagnostics during a run. This may help for
debugging problems or to understand latexmk's behavior in diffi-
cult situations.
-dvi Generate dvi version of document.
- -dvi- Turn off generation of dvi version of document. (This may get
- overridden, if some other file is made (e.g., a .ps file) that
- is generated from the dvi file, or if no generated file at all
+ -dvi- Turn off generation of dvi version of document. (This may get
+ overridden, if some other file is made (e.g., a .ps file) that
+ is generated from the dvi file, or if no generated file at all
is requested.)
-e <code>
- Execute the specified initialization code before processing.
- The code is Perl code of the same form as is used in latexmk's
+ Execute the specified initialization code before processing.
+ The code is Perl code of the same form as is used in latexmk's
initialization files -- for more details, see the information on
- the -r option, and the section about "Configuration/initializa-
- tion (RC) files". The code is typically a sequence of assign-
- ment statements separated by semicolons.
- The code is executed when the -e option is encountered during
- latexmk's parsing of its command line. See the -r option for a
- way of executing initialization code from a file. An error
- results in latexmk stopping. Multiple instances of the -r and
- -e options can be used, and they are executed in the order they
- appear on the command line.
- Some care is needed to deal with proper quoting of special char-
- acters in the code on the command line. For example, suppose
- you want to set the latex command to use its -shell-escape
- option, then under UNIX/LINUX you could use the line
- latexmk -e '$latex=q/latex %O -shell-escape %S/' file.tex
+ 21 March 2011 5
- Note that the single quotes block normal UNIX/LINUX command
- shells from treating the characters inside the quotes as spe-
- cial. (In this example, the q/.../ construct is a Perl idiom
- equivalent to using single quotes. This avoids the complica-
- tions of getting a quote character inside an already quoted
- string in a way that is independent of both the shell and the
- operating-system.)
- The above command line will NOT work under MS-Windows with
- cmd.exe or command.com or 4nt.exe. For MS-Windows with these
- command shells you could use
- latexmk -e "$latex=q/latex %O -shell-escape %S/" file.tex
- or
+LATEXMK(1L) LATEXMK(1L)
- 3 February 2011 5
+ the -r option, and the section about "Configuration/initializa-
+ tion (RC) files". The code is typically a sequence of assign-
+ ment statements separated by semicolons.
+ The code is executed when the -e option is encountered during
+ latexmk's parsing of its command line. See the -r option for a
+ way of executing initialization code from a file. An error
+ results in latexmk stopping. Multiple instances of the -r and
+ -e options can be used, and they are executed in the order they
+ appear on the command line.
+ Some care is needed to deal with proper quoting of special char-
+ acters in the code on the command line. For example, suppose
+ you want to set the latex command to use its -shell-escape
+ option, then under UNIX/LINUX you could use the line
+
+ latexmk -e '$latex=q/latex %O -shell-escape %S/' file.tex
+ Note that the single quotes block normal UNIX/LINUX command
+ shells from treating the characters inside the quotes as spe-
+ cial. (In this example, the q/.../ construct is a Perl idiom
+ equivalent to using single quotes. This avoids the complica-
+ tions of getting a quote character inside an already quoted
+ string in a way that is independent of both the shell and the
+ operating-system.)
+ The above command line will NOT work under MS-Windows with
+ cmd.exe or command.com or 4nt.exe. For MS-Windows with these
+ command shells you could use
-LATEXMK(1L) LATEXMK(1L)
+ latexmk -e "$latex=q/latex %O -shell-escape %S/" file.tex
+ or
latexmk -e "$latex='latex %O -shell-escape %S'" file.tex
- The last two examples will NOT work with UNIX/LINUX command
+ The last two examples will NOT work with UNIX/LINUX command
shells.
- -f Force latexmk to continue document processing despite errors.
+ -f Force latexmk to continue document processing despite errors.
Normally, when latexmk detects that LaTeX or another program has
found an error which will not be resolved by further processing,
no further processing is carried out.
-f- Turn off the forced processing-past-errors such as is set by the
- -f option. This could be used to override a setting in a con-
+ -f option. This could be used to override a setting in a con-
figuration file.
- -g Force latexmk to process document fully, even under situations
- where latexmk would normally decide that no changes in the
- source files have occurred since the previous run. This option
- is useful, for example, if you change some options and wish to
+ -g Force latexmk to process document fully, even under situations
+ where latexmk would normally decide that no changes in the
+ source files have occurred since the previous run. This option
+ is useful, for example, if you change some options and wish to
reprocess the files.
-g- Turn off -g.
+
+
+
+ 21 March 2011 6
+
+
+
+
+
+LATEXMK(1L) LATEXMK(1L)
+
+
-gg "Super go mode" or "clean make": clean out generated files as if
- -CA had been given, and then do a regular make.
+ -C had been given, and then do a regular make.
-h, -help
Print help information.
-l Run in landscape mode, using the landscape mode for the preview-
- ers and the dvi to postscript converters. This option is not
- normally needed nowadays, since current previewers normally
+ ers and the dvi to postscript converters. This option is not
+ normally needed nowadays, since current previewers normally
determine this information automatically.
-l- Turn off -l.
-new-viewer
- When in continuous-preview mode, always start a new viewer to
- view the generated file. By default, latexmk will, in continu-
- ous-preview mode, test for a previously running previewer for
+ When in continuous-preview mode, always start a new viewer to
+ view the generated file. By default, latexmk will, in continu-
+ ous-preview mode, test for a previously running previewer for
the same file and not start a new one if a previous previewer is
running. However, its test sometimes fails (notably if there is
- an already-running previewer that is viewing a file of the same
- name as the current file, but in a different directory). This
+ an already-running previewer that is viewing a file of the same
+ name as the current file, but in a different directory). This
option turns off the default behavior.
-new-viewer-
- The inverse of the -new-viewer option. It puts latexmk in its
+ The inverse of the -new-viewer option. It puts latexmk in its
normal behavior that in preview-continuous mode it checks for an
already-running previewer.
-nobibtex
Never run bibtex or biber.
- A common use for this option is when a document comes from an
-
-
-
- 3 February 2011 6
-
-
-
-
-
-LATEXMK(1L) LATEXMK(1L)
-
-
- external source, complete with its bbl file(s), and the user
- does not have the corresponding bib files available. In this
- situation use of the -nobibtex option will prevent latexmk from
+ A common use for this option is when a document comes from an
+ external source, complete with its bbl file(s), and the user
+ does not have the corresponding bib files available. In this
+ situation use of the -nobibtex option will prevent latexmk from
trying to run bibtex or biber, which would result in overwriting
of the bbl files.
-p Print out the document. By default it is the generated
postscript file that is printed. But you can use the -print=...
- option to print the dvi or pdf files instead, and you can con-
+ option to print the dvi or pdf files instead, and you can con-
figure this in a start up file (by setting the $print_type vari-
able).
- However, printing is enabled by default only under UNIX/LINUX
- systems, where the default is to use the lpr command. In gen-
- eral, the correct behavior for printing very much depends on
- your system's software. In particular, under MS-Windows you
- must have suitable program(s) available, and you must have con-
- figured the print commands used by latexmk. This can be non-
- trivial. See the documentation on the $lpr, $lpr_dvi, and
- $lpr_pdf configuration variables to see how to set the commands
+ However, printing is enabled by default only under UNIX/LINUX
+ systems, where the default is to use the lpr command. In gen-
+ eral, the correct behavior for printing very much depends on
+ your system's software. In particular, under MS-Windows you
+ must have suitable program(s) available, and you must have con-
+ figured the print commands used by latexmk. This can be non-
+ trivial. See the documentation on the $lpr, $lpr_dvi, and
+ $lpr_pdf configuration variables to see how to set the commands
for printing.
This option is incompatible with the -pv and -pvc options, so it
turns them off.
+
+
+ 21 March 2011 7
+
+
+
+
+
+LATEXMK(1L) LATEXMK(1L)
+
+
-pdf Generate pdf version of document using pdflatex.
-pdfdvi
- Generate pdf version of document from the dvi file, by default
+ Generate pdf version of document from the dvi file, by default
using dvipdf.
- -pdfps Generate pdf version of document from the ps file, by default
+ -pdfps Generate pdf version of document from the ps file, by default
using ps2pdf.
- -pdf- Turn off generation of pdf version of document. (This can be
- used to override a setting in a configuration file. It may get
+ -pdf- Turn off generation of pdf version of document. (This can be
+ used to override a setting in a configuration file. It may get
overridden if some other option requires the generation of a pdf
file.)
-print=dvi, -print=ps, -print=pdf
- Define which kind of file is printed. This option also ensures
- that the requisite file is made, and turns on printing. The
+ Define which kind of file is printed. This option also ensures
+ that the requisite file is made, and turns on printing. The
default is to print a postscript file.
-ps Generate postscript version of document.
-ps- Turn off generation of postscript version of document. This can
- be used to override a setting in a configuration file. (It may
- get overridden by some other option that requires a postscript
+ be used to override a setting in a configuration file. (It may
+ get overridden by some other option that requires a postscript
file, for example a request for printing.)
- -pF Postscript file filtering. The argument to this option is a
- filter which will generate a filtered postscript file with the
+ -pF Postscript file filtering. The argument to this option is a
+ filter which will generate a filtered postscript file with the
extension ".psF". All extra processing (e.g. preview, printing)
-
-
-
- 3 February 2011 7
-
-
-
-
-
-LATEXMK(1L) LATEXMK(1L)
-
-
will then be performed on this filtered postscript file.
Example of usage: Use psnup to print two pages on the one page:
@@ -477,69 +514,69 @@ LATEXMK(1L) LATEXMK(1L)
latexmk -ps -pF "psnup -2" foo.tex
Whether to use single or double quotes round the "psnup -2" will
- depend on your command interpreter, as used by the particular
+ depend on your command interpreter, as used by the particular
version of perl and the operating system on your computer.
- -pv Run file previewer. If the -view option is used, this will
- select the kind of file to be previewed (dvi, ps or pdf). Oth-
- erwise the viewer views the "highest" kind of file selected, by
- the -dvi, -ps, -pdf, -pdfps options, in the order dvi, ps, pdf
- (low to high). If no file type has been selected, the dvi pre-
- viewer will be used. This option is incompatible with the -p
+ -pv Run file previewer. If the -view option is used, this will
+ select the kind of file to be previewed (dvi, ps or pdf). Oth-
+ erwise the viewer views the "highest" kind of file selected, by
+ the -dvi, -ps, -pdf, -pdfps options, in the order dvi, ps, pdf
+ (low to high). If no file type has been selected, the dvi pre-
+ viewer will be used. This option is incompatible with the -p
and -pvc options, so it turns them off.
-pv- Turn off -pv.
- -pvc Run a file previewer and continually update the .dvi, .ps,
+ -pvc Run a file previewer and continually update the .dvi, .ps,
and/or .pdf files whenever changes are made to source files (see
- the Description above). Which of these files is generated and
- which is viewed is governed by the other options, and is the
- same as for the -pv option. The preview-continuous option -pvc
- can only work with one file. So in this case you will normally
- only specify one filename on the command line. It is also
- incompatible with the -p and -pv options, so it turns these
- options off.
+ the Description above). Which of these files is generated and
- The -pvc option also turns off force mode (-f), as is normally
- best for continuous preview mode. If you really want force
- mode, use the options in the order -pvc -f.
- With a good previewer the display will be automatically updated.
- (Under some but not all versions of UNIX/Linux "gv -watch" does
- this for postscript files; this can be set by a configuration
- variable. This would also work for pdf files except for an
- apparent bug in gv that causes an error when the newly updated
- pdf file is read.) Many other previewers will need a manual
- update.
- Important note: the acroread program on MS-Windows locks the pdf
- file, and prevents new versions being written, so it is a bad
- idea to use acroread to view pdf files in preview-continuous
- mode. It is better to use a dvi or ps viewer, as set by one of
- the -view=dvi and -view=ps options.
+ 21 March 2011 8
- There are some other methods for arranging an update, notably
- useful for many versions of xdvi and xpdf. These are best set
- 3 February 2011 8
+LATEXMK(1L) LATEXMK(1L)
+ which is viewed is governed by the other options, and is the
+ same as for the -pv option. The preview-continuous option -pvc
+ can only work with one file. So in this case you will normally
+ only specify one filename on the command line. It is also
+ incompatible with the -p and -pv options, so it turns these
+ options off.
+ The -pvc option also turns off force mode (-f), as is normally
+ best for continuous preview mode. If you really want force
+ mode, use the options in the order -pvc -f.
-LATEXMK(1L) LATEXMK(1L)
+ With a good previewer the display will be automatically updated.
+ (Under some but not all versions of UNIX/Linux "gv -watch" does
+ this for postscript files; this can be set by a configuration
+ variable. This would also work for pdf files except for an
+ apparent bug in gv that causes an error when the newly updated
+ pdf file is read.) Many other previewers will need a manual
+ update.
+ Important note: the acroread program on MS-Windows locks the pdf
+ file, and prevents new versions being written, so it is a bad
+ idea to use acroread to view pdf files in preview-continuous
+ mode. It is better to use a dvi or ps viewer, as set by one of
+ the -view=dvi and -view=ps options.
+ There are some other methods for arranging an update, notably
+ useful for many versions of xdvi and xpdf. These are best set
in latexmk's configuration; see below.
- Note that if latexmk dies or is stopped by the user, the
+ Note that if latexmk dies or is stopped by the user, the
"forked" previewer will continue to run. Successive invocations
- with the -pvc option will not fork new previewers, but latexmk
- will normally use the existing previewer. (At least this will
- happen when latexmk is running under an operating system where
- it knows how to determine whether an existing previewer is run-
+ with the -pvc option will not fork new previewers, but latexmk
+ will normally use the existing previewer. (At least this will
+ happen when latexmk is running under an operating system where
+ it knows how to determine whether an existing previewer is run-
ning.)
-pvc- Turn off -pvc.
@@ -547,50 +584,92 @@ LATEXMK(1L) LATEXMK(1L)
-quiet Same as -silent
-r <rcfile>
- Read the specified initialization file ("RC file") before pro-
+ Read the specified initialization file ("RC file") before pro-
cessing.
Be careful about the ordering: (1) Standard initialization files
- -- see the section below on "Configuration/initialization (RC)
- files" -- are read first. (2) Then the options on the command
- line are acted on in the order they are given. Therefore if an
- initialization file is specified by the -r option, it is read
- during this second step. Thus an initialization file specified
+ -- see the section below on "Configuration/initialization (RC)
+ files" -- are read first. (2) Then the options on the command
+ line are acted on in the order they are given. Therefore if an
+ initialization file is specified by the -r option, it is read
+ during this second step. Thus an initialization file specified
with the -r option can override both the standard initialization
files and previously specified options. But all of these can be
overridden by later options.
The contents of the RC file just comprise a piece of code in the
- Perl programming language (typically a sequence of assignment
+
+
+
+ 21 March 2011 9
+
+
+
+
+
+LATEXMK(1L) LATEXMK(1L)
+
+
+ Perl programming language (typically a sequence of assignment
statements); they are executed when the -r option is encountered
during latexmk's parsing of its command line. See the -e option
- for a way of giving initialization code directly on latexmk's
- command line. An error results in latexmk stopping. Multiple
- instances of the -r and -e options can be used, and they are
+ for a way of giving initialization code directly on latexmk's
+ command line. An error results in latexmk stopping. Multiple
+ instances of the -r and -e options can be used, and they are
executed in the order they appear on the command line.
+ -recorder
+ Use the -recorder option with latex and pdflatex. In (most)
+ modern versions of these programs, this results in a file of
+ extension .fls containing a list of the files that these pro-
+ grams have read and written. Latexmk will then use this file to
+ improve its detection of source files and generated files after
+ a run of latex or pdflatex.
+
+ For further information, see the documentation for the $recorder
+ configuration variable.
+
+ -recorder-
+ Do not use the -recorder option with latex and pdflatex.
+
+ -rules Show a list of latemk's rules and dependencies after processing.
+
+ -rules-
+ Do not show a list of latexmk's rules and dependencies after
+ processing. (This is the default.)
+
-silent
Run commands silently, i.e., with options that reduce the amount
- of diagnostics generated. For example, with the default set-
- tings, the command "latex -interaction=batchmode" is used for
+ of diagnostics generated. For example, with the default set-
+ tings, the command "latex -interaction=batchmode" is used for
latex.
- Also reduce the number of informational messages that latexmk
+ Also reduce the number of informational messages that latexmk
generates.
- To change the options used to make the commands run silently,
+ To change the options used to make the commands run silently,
you need to configure latexmk with changed values of its config-
- uration variables, the relevant ones being $bib-
+ uration variables, the relevant ones being $bib-
tex_silent_switch, $biber_silent_switch, $dvips_silent_switch,
$latex_silent_switch, and $pdflatex_silent_switch.
- -v, -version
- Print version number of latexmk.
+ -use-make
+ When after a run of latex or pdflatex, there are warnings about
+ missing files (e.g., as requested by the LaTeX \input, \include,
+ and \includgraphics), latexmk tries to make them by a custom
+ dependency. If no relevant custom dependency with an appropriate
+ source file is found, and if the -use-make option is set, then
+ latexmk will try as a resort using the make program to try to
+ make the missing files.
+ Note that the filename may be specified without an extension,
+ e.g., by \includegraphics{drawing} in a LaTeX file. In that
+ case, latexmk will try making drawing.ext with ext set in turn
+ to the possible extensions that are relevant for latex (or as
- 3 February 2011 9
+ 21 March 2011 10
@@ -599,6 +678,18 @@ LATEXMK(1L) LATEXMK(1L)
LATEXMK(1L) LATEXMK(1L)
+ appropriate pdflatex).
+
+ See also the documentation for the $use_make_for_missing_files
+ configuration variable.
+
+ -use-make-
+ Do not use the make program to try to make missing files.
+ (Default.)
+
+ -v, -version
+ Print version number of latexmk.
+
-verbose
Opposite of -silent. This is the default setting.
@@ -607,11 +698,11 @@ LATEXMK(1L) LATEXMK(1L)
the -pv or -pvc switches). The default is to view the "highest"
kind of requested file (in the order dvi, ps, pdf).
- The preview-continuous option -pvc can only work with one file. So in
- this case you will normally only specify one filename on the command
+ The preview-continuous option -pvc can only work with one file. So in
+ this case you will normally only specify one filename on the command
line.
- Options -p, -pv and -pvc are mutually exclusive. So each of these
+ Options -p, -pv and -pvc are mutually exclusive. So each of these
options turns the others off.
@@ -643,21 +734,10 @@ CONFIGURATION/INITIALIZATION (RC) FILES
1) The system RC file, if it exists.
On a UNIX system, latexmk searches for following places for its sys-
tem RC file, in the following order, and reads the first it finds:
- "/opt/local/share/latexmk/LatexMk",
- "/usr/local/share/latexmk/LatexMk",
- "/usr/local/lib/latexmk/LatexMk".
- On a MS-WINDOWS system it looks for "C:\latexmk\LatexMk".
- On a cygwin system (i.e., a MS-Windows system in which perl is
- that of cygwin), latexmk reads for the first it finds of
- "/cygdrive/c/latexmk/LatexMk",
- "/opt/local/share/latexmk/LatexMk",
- "/usr/local/share/latexmk/LatexMk",
- "/usr/local/lib/latexmk/LatexMk".
-
- 3 February 2011 10
+ 21 March 2011 11
@@ -666,34 +746,45 @@ CONFIGURATION/INITIALIZATION (RC) FILES
LATEXMK(1L) LATEXMK(1L)
+ "/opt/local/share/latexmk/LatexMk",
+ "/usr/local/share/latexmk/LatexMk",
+ "/usr/local/lib/latexmk/LatexMk".
+ On a MS-WINDOWS system it looks for "C:\latexmk\LatexMk".
+ On a cygwin system (i.e., a MS-Windows system in which perl is
+ that of cygwin), latexmk reads for the first it finds of
+ "/cygdrive/c/latexmk/LatexMk",
+ "/opt/local/share/latexmk/LatexMk",
+ "/usr/local/share/latexmk/LatexMk",
+ "/usr/local/lib/latexmk/LatexMk".
+
2) The user's RC file, "$HOME/.latexmkrc", if it exists. Here $HOME is
- the value of the environment variable HOME. On UNIX and clones
- (including LINUX), this variable is set by the system; on MS-Windows,
+ the value of the environment variable HOME. On UNIX and clones
+ (including LINUX), this variable is set by the system; on MS-Windows,
the user may choose to set it.
- 3) The RC file in the current working directory. This file can be
- named either "latexmkrc" or ".latexmkrc", and the first of these to be
+ 3) The RC file in the current working directory. This file can be
+ named either "latexmkrc" or ".latexmkrc", and the first of these to be
found is used, if any.
4) Any RC file(s) specified on the command line with the -r option.
Each RC file is a sequence of Perl commands. Naturally, a user can use
- this in creative ways. But for most purposes, one simply uses a
- sequence of assignment statements that override some of the built-in
- settings of Latexmk. Straightforward cases can be handled without
- knowledge of the Perl language by using the examples in this document
+ this in creative ways. But for most purposes, one simply uses a
+ sequence of assignment statements that override some of the built-in
+ settings of Latexmk. Straightforward cases can be handled without
+ knowledge of the Perl language by using the examples in this document
as templates. Comment lines are introduced by the "#" character.
- Note that command line options are obeyed in the order in which they
+ Note that command line options are obeyed in the order in which they
are written; thus any RC file specified on the command line with the -r
- option can override previous options but can be itself overridden by
- later options on the command line. There is also the -e option, which
+ option can override previous options but can be itself overridden by
+ later options on the command line. There is also the -e option, which
allows initialization code to be specified in latexmk's command line.
HOW TO SET VARIABLES IN INITIALIZATION FILES
- The important variables that can be configured are described in the
- section "List of configuration variables usable in initialization
+ The important variables that can be configured are described in the
+ section "List of configuration variables usable in initialization
files". Syntax for setting these variables is of the following forms:
$bibtex = 'bibtex %O %B';
@@ -706,92 +797,83 @@ HOW TO SET VARIABLES IN INITIALIZATION FILES
@default_files = ('paper', 'paper1');
- for the setting of an array of strings. It is possible to append an
+ for the setting of an array of strings. It is possible to append an
item to an array variable as follows:
push @default_files, 'paper2';
- Note that simple "scalar" variables have names that begin with a $
- character and array variables have names that begin with a @ character.
- Each statement ends with a semicolon.
- Strings should be enclosed in single quotes. (You could use double
- quotes, as in many programming languages. But then the Perl program-
- ming language brings into play some special rules for interpolating
- variables into strings. People not fluent in Perl will want to avoid
- these complications.)
+ 21 March 2011 12
- 3 February 2011 11
+LATEXMK(1L) LATEXMK(1L)
-LATEXMK(1L) LATEXMK(1L)
+ Note that simple "scalar" variables have names that begin with a $
+ character and array variables have names that begin with a @ character.
+ Each statement ends with a semicolon.
+ Strings should be enclosed in single quotes. (You could use double
+ quotes, as in many programming languages. But then the Perl program-
+ ming language brings into play some special rules for interpolating
+ variables into strings. People not fluent in Perl will want to avoid
+ these complications.)
- You can do much more complicated things, but for this you will need to
+ You can do much more complicated things, but for this you will need to
consult a manual for the Perl programming language.
FORMAT OF COMMAND SPECIFICATIONS
- Some of the variables set the commands that latexmk uses for carrying
- out its work, for example to generate a dvi file from a tex file or to
+ Some of the variables set the commands that latexmk uses for carrying
+ out its work, for example to generate a dvi file from a tex file or to
view a postscript file. This section describes some important features
of how the commands are specified.
Placeholders: Supposed you wanted latexmk to use the command elatex in
- place of the regular latex command, and suppose moreover that you
- wanted to give it the option "--shell-escape". You could do this by
+ place of the regular latex command, and suppose moreover that you
+ wanted to give it the option "--shell-escape". You could do this by
the following setting:
$latex = 'elatex --shell-escape %O %S';
- The two items starting with the % character are placeholders. These
- are substituted by appropriate values before the command is run. Thus
- %S will be replaced by the source file that elatex will be applied to,
- and %O will be replaced by any options that latexmk has decided to use
- for this command. (E.g., if you used the -silent option it would
+ The two items starting with the % character are placeholders. These
+ are substituted by appropriate values before the command is run. Thus
+ %S will be replaced by the source file that elatex will be applied to,
+ and %O will be replaced by any options that latexmk has decided to use
+ for this command. (E.g., if you used the -silent option it would
replace %O by "-interaction=batchmode".)
The available placeholders are:
- %B base of filename for current command. E.g., if a postscript
- file document.ps is being made from the dvi file document.dvi,
+ %B base of filename for current command. E.g., if a postscript
+ file document.ps is being made from the dvi file document.dvi,
then the basename is document.
- %D destination file (e.g., the name of the postscript file when
+ %D destination file (e.g., the name of the postscript file when
converting a dvi file to postscript).
%O options
%R root filename. This is the base name for the main tex file.
- %S source file (e.g., the name of the dvi file when converting a
+ %S source file (e.g., the name of the dvi file when converting a
dvi file to ps).
%T The name of the primary tex file.
- If for some reason you need a literal % character in your string not
- subject to the above rules, use a pair of these characters. Thus with
- the command specification $ps_previewer = 'latex -ad=%%Sfile.ad %S',
- the %%S will become %S when the command is executed, but the %S will be
- replaced by the source filename, which in this case would be the name
- of a postscript file to be viewed.
-
- Appropriate quoting will be applied to the filename substitutions, so
- you mustn't supply them yourself even if you the names of your have
- spaces in them. (But if your TeX filenames have spaces in them, beware
- that many versions of the TeX program cannot correctly handle filenames
+ If for some reason you need a literal % character in your string not
+ subject to the above rules, use a pair of these characters. Thus with
- 3 February 2011 12
+ 21 March 2011 13
@@ -800,90 +882,99 @@ FORMAT OF COMMAND SPECIFICATIONS
LATEXMK(1L) LATEXMK(1L)
- containing spaces.) In case latexmk's quoting does not work correctly
- on your system, you can turn it off -- see the documentation for the
+ the command specification $ps_previewer = 'latex -ad=%%Sfile.ad %S',
+ the %%S will become %S when the command is executed, but the %S will be
+ replaced by the source filename, which in this case would be the name
+ of a postscript file to be viewed.
+
+ Appropriate quoting will be applied to the filename substitutions, so
+ you mustn't supply them yourself even if you the names of your have
+ spaces in them. (But if your TeX filenames have spaces in them, beware
+ that many versions of the TeX program cannot correctly handle filenames
+ containing spaces.) In case latexmk's quoting does not work correctly
+ on your system, you can turn it off -- see the documentation for the
variable $quote_filenames.
- The distinction between %B and %R needs a bit of care, since they are
- often the same, but not always. For example on a simple document, the
+ The distinction between %B and %R needs a bit of care, since they are
+ often the same, but not always. For example on a simple document, the
basename of a bibtex run is the same as for the texfile. But in a doc-
- ument with several bibliographies, the bibliography files will have a
- variety of names. Since bibtex is invoked with the basename of the
- bibliography file, the setting for the bibtex command should therefore
+ ument with several bibliographies, the bibliography files will have a
+ variety of names. Since bibtex is invoked with the basename of the
+ bibliography file, the setting for the bibtex command should therefore
be
$bibtex = 'bibtex %O %B';
- Generally, you should use %B rather than %R. Similarly for most pur-
- poses, the name %T of the primary texfile is not a useful placeholder.
+ Generally, you should use %B rather than %R. Similarly for most pur-
+ poses, the name %T of the primary texfile is not a useful placeholder.
- See the default values in the section "List of configuration variables
+ See the default values in the section "List of configuration variables
usable in initialization files" for what is normally the most appropri-
ate usage.
If you omit to supply any placeholders whatever in the specification of
- a command, latexmk will supply what its author thinks are appropriate
+ a command, latexmk will supply what its author thinks are appropriate
defaults. This gives compatibility with configuration files for previ-
ous versions of latexmk, which didn't use placeholders.
- "Detaching" a command: Normally when latexmk runs a command, it waits
+ "Detaching" a command: Normally when latexmk runs a command, it waits
for the command to run to completion. This is appropriate for commands
like latex, of course. But for previewers, the command should normally
- run detached, so that latexmk gets the previewer running and then
+ run detached, so that latexmk gets the previewer running and then
returns to its next task (or exits if there is nothing else to do). To
- achieve this effect of detaching a command, you need to precede the
+ achieve this effect of detaching a command, you need to precede the
command name with "start ", as in
$dvi_previewer = 'start xdvi %O %S';
- This will be translated to whatever is appropriate for your operating
+ This will be translated to whatever is appropriate for your operating
system.
- Notes: (1) In some circumstances, latex will always run a command
+ Notes: (1) In some circumstances, latex will always run a command
detached. This is the case for a previewer in preview continuous mode,
- since otherwise previewing continuously makes no sense. (2) This pre-
- cludes the possibility of running a command named start. (3) If the
- word start occurs more than once at the beginning of the command
- string, that is equivalent to having just one. (4) Under cygwin, some
- complications happen, since cygwin amounts to a complicated merging of
- UNIX and MS-Windows. See the source code for how I've handled the
- problem.
+ since otherwise previewing continuously makes no sense. (2) This pre-
+ cludes the possibility of running a command named start. (3) If the
+ word start occurs more than once at the beginning of the command
+ string, that is equivalent to having just one. (4) Under cygwin, some
+ complications happen, since cygwin amounts to a complicated merging of
+ UNIX and MS-Windows. See the source code for how I've handled the
- Command names containing spaces: Under MS-Windows it is common that the
- name of a command includes spaces, since software is often installed in
- a subdirectory of "C:\Program Files". Such command names should be
- enclosed in double quotes, as in
- $lpr_pdf = '"c:/Program Files/Ghostgum/gsview/gsview32.exe" /p
+ 21 March 2011 14
- 3 February 2011 13
+LATEXMK(1L) LATEXMK(1L)
-LATEXMK(1L) LATEXMK(1L)
+ problem.
+ Command names containing spaces: Under MS-Windows it is common that the
+ name of a command includes spaces, since software is often installed in
+ a subdirectory of "C:\Program Files". Such command names should be
+ enclosed in double quotes, as in
+ $lpr_pdf = '"c:/Program Files/Ghostgum/gsview/gsview32.exe" /p
%S';
- (Note about the above example: Forward slashes are equivalent to back-
- slashes in filenames under MS-Windows, provided that the filename is
- inside double quotes. It is easier to use forward slashes in examples
- like the one above, since then one does not have to worry about the
- rules for dealing with forward slashes in strings in the Perl lan-
+ (Note about the above example: Forward slashes are equivalent to back-
+ slashes in filenames under MS-Windows, provided that the filename is
+ inside double quotes. It is easier to use forward slashes in examples
+ like the one above, since then one does not have to worry about the
+ rules for dealing with forward slashes in strings in the Perl lan-
guage.)
- Using MS-Windows file associations: A useful trick under modern ver-
+ Using MS-Windows file associations: A useful trick under modern ver-
sions of MS-Windows (e.g., WinXP) is to use just the command 'start' by
itself:
$dvi_previewer = 'start %S';
Under recent versions of MS-Windows, this will cause to be run whatever
- program the system has associated with dvi files. (The same applies
+ program the system has associated with dvi files. (The same applies
for a postscript viewer and a pdf viewer.)
Not using a certain command: If a command is not to be run, the command
@@ -891,47 +982,48 @@ LATEXMK(1L) LATEXMK(1L)
$lpr = 'NONE lpr';
- This typically is used when an appropriate command does not exist on
+ This typically is used when an appropriate command does not exist on
your system. The string after the "NONE" is effectively a comment.
Options to commands: Setting the name of a command can be used not only
for changing the name of the command called, but also to add options to
- command. Suppose you want latexmk to use latex with source specials
- enabled. Then you might use the following line in an initialization
+ command. Suppose you want latexmk to use latex with source specials
+ enabled. Then you might use the following line in an initialization
file:
$latex = 'latex --src-specials %O %S';
- Advanced tricks: Normally one specifies a single command for the com-
- mands invoked by latexmk. Naturally, if there is some complicated
+ Advanced tricks: Normally one specifies a single command for the com-
+ mands invoked by latexmk. Naturally, if there is some complicated
additional processing you need to do in your special situation, you can
write a script (or batch file) to do the processing, and then configure
latexmk to use your script in place of the standard program.
It is also possible to configure latexmk to run multiple commands. For
- example, if when running pdflatex to generate a pdf file from a tex
- file you need to run another program after pdflatex to perform some
+ example, if when running pdflatex to generate a pdf file from a tex
+ file you need to run another program after pdflatex to perform some
extra processing, you could do something like:
- $pdflatex = 'pdflatex --shell-escape %O %S; pst2pdf_for_latexmk
- %B';
+ $pdflatex = 'pdflatex --shell-escape %O %S; pst2pdf_for_latexmk
- This definition assumes you are using a UNIX-like system, so that the
- two commands to be run are separated by the semicolon in the middle of
- the string.
+ 21 March 2011 15
- 3 February 2011 14
+LATEXMK(1L) LATEXMK(1L)
+ %B';
+
+ This definition assumes you are using a UNIX-like system, so that the
+ two commands to be run are separated by the semicolon in the middle of
+ the string.
-LATEXMK(1L) LATEXMK(1L)
LIST OF CONFIGURATION VARIABLES USABLE IN INITIALIZATION FILES
@@ -939,27 +1031,27 @@ LIST OF CONFIGURATION VARIABLES USABLE IN INITIALIZATION FILES
$always_view_file_via_temporary [0]
Whether ps and pdf files are initially to be made in a temporary
- directory and then moved to the final location. (This applies
+ directory and then moved to the final location. (This applies
to dvips, dvipdf, and ps2pdf operations, and the filtering oper-
- ators on dvi and ps files. It does not apply to pdflatex,
+ ators on dvi and ps files. It does not apply to pdflatex,
unfortunately.)
This use of a temporary file solves a problem that the making of
- these files can occupy a substantial time. If a viewer sees
- that the file has changed, it reads the new file, and this can
+ these files can occupy a substantial time. If a viewer sees
+ that the file has changed, it reads the new file, and this can
cause havoc if the program writing the file has not yet finished
its work.
See the $pvc_view_file_via_temporary variable for a setting that
- applies only if preview-continuous mode (-pvc option) is used.
+ applies only if preview-continuous mode (-pvc option) is used.
See $tmpdir for the setting of the directory where the temporary
file is created.
$banner [0]
- If nonzero, the banner message is printed across each page when
- converting the dvi file to postscript. Without modifying the
- variable $banner_message, this is equivalent to specifying the
+ If nonzero, the banner message is printed across each page when
+ converting the dvi file to postscript. Without modifying the
+ variable $banner_message, this is equivalent to specifying the
-d option.
Note that if $banner is nonzero, the $postscript_mode is assumed
@@ -968,7 +1060,7 @@ LIST OF CONFIGURATION VARIABLES USABLE IN INITIALIZATION FILES
$banner_intensity [0.95]
Equivalent to the -bi option, this is a decimal number between 0
- and 1 that specifies how dark to print the banner message. 0 is
+ and 1 that specifies how dark to print the banner message. 0 is
black, 1 is white. The default is just right if your toner car-
tridge isn't running too low.
@@ -977,22 +1069,15 @@ LIST OF CONFIGURATION VARIABLES USABLE IN INITIALIZATION FILES
dvi file to postscript. This is equivalent to the -bm option.
$banner_scale [220.0]
- A decimal number that specifies how large the banner message
- will be printed. Experimentation is necessary to get the right
- scale for your message, as a rule of thumb the scale should be
- about equal to 1100 divided by the number of characters in the
- message. The Default is just right for 5 character messages.
- This is equivalent to the -bs option.
-
- @BIBINPUTS
- This is an array variable, now mostly obsolete, that specifies
- directories where latexmk should look for .bib files. By
- default it is set from the BIBINPUTS environment variable of the
- operating system. If that environment variable is not set, a
+ A decimal number that specifies how large the banner message
+ will be printed. Experimentation is necessary to get the right
+ scale for your message, as a rule of thumb the scale should be
+ about equal to 1100 divided by the number of characters in the
+ message. The Default is just right for 5 character messages.
- 3 February 2011 15
+ 21 March 2011 16
@@ -1001,7 +1086,14 @@ LIST OF CONFIGURATION VARIABLES USABLE IN INITIALIZATION FILES
LATEXMK(1L) LATEXMK(1L)
- single element list consisting of the current directory is set.
+ This is equivalent to the -bs option.
+
+ @BIBINPUTS
+ This is an array variable, now mostly obsolete, that specifies
+ directories where latexmk should look for .bib files. By
+ default it is set from the BIBINPUTS environment variable of the
+ operating system. If that environment variable is not set, a
+ single element list consisting of the current directory is set.
The format of the directory names depends on your operating sys-
tem, of course. Examples for setting this variable are:
@@ -1011,13 +1103,13 @@ LATEXMK(1L) LATEXMK(1L)
@BIBINPUTS = ( ".", "//server/bibfiles" );
@BIBINPUTS = ( ".", "/usr/local/texmf/bibtex/bib" );
- Note that under MS Windows, either a forward slash "/" or a
- backward slash "\" can be used to separate pathname components,
- so the first two and the second two examples are equivalent.
- Each backward slash should be doubled to avoid running afoul of
+ Note that under MS Windows, either a forward slash "/" or a
+ backward slash "\" can be used to separate pathname components,
+ so the first two and the second two examples are equivalent.
+ Each backward slash should be doubled to avoid running afoul of
Perl's rules for writing strings.
- Important note: This variable is now mostly obsolete in the current
+ Important note: This variable is now mostly obsolete in the current
version of latexmk, since it has a better method of searching for files
using the kpsewhich command. However, if your system is an unusual one
without the kpsewhich command, you may need to set the variable @BIBIN-
@@ -1027,7 +1119,7 @@ LATEXMK(1L) LATEXMK(1L)
The biber processing program.
$biber_silent_switch ["--onlylog"]
- Switch(es) for the biber processing program when silent mode is
+ Switch(es) for the biber processing program when silent mode is
on.
$bibtex ["bibtex %O %S"]
@@ -1039,28 +1131,21 @@ LATEXMK(1L) LATEXMK(1L)
$bibtex_use [1]
Under what conditions to run BibTeX or biber. When latexmk dis-
- covers from the log file that one (or more) BibTeX/biber-gener-
- ated bibliographies are used, it can run BibTeX or biber when-
- ever it appears necessary to regenerate the bbl file(s) from
+ covers from the log file that one (or more) BibTeX/biber-gener-
+ ated bibliographies are used, it can run BibTeX or biber when-
+ ever it appears necessary to regenerate the bbl file(s) from
their source bib database file(s).
- But sometimes, the bib file(s) are not available (e.g., for a
- document obtained from an external archive), but the bbl files
- are provided. In that case use of BibTeX or biber will result
- in incorrect overwriting of the precious bbl files. The vari-
- able $bibtex_use controls whether this happens. Its possible
+ But sometimes, the bib file(s) are not available (e.g., for a
+ document obtained from an external archive), but the bbl files
+ are provided. In that case use of BibTeX or biber will result
+ in incorrect overwriting of the precious bbl files. The vari-
+ able $bibtex_use controls whether this happens. Its possible
values are: 0: never use BibTeX or biber. 1: only use BibTeX or
- biber if the bib files exist. 2: run BibTeX or biber whenever
- it appears necessary to update the bbl files, without testing
- for the existence of the bib files.
-
- $cleanup_includes_cusdep_generated [0]
- If nonzero, specifies that cleanup also deletes files that are
- generated by custom dependencies. (When doing a clean up, e.g.,
- 3 February 2011 16
+ 21 March 2011 17
@@ -1069,66 +1154,66 @@ LATEXMK(1L) LATEXMK(1L)
LATEXMK(1L) LATEXMK(1L)
+ biber if the bib files exist. 2: run BibTeX or biber whenever
+ it appears necessary to update the bbl files, without testing
+ for the existence of the bib files.
+
+ $cleanup_includes_cusdep_generated [0]
+ If nonzero, specifies that cleanup also deletes files that are
+ generated by custom dependencies. (When doing a clean up, e.g.,
by use of the -C option, custom dependencies are those listed in
the .fdb_latexmk file from a previous run.)
$cleanup_includes_generated [0]
- If nonzero, specifies that cleanup also deletes files that are
- detected in log file as being generated (see the \openout lines
- in the log file). It will also include files made from these
+ If nonzero, specifies that cleanup also deletes files that are
+ detected in log file as being generated (see the \openout lines
+ in the log file). It will also include files made from these
first generation generated files.
$cleanup_mode [0]
- If nonzero, specifies cleanup mode: 1 for full cleanup, 2 for
- cleanup except for dvi, ps and pdf files, 3 for cleanup except
- for dep and aux files. (There is also extra cleaning as speci-
- fied by the $clean_ext, $clean_full_ext and @generated_exts
+ If nonzero, specifies cleanup mode: 1 for full cleanup, 2 for
+ cleanup except for dvi, ps and pdf files, 3 for cleanup except
+ for dep and aux files. (There is also extra cleaning as speci-
+ fied by the $clean_ext, $clean_full_ext and @generated_exts
variables.)
- This variable is equivalent to specifying one of the -c or -C options.
+ This variable is equivalent to specifying one of the -c or -C options.
But there should be no need to set this variable from an RC file.
$clean_ext [""]
- Extra extensions of files for latexmk to remove when any of the
- clean-up options (-c or -C) is selected. The value of this
- variable is a string containing the extensions separated by
+ Extra extensions of files for latexmk to remove when any of the
+ clean-up options (-c or -C) is selected. The value of this
+ variable is a string containing the extensions separated by
spaces.
It is also possible to specify a more general pattern of file to
- be deleted, by using the place holder %R, as in commands. Thus
+ be deleted, by using the place holder %R, as in commands. Thus
setting
$clean_ext = "out %R-blx.bib";
in an initialization file will imply that when a clean-up opera-
- tion is specified, not only is the standard set of files
- deleted, but also files of the form FOO.out and FOO-blx.bib,
- where FOO stands for the basename of the file being processed
+ tion is specified, not only is the standard set of files
+ deleted, but also files of the form FOO.out and FOO-blx.bib,
+ where FOO stands for the basename of the file being processed
(as in FOO.tex).
$clean_full_ext [""]
- Extra extensions of files for latexmk to remove when the -C
+ Extra extensions of files for latexmk to remove when the -C
option is selected, i.e., extensions of files to remove when the
.dvi, etc files are to be cleaned-up.
@cus_dep_list [()]
- Custom dependency list -- see section on "Custom Dependencies".
+ Custom dependency list -- see section on "Custom Dependencies".
@default_files [("*.tex")]
Default list of files to be processed.
- Normally, if no filenames are specified on the command line,
- latexmk processes all tex files specified in the @default_files
- variable, which by default is set to all tex files ("*.tex") in
- the current directory. This is a convenience: just run latexmk
- and it will process an appropriate set of files. But sometimes
- you want only some of these files to be processed. In this case
- you set the @default_files in an initialization file (e.g., the
- 3 February 2011 17
+ 21 March 2011 18
@@ -1137,8 +1222,15 @@ LATEXMK(1L) LATEXMK(1L)
LATEXMK(1L) LATEXMK(1L)
- file "latexmkrc" in the current directory). Then if no files
- are specified on the command line then the files you specify by
+ Normally, if no filenames are specified on the command line,
+ latexmk processes all tex files specified in the @default_files
+ variable, which by default is set to all tex files ("*.tex") in
+ the current directory. This is a convenience: just run latexmk
+ and it will process an appropriate set of files. But sometimes
+ you want only some of these files to be processed. In this case
+ you set the @default_files in an initialization file (e.g., the
+ file "latexmkrc" in the current directory). Then if no files
+ are specified on the command line then the files you specify by
setting @default_files are processed.
Three examples:
@@ -1149,11 +1241,15 @@ LATEXMK(1L) LATEXMK(1L)
@default_files = ("*.tex", "*.dtx");
- Note that more than file may be given, and that the default
- extension is ".tex". Wild cards are allowed. The parentheses
+ Note that more than file may be given, and that the default
+ extension is ".tex". Wild cards are allowed. The parentheses
are because @default_files is an array variable, i.e., a
sequence of filename specifications is possible.
+ $dependents_list [0]
+ Whether to display a list(s) of dependencies at the end of a
+ run.
+
$dvi_filter [empty]
The dvi file filter to be run on the newly produced dvi file
before other processing. Equivalent to specifying the -dF
@@ -1182,31 +1278,31 @@ LATEXMK(1L) LATEXMK(1L)
$dvipdf ["dvipdf %O %S %D"]
Command to convert dvi to pdf file. A common reconfiguration is
- to use the dvipdfm command, which needs its arguments in a dif-
- ferent order:
+ to use the dvipdfm command, which needs its arguments in a
- $dvipdf = "dvipdfm %O -o %D %S";
- WARNING: The default dvipdf script generates pdf files with
- bitmapped fonts, which do not look good when viewed by acroread.
- That script should be modified to give dvips the options "-P
- pdf" to ensure that type 1 fonts are used in the pdf file.
- $dvips ["dvips %O -o %D %S"]
- The program to used as a filter to convert a .dvi file to a .ps
- file. If pdf is going to be generated from pdf, then the value
+ 21 March 2011 19
- 3 February 2011 18
+LATEXMK(1L) LATEXMK(1L)
+ different order:
-LATEXMK(1L) LATEXMK(1L)
+ $dvipdf = "dvipdfm %O -o %D %S";
+ WARNING: The default dvipdf script generates pdf files with
+ bitmapped fonts, which do not look good when viewed by acroread.
+ That script should be modified to give dvips the options "-P
+ pdf" to ensure that type 1 fonts are used in the pdf file.
+ $dvips ["dvips %O -o %D %S"]
+ The program to used as a filter to convert a .dvi file to a .ps
+ file. If pdf is going to be generated from pdf, then the value
of the $dvips_pdf_switch -- see below -- will be included in the
options substituted for "%O".
@@ -1253,6 +1349,17 @@ LATEXMK(1L) LATEXMK(1L)
variable $dvi_update_method. The default value is the one
appropriate for xdvi on a UNIX system.
+
+
+ 21 March 2011 20
+
+
+
+
+
+LATEXMK(1L) LATEXMK(1L)
+
+
$fdb_ext ["fdb_latexmk"]
The extension of the file which latexmk generates to contain a
database of information on source files. You will not normally
@@ -1266,18 +1373,6 @@ LATEXMK(1L) LATEXMK(1L)
@generated_exts [( aux , bbl , idx , ind , lof , lot , out , toc ,
$fdb_ext )]
This contains a list of extensions for files that are generated
-
-
-
- 3 February 2011 19
-
-
-
-
-
-LATEXMK(1L) LATEXMK(1L)
-
-
during a LaTeX run and that are read in by LaTeX in later runs,
either directly or indirectly.
@@ -1322,6 +1417,18 @@ LATEXMK(1L) LATEXMK(1L)
time changes, latex sees that the eps file has changed, and
therefore reruns latex. This causes an infinite loop, that is
only terminated becaues latexmk has a limit on the number of
+
+
+
+ 21 March 2011 21
+
+
+
+
+
+LATEXMK(1L) LATEXMK(1L)
+
+
runs to guard against pathological situations.
But the changing line has no real effect, since it is a comment.
@@ -1337,18 +1444,6 @@ LATEXMK(1L) LATEXMK(1L)
they are to be specified in general.) This particular regular
expression specifies that lines beginning with "%%CreationDate:
" are to be ignored in deciding whether a file of the given
-
-
-
- 3 February 2011 20
-
-
-
-
-
-LATEXMK(1L) LATEXMK(1L)
-
-
extension .eps has changed.
There is only one regular expression available for each exten-
@@ -1392,6 +1487,18 @@ LATEXMK(1L) LATEXMK(1L)
$latex ["latex %O %S"]
The LaTeX processing program. Note that as with other programs,
you can use this variable not just to change the name of the
+
+
+
+ 21 March 2011 22
+
+
+
+
+
+LATEXMK(1L) LATEXMK(1L)
+
+
program used, but also specify options to the program. E.g.,
$latex = "latex --src-specials";
@@ -1409,17 +1516,6 @@ LATEXMK(1L) LATEXMK(1L)
specified by the variable %latex_input_extensions. The default
extensions are 'tex' and 'eps'.
-
-
- 3 February 2011 21
-
-
-
-
-
-LATEXMK(1L) LATEXMK(1L)
-
-
(For Perl experts: %latex_input_extensions is a hash whose keys
are the extensions. The values are irrelevant.) Two subrou-
tines are provided for manipulating this and the related vari-
@@ -1461,6 +1557,18 @@ LATEXMK(1L) LATEXMK(1L)
example, if you have gsview installed, you could use it with the
option "/p":
+
+
+
+ 21 March 2011 23
+
+
+
+
+
+LATEXMK(1L) LATEXMK(1L)
+
+
$lpr = '"c:/Program Files/Ghostgum/gsview/gsview32.exe" /p';
If gsview is installed in a different directory, you will need
@@ -1479,18 +1587,6 @@ LATEXMK(1L) LATEXMK(1L)
The printing program to print pdf files.
Under MS-Windows you could set this to use gsview, if it is
-
-
-
- 3 February 2011 22
-
-
-
-
-
-LATEXMK(1L) LATEXMK(1L)
-
-
installed, e.g.,
$lpr = '"c:/Program Files/Ghostgum/gsview/gsview32.exe" /p';
@@ -1502,6 +1598,10 @@ LATEXMK(1L) LATEXMK(1L)
interpreted.
+ $make ["make"]
+ The make processing program.
+
+
$makeindex ["makeindex %O -o %D %S"]
The index processing program.
@@ -1527,6 +1627,18 @@ LATEXMK(1L) LATEXMK(1L)
If zero, do NOT generate a pdf version of the document. If
equal to 1, generate a pdf version of the document using pdfla-
tex. If equal to 2, generate a pdf version of the document from
+
+
+
+ 21 March 2011 24
+
+
+
+
+
+LATEXMK(1L) LATEXMK(1L)
+
+
the ps file, by using the command specified by the $ps2pdf vari-
able. If equal to 3, generate a pdf version of the document
from the dvi file, by using the command specified by the $dvipdf
@@ -1551,17 +1663,6 @@ LATEXMK(1L) LATEXMK(1L)
specified by the variable %pdflatex_input_extensions. The
default extensions are 'tex', 'pdf', 'jpg, and 'png'.
-
-
- 3 February 2011 23
-
-
-
-
-
-LATEXMK(1L) LATEXMK(1L)
-
-
(For Perl experts: %pdflatex_input_extensions is a hash whose
keys are the extensions. The values are irrelevant.) Two sub-
routines are provided for manipulating this and the related
@@ -1598,6 +1699,18 @@ LATEXMK(1L) LATEXMK(1L)
$pdf_previewer ["start acroread %O %S"]
The command to invoke a pdf-previewer. [Default is changed to
"start" on MS-WINDOWS; under more recent versions of Windows,
+
+
+
+ 21 March 2011 25
+
+
+
+
+
+LATEXMK(1L) LATEXMK(1L)
+
+
this will cause to be run whatever command the system has asso-
ciated with .pdf files.]
@@ -1622,17 +1735,6 @@ LATEXMK(1L) LATEXMK(1L)
for the value 2, to specify update by signal, the signal is
specified by $pdf_update_signal.)
-
-
- 3 February 2011 24
-
-
-
-
-
-LATEXMK(1L) LATEXMK(1L)
-
-
Note that acroread under MS-Windows (but not UNIX) locks the pdf
file, so the default value is then 3.
@@ -1669,6 +1771,18 @@ LATEXMK(1L) LATEXMK(1L)
If nonzero, generate a postscript version of the document.
Equivalent to the -ps option.
+
+
+
+ 21 March 2011 26
+
+
+
+
+
+LATEXMK(1L) LATEXMK(1L)
+
+
If some other request is made for which a postscript file is needed,
then $postscript_mode will be set to 1.
@@ -1693,17 +1807,6 @@ LATEXMK(1L) LATEXMK(1L)
Type of file to printout: possibilities are "dvi", "none",
"pdf", or "ps".
-
-
- 3 February 2011 25
-
-
-
-
-
-LATEXMK(1L) LATEXMK(1L)
-
-
$pscmd Command used to get all the processes currently run by the user.
The -pvc option uses the command specified by the variable
$pscmd to determine if there is an already running previewer,
@@ -1740,6 +1843,18 @@ LATEXMK(1L) LATEXMK(1L)
ferent ways of writing this option. You can configure this
variable apppropriately.
+
+
+
+ 21 March 2011 27
+
+
+
+
+
+LATEXMK(1L) LATEXMK(1L)
+
+
WARNING: Linux systems may have installed one (or more) versions
of gv under different names, e.g., ggv, kghostview, etc, but
perhaps not one called gv.
@@ -1763,18 +1878,6 @@ LATEXMK(1L) LATEXMK(1L)
signal, the signal is specified by $ps_update_signal.)
-
-
-
- 3 February 2011 26
-
-
-
-
-
-LATEXMK(1L) LATEXMK(1L)
-
-
$ps_update_signal [Under UNIX: SIGHUP, which is a system-dependent
value]
The number of the signal that is sent to the pdf viewer when it
@@ -1801,43 +1904,93 @@ LATEXMK(1L) LATEXMK(1L)
ing only ensures that such filenames are correctly treated by the oper-
ating system in passing arguments to programs.)
+ $recorder [0]
+ Whether to use the -recorder option to latex and pdflatex. Use
+ of this option results in a file of extension .fls containing a
+ list of the files that these programs have read and written.
+ Latexmk will then use this file to improve its detection of
+ source files and generated files after a run of latex or pdfla-
+ tex.
+
+ It is generally recommended to use this option (or to configure
+ the $recorder variable to be on.) But it only works if
+ (pdf)latex supports the -recorder option, which is true for most
+
+
+
+ 21 March 2011 28
+
+
+
+
+
+LATEXMK(1L) LATEXMK(1L)
+
+
+ current implementations
+
+ Note about the name of the .fls file: Most implementations of
+ (pdf)latex produce an .fls file with the same basename as the
+ main document's LaTeX, e.g., for Document.tex, the .fls file is
+ Document.fls. However, some implementations instead produce
+ files named for the program, i.e., latex.fls or pdflatex.fls.
+ In this second case, latexmk copies the latex.fls or pdfla-
+ tex.fls to a file with the basename of the main LaTeX document,
+ e.g., Document.fls.
+
$sleep_time [2]
- The time to sleep (in seconds) between checking for source file
+ The time to sleep (in seconds) between checking for source file
changes when running with the -pvc option. This is subject to a
- minimum of one second delay, except that zero delay is also
+ minimum of one second delay, except that zero delay is also
allowed.
- A value of exactly 0 gives no delay, and typically results in
+ A value of exactly 0 gives no delay, and typically results in
100% CPU usage, which may not be desirable.
$texfile_search [""]
- This is an obsolete variable, replaced by the @default_files
+ This is an obsolete variable, replaced by the @default_files
variable.
- For backward compatibility, if you choose to set $tex-
- file_search, it is a string of space-separated filenames, and
+ For backward compatibility, if you choose to set $tex-
+ file_search, it is a string of space-separated filenames, and
then latexmk replaces @default_files with the filenames in $tex-
file_search to which is added "*.tex".
$tmpdir [See below for default]
- Directory to store temporary files that latexmk may generate
+ Directory to store temporary files that latexmk may generate
while running.
- The default under MSWindows (including cygwin), is to set
- $tmpdir to the value of the first of whichever of the system
- environment variables TMPDIR or TEMP exists, otherwise to the
- current directory. Under other operating systems (expected to
- be UNIX/Linux, including OS-X), the default is the value of the
- system environment variable TMPDIR if it exists, otherwise
+ The default under MSWindows (including cygwin), is to set
+ $tmpdir to the value of the first of whichever of the system
+ environment variables TMPDIR or TEMP exists, otherwise to the
+ current directory. Under other operating systems (expected to
+ be UNIX/Linux, including OS-X), the default is the value of the
+ system environment variable TMPDIR if it exists, otherwise
"/tmp".
+ $use_make_for_missing_files [0]
+ Whether to use make to try and make files that are missing after
+ a run of latex or pdflatex, and for which a custom dependency
+ has not been found. This is generally useful only when latexmk
+ is used as part of a bigger project which is built by using the
+ make program.
+
+ Note that once a missing file has been made, no further calls to
+ make will be made on a subsequent run of latexmk to update the
+ file. Handling this problem is the job of a suitably defined
+ Makefile. See the section "USING latexmk WITH make" for how to
+ do this. The intent of calling make from latexmk is merely to
+ detect dependencies.
+
$view ["default"]
Which kind of file is to be previewed if a previewer is used.
The possible values are "default", "dvi", "ps", "pdf". The
+ value of "default" means that the "highest" of the kinds of file
+ generated is to be used (among dvi, ps and pdf).
- 3 February 2011 27
+ 21 March 2011 29
@@ -1846,10 +1999,6 @@ LATEXMK(1L) LATEXMK(1L)
LATEXMK(1L) LATEXMK(1L)
- value of "default" means that the "highest" of the kinds of file
- generated is to be used (among dvi, ps and pdf).
-
-
CUSTOM DEPENDENCIES
In any RC file a set of custom dependencies can be set up to convert a
file with one extension to a file with another. An example use of this
@@ -1905,23 +2054,22 @@ CUSTOM DEPENDENCIES
those without knowledge of the Perl programming language. Of course,
experts could do something much more elaborate.
+ One other item in each custom-dependency rule labelled "must" above
+ specifies how the rule should be applied when the source file fails to
+ exist.
+ A simple and typical example of code in an initialization rcfile is
- 3 February 2011 28
-
+ 21 March 2011 30
-LATEXMK(1L) LATEXMK(1L)
- One other item in each custom-dependency rule labelled "must" above
- specifies how the rule should be applied when the source file fails to
- exist.
+LATEXMK(1L) LATEXMK(1L)
- A simple and typical example of code in an initialization rcfile is
add_cus_dep( 'fig', 'eps', 0, 'fig2eps' );
sub fig2eps {
@@ -1976,24 +2124,24 @@ LATEXMK(1L) LATEXMK(1L)
add_cus_dep( 'fig', 'pdf, 0, 'fig2pdf' );
sub fig2pdf {
system("fig2dev -Lpdf $_[0].fig $_[0].pdf");
+ }
+ If you have some general custom dependencies defined in the system or
+ user initialization file, you may find that for a particular project
+ they are undesirable. So you might want to delete the unneeded ones.
+ For example, you remove any "fig" to "eps" rule by the line
- 3 February 2011 29
+ 21 March 2011 31
-LATEXMK(1L) LATEXMK(1L)
- }
+LATEXMK(1L) LATEXMK(1L)
- If you have some general custom dependencies defined in the system or
- user initialization file, you may find that for a particular project
- they are undesirable. So you might want to delete the unneeded ones.
- For example, you remove any "fig" to "eps" rule by the line
remove_cus_dep( 'fig', 'eps' );
@@ -2046,26 +2194,26 @@ OLD METHOD OF DEFINING CUSTOM DEPENDENCIES
In previous versions of latexmk, the only method of defining custom
dependencies was to directly manipulate the table of custom dependen-
cies. This is contained in the @cus_dep_list array. It is an array of
- strings, and each string in the array has four items in it, each
+ strings, and each string in the array has four items in it, each sepa-
+ rated by a space, the from-extension, the to-extension, the "must"
+ item, and the name of the subroutine for the custom dependency. These
+ were all defined above.
+ An example of the old method of defining custom dependencies is as fol-
+ lows. It is the code in an RC file to ensure automatic conversion of
+ .fig files to .eps files:
- 3 February 2011 30
+ 21 March 2011 32
-LATEXMK(1L) LATEXMK(1L)
- separated by a space, the from-extension, the to-extension, the "must"
- item, and the name of the subroutine for the custom dependency. These
- were all defined above.
+LATEXMK(1L) LATEXMK(1L)
- An example of the old method of defining custom dependencies is as fol-
- lows. It is the code in an RC file to ensure automatic conversion of
- .fig files to .eps files:
push @cus_dep_list, "fig eps 0 fig2eps";
sub fig2eps {
@@ -2078,39 +2226,188 @@ LATEXMK(1L) LATEXMK(1L)
preferable.
+
+
+USING latexmk WITH make
+ This section is targeted only at advanced users who use the make pro-
+ gram for complex projects, as for software development, with the depen-
+ dencies specified by a Makefile.
+
+ Now the basic task of latexmk is to run the appropriate programs to
+ make a viewable version of a LaTeX document. However, the usual make
+ program is not suited to this purpose for at least two reasons. First
+ is that the use of LaTeX involves circular dependencies (e.g., via .aux
+ files), and these cannot be handled by the standard make program. Sec-
+ ond is that in a large document the set of source files can change
+ quite frequently, particularly with included graphics files; in this
+ situation keeping a Makefile manually updated is inappropriate and
+ error-prone, especially when the depedencies can be determined automat-
+ ically. Latexmk solves both of these problems robustly.
+
+ Thus for many standard LaTeX documents latexmk can be used by itself
+ without the make program. In a complex project it simply needs to be
+ suitably configured. A standard configuration would be to define cus-
+ tom dependencies to make graphics files from their source files (e.g.,
+ as created by the xfig program). Custom dependencies are latexmk's
+ equivalent of pattern rules in Makefiles.
+
+ Nevertheless there are projects for which a Makefile is appropriate,
+ and it is useful to know how to use latexmk from a Makefile. A typical
+ example would be to generate documentation for a software project.
+ Potentially the interaction with the rest of the rules in the Makefile
+ could be quite complicated, for example if some of the source files for
+ a LaTeX document are generated by the project's software.
+
+ In this section, I give a couple of examples of how latexmk can be use-
+ fully invoked from a Makefile. The examples use specific features of
+ current versions of GNU make, which is the default on both linux and
+ OS-X systems. They may need modifications for other versions of make.
+
+ The simplest method is simply to delegate all the relevant tasks to
+ latexmk, as is suitable for a straightforward LaTeX document. For this
+ a suitable Makefile is like
+
+ .PHONY : FORCE_MAKE
+ all : try.pdf
+ %.pdf : %.tex FORCE_MAKE
+ latexmk -pdf -dvi- -ps- $<
+
+ (Note: the last line must be introduced by a tab for the Makefile to
+ function correctly!) Naturally, if making try.pdf from its associated
+ LaTeX file try.tex were the only task to be performed, a direct use of
+
+
+
+ 21 March 2011 33
+
+
+
+
+
+LATEXMK(1L) LATEXMK(1L)
+
+
+ latexmk without a Makefile would normally be better. The benefit of
+ using a Makefile for a LaTeX document would be in a larger project,
+ where lines such as the above would be only be a small part of a larger
+ Makefile.
+
+ The above example has a pattern rule for making a .pdf file from a .tex
+ file, and it is defined to use latexmk in the obvious way. There is a
+ conventional default target named "all", with a prerequisite of
+ try.pdf. So when make is invoked, by default it makes try.pdf. The
+ only complication is that there may be many source files beyond
+ try.tex, but these aren't specified in the Makefile, so changes in them
+ will not by themselves cause latexmk to be invoked. Instead, the pat-
+ tern rule is equipped with a "phony" prerequisite FORCE_MAKE; this has
+ the effect of causing the rule to be always out-of-date, so that
+ latexmk is always run. It is latexmk that decides whether any action
+ is needed, e.g., a rerun of pdflatex. Effectively the Makefile dele-
+ gates all decisions to latexmk, while make has no knowledge of the list
+ of source files except for primary LaTeX file for the document. If
+ there are, for example, graphics files to be made, these must be made
+ by custom dependencies configured in latexmk.
+
+ But something better is needed in more complicated situations, for
+ example, when the making of graphics files needs to be specified by
+ rules in the Makefile. To do this, one can use a Makefile like the
+ following:
+
+ TARGETS = document1.pdf document2.pdf
+ DEPS_DIR = .deps
+ LATEXMK = latexmk -recorder -use-make -deps \
+ -e 'warn qq(In Makefile, turn off custom dependencies0;' \
+ -e '@cus_dep_list = ();' \
+ -e 'show_cus_dep();'
+ all : $(TARGETS)
+ $(foreach file,$(TARGETS),$(eval -include $(DEPS_DIR)/$(file)P))
+ $(DEPS_DIR) :
+ mkdir $@
+ %.pdf : %.tex
+ if [ ! -e $(DEPS_DIR) ]; then mkdir $(DEPS_DIR); fi
+ $(LATEXMK) -pdf -dvi- -ps- -deps-out=$(DEPS_DIR)/$@P $<
+ %.pdf : %.fig
+ fig2dev -Lpdf $< $@
+
+ (Again, the lines containing the commands for the rules should be
+ started with tabs.) This example was inspired by how GNU automake han-
+ dles automatic dependency tracking of C source files.
+
+ After each run of latexmk, dependency information is put in a file in
+ the .deps subdirectory. The Makefile causes these dependency files to
+ be read by make, which now has the full dependency information for each
+ target .pdf file. To make things less trivial it is specificed that
+ two files document1.pdf and document2.pdf are the targets. The depen-
+ dency files are .deps/document1.pdfP and .deps/document2.pdfP.
+
+ There is now no need for the phony prerequisite for the rule to make
+ .pdf files from .tex files. But I have added a rule to make .pdf files
+ from .fig files produced by the xfig program; these are commonly used
+ for graphics insertions in LaTeX documents. Latexmk is arranged to
+ output a dependency file after each run. It is given the -recorder
+ option, which improves its detection of files generated during a run of
+ pdflatex; such files should not be in the dependency list. The -e
+
+
+
+ 21 March 2011 34
+
+
+
+
+
+LATEXMK(1L) LATEXMK(1L)
+
+
+ options are used to turn off all custom dependencies, and to document
+ this. Instead the -use-make is used to delegate the making of missing
+ files to make itself.
+
+ Suppose in the LaTeX file there is a command \includegraphics{graph},
+ and an xfig file "graph.fig" exists. On a first run, pdflatex reports
+ a missing file, named "graph". Latexmk succeeds in making "graph.pdf"
+ by calling "make graph.pdf", and after completion of its work, it lists
+ "fig.pdf" among the dependents of the file latexmk is making. Then let
+ "fig.fig" be updated, and then let make be run. Make first remakes
+ "fig.pdf", and only then reruns latexmk.
+
+ Thus we now have a method by which all the subsidiary processing is
+ delegated to make.
+
+
SEE ALSO
latex(1), bibtex(1).
BUGS
Sometimes a viewer (gv) tries to read an updated .ps or .pdf file after
- its creation is started but before the file is complete. Work around:
+ its creation is started but before the file is complete. Work around:
manually refresh (or reopen) display. Or use one of the other preview-
ers and update methods.
- (The following isn't really a bug, but concerns features of preview-
- ers.) Preview continuous mode only works perfectly with certain pre-
- viewers: Xdvi on UNIX/LINUX works for dvi files. Gv on UNIX/LINUX
- works for both postscript and pdf. Ghostview on UNIX/LINUX needs a
- manual update (reopen); it views postscript and pdf. Gsview under MS-
- Windows works for both postscript and pdf, but only reads the updated
- file when its screen is refreshed. Acroread under UNIX/LINUX views
- pdf, but the file needs to be closed and reopened to view an updated
- version. Under MS-Windows, acroread locks its input file and so the
- pdf file cannot be updated. (Remedy: configure latexmk to use gsview
+ (The following isn't really a bug, but concerns features of preview-
+ ers.) Preview continuous mode only works perfectly with certain pre-
+ viewers: Xdvi on UNIX/LINUX works for dvi files. Gv on UNIX/LINUX
+ works for both postscript and pdf. Ghostview on UNIX/LINUX needs a
+ manual update (reopen); it views postscript and pdf. Gsview under MS-
+ Windows works for both postscript and pdf, but only reads the updated
+ file when its screen is refreshed. Acroread under UNIX/LINUX views
+ pdf, but the file needs to be closed and reopened to view an updated
+ version. Under MS-Windows, acroread locks its input file and so the
+ pdf file cannot be updated. (Remedy: configure latexmk to use gsview
instead.)
THANKS TO
- Authors of previous versions. Many users with their feedback, and
- especially David Coppit (username david at node coppit.org) who made
- many useful suggestions that contributed to version 3, and Herbert
- Schulz. (Please note that the e-mail addresses are not written in
+ Authors of previous versions. Many users with their feedback, and
+ especially David Coppit (username david at node coppit.org) who made
+ many useful suggestions that contributed to version 3, and Herbert
+ Schulz. (Please note that the e-mail addresses are not written in
their standard form to avoid being harvested by worms and viruses.)
AUTHOR
- Current version, by John Collins (username collins at node
- phys.psu.edu). (Version 4.22e).
+ Current version, by John Collins (username collins at node
+ phys.psu.edu). (Version 4.23).
- Released version can be obtained from CTAN: <http://www.tug.org/tex-
+ Released version can be obtained from CTAN: <http://www.tug.org/tex-
archive/support/latexmk/>, and from the author's website
<http://www.phys.psu.edu/~collins/software/latexmk/>.
Modifications and enhancements by Evan McLean (Version 2.0)
@@ -2121,7 +2418,11 @@ AUTHOR
- 3 February 2011 31
+
+
+
+
+ 21 March 2011 35
@@ -2192,6 +2493,7 @@ LATEXMK(1L) LATEXMK(1L)
- 3 February 2011 32
+
+ 21 March 2011 36
diff --git a/Master/texmf-dist/scripts/latexmk/latexmk.pl b/Master/texmf-dist/scripts/latexmk/latexmk.pl
index 4f0c9b13228..074b496eea1 100755
--- a/Master/texmf-dist/scripts/latexmk/latexmk.pl
+++ b/Master/texmf-dist/scripts/latexmk/latexmk.pl
@@ -107,8 +107,8 @@ use warnings;
$my_name = 'latexmk';
$My_name = 'Latexmk';
-$version_num = '4.22e';
-$version_details = "$My_name, John Collins, 3 February 2011";
+$version_num = '4.23';
+$version_details = "$My_name, John Collins, 21 March 2011";
use Config;
@@ -175,8 +175,24 @@ else {
## 5. Parsing of log file instead of source file is used to
## obtain dependencies, by default.
##
-## Modification log from 23 Jun 2010 onwards in detail
+## Modification log from 1 Jan 2011 onwards in detail
##
+## 21 Mar 2011, John Collins Add 'bcf' to list of generated extensions
+## Deal with case that fls files are latex.fls and pdflatex.fls
+## 19--21 Mar 2011, John Collins -deps and -rules options
+## $use_make_for_missing_files
+## -recorder option
+## 12 Mar 2011, John Collins Deal with problem that if maximum number of
+## runs of (pdf)latex is exceeded, -pvc mode
+## infinitely repeats (pdf)latex
+## 11 Mar 2011, John Collins Fix problem that changes in generated files
+## during run of (pdf)latex may not be detected
+## if the run is shorter than the granularity
+## of file times.
+## 28 Feb 2011, John Collins Corrections of comments and messages
+## 22 Feb 2011, John Collins Documentation improvement.
+## 16 Feb 2011, John Collins Correctly parse blg files of biber 0.8
+## Version 4.23.
## 3 Feb 2011, John Collins Correct handling of errors in rc files
## 23 Jan 2011, John Collins Fix detection of makeindex files with
## MiKTeX v >= 2.8
@@ -185,51 +201,6 @@ else {
## 9 Jan 2011, John Collins Correct parsing of blg file for biber 0.7.2
## 3 Jan 2011, John Collins Small correction on reading .fdb_file
## 1 Jan 2011, John Collins Biber implementation
-## 30 Dec 2010, John Collins Version number to 4.22
-## Start for biber
-## 28 Dec 2010, John Collins Version number to 4.21
-## 1. Improved handling of quotes in filenames in log file:
-## a. Clean double quotes in names from messages about files.
-## b. In ("..." construct, as in MiKTeX, the only character
-## prohibited is ". Previously I disallowed ( and ),
-## which are allowed special characters.
-## 2. Reversed deletion and reinsertion in dependents list
-## of name found by kpsewhich. Otherwise sometimes a name
-## could be deleted in error
-## 12 Nov 2010, John Collins Version number to 4.20
-## 11 Nov 2010, John Collins Fix problem that when bibtex finds no
-## citations, this is treated by bibtex as an
-## error, but latexmk should only treat it as
-## a warning but not an error
-## 8,9 Nov 2010, John Collins Get .bst file in source file list for bibtex
-## 30 Oct 2010, John Collins Allow clean-up to delete destination files of
-## custom-dependencies
-## Configuration variable $cleanup_includes_cusdep_generated to
-## whether this is done
-## 20 Sep 2010, John Collins First attempt to deal with no citations warning
-## Still have the problem that bibtex gives non-zero exit code
-## 19 Sep 2010, John Collins Orthogonalize option and command specification
-## a la Manuel Pegourie-Gonnard (email of 19 Sep 2010,
-## "[latexmk] latex engine and default options".)
-## Still needs documentation.
-## 19 Sep 2010, John Collins More general pattern for files to clean up,
-## Thanks to Manuel Pegourie-Gonnard for the code
-## Must check the use of %generated_exts_all in
-## sub rdb_file_change1.
-## 30 Aug 2010, John Collins Remove double quotes (if any) surrounding
-## output filename read from .log file.
-## (Avoids wrong diagnostic message.)
-## 19 Aug 2010, John Collins Remove use of --width option on $pscmd
-## on linux. It's no longer needed.
-## 30 Jul 2010, John Collins Timing information
-## 27 Jul 2010, John Collins Clean up some comments.
-## This is release version for 4.18.
-## 23 Jul 2010, John Collins Only produce "Removing no-longer-needed
-## dependent" messages when diagnostics are
-## on.
-## 23 Jun 2010, John Collins Add test in log file for natbib's
-## citation-undefined warning
-## 23 Jun 2010, John Collins V. 4.18
##
## 1998-2010, John Collins. Many improvements and fixes.
## See CHANGE-log.txt for full list, and CHANGES for summary
@@ -438,6 +409,8 @@ $ps2pdf = 'ps2pdf %O %S %D';
## Command to search for tex-related files
$kpsewhich = 'kpsewhich %S';
+## Command to run make:
+$make = 'make';
##Printing:
$print_type = 'ps'; # When printing, print the postscript file.
@@ -838,7 +811,7 @@ $texfile_search = ""; # Specification for extra files to search for
$fdb_ext = 'fdb_latexmk'; # Extension for the file for latexmk's
# file-database
# Make it long to avoid possible collisions.
-$fdb_ver = 2; # Version number for kind of fdb_file.
+$fdb_ver = 3; # Version number for kind of fdb_file.
$jobname = ''; # Jobname: as with current tex, etc indicates
# basename of generated files.
@@ -849,6 +822,7 @@ $jobname = ''; # Jobname: as with current tex, etc indicates
## default flag settings.
+$recorder = 0; # Whether to use recorder option on latex/pdflatex
$silent = 0; # silence latex's messages?
$landscape_mode = 0; # default to portrait mode
@@ -869,7 +843,8 @@ $landscape_mode = 0; # default to portrait mode
# rerun, but a change in a generated file should not.
# These arrays can be user-configured.
-@generated_exts = ( 'aux', 'idx', 'ind', 'lof', 'lot', 'out', 'toc' );
+@generated_exts = ( 'aux', 'bcf', 'fls', 'idx', 'ind', 'lof', 'lot',
+ 'out', 'toc' );
# N.B. 'out' is generated by hyperref package
# Which kinds of file do I have requests to make?
@@ -893,6 +868,8 @@ $banner_message = 'DRAFT'; # Original default message
$do_cd = 0; # Do not do cd to directory of source file.
# Thus behave like latex.
$dependents_list = 0; # Whether to display list(s) of dependencies
+$deps_file = '-'; # File for dependency list output. Default stdout.
+$rules_list = 0; # Whether to display list(s) of dependencies
@dir_stack = (); # Stack of pushed directories.
$cleanup_mode = 0; # No cleanup of nonessential LaTex-related files.
# $cleanup_mode = 0: no cleanup
@@ -922,6 +899,7 @@ $show_time = 0;
@timings = ();
$processing_time1 = processing_time();
+$use_make_for_missing_files = 0; # Whether to use make to try to make missing files.
# Do we make view file in temporary then move to final destination?
# (To avoid premature updating by viewer).
@@ -1093,9 +1071,10 @@ if (!$TEXINPUTS) { $TEXINPUTS = '.'; }
# Hash: rulename -> [array of rule data]
# Rule data:
# 0: [ cmd_type, ext_cmd, int_cmd, test_kind,
- # source, dest, base, out_of_date,
- # out_of_date_user, time_of_last_run,
- # last_result, last_message
+ # source, dest, base,
+ # out_of_date, out_of_date_user, time_of_last_run, changed
+ # last_result, last_message,
+ # default_extra_generated
# ]
# where
# cmd_type is 'primary', 'external', or 'cusdep'
@@ -1139,7 +1118,7 @@ if (!$TEXINPUTS) { $TEXINPUTS = '.'; }
# putative user file, i.e., one that is
# not a generated file (e.g., aux). This
# kind of out-of-dateness should provoke a
- # rerun where or not there was an error
+ # rerun whether or not there was an error
# during a run of (pdf)LaTeX. Normally,
# if there is an error, one should wait
# for the user to correct the error. But
@@ -1160,6 +1139,12 @@ if (!$TEXINPUTS) { $TEXINPUTS = '.'; }
# failed to create an output file
# 2 if last run failed
# last_message is error message for last run
+ # default_extra_generated is a reference to an array
+ # of specifications of extra generated files (beyond
+ # the main dest file. Standard place holders are used.
+ # Example ['%R.log'] for (pdf)latex, and ['%R.blg']
+ # for bibtex. (There's no need for '%R.aux', here,
+ # since such generated files are detected dynamically.)
# 1: {Hash sourcefile -> [source-file data] }
# Source-file data array:
# 0: time
@@ -1188,6 +1173,9 @@ if (!$TEXINPUTS) { $TEXINPUTS = '.'; }
# unchanged, later checks are superfluous, and
# can be avoided by changing the file's time
# in the source-file list.
+ # 2: {Hash generated_file -> 1 }
+ # This lists all generated files; the values
+ # are currently unused, only the keys
%fdb_current = (); # Fdb-hash for all files used.
@@ -1254,8 +1242,12 @@ while ($_ = $ARGV[0])
elsif (/^-cd-$/) { $do_cd = 0; }
elsif (/^-commands$/) { &print_commands; exit; }
elsif (/^-d$/) { $banner = 1; }
- elsif (/^-dependents$/) { $dependents_list = 1; }
- elsif (/^-nodependents$/ || /^-dependents-$/) { $dependents_list = 0; }
+ elsif (/^-dependents$/ || /^-deps$/ ) { $dependents_list = 1; }
+ elsif (/^-nodependents$/ || /^-dependents-$/ || /^-deps-$/) { $dependents_list = 0; }
+ elsif (/^-deps-out=(.*)$/) {
+ $deps_file = $1;
+ $dependents_list = 1;
+ }
elsif (/^-dvi$/) { $dvi_mode = 1; }
elsif (/^-dvi-$/) { $dvi_mode = 0; }
elsif (/^-f$/) { $force_mode = 1; }
@@ -1316,6 +1308,10 @@ while ($_ = $ARGV[0])
$printout_mode = 0;
}
elsif (/^-pvc-$/) { $preview_continuous_mode = 0; }
+ elsif (/^-recorder$/ ){ $recorder = 1; }
+ elsif (/^-recorder-$/ ){ $recorder = 0; }
+ elsif (/^-rules$/ ) { $rules_list = 1; }
+ elsif (/^-norules$/ || /^-rules-$/ ) { $rules_list = 0; }
elsif (/^-silent$/ || /^-quiet$/ ){ $silent = 1; }
elsif (/^-time$/) { $show_time = 1;}
elsif (/^-time-$/) { $show_time = 0;}
@@ -1323,6 +1319,8 @@ while ($_ = $ARGV[0])
print "\n$version_details. Version $version_num\n";
exit;
}
+ elsif (/^-use-make$/) { $use_make_for_missing_files = 1; }
+ elsif (/^-use-make-$/) { $use_make_for_missing_files = 0; }
elsif (/^-verbose$/) { $silent = 0; }
elsif (/^-view=default$/) { $view = "default";}
elsif (/^-view=dvi$/) { $view = "dvi";}
@@ -1435,7 +1433,7 @@ else {
# Check we haven't selected mutually exclusive modes.
-# Note that -c overides all other options, but doesn't cause
+# Note that -c overrides all other options, but doesn't cause
# an error if they are selected.
if (($printout_mode && ( $preview_mode || $preview_continuous_mode ))
|| ( $preview_mode && $preview_continuous_mode ))
@@ -1544,6 +1542,11 @@ if ( $silent ) {
add_option( \$dvips, " $dvips_silent_switch" );
}
+if ( $recorder ) {
+ add_option( \$latex, "-recorder" );
+ add_option( \$pdflatex, "-recorder" );
+}
+
if ( $jobname ne '' ) {
$jobstring = "--jobname=$jobname";
add_option( \$latex, " $jobstring" );
@@ -1635,6 +1638,18 @@ $quell_uptodate_msgs = $silent;
$failure_count = 0;
@failed_primaries = ();
+if ($deps_file eq '' ) {
+ # Standardize name used for stdout
+ $deps_file = '-';
+}
+
+if ( $dependents_list ) {
+ $deps_handle = new FileHandle "> $deps_file";
+ if (! defined $deps_handle ) {
+ die "Cannot open '$deps_file' for output of dependency information\n";
+ }
+}
+
FILE:
foreach $filename ( @file_list )
{
@@ -1677,45 +1692,70 @@ foreach $filename ( @file_list )
$fdb_file = "$root_filename.$fdb_ext";
- if ( $cleanup_mode > 0 ) {
- # Use parse_logB to get names of generated files.
- # It returns its results in the following variables:
- local %dependents = (); # Maps files to status
- local @bbl_files = ();
- local %idx_files = (); # Maps idx_file to (ind_file, base)
- local %generated_log = (); # Lists generated files
- local $primary_out = ''; # Actual output file (dvi or pdf)
- local %conversions = (); # (pdf)latex-performed conversions.
- # Maps output file created and read by (pdf)latex
- # to source file of conversion.
-
- print "$My_name: Examining log file for generated files...\n";
- &parse_logB;
-
- print "$My_name: Examining fdb file for rules ...\n";
- # Needed for cleanup of files generated by custom dependencies
- if ( -e $fdb_file ) {
- $rdb_errors = rdb_read( $fdb_file );
- $have_fdb = ($rdb_errors == 0);
- }
+ # Initialize file and rule databases.
+ %rule_list = ();
+ &rdb_make_rule_list;
+ &rdb_set_rules(\%rule_list);
+ if ( $cleanup_mode > 0 ) {
+ my %other_generated = ();
my @index_bibtex_generated = ();
my @aux_files = ();
- my %other_generated = %generated_log;
+ $have_fdb = 0;
+ if ( -e $fdb_file ) {
+ print "$My_name: Examining fdb file '$fdb_file' for rules ...\n";
+ $have_fdb = ( 0 == rdb_read( $fdb_file ) );
+ }
+ if ( $have_fdb ) {
+ rdb_for_all(
+ sub { # Find generated files at rule level
+ my ($base, $path, $ext) = fileparseA( $$Psource );
+ $base = $path.$base;
+ if ( $rule =~ /^makeindex/ ) {
+ push @index_bibtex_generated, $$Psource, $$Pdest, "$base.ilg";
+ }
+ elsif ( $rule =~ /^(bibtex|biber)/ ) {
+ push @index_bibtex_generated, $$Pdest, "$base.blg";
+ push @aux_files, $$Psource;
+ }
+ elsif ( exists $other_generated{$$Psource} ) {
+ $other_generated{$$Pdest};
+ }
+ },
+ sub { # Find generated files at source file level
+ if ( $file =~ /\.aux$/ ) { push @aux_files, $file; }
+ }
+ );
+ }
+ else {
+ # No fdb file, so do inferior job by parse_logB
+ print "$My_name: Examining log file '$root_filename.log' for generated files...\n";
+
+ # Variables set by parse_logB. Can I remove them
+ local %generated_log = ();
+ local %dependents = (); # Maps files to status. Not used here.
+ local @bbl_files = (); # Not used here.
+ local %idx_files = (); # Maps idx_file to (ind_file, base). Not used here.
+ local %conversions = (); # (pdf)latex-performed conversions. Not used here.
+ # Maps output file created and read by (pdf)latex
+ # to source file of conversion.
+ local $primary_out = ''; # Actual output file (dvi or pdf). Not used here.
+ &parse_logB;
+ %other_generated = %generated_log;
+ }
- rdb_read_generatedB( $fdb_file, \@index_bibtex_generated, \@aux_files,
- \%other_generated );
if ( ($go_mode == 2) && !$silent ) {
warn "$My_name: Removing all generated files\n" unless $silent;
}
if ($bibtex_use < 2) {
delete $generated_exts_all{'bbl'};
}
+ # Convert two arrays to hashes:
my %index_bibtex_generated = ();
my %aux_files = ();
foreach (@index_bibtex_generated) {
$index_bibtex_generated{$_} = 1
- unless ( /\.bbl$/ && ($bibtex_use < 2) );
+ unless ( /\.bbl$/ && ($bibtex_use < 2) );
delete( $other_generated{$_} );
}
foreach (@aux_files) {
@@ -1731,7 +1771,6 @@ foreach $filename ( @file_list )
." (only deleted if \$cleanup_includes_generated is set): ",
keys %other_generated );
}
- # Add to the generated files, some log file and some backup
# files used in previous versions of latexmk
&cleanup1( $fdb_ext, 'blg', 'ilg', 'log', 'aux.bak', 'idx.bak',
split(' ',$clean_ext),
@@ -1755,11 +1794,6 @@ foreach $filename ( @file_list )
if ($cleanup_fdb) { unlink $fdb_file; }
if ($cleanup_only) { next FILE; }
- # Initialize file and rule databases.
- %rule_list = ();
- &rdb_make_rule_list;
- &rdb_set_rules(\%rule_list);
-
#??? The following are not needed if use makeB.
# ?? They may be set too early?
@@ -1808,7 +1842,7 @@ foreach $filename ( @file_list )
sub{ if ( $$Ptest_kind == 1 ) { $$Ptest_kind = 3;} }
);
if ( -e "$root_filename.log" ) {
- rdb_for_some( [keys %possible_primaries], \&rdb_set_from_logB );
+ rdb_for_some( [keys %possible_primaries], \&rdb_set_latex_deps );
}
}
foreach $rule ( rdb_accessible( uniq1( keys %requested_filerules ) ) ){
@@ -1860,7 +1894,8 @@ foreach $filename ( @file_list )
rdb_for_some( [keys %one_time], \&rdb_run1 );
} # end FILE
continue {
- if ($dependents_list) { rdb_list(); }
+ if ($dependents_list) { deps_list($deps_handle); }
+ if ($rules_list) { rdb_list(); }
# Handle any errors
$error_message_count = rdb_show_rule_errors();
if ( ($error_message_count == 0) || ($failure > 0) ) {
@@ -1877,6 +1912,7 @@ continue {
}
&ifcd_popd;
}
+close($deps_handle) if ( $deps_handle );
if ($show_time) { show_timing();}
@@ -2006,8 +2042,8 @@ sub rdb_make_rule_list {
# This is because, especially for dvi file, the contents of the file may contain
# a pointer to a file to be included, not the contents of the file!
%rule_list = (
- 'latex' => [ 'primary', "$latex", '', "%T", "%B.dvi", "%R", 1 ],
- 'pdflatex' => [ 'primary', "$pdflatex", '', "%T", "%B.pdf", "%R", 1 ],
+ 'latex' => [ 'primary', "$latex", '', "%T", "%B.dvi", "%R", 1, ["%R.log"] ],
+ 'pdflatex' => [ 'primary', "$pdflatex", '', "%T", "%B.pdf", "%R", 1, ["%R.log"] ],
'dvipdf' => [ 'external', "$dvipdf", 'do_viewfile', $dvi_final, "%B.pdf", "%R", 2 ],
'dvips' => [ 'external', "$dvips", 'do_viewfile', $dvi_final, "%B.ps", "%R", 2 ],
'dvifilter'=> [ 'external', $dvi_filter, 'do_viewfile', "%B.dvi", "%B.dviF", "%R", 2 ],
@@ -2046,12 +2082,13 @@ sub rdb_set_rules {
foreach my $Prule_list (@_) {
foreach my $rule ( keys %$Prule_list) {
- my ( $cmd_type, $ext_cmd, $int_cmd, $source, $dest, $base, $test_kind ) = @{$$Prule_list{$rule}};
+ my ( $cmd_type, $ext_cmd, $int_cmd, $source, $dest, $base, $test_kind, $PA_extra_gen ) = @{$$Prule_list{$rule}};
+ if ( ! $PA_extra_gen ) { $PA_extra_gen = []; }
my $needs_making = 0;
# Substitute in the filename variables, since we will use
# those for determining filenames. But delay expanding $cmd
# until run time, in case of changes.
- foreach ($base, $source, $dest ) {
+ foreach ($base, $source, $dest, @$PA_extra_gen ) {
s/%R/$root_filename/;
}
foreach ($source, $dest ) {
@@ -2062,7 +2099,7 @@ sub rdb_set_rules {
# " S='$source', D='$dest', B='$base' $needs_making\n";
rdb_create_rule( $rule, $cmd_type, $ext_cmd, $int_cmd, $test_kind,
$source, $dest, $base,
- $needs_making, undef, 1 );
+ $needs_making, undef, 1, $PA_extra_gen );
# !! ?? Last line was
# $needs_making, undef, ($test_kind==1) );
}
@@ -2728,18 +2765,21 @@ sub print_help
" -C - clean up (remove) all nonessential files\n",
" including aux, dep, dvi, postscript and pdf files\n",
" and file of database of file information\n",
- " -CA - clean up (remove) absolutely ALL nonessential files.\n",
- " Now equivalent to -C option.\n",
+ " -CA - clean up (remove) all nonessential files.\n",
+ " Equivalent to -C option.\n",
" -CF - Remove file of database of file information before doing \n",
" other actions\n",
" -cd - Change to directory of source file when processing it\n",
" -cd- - Do NOT change to directory of source file when processing it\n",
- " -dependents - Show list of dependent files after processing\n",
- " -dependents- - Do not show list of dependent files after processing\n",
+ " -dependents or -deps - Show list of dependent files after processing\n",
+ " -dependents- or -deps- - Do not show list of dependent files\n",
+ " -deps-out=file - Set name of output file for dependency list,\n",
+ " and turn on showing of dependency list\n",
" -dF <filter> - Filter to apply to dvi file\n",
" -dvi - generate dvi\n",
" -dvi- - turn off required dvi\n",
- " -e <code> - Execute specified PERL code\n",
+ " -e <code> - Execute specified Perl code (as part of latexmk start-up\n",
+ " code)\n",
" -f - force continued processing past errors\n",
" -f- - turn off forced continuing processing past errors\n",
" -gg - Super go mode: clean out generated files (-CA), and then\n",
@@ -2780,11 +2820,18 @@ sub print_help
" (Side effect: turn off ordinary preview mode.)\n",
" -pvc- - turn off -pvc\n",
" -r <file> - Read custom RC file\n",
- " -silent - silence progress messages from called programs\n",
- " -time - show CPU time used\n",
- " -time- - don't show CPU time used\n",
- " -v - display program version\n",
- " -verbose - display usual progress messages from called programs\n",
+ " -recorder - Use -recorder option for (pdf)latex\n",
+ " (to give list of input and output files)\n",
+ " -recorder- - Do not use -recorder option for (pdf)latex\n",
+ " -rules - Show list of rules after processing\n",
+ " -rules- - Do not show list of rules after processing\n",
+ " -silent - silence progress messages from called programs\n",
+ " -time - show CPU time used\n",
+ " -time- - don't show CPU time used\n",
+ " -use-make - use the make program to try to make missing files\n",
+ " -use-make- - don't use the make program to try to make missing files\n",
+ " -v - display program version\n",
+ " -verbose - display usual progress messages from called programs\n",
" -version - display program version\n",
" -view=default - viewer is default (dvi, ps, pdf)\n",
" -view=dvi - viewer is for dvi\n",
@@ -2794,7 +2841,7 @@ sub print_help
" filename = the root filename of LaTeX document\n",
"\n",
"-p, -pv and -pvc are mutually exclusive\n",
- "-h, -c and -C overides all other options.\n",
+ "-h, -c and -C override all other options.\n",
"-pv and -pvc require one and only one filename specified\n",
"All options can be introduced by '-' or '--'. (E.g., --help or -help.)\n",
"Contents of RC file specified by -r overrides options specified\n",
@@ -2883,6 +2930,7 @@ sub check_biber_log {
}
elsif ( /> INFO - Found .* '([^']+)'\s*$/
|| /> INFO - Found '([^']+)'\s*$/
+ || /> INFO - Processing .* file '([^']+)' .*$/
) {
if ( defined $Pbiber_source ) {
push @$Pbiber_source, $1;
@@ -3584,6 +3632,27 @@ CANDIDATE_PAIR:
#************************************************************
+sub parse_fls {
+ my ($fls_name, $Pinputs, $Poutputs ) = @_;
+ %$Pinputs = %$Poutputs = ();
+ my $fls_file = new FileHandle;
+ if ( ! open ($fls_file, "<$fls_name") ) {
+ return 1;
+ }
+ foreach $_ ( <$fls_file> ) {
+ if (/^\s*INPUT\s+(.*)\s+$/) {
+ $$Pinputs{$1} = 1;
+ }
+ elsif (/^\s*OUTPUT\s+(.*)\s+$/) {
+ $$Poutputs{$1} = 1;
+ }
+ }
+ close( $fls_file );
+ return 0;
+} #END parse_fls
+
+#************************************************************
+
sub parse_aux {
#Usage: parse_aux( $aux_file, \@new_bib_files, \@new_aux_files, \@new_bst_files )
# Parse aux_file (recursively) for bib files, and bst files.
@@ -3694,10 +3763,10 @@ AUX_LINE:
#************************************************************
sub fdb_get {
- # Call: fdb_get(filename [, runtime])
+ # Call: fdb_get(filename [, run_time])
# Returns an array (time, size, md5) for the current state of the
# named file.
- # The optional argument runtime is the runtime of some command
+ # The optional argument run_time is the runtime of some command
# associated with the use of the file --- see below.
# For non-existent file, deletes its entry in fdb_current,
# and returns (0,-1,0)
@@ -3716,7 +3785,7 @@ sub fdb_get {
# at some runtime t, the file is rewritten later by the same or another
# program, with timestamp t, and when the initial file also has
# timestamp t.
- # A test is applied for this situation if the runtime argument is
+ # A test is applied for this situation if the run_time argument is
# supplied and is nonzero.
my ($file, $run_time) = @_;
@@ -3737,13 +3806,14 @@ sub fdb_get {
}
my $file_data = $fdb_current{$file};
my ( $time, $size, $md5 ) = @$file_data;
+
#warn "--------- Getting MD5: $file: (N,O,R) = $new_time, $time, $run_time\n";
#warn "--------- $file: (OT,OS,OM) = @$file_data\n";
if ( ($new_time != $time) || ($new_size != $size)
|| ( $run_time && ($run_time == $time ) )
) {
# Only force recalculation of md5 if time or size changed
- # Or if the time equals runtime, so that the file may
+ # Or if the time equals run_time, so that the file may
# have changed within the 1-second granularity of the time
# Else we assume file is really unchanged.
$recalculate_md5 = 1;
@@ -3797,7 +3867,9 @@ sub rdb_read {
$in_handle->open( $in_name, '<' )
or return ();
my $errors = 0;
- my $state = 0; # Outside a section
+ my $state = -1; # Values: -1: before start; 0: outside rule;
+ # 1: in source section; 2: in generated file section;
+ # 10: ignored rule
my $rule = '';
my $run_time = 0;
my $source = '';
@@ -3810,12 +3882,22 @@ LINE:
# Remove leading and trailing white space.
s/^\s*//;
s/\s*$//;
+ if ($state == -1) {
+ if ( ! /^# Fdb version ([\d]+)$/ ) {
+ warn "$My_name: File-database '$in_name' is not of correct format\n";
+ return 1;
+ }
+ if ( $1 > $fdb_ver) {
+ warn "$My_name: File-database '$in_name' is of too new version, $1 > $fdb_ver\n";
+ return 1;
+ }
+ $state = 0;
+ }
# Ignore blank lines and comments
if ( /^$/ || /^#/ || /^%/ ) { next LINE;}
if ( /^\[\"([^\"]+)\"\]/ ) {
# Start of section
$rule = $1;
-#?? print "--- Starting rule '$rule'\n";
my $tail = $'; #' Single quote in comment tricks the parser in
# emacs from misparsing an isolated single quote
$run_time = 0;
@@ -3860,6 +3942,7 @@ LINE:
$source, $dest, $base, 0, $run_time, 1 );
}
elsif ( $rule =~ /^(makeindex|bibtex|biber)\s*(.*)$/ ) {
+ my $PA_extra_gen = [];
my $rule_generic = $1;
if ( ! $source ) {
# If fdb_file was old-style (v. 1)
@@ -3880,6 +3963,8 @@ LINE:
$source = "$base.bcf";
}
}
+ if ($rule =~ /^makeindex/) { $PA_extra_gen = [ "$base.ilg" ]; }
+ if ($rule =~ /^(bibtex|biber)/) { $PA_extra_gen = [ "$base.blg" ]; }
warn "$My_name: File-database '$in_name': setting rule '$rule'\n"
if $diagnostics;
my $cmd_type = 'external';
@@ -3891,25 +3976,26 @@ LINE:
# If it existed on last run, it will be in later
# lines of the fdb file
rdb_create_rule( $rule, $cmd_type, $ext_cmd, '', 1,
- $source, $dest, $base, 0, $run_time, 1);
+ $source, $dest, $base, 0, $run_time, 1, $PA_extra_gen );
}
else {
warn "$My_name: In file-database '$in_name' rule '$rule'\n",
" is not in use in this session\n"
if $diagnostics;
$new_source = undef;
- $state = 3;
+ $state = 10;
next LINE;
}
$new_source = $new_sources{$rule} = {};
- $state = 1; #Reading a section
+ $state = 1; #Reading a section, source part
+ }
+ elsif ( ($state <=0) || ($state >= 3) ) {
+ next LINE;
}
- elsif ( /^\"([^\"]*)\"\s+(\S+)\s+(\S+)\s+(\S+)\s+\"([^\"]*)\"/ ) {
+ elsif ( /^\(source\)/ ) { $state = 1; next LINE; }
+ elsif ( /^\(generated\)/ ) { $state = 2; next LINE; }
+ elsif ( ($state == 1) && /^\"([^\"]*)\"\s+(\S+)\s+(\S+)\s+(\S+)\s+\"([^\"]*)\"/ ) {
# Source file line
- if ($state == 3) {
- # The rule is not being currently used.
- next LINE;
- }
my $file = $1;
my $time = $2;
my $size = $3;
@@ -3934,9 +4020,10 @@ LINE:
# Also we'll have a better chance of looping through files.
${$new_source}{$file} = [ $time, $size, $md5, $from_rule ];
}
- elsif ($state == 0) {
- # Outside a section. Nothing to do.
- }
+ elsif ( ($state == 2) && /^\"([^\"]*)\"/ ) {
+ my $file = $1;
+ rdb_one_rule( $rule, sub{ rdb_add_generated($file); } );
+ }
else {
warn "$My_name: In file-database '$in_name' ",
"line $. is of wrong format:\n '$_'\n";
@@ -3955,94 +4042,6 @@ LINE:
#************************************************************
-sub rdb_read_generatedB {
- # Call: rdb_read_generatedB( $in_name, \@generated1, \@aux_files.
- # \%other_generated )
- # From rule database in saved file, in format written by rdb_write,
- # finds the non-trivial generated files that are to be deleted by a cleanup.
- # On entry:
- # Keys of %other_generated: any detected generated files, from \openout
- # lines log file, usually.
- # At exit:
- # Array @generated1: files associated with makeindex and bibtex
- # Array @aux_files: aux files
- # Added to keys of %other_generated: any files that are destinations of rules
- # whose source is in %other_generated. (One stage only.)
- my ($in_name, $Pgenerated1, $Paux_files, $Pother_generated) = @_;
- @$Pgenerated1 = ();
- @$Paux_files = ();
-
- my $in_handle = new FileHandle;
- $in_handle->open( $in_name, '<' )
- or return ();
- my $rule = '';
- my $run_time = 0;
- my $source = '';
- my $dest = '';
- my $base = '';
- my $ext = '';
- my $path = '';
- my $state = 0; # Outside a section
- my @other_additions = ();
-LINE:
- while ( <$in_handle> ) {
- # Remove leading and trailing white space.
- s/^\s*//;
- s/\s*$//;
- # Ignore blank lines and comments
- if ( /^$/ || /^#/ || /^%/ ) { next LINE;}
- if ( /^\[\"([^\"]+)\"\]/ ) {
- # Start of section
- $rule = $1;
- my $tail = $'; #' Single quote in comment tricks the parser in
- # emacs from misparsing an isolated single quote
- $run_time = 0;
- $source = $dest = $base = '';
- if ( $tail =~ /^\s*(\S+)\s+\"([^\"]*)\"\s+\"([^\"]*)\"\s+\"([^\"]*)\"\s*$/ ) {
- $source = $2;
- $dest = $3;
- $base = $4;
- }
- else { next LINE; }
- if ( $rule =~ /^makeindex/ ) {
- push @$Pgenerated1, $source, $dest, "$base.ilg";
- }
- elsif ( $rule =~ /^bibtex/ ) {
- push @$Pgenerated1, $dest, "$base.blg";
- push @$Paux_files, $source;
- }
- elsif ( exists ${$Pother_generated}{$source} ) {
- push @other_additions, $dest;
- }
- $state = 1; #Reading a section
- }
- elsif ( /^\"([^\"]*)\"\s+(\S+)\s+(\S+)\s+(\S+)\s+\"([^\"]*)\"/ ) {
- # Source file line
- if ($state == 3) {
- # The rule is not being currently used.
- next LINE;
- }
- my $file = $1;
- ($base, $path, $ext) = fileparseA( $file );
- if ( $ext eq '.aux' ) { push @$Paux_files, $file; }
- }
- elsif ($state == 0) {
- # Outside a section. Nothing to do.
- }
- else {
- warn "$My_name: In file-database '$in_name' ",
- "line $. is of wrong format:\n '$_'\n";
- next LINE;
- }
- } # LINE
- undef $in_handle;
- foreach (@other_additions) {
- ${$Pother_generated}{$_} = 1;
- }
-} # END rdb_read_generatedB
-
-#************************************************************
-
sub rdb_write {
# Call: rdb_write( $out_name )
# Writes to the given file name the database of file and rule data
@@ -4091,6 +4090,10 @@ sub rdb_write {
rdb_do_files(
sub { print $out_handle " \"$file\" $$Ptime $$Psize $$Pmd5 \"$$Pfrom_rule\"\n"; }
);
+ print $out_handle " (generated)\n";
+ foreach (keys %$PHdest) {
+ print $out_handle " \"$_\"\n";
+ }
}
);
undef $out_handle;
@@ -4099,15 +4102,17 @@ sub rdb_write {
#************************************************************
-sub rdb_set_from_logB {
+sub rdb_set_latex_deps {
# Assume rule context.
- # This is intended to be applied only for a primary (LaTeX-like) rule
- # Starting from the log_file, set current details for the current rule.
+ # This is intended to be applied only for a primary (LaTeX-like) rule.
+ # Set its dependents etc, using information from log, aux, and fls files.
+ # Use fls file only if $recorder is set, and the fls file was generated
+ # on this run.
# Rules should only be primary
if ( $$Pcmd_type ne 'primary' ) {
warn "\n$My_name: ==========$My_name: Probable BUG======= \n ",
- " rdb_set_from_logB called to set files ",
+ " rdb_set_latex_deps called to set files ",
"for non-primary rule '$rule'\n\n";
return;
}
@@ -4122,6 +4127,8 @@ sub rdb_set_from_logB {
local @bbl_files = ();
local %idx_files = (); # Maps idx_file to (ind_file, base)
local %generated_log = (); # Lists generated files found in log file
+ local %generated_fls = (); # Lists generated files found in fls file
+ local %source_fls = (); # Lists source files found in fls file
local $primary_out = $$Pdest; # output file (dvi or pdf)
local %conversions = (); # (pdf)latex-performed conversions.
# Maps output file created and read by (pdf)latex
@@ -4130,6 +4137,16 @@ sub rdb_set_from_logB {
# $reference_changed, $bad_reference $bad_citation
&parse_logB;
+ my $fls_file = "$root_filename.fls";
+ if ($recorder && test_gen_file($fls_file) ) {
+ parse_fls( $fls_file, \%source_fls, \%generated_fls );
+ foreach (keys %source_fls) {
+ rdb_ensure_file( $rule, $_ );
+ }
+ foreach (keys %generated_fls) {
+ rdb_add_generated( $_ );
+ }
+ }
# ?? !! Should also deal with .run.xml file
# Handle result on output file:
@@ -4309,14 +4326,14 @@ NEW_SOURCE:
}
rdb_remove_files( $rule, @files_not_needed );
-} # END rdb_set_from_logB
+} # END rdb_set_latex_deps
#************************************************************
sub test_gen_file {
# Usage: test_gen_file( filename )
# Tests whether the file was generated during a run of (pdf)latex.
- # Used by rdb_set_from_logB.
+ # Used by rdb_set_latex_deps.
# Assumes context for primary rule, and that %generated_log is set.
# The generated_log test works with TeXLive's tex, because it puts
# \openout lines in log file.
@@ -4450,6 +4467,13 @@ sub rdb_set_dependentsA {
sub rdb_one_depA {
# Helper for finding dependencies. One case, $rule and $file given
# Assume file (and rule) context for DESTINATION file.
+
+ # Only look for dependency if $rule is primary rule (i.e., latex
+ # or pdflatex) or is a custom dependency:
+ if ( (! exists $possible_primaries{$rule}) && ($rule !~ /^cusdep/) ) {
+ return;
+ }
+#print "=============ONE_DEPA: '$rule' '$file'\n";
local $new_dest = $file;
my ($base_name, $path, $toext) = fileparseA( $new_dest );
$base_name = $path.$base_name;
@@ -4537,6 +4561,41 @@ DEP:
}
} # End of Rule found
} # End DEP
+ if ( (! -e $file) && $use_make_for_missing_files ) {
+ # Try to make the missing file
+ #Set character to surround filenames in commands:
+ my $q = $quote_filenames ? '"' : '';
+ if ($rule =~ /^cusdep/ ) { traceback(); }
+ if ( $toext ne '' ) {
+ print "$My_name: '$rule': source file '$file' doesn't exist. I'll try making it...\n";
+ &Run_msg( "$make $q$file$q" );
+ if ( -e $file ) {
+ return;
+ }
+ }
+ else {
+ print "$My_name: '$rule': source '$file' doesn't exist.\n",
+ " I'll try making it with allowed extensions \n";
+ foreach my $try_ext ( keys %$Pinput_extensions ) {
+ my $new_dest = "$file.$try_ext";
+ &Run_msg( "$make $q$new_dest$q" );
+ if ( -e $new_dest ) {
+ print "SUCCESS in making '$new_dest'\n";
+ # Put file in rule, without a from_rule, but
+ # set its state as non-existent, to correspond
+ # to file's state before the file was made
+ # This ensures a rerun of (pdf)latex is provoked.
+ rdb_ensure_file( $rule, $new_dest, undef, 1 );
+ push @new_sources, $new_dest;
+ push @deletions, [$rule, $file];
+ # Flag need for a new run of (pdf)latex despite
+ # the error due to a missing file.
+ $$Pout_of_date_user = 1;
+ return;
+ }
+ }
+ }
+ }
} #END rdb_one_depA
#************************************************************
@@ -4552,7 +4611,12 @@ sub rdb_list {
sub{ $count_rules++;
print "Rule '$rule' depends on:\n";
},
- sub{ print " '$file'\n"; }
+ sub{ print " '$file'\n"; },
+ sub{ print " and generates:\n";
+ foreach (keys %$PHdest) { print " '$_'\n"; }
+# print " default_extra_generated:\n";
+# foreach (@$PA_extra_generated) { print " '$_'\n"; }
+ },
);
if ($count_rules <= 0) {
print " ---No rules defined\n";
@@ -4561,6 +4625,45 @@ sub rdb_list {
#************************************************************
+sub deps_list {
+ # Call: deps_list(fh)
+ # List dependent files to file open on fh
+ my $fh = $_[0];
+ print $fh "#===Dependents for $filename:\n";
+ my @dest = ();
+ if ($pdf_mode) {push @dest, '.pdf';}
+ if ($dvi_mode) {push @dest, '.dvi';}
+ if ($postscript_mode) {push @dest, '.ps';}
+ my %source = ( $texfile_name => 1 );
+ my @generated = ();
+ my @accessible_all = rdb_accessible( keys %requested_filerules );
+ rdb_for_some(
+ \@accessible_all,
+ sub{
+# foreach (keys %$PHdest) { print "----- $_\n"; }
+ push @generated, keys %$PHdest;
+ },
+ sub{ $source{$file} = 1; }
+ );
+ foreach (keys %generated_exts_all) {
+ (my $name = /%R/ ? $_ : "%R.$_") =~ s/%R/$root_filename/;
+ push @generated, $name;
+ }
+ foreach (@generated) {
+ delete $source{$_};
+ }
+ foreach my $dest (@dest) {
+ print $fh "$root_filename$dest :";
+ foreach (sort keys %source) {
+ print $fh "\\\n $_";
+ }
+ print $fh "\n";
+ }
+ print $fh "#===End dependents for $filename:\n";
+} #END deps_list
+
+#************************************************************
+
sub rdb_show {
# Call: rdb_show()
# Displays contents of rule data base.
@@ -4959,7 +5062,7 @@ sub rdb_makeB1 {
}
}
- &rdb_flag_changes_here;
+ &rdb_flag_changes_here(0);
if (!$$Pout_of_date) {
#?? if ( ($$Pcmd_type eq 'primary') && (! $silent) ) {
@@ -4989,7 +5092,11 @@ sub rdb_makeB1 {
# Getting here represents some kind of weird error.
warn "$My_name: Maximum runs of $rule reached ",
"without getting stable files\n";
+ warn " Use the -f option to force complete processing.\n"
+ if (! $force_mode);
$too_many_runs = 1;
+ # Treat rule as completed, else in -pvc mode get infinite reruns:
+ $$Pout_of_date = 0;
$failure = 1;
$failure_msg = "'$rule' needed too many passes";
return;
@@ -5381,11 +5488,32 @@ sub rdb_primary_run {
$$Plast_message = $failure_msg = "(Pdf)LaTeX failed to generate a log file";
return -1;
}
+
+ if ($recorder) {
+ # Handle problem that some version of (pdf)latex give fls files
+ # of name latex.fls or pdflatex.fls instead of $root_filename.fls:
+ my $std_fls_file = "$root_filename.fls";
+ my $other_fls_file = "latex.fls";
+ if ( $rule =~ /^pdflatex/ ) {
+ $other_fls_file = "pdflatex.fls";
+ }
+ if ( test_gen_file($std_fls_file) ) {
+ # Good filename
+ }
+ elsif ( test_gen_file($other_fls_file) ) {
+ copy $other_fls_file, $std_fls_file;
+ }
+ else {
+ warn "$My_name: fls file doesn't appear to have been made\n";
+ }
+ }
+
+
####### NOT ANY MORE! Capture any changes in source file status before we
# check for errors in the latex run
# Find current set of source files:
- &rdb_set_from_logB;
+ &rdb_set_latex_deps;
# For each file of the kind made by epstopdf.sty during a run,
# if the file has changed during a run, then the new version of
@@ -5401,7 +5529,7 @@ sub rdb_primary_run {
# latex. So redo the makes for sources of the current rule:
my $submake_return = &rdb_submakeB;
&rdb_clear_change_record;
- &rdb_flag_changes_here;
+ &rdb_flag_changes_here(0);
if ($$Pout_of_date && !$silent) {
&rdb_diagnose_changes( "Rule '$rule': " );
}
@@ -5456,8 +5584,10 @@ sub rdb_clear_change_record {
sub rdb_flag_changes_here {
# Flag changes in current rule.
# Assumes rule context.
- # Optional argument: if true then fdb_get shouldn't do runtime test
- # for recalculation of md5
+ # Usage: rdb_flag_changes_here( ignore_run_time )
+ # Argument: if true then fdb_get shouldn't do runtime test
+ # for recalculation of md5
+
local $ignore_run_time = $_[0];
if ( ! defined $ignore_run_time ) { $ignore_run_time = 0; }
local $dest_mtime = 0;
@@ -5476,8 +5606,9 @@ sub rdb_file_change1 {
# Assumes rule and file context. Assumes $dest_mtime set.
# Flag whether $file in $rule has changed or disappeared.
# Set rule's make flag if there's a change.
+
my $run_time_argument = $ignore_run_time ? 0 : $$Prun_time;
- my ($new_time, $new_size, $new_md5) = fdb_get($file, $run_time_argument);
+ my ($new_time, $new_size, $new_md5) = fdb_get($file, $run_time_argument );
#?? print "FC1 '$rule':$file $$Pout_of_date TK=$$Ptest_kind\n";
#?? print " OLD $$Ptime, $$Psize, $$Pmd5\n",
#?? " New $new_time, $new_size, $new_md5\n";
@@ -5813,19 +5944,16 @@ sub rdb_one_rule {
#?? &R1;
if ( (! $rule) || ! rdb_rule_exists($rule) ) { return; }
- local ( $PArule_data, $PHsource ) = @{$rule_db{$rule}};
+ local ( $PArule_data, $PHsource, $PHdest ) = @{$rule_db{$rule}};
local ($Pcmd_type, $Pext_cmd, $PAint_cmd, $Ptest_kind,
$Psource, $Pdest, $Pbase,
$Pout_of_date, $Pout_of_date_user, $Prun_time, $Pchanged,
- $Plast_result, $Plast_message )
+ $Plast_result, $Plast_message, $PA_extra_generated )
= Parray( $PArule_data );
- # Correct array ref:
- $PAint_cmd = $$PArule_data[2];
&$rule_act1 if $rule_act1;
&rdb_do_files( $file_act ) if $file_act;
&$rule_act2 if $rule_act2;
-
#?? &R2;
} #END rdb_one_rule
@@ -5868,7 +5996,8 @@ sub rdb_remove_rule {
sub rdb_create_rule {
# rdb_create_rule( rule, command_type, ext_cmd, int_cmd, test_kind,
# source, dest, base,
- # needs_making, run_time, set_file_not_exists )
+ # needs_making, run_time, set_file_not_exists,
+ # ref_to_array_of_specs_of_extra_generated_files )
# int_cmd is either a string naming a perl subroutine or it is a
# reference to an array containing the subroutine name and its
# arguments.
@@ -5877,8 +6006,9 @@ sub rdb_create_rule {
# ==== Sets rule data ====
my ( $rule, $cmd_type, $int_cmd, $PAext_cmd, $test_kind,
$source, $dest, $base,
- $needs_making, $run_time, $set_file_not_exists ) = @_;
+ $needs_making, $run_time, $set_file_not_exists, $extra_gen ) = @_;
my $changed = 0;
+
# Set defaults, and normalize parameters:
foreach ( $cmd_type, $int_cmd, $PAext_cmd, $source, $dest, $base,
$set_file_not_exists ) {
@@ -5899,20 +6029,48 @@ sub rdb_create_rule {
# COPY the referenced array:
$PAext_cmd = [ @$PAext_cmd ];
}
-
+ my $PA_extra_gen = [];
+ if ($extra_gen) {
+ @$PA_extra_gen = @$extra_gen;
+ }
$rule_db{$rule} =
[ [$cmd_type, $int_cmd, $PAext_cmd, $test_kind,
- $source, $dest, $base, $needs_making, 0, $run_time,
- $changed, -1, '' ],
+ $source, $dest, $base,
+ $needs_making, 0, $run_time, $changed,
+ -1, '', $PA_extra_gen ],
+ {},
{}
];
- if ($source) {
+ if ($source) {
rdb_ensure_file( $rule, $source, undef, $set_file_not_exists );
}
+ rdb_one_rule( $rule, \&rdb_initialize_generated );
} #END rdb_create_rule
#************************************************************
+sub rdb_initialize_generated {
+# Assume rule context.
+# Initialize hash of generated files
+ %$PHdest = ();
+ if ($$Pdest) { rdb_add_generated($$Pdest); }
+ foreach (@$PA_extra_generated) {
+ rdb_add_generated($_);
+ }
+} #END rdb_initialize_generated
+
+#************************************************************
+
+sub rdb_add_generated {
+# Assume rule context.
+# Add arguments to hash of generated files
+ foreach (@_) {
+ $$PHdest{$_} = 1;
+ }
+} #END rdb_initialize_generated
+
+#************************************************************
+
sub rdb_ensure_file {
# rdb_ensure_file( rule, file[, fromrule[, set_not_exists]] )
# Ensures the source file item exists in the given rule.
@@ -6109,9 +6267,14 @@ sub show_array {
sub Parray {
# Call: Parray( \@A )
# Returns array of references to the elements of @A
+ # But if an element of @A is already a reference, the
+ # reference will be returned in the output array, not a
+ # reference to the reference.
my $PA = shift;
my @P = (undef) x (1+$#$PA);
- foreach my $i (0..$#$PA) { $P[$i] = \$$PA[$i]; }
+ foreach my $i (0..$#$PA) {
+ $P[$i] = (ref $$PA[$i]) ? ($$PA[$i]) : (\$$PA[$i]);
+ }
return @P;
}
@@ -6736,6 +6899,9 @@ sub Run {
# Third form (with 'NONE') does not run anything, but prints an error
# message. This is provided to allow program names defined in the
# configuration to flag themselves as unimplemented.
+# A given command line starting with "start NONE" is equivalent to "NONE".
+# If the word "start" is duplicated at the beginning, that is equivalent to
+# a single "start".
# Return value is a list (pid, exitcode):
# If process is spawned sucessfully, and I know the PID,
# return (pid, 0),
@@ -6750,33 +6916,31 @@ sub Run {
# or the return value of the system subroutine.
-# Split command line into one word per element, separating words by
-# one (OR MORE) spaces:
-# The purpose of this is to identify latexmk-defined pseudocommands
-# 'start' and 'NONE'.
-# After dealing with them, the command line is reassembled
my $cmd_line = $_[0];
if ( $cmd_line eq '' ) {
traceback( "$My_name: Bug OR configuration error\n".
- " In run of'$rule', attempt to run a null program" );
+ " In run of '$rule', attempt to run a null program" );
return (0, 1);
}
- if ( $cmd_line =~ /^start +/ ) {
- #warn "Before: '$cmd_line'\n";
- # Run detached. How to do this depends on the OS
+ # Deal with latexmk-defined pseudocommands 'start' and 'NONE'
+ # at front of command line:
+ my $detach = 0;
+ while ( $cmd_line =~ s/^start +// ) {
# But first remove extra starts (which may have been inserted
# to force a command to be run detached, when the command
# already contained a "start").
- while ( $cmd_line =~ s/^start +// ) {}
- #warn "After: '$cmd_line'\n";
- return &Run_Detached( $cmd_line );
+ $detach = 1;
}
- elsif ( $cmd_line =~ /^NONE/ ) {
+ if ( $cmd_line =~ /^NONE/ ) {
warn "$My_name: ",
"Program not implemented for this version. Command line:\n";
warn " '$cmd_line'\n";
return (0, 1);
}
+ elsif ($detach) {
+ # Run detached. How to do this depends on the OS
+ return &Run_Detached( $cmd_line );
+ }
else {
# The command is given to system as a single argument, to force shell
# metacharacters to be interpreted:
diff --git a/Master/texmf/doc/man/man1/latexmk.1 b/Master/texmf/doc/man/man1/latexmk.1
index f41863fcfcc..a36817826f4 100644
--- a/Master/texmf/doc/man/man1/latexmk.1
+++ b/Master/texmf/doc/man/man1/latexmk.1
@@ -1,4 +1,4 @@
-.TH LATEXMK 1L "3 February 2011" ""
+.TH LATEXMK 1L "21 March 2011" ""
.SH NAME
latexmk \- generate LaTeX document
.SH SYNOPSIS
@@ -23,7 +23,11 @@ one of the source files is modified, and the previewer automatically
updates the on-screen view of the compiled document.
.PP
\fILatexmk\fR determines which are the source files by examining the
-log file. When \fIlatexmk\fR is run, it examines properties of the
+log file. (Optionally, it also examines the list of input and output
+files generated by the \fI-recorder\fR option of modern versions of
+\fIlatex\fR and \fIpdflatex\fR. See the documentation for the
+\fI-recorder\fR option of \fIlatexmk\fR below.)
+When \fIlatexmk\fR is run, it examines properties of the
source files, and if any have been changed since the last document
generation, \fIlatexmk\fR will run the various LaTeX processing
programs as necessary. In particular, it will repeat the run of LaTeX
@@ -202,8 +206,8 @@ files are considered as including those generated by custom
dependencies and are also deleted. Otherwise these files are not deleted.
.TP
.B -CA
-Clean up (remove) absolutely all regeneratable files. It is now
-equivalent to the \fB-C\fR option. See that option for details.
+(Obsolete). Now equivalent to the \fB-C\fR option. See that option
+for details.
.TP
.B -CF
Remove the file containing the database of source file information,
@@ -221,6 +225,43 @@ specifying:
Note that if the \fB-d\fR option is specified, the \fB-ps\fR option is
assumed.
.TP
+.B -deps
+Show a list of dependent files after processing. This is in the form
+of a dependency list of the form used by the \fImake\fR program, and
+it is therefore suitable for use in a Makefile. It gives an overall
+view of the files without listing intermediate files, as well as
+\fIlatexmk\fR can determine them.
+
+By default the list of dependent files is sent to stdout (i.e.,
+normally to the screen unless you've redirected latexmk's output).
+But you can set the filename where the list is sent by the
+\fI-deps-out=\fR option.
+
+See the section "USING \fIlatexmk\fR WITH \fImake\fR" for
+an example of how to use a dependency list with \fImake\fR.
+
+Users familiar with GNU \fIautomake\fR and \fIgcc\fR will find that
+the \fI-deps\fR option is very similar in its purpose and results to
+the \fI-M\fR option to \fIgcc\fR.
+.TP
+.B -dependents
+Equivalent to \fI-deps\fR.
+.TP
+.B -deps-
+Do not show a list of dependent files after processing. (This is the
+default.)
+.TP
+.B -dependents-
+Equivalent to \fI-deps-\fR.
+.TP
+.B -deps-out=FILENAME
+Set the filename to which the list of dependent files is written. If
+the FILENAME argument is omitted or set to '-', then the output is
+sent to stdout.
+
+Use of this option also turns on the output of the list of dependent
+files after processing.
+.TP
.B -dF
Dvi file filtering. The argument to this option is a filter which will
generate a filtered dvi file with the extension ".dviF". All extra
@@ -310,7 +351,7 @@ Turn off \fB-g\fR.
.TP
.B -gg
"Super go mode" or "clean make": clean out generated files as if
-\fB-CA\fR had been given, and then do a regular make.
+\fB-C\fR had been given, and then do a regular make.
.TP
.B -h, -help
Print help information.
@@ -496,6 +537,27 @@ error results in \fIlatexmk\fR stopping. Multiple instances of the
\fB-r\fR and \fB-e\fR options can be used, and they are executed in
the order they appear on the command line.
.TP
+.B -recorder
+Use the -recorder option with \fIlatex\fR and \fIpdflatex\fR. In
+(most) modern versions of these programs, this results in a file of
+extension \fI.fls\fR containing a list of the files that these
+programs have read and written. \fILatexmk\fR will then use this file
+to improve its detection of source files and generated files after a
+run of \fIlatex\fR or \fIpdflatex\fR.
+
+For further information, see the documentation for the \fI$recorder\fR
+configuration variable.
+.TP
+.B -recorder-
+Do not use the -recorder option with \fIlatex\fR and \fIpdflatex\fR.
+.TP
+.B -rules
+Show a list of \fIlatemk\fR's rules and dependencies after processing.
+.TP
+.B -rules-
+Do not show a list of \fIlatexmk\fR's rules and dependencies after
+processing. (This is the default.)
+.TP
.B -silent
Run commands silently, i.e., with options that reduce the amount of
diagnostics generated. For example, with the default settings, the
@@ -511,6 +573,27 @@ variables, the relevant ones being \fI$bibtex_silent_switch\fR,
\fI$dvips_silent_switch\fR, \fI$latex_silent_switch\fR, and
\fI$pdflatex_silent_switch\fR.
.TP
+.B -use-make
+When after a run of \fIlatex\fR or \fIpdflatex\fR, there are warnings
+about missing files (e.g., as requested by the LaTeX \\input, \\include,
+and \\includgraphics), \fIlatexmk\fR tries to make them by a custom
+dependency. If no relevant custom dependency with an appropriate
+source file is found, and if the -use-make option is set, then
+\fIlatexmk\fR will try as a resort using the make program to try to
+make the missing files.
+
+Note that the filename may be specified without an extension, e.g.,
+by \\includegraphics{drawing} in a LaTeX file. In that case,
+\fIlatexmk\fR will try making drawing.ext with ext set in turn to the
+possible extensions that are relevant for \fIlatex\fR (or as
+appropriate \fIpdflatex\fR).
+
+See also the documentation for the \fI$use_make_for_missing_files\fR
+configuration variable.
+.TP
+.B -use-make-
+Do not use the make program to try to make missing files. (Default.)
+.TP
.B -v, -version
Print version number of \fIlatexmk\fR.
.TP
@@ -980,6 +1063,9 @@ is ".tex". Wild cards are allowed. The parentheses are because
\fI@default_files\fR is an array variable, i.e., a sequence of
filename specifications is possible.
.TP
+.B $dependents_list [0]
+Whether to display a list(s) of dependencies at the end of a run.
+.TP
.B $dvi_filter [empty]
The dvi file filter to be run on the newly produced dvi file before
other processing. Equivalent to specifying the \fB-dF\fR option.
@@ -1260,6 +1346,10 @@ is necessary because one part of the command name ("Program Files")
contains a space which would otherwise be misinterpreted.
.TP
+.B $make ["make"]
+The make processing program.
+
+.TP
.B $makeindex ["makeindex %O -o %D %S"]
The index processing program.
.TP
@@ -1508,6 +1598,27 @@ correctly deal with TeX files whose names contain spaces. Latexmk's
quoting only ensures that such filenames are correctly treated by the
operating system in passing arguments to programs.)
.TP
+.B $recorder [0]
+Whether to use the \fI-recorder\fR option to \fIlatex\fR and
+\fIpdflatex\fR. Use of this option results in a file of extension
+\fI.fls\fR containing a list of the files that these programs have
+read and written. \fILatexmk\fR will then use this file to improve
+its detection of source files and generated files after a run of
+\fIlatex\fR or \fIpdflatex\fR.
+
+It is generally recommended to use this option (or to configure the
+\fI$recorder\fR variable to be on.) But it only works if
+\fI(pdf)latex\fR supports the -recorder option, which is true for most
+current implementations
+
+\fINote about the name of the .fls file:\fR Most implementations of
+\fI(pdf)latex\fR produce an .fls file with the same basename as the
+main document's LaTeX, e.g., for Document.tex, the .fls file is
+Document.fls. However, some implementations instead produce files
+named for the program, i.e., latex.fls or pdflatex.fls. In this
+second case, \fIlatexmk\fR copies the latex.fls or pdflatex.fls to a
+file with the basename of the main LaTeX document, e.g., Document.fls.
+.TP
.B $sleep_time [2]
The time to sleep (in seconds) between checking for source file
changes when running with the \fB-pvc\fR option. This is subject to a
@@ -1536,6 +1647,20 @@ directory. Under other operating systems (expected to be UNIX/Linux,
including OS-X), the default is the value of the system environment
variable TMPDIR if it exists, otherwise "/tmp".
.TP
+.B $use_make_for_missing_files [0]
+Whether to use \fImake\fR to try and make files that are missing after
+a run of \fIlatex\fR or \fIpdflatex\fR, and for which a custom
+dependency has not been found. This is generally useful only when
+\fIlatexmk\fR is used as part of a bigger project which is built by
+using the \fImake\fR program.
+
+Note that once a missing file has been made, no further calls to
+\fImake\fR will be made on a subsequent run of \fIlatexmk\fR to update
+the file. Handling this problem is the job of a suitably defined
+Makefile. See the section "USING \fIlatexmk\fR WITH \fImake\fR" for
+how to do this. The intent of calling \fImake\fR from \fIlatexmk\fR
+is merely to detect dependencies.
+.TP
.B $view ["default"]
Which kind of file is to be previewed if a previewer is used. The
possible values are "default", "dvi", "ps", "pdf". The value
@@ -1737,6 +1862,140 @@ the add_cus_dep subroutine, except that it doesn't delete any previous
custom-dependency for the same conversion. So the new method is
preferable.
+
+
+.SH USING \fIlatexmk\fR WITH \fImake\fR
+
+This section is targeted only at advanced users who use the \fImake\fR
+program for complex projects, as for software development, with the
+dependencies specified by a Makefile.
+
+Now the basic task of \fIlatexmk\fR is to run the appropriate programs
+to make a viewable version of a LaTeX document. However, the usual
+\fImake\fR program is not suited to this purpose for at least two
+reasons. First is that the use of LaTeX involves circular
+dependencies (e.g., via .aux files), and these cannot be handled by
+the standard \fImake\fR program. Second is that in a large document
+the set of source files can change quite frequently, particularly with
+included graphics files; in this situation keeping a Makefile manually
+updated is inappropriate and error-prone, especially when the
+depedencies can be determined automatically. \fILatexmk\fR solves
+both of these problems robustly.
+
+Thus for many standard LaTeX documents \fIlatexmk\fR can be used by
+itself without the \fImake\fR program. In a complex project it simply
+needs to be suitably configured. A standard configuration would be to
+define custom dependencies to make graphics files from their source
+files (e.g., as created by the \fIxfig\fR program). Custom
+dependencies are \fIlatexmk\fR's equivalent of pattern rules in
+Makefiles.
+
+Nevertheless there are projects for which a Makefile is appropriate,
+and it is useful to know how to use \fIlatexmk\fR from a Makefile. A
+typical example would be to generate documentation for a software
+project. Potentially the interaction with the rest of the rules in
+the Makefile could be quite complicated, for example if some of the
+source files for a LaTeX document are generated by the project's
+software.
+
+In this section, I give a couple of examples of how \fIlatexmk\fR can
+be usefully invoked from a Makefile. The examples use specific
+features of current versions of GNU \fImake\fR, which is the default
+on both linux and OS-X systems. They may need modifications for other
+versions of \fImake\fR.
+
+The simplest method is simply to delegate all the relevant tasks to
+\fIlatexmk\fR, as is suitable for a straightforward LaTeX document.
+For this a suitable Makefile is like
+
+ .PHONY : FORCE_MAKE
+ all : try.pdf
+ %.pdf : %.tex FORCE_MAKE
+ latexmk -pdf -dvi- -ps- $<
+
+(Note: the last line must be introduced by a tab for the Makefile to
+function correctly!) Naturally, if making try.pdf from its associated
+LaTeX file try.tex were the only task to be performed, a direct use of
+\fIlatexmk\fR without a Makefile would normally be better. The
+benefit of using a Makefile for a LaTeX document would be in a larger
+project, where lines such as the above would be only be a small part
+of a larger Makefile.
+
+The above example has a pattern rule for making a .pdf file from
+a .tex file, and it is defined to use latexmk in the obvious way.
+There is a conventional default target named "all", with a
+prerequisite of try.pdf. So when \fImake\fR is invoked, by default it
+makes try.pdf. The only complication is that there may be many source
+files beyond try.tex, but these aren't specified in the Makefile, so
+changes in them will not by themselves cause \fIlatexmk\fR to be
+invoked. Instead, the pattern rule is equipped with a "phony"
+prerequisite FORCE_MAKE; this has the effect of causing the rule to be
+always out-of-date, so that \fIlatexmk\fR is always run. It is
+\fIlatexmk\fR that decides whether any action is needed, e.g., a rerun
+of \fIpdflatex\fR. Effectively the Makefile delegates all decisions
+to \fIlatexmk\fR, while \fImake\fR has no knowledge of the list of
+source files except for primary LaTeX file for the document. If
+there are, for example, graphics files to be made, these must be
+made by custom dependencies configured in \fIlatexmk\fR.
+
+But something better is needed in more complicated situations, for
+example, when the making of graphics files needs to be specified by
+rules in the Makefile. To do this, one can use a Makefile like the
+following:
+
+ TARGETS = document1.pdf document2.pdf
+ DEPS_DIR = .deps
+ LATEXMK = latexmk -recorder -use-make -deps \\
+ -e 'warn qq(In Makefile, turn off custom dependencies\n);' \\
+ -e '@cus_dep_list = ();' \\
+ -e 'show_cus_dep();'
+ all : $(TARGETS)
+ $(foreach file,$(TARGETS),$(eval -include $(DEPS_DIR)/$(file)P))
+ $(DEPS_DIR) :
+ mkdir $@
+ %.pdf : %.tex
+ if [ ! -e $(DEPS_DIR) ]; then mkdir $(DEPS_DIR); fi
+ $(LATEXMK) -pdf -dvi- -ps- -deps-out=$(DEPS_DIR)/$@P $<
+ %.pdf : %.fig
+ fig2dev -Lpdf $< $@
+
+(Again, the lines containing the commands for the rules should be
+started with tabs.) This example was inspired by how GNU
+\fIautomake\fR handles automatic dependency tracking of C source
+files.
+
+After each run of latexmk, dependency information is put in a file
+in the .deps subdirectory. The Makefile causes these dependency files
+to be read by \fImake\fR, which now has the full dependency
+information for each target .pdf file. To make things less trivial it
+is specificed that two files document1.pdf and document2.pdf are the
+targets. The dependency files are .deps/document1.pdfP
+and .deps/document2.pdfP.
+
+There is now no need for the phony prerequisite for the rule to
+make .pdf files from .tex files. But I have added a rule to
+make .pdf files from .fig files produced by the \fIxfig\fR program;
+these are commonly used for graphics insertions in LaTeX documents.
+\fILatexmk\fR is arranged to output a dependency file after each run.
+It is given the \fI-recorder\fR option, which improves its detection
+of files generated during a run of \fIpdflatex\fR; such files should
+not be in the dependency list. The \fI-e\fR options are used to turn
+off all custom dependencies, and to document this. Instead the
+\fI-use-make\fR is used to delegate the making of missing files to
+\fImake\fR itself.
+
+Suppose in the LaTeX file there is a command \\includegraphics{graph},
+and an \fIxfig\fR file "graph.fig" exists. On a first run,
+\fIpdflatex\fR reports a missing file, named "graph". \fILatexmk\fR
+succeeds in making "graph.pdf" by calling "make graph.pdf", and after
+completion of its work, it lists "fig.pdf" among the dependents of the
+file \fIlatexmk\fR is making. Then let "fig.fig" be updated, and then
+let \fImake\fR be run. \fIMake\fR first remakes "fig.pdf", and only
+then reruns \fIlatexmk\fR.
+
+Thus we now have a method by which all the subsidiary processing is
+delegated to \fImake\fR.
+
.SH SEE ALSO
latex(1), bibtex(1).
.SH BUGS
@@ -1768,7 +2027,7 @@ e-mail addresses are not written in their standard form to avoid being
harvested by worms and viruses.)
.SH AUTHOR
Current version, by John Collins (username collins at node phys.psu.edu).
-(Version 4.22e).
+(Version 4.23).
Released version can be obtained from CTAN:
<http://www.tug.org/tex-archive/support/latexmk/>, and from the
diff --git a/Master/texmf/doc/man/man1/latexmk.man1.pdf b/Master/texmf/doc/man/man1/latexmk.man1.pdf
index 6a024ce3886..d14a4071a41 100644
--- a/Master/texmf/doc/man/man1/latexmk.man1.pdf
+++ b/Master/texmf/doc/man/man1/latexmk.man1.pdf
Binary files differ