I'd like to make a template of sorts for a Curriculum Vitae. While there seem to be plenty of examples online of CVs using TeX, I'm looking for an easy way to include everything in the file, but compile one of the following:

  • Abbreviated (~1 pg) CV
  • Academic CV (most things, but focusing on the academic side)
  • Annotated CV (includes longer descriptions of various tasks)
  • Exhaustive CV (everything!)
  • Resume (less academic, more job experiences and skills)

Essentially, I'd like to write all these things down once and not have to re-write everything whenever I need to submit a different kind of CV or resume.

It'd be neat to define either lists or entries of "publications," "hobbies," "academic_employment" and "nonacademic_employment", and output whatever things make sense given the type of CV or resume I want to make. Perhaps these entries could look like the following: (recognizing that underscores aren't great for command names :-) )

\cv_name{John Doe}

\cv_degree{Big State University,Computer Science,Bachelors,1995}
\cv_degree{Big State University,Math,Bachelors,1995}   % double-major?
\cv_degree{University Of Big State,Math,PhD,1999}

\cv_job{Cashier,Joe's Bakery,01/01/1990,01/01/1995,555-555-5555,{I was a cashier but got tired of it.}}   % optional annotation?
\cv_job{Head Baker,Joe's Bakery,01/01/1990,01/01/1995,555-555-5555} 
\cv_current_job{CEO,BakeriesAreUs,01/01/1995,666-666-6666}  % no end date needed for current job

\cv_publication{My Autobiography,\cite{myBook}}         % incorporate with BibTex?

\cv_award{Some Scholarship,1993}                        % no annotation
\cv_award{Nobel Peace Prize,2005,{I love humanity!}}    % annotated

Output could perhaps use flags and if statements, e.g. (in pseudocode):

make_academic_cv = true


if (make_exhaustive_cv) or (make_resume) or (make_academic_cv) then

if (make_exhaustive_cv) or (make_resume) then

if (make_exhaustive_cv) or (make_academic_cv) then

if (make_exhaustive_cv) or (make_academic_cv) then

if (make_exhaustive_cv) then

Has anyone done anything like this before?

One possible solution would be to adopt the BibTeX or glossaries model of having a "database" file of various kinds of entries, and then referencing the entries as needed in the main file. I haven't found a package to do this, but I'm definitely open to suggestions!

I am not skilled enough to know how to do this myself, but could work with somebody else's code, if it were similar enough to what I'm looking to do. Perhaps it would be easier to show how to do just one or two of those macros (e.g. "\cv_degree{}").

Thanks in advance!

  • 1
    Use both: if everything is put into macros and you use conditional commands (\newif, etoolbox's booleans), it is easy to control output. Then a simple Makefile can set the switches: make long, make superlong, etc. I don't go quite that far, relying instead on separate template files (e.g., 'letterpaper' vs 'A4') and input files ('publications', 'conferences', 'teaching') in order to avoid overly complex including and excluding or environments.
    – jon
    Feb 13, 2014 at 18:29
  • @jon it is easy to control if the output is there or not, but it is not so easy to differently sort and group the output.
    – StrongBad
    Feb 13, 2014 at 19:10
  • @StrongBad -- How so? Just use etoolbox to process a CSV list where each item is a separate file name that gets \input-ted. Then run something like: pdflatex -jobname=csvlist-include "\RequirePackage{etoolbox}\forcsvlist{\listadd\mylist}{csvlist-include-c.tex, csvlist-include-b.tex}\input{csvlist-include.tex}". That way, you can arbitrarily change the order of what gets included (or not). You don't want to type that each time, however, which is why I suggested a Makefile.
    – jon
    Feb 13, 2014 at 20:06

1 Answer 1


I have a pretty automated way of managing the many versions of my CV. I use biblatex and biber to create my CV since the data model and filtering is much more powerful than bibtex. I create a new tex file for each version of my CV instead of using flags, since it lets me see what is going to be included in each CV, however, there is no reason I couldn't combine them all with flags. The key to my approach is the tex files have no personal information and basically consist of a bunch of \defbibfilter's and \printbibliography's. I don't have fully shareable code (although some day I would like to), but basically my CV looks like

\defbibfilter{grad}{type=teaching and subtype=graduate}
\defbibfilter{undergrad}{type=teaching and subtype=undergraduate}

which lists my teaching sorted by graduate and undergraduate classes. If in another version of my cv I want to sort by where I taught them I define a different set of filters

\defbibfilter{UniversityA}{type=teaching and institution=UniversityA}
\defbibfilter{UniversityB}{type=teaching and institution=UniversityB}

In order to get this to work I need to define a data model in my *.dbx file that has a number of new fields. For example, for funding entries, I needed to define fields for the funder (who gave me the money) and amount (how much they gave me)


I also needed to define new bibliography drivers for the new data types. For example my *.bbx file includes things like

  • 1
    This is awesome! It sounds like it could be exactly what I'm looking for. If it's not too much trouble, could you provide a MWE with, say, a single educational experience? Bibliography filters are completely new to me. I think I could fiddle with the rest as long as I had that much. In particular, I'm looking for what files would be needed and what each file would contain at minimum. Thanks so much!
    – jvriesem
    Feb 14, 2014 at 4:49
  • Just like the guy above, I gotta say, this is amazing. I just asked a question about this here. Unfortunately I am not familiar with 85% of what you just said in the answer, so I couldn't reproduce your results. Care to answer my question with a MWE? I think that would be useful for more people too. Linking @jvriesem here in case it comes in handy.
    – TomCho
    Apr 2, 2017 at 1:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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