# Creating .bib file containing only the cited references of a bigger .bib file

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.

-

## migrated from stackoverflow.comJan 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/… –  Johannes Pfeifer Jul 18 '14 at 14:10

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`.

-
+1 Nice tool. I didn't know it. –  Marco Daniel Jan 21 '12 at 15:38
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

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`.

-

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

First gui mode:

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

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]
``````

Useful link for command line options to jabref: enter link description here

-

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.

-
It works. Thanks! –  asr Nov 18 '14 at 11:51

With `biblatex`/`biber` you can use

``````biber document-base-name.bcf --output_format=bibtex
``````
-
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