我正在尝试使用sphinxcontrib.bibtex在某些文档中包含引用文献/参考文献。它说您可以set the style使用:
.. 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)
并且狮身人面像失败并显示:
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]
一样的括号数字(plain
),但带有上标标签[ref.12]
的事物,类似于eq.12
或fig.12
alpha
,但字符数一致的答案 0 :(得分:0)
我不想回答自己的问题,但这就是我想出的。我在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
这不是一个完整的答案,因为它实际上不会生成自定义标签...但是会覆盖现有样式的某些内部内容。有点骇人听闻,几乎可以回答...我希望它能对其他人有所帮助。