TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Normally, LaTeX will only create references for the BibTeX entries cited in the text. Is there a way of extracting these entries into a different .bib file automatically? For example if I have a .bib file with two entries, and only one is cited in a particular text, I need a way of creating a new .bib file with just that reference.

share|improve this question

migrated from stackoverflow.com Jan 21 '12 at 14:42

This question came from our site for professional and enthusiast programmers.

For Mac users of BibDesk, there is BBL to BIB with BibDesk. – Adam Liter Sep 19 '13 at 3:08
For Windows, JabRef provides this capacity: see [here][1] [1]: tex.stackexchange.com/questions/98370/… – user59315 Jul 18 '14 at 14:10
might be a duplicate of tex.stackexchange.com/questions/417/… – lenz Feb 23 '15 at 0:09

With a TeX Live distribution (possibly also with MiKTeX) there is a bibexport program. Assuming your document is myarticle.tex, you have to compile it normally and then you call

bibexport -o extracted.bib myarticle.aux

where extracted.bib is the name that you want to give to your new .bib file. Notice that you have to give the extension .aux (or no extension at all).

Then you have to change the name of the .bib file in your document, in order to use extracted.bib.

share|improve this answer
In MiKTeX 2.9 this tool is missing :-( – Kurt Feb 15 '13 at 16:24
Although this falls outside of the scope of the question, perhaps a brief word about how this tool does not work with biber-driven bibliographies (or with .bib files that use biblatex fields such as date instead of year) is in order. – jon Feb 15 '13 at 16:29
@jon bibexport uses BibTeX for doing its job. The manual tells how to add new fields (section 1.4). For biblatex/Biber compatibility the script should look not only for \citation commands in the aux file but also for \abx@aux@cite. – egreg Feb 15 '13 at 16:42
@egreg -- Right. I was thinking more for people who look at your answer, but don't realize why bibexport isn't working for them; most of them are not going to be modifying bibexport.sh. Another problem that might arise is if you use non-standard entry types (from BibTeX's perspective). I use @Collectio{<key>,..., e.g., for essay collections; that comes through as @{<key>,.... – jon Feb 15 '13 at 20:02
+1 for the usage example – the bibexport help page doesn't mention that the main argument is the .aux file (it might be obvious, but wasn't for me). – lenz Feb 23 '15 at 0:05

jabref can do this in both command line and gui modes.

First gui mode:

Keep your master.bib file open in jabref. Then in ToolsNew subdatase based on AUX file to get

screenshot of AUX file import dialog box

Here select the .aux file, click parse, and select and the generate. You should get a sub database opened in jabref. Save it.

From command line, assuming that you take care of paths do this:

jabref.jar -a filename[.aux],newBibFile[.bib]

See also command line options to jabref.

share|improve this answer

With biblatex/biber you can use

biber document-base-name.bcf --output_format=bibtex
share|improve this answer
The above command doesn't work with entries using the crossref field. – asr Apr 18 '14 at 14:32
@asr See my answer below. You just need to tell biber to do this. – cfr Nov 14 '14 at 2:29

This is a supplement to pavel's answer which aims to address an issue raised in the comments. It is therefore a more specific solution than the one there: the simpler command will work fine if you don't need to resolve crossref fields in .bib entries.

In order to resolve crossref fields in a .bib file when using biblatex/biber, you need to tell biber what to do.

Given <filename>.tex, run:

pdflatex <filename>.tex
biber --output_format=bibtex --output_resolve <filename>.bcf

Where latex, xelatex, lualatex etc. can be substituted for pdflatex as appropriate. So long as it generates your .bcf it is fine.

share|improve this answer

In addition to egreg's answer, I'd like to point out an alternative solution. Nelson Beebe has developed utilities called bibextract, citetags and citefind to handle sub-bibliography databases. You can obtain them here.

In this case, you would compile the document normally and then type in a shell

citetags myarticle.aux > myarticle-tags
citefind myarticle-tags mybib.bib > mysubbib.bib

The first command prints all the citation keys used in your .tex, while the second selects all the entries from my bib.bib with keys from myarticle-tags. Of course, one can easily write a script to merge the two commands if needed.

Although it works in a similar fashion as bibexport, this solution has the advantage that it does not delete the biblatex fields such as date, while bibexport does by default as mentioned in the comments. It also works with biblatex if you use bibtex as a backend, but as far as I know, it does not if you use biber.

share|improve this answer

Corentin's solution worked for my case where I needed to combine cited references from multiple .tex documents into one bib file. I had trouble installing bibextract on OSX for two reasons: 1) nawk is not installed by default and 2) the CHECKSUM command in the makefile prevented the sh and awk files from being installed. After running, ./configure, modifify the Makefile as follows:


SEDCMD          = $(SED) -e 's=@LIBDIR@=$(LIBDIR)=g' \
                     -e 's=@BINDIR@=$(BINDIR)=g' \
                     -e 's=/bin/sed=$(SED)=g' 


SEDCMD          = $(SED) -e 's=@LIBDIR@=$(LIBDIR)=g' \
                     -e 's=@BINDIR@=$(BINDIR)=g' \
                     -e 's=/bin/sed=$(SED)=g' \
                     -e 's=nawk -f=awk -f=g'

then change

        $(SEDCMD) $$f.sh | $(CHECKSUM) > $(BINDIR)/$$f ; \
        $(SEDCMD) $$f.awk | $(CHECKSUM) > $(LIBDIR)/$$f.awk ; \
        $(SEDCMD) $$f.man | $(CHECKSUM) > $(MANDIR)/$$f.$(MANEXT) ; \


        $(SEDCMD) $$f.sh > $(BINDIR)/$$f ; \
        $(SEDCMD) $$f.awk > $(LIBDIR)/$$f.awk ; \
        $(SEDCMD) $$f.man > $(MANDIR)/$$f.$(MANEXT) ; \

then run sudo make install and bibextract will work as noted above.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.