How to make Latexmk use makeglossaries?
At Hans-Peter E. Kristiansen’s request, I provide another answer, extending the one given by kay102.
Add the following lines to some latexmk
initialization file (e.g., on Linux systems, ~/.latexmkrc
):
add_cus_dep('glo', 'gls', 0, 'run_makeglossaries');
add_cus_dep('acn', 'acr', 0, 'run_makeglossaries');
sub run_makeglossaries {
if ( $silent ) {
system "makeglossaries -q '$_[0]'";
}
else {
system "makeglossaries '$_[0]'";
};
}
As a consequence, if latexmk
is invoked with the -silent
option makeglossaries
will be silent, too.
Moreover, add
push @generated_exts, 'glo', 'gls', 'glg';
push @generated_exts, 'acn', 'acr', 'alg';
$clean_ext .= ' %R.ist %R.xdy';
to update the cleanup functionality of latexmk
appropriately.
You need to write a configuration file that tells latexmk which files are interesting for the glossary and how to handle them. Fortunately, the author provides some sample rc files.
Putting
add_cus_dep('glo', 'gls', 0, 'makeglo2gls');
sub makeglo2gls {
system("makeindex -s '$_[0]'.ist -t '$_[0]'.glg -o '$_[0]'.gls '$_[0]'.glo");
}
in ~/.latexmkrc
(globally in your home directory) or ./latexmkrc
(locally in your document directory) should do the trick.
You can also let latexmk call makeglossaries directly by adding the following to your latexmkrc file (in my case I had to add it to $HOME/.latexmkrc):
add_cus_dep('glo', 'gls', 0, 'makeglossaries');
add_cus_dep('acn', 'acr', 0, 'makeglossaries');
sub makeglossaries {
system "makeglossaries $_[0]";
if ( -z "$_[0].glo" ) {
open GLS, ">$_[0].gls";
close GLS;
}
return 0;
}