Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
sphinxcontrib_section_autoref
===================
Example of autoref
===================
Section 1
==========
You can write reference to section title without any definitions:
:ref:`Section 1`
:ref:`Section 2`
:ref:`index/Section 1`
Section 2
==========
Hello world
# -*- coding: utf-8 -*-
"""
sphinxcontrib_section_autoref
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Add link-target labels to every sections automatically.
You can make reference :ref:`section-name` without label defintions.
And more, labels which are similar to wiki-names (cf. index/secition-name) are
added in same time.
:copyright: Copyright 2012 by Takeshi Komiya.
:license: BSDL.
"""
import os.path
from docutils import nodes, transforms
from docutils.nodes import fully_normalize_name as normalize_name
class AutoReferenceTransform(transforms.Transform):
application = None
default_priority = 500
def apply(self):
filename = os.path.relpath(self.document['source'], self.application.env.srcdir)
docname = os.path.splitext(filename)[0]
for target in self.document.traverse(nodes.section):
# append global link-target including docname (cf. index/section-name)
name = docname + '/' + normalize_name(target[0][0])
target['names'].insert(0, name)
self.document.note_explicit_target(target)
def setup(app):
AutoReferenceTransform.application = app
app.add_transform(AutoReferenceTransform)

TBBle commented Nov 15, 2017

If you're looking at this, sphinx.ext.autosectionlabel is included with Sphinx 1.4 onwards. The version here has issues with duplicate IDs when the same section name is used more than once in a document; the Sphinx version also sees issues with duplicate labels in this case.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment