# 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' ); }