使用pybtex从bibtex转换为格式化的HTML参考书目,例如哈佛风格

时间:2016-10-07 05:18:34

标签: python python-3.x bibliography

我正在使用Django并将bibtex存储在我的模型中,并希望能够以格式化HTML字符串的形式传递我的视图,使其看起来像哈佛参考样式。

使用Pybtex does not recogonize bibtex entry中描述的方法,我可以将bibtex字符串转换为pybtex BibliographyData对象。我相信它应该可以从基于文档https://pythonhosted.org/pybtex/api/formatting.html的HTML格式获得,但我似乎无法让它工作。

Pybtex似乎设置为从命令行而不是python使用,并且在互联网上使用它的例子非常少。有人做过这样的事吗?或许将bibtex传递给我的模板并使用像https://github.com/pcooksey/bibtex-js这样的javascript库来尝试获得哈佛风格的近似值会更容易吗?

2 个答案:

答案 0 :(得分:1)

为此,我改编了here的一些代码。我不确定这种特定格式样式的名称是什么,但很可能你可以更改/编辑它。这是它的外观:

import io
import six
import pybtex.database.input.bibtex
import pybtex.plugin

pybtex_style = pybtex.plugin.find_plugin('pybtex.style.formatting', 'plain')()
pybtex_html_backend = pybtex.plugin.find_plugin('pybtex.backends', 'html')()
pybtex_parser = pybtex.database.input.bibtex.Parser()

my_bibtex = '''
@Book{1985:lindley,
author =    {D. Lindley},
title =     {Making Decisions},
publisher = {Wiley},
year =      {1985},
edition =   {2nd},
}
'''

data = pybtex_parser.parse_stream(six.StringIO(my_bibtex))
data_formatted = pybtex_style.format_entries(six.itervalues(data.entries))
output = io.StringIO()
pybtex_html_backend.write_to_stream(data_formatted, output)
html = output.getvalue()

print (html)

这将生成以下HTML格式的引用:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head><meta name="generator" content="Pybtex">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Bibliography</title>
</head>
<body>
<dl>
<dt>1</dt>
<dd>D.&nbsp;Lindley.
<em>Making Decisions</em>.
Wiley, 2nd edition, 1985.</dd>
</dl></body></html>

答案 1 :(得分:1)

我注意到命令行pybtex-format工具为HTML产生了合理的输出:

$ pybtex-format myinput.bib myoutput.html

所以我转到pybtex/database/format/__main__.py的源代码,找到了一个非常简单的解决方案,对我来说就像一个魅力:

from pybtex.database.format import format_database
format_database('myinput.bib', 'myoutput.html', 'bibtex', 'html')

这是我的输入和输出文件:

@inproceedings{Batista18b,
        author   = {Cassio Batista and Ana Larissa Dias and Nelson {Sampaio Neto}},
        title    = {Baseline Acoustic Models for Brazilian Portuguese Using Kaldi Tools},
        year     = {2018},
        booktitle= {Proc. IberSPEECH 2018},
        pages    = {77--81},
        doi      = {10.21437/IberSPEECH.2018-17},
        url      = {http://dx.doi.org/10.21437/IberSPEECH.2018-17}
}
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head><meta name="generator" content="Pybtex">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Bibliography</title>
</head>
<body>
<dl>
<dt>1</dt>
<dd>Cassio Batista, Ana&nbsp;Larissa Dias, and Nelson <span class="bibtex-protected">Sampaio Neto</span>.
Baseline acoustic models for brazilian portuguese using kaldi tools.
In <em>Proc. IberSPEECH 2018</em>, 77–81. 2018.
URL: <a href="http://dx.doi.org/10.21437/IberSPEECH.2018-17">http://dx.doi.org/10.21437/IberSPEECH.2018-17</a>, <a href="https://doi.org/10.21437/IberSPEECH.2018-17">doi:10.21437/IberSPEECH.2018-17</a>.</dd>
</dl></body></html>