Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/vene/pelican-bibtex

pelican-bibtex: Manage your academic publications page with Pelican and BibTeX
https://github.com/vene/pelican-bibtex

Last synced: 3 months ago
JSON representation

pelican-bibtex: Manage your academic publications page with Pelican and BibTeX

Awesome Lists containing this project

README

        

Pelican BibTeX
==============

Organize your scientific publications with BibTeX in Pelican

Author | Vlad Niculae
----------------|-----
Author Email | [email protected]
Author Homepage | http://vene.ro
Github Account | https://github.com/vene

*Note*: This code is unlicensed. It was not submitted to the `pelican-plugins`
official repository because of the license constraint imposed there.

Requirements
============

`pelican_bibtex` requires `pybtex`.

```bash
pip install pybtex
```

How to Use
==========

This plugin reads a user-specified BibTeX file and populates the context with
a list of publications, ready to be used in your Jinja2 template.

Configuration is simply:

```python
PUBLICATIONS_SRC = 'content/pubs.bib'
```

If the file is present and readable, you will be able to find the `publications`
variable in all templates. It is a list of tuples with the following fields:
```
(key, year, text, bibtex, pdf, slides, poster)
```

1. `key` is the BibTeX key (identifier) of the entry.
2. `year` is the year when the entry was published. Useful for grouping by year in templates using Jinja's `groupby`
3. `text` is the HTML formatted entry, generated by `pybtex`.
4. `bibtex` is a string containing BibTeX code for the entry, useful to make it
available to people who want to cite your work.
5. `pdf`, `slides`, `poster`: in your BibTeX file, you can add these special fields,
for example:
```
@article{
foo13
...
pdf = {/papers/foo13.pdf},
slides = {/slides/foo13.html}
}
```
This plugin will take all defined fields and make them available in the template.
If a field is not defined, the tuple field will be `None`. Furthermore, the
fields are stripped from the generated BibTeX (found in the `bibtex` field).

Template Example
================

You probably want to define a 'publications.html' direct template. Don't forget
to add it to the `DIRECT\_TEMPLATES` configuration key. Note that we are escaping
the BibTeX string twice in order to properly display it. This can be achieved
using `forceescape`.

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

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();
}

Publications



    {% for key, year, text, bibtex, pdf, slides, poster in publications %}
  • {{ text }}
    Bibtex ]
    {% for label, target in [('PDF', pdf), ('Slides', slides), ('Poster', poster)] %}
    {{ "[ %s ]" % (target, label) if target }}
    {% endfor %}

  • {% endfor %}

{% endblock %}
```

Extending this plugin
=====================

A relatively simple but possibly useful extension is to make it possible to
write internal links in Pelican pages and blog posts that would point to the
corresponding paper in the Publications page.

A slightly more complicated idea is to support general referencing in articles
and pages, by having some BibTeX entries local to the page, and rendering the
bibliography at the end of the article, with anchor links pointing to the right
place.