Сфинкс: как сделать перекрестную ссылку на цель, созданную пользовательской директивой - PullRequest
5 голосов
/ 22 апреля 2020

У меня проблемы с перекрестными ссылками на раздел, созданный с помощью пользовательской директивы.

Вот директива:

from docutils import nodes
from docutils.parsers import rst


class TestDirective(rst.Directive):

    has_content = False
    required_arguments = 1
    option_spec = {}

    def run(self):
        my_arg = self.arguments[0]

        target_node = nodes.target('', '', refid=nodes.make_id(my_arg))
        section = nodes.section(
            '',
            nodes.title(text=my_arg),
            ids=[nodes.make_id(my_arg)],
            names=[nodes.fully_normalize_name(my_arg)])

        return [target_node, section]


def setup(app):
   app.add_directive('mytest', TestDirective)

А вот как это используется:

=============
Test document
=============

.. mytest:: section1

Section 1 content.


.. _section2:

section2
========

Section 2 content.

Теперь следующее работает только для section2:

Here are links to :ref:`section1` and :ref:`section2`.

Ссылка генерируется правильно только для section2, и я получаю следующую ошибку:

test.rst:19: WARNING: undefined label: section1 (if the link has no caption the
label must precede a section header)

Как я могу сделать эту работу?

...