# Implements use of bib2gls with glossaries-extra.
# Version of 5 May 2025.
# Thanks to Marcel Ilg for a suggestion.
push @generated_exts, 'glg', '%R*.glstex';
# For case that \GlsXtrLoadResources is used and so glstex file (first one)
# has same name as .aux file.
add_cus_dep( 'aux', 'glstex', 0, 'run_bib2gls' );
# The (commented-out) definition below ONLY WORKS if (a) aux_dir is
# cwd, and (b) document uses only \glsxtrresourcefile, so that
# glstex files have the same basenames as the corresponding .bib files.
# and (c) does not use \GlsXtrLoadResources.
# It fails nastily if the document uses both of \glsxtrresourcefile and
# \GlsXtrLoadResources.
# Note that the previous definition works fine if the document uses both of
# \glsxtrresourcefile and \GlsXtrLoadResources. It only fails if the
# document exclusively uses \glsxtrresourcefile.
#
# **Important:***
# ********* The use of \glsxtrresourcefile is now deprecated, as of **********
# ********* v. 1.55 of the glossaries-extra package, which writes a **********
# ********* warning message to the .log file if \glsxtrresourcefile **********
# ********* is used. **********
# **** Therefore the following line is commented out, but the commented-out ****
# **** line is left in here, since it gives information that is relevant ****
# **** for (certain) legacy documents. ****
### add_cus_dep( 'bib', 'glstex', 0, 'run_bib2gls_alt' );
sub run_bib2gls {
my $ret = 0;
my ($base, $path) = fileparse( $_[0] );
# Default encoding assumed by bib2gls is the system CS, which on
# Windows is normally *not* CP65001 (aka UTF-8). But the aux and log
# files are UTF-8, at least with the default settings of TeX Live.
# So we tell bib2gls about this.
# With the options as given here, the .glg will be encoded in the system
# CS, which will be suitable for latexmk's use, since that is the CS for
# communicating with the file system.
# (**Warning**, it is simpler to do this rather than using, the option
# --default-encoding to set everything to UTF-8, for then that would
# apply also to the .glg, which would entail having to convert filenames
# in the .glg file to the system CS.)
my @bib2gls_cmd = (
"--tex-encoding", "UTF-8",
"--log-encoding", "UTF-8",
"--group",
"--dir",
$path,
$base
);
if ($silent) { unshift @bib2gls_cmd, "--silent"; }
unshift @bib2gls_cmd, "bib2gls";
print "Running '@bib2gls_cmd'...\n";
$ret = system @bib2gls_cmd;
if ($ret) {
warn "Run_bib2gls: Error, so I won't analyze .glg file\n";
return $ret;
}
# Analyze bib2gls's log file:
my $glg = "$_[0].glg";
if ( open( my $glg_fh, '<', $glg) ) {
rdb_add_generated( $glg );
while (<$glg_fh>) {
s/\s*$//;
if (/^Reading\s+(.+)$/) { rdb_ensure_file( $rule, $1 ); }
if (/^Writing\s+(.+)$/) { rdb_add_generated( $1 ); }
}
close $glg_fh;
}
else {
warn "Run_bib2gls: Cannot read log file '$glg': $!\n";
}
return $ret;
}
sub run_bib2gls_alt {
return Run_subst( 'internal run_bib2gls %Y%R' );
}