Skip to main content

Fetch BibTeX from DOI, arXiv ID, journal URL and article title

Project description

doi2bib3

doi2bib3 is a small Python utility to fetch BibTeX metadata for a DOI or to resolve arXiv identifiers to DOIs and fetch their BibTeX entries. It accepts DOI inputs, DOI URLs, arXiv IDs/URLs (modern and legacy), publisher landing pages, and uses a sequence of resolution strategies to return a BibTeX string. This tool combines the features of doi2bib and doi2bib2.

Key behaviors

  • Provides bibtex entry for DOI and arXiv links.
  • Automatically detects arXiv inputs (e.g. 2411.08091, arXiv:2411.08091, or https://arxiv.org/abs/2411.08091) and queries the arXiv API for a DOI.
  • For non-arXiv inputs: attempts DOI normalization, content negotiation at doi.org, Crossref transform, and as a last resort a Crossref bibliographic search.
  • Supports publisher landing pages, including DOI links embedded in URL/HTML metadata and ScienceDirect article links whose URL contains an Elsevier PII.
  • Normalizes BibTeX output, including bundled APS/Nature journal abbreviation mappings and APS article-number enrichment when Crossref metadata provides it.
  • Full pipeline documentation (input -> output): docs/ALGORITHM.md
  • Diagram version of the pipeline: docs/ALGORITHM_VISUALS.md

A cross-platform GUI frontend is available: Check out QuickBib and its webapp.

Installation

Packaging status

Install from pypi

pip install --user doi2bib3

Arch Linux

In Arch Linux you can install it from the AUR with the command yay -S python-doi2bib3.

Ubuntu

You can use our official PPA

sudo add-apt-repository ppa:apandada1/quickbib
sudo apt update
sudo apt install python3-doi2bib3

Installing from source

Create a virtual environment and install runtime dependencies:

git clone https://github.com/archisman-panigrahi/doi2bib3.git
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

Install the package for local development:

pip install -e .

CLI usage

The CLI accepts a single positional identifier and an optional -o/--out path to save the BibTeX output. When installed, the package installs a console script named doi2bib3 (configured in pyproject.toml). From the repository root you can run the local script wrapper at scripts/doi2bib3.

# using the local wrapper script from repo root
python scripts/doi2bib3 <identifier> [-o OUT]

# or when installed as console script
doi2bib3 <identifier> -o references.bib

Examples

Fetch by DOI (bare DOI or DOI URL):

doi2bib3 10.1038/nphys1170
doi2bib3 https://doi.org/10.1038/nphys1170

ArXiv inputs (detected automatically):

doi2bib3 https://arxiv.org/abs/2411.08091
doi2bib3 arxiv.org/abs/2411.08091
doi2bib3 www.arxiv.org/abs/2411.08091
doi2bib3 arXiv:2411.08091
doi2bib3 2411.08091
doi2bib3 hep-th/9901001

Name of the paper (includes fuzzy search):

doi2bib3 "Projected Topological Branes"

Publisher/article pages:

doi2bib3 https://www.pnas.org/doi/10.1073/pnas.2305943120
doi2bib3 https://www.sciencedirect.com/science/article/pii/S0003491605000096?via%3Dihub

Save to a file:

doi2bib3 https://doi.org/10.1038/nphys1170 -o paper.bib

Note: If the tool is not installed, you can run python scripts/doi2bib3 https://doi.org/10.1038/nphys1170.

Programmatic usage

Public API

The Python API exposes one primary function:

  • doi2bib3.fetch_bibtex(identifier: str, timeout: int = 15) -> str

Behavior:

  • Accepts DOI, DOI URL, arXiv ID/URL, publisher URL, or article-title text.
  • Resolves input to a DOI using arXiv and/or Crossref when needed.
  • Resolves ScienceDirect article URLs by extracting the Elsevier PII and querying Elsevier article metadata before falling back to generic URL/HTML DOI extraction.
  • Fetches BibTeX via DOI content negotiation (with Crossref fallback).
  • Returns normalized BibTeX output (same formatting as CLI output).
  • Full step-by-step algorithm: docs/ALGORITHM.md

Example:

from doi2bib3 import fetch_bibtex

bib = fetch_bibtex('https://www.pnas.org/doi/10.1073/pnas.2305943120')
print(bib)

Programmatic CLI entry

Use subprocess with scripts/doi2bib3 (or installed doi2bib3 command) for automated CLI tests.

Internal module layout

  • doi2bib3/backend.py: input resolution and network fetch logic
  • doi2bib3/normalize.py: BibTeX normalization/transforms
  • doi2bib3/io.py: file output helpers
  • scripts/doi2bib3: command-line argument parsing and output handling

License

This project is distributed under the GNU General Public License v3 (GPL-3.0-only).

Acknowledgements

Parts of the code and documentation were assisted by copilot and codex.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

doi2bib3-1.0.0.tar.gz (32.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

doi2bib3-1.0.0-py3-none-any.whl (27.6 kB view details)

Uploaded Python 3

File details

Details for the file doi2bib3-1.0.0.tar.gz.

File metadata

  • Download URL: doi2bib3-1.0.0.tar.gz
  • Upload date:
  • Size: 32.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for doi2bib3-1.0.0.tar.gz
Algorithm Hash digest
SHA256 873f086132fef9c70b47d9bd25ed938e4b04308c8ecdcaf1a5b3b0760f4bcb3f
MD5 179166aaf72fc1ee0fff414c9fbaf477
BLAKE2b-256 a270ecb906b90515ed2c4d57d54170ae579ae8d771e0a241c983b0082e5e8749

See more details on using hashes here.

File details

Details for the file doi2bib3-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: doi2bib3-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 27.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for doi2bib3-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 403d650aaf0d14d5cb6c880443ef50ef91aebc462461dc579a5db6d9c89dd19f
MD5 08e7796102ad5b1d6a20e42876f9232a
BLAKE2b-256 1f2294268e371feb512ef660b066cf9866422d34e9c895e46603978d943ee25b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page