Skip to main content

使用 Pelican 和 BibTeX 组织您的科学出版物

项目描述

鹈鹕围兜

在 Pelican 中使用 BibTeX 组织您的科学出版物。该软件包基于 Vlad 的pelican-bibtex。当前版本向后兼容,可以替换pelican-bibtex当前项目的安装。

安装

pelican_bib需要pybtex.

pip install pybtex

使用点子

pip install pelican-bib

将插件添加到PLUGINS变量中:

PLUGINS = ['pelican_bib', ...]

作为子模块

在您的鹈鹕网站中:

$ mkdir plugins
$ git submodule add https://github.com/scheunemann/pelican-bib plugins/pelican-bib

鹈鹕配置:

PLUGIN_PATHS = ['plugins/pelican_bib', ...]
PLUGINS = ['pelican_bib', ...]

如何使用

该插件读取用户指定的 BibTeX 文件并使用出版物列表填充上下文,准备在您的 Jinja2 模板中使用。

配置很简单:

PUBLICATIONS_SRC = 'content/pubs.bib'

如果文件存在且可读,您将能够publications 在所有模板中找到该变量。它是具有以下键的字典列表:

  1. key是条目的 BibTeX 键(标识符)。

  2. year是条目发表的年份。用于使用 Jinja 的模板中按年份分组groupby

  3. text是 HTML 格式的条目,由pybtex.

  4. bibtex是一个包含条目的 BibTeX 代码的字符串,有助于让想要引用您作品的人可以使用它。

  5. pdf, slides, poster: 在您的 BibTeX 文件中,您可以添加这些特殊字段,例如:

    @article{
       foo13
       ...
       pdf = {/papers/foo13.pdf},
       slides = {/slides/foo13.html}
    }
    

该插件将获取所有已定义的字段并使其在模板中可用。如果未定义字段,则元组字段将为None. 此外,这些字段从生成的 BibTeX 中剥离(在bibtex字段中找到)。

拆分为出版物列表

您可以为每个 bibtex 条目添加一个额外的字段。该字段的这个值是一个逗号分隔的列表。这些值将成为publications_lists包含模板中相关 bibtex 条目的列表的键。

例如,如果您想将一个条目与两个不同的标签 ( foo-tag, bar-tag) 相关联,则将以下字段添加到 bib 条目:

@article{
   foo13
   ...
   tags = {foo-tag, bar-tag}
}

在你的pelicanconf.py你需要设置:

PUBLICATIONS_SPLIT_BY = 'tags'

然后,在您的模板中,您可以使用变量publications_lists['foo-tag']和访问这些列表publications_lists['bar-tag']

如果要将所有未标记的条目(即没有在 中定义的字段的条目PUBLICATIONS_SPLIT_BY)分配给名为 的标记others,请设置:

PUBLICATIONS_UNTAGGED_TITLE = 'others'

包含出版物列表的页面

要使用以下方法之一生成显示出版物的页面,您需要添加模板文件和页面。

1.) 将模板文件作为publications.htmlincontent/templates并将其作为直接模板添加到您的网页。添加你的pelicanconf.py

THEME_TEMPLATES_OVERRIDES.append('templates')

2.) 在您的页面文件夹中创建一个页面,例如,“content/pages/publications.rst”,在您的内容中包含以下元数据:

Publications
############

:template: publications

示例模板

publications.html模板的示例内容:

{% extends "base.html" %}
{% block title %}Publications{% endblock %}
{% block content %}

<script type="text/javascript">
    function disp(s) {
        var win;
        var doc;
        win = window.open("", "WINDOWID");
        doc = win.document;
        doc.open("text/plain");
        doc.write("<pre>" + s + "</pre>");
        doc.close();
    }
</script>
<section id="content" class="body">
    <h1 class="entry-title">Publications</h1>
    <ul>
        {% for publication in publications %}
          <li id="{{ publication.key }}">{{ publication.text }}
          [&nbsp;<a href="javascript:disp('{{ publication.bibtex|replace('\n', '\\n')|escape|forceescape }}');">Bibtex</a>&nbsp;]
          {% for label, target in [('PDF', publication.pdf), ('Slides', publication.slides), ('Poster', publication.poster)] %}
            {{ "[&nbsp;<a href=\"%s\">%s</a>&nbsp;]" % (target, label) if target }}
          {% endfor %}
          </li>
        {% endfor %}
    </ul>
</section>
{% endblock %}

(注意:我们将 BibTeX 字符串转义两次以正确显示它。这可以使用来实现forceescape

排序条目

条目可以按属性之一排序,例如,如果您想按日期对条目进行排序,您的无序列表将如下所示:

...
    <ul>
        {% for publication in publications|sort(True, attribute='year') %}
          <li id="{{ publication.key }}">{{ publication.text }}
          [&nbsp;<a href="javascript:disp('{{ publication.bibtex|replace('\n', '\\n')|escape|forceescape }}');">Bibtex</a>&nbsp;]
          {% for label, target in [('PDF', publication.pdf), ('Slides', publication.slides), ('Poster', publication.poster)] %}
            {{ "[&nbsp;<a href=\"%s\">%s</a>&nbsp;]" % (target, label) if target }}
          {% endfor %}
          </li>
        {% endfor %}
    </ul>
...

sort 内置过滤器是在 jinja2 的 2.6 版本中添加的。

分组条目

按年份对条目进行分组,

...
<ul>
  {% for grouper, publist in publications|groupby('year')|reverse %}
  <li> {{grouper}}
    <ul>
    {% for publication in publist %}
      <li id="{{ publication.key }}">{{ publication.text }}
      [&nbsp;<a href="javascript:disp('{{ publication.bibtex|replace('\n', '\\n')|escape|forceescape }}');">Bibtex</a>&nbsp;]
      {% for label, target in [('PDF', publication.pdf), ('Slides', publication.slides), ('Poster', publication.poster)] %}
        {{ "[&nbsp;<a href=\"%s\">%s</a>&nbsp;]" % (target, label) if target }}
      {% endfor %}
      </li>
    {% endfor %}
    </ul></li>
  {% endfor %}
</ul>
...

使用出版物列表

如上所述,出版物列表存储在publications_lists. 您可以将publications前面的示例替换publications_lists['foo-tag']为仅显示带有 标记的出版物foo-tag

您还可以遍历地图并显示每个列表的所有围兜条目。上一个示例的部分更改为:

...
<section id="content" class="body">
    <h1 class="entry-title">Publications</h1>
    {% for tag in publications_lists %}
        {% if publications_lists|length > 1 %}
            <h2>{{tag}}</h2>
        {% endif %}
	       <ul>
	       {% for publication  in  publications_lists[tag] %}
            <li id="{{ publication.bibkey }}">{{ publication.text }}
            [&nbsp;<a href="javascript:disp('{{ publication.bibtex|replace('\n', '\\n')|escape|forceescape }}');">Bibtex</a>&nbsp;]
            {% for label, target in [('PDF', publication.pdf), ('Slides', publication.slides), ('Poster', publication.poster)] %}
                {{ "[&nbsp;<a href=\"%s\">%s</a>&nbsp;]" % (target, label) if target }}
            {% endfor %}
            </li>
	       {% endfor %}
	       </ul>
	   {% endfor %}
</section>
...

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

pelican-bib-0.2.7.ta​​r.gz (5.9 kB 查看哈希)

已上传 source

内置分布

pelican_bib-0.2.7-py3-none-any.whl (6.6 kB 查看哈希)

已上传 py3