使用 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
在所有模板中找到该变量。它是具有以下键的字典列表:
-
key是条目的 BibTeX 键(标识符)。 -
year是条目发表的年份。用于使用 Jinja 的模板中按年份分组groupby -
text是 HTML 格式的条目,由pybtex. -
bibtex是一个包含条目的 BibTeX 代码的字符串,有助于让想要引用您作品的人可以使用它。 -
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 }}
[ <a href="javascript:disp('{{ publication.bibtex|replace('\n', '\\n')|escape|forceescape }}');">Bibtex</a> ]
{% for label, target in [('PDF', publication.pdf), ('Slides', publication.slides), ('Poster', publication.poster)] %}
{{ "[ <a href=\"%s\">%s</a> ]" % (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 }}
[ <a href="javascript:disp('{{ publication.bibtex|replace('\n', '\\n')|escape|forceescape }}');">Bibtex</a> ]
{% for label, target in [('PDF', publication.pdf), ('Slides', publication.slides), ('Poster', publication.poster)] %}
{{ "[ <a href=\"%s\">%s</a> ]" % (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 }}
[ <a href="javascript:disp('{{ publication.bibtex|replace('\n', '\\n')|escape|forceescape }}');">Bibtex</a> ]
{% for label, target in [('PDF', publication.pdf), ('Slides', publication.slides), ('Poster', publication.poster)] %}
{{ "[ <a href=\"%s\">%s</a> ]" % (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 }}
[ <a href="javascript:disp('{{ publication.bibtex|replace('\n', '\\n')|escape|forceescape }}');">Bibtex</a> ]
{% for label, target in [('PDF', publication.pdf), ('Slides', publication.slides), ('Poster', publication.poster)] %}
{{ "[ <a href=\"%s\">%s</a> ]" % (target, label) if target }}
{% endfor %}
</li>
{% endfor %}
</ul>
{% endfor %}
</section>
...
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
内置分布
pelican_bib -0.2.7-py3-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | cdcca3678a6b1fcdbebfb457ee10e6716e546408b3db22204ae5c5cf19348bd1 |
|
| MD5 | 2009be2e784bdf9c9fb51ecca7968385 |
|
| 布莱克2-256 | be2d2dc45d316f0353f16f3074171cbf900bfec1371d0ee2c6690864a70e966b |