Publications¶
chronicle.publications registers external publications — papers you have a DOI or BibTeX for — so they can be cited as experiment inputs and discovered by anyone on Chronicle.
A publication is a public, system-owned, immutable reference asset (asset_type: "publication"). You register it once from a DOI or a BibTeX entry; a known DOI dedups to the existing record rather than minting a duplicate. Because it's a plain asset, you cite it like any other input — pass its id to variations.create(input_asset_ids=[...]), or link it to an open experiment or variation with chronicle.datasets.link(pub_id, experiment_id).
Register by DOI¶
Pass a doi and Chronicle resolves the metadata (via Crossref, falling back to doi.org):
result = chronicle.publications.register(doi="10.1103/PhysRevLett.116.061102")
pub = result["publication"]
print(pub["id"], result["existing"]) # asset id; True if it deduped to an existing record
register returns {"publication": {...}, "existing": bool}. A DOI Chronicle already knows returns the existing record with existing=True.
| Parameter | Type | Default | Notes |
|---|---|---|---|
doi |
str |
None |
Resolved via Crossref → doi.org. Dedup identity. |
bibtex |
str |
None |
Raw BibTeX entry. One of doi / bibtex is required. |
draft |
bool |
False |
Register a private, mutable placeholder (see below). |
confirm_create |
bool |
False |
Mint a new record when a BibTeX entry needs resolution. |
You must pass at least one of doi or bibtex, or register raises ValueError.
Register by BibTeX¶
When you only have a BibTeX entry, pass it as bibtex:
result = chronicle.publications.register(bibtex="""
@article{ligo2016,
title = {Observation of Gravitational Waves from a Binary Black Hole Merger},
author = {Abbott, B. P. and others},
journal= {Physical Review Letters},
year = {2016},
doi = {10.1103/PhysRevLett.116.061102},
}
""")
A BibTeX entry with no DOI that doesn't cleanly match may come back as:
Pick a candidate and link it as a citation, or re-call with confirm_create=True to mint a fresh record from your parsed entry.
Drafts and finalize¶
For work that isn't published yet, register a draft — a private, mutable placeholder owned by you, citable immediately:
draft = chronicle.publications.register(
bibtex="@unpublished{ours2026, title={Ripple PDE Distillation}, author={...}, year={2026}}",
draft=True,
)["publication"]
A draft is the only mutable publication; registered ones are immutable. Once the work is accepted, finalize promotes the draft in place to a registered, public record:
The asset id is unchanged, so existing citation links stay intact. As with register, pass at least one of doi / bibtex (or it raises ValueError). Only a draft you can write may be finalized. Returns {"publication": {...}}.
Search and get¶
search matches registered publications by title, newest first — run it before registering to reuse an existing record:
Calling search() with no query returns the full list. For full-text or semantic matching, use chronicle.search with asset_types=["publication"] instead.
Fetch a single record (it's an asset) by id: