I am an academic, up for renewal this year, and the committee would like an up-to-date curriculum vitae. At the same time, I am working on getting my websites back in order, and would like to include an up-to-date CV as an HTML page.

In the US business world, a résumé is a one-page summary of your career that you send to potential employers. In some countries this document is called a curriculum vitae. In academia, however, a CV is a list of everything you have done in your career. Like a résumé, it may include degrees awarded, honors and grants received, articles published, and other accomplishments; but unlike a résumé, it grows linearly over time.

I am hoping for a workflow where I could keep a complete curriculum vitae in an XML file, add to it each time I complete a project, course, paper, etc., and with XSL and a few scripts process it into either PDF or HTML.

I first started searching for XML document formats for CVs. I found:

  • xmlresume Not much new on this since project since 2004. Not quite structured enough for my tastes. Also geared more for résumés than for academic CVs
  • europass Well structured, includes processing tools in XSL, but also more for résumés. Also I am USian not European.
  • HR-XML maybe too structured for me to comprehend. Although there is at least a sourceforge project for processing documents in this format.

From the comments, and before this question was migrated, I found John MacFarlane's website and CV. This is pretty much what I am going for. MacFarlane uses YAML, CSV, and yst to generate these pages, but as far as I can tell he hasn't open-sourced that process.

At the moment I am going with europass, but repurposing a few elements to better fit an academic cv. But since I'm sure I'm not so unique to think about this, I wonder what others have done.

  • See e.g. this. Or use pandoc. But I think this is off topic here.
    – ff524
    Feb 1, 2017 at 15:59
  • @ff524: Thanks for the link. I'm not familiar with the PDF to HTML route—I more often think of generating both from the same source. I would happily accept a migration to an SE site more relevant.
    – Matthew Leingang
    Feb 1, 2017 at 16:15
  • One possible simple solution (not elegant, but I think it would do the trick), would be to make your updates only on your website, e.g. WordPress; and take screenshots and convert to pdf. They you'd have pdf's handy to send as email attachments. // Alternatively you could make your updates to a google doc and then embed it in the web page. Feb 1, 2017 at 17:26
  • 2
    John MacFarlane (original creator of pandoc) uses a combination of YST and pandoc to manage his CV and website.
    – StrongBad
    Feb 1, 2017 at 17:39
  • How "clean" do you want the HTML to be? (after all, LibreOffice can save your document as both HTML and PDF)
    – Nicolas Raoul
    Feb 18, 2017 at 10:13

1 Answer 1


Warning: Not a ready-to-use solution, requires some XSL programming

Here is how I built my resume generator, from my understanding the same approach would work with academic curriculum vitae too.

  1. Using LibreOffice, design your CV as you wish. Write 2 example items for each section, for instance 2 degrees, 2 jobs, 2 papers, etc. Use logical style names.
  2. Save, close LibreOffice, and unzip the LibreOffice file (keep a backup of the original file though).
  3. Find the XML data file, it is easy to find and navigate through.
  4. Identify the XML section for each item, and replace with XSL apply-templates calls.
  5. Write your curriculum vitae in pure XML, with just a root containing elements like degrees/degree, jobs/job, papers/paper, etc.
  6. Write a small script that executes the XSL transformation (using xsltproc for instance), zips the file, and calls headless LibreOffice (no GUI) to generate HTML and PDF.
  7. If you ever want to modify the style, open the original LibreOffice file that you had backed up, change and save. Then unzip, compare the changes and apply them, luckily most of them will be to files others than the one you modified.

All free, Open Source.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.