The current version of the glossary/glossaries sample latexmkrc file on CTAN http://mirrors.ctan.org/support/latexmk/example_rcfiles/glossaries_latexmkrc contains
# This shows how to use the glossaries package
# (http://www.ctan.org/pkg/glossaries) and the glossaries-extra package
# (http://www.ctan.org/pkg/glossaries-extra) with latexmk.
N.B. There is also the OBSOLETE glossary package
(http://www.ctan.org/pkg/glossary), which has some differences. See item 2.
1. If you use the glossaries or the glossaries-extra package, then you can use:
add_cus_dep( 'acn', 'acr', 0, 'makeglossaries' );
add_cus_dep( 'glo', 'gls', 0, 'makeglossaries' );
$clean_ext .= " acr acn alg glo gls glg";
sub makeglossaries {
my ($base_name, $path) = fileparse( $_[0] );
my @args = ( "-q", "-d", $path, $base_name );
if ($silent) { unshift @args, "-q"; }
return system "makeglossaries", "-d", $path, $base_name;
}
2. The above will tend to run makeglossaries more often than needed, since
each out of date file will trigger the use of makeglossaries, even
though makeglossaries makes all the glossaries. The following solution
solves this, but at the expense of not having the convenience that
makeglossaries can change how it makes the glossaries depending on the
settings of the glossaries package.
A better solution will need more advanced work.
add_cus_dep( 'acn', 'acr', 0, 'makeglossaries' );
add_cus_dep( 'glo', 'gls', 0, 'makeglossaries' );
$clean_ext .= " acr acn alg glo gls glg";
sub makeglossaries {
my @args = ( "-s", "$_[0].ist", "-t", "$$Psource.ilg",
"-o", $$Pdest, $$Psource );
if ($silent) { unshift @args, "-q"; }
return system "makeindex", @args;
}
However, the makeglossaries subroutine from the glossaries_latexmkrc example is flawed.
- The initial definition of
@args, in line two, should not contain -q, since it is added to @args in line 3 via unshift iff $silent.
- The
@args array is not used in the final line of the subroutine
A corrected version of the makeglossaries is
sub makeglossaries {
my ($base_name, $path) = fileparse( $_[0] );
my @args = ( "-d", $path, $base_name );
if ($silent) { unshift @args, "-q"; }
return system "makeglossaries", @args;
}
There was an older glossary_latexmkrc that read
add_cus_dep( 'acn', 'acr', 0, 'makeglossaries' );
add_cus_dep( 'glo', 'gls', 0, 'makeglossaries' );
$clean_ext .= " acr acn alg glo gls glg";
sub makeglossaries {
my ($base_name, $path) = fileparse( $_[0] );
pushd $path;
my $return = system "makeglossaries", $base_name;
popd;
return $return;
}
This also resolves the quoting issues on Windows mentioned (and resolved) in Oliver's answer for me.