Bibliography files are notoriously hard to work with. Betterbib contains a number of easy-to-use command-line tools to help.
-
betterbib convert
converts between different bibliography formats, e.g. -
betterbib sync
syncs bibliography data with a number of online sources, e.g., -
betterbib format
formats your bibliography files to your liking. Can also (un)abbreviate author and journal names. -
betterbib doi-to
converts a DOI or DOI URL to a bibliography entry.
Install betterbib from PyPI with
pip install betterbib
See here for licensing information.
Simply run
betterbib sync in.bib
to sync your bibliography file with online sources. For example, the input
@article{wiles,
title={Fermat Last Theorem},
doi={10.2307/2118559},
}
is converted to
@article{wiles,
number = {3},
doi = {10.2307/2118559},
pages = {443},
source = {Crossref},
volume = {141},
author = {Wiles, Andrew},
year = {1995},
month = may,
url = {https://doi.org/10.2307/2118559},
issn = {0003-486X},
journal = {The Annals of Mathematics},
publisher = {JSTOR},
title = {Modular Elliptic Curves and Fermat's Last Theorem},
}
See -h
/--help
for all options.
betterbib sync -h
Usage: betterbib sync [-h] [-i] [-c N] [-s SRC] [-m MINIMUM_SCORE] [-q] [--debug]
[--output-format {bibtex,biblatex,csl-json,ris}]
infiles [infiles ...]
Positional Arguments:
infiles input bibliography files
Options:
-h, --help show this help message and exit
-i, --in-place modify infile in place
-c, --num-concurrent-requests N
number of concurrent HTTPS requests (default: 5)
-s, --sources SRC sources to try (comma-separated, with order; default:
crossref,dblp,pubmed)
-m, --minimum-score MINIMUM_SCORE
minimum score to count as a match (default: 0.0)
-q, --quiet don't show progress info (default: show)
--debug some debug output (default: false)
--output-format {bibtex,biblatex,csl-json,ris}
force output format (default: same as input)
After that, you can for example run
betterbib format in.bib --sort-fields --align-values --journal-names short --abbrev-first-names
to get
@article{wiles,
author = {Wiles, A.},
doi = {10.2307/2118559},
issn = {0003-486X},
journal = {Ann. Math.},
month = may,
number = {3},
pages = {443},
publisher = {JSTOR},
source = {Crossref},
title = {Modular Elliptic Curves and Fermat's Last Theorem},
url = {https://doi.org/10.2307/2118559},
volume = {141},
year = {1995},
}
betterbib format -h
Usage: betterbib format [-h] [-i] [--drop DROP] [--journal-names {long,short,unchanged}] [--abbrev-first-names]
[--sort-entries] [--sort-fields] [--doi-url-type {unchanged,old,new,short}]
[--page-range-separator PAGE_RANGE_SEPARATOR] [--protect-title-capitalization]
[--indent [INDENT]] [--align-values]
infiles [infiles ...]
Positional Arguments:
infiles input BibTeX files
Options:
-h, --help show this help message and exit
-i, --in-place modify infile in place
--drop DROP drop fields from entries (can be passed multiple times)
--journal-names {long,short,unchanged}
force full or abbreviated journal names (default: unchanged)
--abbrev-first-names abbreviate first names in author lists etc. (default: false)
--sort-entries sort entries alphabetically by BibTeX key (default: false)
--sort-fields sort fields alphabetically (default: false)
--doi-url-type {unchanged,old,new,short}
DOI URL (new: https://doi.org/<DOI>, short: https://doi.org/abcde) (default: new)
--page-range-separator PAGE_RANGE_SEPARATOR
page range separator (int or string, default: unchanged)
--protect-title-capitalization
brace-protect names in titles (e.g., {Newton}; default: false)
--indent [INDENT] indentation (int or string; default: 1)
--align-values align field values (default: false)
Given a DOI or a DOI URL, it's often useful to generate a bibliography entry for it. betterbib doi-to
does just that.
betterbib doi-to ris 10.1002/andp.19053221004
TY - JOUR
IS - 10
DO - 10.1002/andp.19053221004
SP - 891
EP - 921
DS - Crossref
VL - 322
AU - Einstein, A.
DA - 1905/01
UR - https://doi.org/10.1002/andp.19053221004
SN - 0003-3804
SN - 1521-3889
JF - Annalen der Physik
JO - Ann. Phys.
PB - Wiley
TI - Zur Elektrodynamik bewegter Körper
ER -