Как изменить стиль ссылок на Pybtex в sphinx? - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь использовать sphinxcontrib.bibtex , чтобы включить цитаты / ссылки в некоторую документацию.Он говорит, что вы можете установить стиль с помощью:

.. bibliography: refs.bib
   :style: plain

И он поставляется со следующими стилями: alpha, plain, которые создают ссылочные метки, которые выглядят следующим образом:

  • alpha: [ZieglerBenderSchreiber+14] или [TMT14] или [PCY+16a]
  • plain: [1], [2], [3]

Я считаю, что alpha является непоследовательным, но я думаю, что у правых чисел plain отсутствует контекст.Чтобы настроить форматирование, он предоставляет следующий пример:

from pybtex.style.formatting.unsrt import Style as UnsrtStyle
from pybtex.style.template import toplevel # ... and anything else needed
from pybtex.plugin import register_plugin

class MyStyle(UnsrtStyle):

    def format_XXX(self, e):
        template = toplevel [
            # etc.
        ]
        return template.format_data(e)

register_plugin('pybtex.style.formatting', 'mystyle', MyStyle)

, с которым sphinx терпит неудачу при:

sphinx-build -M html . out
Running Sphinx v1.8.3

Configuration error:
There is a syntax error in your configuration file: bad input (conf.py, line 92)
Did you change the syntax from 2.x to 3.x?

Кажется, что используется pybtex под капотом, такследуя примеру из этой документации:

from pybtex.style.formatting import BaseStyle
from pybtex.richtext import Text, Tag

class MyStyle(BaseStyle):
    def format_article(self, entry):
        return Text('Article ', Tag('em', entry.fields['title']))

from pybtex.plugin import register_plugin
register_plugin('pybtex.style.formatting', 'mystyle', MyStyle)

и sphinx завершается неудачно с:

Exception occurred:
  File "/home/josh/codes/docs/conf.py", line 88, in format_article
    return Text('Article ', Tag('em', entry.fields['title']))
AttributeError: 'dict' object has no attribute 'fields'
The full traceback has been saved in /tmp/sphinx-err-dftwlzvr.log, if you want to report the issue to the developers.

... и я думаю, что это просто настраивает текст записи библиографии, а не текст метки в любом случае,Как настроить текст метки?Я бы предпочел одно из следующего:

  1. только цифры в скобках ([1]), например plain, но с надписями в верхнем индексе
  2. что-то вроде [ref.12], похожее на eq.12 или fig.12
  3. что-то вроде alpha, но с постоянным количеством символов

1 Ответ

0 голосов
/ 08 мая 2019

Ненавижу отвечать на свой вопрос, но вот что я понял. Я добавил следующее к своему conf.py, и он использует ключ bibtex для текста метки:

from pybtex.style.formatting.unsrt import Style as UnsrtStyle
from pybtex.style.labels.alpha import LabelStyle as AlphaLabelStyle

class KeyLabelStyle(AlphaLabelStyle):
  def format_label(self, entry):
    label = entry.key
    return label

class CustomStyle(UnsrtStyle):
  default_sorting_style = 'author_year_title'

  def __init__(self, *args, **kwargs):
    super(CustomStyle, self).__init__(*args, **kwargs)
    self.label_style = KeyLabelStyle()
    self.format_labels = self.label_style.format_labels

from pybtex.plugin import register_plugin
register_plugin('pybtex.style.formatting', 'custom', CustomStyle)

Для активации в RST:

.. bibliography:: refs.bib
   :style: custom

Однако это не полный ответ, поскольку он не генерирует собственные метки ... но переопределяет некоторые внутренние элементы существующего стиля. Так хакерский ответ почти ... Надеюсь, это поможет кому-то еще.

...