Daily Shaarli

All links of one day in a single page.

18 februari 2023

A note on working with bib2df and bib2gls

A small wrinkle when using bib2df together with bib2gls: the latter does not tolerate empty cross-reference fields.

bib2df::df2bib() takes a tibble and generates the entries.bib file, and since the tibble by necessity contains one column for each field, any entries with empty see fields get converted by bib2df::df2bib() to see={}. The presence of any glossary entry with an empty see={} field causes bib2gls to fail:

Processing resource thesis-1.glstex.
Parsing fields for entry 'absorption_coefficient'
Checking field aliases for absorption_coefficient.
Value=>user1={}
>> name={{}\ensuremath{\alpha}}
=>> name={{}\ensuremath{\alpha}}
>> first={absorption coefficient, \ensuremath{\alpha}}
=>> first={absorption coefficient, \ensuremath{\alpha}}
>> text={absorption coefficient}
=>> text={absorption coefficient}
>> description={absorption coefficient}
=>> description={absorption coefficient}
>> user1={}
=>> user1={}
>> see={}
=>> see={}
Checking cross-references for: absorption_coefficient
Field alias not set.
Error: EOFException
com.dickimawbooks.texparserlib.TeXParser.popStack(TeXParser.java:2635)
com.dickimawbooks.texparserlib.TeXObjectList.popArg(TeXObjectList.java:1294)
com.dickimawbooks.texparserlib.TeXObjectList.popArg(TeXObjectList.java:1275)
com.dickimawbooks.bib2gls.Bib2GlsEntry.initSeeRef(Bib2GlsEntry.java:4710)
com.dickimawbooks.bib2gls.Bib2GlsEntry.initCrossRefs(Bib2GlsEntry.java:4694)
com.dickimawbooks.bib2gls.GlsResource.processBibList(GlsResource.java:6722)
com.dickimawbooks.bib2gls.Bib2Gls.process(Bib2Gls.java:2706)
com.dickimawbooks.bib2gls.Bib2Gls.main(Bib2Gls.java:6616)

As you can see, other fields may be empty, but not the see field.

This is not a bug in either bib2df:: or bib2gls, and I don't expect either project to "fix" this issue. The former is not meant for and has no notion of glossaries, and the latter is not really expecting us to be generating the .bib file, so why should there be empty see fields?

To work around this I suggest removing all lines with see={} fields from the entries.bib file, here an example using sed:

sed -i '"/[Ss]ee\s*=\s*{}/d" entries.bib

I simply added this sed command to the R chunk that calls bib2df::df2bib().
I should probably add that my reason for generating the glossary bib-file from R in the first place was to make use of the excellent constants library.

Notes and links

This behaviour was observed on Ubuntu 22.04, R 4.1.3, TeXLive 2022, glossaries-extra 1.50, bib2gls 3.2, bib2df 1.1.1.