Skip to main content
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:

See the CHANGELOG for the full history of releases.

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?

Release files for vitae 1.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for vitae 1.2.1
File Size Uploaded
vitae-1.2.1.tar.gz 158.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for vitae 1.2.1
File Interpreter ABI Platform
vitae-1.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 320.0 kB

Release files / vitae-1.2.1.tar.gz

Download URL vitae-1.2.1.tar.gz
Size 158.2 kB
Tags Source
SHA-256 checksum
How to use checksums
da8958c6b0459a71bda2555caf8259e77b7f0ce294de5227f2968ec1e6d90063
BLAKE2b-256 checksum
How to use checksums
3aaf90cd5e9e7e5389a982dc803ed92fb5f6cb8f1c9ad73187ab212827d4bb0e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.

Transparency log

Release files / vitae-1.2.1-py3-none-any.whl

Download URL vitae-1.2.1-py3-none-any.whl
Size 161.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8679dd5a10ab0a309a9c7c9d12b6b685caa1938543981d4a81bd5531c95ac353
BLAKE2b-256 checksum
How to use checksums
87d8320f9d6a388151da97dc69fccd8a1ee93f7c81cbbc1a05c53904d82ede51
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.2.1 This release

2 release files

1.1.4

2 release files

1.1.3

1 release file

1.1.2

1 release file

1.1.1

1 release file

1.1.0

1 release file

1.0.0

1 release file

0.1.1

1 release file

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page