checkcites

checkcites is a Lua script written for the sole purpose of detecting undefined/unused references from LaTeX auxiliary or bibliography files.

About

checkcites is a Lua script written for the sole purpose of detecting unused or undefined references from both LaTeX auxiliary or bibliography files. We use the term unused reference to refer to the reference present the bibliography file - with the .bib extension - but not cited in the .tex file. The term undefined reference is exactly the opposite, i.e, the item cited in the .tex file, but not present in the .bib file.

The original idea came from a question posted in the TeX community at Stack Exchange about how to check which bibliography entries were not used. We decided to write a script to check references. We opted for Lua, since it's a very straightforward language and it has an interpreter available on every modern TeX distribution.

Usage

The script is pretty simple to use. The only requirement is a recent TeX distribution, such as TeX Live.

checkcites uses the generated auxiliary files to start the analysis. From version 2.0 on, the scripts supports two backends:

bibtex

Default behavior, the script checks .aux files looking for citations, in the form of \citation{a}. For every \citation line found, checkcites will extract the citations and add them to a table, even for multiple citations separated by commas, like \citation{a,b,c}. The citation table contains no duplicate values. At the same time checkcites also looks for bibliography data, in the form of \bibdata{a}. Similarly, for every \bibdata line found, the script will extract the bibliography data and add them to a table, even if they are separated by commas, like \bibdata{d,e,f}. Again, no duplicate values are allowed. Stick with this backend if you are using BibTeX or BibLaTeX with the backend=bibtex package option.

biber

With this backend, the script checks .bcf files (which are XML-based) looking for citations, in the form of bcf:citekey tags. For every tag found, checkcites will extract the corresponding values and add them to a table. The citation table contains no duplicate values. At the same time checkcites also looks for bibliography data, in the form of bcf:datasource tags. Similarly, for every tag found, the script will extract the bibliography data and add them to a table. Again, no duplicate values are allowed. Stick with this backend if you are using BibLaTeX with the default options or with the backend=biber option explicitly set. It is important to note, however, that the glob=true option is not supported yet.

Command line

Open a terminal and run checkcites:

$ checkcites

When you run checkcites without providing any argument to it, the a message error will appear. Do not panic! Try again with the --help flag:

$ checkcites --help

If you are using BibTeX, simply provide the auxiliary file - the one with the .aux extension - which is generated when you compile your main .tex file. For example, if your main document is named foo.tex, you probably have a foo.aux file too. Then simply invoke

$ checkcites foo.aux

checkcites allows an additional argument that will tell it how to behave. For example

$ checkcites --unused foo.aux

will make the script only look for unused references in your .bib file. The argument order doesn't matter, you can also run

$ checkcites foo.aux --unused

and get the same behaviour. Similarly, you can use

$ checkcites --undefined foo.aux

to make the script only look for undefined references in your .tex file. If you want checkcites to look for both unused and undefined references, go with

$ checkcites --all foo.aux

If no special argument is provided, --all is set as default.

If you are using BibLaTeX, we need to inspect .bcf files instead. For example, if your main document is named foo.tex, you probably have a foo.bcf file too. Then invoke

$ checkcites foo.aux --backend biber

Note the --backend flag used for BibLaTeX support. We can even omit the file extension, the script will automatically assign one based on the current backend.

License

This script is licensed under the LaTeX Project Public License. If you want to support LaTeX development by a donation, the best way to do this is donating to the TeX Users Group.

The team

checkcites is brought to you by the Island of TeX. If you want to support TeX development by a donation, the best way to do this is donating to the TeX Users Group.

Edit this page on GitLab