我想获取一个或多个bibtex条目的文件,并将其输出为html格式的字符串。具体风格并不那么重要,但我们只是说APA。基本上,我想要bibtex2html的功能,但我需要Python API,因为我在Django工作。一些人提出了类似的问题here和here。我还找到了提供可能解决方案的人here。
我遇到的第一个问题非常基础,即我甚至无法运行上述解决方案。我一直收到与ModuleNotFoundError: No module named 'pybtex.database'; 'pybtex' is not a package
类似的错误。我肯定安装了pybtex,可以在shell中进行基本的API调用没问题,但每当我尝试导入pybtex.database.whatever或pybtex.plugin时,我都会遇到ModuleNotFound
错误。它可能是python 2 vs python 3的东西吗?我使用后者。
第二个问题是我无法理解pybtex python API documentation。具体来说,从我可以看出来看,format_from_string
和format_from_file
调用是专门为我想要做的而设计的,但我似乎无法使语法正确。具体来说,当我做的时候
pybtex.format_from_file('foo.bib',style='html')
我得到pybtex.plugin.PluginNotFound: plugin pybtex.style.formatting.html not found
。我想我只是不理解这个电话应该如何工作,我找不到任何正确的电话示例。
答案 0 :(得分:0)
这是我为类似用例编写的功能-将书目纳入Pelican生成的网站中。
from pybtex.plugin import find_plugin
from pybtex.database import parse_string
APA = find_plugin('pybtex.style.formatting', 'apa')()
HTML = find_plugin('pybtex.backends', 'html')()
def bib2html(bibliography, exclude_fields=None):
exclude_fields = exclude_fields or []
if exclude_fields:
bibliography = parse_string(bibliography.to_string('bibtex'), 'bibtex')
for entry in bibliography.entries.values():
for ef in exclude_fields:
if ef in entry.fields.__dict__['_dict']:
del entry.fields.__dict__['_dict'][ef]
formattedBib = APA.format_bibliography(bibliography)
return "<br>".join(entry.text.render(HTML) for entry in formattedBib)
确保已安装以下内容:
pybtex==0.22.2
pybtex-apa-style==1.3