I realise that you've managed to create a MWE and posted that as a separate question, but I thought it might help to answer your question "What can interfere with glossaries to prevent printing?" in a more general way that might be useful to others.
There's a Java GUI diagnostic tool called makeglossariesgui that can be used to analyse a document that uses the glossaries
package to determine possible problems. (It also has a batch mode that can be used instead of makeglossaries
but the GUI mode has more extensive diagnostic messages.) Once it's identified the problem and you've fixed it, you can switch back to makeglossaries
.
Although makeglossaries
parses makeindex
/xindy
warning and error messages, makeglossariesgui
additionally analyses the LaTeX messages in the .log
file and can pick up problems that makeglossaries
doesn't detect. There are some examples below.
Example 1
Let's suppose I have a file called test.tex
:
\documentclass{article}
\usepackage[acronym]{glossaries}
\makeglossaries
\newacronym{sa}{SA}{Sample Acronym}
\begin{document}
\gls{sa}.
\printglossary[type=acronym]
\end{document}
If I do the usual
pdflatex test
makeglossaries test
pdflatex test
then makeglossaries
issues the warning you observed:
Warning: File 'test.glo' is empty.
Have you used any entries defined in glossary 'main'?
Remember to use package option 'nomain' if you
don't want to use the main glossary.
This is a warning rather than an error in this case, but it may mask something more problematic (as in Example 3, below).
With makeglossariesgui
, if I load test.aux
I get the error message:
No entries were found for glossaries 'main'

The diagnostics tab provides more details:

This reads:
There were no entries listed for the main glossary. Remember that you
must index entries for them to appear in the glossary using the
commands provided by the glossaries package. Entries that have been
defined but not indexed won't be listed. If you don't want to use this
glossary, add the nomain
package option to your document. Check the
following:
- Have you used commands like
\gls
or \glsadd
in the document? (If you haven't, you need to add them.)
- If you have used commands like
\glsadd
or \glsaddall
in the preamble, have you remembered to put them after \makeglossaries
- If you have at least version 4.24 of the glossaries package, have you used the
debug
option? (That might provide some more information
for me to analyse.)
If I switch to the "General Information" tab, I can see that my document has defined two glossaries: main
and acronym
, but there are no entries in the main
glossary:

This is why the test.glo
file is empty and is the reason for the warning produced by makeglossaries
. The main
glossary is created by default, but my document hasn't defined or used any entries in that glossary. If I don't require the main
glossary, then I need to follow the recommendation and use the nomain
package option:
\usepackage[nomain,acronym]{glossaries}
Example 2
This problem is more subtle:
\documentclass{article}
\usepackage{glossaries}
\makeglossaries
\newacronym{sa}{SA}{Sample Acronym}
\begin{document}
\gls{sa}.
\printglossary[type=acronym]
\end{document}
In this case, if I do
pdflatex test
makeglossaries test
pdflatex test
then makeglossaries
doesn't make any complaint, but the test.pdf
file doesn't contain the glossary. makeindex
is quite happy with the test.glo
file and generates the test.gls
file without a problem. If I switch to glossaries-extra
, I get an error message, but with just the base glossaries
package the message in the .log
file is rather cryptic. However, makeglossariesgui
can detect the problem:

No glossary 'acronym'
The diagnostics panel provides more information:
It looks as though you might have done something like
\printglossary[type={acronym}]
, but there's no acronym
glossary.
Example 3
This is another instance where glossaries
doesn't generate an error message:
% arara: pdflatex
% arara: makeglossaries
% arara: pdflatex
\documentclass{article}
\usepackage{glossaries}
\newglossaryentry{sample}{name={sample},description={an example}}
\glsaddall
\makeglossaries
\begin{document}
Test.
\printglossary
\end{document}
In this case makeglossaries
doesn't provide much help:
Warning: File 'test.glo' is empty.
Have you used any entries defined in glossary 'main'?
Remember to use package option 'nomain' if you
don't want to use the main glossary.
I'm getting the same error message as in my first example, but I've used \glsaddall
so what's the problem? The answer is in the check list shown in makeglossariesgui
's diagnostic panel, which is the same as earlier, but the pertinent item here is:
- If you have used commands like
\glsadd
or \glsaddall
in the preamble, have you remembered to put them after \makeglossaries
If I add the debug
package option:
\usepackage[debug]{glossaries}
I get some more information:
It seems you have tried to index an entry in the main glossary on line
10, but the associated file hasn't been opened. Remember to use
\makeglossaries
before commands like \glsadd
and \glsaddall
.
Details of lost indexing code:
\glossaryentry{sample?\glossentry{sample}|setentrycounter[]{page}\glsnumberformat}{1}
So the problem is that I've put \makeglossaries
in the wrong place. It needs to go before \glsaddall
. (This is similar to \index
and \makeindex
.) The glossaries
package doesn't complain about using \glsaddall
before \makeglossaries
as it's perfectly reasonable to comment out \makeglossaries
if you're working on a draft and don't want the overhead of repeatedly rebuilding the glossary whilst you're editing a complicated section of the document.
So the answer to "What can interfere with glossaries to prevent printing?" is: potentially a lot of things, but makeglossariesgui
might be able to diagnose the cause.
! Package glossaries
, (2) check that the glossary labelledacronym
has been defined, (3) check ifmakeglossaries
(makeindex
/xindy
) has any warning or error messages. One other thing you could try is to change\usepackage{glossaries}
to\usepackage{glosaries-extra}
and replace\setacronymstyle
with\setabbreviationstyle[acronym]
. This provides more diagnostic warnings and errors, so it might flag up something thatglossaries
misses.