我想获取一个或多个bibtex条目的文件,并将其输出为html格式的字符串。具体样式不是很重要,但是我们只说APA。基本上,我要使用bibtex2html的功能,但要使用Python API,因为我在Django中工作。有人问过类似的问题herehere。我还发现有人提供了可能的解决方案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_stringformat_from_file调用是专门为我要执行的操作而设计的,但是我似乎无法正确理解语法。具体来说,当我做

pybtex.format_from_file('foo.bib',style='html')

我得到pybtex.plugin.PluginNotFound: plugin pybtex.style.formatting.html not found。我想我只是不了解该呼叫应该如何工作,并且找不到任何正确执行此呼叫的示例。

最佳答案

这是我为类似用例编写的功能-将书目合并到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

关于python - 使用pybtex,python 3将bibtex转换为html,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49224690/

10-13 03:32