Betterbib
:green_book: Command-line tools for bibliographies.
Install / Use
/learn @texworld/BetterbibREADME
[!NOTE] See here for licensing information.
Bibliography files are notoriously hard to work with. Betterbib contains a number of easy-to-use command-line tools to help.
-
betterbib convertconverts between different bibliography formats, e.g. -
betterbib syncsyncs bibliography data with a number of online sources, e.g., -
betterbib formatformats your bibliography files to your liking. Can also (un)abbreviate author and journal names. -
betterbib doi-toconverts a DOI or DOI URL to a bibliography entry.
Installation
Install betterbib from PyPI with
<!--pytest.mark.skip-->pip install betterbib
Convert
Sync
Simply run
<!--pytest.mark.skip-->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
<!--pytest-codeblocks: expected-output-ignore-whitespace-->
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: 1)
-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)
Format
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
<!--pytest.mark.skipif(sys.version_info < (3, 11), reason="Need Python 3.11+")-->
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)
Dereference DOIs
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
<!--pytest-codeblocks: expected-output-ignore-whitespace-->
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 -
Related Skills
node-connect
347.0kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
claude-opus-4-5-migration
107.8kMigrate prompts and code from Claude Sonnet 4.0, Sonnet 4.5, or Opus 4.1 to Opus 4.5
frontend-design
107.8kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
model-usage
347.0kUse CodexBar CLI local cost usage to summarize per-model usage for Codex or Claude, including the current (most recent) model or a full model breakdown. Trigger when asked for model-level usage/cost data from codexbar, or when you need a scriptable per-model summary from codexbar cost JSON.
Security Score
Audited on Mar 31, 2026
