Last active
March 20, 2023 21:06
-
-
Save jonls/b910afc46473b02597c4 to your computer and use it in GitHub Desktop.
DOI role for Sphinx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
""" | |
doilinks | |
~~~~~~~~~~~~~~~~~~~ | |
Extension to add links to DOIs. With this extension you can use e.g. | |
:doi:`10.1016/S0022-2836(05)80360-2` in your documents. This will | |
create a link to a DOI resolver | |
(``https://doi.org/10.1016/S0022-2836(05)80360-2``). | |
The link caption will be the raw DOI. | |
You can also give an explicit caption, e.g. | |
:doi:`Basic local alignment search tool <10.1016/S0022-2836(05)80360-2>`. | |
:copyright: Copyright 2015 Jon Lund Steffensen. Based on extlinks by | |
the Sphinx team. | |
:license: BSD. | |
""" | |
from docutils import nodes, utils | |
from sphinx.util.nodes import split_explicit_title | |
def doi_role(typ, rawtext, text, lineno, inliner, options={}, content=[]): | |
text = utils.unescape(text) | |
has_explicit_title, title, part = split_explicit_title(text) | |
full_url = 'https://doi.org/' + part | |
if not has_explicit_title: | |
title = 'doi:' + part | |
pnode = nodes.reference(title, title, internal=False, refuri=full_url) | |
return [pnode], [] | |
def setup_link_role(app): | |
app.add_role('doi', doi_role) | |
def setup(app): | |
app.connect('builder-inited', setup_link_role) | |
return {'version': '0.1', 'parallel_read_safe': True} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@mikofski That seems like a much better solution. Also requires adding
It produces this though:
Oh I get it. You need to change it to