Skip to content

python tools for building curriculum vitae and other documents from bibtex file.

License

Notifications You must be signed in to change notification settings

josephcslater/vitae

Repository files navigation

PyPi Download stats

vitae

A Python module for building curriculum vitae and other documents from a BibTeX file. vitae leverages bibtexparser, LaTeX, and pandoc to streamline getting citations of your papers into the formats you need quickly without manual intervention. Of course, with many settings, it can be a bit tedious. I personally recommend setting up a Jupyter notebook with the commands you regularly execute available there. Alternatively, you can call it from the terminal which allows it to work inside a more complex workflow.

Purpose

I hate formatting citations. It's tedious, and error-prone. Further, when I build my CV, I tend to muck it up and leave something out, mis-sort it, duplicate it accidentally, etc. So, I need a tool to do a better job with what is a menial task.

Install

pip install vitae

or

pip install --user vitae

Usage

Please see the brief demo Jupyter notebook. It's very brief. I need to add more. The whole package is basically two functions. Please read the help:

makemycv

To do anything useful here, you must have LaTeX with BibTeX installed. If you don't use LaTeX, this module isn't the place to start. Sorry.

The first function here, makemycv, will take a few arguments and put sorted \bibentry commands into .tex files with names corresponding to BibTeX entry types. In doing so, you can then simply use an \input command to embed all of these citations right in your document in an enumerated environment.

You'll need the following in the header of your LaTeX cv file.

\usepackage{bibentry}
\newcommand{\enquote}[1]{``#1''}
\makeatletter\let\saved@bibitem\@bibitem\makeatother
\usepackage[colorlinks=true]{hyperref}
\makeatletter\let\@bibitem\saved@bibitem\makeatother

The last 3 lines are only necessary if you want to use the hyperref package, which has some compatibility issues with bibentry.

Then put:

\input{articles.tex}

where you want articles listed, etc.

Then, with your maintained .bib file, in the same location as your cv (for now), and within the same directory as your cv and cv.bib file open a python terminal and type.

>>> import vitae
>>> vitae.makemycv()

Alternatively, you can type:

> python -c  "import vitae; vitae.makemycv()"

in your terminal (Anaconda Terminal if you are using Anaconda Python on Windows).

This will make your article.tex file along with the other defaults (see the help on makemycv).

Note that that are a ton of options for makemycv. Please use:

>>> import vitae
>>> help(vitae.makemycv)

To see how to tweak it to your needs.

If you try vitae, please understand:

  1. No warrantee. This is still a work in progress.
  2. Please provide your feedback.
  3. Please help! I can use help with additional portions.

If you don't use LaTeX, this isn't easy enough for you yet. It's a long ways away. However, texblog has a decent start in writing a Résumé in LaTeX . It doesn't include the paper inclusion trick being used by vitae.

write_bibs

The second function is write_bibs. This allows you to convert bibs with a bunch of constraints into a format that pandoc can output. It REQUIRES a full LaTeX and pandoc installation that works in your terminal environment.

Constraints include:

  1. Since a year
  2. Number
  3. Types of publications

For instance:

>>> import vitae
>>> vitae.write_bibs(bibfile = '/Users/jslater/Documents/Resumes/cv.bib',
                     bibliographystyle='aiaa',
                     outfile_name='try.html',
                     since_year=2008)

Alternatively, from a command line:

> python -c  "import vitae; vitae.write_bibs(bibfile='cv.bib',
                                             bibliographystyle='aiaa',
                                             outfile_name = 'bibs.html',
                                             since_year=2008)"

How I use it

I have a Makefile that I use for tasks that I am creating. The first is a simple one for building my cv, the contents of which are:

help:
        @echo "Please use \`make <target>' where <target> is one of"
        @echo "  cv         to make standard pdf cv"
        @echo "  pdf        see cv"

cv:
        python -c  'import vitae; vitae.makemycv(silent = True)'
        pdflatex cv
        bibtex cv
        pdflatex cv

pdf:
        cv

Summary

Please see the full help on each function.

Vitae is on pypi but you can pip install the latest, and possibly non-working, version right now from github (I love bug reports!):

pip install git+https://github.com/josephcslater/vitae

Help

vitae uses luatex to enable unicode characters. On Ubuntu, the base tetex install doesn't include the necessary file luaotfload. To resolve this open a terminal and type:

sudo apt install texlive-luatex

Release notes:

1.1.3: Work-around for pandoc failure to convert {\em correctly.

1.1.2: Unify name of bibtex_types and entrytypes. Will issue a warning
if you incorrectly use entrytypes, but will still work.
1.1.1: Included test bib file that can easily be accessed from notebook.
Corrected incorrect help in makemycv Minor non-functional corrections.

1.1.0: Numerous minor fixes:

  • write_bibs failed when path not explicitly included.
  • Quieted latex output.
  • Moved to luatex to enable unicode characters.
  • Readme updated to reflect terminal usage.

1.0.0: You can now convert your bib citations to any format that pandoc can handle. I think.

0.1.1: You can now select only bibentries by a defined author. Note that authornames are not always all that unique. You need to ensure that all authornames are perfect for the selected author. That means initials, etc. I hope to use fuzzywuzzy for this someday- it's a bit complicated and a judgement call.

0.1.0: First release. It works, it's useful, it's not done, but it does what I needed it for. You can now use \input statements with bibentry instead of typing your own citations by hand.

Future plans

  1. Preferences.
  1. Reader (doesn't overwrite specified arguments)
  2. Writer (configurator on call or when it doesn't exist)
  3. Editor?
  1. Bug fixes when I find them. Any other suggestions?

What else would be nice?