This style an extension for the moderncv
package for creating academic (or closely related) CVs. It aims to provide an easy way to maintain the entries in your CV by using biblatex
custom drivers to typeset the CV in multiple languages with minimal changes to the main document.
I designed this interface because I needed to maintain my CV in several languages, and it was difficult to keep track of the different changes in all the versions. This style aims to ease that problem.
The other problem I'm trying to solve with this style is to make the process of changing parts of the CV more manageable.
The two main goals of this style are
- Multi language support: easy way to export the CV in different language without updating the document in between languages
- Easy to maintain and update the entries of the CV: easy way to re arrange, omit, or add entries.
The style should be installed in your local texmf
tree.
For example, you can execute the following
mkdir -p ~/texmf/tex/latex/
cd ~/texmf/tex/latex/
git clone git@gitlab.com:adin/mcv-academic.git
Or you can extract the files directly into the same local texmf
directory.
Go to the example
folder inside the repository, and execute
make
That will execute the example CV and will create the files example-<style>-<lang>.pdf
where <style>
and <lang>
are the available styles and languages implemented (and other auxiliary files).
For a particular language, you can execute
make en
The same holds for styles too, or the combination of the two. Note that the languages and styles are defined within the Makefile
and should be the same as the ones defined within the style.
If you want to start quickly, just open the example.tex
and change the example for your personal data:
\firstname{John}
\familyname{Doe}
\title{Curriculum Vit\ae} % optional
\address{Fake Street 42}{}{Fakeland, FKL}
\email{johndoe@fake.com}
\mobile{(+1) 234 5678 } % optional
%\phone{+2~(345)~678~901} % optional
%\fax{+3~(456)~789~012} % optional
\homepage{johndoe.com/\textasciitilde joe}% note that the tilde (~) needs to be escaped for moderncv
\social[scholar]{ABC123}
You can customize the strings used in the headers by updating
\newmlcommand[english=Education, spanish=Educación]{\education}
\newmlcommand[english=Degrees, spanish={Grados Académicos}]{\degrees}
\newmlcommand[english=Technical, spanish={Estudios Técnicos}]{\technical}
% the rest was ommited for space
And for your entries, you can modify the cvdata.bib
, which is a custom bibliography file (similar to bibtex
entries) for entries that will be render in the CV.
For example
@Study{phd,
date={2000/2010},
title-en = {Ph.D. in Foo},
title-es = {Doctorado en Foo},
organization-en={Univeristy of Bar},
organization-es={Universidad de Bar},
country = {Fakeland},
description-es = {Hice descubrimientos novedosos sobre Bar.},
description-en = {Did novel discoveries about Bar.},
keywords = {degrees}
}
is a study
entry, and it will by printed by
\printstudies[heading=subbibliography, title={\degrees}, keyword=degrees]
For more details, read on.
The main idea of this style is to hold academic CV, as they have several entries of related items. For example, you want to put all your publications, guided theses, talks, etc. Most of the time, you will want to sort them in a given order, or print some of them, or do some strange things.
Moreover, you may want to have all those entries in different languages and you may need to have the same version in different languages. If that is your case, fear no more. This probably help you easing that task.
To use the package you need to load it in the preamble, and pass the moderncv
style that you want to use using the style
keyword. Optionally, you can define to use details=true
or not (as a boolean variable).
\usepacakge[style=academic, details]{academic}
by default, details
it is set to true
. The available styles are the ones defined within moderncv
, plus academic
, that is a minor variation on the classic
style, and friggeri
that is a total new style that defines its own header and body.
The whole style is build around the idea of printing similar items in a similar fashion. For that reason, I chose to create biblatex
drivers to handle the common entries that appeared in academic CVs.
The cv.tex
(that is, the main file that you will compile) only holds the way you want to layout your document. While all the data is maintained in other files that must be .bib
. It depends on your choice, but you can have the files in one file or spread around.
Then, another goal was to have multi language support. For that reason, the style gives commands to define languages variations of your strings and entries, and allow you to compile the entire document in a given language without making further changes to the document.
In general, the entries follow the same logic of the .bib
files. Thus you create them with the syntax
@entry {
field = {content},
field = {content},
...
field = {content}
}
where entry
is the name of the respective item (see options below), and field
is any of the possible fields of each entry.
The style defines the following entries (or types of data)
-
Study. Refers to a course or study you did. For example, your Ph.D., master, among others. It supports the following fields
date
: a range of dates in which the study happened. For example: to print- a range of dates with their months
1990-01/1995-01
, - a range of defined years
1990/1995
, - a range of years that hasn't ended (it continues to the present)
1990/
, or - a single year
1990
- a range of dates with their months
title
: the name of the study or degree obtained. This field is a string.organization
: the place where you did the studies. This field is a string.country
: where you did the studies. This field is a string.description
: extra information you want to give about your studies.
-
Position. Refers to work related entries. It supports the following fields
date
: a range of dates in which you work in that position. It follows the same pattern ofstudy
.title
: the name of the position you had. This field is a string or abibstring
.organization
: the place where you worked. This field is a string.country
: where you did the work. This field is a string.description
: extra information you want to give about your position. What you did or achieve in such position.
-
Project. Refers to research or industry projects you won or performed. For example, it aims to hold grants, industry projects, or related items. It supports the following fields
role
: your role in the project. This field is a string or abibstring
.title
: the name of the project. This field is a string.number
: the identifier (or list of identifiers separated byand
) for the project.funding
: the name of the funding agency or organization that was in charge.period
: the duration of the project. It should be an integer or a float in years (as the wordyear
oryears
will be appended automatically when printed).year
: the starting year of the project. This field is an integer number representing the year.month
: the starting month of the project. This field should be a month thatbiblatex
can understand (that is, a number or a three letter month representation).
-
cvthesis. Refers to the theses you guided. It supports the following fields
author
: the student (author) of the theses that you guided. This field is a string.title
: the title of the thesis. This field is a string.date
: the date of the thesis. This field is a date frombiblatex
.organization
: the institution where the thesis was done. This field is a string.level
: the academic level of the degree that was awarded with the thesis. It supports the followingbibstrings
undergrad
master
doctor
note
: a small note to place at the end in parenthesis. This field is a string.
-
Course. Refers to courses you taught. It supports the following fields
title
: the title of the course taught. This field is a string.date
: the date of the course. It follows the same pattern ofstudy
.dates
: alternatively, the course may have a set of dates that can be specified with this field instead. It is a list of date separated by the keywordand
(like authors in the standard bibtex), and each date follows the same pattern ofstudy
. If adate
is defined, it will take precedence overdates
.organization
: the institution where the course was taught. This field is a string.description
: general description of the course. This field is a string.
Presentation. A presentation that you gave or participated in, such as a talk, keynote speech, or panel. It supports the following fields
author
: the author(s) of the presentation. This field is a string.role
: your role in the presentation. This field is a string or abibstring
.title
: the title of the presentation. This field is a string.date
: the date of the presentation. This field corresponds to the BibLaTeX date field.eventitle
: the title of the event you presented at. This field is a string.location
: the location of the presentation. This field is a string.note
: a small note to place at the end in parenthesis. This field is a string.
-
CVMisc. Refers to general things that can be placed in the CV. For example, memberships, or items that need a short description and dates. It supports the following fields
title
: a principal description of the entry. This field is a string.date
: the date of the entry. It follows the same pattern ofstudy
.dates
: a list of dates of the entry. It follows the same patter ofcourse
.description
: general description of the entry. This field is a string.
The fields in these entries follow the same logic as the entries in biblatex
or bibtex
files. There are, however, some custom behaviors implemented.
The dates in the CV allow to hold ranges. For brevity, the style truncates the day of all the dates, and displays only the month and year.
The ranges allow to print the following options
- a range of dates with their months
1990-01/1995-01
, - a range of defined years
1990/1995
, - a range of years that hasn't ended (it continues to the present)
1990/
, or - a single year
1990
.
Most of the string fields have the options to create localized versions of each field. The different drivers will chose the correct language entry according to the current language set in the document. If the language is not found it will default to the field name without a language.
For example, the field title
can be defined as
title
: default information to be used in case the current language version of the field is not found.title-en
: English version of the field.title-es
: Spanish version of the field.
And so on. The fields use the short version of the languages. Those can be set when the languages are defined.
A good rule of thumb is to define the default name with the language you want the field to appear, and then extend the field to other languages.
Another use to the default fields is when you have a field that will use the same name regardless of the set language. For example, a proper name that will be the same in all the languages. Instead of defining the same string several times, you just define it once.
Instead of defining
organization = {Proper name},
organization-en = {Proper name},
organization-es = {Proper name},
create a simpler version that will be used as default
organization = {Proper name},
The data model is created automatically based on the installed languages, and it will localized the corresponding string fields. Note that it will use the defined languages in the style, and not the ones defined by the babel
package alone. See the localization for more details.
Some fields allow to use bibstrings
instead of a given string.
A bibstring
is a previously defined keyword that will be translated into a defined string. This allows to create common definitions (and their translations) to be used easily in the entries.
The bibstrings
for general use are
undergrad
: Undergraduatemaster
: Masterdoctor
: Ph.D.pi
: Principal Investigatorai
: Alternating Investigatorprofessor
: Professorassisprofessor
: Assistant Professorassocprofessor
: Associate Professorresearcher
: Researcher
and others that are used internally (but are also available for use) are
duration
: time frameyears
: yearsyear
: yearpresent
: presentpresentabbr
: pres.theses
: Thesesdegree
: Degree
Note that all these have translations to the other languages as well (here are the English versions for illustrative purposes).
Currently the style supports three languages: english
, spanish
, and portuguese
. I'm planing on extending it to other languages when I have time (but contributions for the translations are welcomed).
The languages are defined in language-cv.lbx
where the bibstrings
are localized. The languages declared automatically create the custom entries in the data model by declaring the supported languages through
\babelshortnames{en=english, es=spanish}
That is, a list of pairs <abreviation>=<languagename>
. These languages are not necessarily the same as the ones declared in the main document.
The robust solution is to use setlanguages.sty
configuration file in which this macro is declared, and later this file is read within the cv.bbx
style.
To localize the titles and other strings that will appear in your CV, the style provides the \newmlcommand
which declares a command that will change according to the current language.
For example, to declare a new multi language command named \degrees
you execute
\newmlcommand[english=Degrees, spanish={Grados académicos}]{\degrees}
where the square brackets (the options) allow for a list of languages and the corresponding string that will be expanded from the macro.
Then, it is as simple as using the defined macro in any place you want your string to appear, for example
\section{\degrees}
The language changing mechanism is provided by the babel
package. Thus, you first need to include that in your document with the languages you want support for
\usepackage[english, spanish]{babel}
Then you select the language (within the document body, that is after the \begin{document}
) using \selectlanguage{<language>}
. Moreover, the style provides a macro to select the language through interpreting the short names that we defined before. You can use it as \selectshortlanguage{<shortname>}
.
For aiding with automatic building (for example through make
) you can define a macro, lets call it \defaultopts
, that is declared outside of the document, like
% I use this for automatic creation of the cv
\ifdef{\defaultopts}%
% default options passed outside of the cv
{\defaultopts}{%
% options by hand
% \selectlanguage{spanish}
\selectshortlanguage{en}
}
The entries are printed using the \printbibliography
macro provided by biblatex
package. The style provides some wrappers to this macro by establishing the default types for each entry with
\printstudies
\printpositions
\printprojects
\printcourses
\printtheses
\printpresentations
\printcvmiscs
Note that all these macros support the same options as \printbibliography
.
The style provides an example Makefile
(inside the example
folder) to show a way to generate automatically the CV in all the languages and styles.
This write up doesn't aim to teach you Makefile
syntax, but if you want a quick way to use this file for your projects you need to change the following parts
# Our languages separated by a space
# We use the shortnames because it is easier to read, but you can use the long names
# but you will need to update the macros in the `INPUT` variable
# Supported languages
LANGS = en es pt
# Supported styles
STYLES = classic oldstyle fancy banking casual academic friggeri
# Default source name
NAME = example
# Wheter to show details or not
DETAILS = true
I will like to thank the community of TeX Stack Exchange, which helped a lot solving problems and roadblocks that I faced in the way of making this.