


LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



NAME
     latexmk - generate LaTeX document

SYNOPSIS
     latexmk [options] [file ...]

DESCRIPTION
     Latexmk  completely  automates  the  process of compiling a LaTeX document.
     Essentially, it is like a specialized relative of the general make utility,
     but one which determines dependencies automatically and has some other very
     useful features.  In its basic mode of operation latexmk is given the  name
     of  the  primary  source file for a document, and it issues the appropriate
     sequence of commands to generate a .dvi, .ps, .pdf and/or hardcopy  version
     of the document.

     By default latexmk will run the commands necessary to generate a .dvi file,
     which  copies  the  behavior of earlier versions when only latex was avail-
     able.

     Latexmk can also be set to run continuously with a suitable previewer.   In
     that case the latex program (or one of its relatives), etc, are rerun when-
     ever  one  of the source files is modified, and the previewer automatically
     updates the on-screen view of the compiled document.

     Latexmk determines which are the source files by examining  the  log  file.
     (Optionally,  it also examines the list of input and output files generated
     by the -recorder option of modern versions of latex (and pdflatex, xelatex,
     lualatex).  See the documentation for the -recorder option of  latexmk  be-
     low.)  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 a related program)) often enough to re-
     solve 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  makein-
     dex.   In  addition,  latexmk can be configured to generate other necessary
     files.  For example, from an updated figure file it can automatically  gen-
     erate  a  file  in  encapsulated  postscript or another suitable format for
     reading by LaTeX.

     Latexmk has two different previewing options.  With 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 op-
     tions.

     The second previewing option is the powerful -pvc option  (mnemonic:  "pre-
     view  continuously").   In  this case, latexmk runs continuously, regularly
     monitoring all the source files to see if any have changed.  Every  time  a
     change  is  detected, latexmk runs all the programs necessary to generate a
     new version of the document.  A good previewer will then automatically  up-
     date  its  display.   Thus  the  user  can simply edit a file and, when the



                                  9 March 2026                                 1






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     changes are written to disk, latexmk completely automates the cycle of  up-
     dating  the  .dvi  (and/or  the .ps and .pdf) file, and refreshing the pre-
     viewer's display.  It's not quite WYSIWYG, but usefully close.

     For other previewers, the user may have to manually make the previewer  up-
     date  its  display,  which  can  be  (e.g.,  with 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, call an ex-
     ternal program to do other postprocessing on generated dvi  and  postscript
     files.   (See  the  options  -dF  and  -pF,  and  the documentation for the
     $dvi_filter and $ps_filter configuration  variables.)   These  capabilities
     are  leftover  from  older versions of latexmk, but are currently non-func-
     tional.  More flexibility can be obtained in current  versions,  since  the
     command  strings  for  running *latex can now be configured to run multiple
     commands.  This also extends the possibility  of  postprocessing  generated
     files.

     Latexmk  is highly configurable, both from the command line and in configu-
     ration 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 configuration on MS-Windows,
     cygwin, Linux, macOS, and other UNIX systems.  See the section  "Configura-
     tion/Initialization  (rc)  Files",  and then the later sections "How to Set
     Variables in Initialization Files",  "Format  of  Command  Specifications",
     "List  of  Configuration Variables Usable in Initialization Files", "Custom
     Dependencies", and "Advanced Configuration"

     A very annoying complication handled very reliably by latexmk, is that  La-
     TeX  is  a  multiple  pass system.  On each run, LaTeX reads in information
     generated on a previous run, for things like cross referencing  and  index-
     ing.   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.  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 file (with extension .fdb_latexmk, by default) that con-
     tains the source file information.


LATEXMK OPTIONS AND ARGUMENTS ON COMMAND LINE
     In general the command line to invoke latexmk has the form

          latexmk [options] [file]

     All  options  can  be  introduced by single or double "-" characters, e.g.,
     "latexmk -help" or "latexmk --help".

     Note 1: In the documentation, '*latex' means any of the supported  engines,



                                  9 March 2026                                 2






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     i.e.,  currently latex, lualatex, pdflatex, xelatex.  Mention of a specific
     one of these normally refers that specific engines.   Earlier  versions  of
     this  documentation  weren't so consistent.  Which of these is used to com-
     pile a document, depends on the configuration and the  command  line  argu-
     ments.

     Note  2:  In  addition to the options in the list below, latexmk recognizes
     almost all the options recognized by the *latex programs in  their  current
     TeXLive and MiKTeX implementations.  Some of the options for these programs
     trigger special action or behavior by latexmk, in which case they have spe-
     cific  explanations  in  this document; in this case they may or may not be
     passed to *latex as well.

     Run latexmk with the -showextraoptions to get a list of these other options
     that latexmk accepts but that are simply passed through to *latex.  For de-
     tails, see the explanation of the -showextraoptions option.


     Definitions of options and arguments


     file   One or more files can be specified.  If no files are specified,  la-
            texmk  will, by default, run on all files in the current working di-
            rectory with a ".tex" extension.  This behavior can be changed:  see
            the  description  concerning the @default_files variable in the sec-
            tion "List  of  configuration  variables  usable  in  initialization
            files".

            If  a file is specified without an extension, then the ".tex" exten-
            sion is automatically added, just as LaTeX does.  Thus, if you spec-
            ify:

                 latexmk foo

            then latexmk will operate on the file "foo.tex".

            There are certain restrictions on what characters can be in a  file-
            name;  certain  characters  are either prohibited or problematic for
            the latex etc programs.  These characters are: "$", "%",  "\",  "~",
            the  double  quote  character, and the control characters null, tab,
            form feed, carriage return, line feed, and delete.  In addition  "&"
            is prohibited when it is the first character of a filename.

            Latexmk gives a fatal error when it detects any of the above charac-
            ters  in the TeX filename(s) specified on the command line.  However
            before testing for  illegal  characters,  latexmk  removes  matching
            pairs  of  double quotes from a filename.  This matches the behavior
            of latex etc, and deals with problems that occasionally result  from
            filenames that have been incorrectly quoted on the command line.  In
            addition,  under  Microsoft Windows, the forward slash character "\"
            is a directory separator, so latexmk replaces it by a forward  slash
            "/",  which  is  also a legal directory separator in Windows, and is



                                  9 March 2026                                 3






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            accepted by latex etc.


     -auxdir=FOO or -aux-directory=FOO
            Sets the directory for auxiliary output files of *latex (.aux,  .log
            etc).   These are all the generated files, with the exception of fi-
            nal output files (.dvi, .ps, .pdf, .synctex.gz, .synctex).  See  the
            -outdir/-output-directory option for directories for the main output
            files, and the -out2dir option for the final output files.

            If  the  directory  specified  for the -aux/-aux-directory option is
            blank, then the default is used, which is to be the same as the out-
            put directory.

            If you also use the -cd option, and the specified  auxiliary  output
            directory  is a relative path, then the path is interpreted relative
            to the document directory.

            See the section AUXILIARY AND OUTPUT DIRECTORIES for more details.


     -bibtex
            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
            variable to 2 in a configuration file.


     -bibtex-
            Never run bibtex or biber.  Also, always treat .bbl  files  as  pre-
            cious, i.e., do not delete them in a cleanup operation.

            A common use for this option is when a document comes from an exter-
            nal  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 bib-
            tex or biber, which would result in overwriting of the bbl files.

            This property can also be  configured  by  setting  the  $bibtex_use
            variable to 0 in a configuration file.


     -bibtex-cond
            When the source file uses a bbl file for the bibliography and bibtex
            is used to generate the bibliography, run bibtex as needed to regen-
            erate  the  bbl  files only if the relevant bib file(s) exist.  Thus
            when the bib file(s) are not available, bibtex is not  run,  thereby
            avoiding overwriting of the bbl file.  Also, always treat .bbl files
            as precious, i.e., do not delete them in a cleanup operation.

            This  is  the default setting.  It can also be configured by setting



                                  9 March 2026                                 4






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            the $bibtex_use variable to 1 in a configuration file.

            The reason for using  this  setting  is  first  to  allow  automatic
            switching between the use and non-use of bibtex depending on the ex-
            istence or not of a bib file.  In addition, when submitting articles
            to  a  scientific journal, it is common to submit only .tex and .bbl
            files (plus graphics files), but not a .bib file.  Hence it is often
            useful to treat .bbl files as true source files, that should be pre-
            served under a clean up operation.

            This property can also be  configured  by  setting  the  $bibtex_use
            variable to 1 in a configuration file.

            Note that when biber is used, and a bib file doesn't exist, this op-
            tion  does  not prevent biber from being run, with the bbl file then
            being incorrect.  See the documentation on $bibtex_use for more  de-
            tails.  However, a bbl file is treated as precious in a clean up op-
            eration.


     -bibtex-cond1
            The  same as -bibtex-cond except that .bbl files are only treated as
            precious if one or more bibfiles fails to exist.

            Thus if all the bib files exist, bibtex  is  run  to  generate  .bbl
            files  as needed, and then it is appropriate to delete the bbl files
            in a cleanup operation since they can be re-generated.

            This property can also be  configured  by  setting  the  $bibtex_use
            variable to 1.5 in a configuration file.

            Note that when biber is used, and a bib file doesn't exist, this op-
            tion  does  not prevent biber from being run, with the bbl file then
            being incorrect.  See the documentation on $bibtex_use for more  de-
            tails.  However, a bbl file is treated as precious in a clean up op-
            eration.


     -bibtexfudge or -bibfudge
            Turn on the change-directory fudge for bibtex.  See documentation of
            $bibtex_fudge for details.


     -bibtexfudge- or -bibfudge-
            Turn  off  the change-directory fudge for bibtex.  See documentation
            of $bibtex_fudge for details.


     -bm <message>
            A banner message to print diagonally across each page when  convert-
            ing  the dvi file to postscript.  The message must be a single argu-
            ment on the command line so be careful with quoting spaces and such.



                                  9 March 2026                                 5






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            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  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 message.  The de-
            fault is 220.0 which is just right for 5 character messages.


     -commands
            List the commands used by latexmk for  processing  files,  and  then
            exit.


     -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 in  the
            @generated_exts  configuration  variable.  In addition, files speci-
            fied by the $clean_ext and @generated_exts  configuration  variables
            are removed.

            This  cleanup  is  instead of a regular make.  See the -gg option if
            you want to do a cleanup followed by a make.

            Treatment of .bbl files:  If $bibtex_use is set to 0 or 1, bbl files
            are always treated as non-regeneratable.  If $bibtex_use is  set  to
            1.5,  bbl  files  are counted as non-regeneratable conditionally: If
            the bib file exists, then  bbl  files  are  regeneratable,  and  are
            deleted  in  a  clean  up.  But if $bibtex_use is 1.5 and a bib file
            doesn't exist, then the bbl files are treated  as  non-regeneratable
            and hence are not deleted.

            In  contrast,  if  $bibtex_use  is  set  to  2, bbl files are always
            treated as regeneratable, and are deleted in a cleanup.

            Treatment of files generated by custom dependencies: If $cleanup_in-
            cludes_cusdep_generated is nonzero, regeneratable files are  consid-
            ered  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



                                  9 March 2026                                 6






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            addition of dvi, postscript and pdf files, and  those  specified  in
            the $clean_full_ext configuration variable.

            This  cleanup  is  instead of a regular make.  See the -gg option if
            you want to do a cleanup followed by a make.

            See the -c option for the specification of whether or not .bbl files
            are treated as non-regeneratable or regeneratable.

            If  $cleanup_includes_cusdep_generated  is  nonzero,   regeneratable
            files  are  considered as including those generated by custom depen-
            dencies and  are  also  deleted.   Otherwise  these  files  are  not
            deleted.


     -CA    (Obsolete).   Now  equivalent to the -C option.  See that option for
            details.


     -cc    "Continuous  compile"  without  previewer.    Equivalent   to   -pvc
            -view=none.


     -cd    Change  to the directory containing the main source file before pro-
            cessing it.  Then all the generated files (.aux, .log,  .dvi,  .pdf,
            etc) will be relative to the source file.

            This  option  is  particularly useful when latexmk is invoked from a
            GUI configured to invoke latexmk with a full pathname for the source
            file.

            This option works by setting the $do_cd  configuration  variable  to
            one;  you  can set that variable if you want to configure latexmk to
            have the effect of the -cd option without specifying it on the  com-
            mand line.  See the documentation for that variable.


     -cd-   Do  NOT  change to the directory containing the main source file be-
            fore processing it.  Then all the generated files (.aux, .log, .dvi,
            .pdf, etc) will be relative to the current directory rather than the
            source file.

            This is the default behavior and corresponds to the behavior of  the
            *latex programs.  However, it is not desirable behavior when latexmk
            is  invoked  by a GUI configured to invoke latexmk with a full path-
            name for the source file.  See the -cd option.

            This option works by setting the $do_cd  configuration  variable  to
            zero.  See the documentation for that variable for more information.






                                  9 March 2026                                 7






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     -CF    Remove  the file containing the database of source file information,
            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 intensity
            can  be  modified with the -bs and -bi options.  The -bm option will
            override this option as this is really just a short way of  specify-
            ing:

                 latexmk -bm DRAFT

            Note that if the -d option is specified, the -ps option is assumed.


     -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 la-
            texmk can determine them.

            By default the list of dependent files is sent to stdout (i.e., nor-
            mally  to the screen unless you've redirected latexmk's output). 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.  (In fact, latexmk also has options -M, -MF, and -MP options
            that behave like those of 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-escape=<string>
            Set  the  kind  of  escaping used for spaces in the dependency list.
            The possible values are "none", "unix", "nmake",  corresponding  re-
            spectively to no escaping, escaping with a "\" suitable for standard



                                  9 March 2026                                 8






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            Unix make, and escaping with "^", suitable for Microsoft's nmake.


     -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.


     -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  debug-
            ging problems or to understand latexmk's behavior in difficult situ-
            ations.


     -dir-report
            For  each .tex file processed, list the settings for aux and out di-
            rectories, after they have been normalized from the settings  speci-
            fied  during  initialization.  See  the  description of the variable
            $aux_out_dir_report for more details.


     -dir-report-
            Do not report the settings for aux and out directories.  (Default)


     -dir-report-only
            After all initialization is complete, give the settings for the  aux
            and  out  directories, and then halt.  This option is primarily used
            for debugging configuration issues.


     -dvi   Generate dvi version of document using latex.  (And turn off any in-
            compatible requests.)


     -dvilua
            Generate dvi version of document using lualatex  instead  of  latex.



                                  9 March 2026                                 9






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            (And turn off any incompatible requests.)


     -dvi-  Turn off generation of dvi version of document.  (This may get over-
            ridden, if some other file is made (e.g., a .ps file) that is gener-
            ated  from  the  dvi  file,  or  if  no generated file at all is re-
            quested.)


     -dvilualatex="COMMAND"
            This sets the string specifying the command to run dvi lualatex.  It
            behaves like the -pdflatex option, but sets the variable  $dviluala-
            tex.

            Note:  This option when provided with the COMMAND argument only sets
            the command for invoking dvilualatex; it does not turn on the use of
            dvilualatex. That is done by other options or in  an  initialization
            file.


     -e <code>
            Execute  the  specified  initialization code before processing.  The
            code is Perl code of the same form as is used in latexmk's  initial-
            ization  files.  For more details, see the information on the -r op-
            tion,  and  the  section  about  "Configuration/initialization  (RC)
            files".   The  code is typically a sequence of assignment statements
            separated by semicolons.

            The code is executed when the -e option is  encountered  during  la-
            texmk's parsing of its command line.  See the -r option for a way of
            executing  initialization code from a file.  An error results in la-
            texmk 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  charac-
            ters 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 special.  (In this
            example, the q/.../ construct is a Perl idiom  equivalent  to  using
            single  quotes.   This  avoids  the complications of getting a quote
            character inside an already quoted string in a way that is  indepen-
            dent 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



                                  9 March 2026                                10






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



                 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 shells.

            (Note: the above examples show are to show how  to  use  the  -e  to
            specify  initialization code to be executed.  But the particular ef-
            fect can be achieved also by the use of the -latex option with  less
            problems in dealing with quoting.)


     -emulate-aux-dir
            Emulate  the  use  of  an aux directory instead of leaving it to the
            *latex programs to do  it.   (MiKTeX  supports  -aux-directory,  but
            TeXLive doesn't.)

            See the section AUXILIARY AND OUTPUT DIRECTORIES for more details.


     -emulate-aux-dir-
            Turn off emulation to implement an aux directory and leave it to the
            *latex  program to handle the case that the aux directory is differ-
            ent from the output directory.  Note that if you use TeXLive,  which
            doesn't  support  -aux-directory,  latexmk will automatically switch
            aux_dir emulation on after the first run of *latex, because it  will
            find the .log file in the wrong place.


     -f     Force  latexmk to continue document processing despite errors.  Nor-
            mally, when latexmk detects that LaTeX or another program has  found
            an  error  which will not be resolved by further processing, no fur-
            ther processing is carried out.

            Note: "Further processing" means the running of  other  programs  or
            the rerunning of latex (etc) that would be done if no errors had oc-
            curred.   If instead, or additionally, you want the latex (etc) pro-
            gram not to pause for user input after an error, you should  arrange
            this  by an option that is passed to the program, e.g., by latexmk's
            option -interaction=nonstopmode (which latexmk passes to *latex).


     -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 configuration
            file.


     -g     Go  mode:  Force  latexmk to run each rule at least once, even under
            situations whre latexmk would normally decide that no changes in the
            source files have occurred since the previous run.  This  option  is



                                  9 March 2026                                11






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            useful, for example, if you change the configuration and wish to re-
            process all files.

            Equivalently: all rules are initially to be regarded as out of date.
            This  option  has  the  disadvantage that if, for example, there are
            very many custom dependencies for making graphics files, all of them
            will be run, which could be very time consuming.  See also  the  -gt
            option, which only forces a rerun of *latex.


     -g-    Turn off -g.


     -gg    "Super  go mode" or "clean make": clean out generated files as if -C
            had been given, and then do a regular make.


     -gt    Require at least one run of *latex.  I.e., process as normal, except
            that at least one run of the *latex rule is to be  made,  even  when
            latexmk's normal methods lead it to conclude that a run of *latex is
            not needed.

            Equivalently,  treat the *latex rule as initially out-of-date.  Note
            that latexmk may separately detect that other rules are  out-of-date
            by  its  normal  methods.   If these are normally run before *latex,
            then this will still be done

            This option is particularly useful when some changes  in  configura-
            tion have been made or under certain error conditions, where latexmk
            would not correctly detect the need to run *latex, but where the run
            is needed.


     -h or -help
            Print help information.


     -hnt   Generate  hnt  (HINT)  version of document using hilatex.  (And turn
            off any incompatible requests.)


     -jobname=STRING
            Set the basename of output files(s) to STRING, instead  of  the  de-
            fault,  which  is  the  basename  of  the  specified  TeX file.  (At
            present, STRING should not contain spaces.)

            This is like the same option for current implementations of the *la-
            tex, and the passing of this option to these programs is part of la-
            texmk's implementation of -jobname.

            There is one enhancement, that the STRING  may  contain  the  place-
            holder  '%A'.  This  will  be substituted by the basename of the TeX



                                  9 March 2026                                12






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            file.  The primary purpose is when multiple files are  specified  on
            the  command  line  to latexmk, and you wish to use a jobname with a
            different file-dependent value for each file.  For example,  suppose
            you  had  .tex files test1.tex and test2.tex, and you wished to com-
            pare the results of compilation by *latex and  those  with  xelatex.
            Then  under  a  unix-type operating system you could use the command
            line

                latexmk -pdf -jobname=%A-pdflatex *.tex
                latexmk -pdfxe -jobname=%A-xelatex *.tex

            Then the .aux, .log, and .pdf files from the use of  pdflatex  would
            have  basenames  test1-pdflatex and test2-pdflatex, while from xela-
            tex, the basenames would be test1-xelatex and test2-xelatex.

            Under MS-Windows with cmd.exe, you would need to double the  percent
            sign, so that the percent character is passed to latexmk rather than
            being used to substitute an environment variable:

                latexmk -pdf -jobname=%%A-pdflatex *.tex
                latexmk -pdfxe -jobname=%%A-xelatex *.tex


     -l     Run  in  landscape mode, using the landscape mode for the previewers
            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.


     -latex
            This sets the generation of dvi files by latex, and  turns  off  the
            generation of pdf and ps files.

            Note:  to set the command used when latex is specified, see the -la-
            tex="COMMAND" option.


     -latex="COMMAND"
            This sets the string specifying the command to  run  latex,  and  is
            typically  used  to  add desired options.  Since the string normally
            contains spaces, it should be quoted, e.g.,

                 latexmk -latex="latex --shell-escape %O %S"  foo.tex

            The specification of the contents of the string are the same as  for
            the $latex configuration variable.  Depending on your operating sys-
            tem and the command-line shell you are using, you may need to change
            the single quotes to double quotes (or something else).




                                  9 March 2026                                13






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            Note:  This option when provided with the COMMAND argument only sets
            the command for invoking latex; it does not turn on the use  of  la-
            tex. That is done by other options or in an initialization file.

            To set the command for running pdflatex (rather than the command for
            latex) see the -pdflatex option.


     -logfilewarninglist
            -logfilewarnings  After  a  run  of  *latex, give a list of warnings
            about undefined citations and references (unless silent mode is on).

            See also the $silence_logfile_warnings configuration variable.


     -logfilewarninglist-
            -logfilewarnings- After a run of *latex, do not give a list of warn-
            ings about undefined citations and references.  (Default)

            See also the $silence_logfile_warnings configuration variable.


     -lualatex
            Use lualatex.  That is, use lualatex to process the  source  file(s)
            to  pdf.   The  generation  of dvi, hnt, postscript and xdv files is
            turned off.

            This option is equivalent to using the following set of options

                 -pdflua -dvi- -ps-

            (Note: Note that the method of implementation of  this  option,  but
            not  its  intended  effect, differ from some earlier versions of la-
            texmk.)


     -lualatex="COMMAND"
            This sets the string specifying the command to run lualatex.  It be-
            haves like the -pdflatex option, but sets the variable $lualatex.

            Note: This option when provided with the COMMAND argument only  sets
            the  command  for  invoking lualatex; it does not turn on the use of
            lualatex. That is done by other  options  or  in  an  initialization
            file.


     -M     Show  list  of dependent files after processing.  This is equivalent
            to the -deps option.


     -MF file
            If a list of dependents is made, the -MF specifies the file to write



                                  9 March 2026                                14






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            it to.


     -MP    If a list of dependents is made, include a  phony  target  for  each
            source  file.   If  you  use  the dependents list in a Makefile, the
            dummy rules work around errors the program make gives if you  remove
            header files without updating the Makefile to match.


     -makeindexfudge
            Turn on the change-directory fudge for makeindex.  See documentation
            of $makeindex_fudge for details.


     -makeindexfudge-
            Turn  off  the change-directory fudge for makeindex.  See documenta-
            tion of $makeindex_fudge for details.


     $min_sleep_time [0.01]
            This is the minimum nonzero value allowed for $sleep_time.


     -MSWinBackSlash
            This option only has an effect when latexmk is running under MS-Win-
            dows.  This is that when latexmk runs a  command  under  MS-Windows,
            the Windows standard directory separator "\" is used to separate di-
            rectory components in a file name.  Internally, latexmk uses "/" for
            the  directory  separator  character, which is the character used by
            Unix-like systems.

            This is the default behavior.  However the  default  may  have  been
            overridden  by  a  configuration  file  (latexmkrc  file) which sets
            $MSWin_back_slash=0.


     -MSWinBackSlash-
            This option only has an effect when latexmk is running under MS-Win-
            dows.  This is that when latexmk runs a  command  under  MS-Windows,
            the  substitution  of "\" for the separator character between direc-
            tory components of a file name is  not  done.  Instead  the  forward
            slash "/" is used, the same as on Unix-like systems. This is accept-
            able  in  most  situations under MS-Windows, provided that filenames
            are properly quoted, as latexmk does by default.

            See   the   documentation    for    the    configuration    variable
            $MSWin_back_slash for more details.


     -new-viewer
            When  in  continuous-preview mode, always start a new viewer to view
            the generated file.  By default, latexmk will, in continuous-preview



                                  9 March 2026                                15






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            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 option turns off the  de-
            fault behavior.


     -new-viewer-
            The  inverse of the -new-viewer option.  It puts latexmk in its nor-
            mal behavior that in preview-continuous mode it checks  for  an  al-
            ready-running previewer.


     -nobibtex
            Never run bibtex or biber.  Equivalent to the -bibtex- option.


     -nobibtexfudge or -nobibfudge
            Turn  off  the change-directory fudge for bibtex.  See documentation
            of $bibtex_fudge for details.


     -noemulate-aux-dir
            Turn aux_dir emulation off.  Same as -emulate-aux-dir-.


     -nomakeindexfudge
            Turn off the change-directory fudge for makeindex.   See  documenta-
            tion of $makeindex_fudge for details.


     -norc  Turn off the automatic reading of initialization (rc) files.

            N.B. Normally the initialization files are read and obeyed, and then
            command  line  options are obeyed in the order they are encountered.
            But -norc is an exception to this rule: it is  acted  on  first,  no
            matter where it occurs on the command line.


     -outdir=FOO or -output-directory=FOO

            Sets the directory for the output files of *latex.

            If  the aux directory is not set or is the same as the output direc-
            tory, then all output files of *latex are sent to the output  direc-
            tory.

            If the aux directory is set, e.g., by the option -auxdir, and is not
            equal  to  the  output directory, then only the primary output files
            (.dvi, .ps, .pdf, .synctex, .synctex.gz) are sent to the output  di-
            rectory. Other generated files are sent to the aux directory.



                                  9 March 2026                                16






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            See the section AUXILIARY AND OUTPUT DIRECTORIES for more details.


     -out2dir=FOO

            (Experimental new feature.)

            Sets  the  directory  for the final output files of a whole round of
            compilations.

            The use of this directory solves, among other  things,  the  problem
            that  when  multiple  runs  of *latex and other programs are needed,
            files like the main pdf file from pdflatex, etc will be changed mul-
            tiple times. A viewer like SumatraPDF that reloads the file whenever
            it detects changes will show a distracting sequence of  intermediate
            states of the pdf file, rather than just the final version after all
            the  repeated  runs  of  *latex etc have been done.  Instead, when a
            distinct final-output directory is set, by the  -out2dir  option  or
            the equivalent $out2_dir variable is set, the viewer will only see a
            changed  pdf (etc) file after full sequence of repeated runs of *la-
            tex etc has finished.

            By default the final output directory is the same as the output  di-
            rectory  (as  specified  by the -outdir option or the setting of the
            variable $out_dir configuration variable).



     -output-format=FORMAT
            This option is one that is allowed for latex, lualatex,  and  pdfla-
            tex.  But  it is not passed to these programs.  Instead latexmk emu-
            lates it in a way suitable for the context of latexmk and its  work-
            flows.

            -If FORMAT is dvi, then dvi output is turned on, and postscript, pdf
            and  xdv  output are turned off. This is equivalent to using the op-
            tions -dvi -ps- -pdf- -xdv-.

            If FORMAT is pdf, then pdf output is turned on, and dvi,  postscript
            and  xdv  output are turned off. This is equivalent to using the op-
            tions -pdf -ps- -dvi- -xdv-.

            If FORMAT is anything else, latexmk gives an error.


     -p     Print out the document.  By default the file to be  printed  is  the
            first  in the list postscript, pdf, dvi that is being made.  But you
            can use the -print=... option to change  the  type  of  file  to  be
            printed,  and  you can configure this in a start up file (by setting
            the $print_type variable).

            However, printing  is  enabled  by  default  only  under  UNIX/Linux



                                  9 March 2026                                17






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            systems,  where  the  default  is to use the lpr command and only on
            postscript files.  In general, 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 configured 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.


     -pdf   Generate pdf version of document using pdflatex.  (And turn off  any
            incompatible requests.)

            (If  you  wish  to use lualatex or xelatex, you can use whichever of
            the options -pdflua, -pdfxe, -lualatex  or  -xelatex  applies.)   To
            configure  latexmk to have such behavior by default, see the section
            on "Configuration/initialization (rc) files".


     -pdfdvi
            Generate dvi file and then pdf version  of  document  from  the  dvi
            file,  by  default using dvipdf.  (And turn off any incompatible re-
            quests.)

            The program used to compile the document to dvi is latex by default,
            but this can be changed to dvilulatex by the use of the -dvilua  op-
            tion or by setting $dvi_mode to 2.


     -pdflua
            Generate  pdf version of document using lualatex.  (And turn off any
            incompatible requests.)


     -pdfps
            Generate dvi file, ps file from the dvi file,   and  then  pdf  file
            from the ps file.  (And turn off any incompatible requests.)

            The program used to compile the document to dvi is latex by default,
            but  this can be changed to dvilulatex by the use of the -dvilua op-
            tion or by setting $dvi_mode to 2.


     -pdfxe
            Generate pdf version of document using xelatex.  (And turn  off  any
            incompatible requests.)

            Note  that to optimize processing time, latexmk uses xelatex to gen-
            erate an .xdv file rather than a  pdf  file  directly.   Only  after



                                  9 March 2026                                18






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            possibly multiple runs to generate a fully up-to-date .xdv file does
            latexmk then call xdvipdfmx to generate the final .pdf file.

            (Note:  The  reason why latexmk arranges for xelatex to make an .xdv
            file instead of the xelatex's default of a .pdf file is as  follows:
            When  the  document  includes  large graphics files, especially .png
            files, the production of a .pdf file can be  quite  time  consuming,
            even  when the creation of the .xdv file by xelatex is fast.  So the
            use of the intermediate .xdv file can result in substantial gains in
            processing time, since the .pdf file is produced once rather than on
            every run of xelatex.)


     -pdf-  Turn off generation of pdf version of document.  (This can  be  used
            to  override a setting in a configuration file.  It may get overrid-
            den if some other option requires the generation of a pdf file.)

            If after all options have been processed, pdf  generation  is  still
            turned  off,  then  generation  of a dvi file will be turned on, and
            then the program used to compiled a document will be latex (or, more
            precisely, whatever program is configured to be used in  the  $latex
            configuration variable).


     -pdflatex
            Set  the generation of pdf files by pdflatex.  (And turn off any in-
            compatible requests.)

            Note: to set the command used when pdflatex is  specified,  see  the
            -pdflatex="COMMAND" option.


     -pdflatex="COMMAND"
            This  sets the string specifying the command to run pdflatex, and is
            typically used to add desired options.  Since  the  string  normally
            contains spaces, it should be quoted, e.g.,

                 latexmk -pdf -pdflatex="pdflatex --shell-escape %O %S"  foo.tex

            The  specification of the contents of the string are the same as for
            the $pdflatex configuration variable.  (The option -pdflatex in fact
            sets the variable $pdflatex.)  Depending on  your  operating  system
            and the command-line shell you are using, you may need to change the
            single quotes to double quotes (or something else).

            Note:  This option when provided with the COMMAND argument only sets
            the command for invoking pdflatex; it does not turn on  the  use  of
            pdflatex.  That  is  done  by  other options or in an initialization
            file.

            To set the command for running latex (rather than  the  command  for
            pdflatex) see the -latex option.



                                  9 March 2026                                19






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     -pdflualatex="COMMAND"
            Equivalent to -lualatex="COMMAND".


     -pdfxelatex="COMMAND"
            Equivalent to -xelatex="COMMAND".


     -pretex=CODE

            Given  that CODE is some TeX code, this options sets that code to be
            executed before inputting source file.  This only works if the  com-
            mand  for  invoking the relevant *latex is suitably configured.  See
            the documentation of the variable $pre_tex_code, and  the  substitu-
            tion  strings %P and %U for more details.  This option works by set-
            ting the variable $pre_tex_code.

            See also the -usepretex option.

            An example:

                latexmk    -pretex='\AtBeginDocument{Message\par}'    -usepretex
            foo.tex

            But this is better written

                latexmk -usepretex='\AtBeginDocument{Message\par}' foo.tex

            If you already have a suitable command configured, you only need

                latexmk -pretex='\AtBeginDocument{Message\par}' foo.tex


     -print=dvi, -print=ps, -print=pdf, -print=auto,
            Define which kind of file is printed.  This option also ensures that
            the requisite file is made, and turns on printing.

            The (default) case -print=auto determines the kind of print file au-
            tomatically  from the set of files that is being made.  The first in
            the list postscript, pdf, dvi that is among the files to be made  is
            the one used for print out.


     -ps    Generate  postscript  version of document.  (And turn off any incom-
            patible requests.)


     -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 file, for
            example a request for printing.)




                                  9 March 2026                                20






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     -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) will then  be
            performed on this filtered postscript file.

            Example of usage: Use psnup to print two pages on the one page:

                 latexmk -ps -pF 'psnup -2' foo.tex

            or

                 latexmk -ps -pF "psnup -2" foo.tex

            Whether to use single or double quotes round the "psnup -2" will de-
            pend  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, that  will  select
            the kind of file to be previewed (.pdf, .ps or .dvi).  Otherwise the
            viewer  views  the  "highest" kind of output file that is made, with
            the ordering being .pdf, .ps, .dvi (high to low).   This  option  is
            incompatible with the -p and -pvc options, so it turns them off.


     -pv-   Turn off -pv.


     -pvc   "Continuous  preview  mode", i.e., compile document, run a file pre-
            viewer, and then regularly check for changed source files and recom-
            pile as needed. (See the Description above).  Which files are gener-
            ated 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
            when you use this option, you should only specify  one  filename  on
            the  command  line.  It is also incompatible with the -p and -pv op-
            tions, so it turns these options off.

            The -pvc option also turns off force mode, as this is normally  best
            for continuous preview mode.  If you really want force mode, use the
            options in the order -pvc -f.

            If you wish to do a "continuous compile", but don't want a previewer
            to be run, then do -pvc -view=none.

            With a good previewer the display will be automatically updated when
            the  viewed  file  changes.   (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



                                  9 March 2026                                21






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            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  different viewer: SumatraPDF and gsview are good
            possibilities.

            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  "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 running.)


     -pvc-  Turn off -pvc.


     -pvctimeout
            Do  timeout in pvc mode after period of inactivity, which is 30 min.
            by default.  Inactivity means a period when latexmk has detected  no
            file  changes and hence has not taken any actions like compiling the
            document.


     -pvctimeout-
            Don't do timeout in pvc mode after inactivity.


     -pvctimeoutmins=<time>
            Set period of inactivity in minutes for pvc timeout.


     -quiet
            Same as -silent


     -r <rcfile>
            Read the specified initialization file ("RC file")  before  process-
            ing.

            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  initializa-
            tion file is specified by the -r option, it is read during this sec-
            ond  step.  Thus an initialization file specified with the -r option



                                  9 March 2026                                22






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            can override both the standard initialization files  and  previously
            specified  options.  But all of these can be overridden by later op-
            tions.

            The contents of the RC file just comprise a piece  of  code  in  the
            Perl programming language (typically a sequence of assignment state-
            ments);  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 executed in the order they
            appear on the command line.


     -rc-report
            After initialization, give a list of the RC files read. (Default)


     -rc-report-
            After initialization, do not give a list of the RC files read.


     -recorder
            Give the -recorder option with *latex.  In (most) modern versions of
            these programs, this results in a file of extension .fls  containing
            a  list of the files that these programs have read and written.  La-
            texmk will then use this file to improve  its  detection  of  source
            files  and  generated  files after a run of *latex.  This is the de-
            fault setting of latexmk, unless  overridden  in  an  initialization
            file.

            For  further  information,  see  the documentation for the $recorder
            configuration variable.


     -recorder-
            Do not supply the -recorder option with *latex.


     -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  pro-
            cessing.  (This is the default.)


     -showextraoptions
            Show  the  list of extra *latex options that latexmk recognizes, but
            that it simply passes through to the programs *latex  when they  are
            run.



                                  9 March 2026                                23






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            These  options are (currently) a combination of those allowed by the
            TeXLive and MiKTeX implementations.   (If  a  particular  option  is
            given to latexmk but is not handled by the particular implementation
            of  *latex  that  is  being  used, that program will probably give a
            warning or an error.)  These options are very numerous, but are  not
            listed  in  this documentation because they have no direct effect on
            latexmk's actions.

            There are a few options (e.g.,  -includedirectory=dir,  -initialize,
            -ini)  that  are  not recognized, either because they don't fit with
            latexmk's intended operations, or because they need special process-
            ing by latexmk that isn't implemented (at least, not yet).

            There are certain options for *latex (e.g., -recorder) that  trigger
            special  actions or behavior by latexmk itself. Depending on the ac-
            tion, they may also be passed in some form to the called *latex pro-
            gram, and/or may affect other programs as well.   These  options  do
            have  entries in this documentation.  Among these options are: -job-
            name=STRING, -aux-directory=dir, -output-directory=DIR, -quiet,  and
            -recorder.

            There  are  also  options  that  are accepted by *latex, but instead
            trigger actions purely by latexmk: -help, -version.

            Notes that may help when debugging problems: The method that latexmk
            to pass any of the accepted extra options to *latex is that when  it
            constructs  the  command line for running *latex, it inserts the op-
            tions where the placeholder %O appears in the strings specifying the
            command line.  (I.e., in the  strings  given  by  the  configuration
            variables  $pdflatex  etc.)  Note that latexmk uses this same method
            to add other options to the command line, and that  the  strings  in
            $pdflatex etc may contain other options.  So depending on the situa-
            tion  and  the configuration, the use of an extra option on the com-
            mand line latexmk might not achieve the  desired  effect;  e.g.,  it
            could be overridden by a later option in the command line.



     -silent
            Run  commands silently, i.e., with options that reduce the amount of
            diagnostics generated.  For example, with the default settings,  the
            command  "latex -interaction=batchmode" is used for latex, and simi-
            larly for its friends.

            See also the -logfilewarninglist and -logfilewarninglist- options.

            Also reduce the number of informational messages that latexmk itself
            generates.

            To change the options used to make the commands  run  silently,  you
            need  to  configure latexmk with changed values of its configuration
            variables,   the   relevant   ones   being    $bibtex_silent_switch,



                                  9 March 2026                                24






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            $biber_silent_switch,  $dvipdf_silent_switch,  $dvips_silent_switch,
            $dvilualatex_silent_switch,      $latex_silent_switch,       $luala-
            tex_silent_switch $makeindex_silent_switch, $pdflatex_silent_switch,
            and $xelatex_silent_switch


     -stdtexcmds
            Sets  the  commands  for  latex,  etc, so that they are the standard
            ones. This is useful to override special configurations.

            The result is that $latex = 'latex %O %S', and similarly for $pdfla-
            tex, $lualatex, and $xelatex.  (The option -no-pdf needed for $xela-
            tex is provided automatically, given that %O appears in the  defini-
            tion.)


     -time  Show  time  used.   (On  MS Windows, what is shown is clock time; on
            other systems  CPU  time.)   See  also  the  configuration  variable
            $show_time.


     -time-
            Do  not  show  time  used.   See  also  the  configuration  variable
            $show_time.


     -use-make
            When after a run of *latex, there are warnings about  missing  files
            (e.g., as requested by the LaTeX \input, \include, and \includgraph-
            ics commands), 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 as a last resort la-
            texmk will try to use 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 ex-
            tensions that are relevant for latex (or  as  appropriate  pdflatex,
            lualatex, xelatex).

            See  also the documentation for the $use_make_for_missing_files con-
            figuration variable.


     -use-make-
            Do not use the make program to try  to  make  missing  files.   (De-
            fault.)


     -usepretex
            Sets  the  command  lines  for latex, etc, so that they use the code



                                  9 March 2026                                25






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            that is defined by the variable $pre_tex_code or that is set by  the
            option  -pretex=CODE  to  execute  the specified TeX code before the
            source file is read.  This option overrides any previous  definition
            of the command lines.

            The result is that $latex = 'latex %O %P', and similarly for $pdfla-
            tex, $lualatex, and $xelatex.  (The option -no-pdf needed for $xela-
            tex  is provided automatically, given that %O appears in the defini-
            tion.)


     -usepretex=CODE
            Equivalent to -pretex=CODE -usepretex.  Example

              latexmk -usepretex='\AtBeginDocument{Message\par}' foo.tex


     -v or -version
            Print version number of latexmk.


     -verbose
            Opposite of -silent.  This is the default setting.


     -view=default, -view=dvi, -view=hnt, -view=ps, -view=pdf, -view=none
            Set the kind of file used when previewing is requested (e.g., by the
            -pv or -pvc switches).  The default is to view the "highest" kind of
            requested file (in the low-to-high order .dvi, .hnt, .ps, .pdf).

            Note the possibility -view=none where no viewer is  opened  at  all.
            One  example  of is use is in conjunction with the -pvc option, when
            you want latexmk to do a compilation automatically  whenever  source
            file(s) change, but do not want a previewer to be opened.


     -Werror
            This  causes  latexmk to return a non-zero status code if any of the
            files processed gives a warning about  problems  with  citations  or
            references  (i.e., undefined citations or references or about multi-
            ply defined references).  This is after latexmk  has  completed  all
            the runs it needs to try and resolve references and citations.  Thus
            -Werror  causes  latexmk  to treat such warnings as errors, but only
            when they occur on the last run of *latex and only after  processing
            is  complete.   Also can be set by the configuration variable $warn-
            ings_as_errors.


     -xdv   Generate xdv version of document using xelatex.  (And turn  off  any
            incompatible requests.)





                                  9 March 2026                                26






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     -xelatex
            Use  xelatex.   That  is, use xelatex to process the source file(s).
            This will cause generation of a pdf (but indirectly  through  a  xdv
            file).  (And turn off any incompatible requests.)

            This option is equivalent to using the following option

                 -pdfxe

            [Note:  Note  that  the method of implementation of this option, but
            not its intended primary effect, differ from some  earlier  versions
            of  latexmk.  Latexmk  first  uses xelatex to make an .xdv file, and
            does all the extra runs needed (including  those  of  bibtex,  etc).
            Only  after that does it make the pdf file from the .xdv file, using
            xdvipdfmx.  See the documentation for the -pdfxe  for  why  this  is
            done.]


     -xelatex="COMMAND"
            This sets the string specifying the command to run xelatex.  It sets
            the variable $xelatex.

            Warning: It is important to ensure that the -no-pdf is used when xe-
            latex  is  invoked, since latexmk expects xelatex to produce an .xdv
            file, not a .pdf file. If you provide %O in the  command  specifica-
            tion,  this  will  be done automatically.  See the documentation for
            the -pdfxe option for why latexmk makes a .xdv file  rather  than  a
            .pdf file when xelatex is used.

            An example of the use of the -xelatex option:

                 latexmk -pdfxe -xelatex="xelatex --shell-escape %O %S"  foo.tex

            Note:  This option when provided with the COMMAND argument only sets
            the command for invoking xelatex; it does not turn on the use of lu-
            alatex. That is done by other options or in an initialization file.


     Compatibility between options

     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
     turns the others off.


EXAMPLES
     % latexmk thesis    # run latex enough times to resolve
                         cross-references

     % latexmk -pvc -ps thesis# run latex enough times to resolve



                                  9 March 2026                                27






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



                         cross-references, make a postscript
                         file, start a previewer.  Then
                         watch for changes in the source
                         file thesis.tex and any files it
                         uses.  After any changes rerun latex
                         the appropriate number of times and
                         remake the postscript file.  If latex
                         encounters an error, latexmk will
                         keep running, watching for
                         source file changes.

     % latexmk -c        # remove .aux, .log, .bbl, .blg, .dvi,
                         .pdf, .ps & .bbl files



DEALING WITH ERRORS, PROBLEMS, ETC
     Some possibilities:

     a.  If  you get a strange error, do look carefully at the output that is on
     the screen and in log files.  While there is much that is notoriously  ver-
     bose  in  the  output  of latex (and that is added to by latexmk), the ver-
     bosity is there for a reason: to enable the user to diagnose problems.  La-
     texmk does repeat some messages at the end of a run that  it  thinks  would
     otherwise be easy to miss in the middle of other output.

     b.  Generally,  remember  that  latexmk does its work by running other pro-
     grams.  Your first priority in dealing with errors  should  be  to  examine
     what went wrong with the individual programs.  Then you need to correct the
     causes of errors in the runs of these programs.  (Often these come from er-
     rors  in  the  source  document, but they could also be about missing LaTeX
     packages, etc.)

     c. If latexmk doesn't run the programs the way you  would  like,  then  you
     need  to look in this documentation at the list of command line options and
     then at the sections on configuration/initialization files.  A lot  of  la-
     texmk's  behavior is configurable to deal with particular situations.  (But
     there is a lot of reading!)

     The remainder of these notes consists of ideas for dealing with more diffi-
     cult situations.

     d. Further tricks can involve replacing the standard commands that  latexmk
     runs by other commands or scripts.

     e.  For  possible examples of code for use in an RC file, see the directory
     example_rcfiles in  the  distribution  of  latexmk  (e.g.,  at  http://mir-
     ror.ctan.org/support/latexmk/example_rcfiles).    Even  if  these  examples
     don't do what you want, they may provide suitable inspiration.

     f. There's a useful trick that can be used when you use lualatex instead of
     pdflatex (and in some related situations).  The  problem  is  that  latexmk



                                  9 March 2026                                28






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     won't  notice a dependency on a file, bar.baz say, that is input by the lua
     code in your document instead of by the LaTeX part.  (Thus  if  you  change
     bar.baz  and  rerun  latexmk, then latexmk will think no files have changed
     and not rerun lualatex, whereas if you had '\input{bar.baz}' in  the  LaTeX
     part  of  the  document, latexmk would notice the change.)  One solution is
     just to put the following somewhere in the LaTeX part of the document:

                   \typeout{(bar.baz)}

     This puts a line in the log file that latexmk will treat as  implying  that
     the  file  bar.baz  was read.  (At present I don't know a way of doing this
     automatically.)  Of course, if  the  file  has  a  different  name,  change
     bar.baz to the name of your file.

     g. See also the section "Advanced Configuration: Some extra resources".

     h.  Look  on tex.stackexchange, i.e., at http://tex.stackexchange.com/ques-
     tions/tagged/latexmk  Someone may have already solved your problem.

     i. Ask a question at tex.stackexchange.com.

     j. Or ask me (the author of latexmk).  My e-mail is at the end of this doc-
     umentation.



AUXILIARY AND OUTPUT DIRECTORIES
     Running *latex and the associated programs generate a number of  files,  it
     is often convenient to arrange for the generated files to be in a different
     directory than the source file(s) of a document.  For our purposes here, we
     identify two classes of generated file.

     One  class  is  what  one may term the final output files, for example, the
     .pdf file generated by running pdflatex, or the .dvi file from latex.  Also
     in  this  class  is the ps file generated by applying dvips to a .dvi file.
     There are also .synctec or .synctex.gz files that can be used  by  programs
     that  display  .pdf files and the like to relate positions in them to posi-
     tions in source files.

     The second class of file is composed of all other  generated  files:  These
     include  notably  .aux files that are used for implementing cross referenc-
     ing, and are both generated on one run and read on a later run.  Many pack-
     ages generate yet more such intermediate files, as well  as  programs  like
     bibtex,  makeindex,  etc.  There are also .log files from *latex and corre-
     sponding files from other programs.

     Let us use the term "output directory" for the directory that receives  the
     final  output  files,  and  "aux directory" for the directory for the other
     generated files.  If no special options are provided  to  the  *latex  pro-
     grams,  these  directories  default  to the current directory, and then the
     generated files aren't segregated.  If the two directories are the same, as
     is the simplest situation, then all generated files are written to the same



                                  9 March 2026                                29






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     directory, and one often simply refers to  the  output  directory,  without
     mentioning a separate aux directory.

     Support for them is provided for them in the *latex programs: by the single
     option  -output-directory  for  the TeXLive implementations, and by the op-
     tions -aux-directory and -output-directory for the MiKTeX  implementations.
     Special  support  like  this is needed for two reasons: First is that there
     are many packages that write files and it needs to be arranged  that  these
     are  automatically written to the appropriate directory without any rewrit-
     ing of the packages' code.  Second is that the  files  are  often  read  in
     again  on  subsequent  runs of *latex, and it is necessary that the program
     knows where to find the files.

     A complication is that the TeXLive implementation does not allow for  sepa-
     rate  aux and output directories.  Latexmk deals with this by being able to
     emulating a separate aux directory: In this method it invokes  *latex  with
     just an -output-directory option, with the directory set not to the desired
     output directory, but to the aux directory.  After running *latex, it moves
     the relevant final output file(s) to the intended output directory.  Emula-
     tion can be turned on by setting the configuration variable $emulate_aux to
     one  in a configuration file or by using latexmk's -emulate-aux-dir option.
     The emulation method works equally well if MiKTeX is used.

     Latexmk also turns emulation on if it is found to be  needed,  as  follows.
     Suppose  emulation is initially off, but the aux and output directories are
     different.  Then latexmk invokes *latex with an -aux-directory  option  and
     after  the  run  finds that it hasn't been obeyed, notably because the .log
     file is in the output directory rather than  the  aux  directory.   Latexmk
     then  sets  emulation  on, and retries.  Conceivably, it could move all the
     appropriate generated files from the output directory to the aux directory;
     but there is such a large variety of possibilities  for  these  files  that
     this is hard to identify all of them reliably except for simple cases.

     Note  that  the  emulation issue only arises when the user has arranged for
     the the aux and output directories to be different.  When instead they  are
     equal,  e.g., because the user only set the $out_dir variable, then latexmk
     invokes *latex with only an -output-directory option, which  works  as  in-
     tended with both TeXLive and MiKTeX.

     In  addition,  latexmk  arranges  the invocations of any auxiliary programs
     like bibtex and makeindex so that they will read  and  write  the  relevant
     files  from and to the aux directory.  Programs like dvips, dvipdf, ps2pdf,
     and xdvipdfmx are invoked so that they read from the appropriate places and
     write their output to the output directory.

     Files considered as final output files, i.e., those that belong in the out-
     put directory rather than the aux  directory:  These  have  the  extensions
     .dvi,  .ps.,  .pdf,  .synctex, and .synctex.gz.  A special case, because of
     compatibility issues, is of .fls files: See below.

     Note that xelatex when invoked with its -no-pdf option,  as  latexmk  does,
     generates  an  .xdv  file,  which would appear to have the same status as a



                                  9 March 2026                                30






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     .dvi file generated by latex.  Nevertheless, latexmk treats .xdv as an  in-
     termediate  file that is found in the aux directory.  This is to match MiK-
     TeX's treatment of the -aux-directory option.   As  further  justification,
     one can say that under modern conditions an .xdv file is (almost) always an
     intermediate  file.  Historically, the situation with .dvi files from latex
     was different, and currently dvi previewers do exist.


     Variables and options for directories: The variables for  setting  the  aux
     and  output  directories are $aux_dir and $out_dir, with corresponding com-
     mand line options -auxdir (or -aux-directory) and -outdir  (or  -output-di-
     rectory).  When a value for these is blank (which is the default value), it
     implies  the use of a default: For the aux directory, the default is to set
     it equal to the output directory.  For the output directory, the default is
     to be the current directory.

     For the turning on and off of the emulation mode, there is  the  configura-
     tion  variable $emulate_aux and the options -emulate-aux-dir, -emulate-aux-
     dir-, -noemulate-aux-dir.


     Interaction with -cd option: When the -cd option is used (or the equivalent
     setting of $do_cd variable), then latexmk changes the working directory  to
     the  document  directory  before invoking *latex.  If the aux and/or output
     directories are given by relative paths, e.g., by -outdir=output for a  di-
     rectory  named  "output", then the directories are relative to the document
     directory, rather than relative to the working directory that was in effect
     when latexmk was invoked. This matches the behavior of  *latex  as  invoked
     with  the  provided  command line directory argument(s) after the change of
     working directory to the document directory.

     Automatic creation of aux and output directories: Unlike *latex, if latexmk
     finds the requested directory/ies don't exist, it creates it/them,  thereby
     avoiding errors when *latex is invoked.

     If  the  document uses the \include macro to read a .tex file from a subdi-
     rectory, *latex will attempt to write an extra aux file to the  correspond-
     ing  subdirectory of the aux directory.  If the subdirectory doesn't exist,
     then *latex will complain that it can't write the aux file.  After the  run
     of *latex, latexmk detects this situation, creates the necessary directory,
     and reruns *latex with the error situation corrected.

     Choice  of aux and output directories: Often the aux and output directories
     are given as subdirectories of  the  document  directory,  e.g.,  by  -out-
     dir=output. But it is possible to provide, for example, an absolute path or
     a path relative to a parent directory, e.g., "/tmp/foo" or "../output".  Be
     aware  that  in  general this can cause problems, notably with makeindex or
     bibtex.  This is because modern versions of  these  programs,  by  default,
     will  refuse  to work when they find that they are asked to write to a file
     in a directory that appears not to be the current working directory or  one
     of  its subdirectories.  This is part of security measures by the whole TeX
     system  that  try  to  prevent  malicious  or  errant  TeX  documents  from



                                  9 March 2026                                31






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     incorrectly messing with a user's files.

     By default, latexmk evades this issue: Before running bibtex and makeindex,
     latexmk  changes  working  directory to the aux directory, with appropriate
     settings of search paths.  The use or non-use of this trick is governed  by
     the variables $bibtex_fudge and $makeindex_fudge.  Unfortunately, the trick
     sometimes makes bibtex and makeindex unable to find files.

     If  necessary the trick can be turned off. But this is incompatible with an
     aux directory like, "/tmp/foo" of "../output").  If you really have to deal
     with this situation, and only if you have to deal with it, then you need to
     disable the security measures (and assume any risks).   One  way  of  doing
     this  is  to  temporarily set an operating system environment variable ope-
     nout_any to "a" (as in "all"), to override the default "paranoid" setting.

     Certain names of aux and output directories not allowed on  Microsoft  Win-
     dows:  It  is  natural to want to use the name "aux" for the aux directory,
     e.g., by using the option -auxdir=aux.  But on Microsoft operating  systems
     "aux"  is  one of the names that is not allowed for a file or directory.  I
     find  it  useful  to  standardize  on  a  name  like  "auxdir"  (e.g.,   by
     -auxdir=auxdir); this works independently of operating system.

     Location of .fls file: Much of the dependency information that latexmk uses
     comes  from  the  .fls  file  generated  when  *latex  is  invoked with the
     -recorder option, which latexmk does by default.  It may seem rational that
     this is written to the aux directory.  But in fact versions of MiKTeX prior
     to Oct. 2020 wrote it to the output directory.  Later versions do write  it
     to  the  aux directory.  To deal with this, latexmk does two things: First,
     if latexmk finds that the .fls file has only been generated in the  "wrong"
     directory,  then  latexmk  copies it to the expected directory, after which
     latexmk's operation continues correctly independently of  the  behavior  of
     *latex.  Second it allows its idea of the "correct" (or expected) directory
     to be configured by the variable $fls_uses_aux_dir.  This defaults to zero,
     to correspond to MiKTeX's current behavior.



ALLOWING FOR CHANGE OF OUTPUT FILE TYPE
     When one of the latex engines is run, the usual  situation  is  that  latex
     produces a .dvi file, while pdflatex and lualatex produce a .pdf file.  For
     xelatex  the  default is to produce a .pdf file, but to optimize processing
     time latexmk runs xelatex its -no-pdf option so that it  produces  an  .xdv
     file.  Further processing by latexmk takes this as a starting point.

     However, the actual output file may differ from the normal expectation; and
     then  latexmk can adjust its processing to accommodate this situation.  The
     difference in output file type can happen for two reasons: One is that  for
     latex, pdflatex and lualatex the document itself can override the defaults.
     The  other  is that there may be a configuration, or misconfiguration, such
     that the program that latexmk invokes to compile the document  is  not  the
     expected  one, or is given options incompatible with what latexmk initially
     expects.



                                  9 March 2026                                32






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     Under latex and pdflatex, control of the output format by the  document  is
     done  by  setting  the  \pdfoutput  macro.  Under lualatex, the \outputmode
     macro is used instead.

     One example of an important use-case for document  control  of  the  output
     format  is a document that uses the psfrag package to insert graphical ele-
     ments in the output file. The psfrag package achieves its  effects  by  in-
     serting  postscript  code in the output of the compilation of the document.
     This entails the use of compilation to a .dvi file, followed by the use  of
     conversion  to  a  postscript file (either directly, as by dvips or implic-
     itly, as an intermediate step by dvipdf).  Then it is useful to force  out-
     put  to  be of the .dvi format by inserting \pdfoutput=0 in the preamble of
     the document.

     Another example is where the document uses graphics file of the .pdf, .jpg,
     and png types.  With the default setting for the  graphicx  package,  these
     can  be  processed in compilation to .pdf but not with compilation to .dvi.
     In this case, it is useful to insert \pdfoutput=1 in the  preamble  of  the
     document to force compilation to .pdf output format.

     In all of these cases, it is needed that latexmk has to adjust its process-
     ing  to deal with a mismatch between the actual output format (out of .pdf,
     .dvi, .xdv) and the initially expected output, if possible.   Latexmk  does
     this provided the following conditions are met.

     The  first is that latexmk's $allow_switch configuration variable is set to
     a non-zero value as it is by default.  If this variable is zero, a mismatch
     of filetypes in the compilation results in an error.

     The second condition for latexmk to be able to handle a  change  of  output
     type  is  that  no explicit requests for .dvi or .ps output files are made.
     Explicit  requests  are  by  the  -dvi  and  -ps,  -print=dvi,   -print=ps,
     -view=dvi,  and  -view=ps  options,  and  by  corresponding settings of the
     $dvi_mode, $postscript_mode, $print_type,  and  $view  configuration  vari-
     ables.   The print-type and view-type restrictions only apply when printing
     and viewing are explicitly requested, respectively.  For this purpose,  the
     use of the -pdfdvi and -pdfps options (and the corresponding setting of the
     $pdf_mode  variable) does not count as an explicit request for the .dvi and
     .ps files; they are merely regarded as a request for making a .pdf file to-
     gether with an initial proposal for the processing route to make it.

     Note that when accommodating a change in output file  type,  there  is  in-
     volved  a  substantial  change in the network of rules that latexmk uses in
     its actions.  The second condition applied to accommodate a  change  is  to
     avoid  situations where the change in the rule network is too radical to be
     readily handled automatically.



CONFIGURATION/INITIALIZATION (RC) FILES
     In this section is explained which configuration files are read by latexmk.
     Subsequent sections "How to Set Variables in Initialization Files", "Format



                                  9 March 2026                                33






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     of Command Specifications", "List of Configuration Variables Usable in Ini-
     tialization Files", "Custom  Dependencies",  and  "Advanced  Configuration"
     give details on what can be configured and how.

     Latexmk  can  be  customized  using initialization files, which are read at
     startup in the following order:

     1) The system RC file, if it exists.
        On a UNIX system, latexmk searches the following directories for a
        system RC file, which may be named either "LatexMk" or "latexmkrc".  The
        directories are searched in the following order, and latexmk uses
        the first such file it finds (if any):
        "/etc",
        "/opt/local/share/latexmk",
        "/usr/local/share/latexmk",
        "/usr/local/lib/latexmk".
        On a MS-Windows system it looks just in "C:\latexmk".
        On a cygwin system (i.e., a MS-Windows system in which Perl is  that  of
     cygwin), latexmk looks in the directories
        "/cygdrive/c/latexmk",
        "/etc",
        "/opt/local/share/latexmk",
        "/usr/local/share/latexmk",
        "/usr/local/lib/latexmk".

     If  the  environment variable LATEXMKRCSYS is set, its value is used as the
     name of the system RC file, instead of any of the above.

     2) The user's RC file, if it exists.  This can be in  one  of  two  places.
     The  traditional  one  is  ".latexmkrc"  in the user's home directory.  The
     other possibility is "latexmk/latexmkrc" in the  user's  XDG  configuration
     home directory.  The actual file read is the first of "$XDG_CONFIG_HOME/la-
     texmk/latexmkrc" or "$HOME/.latexmkrc" which exists.  (See https://specifi-
     cations.freedesktop.org/basedir-spec/basedir-spec-latest.html  for  details
     on the XDG Base Directory Specification.)

     Here $HOME is the user's home directory.  [Latexmk  determines  the  user's
     home  directory  as  follows:   It is the value of the environment variable
     HOME, if this variable exists, which normally is the case on UNIX-like sys-
     tems (including Linux and macOS).  Otherwise the environment variable USER-
     PROFILE is used, if it exists, which normally is  the  case  on  MS-Windows
     systems.  Otherwise  a blank string is used instead of $HOME, in which case
     latexmk does not look for an RC file in it.]

     $XDG_CONFIG_HOME is the value of the environment  variable  XDG_CONFIG_HOME
     if  it  exists.   If this environment variable does not exist, but $HOME is
     non-blank, then $XDG_CONFIG_HOME is set to the default value of $HOME/.con-
     fig.  Otherwise $XDG_CONFIG_HOME is blank, and latexmk does not look for an
     RC file under it.


     3) The RC file in the current working directory.  This file  can  be  named



                                  9 March 2026                                34






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     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 La-
     texmk.  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  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 allows initializa-
     tion code to be specified in latexmk's command line.

      For possible examples of code for in an RC file, see the  directory  exam-
     ple_rcfiles   in   the   distribution  of  latexmk  (e.g.,  at  http://mir-
     ror.ctan.org/support/latexmk/example_rcfiles).


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 files".  (See the
     earlier section "Configuration/Initialization (rc)  Files"  for  the  files
     where  the configurations are done.)  Syntax for setting these variables is
     of the following forms:

                         $bibtex = 'bibtex %O %S';

     for the setting of a string variable,

                         $preview_mode = 1;

     for the setting of a numeric variable, and

                         @default_files = ('paper', 'paper1');

     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 $ charac-
     ter 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 programming language
     brings into play  some  special  rules  for  interpolating  variables  into



                                  9 March 2026                                35






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     strings.   People  not  fluent  in  Perl will want to avoid these complica-
     tions.)

     You can do much more complicated things, but for this you will need to con-
     sult 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 view a
     postscript file.  This section describes some important features of how the
     commands  are  specified.  (Note that some of the possibilities listed here
     do not apply to the $kpsewhich variable; see its documentation.)

     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 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 com-
     mand.  (E.g., if you used the -silent option in the invocation of  latexmk,
     it results in the replacement of %O by "-interaction=batchmode".)

     The available placeholders are:

     %A     basename of the main tex file.  Unlike %R, this is unaffected by the
            setting of a jobname by  the -jobname option or the $jobname config-
            uration value.

     %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 con-
            verting a dvi file to postscript).

     %O     options

     %P     If the variable $pre_tex_code is non-empty, then %P  is  substituted
            by  the  contents of $pre_tex_code followed by \input{SOURCE}, where
            SOURCE stands for the name of the source file.  Appropriate  quoting
            is  done.   This  enables TeX code to be passed to one of the *latex
            engines to be executed before the source file is read.

            If the variable $pre_tex_code  is  the  empty  string,  then  %P  is



                                  9 March 2026                                36






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            equivalent to %S.

     %R     root filename.

            By  default  this is the basename of the main tex file.  However the
            value can be changed by the use of the -jobname option or the  $job-
            name  configuration  variable.   This is then the basename for files
            like the .aux and .log files produced by running *latex, as well for
            the main .dvi, .pdf, .ps and/or .xdvi files.

     %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.

     %U     If  the  variable $pre_tex_code is non-empty, then its value is sub-
            stituted for %U (appropriately quoted).  Otherwise it is replaced by
            a null string.

     %Y     Name of directory for auxiliary output files (see the  configuration
            variable  $aux_dir).   A directory separation character ('/') is ap-
            pended if $aux_dir is non-empty and does not end in a suitable char-
            acter, with suitable characters being those appropriate to UNIX  and
            MS-Windows, i.e., ':', '/' and '\'.   Note that if after initializa-
            tion,  $out_dir is set, but $aux_dir is not set (i.e., it is blank),
            then latexmk sets $aux_dir to the same value $out_dir.

     %Z     Name  of  directory for output files (see the configuration variable
            $out_dir).  A directory separation character ('/')  is  appended  if
            $out_dir is non-empty and does not end in a suitable character, with
            suitable  characters being those appropriate to UNIX and MS-Windows,
            i.e., ':', '/' and '\'

     If for some reason you need a literal % character in your string  not  sub-
     ject to the above rules, use "%%".

     Appropriate  quoting  will be applied to the filename substitutions, so you
     mustn't supply them yourself even if the names of your files have spaces in
     them.  (But if your TeX filenames have spaces in  them,  beware  that  some
     older  versions  of  the TeX program cannot correctly handle filenames con-
     taining 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.

     See  the default values in the section "List of configuration variables us-
     able in initialization files" for what is normally the most appropriate us-
     age.

     If you omit to supply any placeholders whatever in the specification  of  a
     command,  latexmk  will  supply  what its author thinks are appropriate de-
     faults.  This gives compatibility with  configuration  files  for  previous
     versions of latexmk, which didn't use placeholders.



                                  9 March 2026                                37






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     "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 de-
     tached, 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 ef-
     fect 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 sys-
     tem.

     Notes: (1) In some circumstances, latexmk will always  run  a  command  de-
     tached.  This is the case for a previewer in preview continuous mode, since
     otherwise  previewing  continuously makes no sense.  (2) This precludes 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.

     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';
          $pdf_previewer = 'start  "c:/Program  Files/SumatraPDF/SumatraPDF.exe"
     %O %S';
          $pdf_previewer   =  'start  "c:/Program  Files/SumatraPDF  (x86)/Suma-
     traPDF.exe" %O %S';


     (Note about the above example: Under MS-Windows forward slashes are equiva-
     lent to backslashes in a filename under almost all circumstances,  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 language.)

     Command names under Cygwin: If latexmk is executed by  Cygwin's  Perl,   be
     particularly  certain  that  pathnames in commands have forward slashes not
     the usual backslashes for the separator of pathname  components.   See  the
     above  examples.   Backslashes  often  get misinterpreted by the Unix shell
     used by Cygwin's Perl to execute external commands.  Forward slashes  don't
     suffer  from  this problem, and (when quoted, as above) are equally accept-
     able to MS-Windows.

     Using MS-Windows file associations: A useful trick under modern versions of
     MS-Windows (e.g., WinXP) is to use just the command 'start' by itself:




                                  9 March 2026                                38






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



          $dvi_previewer = 'start %S';

     Under MS-Windows, this will cause to be run whatever program the system has
     associated with dvi files.  (The same applies for a postscript viewer and a
     pdf viewer.)  But note that this trick is not always suitable for  the  pdf
     previwer,  if  your system has acroread for the default pdf viewer.  As ex-
     plained elsewhere, acroread under MS-Windows does not work well with  latex
     and latexmk, because acroread locks the pdf file.

     Not  using  a  certain  command: If a command is not to be run, the command
     name NONE is used, as in

          $lpr  = 'NONE lpr';

     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 com-
     mand.  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';

     Running  a  subroutine  instead of an external command: Use a specification
     starting with "internal", as in

          $latex = 'internal mylatex %O %S';
          sub mylatex {
              my @args = @_;
              # Possible preprocessing here
              return system 'latex', @args;
          }

     For some of the more exotic possibilities that then become  available,  see
     the  section  "Advanced  configuration:  Some  extra resources and advanced
     tricks". Also see some of the examples in the directory example_rcfiles  in
     the latexmk distribution.

     Advanced  tricks:  Normally one specifies a single command for the commands
     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.

     You can also use a Perl subroutine instead of a script -- see above.   This
     is generally the most flexible and portable solution.

     It is also possible to configure latexmk to run multiple commands.  For ex-
     ample,  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  process-
     ing, you could do something like:



                                  9 March 2026                                39






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



          $pdflatex = 'pdflatex --shell-escape %O %S; pst2pdf_for_latexmk %B';

     This  definition  assumes  you are using a UNIX-like system (which includes
     Linux and macOS), so that the two commands to be run are separated  by  the
     semicolon in the middle of the string.

     If you are using MS-Windows, you would replace the above line by

        $pdflatex = 'cmd /c pdflatex --shell-escape %O %S'
                    . '&& pst2pdf_for_latexmk %B';

     Here,  the  UNIX command separator ; is replaced by &&.  In addition, there
     is a problem that some versions of Perl on MS-Windows do not obey the  com-
     mand separator; this problem is overcome by explicitly invoking the MS-Win-
     dows command-line processor cmd.exe.


LIST OF CONFIGURATION VARIABLES USABLE IN INITIALIZATION FILES
     In this section are specified the variables whose values can be adjusted to
     configure  latexmk.  (See the earlier section "Configuration/Initialization
     (rc) Files" for the files where the configurations are done.)

     Default values are indicated in brackets.  Note that for variables that are
     boolean in character, concerning whether latexmk does or does not behave in
     a certain way, a non-zero value, normally 1, indicates true, i.e., the  be-
     havior occurs, while a zero value indicates a false value, i.e., the behav-
     ior does not occur.


     $allow_subdir_creation [1]

            Specify  action  to take when message(s) in the .log file indicate a
            failure of an attempt by a *latex compilation to write a file  to  a
            subdirectory of the output directory because the subdirectory didn't
            exist.

            If the value if $allow_subdir_creation is 0, no action is taken.  If
            it is 1, then the appropriate subdirectory is created and a rerun of
            *latex  is  triggered, but only if the file being written is an .aux
            file.  (This happens, for example, if the document includes  a  file
            from  a subdirectory of the document directory, by the \include com-
            mand.  If the value of $allow_subdir_creation is 2, then the  subdi-
            rectory  creation  is done independently of which type of file is in
            question.


     $allow_switch [1]

            This controls what happens  when  the  output  extension  of  latex,
            pdflatex,  lualatex  or xelatex differs from what is expected.  (The
            possible extensions are .dvi, .pdf, .xdv.)  This can happen with the
            use of the \pdfoutput macro in a document compiled  under  latex  or



                                  9 March 2026                                40






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            pdflatex,  or  with the use of the \outputmode macro under lualatex.
            It can also happen with certain kinds of incorrect configuration.

            In such a case, latexmk can  appropriately  adjust  its  network  of
            rules.  The adjustment is made if $allow_switch is on, and if no re-
            quest for a dvi or ps file has been made.

            See the section ALLOWING FOR CHANGE OF OUTPUT EXTENSION.


     $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  to
            dvips, dvipdf, and ps2pdf operations, and the filtering operators on
            .dvi  and  .ps files.  It does not apply to pdflatex, unfortunately,
            since pdflatex provides no way of specifying a chosen name  for  the
            output file.)

            This  use  of  a  temporary file solves a problem that the making of
            these files can occupy a substantial time.  If a viewer (notably gv)
            sees that the file has changed, it may read the new file before  the
            program  writing  the file has not yet finished its work, which  can
            cause havoc.

            See the $pvc_view_file_via_temporary variable for a setting that ap-
            plies only if preview-continuous mode (-pvc option)  is  used.   See
            $tmpdir for the setting of the directory where the temporary file is
            created.


     $analyze_input_log_always [1]

            After  a  run of latex (etc), always analyze .log for input files in
            the <...> and (...) constructions.  Otherwise, only do the  analysis
            when fls file doesn't exist or is out of date.

            Under  normal  circumstances,  the data in the fls file is reliable,
            and the test of the log file gets lots of false  positives;  usually
            $analyze_input_log_always  is best set to zero.  But the test of the
            log file is needed at least in the following situation: When a  user
            needs  to persuade latexmk that a certain file is a source file, and
            latexmk doesn't otherwise find it.  Then the  user  can  write  code
            that causes a line with (...) to be written to log file.  One impor-
            tant  case  is  for lualatex, which doesn't always generate lines in
            the .fls file for input lua files.  (The situation with lualatex  is
            HIGHLY  version  dependent,  e.g.,  there  was  a big change between
            TeXLive 2016 and TeXLive 2017.)

            To keep backward compatibility with older versions of  latexmk,  the
            default is to set $analyze_input_log_always to 1.





                                  9 March 2026                                41






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     $auto_rc_use [1]
            Whether  to  automatically  read  the  standard  initialization (rc)
            files, which are the system RC file, the user's RC file, and the  RC
            file in the current directory.  The command line option -norc can be
            used  to  turn  this setting off.  Each RC file could also turn this
            setting off, i.e., it could set $auto_rc_use to zero to prevent  au-
            tomatic reading of the later RC files.

            This  variable  does not affect the reading of RC files specified on
            the command line by the -r option.

     $aux_dir [""]
            The aux directory, i.e., the  directory  in  which  auxiliary  files
            (aux, log, etc) are to be written by a run of *latex.

            If this variable is not set, but $out_dir is set, then latexmk takes
            the  aux directory to equal the output directory which is the direc-
            tory to which final output files are to be written.

            If neither variable is set, then the current directory  when  *latex
            is invoked is used both for the aux and output directories.

            If  the aux and output directories are distinct, then the aux direc-
            tory contains all generated files with the exception of "final  out-
            put  files",  which are defined to be .dvi, .ps, .pdf, .synctex, and
            .synctex.gz files.

            See the section AUXILIARY AND OUTPUT DIRECTORIES for more details.



     $aux_out_dir_report [0]
            If this variable is set to 1, then prior to the processing  of  each
            primary .tex file, list the settings for aux and output directories,
            after  they  have been normalized from the settings specified during
            initialization.

            This report gives a reminder of where to look for generated files.

            The report is done per primary .tex file, because of possible direc-
            tory changes for each file (when the -cd option is  used).   In  the
            simplest cases, the directory names are the same as originally spec-
            ified.   But  in  general  some clean up/normalization is performed;
            this helps performance and cleans up output to the screen.

            If this variable is set to 2, then halt after reporting the settings
            for the aux and out directories, rather than  continuing  with  pro-
            cessing  of tex files.  This setting is primarily used for debugging
            configuration issues.  See the -dir-report-only option.






                                  9 March 2026                                42






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     $bad_warning_is_error [0]
            Whether to treat bad warnings reported by *latex in log file as  er-
            rors.  The  specifications of the warning messages are in @bad_warn-
            ings.


     @bad_warnings
            Array of regular expressions specifying messages in  log  file  that
            are officially treated as warnings rather than errors by *latex, but
            which a user may treat as errors: See $bad_warning_is_error.

            Currently  the default set of these warnings is those about \end oc-
            curring inside constructs.


     $banner [0]
            If nonzero, the banner message is printed across each page when con-
            verting 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 and
            the  postscript  file  is always generated, even if it is newer than
            the dvi file.

     $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 black, 1
            is white.  The default is just right if your toner  cartridge  isn't
            running too low.

     $banner_message ["DRAFT"]
            The banner message to print across each page when converting the 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 De-
            fault 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  di-
            rectories  where  latexmk should look for .bib files.  By default it
            is set from the BIBINPUTS environment variable of the operating sys-
            tem.  If that environment variable is not set, a single element list
            consisting of the current directory is set.  The format of  the  di-
            rectory names depends on your operating system, of course.  Examples
            for setting this variable are:

                    @BIBINPUTS = ( ".", "C:\\bibfiles" );



                                  9 March 2026                                43






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



                    @BIBINPUTS = ( ".", "\\server\bibfiles" );
                    @BIBINPUTS = ( ".", "C:/bibfiles" );
                    @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 Perl's rules for writing
            strings. Generally, it is simplest always to use forward slashes in-
            stead of backward slashes.

            Important note: This variable is now mostly obsolete in the  current
            version  of  latexmk, since it now uses 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 @BIBINPUTS.


     $biber ["biber %O %S"]
            The biber processing program.


     $biber_silent_switch ["--onlylog"]
            Switch(es) for the biber processing program when silent mode is on.

     $bibtex ["bibtex %O %S"]
            The BibTeX processing program.

     $bibtex_fudge [1]
            When using bibtex, whether to change directory  to  $aux_dir  before
            running bibtex.

            The need arises as follows:

            a.  With  bibtex before about 2019, if the filename given to it con-
            tains a path component, there was a bug that bibtex would  not  find
            extra aux files, as produced by the \include command in TeX.

            b.  With all moderately recent versions of bibtex, bibtex may refuse
            to write its bbl and blg files, for security  reasons,  for  certain
            cases of the path component of the filename given to it.

            However, there are also rare cases where the change-directory method
            prevents  bibtex  from  finding certain bib or bst files. Then $bib-
            tex_fudge needs to be set to 0.


     $bibtex_silent_switch ["-terse"]
            Switch(es) for the BibTeX processing program when silent mode is on.





                                  9 March 2026                                44






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     $bibtex_use [1]
            Under what conditions to run bibtex or biber.  When latexmk  discov-
            ers from the log file that one (or more) bibtex/biber-generated bib-
            liographies are used, it can run bibtex or biber whenever it appears
            necessary  to regenerate the bbl file(s) from their source bib data-
            base 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
            variable $bibtex_use controls whether this happens,  and  also  con-
            trols whether or not .bbl files are deleted in a cleanup operation.

            The possible values of $bibtex_use are:
              0:  never  use  bibtex  or  biber;  never  delete  .bbl files in a
            cleanup.
              1: only use bibtex or biber if the bib file(s) exist; never
              delete .bbl files in a cleanup.
              1.5: only use bibtex or biber if the bib files exist;
              conditionally delete .bbl files in a cleanup  (i.e.,  delete  them
            only when
              the bib files all exist).
              2: run bibtex or biber whenever it appears necessary to update the
            bbl file(s), without testing for the existence of the bib files; al-
            ways delete .bbl files in a cleanup.

            Note:  When  biber  is  being  used, conditional use of biber can be
            problematic.  From latexmk's point of view the problem is  that  be-
            cause  of  how biber works, a full knowledge of its source files can
            only be obtained after running biber.  In contrast, for bibtex, full
            information on which bib files are used is obtained  from  the  .aux
            file(s) after a run of *latex.  But for biber, the corresponding in-
            formation  is  somewhat incomplete; this the information obtained in
            the .bcf file that is generated by the biblatex package during a run
            of *latex.


     $cleanup_includes_cusdep_generated [0]
            If nonzero, specifies that cleanup also deletes files that are  gen-
            erated 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  de-
            tected  in the fls file (or failing that, in log file) as being gen-
            erated.  It will also include files made from these first generation
            generated files.

            This operation is somewhat dangerous, and can have unintended conse-
            quences, since the files to be deleted are determined  from  a  file
            created   by   *latex,  which  can  contain  erroneous  information.



                                  9 March 2026                                45






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            Therefore this variable is turned off by default, and then files  to
            be  deleted are restricted to those explicitly specified by patterns
            configured in the variables clean_ext, clean_full_ext,  and  @gener-
            ated_exts.   Standard  cases  (e.g., .log files) appear in latexmk's
            initial value for the array @generated_exts.

     $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  specified
            by the $clean_ext, $clean_full_ext and @generated_exts variables.)

            This  variable  is  equivalent to specifying one of the -c or -C op-
            tions.  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 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, and it is
            also possible to use wildcards.  Thus setting

                $clean_ext  =   "out   %R-blx.bib   %R-figures*.log   pythontex-
            files-%R/*";

            in  an initialization file will imply that when a clean-up operation
            is specified, not only is the standard set  of  files  deleted,  but
            also  files  of the form FOO.out, FOO-blx.bib, FOO-figures*.log, and
            pythontex-files-FOO/*, where FOO stands for the basename of the file
            being processed (as in FOO.tex).

            Most of the files to be deleted are relative to the directory speci-
            fied by $aux_dir.  Note that if $out_dir but not  $aux_dir  is  set,
            then in its initialization, latexmk sets $aux_dir equal to $out_dir.
            A normal situation is therefore that $aux_dir equals $out_dir, which
            is the only case directly supported by TeXLive, unlike MiKTeX.  Note
            that even with TeXLive latexmk does now support different values for
            the directories -- see the explanation of the $emulate_aux variable.

            If  $out_dir  and  $aux_dir  different, latexmk actually deletes any
            files of the specified names in both $aux_dir and $out_dir; this  is
            because  under  certain  error  conditions,  the files may be put in
            $out_dir instead of $aux_dir.  This also handles the case of  delet-
            ing any fls file, since that file is in $out_dir.

            The  filenames specified for a clean-up operation can refer not only
            to regular files but also  to  directories.   Directories  are  only
            deleted  if  they  are  empty.   An  example of an application is to
            pythontex, which creates files in a particular directory.   You  can



                                  9 March 2026                                46






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            arrange to remove both the files and the directory by setting

                $clean_ext = "pythontex-files-%R/* pythontex-files-%R";

            See  also  the  (array) variable @generated_exts.  In the past, this
            variable had certain uses beyond that of $clean_ext.  But now,  they
            accomplish the same things.  In fact, after initialization including
            the  processing  of command line options, latexmk simply appends the
            list of extensions in $clean_ext to the array @generated_exts.

     $clean_full_ext [""]
            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.

            More general patterns are allowed, as for $clean_ext.

            The files specified by $clean_full_ext to be deleted are relative to
            the directory specified by $out_dir.


     $compiling_cmd [""], $failure_cmd [""], $warning_cmd [""], $success_cmd
     [""]

            These variables specify commands that are executed at certain points
            of compilations.  One motivation for their  existence  is  to  allow
            very useful convenient visual indications of compilation status even
            when  the  window  receiving the screen output of the compilation is
            hidden.  This is particularly useful in preview-continuous mode.

            The commands are executed at the following points: $compiling_cmd at
            the start of compilation, $success_cmd at the end  of  a  completely
            successful  compilation,  $failure_cmd at the end of an unsuccessful
            compilation, $warning_cmd at the of an otherwise successful compila-
            tion that gives warnings about undefined citations or references  or
            about  multiply defined references. If any of above variables is un-
            defined or blank (the default  situation),  then  the  corresponding
            command is not executed.

            However,  when $warning_cmd is not set, then in the case of a compi-
            lation with warnings about references  or  citations,  but  with  no
            other  error,  one  or other of $success_cmd or $failure_cmd is used
            (if it is set) according to the setting of $warnings_as_errors.

            An example of a simple setting of these variables is as follows

                $compiling_cmd = "xdotool search --name \"%D\" set_window --name
            \"%D compiling\"";
                $success_cmd   = "xdotool search --name \"%D\" set_window --name
            \"%D OK\"";
                $warning_cmd   = "xdotool search --name \"%D\" ".
                                 "set_window --name \"%D CITE/REF ISSUE\"";



                                  9 March 2026                                47






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



                $failure_cmd   = "xdotool search --name \"%D\" set_window --name
            \"%D FAILURE\"";

            These assume that the program xdotool is installed,  that  the  pre-
            viewer  is  using an X-Window system for display, and that the title
            of the window contains the name of the displayed file,  as  it  nor-
            mally  does.  When the commands are executed, the placeholder string
            %D is replaced by the name of the destination  file,  which  is  the
            previewed  file.  The above commands result in an appropriate string
            being appended to the filename in the window title: " compiling",  "
            OK", or " FAILURE".

            Other  placeholders that can be used are %S, %T, and %R, with %S and
            %T normally being identical. These  can  be  useful  for  a  command
            changing  the  title  of the edit window. The visual indication in a
            window title can useful, since the user does not have to keep shift-
            ing attention to the (possibly hidden) compilation  window  to  know
            the status of the compilation.

            More  complicated  situations can best be handled by defining a Perl
            subroutine to invoke the necessary commands, and using  the  "inter-
            nal" keyword in the definitions to get the subroutine to be invoked.
            (See  the  section  "Format of Command Specifications" for how to do
            this.)

            Naturally, the above settings that invoke the  xdotool  program  are
            only  applicable  when  the X-Window system is used for the relevant
            window(s).  For other cases, you will have to find what software so-
            lutions are available.


     @cus_dep_list [()]
            Custom dependency list -- see section on "Custom Dependencies".

     @default_excluded_files [()]
            When latexmk is invoked with no files specified on the command line,
            then, by default, it will process all files in the current directory
            with the extension .tex.  (In general, it  will  process  the  files
            specified in the @default_files variable.)

            But sometimes you want to exclude particular files from this default
            list.   In that case you can specify the excluded files in the array
            @default_excluded_files.  For example if you wanted to  process  all
            .tex  files with the exception of common.tex, which is a not a stan-
            dard alone LaTeX file but a file input by some or all of the others,
            you could do

                 @default_files = ("*.tex");

                 @default_excluded_files = ("common.tex");

            If you have a variable or large number of  files  to  be  processed,



                                  9 March 2026                                48






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            this  method  saves  you  from having to list them in detail in @de-
            fault_files and having to update the list every time you change  the
            set of files to be processed.

            Notes: 1. This variable has no effect except when no files are spec-
            ified on the latexmk command line.  2. Wildcards are allowed in @de-
            fault_excluded_files.

     @default_files [("*.tex")]
            Default list of files to be processed.

            If no filenames are specified on the command line, latexmk processes
            all tex files specified in the @default_files variable, which by de-
            fault  is  set  to all tex files ("*.tex") in the current directory.
            This is a convenience: just run latexmk and it will process  an  ap-
            propriate  set  of files.  But sometimes you want only some of these
            files to be processed.  In this case you can list the  files  to  be
            processed by setting @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 set-
            ting @default_files are processed.

            Three examples:

                 @default_files = ("paper_current");

                 @default_files = ("paper1", "paper2.tex");

                 @default_files = ("*.tex", "*.dtx");

            Note that more than file may be given, and that the  default  exten-
            sion  is  ".tex".   Wild cards are allowed.  The parentheses are be-
            cause @default_files is an array variable, i.e., a sequence of file-
            name specifications is possible.

            If you want latexmk to process all .tex files with a few exceptions,
            see the @default_excluded_files array variable.

     $dependents_phony [0]
            If a list  of  dependencies  is  output,  this  variable  determines
            whether  to include a phony target for each source file.  If you use
            the dependents list in a Makefile, the dummy rules work  around  er-
            rors  make  gives  if  you  remove header files without updating the
            Makefile to match.

     $dependents_list [0]
            Whether to display a list(s) of dependencies at the end of a run.


     $deps_escape ["none"]
            This variable determines which kind of escaping of space  characters
            to  use in dependency lists. The possible values are "none", "unix",



                                  9 March 2026                                49






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            "nmake", corresponding respectively to no escaping, escaping with  a
            "\" suitable for standard Unix make, and escaping with "^", suitable
            for Microsoft's nmake.

            Currently  the only character escaped is a space, since that is par-
            ticularly common in file names and directory names.  There are other
            characters that would need escaping if a dependency list  is  to  be
            used  as-is by a make program; but those characters (e.g., "$") com-
            monly cause difficulties when used for  .tex  documents.   Moreover,
            the  detailed  rules for which characters need to be escaped depends
            on the version of make.


     $deps_file ["-"]
            Name of file to receive list(s) of dependencies at the end of a run,
            to be used if $dependents_list is set.  If the filename is "-", then
            the dependency list is set to stdout (i.e., normally the screen).


     $do_cd [0]
            Whether to change working directory to the directory  specified  for
            the  main source file before processing it.  The default behavior is
            not to do this, which is the same as the  behavior  of  *latex  pro-
            grams.   This  variable  is  set  by the -cd and -cd- options on la-
            texmk's command line.

     $dvi_filter [empty]
            The dvi file filter to be run on the newly produced dvi file  before
            other processing.  Equivalent to specifying the -dF option.


     $dvilualatex ["dvilualatex %O %S"]
            Specifies  the command line to invoke the dvilualatex program.  Note
            that as with other programs, you can use this variable not  just  to
            change the name of the program used, but also specify options to the
            program.  E.g.,

                                $dvilualatex  =  "dvilualatex  --src-specials %O
            %S";

            To do a coordinated setting of all of $dvilualatex,  $hilatex,  $la-
            tex,  $pdflatex,  $lualatex, and $xelatex, see the section "Advanced
            Configuration".


     $dvi_mode [See below for default]
            If one, generate a dvi version of the  document  by  use  of  latex.
            Equivalent to the -dvi option.

            If  2, generate a dvi version of the document by use of dvilualatex.
            Equivalent to the -dvilua option.




                                  9 March 2026                                50






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            The variable $dvi_mode defaults to 0, but if  no  explicit  requests
            are  made  for other types of file (postscript, pdf), then $dvi_mode
            will be set to 1.  In addition, if a request for a file for which  a
            .dvi file is a prerequisite and $dvi_mode is zero, then $dvi_mode is
            set to 1.



     $dvilualatex_silent_switch ["-interaction=batchmode"]
            Switch(es)  for  the  dvilualatex program (specified in the variable
            $dvilualatex) when silent mode is on.

            See details of the $latex_silent_switch for other  information  that
            equally applies to $dvilualatex_silent_switch.


     $dvi_previewer ["start xdvi %O %S" under UNIX]
            The  command  to  invoke a dvi-previewer.  [Under MS-Windows the de-
            fault is "start"; then latexmk arranges to use the MS-Windows  start
            program,  which will cause to be run whatever command the system has
            associated with .dvi files.]

            Important note: Normally you will want to have a previewer  run  de-
            tached,  so that latexmk doesn't wait for the previewer to terminate
            before continuing its work.  So normally you should prefix the  com-
            mand  by  "start ", which flags to latexmk that it should do the de-
            taching of the previewer itself (by whatever method  is  appropriate
            to  the operating system).  But sometimes letting latexmk do the de-
            taching is not appropriate (for a variety of  non-trivial  reasons),
            so  you  should  put  the  "start  " bit in yourself, whenever it is
            needed.

     $dvi_previewer_landscape ["start xdvi %O %S"]
            The command to invoke a dvi-previewer in landscape mode.  [Under MS-
            Windows the default is "start"; then latexmk arranges to use the MS-
            Windows start program, which will cause to be run  whatever  command
            the system has associated with .dvi files.]

     $dvipdf ["dvipdf -dALLOWPSTRANSPARENCY %O %S %D" under UNIX]
            Command to convert .dvi to .pdf file.

            Under  Windows,  the default is "dvips -P pdf -o - %S | ps2pdf -sDE-
            VICE=pdfwrite -dALLOWPSTRANSPARENCY %O - %D".  The reason  for  this
            difference  is  that  the  implementation of Ghostscript provided by
            Windows distributions of TeX only provides the ps2pdf  program,  but
            not dvipdf, unlike the case with typical UNIX Ghostscript packages.

            A  common reconfiguration is to use the dvipdfm command, which needs
            its arguments in a different order:

                 $dvipdf = "dvipdfm %O -o %D %S";




                                  9 March 2026                                51






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     $dvipdf_silent_switch ["-q"]
            Switch(es) for dvipdf program when silent mode is on.

            N.B. The standard dvipdf program runs silently, so adding the silent
            switch has no effect, but is actually innocuous.  But if an alterna-
            tive program is used, e.g., dvipdfmx, then the silent switch has  an
            effect.  The default setting is correct for dvipdfm and dvipdfmx.

     $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  variable -- see below -- will be included in
            the options substituted for "%O".

     $dvips_landscape ["dvips -tlandscape %O -o %D %S"]
            The program to used as a filter to convert a .dvi file to a .ps file
            in landscape mode.

     $dvips_pdf_switch ["-P pdf"]
            Switch(es) for dvips program when pdf file is to be  generated  from
            .ps file.

     $dvips_silent_switch ["-q"]
            Switch(es) for dvips program when silent mode is on.

     $dvi_update_command [""]
            When  the  dvi  previewer is set to be updated by running a command,
            this is the command that is run.  See the information for the  vari-
            able $dvi_update_method for further information, and see information
            on  the variable $pdf_update_method for an example for the analogous
            case of a pdf previewer.

     $dvi_update_method [2 under UNIX, 1 under MS-Windows]
            How the dvi viewer  updates  its  display  when  the  dvi  file  has
            changed.   The  values  here apply equally to the $pdf_update_method
            and to the $ps_update_method variables.
                0 => update is automatic,
                1=> manual update by user, which may only mean a mouse click  on
            the viewer's window or may mean a more serious action.
                2  =>  Send the signal, whose number is in the variable $dvi_up-
            date_signal.  The default value under UNIX is suitable for xdvi.
                3 => Viewer cannot do an update, because it locks the file.  (As
            with acroread under MS-Windows.)
                4  =>  run a command to do the update.  The command is specified
            by the variable $dvi_update_command.

            See information on the variable $pdf_update_method for an example of
            updating by command.

     $dvi_update_signal [Under UNIX: SIGUSR1, which is a system-dependent value]
            The number of the signal that is sent to the dvi viewer when  it  is
            updated  by  sending a signal -- see the information on the variable



                                  9 March 2026                                52






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            $dvi_update_method.  The default value is the  one  appropriate  for
            xdvi on a UNIX system.

     $emulate_aux [1]
            Whether  to  emulate  the  use  of  aux  directory when $aux_dir and
            $out_dir are different, rather than using the -aux-directory  option
            for  the  *latex  programs.   (MiKTeX  supports  -aux-directory, but
            TeXLive doesn't.)

            If you use a version of *latex that doesn't support  -aux-directory,
            e.g.,  TeXLive,  latexmk will automatically switch aux_dir emulation
            on after the first run of *latex, because it will find the .log file
            in the wrong place.  But it is better to set $emulate_aux to 1 in an
            rc file, or equivalently to use the  -emulate-aux-dir  option.  This
            emulation mode works equally well with MiKTeX.

            Aux  directory emulation means that when *latex is invoked, the out-
            put directory provided to *latex is set to be the desired aux direc-
            tory. After that, any files that need to be in the output  directory
            will be moved there by latexmk. (These are the files with extensions
            .dvi,  .ps,  .pdf, .synctex, .synctex.gz, and, depending on the set-
            ting of the $fls_uses_out_dir variable, also the .fls file.)


     $failure_cmd [undefined]
            See the documentation for $compiling_cmd.


     $fdb_ext ["fdb_latexmk"]
            The extension of the file which latexmk generates to contain a data-
            base of information on source files.  You will not normally need  to
            change this.


     @file_not_found
            This  an array of Perl regular expressions that are patterns to find
            messages in the .log file from a run of *latex that indicate that  a
            file  was looked for and not found.  To see the current default set,
            you should look at the definition  of  @file_not_found  in  the  la-
            texmk.pl file.

            In  the  regular  expression, the string for the name of the missing
            file should be enclosed in parentheses.  That carries  the  implica-
            tion  that after latexmk gets a successful match to the pattern, the
            variable $1 is set to the filename, which is then picked up  by  la-
            texmk.

            If  you happen to encounter a package that gives a missing file mes-
            sage of a different form than one that matches one of  the  built-in
            patterns,  you  can  add  another  pattern to the array.  An example
            would be




                                  9 March 2026                                53






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



                push @file_not_found, '^No file\\s+(.+)\\s*$';

            The regular expression itself is

                 ^Missing file\s+(.+)\s*$

            But the corresponding string specification in the push statement has
            to have the backslashes doubled.

            This regular expression matches a line that starts with  'No  file',
            then  has  one  or  more  white space characters, then any number of
            characters forming the filename, then possible white space, and  fi-
            nally  the  end of the line.  (See documentation on Perl regular ex-
            pressions for details.)


     $filetime_causality_threshold [5]
            The use of this variable is as follows:  At a number of places,  la-
            texmk needs to determine whether a particular file has been produced
            during a just-concluded run of some rule/program or is leftover from
            a  previous run. (An example is the production of a .bcf file by the
            biblatex package during a run of *latex to provide bibliographic in-
            formation to the biber program.  If a .bcf file is not produced dur-
            ing a current run of *latex, but is leftover from  a  previous  run,
            then  latexmk  has to conclude that the .tex document has changed so
            that biber is no longer to be used.)

            Latexmk's criterion that a file has been produced during  a  run  is
            that  the modification time of the file is more recent than the sys-
            tem time at the beginning of the run.  Bascially, if  the  modifica-
            tion  time is earlier than this, then it is a leftover from a previ-
            ous run.  However, a naive use of the  criterion  can,  among  other
            things, run afoul of the granularity of how file times are stored in
            some  file systems, which means it is possible that the filesystem's
            reported time for a file might be a second or more earlier than  the
            actual modification time, the exact difference being quite random.

            The  variable  $filetime_causality_threshold  allows  an  appopriate
            sloppiness in latexmk's use of file modification time.   It  can  be
            quite  generous;  it  should  merely  be less than the time scale on
            which a human user makes changes to source files for a document  (or
            to configuration files, etc).


     $fls_uses_out_dir [0]
            This  variable  determines whether or not the .fls file should be in
            the output directory instead of the natural directory, which is  the
            aux  directory.   If the variable is nonzero, the .fls file is to be
            in the output directory.  See the section AUXILIARY AND  OUTPUT  DI-
            RECTORIES  for  more details about these directories.  The rationale
            for the existence of the  variable  $fls_uses_aux_dir  is  explained
            there.



                                  9 March 2026                                54






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            In  all cases, if latexmk finds that an .fls file has been generated
            in the opposite directory to the one specified by $fls_uses_out_dir,
            it copies the file to the other directory (aux or  output  directory
            as  appropriate).   The  file is copied rather than simply moved, to
            avoid potential clashes with other software that  assumes  the  .fls
            file is generated in the directory it was written to by *latex. Thus
            the  effect  an  incorrect  setting  of $fls_uses_out_dir is only to
            cause a superfluous copy of the .fls file to be generated.


     $force_mode [0]
            If nonzero, continue processing past minor  latex  errors  including
            unrecognized  cross references.  Equivalent to specifying the -f op-
            tion.


     @generated_exts [( 'aux', 'bcf', 'fls', 'idx', 'ind', 'lof', 'lot', 'out',
     'toc', 'blg', 'ilg', 'log', 'xdv' )]

            This contains a list of extensions for files that are generated dur-
            ing processing, and that should be deleted during a  main  clean  up
            operation, as invoked by the command line option -c.  (The use of -C
            or -gg gives this clean up and more.)

            The  default  values  are extensions for standard files generated by
            *latex, bibtex, and the like.  (Note that the clean up also  deletes
            the fdb_latexmk file, but that's separately coded into latexmk, cur-
            rently.)

            After  initialization  of  latexmk and the processing of its command
            line, the items in clean_ext are appended  to  @generated_exts.   So
            these  two  variables  have the same meaning (contrary to older ver-
            sions of latexmk).

            The items in @generated_exts are normally extensions of files, whose
            base name is the same as the main tex file.  But it is also possible
            to specify patterns including that basename --- see the  explanation
            of the variable $clean_ext.

            In addition to specifying files to be deleted in a clean up, latexmk
            uses  the same specification to assist its examination of changes in
            source files: Under some situations it needs to find  those  changes
            in  files  (since a previous run) that are expected to be due to the
            user editing a file.  This contrasts with the cases  of  files  that
            are  generated  by  some program run by latexmk and that differ from
            the results of the previous run.  This  use  of  @generated_exts  is
            normally  unimportant,  given  the usual accuracy of latexmk's other
            ways of determining these generated files.

            A convenient way to add an extra extension to the list, without los-
            ing the already defined ones is to use a push command in the line in
            an RC file.  E.g.,



                                  9 March 2026                                55






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



                            push @generated_exts, "end";

            adds the extension "end" to the list of predefined generated  exten-
            sions.  (This extension is used by the RevTeX package, for example.)


     $go_mode [0]
            If  this  variable equals zero, process files as usual, only running
            rules when they are determined to be out-of-date.  This  is  equiva-
            lent to the -g- option.

            If this variable equals one, force latexmk to run each rule at least
            once,  even under situations whre latexmk would normally decide that
            no changes in the source files have occurred since the previous run.
            This behavior is useful, for example, if you change  the  configura-
            tion  and wish to reprocess all files.  This is equivalent to the -g
            option.

            If this variable equals two, perform a full clean up, as if  the  -C
            had been given, and then process normally from a clean initial situ-
            ation.   This is equivalent to the -gg option for "super go mode" or
            "clean make".

            If this variable equals three, require at least one run  of  *latex.
            I.e., process as normal, except that initially, the *latex rule that
            is  in  use  is set to be out-of-date, independently of the state of
            the files.  This is equivalent to the -gt option.


     %hash_calc_ignore_pattern
            !!!This variable is for experts only!!!

            The general rule latexmk uses for determining when an extra  run  of
            some  program is needed is that one of the source files has changed.
            But consider for example a latex package that causes an encapsulated
            postscript file (an "eps" file) to be made that is to be read in  on
            the  next run.  The file contains a comment line giving its creation
            date and time.  On the next run the time changes,  latex  sees  that
            the  eps  file has changed, and therefore reruns latex.  This causes
            an infinite loop, that is only  terminated  because  latexmk  has  a
            limit  on  the  number  of runs to guard against pathological situa-
            tions.

            But the changing line has no real effect, since  it  is  a  comment.
            You can instruct latex to ignore the offending line as follows:

               $hash_calc_ignore_pattern{'eps'} = '^%%CreationDate: ';

            This creates a rule for files with extension .eps about lines to ig-
            nore.   The  left-hand side is a Perl idiom for setting an item in a
            hash.  Note that the file extension is specified without  a  period.
            The  value, on the right-hand side, is a string containing a regular



                                  9 March 2026                                56






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            expression.  (See documentation on Perl for how they are to be spec-
            ified in general.)  This  particular  regular  expression  specifies
            that  lines  beginning  with "%%CreationDate: " are to be ignored in
            deciding whether a file of the given extension .eps has changed.

            To ignore all changes in files of a given type, use a  pattern  that
            matches all lines, e.g.,

               $hash_calc_ignore_pattern{'tkz'} = '^';

            There  is  only one regular expression available for each extension.
            If you need more one pattern to specify lines to  ignore,  then  you
            need  to combine the patterns into a single regular expression.  The
            simplest method is separate the different simple patterns by a  ver-
            tical bar character (indicating "alternation" in the jargon of regu-
            lar expressions).  For example,

               $hash_calc_ignore_pattern{'eps'}  =  '^%%CreationDate: |^%%Title:
            ';

            causes lines starting with either "^%%CreationDate: " or  "^%%Title:
            " to be ignored.

            It  may happen that a pattern to be ignored is specified in, for ex-
            ample, in a system or user initialization file, and you wish to  re-
            move  this in a file that is read later.  To do this, you use Perl's
            delete function, e.g.,

                delete $hash_calc_ignore_pattern{'eps'};


     $hilatex ["hilatex %O %S"]
            specifies the command line for the hilatex program.


     $hnt_mode [0]
            Whether to generate a hnt version of the document by use of hilatex.
            Can be turned on by the use of the -hnt option.


     $jobname [""]

            This specifies the jobname, i.e., the basename that is used for gen-
            erated files (.aux, .log, .dvi, .ps, .pdf, etc).  If  this  variable
            is  a null string, then the basename is the basename of the main tex
            file.  (At present,  the  string  in  $jobname  should  not  contain
            spaces.)

            The  placeholder  '%A' is permitted. This will be substituted by the
            basename of the TeX file.  The primary purpose is when a variety  of
            tex  files are to be processed, and you want to use a different job-
            name for each but one that is distinct for each. Thus if you  wanted



                                  9 March 2026                                57






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            to  compare  compilations  of  a set of files on different operating
            systems, with distinct filenames for all the cases, you could set

               $jobname = "%A-$^O";

            in an initialization file.  (Here $^O is a variable provided by perl
            that contains perl's name for the operating system.)

            Suppose you had .tex files test1.tex and test2.tex.  Then  when  you
            run

               latexmk -pdf *.tex

            both  files  will  be compiled.  The .aux, .log, and .pdf files will
            have basenames test1-MSWin32 ante test2-MSWin32 on a MS-Windows sys-
            tem, test1-darwin and test2-darwin on an macOS system, and a variety
            of similar cases on Linux systems.


     $kpsewhich ["kpsewhich %S"]
            The program called to locate a source file when the  name  alone  is
            not sufficient.  Most filenames used by latexmk have sufficient path
            information  to  be  found  directly.  But sometimes, notably when a
            .bib or a .bst file is found from the log file of a bibtex or  biber
            run,  only the base name of the file is known, but not its path. The
            program specified by $kpsewhich is used to find it.

            (For advanced users: Because of the different way in  which  latexmk
            uses  the command specified in $kpsewhich, some of the possibilities
            listed in the FORMAT OF COMMAND SPECIFICATIONS do  not  apply.   The
            internal  and  start  keywords  are  not available. A simple command
            specification with possible options and then "%S"  is  all  that  is
            guaranteed  to  work.  Note that for other commands, "%S" is substi-
            tuted by a single source file. In contrast, for $kpsewhich, "%S" may
            be substituted by a long list of space-separated filenames, each  of
            which  is  quoted.   The  result on STDOUT of running the command is
            then piped to latexmk.)

            See also the @BIBINPUTS variable for another way that  latexmk  also
            uses  to  try  to  locate files; it applies only in the case of .bib
            files.


     $kpsewhich_show [0]
            Whether to show diagnostics about invocations of kpsewhich: the com-
            mand line use to invoke it and the results.  These  diagnostics  are
            shown  if  $kpsewhich_show is non-zero or if diagnostics mode is on.
            (But in the second case, lots of other diagnostics are also  shown.)
            Without  these  diagnostics  there  is  nothing visible in latexmk's
            screen output about invocations of kpsewhich.





                                  9 March 2026                                58






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     $landscape_mode [0]
            If nonzero, run in landscape mode, using the landscape mode preview-
            ers and dvi to postscript converters.  Equivalent to the -l  option.
            Normally not needed with current previewers.


     $latex ["latex %O %S"]
            Specifies  the  command line for the LaTeX processing program.  Note
            that as with other programs, you can use this variable not  just  to
            change the name of the program used, but also specify options to the
            program.  E.g.,

                                $latex = "latex --src-specials %O %S";

            To  do  a coordinated setting of all of $dvilualatex, $hilatex, $la-
            tex, $pdflatex, $lualatex, and $xelatex, see the  section  "Advanced
            Configuration".


     $latex_silent_switch ["-interaction=batchmode"]
            Switch(es) for the LaTeX processing program when silent mode is on.

            If  you  use MikTeX, you may prefer the results if you configure the
            options to include -c-style-errors, e.g., by the following  line  in
            an initialization file

              $latex_silent_switch = "-interaction=batchmode -c-style-errors";


     $lpr ["lpr %O %S" under UNIX/Linux, "NONE lpr" under MS-Windows]
            The command to print postscript files.

            Under  MS-Windows  (unlike UNIX/Linux), there is no standard program
            for printing files.  But there are ways you can do it.  For example,
            if you have gsview installed, you could use it with the option "/p":

                $lpr = '"c:/Program Files/Ghostgum/gsview/gsview32.exe" /p';

            If gsview is installed in a different directory, you  will  need  to
            make  the  appropriate  change.   Note the combination of single and
            double quotes around the name.  The single quotes specify that  this
            is  a string to be assigned to the configuration variable $lpr.  The
            double quotes are part of the string passed to the operating  system
            to get the command obeyed; this is necessary because one part of the
            command  name  ("Program Files") contains a space which would other-
            wise be misinterpreted.

     $lpr_dvi ["NONE lpr_dvi"]
            The printing program to print dvi files.

     $lpr_pdf ["NONE lpr_pdf"]
            The printing program to print pdf files.



                                  9 March 2026                                59






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            Under MS-Windows you could set this to use  gsview,  if  it  is  in-
            stalled, e.g.,

                $lpr = '"c:/Program Files/Ghostgum/gsview/gsview32.exe" /p';

            If  gsview  is  installed in a different directory, you will need to
            make the appropriate change.  Note  the  double  quotes  around  the
            name:  this is necessary because one part of the command name ("Pro-
            gram Files") contains a space which  would  otherwise  be  misinter-
            preted.

     $lualatex ["lualatex %O %S"]
            Specifies  the command line for the LaTeX processing program that is
            to be used when the lualatex program is called for (e.g., by the op-
            tion -lualatex.

            To do a coordinated setting of all of $dvilualatex,  $hilatex,  $la-
            tex,  $pdflatex,  $lualatex, and $xelatex, see the section "Advanced
            Configuration".


     $lualatex_silent_switch ["-interaction=batchmode"]
            Switch(es) for the lualatex program (specified in the variable  $lu-
            alatex) when silent mode is on.

            See  details  of the $latex_silent_switch for other information that
            equally applies to $lualatex_silent_switch.

     $make ["make"]
            The make processing program.

     $makeindex ["makeindex %O -o %D %S"]
            The index processing program.

     $makeindex_fudge [1]
            When using makeindex, whether to change directory to $aux_dir before
            running makeindex.  Set to 1 if $aux_dir is not an  explicit  subdi-
            rectory  of  current  directory,  otherwise makeindex will refuse to
            write its output and log files, for security reasons.

     $makeindex_silent_switch ["-q"]
            Switch(es) for the index processing program when silent mode is on.

     $max_repeat [5]
            The maximum number of times latexmk will run *latex before  deciding
            that  there  may  be an infinite loop and that it needs to bail out,
            rather than rerunning *latex again to resolve cross-references, etc.
            The default value covers all normal cases.

            (Note that the "etc" covers a lot of cases where one run  of  *latex
            generates files to be read in on a later run.)




                                  9 March 2026                                60






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     $MSWin_back_slash [1]
            This  configuration variable only has an effect when latexmk is run-
            ning under MS-Windows.  With the default value of 1 for  this  vari-
            able,  when  a command is executed under MS-Windows, latexmk substi-
            tutes "\" for the separator character between components of a direc-
            tory name.  Internally, latexmk uses "/" for the directory separator
            character, which is the character used by Unix-like systems.

            For almost all programs and for almost all filenames  under  MS-Win-
            dows,  both  "\"  and  "/" are acceptable as the directory separator
            character, provided at least that  filenames  are  properly  quoted.
            But  it  is possible that programs exist that only accept "\" on the
            command line, since that is the standard directory separator for MS-
            Windows.  So for safety latexmk makes the substitution from  "/"  to
            "\", by default.

            However there are also programs on MS-Windows for which a back slash
            "\"  is  interpreted  differently than as a directory separator; for
            these the directory separator should be "/".  Programs with this be-
            havior include all the *latex programs in the TeXLive implementation
            (but not the MiKTeX implementation).  Hence if you  use  TeXLive  on
            MS-Windows, then $MSWin_back_slash should be set to zero.


     $new_viewer_always [0]
            This  variable  applies  to latexmk only in continuous-preview mode.
            If $new_viewer_always is 0, latexmk will check for a previously run-
            ning previewer on the same file, and if  one  is  running  will  not
            start a new one.  If $new_viewer_always is non-zero, this check will
            be skipped, and latexmk will behave as if no viewer is running.


     $out_dir [""]
            If non-blank, this variable specifies the output directory.

            This  is  the  directory  in which the main output files are written
            (dvi, ps, pdf, synctex, synctex.gz).  In addition, if the aux direc-
            tory equals the output directory, as is the case  by  default,  then
            other generated files are in effect written to the output directory.

            If  $out_dir is blank, the output directory is the current directory
            at the invocation of *latex; this is equivalent to setting  $out_dir
            to '.'.

            See the section AUXILIARY AND OUTPUT DIRECTORIES for more details.



     $out2_dir [""]
            (Experimental new feature.)

            If  non-blank,  this  variable specifies the final-output directory,



                                  9 March 2026                                61






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            i.e., the directory for the final output files.  If this variable is
            blank (its default value), the final-output directory is the same as
            the output directory.

            See the description of the option -out2dir for an explanation of the
            rationale for the idea of separate output and final-output  directo-
            ries.

            If  the  final-output  directory is different from the output direc-
            tory, then after a full round of compilations of the  document,  the
            relevant set of files is copied here from the output directory.  The
            files  copied  are  specified by the @out2_exts variable, and by de-
            fault are those  with  extensions  'hnt',  'pdf',  'ps',  'synctex',
            'synctex.gz',  and a basename the same as for the main *latex compi-
            lation.


     @out2_exts [( 'hnt', 'pdf', 'ps', 'synctex', 'synctex.gz' )]

            This variable lists the extensions of the files to be copied to  the
            final-output  directory.  The  basename of the files is that for the
            main *latex compilation (corresponding to the value specified by the
            placeholder %R).  More general names may be specified  in  the  same
            way  as  for  the  @generated_exts variable, by inclusion of %R in a
            pattern, e.g.,

                push @out2_exts, '%R-2up.pdf';



     $pdf_mode [0]
            If zero, do NOT generate a pdf version of the document.  If equal to
            1, generate a pdf version of the document using pdflatex, using  the
            command  specified by the $pdflatex variable.  If equal to 2, gener-
            ate a pdf version of the document from the ps  file,  by  using  the
            command  specified by the $ps2pdf variable.  If equal to 3, generate
            a pdf version of the document from the dvi file, by using  the  com-
            mand  specified  by the $dvipdf variable.  If equal to 4, generate a
            pdf version of the document using lualatex, using the command speci-
            fied by the $lualatex variable.  If equal to 5, generate a pdf  ver-
            sion  (and  an xdv version) of the document using xelatex, using the
            commands specified by the $xelatex and xdvipdfmx variables.

            In $pdf_mode=2, it is ensured that .dvi and .ps files are also made.
            In $pdf_mode=3, it is ensured that a .dvi file is  also  made.   But
            this may be overridden by the document.

     $pdflatex ["pdflatex %O %S"]
            Specifies  the  command  line  for the LaTeX processing program in a
            version that makes a pdf file instead of a dvi file.

            An example use of this variable is to add  certain  options  to  the



                                  9 March 2026                                62






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            command line for the program, e.g.,

                 $pdflatex = "pdflatex --shell-escape %O %S";

            (In  some  earlier versions of latexmk, you needed to use an assign-
            ment to $pdflatex to allow the use of lualatex or xelatex instead of
            pdflatex.  There are now separate configuration  variables  for  the
            use of lualatex or xelatex.  See $lualatex and $xelatex.)

            To  do  a coordinated setting of all of $dvilualatex, $hilatex, $la-
            tex, $pdflatex, $lualatex, and $xelatex, see the  section  "Advanced
            Configuration".


     $pdflatex_silent_switch ["-interaction=batchmode"]
            Switch(es)  for  the  pdflatex  program  (specified  in the variable
            $pdflatex) when silent mode is on.

            See details of the $latex_silent_switch for other  information  that
            equally applies to $pdflatex_silent_switch.

     $pdf_previewer [Operating-system dependent]
            The command to invoke a pdf-previewer.

            On  most  operating  systems  (MS-Windows,  Linux, macOS, cygwin and
            msys), the default is set so that the previewer opened  is  the  the
            operating system has associated with pdf files.  For example, on ma-
            cOS the default is "open %S".

            WARNING:   Problem  under MS-Windows: if acroread is used as the pdf
            previewer, and it is actually viewing a pdf file, the pdf file  can-
            not  be  updated.   Thus makes acroread a bad choice of previewer if
            you use latexmk's previous-continuous mode (option -pvc)  under  MS-
            windows.  This problem does not occur if, for example, SumatraPDF or
            gsview is used to view pdf files.

            Important  note:  Normally you will want to have a previewer run de-
            tached, so that latexmk doesn't wait for the previewer to  terminate
            before  continuing its work.  By default, this is done automatically
            by latexmk (by whatever method is appropriate to the operating  sys-
            tem).   But  sometimes this behavior is not what is needed.  In that
            case, precede the command string by the keyword "nostart".


     $pdf_update_command [""]
            When the pdf previewer is set to be updated by  running  a  command,
            this  is the command that is run.  See the information for the vari-
            able $pdf_update_method.


     $pdf_update_method [1 under UNIX, 3 under MS-Windows]
            How the pdf viewer  updates  its  display  when  the  pdf  file  has



                                  9 March 2026                                63






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            changed.  See the information on the variable $dvi_update_method for
            the codes.  (Note that information needs be changed slightly so that
            for the value 4, to run a command to do the update, the  command  is
            specified  by the variable $pdf_update_command, and for the value 2,
            to specify update by signal, the signal  is  specified  by  $pdf_up-
            date_signal.)

            Note  that  acroread  under  MS-Windows (but not UNIX) locks the pdf
            file, so the default value is then 3.

            Arranging to use a command to get a previewer explicitly updated re-
            quires three variables to be set.  For example,  this  method  works
            nicely  with the xpdf program.  With recent versions (4.05 or later)
            you can use the following settings:

                $pdf_previewer = "Start xpdf -remote  %R  'openFile('%S')'  sin-
            glePageMode";
                $pdf_update_method = 4;
                $pdf_update_command = "xpdf -remote %R -reload";

            The  first  setting  arranges for the xpdf program to be used in its
            "remote server mode", with the server name specified as the rootname
            of the TeX file.  The second setting arranges  for  updating  to  be
            done in response to a command, and the third setting sets the update
            command.

     $pdf_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 is
            updated by sending a signal -- see the information on  the  variable
            $pdf_update_method.  The default value is the one appropriate for gv
            on a UNIX system.

     $pid_position[1 under UNIX, -1 under MS-Windows]
            The variable $pid_position is used to specify which word in lines of
            the  output  from  $pscmd  corresponds to the process ID.  The first
            word in the line is numbered 0.  The default value of 1 (2nd word in
            line) is correct for Solaris 2.6, Linux, and macOS  with  their  de-
            fault settings of $pscmd.

            Setting the variable to -1 is used to indicate that $pscmd is not to
            be used.

     $postscript_mode [0]
            If  nonzero, generate a postscript version of the document.  Equiva-
            lent to the -ps option.

            If some other request is made for which a postscript file is needed,
            then $postscript_mode will be set to 1.

     $pre_tex_code ['']

            Sets TeX code to be executed before inputting the source file.  This



                                  9 March 2026                                64






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            works if the relevant one of $latex, etc contains a suitable command
            line with a %P or %U substitution.  For example you could do

                 $latex = 'latex %O %P';
                 $pre_tex_code = '\AtBeginDocument{An initial message\par}';

            To set all of $latex, $pdflatex, $lualatex, and $xelatex  you  could
            use the subroutine alt_tex_cmds:

                 &alt_tex_cmds;
                 $pre_tex_code = '\AtBeginDocument{An initial message\par}';



     $preview_continuous_mode [0]
            If  nonzero,  use "preview continuous mode": Compile document, run a
            previewer, and then regularly check for changed source files and re-
            compile document as needed  to  keep  the  viewed  file  up-to-date.
            Equivalent to the -pvc option.

            Which  previewer  (if any) is run depends on the other settings, see
            the command line options -view=, and the variable $view.   To  do  a
            "continuous  compile"  without running a previewer, set $view='none'
            together with $preview_continuous_mode=1.

     $preview_mode [0]
            If nonzero, run a previewer to preview the document.  Equivalent  to
            the  -pv  option.   Which previewer is run depends on the other set-
            tings, see the command line options -view=, and the variable $view.

     $printout_mode [0]
            If nonzero, print the document using the command  specified  in  the
            $lpr  variable.   Equivalent  to the -p option.  This is recommended
            not to be set from an RC file, otherwise you could waste lots of pa-
            per.

     $print_type = ["auto"]
            Type of file to printout: possibilities are "auto",  "dvi",  "none",
            "pdf",  or  "ps".    See  the  option -print= for the meaning of the
            "auto" value.

     $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, and to find the
            process ID (needed if latexmk needs to signal  the  previewer  about
            file changes).

            Each  line of the output of this command is assumed to correspond to
            one process.  See the $pid_position variable  for  how  the  process
            number is determined.




                                  9 March 2026                                65






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            The  default  for pscmd is "NONE" under MS-Windows and cygwin (i.e.,
            the command is not used), "ps -ww -u $ENV{USER}"  under  macOS,  and
            "ps  -f  -u  $ENV{USER}"  under  other  operating systems (including
            Linux).  In these specifications "$ENV{USER}" is substituted by  the
            username.

     $ps2pdf ["ps2pdf -dALLOWPSTRANSPARENCY %O %S %D"]
            Command to convert .ps to .pdf file.

     $ps_filter [empty]
            The  postscript  file  filter  to be run on the newly produced post-
            script file before other processing.  Equivalent to  specifying  the
            -pF option.

     $ps_previewer ["start gv %O %S", but start %O %S under MS-Windows]
            The command to invoke a ps-previewer.  (The default under MS-Windows
            will cause to be run whatever command the system has associated with
            .ps files.)

            Note  that  gv could be used with the -watch option updates its dis-
            play whenever the postscript file changes,  whereas  ghostview  does
            not.  However, different versions of gv have slightly different ways
            of  writing  this option.  You can configure this variable appropri-
            ately.

            WARNING: Linux systems may have installed one (or more) versions  of
            gv  under  different  names, e.g., ggv, kghostview, etc, but perhaps
            not one actually called gv.

            Important note: Normally you will want to have a previewer  run  de-
            tached,  so that latexmk doesn't wait for the previewer to terminate
            before continuing its work.  So normally you should prefix the  com-
            mand  by  "start ", which flags to latexmk that it should do the de-
            taching of the previewer itself (by whatever method  is  appropriate
            to  the operating system).  But sometimes letting latexmk do the de-
            taching is not appropriate (for a variety of  non-trivial  reasons),
            so  you  should  put  the  "start  " bit in yourself, whenever it is
            needed.


     $ps_previewer_landscape ["start gv -swap %O %S", but start %O %S under MS-
     Windows]
            The command to invoke a ps-previewer in landscape mode.

     $ps_update_command [""]
            When the postscript previewer is set to be updated by running a com-
            mand, this is the command that is run.  See the information for  the
            variable $ps_update_method.

     $ps_update_method [0 under UNIX, 1 under MS-Windows]
            How  the postscript viewer updates its display when the .ps file has
            changed. See the information on the variable $dvi_update_method  for



                                  9 March 2026                                66






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            the codes.  (Note that information needs be changed slightly so that
            for  the  value 4, to run a command to do the update, the command is
            specified by the variable $ps_update_command, and for the  value  2,
            to  specify  update  by  signal,  the signal is specified by $ps_up-
            date_signal.)

     $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  is
            updated  by  sending a signal -- see $ps_update_method.  The default
            value is the one appropriate for gv on a UNIX system.

     $pvc_timeout [0]
            If this variable is nonzero, there will be a  timeout  in  pvc  mode
            after  a  period  of inactivity.  Inactivity means a period when la-
            texmk has detected no file changes and hence has not taken  any  ac-
            tions  like  compiling  the document. The period of inactivity is in
            the variable $pvc_timeout_mins.


     $pvc_timeout_mins [30]
            The period of inactivity, in minutes, after  which  pvc  mode  times
            out.  This is used if $pvc_timeout is nonzero.

     $pvc_view_file_via_temporary [1]
            The same as $always_view_file_via_temporary, except that it only ap-
            plies in preview-continuous mode (-pvc option).

     $quote_filenames [1]
            This  specifies  whether  substitutions  for placeholders in command
            specifications (as in $pdflatex) are surrounded  by  double  quotes.
            If  this  variable  is  1 (or any other value Perl regards as true),
            then quoting is done.  Otherwise quoting is omitted.

            The quoting method used by latexmk is tested to work correctly under
            UNIX systems (including Linux and macOS) and under  MS-Windows.   It
            allows  the  use of filenames containing special characters, notably
            spaces.  (But note that many versions  of  *latex  cannot  correctly
            deal  with  TeX files whose names contain spaces.  Latexmk's quoting
            only ensures that such filenames are correctly treated by the  oper-
            ating system in passing arguments to programs.)

     $rc_report [1]
            After initialization, whether to give a list of the RC files read.

     $recorder [1]
            Whether  to  use the -recorder option to *latex.  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.

            It  is generally recommended to use this option (or to configure the



                                  9 March 2026                                67






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            $recorder variable to be on.)  But it only works if *latex  supports
            the -recorder option, which is true for most current implementations

            Note about the name of the .fls file: Most implementations of *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.   How-
            ever,  some implementations instead produce files named for the pro-
            gram, i.e., latex.fls or pdflatex.fls.  In this second case, latexmk
            copies the latex.fls or pdflatex.fls to a file with the basename  of
            the main LaTeX document, e.g., Document.fls.

     $search_path_separator [See below for default]
            The  character  separating paths in the environment variables TEXIN-
            PUTS, BIBINPUTS, and BSTINPUTS.  This variable is mainly used by la-
            texmk when the -outdir, -output-directory, -auxdir, and/or  -aux-di-
            rectory options are used.  In that case latexmk needs to communicate
            appropriately  modified  search  paths to bibtex, dvipdf, dvips, and
            *latex.

            [Comment to technically savvy readers: *latex doesn't actually  need
            the  modified  search path.  But, surprisingly, dvipdf and dvips do,
            because sometimes graphics files get generated in the output or  aux
            directories.]

            The  default under MSWin and Cygwin is ';' and under UNIX-like oper-
            ating systems (including Linux and macOS) is ':'.  Normally the  de-
            faults give correct behavior.  But there can be difficulties if your
            operating  system  is of one kind, but some of your software is run-
            ning under an emulator for the other kind of  operating  system;  in
            that  case  you'll  need  to  find  out  what  is  needed,  and  set
            $search_path_separator explicitly.  (The same goes, of  course,  for
            unusual  operating  systems that are not in the MSWin, Linux, macOS,
            Unix collection.)

     $show_time [0]
            Whether to show time used, both the total and for individual steps.

            Note: On MS Windows, this is clock time.  On other OSs it is the CPU
            time used (by latexmk and the child processes it invokes).  The  OS-
            dependence  is  because  of a limitation of Windows.  If you wish to
            force the use of clock instead of CPU time, you can set

                $times_are_clock = 1;



     $silence_logfile_warnings [0]
            Whether after a run of *latex to summarize warnings in the log  file
            about  undefined  citations  and  references.  Setting $silence_log-
            file_warnings=0 gives the summary of warnings (provided silent  mode
            isn't  also  set),  and this is useful to locate undefined citations
            and references without searching through the much more  verbose  log



                                  9 March 2026                                68






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            file  or  the  screen output of *latex.  But the summary can also be
            excessively annoying.  The default is not to  give  these  warnings.
            The  command  line  options  -silence_logfile_warning_list  and -si-
            lence_logfile_warning_list- also set this variable.

            Note that multiple occurrences for the same undefined object on  the
            same page and same line will be compressed to a single warning.


     $silent [0]
            Whether  to  run silently.  Setting $silent to 1 has the same effect
            as the -quiet of -silent options on the command line.


     $sleep_time [2]
            The time to sleep (in  seconds)  between  checking  for  source-file
            changes  when running with the -pvc option.  If non-zero, it is sub-
            ject to a minimum value give by the $min_sleep_time variable.  But a
            zero value is also allowed.

            A value of exactly 0 gives no delay between checks  for  source-file
            changes;  it  typically  results in 100% CPU usage, which may not be
            desirable.

            In old versions of latexmk, the default value of  $sleep_time  of B-
            was set to give a reasonable compromise between responsiveness in
            pvc mode and the amount of CPU usage.  On modern computers with fast
            multi-core  CPUs,  a smaller value, e.g., 0.1 can give good results,
            especially when working with small documents whose  compilation  may
            take well under a second.


     $texfile_search [""]
            This  is  an obsolete variable, replaced by the @default_files vari-
            able.

            For backward compatibility, if you choose to set $texfile_search, it
            is a string of space-separated filenames, and then latexmk  replaces
            @default_files  with  the  filenames  in $texfile_search to which is
            added "*.tex".

     $success_cmd [undefined]
            See the documentation for $compiling_cmd.

     $tmpdir [See below for default]
            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 vari-
            ables TMPDIR or TEMP exists, otherwise  to  the  current  directory.
            Under  other operating systems (expected to be UNIX/Linux, including



                                  9 March 2026                                69






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            macOS), 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, and for which a custom dependency has not been found.
            This is generally useful only when latexmk is used as part of a big-
            ger 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 dependen-
            cies.


     $user_deleted_file_treated_as_changed [0]
            Whether when testing for changed files, a  user  file  that  changes
            status from existing to non-existing should be regarded as changed.

            The  default  value  is 0, which implies that if a user file (as op-
            posed to a generated file) has been deleted since the previous  run,
            then no recompilation should be done.  The reasoning is that a rerun
            would simply produce an error.

            If  the  value is 1, then disappearance of a user file is treated as
            triggering a rerun, but only in non-preview-continuous mode.

            If the value is 2, then disappearance of a user file is  treated  as
            triggering a rerun, always.


     $view ["default"]
            Which  kind  of file is to be previewed if a previewer is used.  The
            possible values are "default", "dvi", "hnt",  "ps",  "pdf",  "none".
            The value of "default" means that the "highest" of the kinds of file
            generated is to be used (among .dvi, .hnt, .ps and .pdf).


     $warnings_as_errors [0]
            Normally  latexmk copies the behavior of latex in treating undefined
            references and citations and multiply defined references  as  condi-
            tions  that  give  a  warning but not an error.  The variable $warn-
            ings_as_errors controls whether this behavior is modified.

            When the variable is non-zero, latexmk at the end of  its  run  will
            return  a non-zero status code to the operating system if any of the
            files processed gives a warning about  problems  with  citations  or
            references  (i.e., undefined citations or references or multiply de-
            fined references).  This is after latexmk has completed all the runs



                                  9 March 2026                                70






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            it needs to try and resolve references and citations.   Thus  $warn-
            ings_as_errors  being  nonzero causes latexmk to treat such warnings
            as errors, but only when they occur on the last run  of  *latex  and
            only   after  processing  is  complete.   A  non-zero  value  $warn-
            ings_as_errors can be set by the command-line option -Werror.

            The default behavior is normally satisfactory in the usual edit-com-
            pile-edit cycle.  But, for example, latexmk can also be used as part
            of a build process for some bigger project, e.g., for creating docu-
            mentation in the build of a software application.  Then it is  often
            sensible to treat citation and reference warnings as errors that re-
            quire  the  overall  build  process to be aborted.  Of course, since
            multiple runs of *latex are generally needed to  resolve  references
            and  citations,  what  matters is not the warnings on the first run,
            but the warnings on the last run; latexmk takes  this  into  account
            appropriately.

            In  addition, when preview-continuous mode is used, a non-zero value
            for $warnings_as_errors changes  the  use  of  the  commands  $fail-
            ure_cmd,  $warning_cmd,  and  $success_cmd  after a compliation.  If
            there are citation or reference warnings, but no other  errors,  the
            behavior  is  as follows. If $warning_cmd is set, it is used.  If it
            is not set, then then if $warnings_as_errors is non-zero and  $fail-
            ure_cmd  is set, then $failure_cmd.  Otherwise $success_cmd is used,
            if it is set.  (The foregoing explanation is rather complicated, be-
            cause latexmk has to deal with the case that one or more of the com-
            mands isn't set.)


     $xdv_mode [0]
            If one, generate an xdv version of the document by use of xelatex.


     $xdvipdfmx ["xdvipdfmx -E -o %D %O %S"]

            The program to make a pdf file from an xdv file (used in conjunction
            with xelatex when $pdf_mode=5).

     $xdvipdfmx_silent_switch ["-q"]
            Switch(es) for the xdvipdfmx program when silent mode is on.

     $xelatex ["xelatex %O %S"]
            Specifies the command line for the LaTeX processing program of  when
            the  xelatex  program  is  called for.  See the documentation of the
            -xelatex option for some special properties of latexmk's use of  xe-
            latex.

            Note about xelatex: latexmk uses xelatex to make an .xdv rather than
            .pdf  file,  with  the  .pdf  file being created in a separate step.
            This is enforced by the use of the -no-pdf option.  If %O is part of
            the command for invoking xelatex, then latexmk will insert the  -no-
            pdf  option  automatically,  otherwise  you  must provide the option



                                  9 March 2026                                71






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            yourself.  See the documentation for the -pdfxe option for  why  la-
            texmk  makes  a  .xdv  file  rather than a .pdf file when xelatex is
            used.

            To do a coordinated setting of all of $dvilualatex,  $hilatex,  $la-
            tex,  $pdflatex,  $lualatex, and $xelatex, see the section "Advanced
            Configuration".


     $xelatex_silent_switch ["-interaction=batchmode"]
            Switch(es) for the xelatex program (specified in the variable $xela-
            tex) when silent mode is on.

            See details of the $latex_silent_switch for other  information  that
            equally applies to $xelatex_silent_switch.




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 would be
     to  allow latexmk to convert a .fig file to .eps to be included in the .tex
     file.


   Defining a custom dependency:
     The old method of configuring latexmk to use a custom dependency was to di-
     rectly manipulate the @cus_dep_list array that contains information  defin-
     ing the custom dependencies.  (See the section "Old Method of Defining Cus-
     tom  Dependencies"  for details.) This method still works, but is no longer
     preferred.

     A better method is to use the subroutines that allow  convenient  manipula-
     tions of the custom dependency list.  These are

         add_cus_dep( fromextension, toextension, must, subroutine )
         remove_cus_dep( fromextension, toextension )
         show_cus_dep()

     The arguments are as follows:

     from extension:
            The  extension  of the file we are converting from (e.g. "fig").  It
            is specified without a period.

     to extension:
            The extension of the file we are converting to (e.g. "eps").  It  is
            specified without a period.

     must:  If non-zero, the file from which we are converting must exist, if it
            doesn't exist latexmk will give an error message and exit unless the



                                  9 March 2026                                72






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            -f  option  is  specified.  If must is zero and the file we are con-
            verting from doesn't exist, then no action is taken.  Generally, the
            appropriate value of must is zero.

     function:
            The name of the subroutine that latexmk should call to  perform  the
            file  conversion.   The first argument to the subroutine is the base
            name of the file to be converted without any extension.  The subrou-
            tines are declared in the syntax of Perl.  The function  should  re-
            turn 0 if it was successful and a nonzero number if it failed.


     Naturally  add_cus_dep adds a custom dependency with the specified from and
     to extensions.  If a custom dependency has been previously  defined  (e.g.,
     in an rcfile that was read earlier), then it is replaced by the new one.

     The  subroutine remove_cus_dep removes the specified custom dependency. The
     subroutine show_cus_dep causes a list of the currently defined  custom  de-
     pendencies to be sent to the screen output.


   How custom dependencies are used:
     An instance of a custom dependency rule is created whenever latexmk detects
     that  a run of *latex needs to read a file, like a graphics file, whose ex-
     tension is the to-extension of a custom dependency.  Then latexmk  examines
     whether  a file exists with the same name, but with the corresponding from-
     extension, as specified in the custom-dependency.  If it does, then a  cor-
     responding  instance  of  the custom dependency is created, after which the
     rule is invoked whenever the destination file (the one with  the  to-exten-
     sion) is out-of-date with respect to the corresponding source file.

     To make the new destination file, the Perl subroutine specified in the rule
     is  invoked,  with  an argument that is the base name of the files in ques-
     tion.  Simple cases just involve a subroutine invoking an external program;
     this can be done by following the templates below, even  by  those  without
     knowledge  of  the  Perl programming language.  Of course, experts could do
     something much more elaborate.

     One item in the  specification  of  each  custom-dependency  rule,  labeled
     "must" above, specifies how the rule should be applied when the source file
     fails to exist.

     When  latex reports that an input file (e.g., a graphics file) does not ex-
     ist, latexmk tries to find a source file and a custom dependency  that  can
     be  used  to  make  it.  If it succeeds, then it creates an instance of the
     custom dependency and invokes it to make the missing file, after which  the
     next pass of latex etc will be able to read the newly created file.

     Note for advanced usage: The operating system's environment variable TEXIN-
     PUTS  can  be used to specify a search path for finding files by latex etc.
     Correspondingly, when a missing file is reported, latexmk looks in the  di-
     rectories  specified  in  TEXINPUTS as well as in the current directory, to



                                  9 March 2026                                73






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     find a source file from which an instance of a  custom  dependency  can  be
     used to make the missing file.


   Function to implement custom dependency, traditional method:
     The  function  that  implements a custom dependency gets the information on
     the files to be processed in two ways.  The first is through its one  argu-
     ment;  the  argument  contains  the base name of the source and destination
     files.  The second way is described later.

     A simple and typical example of code in an initialization rcfile using  the
     first method is:

         add_cus_dep( 'fig', 'eps', 0, 'fig2eps' );
         sub fig2eps {
             system( "fig2dev -Leps \"$_[0].fig\" \"$_[0].eps\"" );
         }

     The first line adds a custom dependency that converts a file with extension
     "fig",  as created by the xfig program, to an encapsulated postscript file,
     with extension "eps".  The remaining lines define a subroutine that carries
     out the conversion.  If a rule for converting "fig" to "eps" files  already
     exists  (e.g.,  from a previously read-in initialization file), the latexmk
     will delete this rule before making the new one.

     Suppose latexmk is using this rule to convert a file "figure.fig" to  "fig-
     ure.eps".   Then it will invoke the fig2eps subroutine defined in the above
     code with a single argument "figure", which is the basename of each of  the
     files  (possibly  with  a path component).  This argument is referred to by
     Perl as $_[0].  In the example above, the subroutine uses the Perl  command
     system  to invoke the program fig2dev.  The double quotes around the string
     are a Perl idiom that signify that each string of the form  of  a  variable
     name, $_[0] in this case, is to be substituted by its value.

     If the return value of the subroutine is non-zero, then latexmk will assume
     an error occurred during the execution of the subroutine.  In the above ex-
     ample,  no  explicit return value is given, and instead the return value is
     the value returned by the last (and only) statement, i.e.,  the  invocation
     of system, which returns the value 0 on success.

     If  you  use  pdflatex, lualatex or xelatex instead of latex, then you will
     probably prefer to convert your graphics files to pdf format, in which case
     you would replace the above code in an initialization file by

         add_cus_dep( 'fig', 'pdf, 0, 'fig2pdf' );
         sub fig2pdf {
             system( "fig2dev -Lpdf \"$_[0].fig\" \"$_[0].pdf\"" );
         }

     Note 1: In the command lines given in the system commands in the above  ex-
     amples, double quotes have been inserted around the file names (implemented
     by  '\"'  in  the Perl language).  They immunize the running of the program



                                  9 March 2026                                74






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     against special characters in filenames.  Very often these quotes  are  not
     necessary,  i.e.,  they  can  be omitted.  But it is normally safer to keep
     them in.  Even though the rules for quoting vary between operating systems,
     command shells and individual pieces of software, the quotes in  the  above
     examples do not cause problems in the cases I have tested.

     Note 2: One case in which the quotes are important is when the files are in
     a  subdirectory  and  your operating system is Microsoft Windows.  Then the
     separator character for directory components can be either a forward  slash
     '/' or Microsoft's more usual backward slash '\'.  Forward slashes are gen-
     erated  by  latexmk,  to maintain its sanity from software like MiKTeX that
     mixes both directory separators; but their correct  use  normally  requires
     quoted  filenames.   (See  a  log file from a run of MiKTeX (at least in v.
     2.9) for an example of the use of both directory separators.)

     Note 3: The subroutines implementing custom dependencies  in  the  examples
     given  just  have  a  single line invoking an external program.  That's the
     usual situation.  But since the subroutines are in the Perl  language,  you
     can implement much more complicated processing if you need it.


   Removing custom dependencies, and when you might need to do this:
     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.  A situation
     where this would be desirable is where there are multiple custom  dependen-
     cies  with  the same from-extension or the same to-extension. In that case,
     latexmk might choose a different one from the one you want for  a  specific
     project.  As an example, to remove any "fig" to "eps" rule you would use:

         remove_cus_dep( 'fig', 'eps' );

     If  you have complicated sets of custom dependencies, you may want to get a
     listing of the custom dependencies.  This is done by using the line

         show_cus_dep();

     in an initialization file.


   Function implementing custom dependency, alternative methods:
     So far the examples for functions to  implement  custom  dependencies  have
     used  the  argument  of  the function to specify the base name of converted
     file.  This method has been available since very old versions  of  latexmk,
     and many examples can be found, e.g., on the web.

     However  in  later versions of latexmk the internal structure of the imple-
     mentation of its "rules" for the steps of processing, including custom  de-
     pendencies,  became much more powerful.  The function implementing a custom
     dependency is executed within a special context where  a  number  of  extra
     variables  and subroutines are defined.  Publicly documented ones, intended
     to be long-term stable, are listed below, under the heading "Variables  and



                                  9 March 2026                                75






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     subroutines for processing a rule".

     Examples of their use is given in the following examples, concerning multi-
     ple index files and glossaries.

     The  only  index-file conversion built-in to latexmk is from an ".idx" file
     written on one run of *latex to an ".ind" file to be read in  on  a  subse-
     quent run.  But with the index.sty package, for example, you can create ex-
     tra  indexes with extensions that you configure.  Latexmk does not know how
     to deduce the extensions from the information it has.  But you  can  easily
     write a custom dependency.  For example if your latex file uses the command
     "\newindex{special}{ndx}{nnd}{Special  index}" you will need to get latexmk
     to convert files with the extension .ndx  to  .nnd.   The  most  elementary
     method is to define a custom dependency as follows:

         add_cus_dep( 'ndx', 'nnd', 0, 'ndx2nnd' );
         sub ndx2nnd {
             return system( "makeindex -o \"$_[0].nnd\" \"$_[0].ndx\"" );
         }
         push @generated_exts, 'ndx', 'nnd';

     Notice  the added line compared with earlier examples.  The extra line gets
     the extensions "ndx" and "nnd" added to the list of extensions  for  gener-
     ated  files;  then the extra index files will be deleted by clean-up opera-
     tions

     But if you have yet more indexes with yet different extensions, e.g., "adx"
     and "and", then you will need a separate function for each pair  of  exten-
     sions.  This is quite annoying.  You can use the Run_subst function to sim-
     plify the definitions to use a single function:

         add_cus_dep( 'ndx', 'nnd', 0, 'dx2nd' );
         add_cus_dep( 'adx', 'and', 0, 'dx2nd' );
         sub dx2nd {
             return Run_subst( "makeindex -o %D %S" );
         }
         push @generated_exts, 'ndx', 'nnd', 'adx', 'and';

     You could also instead use

         add_cus_dep( 'ndx', 'nnd', 0, 'dx2nd' );
         add_cus_dep( 'adx', 'and', 0, 'dx2nd' );
         sub dx2nd {
             return Run_subst( $makeindex );
         }
         push @generated_exts, 'ndx', 'nnd', 'adx', 'and';

     This  last example uses the command specification in $makeindex, and so any
     customization you have made for the standard index also applies to your ex-
     tra indexes.

     Similar techniques can be applied for glossaries.



                                  9 March 2026                                76






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     Those of you with experience with Makefiles, may  get  concerned  that  the
     .ndx  file  is  written during a run of *latex and is always later than the
     .nnd last read in.  Thus the .nnd appears to  be  perpetually  out-of-date.
     This  situation,  of circular dependencies, is endemic to latex, and is one
     of the issues that latexmk is programmed to overcome.  It examines the con-
     tents of the files (by use of a checksum), and only does a remake when  the
     file contents have actually changed.

     Of course if you choose to write random data to the .nnd (or the .aux file,
     etc)  that changes on each new run, then you will have a problem.  For real
     experts: See the %hash_calc_ignore_pattern if you have to  deal  with  such
     problems.


   Old Method of Defining Custom Dependencies:
     In  much  older versions of latexmk, the only method of defining custom de-
     pendencies was to directly manipulate the  table  of  custom  dependencies.
     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  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.

     An example of the old method of defining custom dependencies is as follows.
     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 {
             return system( "fig2dev -Lps \"$_[0].fig\" \"$_[0].eps\"" );
         }

     This method still works, and is almost equivalent to the code given earlier
     that  used  the  add_cus_dep  subroutine.   However, the old method doesn't
     delete any previous custom-dependency for the same conversion.  So the  new
     method is preferable.



ADVANCED CONFIGURATION: SOME EXTRA RESOURCES AND ADVANCED TRICKS
     For  most purposes, simple configuration for latexmk along the lines of the
     examples given is sufficient.  But sometimes you need something harder.  In
     this section, I indicate some extra possibilities.  Generally to use these,
     you need to be fluent in the Perl language, since this is what is  used  in
     the rc files.

     In  this  section,  I include first, a description of a number of variables
     and subroutines that provide, among other things, access to  latexmk's  in-
     ternal data structures for handling dependencies.  Then I describe the hook
     mechanism  whereby  at  certain  points in the processing, latexmk can call
     user-defined subroutines.

     See also the section DEALING WITH ERRORS,  PROBLEMS,  ETC.   See  also  the



                                  9 March 2026                                77






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     examples  in  the  directory  example_rcfiles in the latexmk distributions.
     Even if none of the examples apply to your case, they may give  you  useful
     ideas




   Variables and subroutines for processing a rule
     A step in the processing is called a rule. One possibility to implement the
     processing  of a rule is by a Perl subroutine.  This is always the case for
     custom dependencies. Also, for any other rule, you can use a subroutine  by
     prefixing  the command specification by the word "internal" -- see the sec-
     tion FORMAT OF COMMAND SPECIFICATIONS.

     When you use a subroutine for processing a rule, all the  possibilities  of
     Perl  programming are available, of course.  In addition, some of latexmk's
     internal variables and subroutines are available.  The  ones  listed  below
     are  intended to be available to (advanced) users, and their specifications
     will generally have stability  under  upgrades.  Generally,  the  variables
     should  be  treated as read-only: Changing their values can have bad conse-
     quences, since it is liable to mess up the consistency of what  latexmk  is
     doing.

     $rule  This  variable  has  the name of the rule, as known to latexmk. Note
            that the exact contents of this variable for a given rule may be de-
            pendent on the version of latexmk

     $$Pbase
            This gives the basename for the rule.  Generally, it determines  the
            names  of  generated  files.  E.g., for a run of *latex, the name of
            the .log file is the aux directory concatenated  with  the  basename
            and then `.log'.

            For  a  *latex  rule, the basename is without a directory component.
            For other rules, it includes the  directory  component  (if  any  is
            used).

            This  (annoying) difference is associated with the different ways in
            which the commands invoked by latexmk work when the command line in-
            cludes a name for a source file that includes a directory component.
            For the *latex commands, the directory of the source file is irrele-
            vant to the directory component the generated files,  which  instead
            is determined by the values in the -aux-directory and/or -output-di-
            rectory options.

            In  contrast,  many  other  programs (e.g., biber, bibtex) put their
            generated files in the same directory as  the  source  file,  merely
            with a changed extension.

            Note  the double dollar signs: In Perl terms, the variable $Pbase is
            a reference to a variable that contains the  basename.   The  second
            dollar  sign  derefences the reference to give the actual value.  (A



                                  9 March 2026                                78






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            reference is is used  rather  like  a  pointer,  and  the  `P'  (for
            `pointer') at the start of the variable name is a convention used in
            latexmk to indicate that the variable is a reference variable.)


     $$Pdest
            This gives the name of the main output file if any.  Note the double
            dollar signs.


     $$Psource
            This  gives  the  name  of the primary source file.  Note the double
            dollar signs.


     add_hook( <stack_name>, <subroutine> )
            See the section `Hooks' for more details.

            This adds the subroutine specified in the  second  argument  to  la-
            texmk's stack of hooks specified by the stack name.  It returns 1 on
            success,  and  zero  otherwise  (e.g.,  if  the specified hook stack
            doesn't exist).

            The subroutine can be specified by a reference to the subroutine, as
            in

                add_hook( 'after_xlatex_analysis', mmz_analyze )

            Given that the subroutine mmz_analyze has been  defined  in  the  rc
            file.

            The  subroutine can be specified by a string whose value is the name
            of the subroutine, e.g.,

                add_hook( 'after_xlatex_analysis', 'mmz_analyze' )

            In simple cases, the subroutine can be an anonymous  subroutine  de-
            fined in the call to add_hooks,

                add_hook( 'after_main_pdf', sub{ print "TEST\n"; return 0; } );

            Observe that on success, the subroutine should return 0 (like a call
            to  Perl's  system subroutine), so normally this should be coded ex-
            plicitly.  If a hook subroutine returns a  non-zero  value,  latexmk
            treats that as an error condition.



     ensure_path( var, values ...)

            The  first  parameter is the name of one of the system's environment
            variables for search paths.  The  remaining  parameters  are  values



                                  9 March 2026                                79






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            that  should  be in the variable.  For each of the value parameters,
            if it isn't already in the variable, then it  is  prepended  to  the
            variable;  in  that  case  the environment variable is created if it
            doesn't already exist. For separating values, the  character  appro-
            priate  the  the  operating  system is used -- see the configuration
            variable $search_path_separator.

            Example:

              ensure_path( 'TEXINPUTS', './custom_cls_sty_files//' );

            (In this example, the trailing '//' is documented by TeX systems  to
            mean  that *latex search for files in the specified directory and in
            all subdirectories.)

            Technically ensure_path works by setting Perl's variable  $ENV{var},
            where  var is the name of the target variable.  The changed value is
            then passed as an environment variable to any invoked programs.


     pushd( path ), popd()
            These subroutines are used when it is needed to  temporarily  change
            the working directory, as in

                 pushd( 'some_directory' );
                 ... Processing done with 'some_directory' as the working direc-
            tory
                 popd()

            They  perform  exactly the same function as the commands of the same
            names in operating system command shells  like  bash  on  Unix,  and
            cmd.exe on the Windows.


     rdb_add_generated( file, ... )
            This  subroutine  is  to  be used in the context of a rule, that is,
            from within a subroutine that is carrying out processing of a  rule.
            Such  is  the  case  for the subroutine implementing a custom depen-
            dency, or the subroutine invoked by using the "internal" keyword  in
            the command specification like that in the variable $latex.

            Its arguments are a sequence of filenames which are generated during
            the  running of the rule.  The names might arise from an analysis of
            the results of the run, e.g., in a log file, or  from  knowledge  of
            properties  of  the  specific  rule.  Calling rdb_add_generated with
            these filenames ensures that these files are flagged as generated by
            the rule in latexmk's internal data structures.  Basically,  no  ac-
            tion is taken if the files have already been flagged as generated.

            A  main purpose of using this subroutine is for the situation when a
            generated file is also the source file for some rule,  so  that  la-
            texmk  can  correctly link the dependency information in its network



                                  9 March 2026                                80






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            of rules.

            Note: Unlike some other subroutines in this section, there is no ar-
            gument for a rule for rdb_add_generated. Instead, the subroutine  is
            to  be  invoked during the processing of a rule when latexmk has set
            up an appropriate context (i.e., appropriate  variables).   In  con-
            trast,  subroutines  with a rule argument can be used also outside a
            rule context.


     rdb_ensure_file( $rule, file )
            This subroutine ensures that the given  file  is  among  the  source
            files for the specified rule.  It is typically used when, during the
            processing  of  a  rule, it is known that a particular extra file is
            among the dependencies that latexmk should  know,  but  its  default
            methods  don't find the dependency. Almost always the first argument
            is the name of the rule currently being processed, so it is then ap-
            propriate to specify it by $rule.

            For examples of its use, see some of the files in the directory  ex-
            ample_rcfiles  of  latexmk's distribution.  Currently the cases that
            use this subroutine are  bib2gls-latexmkrc,  exceltex_latexmkrc  and
            texinfo-latexmkrc.   These  illustrate typical cases where latexmk's
            normal processing fails to detect certain extra source files.

            Note that rdb_ensure_file only has  one  filename  argument,  unlike
            other  subroutines in this section.  If you want to apply its action
            to multiple files, you will need one  call  to  rdb_ensure_file  for
            each file.


     rdb_ensure_files_here( file, ... )
            Like  subroutine  rdb_ensure_files,  except  that (a) it assumes the
            context is of a rule, and the files are to be added  to  the  source
            list for that rule; (b) multiple files are allowed.


     rdb_remove_files( $rule, file, ... )
            This  subroutine  removes one or more files from the dependency list
            for the given rule.


     rdb_remove_generated( file, ... )
            This subroutine is to be used in the context of  a  rule,  that  is,
            from  within a subroutine that is carrying out processing of a rule.
            It performs the opposite action to rdb_add_generated.  Its effect is
            to ensure that the given filenames are not listed in  latexmk's  in-
            ternal data structures as being generated by the rule.


     rdb_list_source( $rule )
            This  subroutine  returns  the  list  of  source  files  (i.e.,  the



                                  9 March 2026                                81






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



            dependency list) for the given rule.


     rdb_set_source( $rule, file, ... )


     rdb_set_source( $rule, @files )
            This subroutine sets the dependency list for the given  rule  to  be
            the  specified  files.   Files that are already in the list have un-
            changed information.  Files that were not in the list are  added  to
            it.  Files in the previous dependency list that are not in the newly
            specified list of files are removed from the dependency list.


     Run_subst( command_spec )
            This  subroutine  runs  the  command specified by command_spec.  The
            specification is a string in the format listed in the section  "For-
            mat   of  Command  Specifications".   An  important  action  of  the
            Run_subst is to make substitutions of placeholders, e.g., %S and  %D
            for  source  and destination files; these get substituted before the
            command is run.  In addition,  the  command  after  substitution  is
            printed to the screen unless latexmk is running in silent mode.


     test_gen_file_time ( <file> )
            This  subroutine  is used in the context of a rule.  It returns true
            or false according to whether or not a file of the given  name  both
            exists and was generated in the latest run of the rule.  If the sub-
            routine returns false, but the file exists, then the file is a left-
            over from a previous run.

            The  test  for  a file being generated on the current run is whether
            the modification time of the file is at least as recent as the  time
            that  the  run of the rule was started.  An allowance for the granu-
            larity of the values of modification time on file systems  is  made.
            See  the  description  of the variable $filetime_causality_threshold
            for details.

            In addition, latexmk makes allowance for the possibility that  files
            are  hosted  on  a  different computer than that running latexmk and
            that the system clock times on the  two  computers  are  mismatched.
            Latexmk automatically detects (and reports) any significant mismatch
            and corrects for it.



   Coordinated Setting of Commands for *latex
     To  set  all  of  $dvilualatex, $hilatex, $latex, $pdflatex, $lualatex, and
     $xelatex to a common pattern, you can use one of the following subroutines,
     std_tex_cmds, alt_tex_cmds, and set_tex_cmds.

     To get the standard commands, use



                                  9 March 2026                                82






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



        &std_tex_cmds;

     This results in $latex = 'latex %O %S',  and  similarly  for  $dvilualatex,
     $hilatex,  $pdflatex,  $lualatex,  and $xelatex.  Note the ampersand in the
     invocation; this indicates to Perl that a subroutine is being called.  (The
     use of this subroutine enables you to override  previous  redefinitions  of
     the  $latex, etc variables, which might have occurred in an earlier-read rc
     file.)

     To be able to use the string provided by the -pretex option (if  any),  you
     can use

        &alt_tex_cmds;

     This  results  in $latex = 'latex %O %P', etc.  Again note the ampersand in
     the invocation; this indicates to Perl that a subroutine is being called.

     A more general way of specifying the variables is using

       set_tex_cmds( 'CMD_SPEC' );

     Here CMD_SPEC is the command line without the program name. This results in
     $latex = 'latex CMD_SPEC', and similarly for $pdflatex, etc.  (An ampersand
     preceding the subroutine name is not necessary here, since the  parentheses
     show Perl that a subroutine is being invoked.)

     An  example  that provides the --interaction=batchmode option to the *latex
     commands would be

       set_tex_cmds( '--interaction=batchmode %O %S' );

     This results in $latex = 'latex --interaction=batchmode %O %S ', etc.  Note
     that when '%O' appears after the added option, as here, options provided on
     the command line to latexmk can override the supplied one.

     A more general command line can be set up by using the placeholder '%C'  in
     CMD_SPEC.   The '%C' is substituted by the basic name of the command, i.e.,
     whichever of 'latex', 'pdflatex', etc is appropriate.  (More than  one  oc-
     currence  of  '%C' is allowed.)  For example to use the development/pre-re-
     lease versions of latex, etc, which  have  names,  'latex-dev',  'pdflatex-
     dev', etc, you could use

       set_tex_cmds( '%C-dev %O %S' );

     This results in $latex = 'latex-dev %O %S', etc.  (The pre-release programs
     latex-dev etc are provided in current distributions of TeXLive and MiKTeX.)


   Hooks
     Latexmk provides a way to arrange for user-defined subroutines to be called
     at certain points in the processing.  These can be used to configure appro-
     priate  behavior  and actions beyond latexmk's normal behavior.  For a good



                                  9 March 2026                                83






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     example of how they can be used to accommodate latexmk's behavior  to  par-
     ticular  packages,  see  the  file memoize_latexmkrc in the example_rcfiles
     subdirectory of the latexmk distribution.  (In a standard TeXLive installa-
     tion, that subdirectory is to be found in texmf-dist/doc/support/latexmk/)

     The hook mechanism is complementary to the  method  of  redefining  command
     strings  like  $pdflatex  etc.  The two methods have overlapping domains of
     usefulness.

     Note that the hook mechanism is newly made public in v.  4.84  of  latexmk.
     It is subject to change and improvement as experience is gained.

     The hooks are arranged in named hook stacks, and a hook subroutine is added
     to  a given stack by latexmk's add_hook subroutine (documented above).  The
     currently available stacks are as follows, listed in the approximate  order
     in which they are encountered in processing a document:


       before_xlatex
         The subroutines in this hook stack are called just before a
         *latex programs is run.


       after_xlatex
         The  subroutines  in this hook stack are called after a *latex programs
       is
         run.  Before the subroutines are called, latexmk has done some  immedi-
       ate
         postprocessing, e.g., to move the generated pdf file from the aux
         directory to the output directory when $emulate_aux is set to 1.


       after_xlatex_analysis
         The  subroutines  in  this hook stack are called after latexmk has done
       its
         dependency analysis after a *latex programs  is  run.   Subroutines  in
       this
         stack  provide  a useful way of adding items to the dependency informa-
       tion
         associated with particular packages and that latexmk doesn't
         automatically deal with.


       after_main_pdf
         The subroutines in this hook stack are called after one  of  the  rules
       that
         creates  the  document's pdf file. (This covers any of pdflatex, luala-
       tex,
         dvipdf, ps2pdf, xdvipdfmx.)






                                  9 March 2026                                84






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



       cleanup
         The subroutines in this hook stack are called whenever latexmk is about
         to do a cleanup operation.  They can be used, for  example,  to  tailor
       the
         deleted  files  to  the  peculiarities  of particular packages when la-
       texmk's
         general mechanisms for specifying files to be deleted are too  inflexi-
       ble.

         These subroutines are called before latexmk does any of its own file
         deletion; thus the hook subroutines have access to all the generated
         files that give package-specific information.


       cleanup_extra_full
         The  subroutines  in this hook stack are called in addition to the ones
       in
         the cleanup stack, whenever a full cleanup  operation  is  to  be  done
       (i.e.,
         one that includes the pdf, ps etc files).  They are called immediately
         after those in the cleanup stack, but still before latexmk does any of
         its own file deletion.


     (Any  other stacks defined in latexmk.pl but not listed above are to be re-
     garded as experimental and subject to change.)

     Each subroutine should return 0 on success and a non-zero value on failure.
     This matches the convention used for running programs, e.g., by Perl's sys-
     tem subroutine, and the matching convention used for subroutines for custom
     dependencies in latexmk.

     For most of the hook stacks, the subroutines are called in the context of a
     rule, with variables like $rule defined.  However, some hook  stacks,  like
     the cleanup ones, are called from outside any rule; and latexmk adjusts the
     relevant variables to refer to the overall task (i.e., of processing a par-
     ticular main .tex file).



   Advanced configuration: Using latexmk with make
     This  section  is  targeted only at advanced users who use the make program
     for complex projects, as for software development,  with  the  dependencies
     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.  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



                                  9 March 2026                                85






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     updated is inappropriate and error-prone, especially when the  dependencies
     can be determined automatically.  Latexmk solves both of these problems ro-
     bustly.

     Thus  for many standard LaTeX documents latexmk can be used by itself with-
     out the make program.  In a complex project it simply needs to be  suitably
     configured.   A  standard configuration would be to define custom dependen-
     cies 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  com-
     plicated,  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 usefully
     invoked from a Makefile.  The examples use  specific  features  of  current
     versions of GNU make, which is the default on both Linux and macOS systems.
     They may need modifications for other versions of make.

     The  simplest  method  is  simply to delegate all the relevant tasks to la-
     texmk, 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 func-
     tion correctly!)  Naturally, if making try.pdf from  its  associated  LaTeX
     file  try.tex  were  the only task to be performed, a direct use of latexmk
     without a Makefile would normally be better.  The benefit of using a  Make-
     file 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 con-
     ventional 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  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 latexmk is always run.  It is latexmk that
     decides whether any action is needed, e.g., a rerun  of  pdflatex.   Effec-
     tively  the  Makefile delegates 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



                                  9 March 2026                                86






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     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 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  automake  handles  auto-
     matic 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 docu-
     ment1.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 xfig program; these are commonly used for graph-
     ics  insertions in LaTeX documents.  Latexmk is arranged to output a depen-
     dency file after each run.  It is given the  -recorder  option,  which  im-
     proves  its  detection  of  files  generated during a run of pdflatex; such
     files should not be in the dependency list.  The -e  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 miss-
     ing 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



                                  9 March 2026                                87






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



     delegated to make.

     Escaping of characters in dependency lists: There are certain special char-
     acters that need to be escaped when names of files and directories contain-
     ing  them  appear  in a dependency list used by a make program.  Generally,
     such special characters are best avoided.

     By default, latexmk does no escaping of this kind, and the user  will  have
     to arrange to deal with the issue separately, if the relevant special char-
     acters  are  used.   Note  that the rules for escaping depend on which make
     program is used, and on its version.

     One special case is of spaces, since those are particularly prevalent,  no-
     tably  in standard choices of name for a user's home directory.  So latexmk
     does provide an option to escape spaces.  See the  option  -deps_escape=...
     and the variable $deps_escape for details.



NON_ASCII CHARACTERS IN FILENAMES, RC FILES, ETC
     Modern operating systems and file systems allow non-ASCII characters in the
     names  of  files  and  directories  that  encompass the full Unicode range.
     Mostly, latexmk deals with these correctly.  However, there are some situa-
     tions in which there are problems, notably on Microsoft Windows.  Prior  to
     version  4.77,  latexmk  had  problems with non-ASCII filenames on Windows,
     even though there were no corresponding problems on macOS and Linux.  These
     problems are corrected in the present version.

     DETAILS TO BE FILLED IN



SEE ALSO
     latex(1), bibtex(1), lualatex(1), pdflatex(1), xelatex(1).


BUGS (SELECTED)
     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: manually
     refresh (or reopen) display.  Or use one of the other previewers and update
     methods.

     (The following isn't really a bug, but concerns  features  of  previewers.)
     Preview  continuous mode only works perfectly with certain previewers: Xdvi
     on UNIX/Linux works for dvi files.  Gv on UNIX/Linux works for  both  post-
     script and pdf.  Ghostview on UNIX/Linux needs a manual update (reopen); it
     views  postscript  and  pdf.   Gsview under MS-Windows works for both post-
     script and pdf, but only reads the updated file  when  its  screen  is  re-
     freshed.   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:  con-
     figure latexmk to use sumatrapdf instead.)



                                  9 March 2026                                88






LATEXMK(1)                   General Commands Manual                  LATEXMK(1)



THANKS TO
     Authors  of  previous  versions.  Many users with their feedback, and espe-
     cially David Coppit (username david at node coppit.org) who made many  use-
     ful 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 too easily.)

AUTHOR
     Current version, by John Collins (Version 4.88).  Report bugs etc to his e-
     mail (jcc8 at psu.edu).

     Released version can be obtained  from  CTAN:  <http://www.ctan.org/pkg/la-
     texmk/>,  and from the author's website <https://www.cantab.net/users/john-
     collins/latexmk/>.
     Modifications and enhancements by Evan McLean (Version 2.0)
     Original script called "go" by David J. Musliner (RCS Version 3.2)







































                                  9 March 2026                                89



