【问题标题】:Using pybtex to convert from bibtex to formatted HTML bibliography in e.g. Harvard style使用 pybtex 从 bibtex 转换为格式化的 HTML 参考书目,例如哈佛风格
【发布时间】:2016-10-07 05:18:33
【问题描述】:

我正在使用 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 库来尝试获得哈佛风格的近似值会更容易?

【问题讨论】:

    标签: python python-3.x bibliography


    【解决方案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>
    

    【讨论】:

      【解决方案2】:

      我注意到命令行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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-14
        • 2011-06-03
        • 2018-08-19
        • 2020-06-07
        • 1970-01-01
        • 2016-11-06
        • 1970-01-01
        相关资源
        最近更新 更多