The PracT
E
X Journal, 2006, No. 3
Article revision 2006/08/15
L
A
T
E
X curricula vitae with the C
u
rV
e
class
Didier Verna
Email didier@lrde.epita.fr
Website http://www.lrde.epita.fr/
didier
Address Epita / Lrde, 14-16 rue Voltaire, 94276 Le Kremlin-Bic
ˆ
etre, France
Hobby Also a semi-professional Jazz guitarist and singer
Abstract C
u
rV
e
is a L
A
T
E
X2
ε
class for writing curricula vitae (cv). It provides a set of
commands to create headers, rubrics, entries in these rubrics etc. C
u
rV
e
will
then format your cv with a consistent layout while you can just concentrate
on the contents. The layout of a C
u
rV
e
cv is highly customizable. C
u
rV
e
also has a very special feature known as the flavor mechanism: it is able to
manage different “flavors” (versions) of your cv simultaneously. C
u
rV
e
is
distributed under the terms of the LPPL license. This paper describes the
features available in version 1.11.
1 Getting C
u
rV
e
C
u
rV
e
can be obtained from any ctan archive, at CTAN:macros/latex/contrib/
curve. You can also download it directly from my website, at the url above.
Please follow the links on the left menu.
If you are a Debian unstable user (unstable referring to Debian, not you),
unofficial source and i386 packages are available. The package name is curve.
Here’s the source.list entry to use:
deb http://www.lrde.epita.fr/debian/ unstable/i386/
deb-src http://www.lrde.epita.fr/debian/ sid/source/
For installation instructions, please read the README file included in the distri-
bution.
Copyright © 2006 Didier Verna.
Permission is granted to distribute verbatim or modified
copies of this document provided this notice remains intact.
2 First Contact
Figure 1 shows the output of C
u
rV
e
for a minimal cv with absolutely no customiza-
tion of any kind. Only the basic information for a cv is provided.
2.1 The document layout
Didier Verna
didier@lrde.epita.fr
http://www.lrde.epita.fr/ didier
1 wife
2 children
and 8 guitars
Assistant Professor
Ph.D. in computer Science
Professional Experience
Research
2004 .. . OO and Meta-Programming in functional languages
1996 2004 Virtual Reality and Cognition
Lectures
2002 .. . L
A
T
E
X 2
ε
: an overview (3 hours)
2000 .. . OpenGL Programming (15 hours)
Operating Systems (30 hours)
Development
L
A
T
E
X 2
ε
Author of CurVe, QCM, FiNK and FiXme.
XEmacs Member of the review board.
GNU Contributor to other free software projects.
Education
2000 Ph.D. in computer Science.
1991 1994 E.N.S.T. engineering school.
1988 Baccalaureus.
Figure 1: A minimal cv
Note the different parts of a cv made by C
u
rV
e
,
and their default layout: as you can see, a cv
begins with a small photo, two headers (up-
per left and upper right) in which you usu-
ally put your name, address, email, whether
you’re married and so on. After these head-
ers come a title and a subtitle.
The remainder of the document is com-
posed of sections called “rubrics” in the C
u
rV
e
terminology. A rubric represents a major
topic that you want to detail in your cv. Typ-
ical rubrics are “Professional Experience”,
“Education” and the like. Rubrics have a title,
centered on the page by default, and appear
under the form of properly aligned “entries”
(see below). If a rubric has to be split across
different pages, its title will be repeated auto-
matically.
An entry is an item of information related
to the rubric under which it appears. An entry has a “contents”, and an optional
“key” under which it is classified. For instance, under the “Education” rubric,
you could state that you got a Ph.D. in computer science in the year 2000. In
that case, the year would be the entry’s key, and the “Ph.D. in computer science”
part would be the entry’s contents. C
u
rV
e
aligns both keys and contents together.
Keys are optional in order for you to classify several entries together (without
repeating the same key over and over again). There is also an option that will
make C
u
rV
e
automatically skip identical keys in consecutive entries.
Additionally, you might want to further split your rubrics into “subrubrics”.
2
For instance, in the example above, the “Professional Experience” rubric is further
split into three subrubrics: “Research”, “Lectures”, and “Development”. Sub-
rubrics are displayed in alignment with the entries’ contents by default, but are
formatted differently so that they remain distinguishable.
Finally, note the presence of a small bullet in front of each entry’s contents.
This is called a “prefix” in the C
u
rV
e
terminology. This prefix is a visual clue that
helps in distinguishing one entry from another, especially in the case of multiline
entries, or entries sharing the same key.
2.2 The code
2.2.1 The main source file
\NeedsTeXFormat{LaTeX2e}
\documentclass [ a4paper ]{ curve}
\usepackage
[ nohead , nofoot , hmargin = 1. 5cm, vmargin =1.5cm]
{geometry}
\ le f t h e a d e r {\ t e x t bf {Di di er Verna}\\
\ t e x t t t {d idi er@ lrd e . epit a . f r }\\
\ t e x t t t{%
htt p ://www. l r de . e p i t a . f r /˜{} d i d ier }}
\ r igh the ade r {1 wife \\
2 c h ildr e n \\
and 8 guitars }
\photo{ d idier }
\ t i t l e { A s sistan t Pr o fess o r }
\ s u b t i t l e {Ph .D. in computer S cie nce}
\begin {document}
\makeheaders
\ m a keti t l e
\makerubric{ e xpe rie nc e }
\makerubric{ educati on }
\end{document}
Figure 2: A minimal source file
Let us now examine the source code
for this cv. The main file is given
in figure 2. The only tiny bit of
customization here is the use of the
geometry package to provide a very
wide text area on the page, some-
thing very common for a cv. C
u
rV
e
itself does not do anything to mod-
ify page dimensions, margins, etc.
There are very powerful packages to
deal with this so there is no point in
duplicating the functionality.
Otherwise, the rest is pretty
straightforward: you provide head-
ers with the \leftheader and
\rightheader commands, the \photo
command takes an image file name
(sans extension if your graphicx
package is properly configured), and
the title and subtitle the usual
way. Without any surprise, headers
and titles are formatted by calling
\makeheaders and \maketitle at the top of your document.
3
One surprise, however, is that the content of the rubric is not available directly
in the main source file: each rubric must remain in its own file. For instance, to
include an “education” rubric, you must write it to a file named education.tex
and include it, as shown in the example, with the \makerubric command.
2.2.2 The rubric source files
\begin { ru b ric }{ Professiona l Ex perience }
\ sub rub ric { Research }
\ ent ry
*
[200 4 \ ld o t s ]
OO and MetaProgramming in f u n c t i o nal
languages
\ ent ry
*
[199 6 200 4]
V i rtual R e a l i t y and Cognition
\ sub rub ric { Le ctu res }
\ ent ry
*
[200 2 \ ld o t s ]
\ tex t b f {\LaTeXe : an overview} (3 hours )
\ ent ry
*
[200 0 \ ld o t s ]
\ tex t b f {OpenGL Programming} (15 hours )
\ ent ry
*
\ tex t b f {Operating Systems} (3 0 hours )
\ sub rub ric {Development}
\ ent ry
*
[ \ LaTeXe ]
Author of CurVe , QCM, FiNK and FiXme .
\ ent ry
*
[ XEmacs ]
Member of the review board .
\ ent ry
*
[GNU]
Contr ibuto r t o o ther f r e e software
p r o je ct s .
\end{ ru b ric }
Figure 3: A rubric source file
The code associated with the “Profes-
sional Experience” rubric is shown
in figure 3. As you can see, the
whole contents of a rubric file must
be enclosed in a rubric environment.
This environment takes one manda-
tory argument which specifies the
rubric’s title. When a rubric crosses
several pages, its title is restated with
a “continuation” text appended.
You create entries in your rubrics
by calling the \entry* macro. This
macro behaves much like an \item
within a list environment: there is
one optional argument that defines
the entry’s key (otherwise empty),
and the entry’s contents are simply
anything that follows, up to the next
entry or subrubric. The presence
of a star in the command’s name is
for historical reasons: there is also a
\entry command that takes the whole entry’s contents as a mandator y argument
(hence within braces).
In order to create a subrubric, you simply call the \subrubric command. Its
mandatory argument specifies the subrubric’s title.
4
3 Customizing the appearance
In the previous section, we saw that writing a cv with C
u
rV
e
is a fairly easy process.
Once you are satisfied with the contents, you might still want to tweak the layout
to your personal taste (or constraints). Since the layout generated by C
u
rV
e
is
extremely customizable, it would be out of the scope of this paper to describe
every possible configuration option (besides, C
u
rV
e
is fully documented, and the
documentation is, I hope, well written). Rather, let us take back our minimal
example and tweak it a bit to illustrate some of the possible customizations.
Didier Verna
didier@lrde.epita.fr
http://www.lrde.epita.fr/ didier
1 wife
2 children
and 8 guitars
Assistant Professor
Ph.D. in computer Science
Professional Experience
Research
2004 . . . OO and Meta-Programming in functional languages
1996 2004 Virtual Reality and Cognition
Lectures
2002 . . . L
A
T
E
X 2
ε
: an overview (3 hours)
2000 . . . OpenGL Programming (15 hours)
Operating Systems (30 hours)
Development
L
A
T
E
X 2
ε
Author of CurVe, QCM, FiNK and FiXme.
XEmacs Member of the review board.
GNU Contributor to other free software pro jects.
Education
2000 Ph.D. in computer Science.
1991 1994 E.N.S.T. engineering school.
1988 Baccalaureus.
Figure 4: A customized cv
Figure 4 shows the result of the cus-
tomization process. The full source code for
this version is given in Appendix A. Note
that there is no modification of the rubrics
files whatsoever.
You can see that the photo is now on
the right. This is achieved by passing
an optional argument to \photo like this:
\photo[r]{didier}. You can use l (the de-
fault), c or r meaning that the photo will ap-
pear on the left, center, or right.
Additionally, the headers are now aligned
on top, rather than vertically centered. This
is achieved by passing an optional argument
to \makeheaders like this: \makeheaders[t].
You can use t (for top), b (for bottom) or c
(for center; the default).
Also, note the use of different fonts for the
titles, rubrics, keys etc. In C
u
rV
e
virtually any
text category comes with a command to modify the font used for it. For instance,
to change the appearance of the rubrics’ titles, use the \rubricfont command, to
change that of the title, use the \titlefont command and so on.
You will also notice that we changed the prefix for something fancier. The
command to do that is \prefix, to which we passed \ding{52} (from the pifont
package) in that particular case. If you prefer, you can get rid of the prefix alto-
gether.
5
Finally, note how we changed the alignment of the rubrics’ titles: they are
not centered anymore, but rather aligned with the entries’ contents (and also the
subrubrics for that matter). The command to do that is \rubricalignment. There
are up to 6 possible alignments for the rubrics’ titles. Horizontal alignment of the
subrubrics and the keys can also be changed.
4 Advanced usage
In this section, we describe two advanced features of C
u
rV
e
that might come in
handy.
4.1 Bibliography
Most scientists include their own list of publications in their cv. The first thing
you can do is create your own bibliography manually, just as you would create a
rubric.
If you find this process too cumbersome, however, you can use the standard
L
A
T
E
X bibliography mechanisms with C
u
rV
e
: the thebibliography environment is
supported along with its \bibitem companion. The behavior is actually that of
a rubric environment with its \entry* companion (with an empty prefix how-
ever). Hence, the layout of the bibliography remains consistent with the rest
of the cv. This fact has two implications however: firstly, the argument to the
thebibliography environment is unused in C
u
rV
e
(but remains for compatibility
with the rest of L
A
T
E
X) because C
u
rV
e
itself formats the keys and contents prop-
erly aligned. Secondly, the bibliographic environment must reside in its own file,
as any other rubric. Don’t forget that if you happen to write the environment
manually.
If you want to use BibT
E
X, that’s also possible of course. Do it as you would do
in any other document. You will probably issue a \nocite{*} command followed
by a call to \bibliography. In C
u
rV
e
, the bbl file is actually used as if it is just
another rubric on the cv.
Finally, note that C
u
rV
e
is compatible with the bibentry package.
6
4.2 Flavors
It is often desirable to maintain several slightly divergent versions of one’s cv at
the same time. For instance, when I was looking for a job some time ago, I had
a version of my cv emphasizing Artificial Intelligence, and another emphasizing
Distributed Virtual Reality. Only the title and some entries in the “Professional
Experience” rubric were a bit different; the main skeleton basically remained the
same.
C
u
rV
e
provides an easy-to-use mechanism for maintaining different “flavors”
of your cv at the same time. You basically write different versions of (some of)
your rubrics in different files, tell C
u
rV
e
which flavor you want to format (C
u
rV
e
can
even ask you which one to use directly) and that’s it. C
u
rV
e
will use the global
skeleton, and whenever it finds a rubric file specialized for that particular flavor,
it will use it. Other wise, it will simply fall back to the default one (no particular
flavor).
The flavor mechanism works by assigning a pre-extension to rubric file names.
For instance, suppose you want to make a special flavor of your cv emphasizing
“distributed virtual reality”. You would call this flavor “dvr”, and write the mod-
ified “Professional Experience” rubric into a file named experience.dvr.tex.
In order to tell C
u
rV
e
which flavor to use, you then call the \flavor macro like
this: \flavor{dvr}. Instead of using the \flavor macro, you can make C
u
rV
e
ask
you at run-time which flavor to use by passing the ask option to it.
In order to implement the flavor mechanism, the L
A
T
E
X macro \input is rede-
fined to look for “flavored” files first. This is actually very nice because you can
use it if you want to make different flavors of text that does not belong in rubrics.
For instance, suppose you want a special version of the subtitle of your cv for
the flavor dvr: just create a file called subtitle.dvr.tex and put something like
\subtitle{special subtitle} in it. Do something similar for the default subtitle.
Now go to the skeleton of your cv, and write \input{subtitle} in the preamble.
That’s it. You have different subtitles in your different cv flavors.
5 Conclusion
In this paper, we have barely scratched the surface of the features C
u
rV
e
has to
offer, but provided enough, I hope, to make the reader feel like giving it a try. For
7
instance, there are many more customization options available (control of spacing,
most notably). Please refer to the official documentation for more information.
To conclude, let me just mention some other important features of C
u
rV
e
: it
supports the standard L
A
T
E
X options (font size, paper geometry etc.) and page
styles. It comes with built-in support for AUC-T
E
X (command completion in
Emacs or XEmacs etc.). Thanks to many contributors, 9 foreign languages are
also supported (and customizable).
C
u
rV
e
has some caveats though, mostly as a consequence of the underlying
implementation based on the LTXtable package. In order to help, the official
documentation now provides a faq and a section with some hints on what you
can and can’t do within a “longtable”.
The next big step for C
u
rV
e
(which will trigger an increment of the major ver-
sion number) will be the support for the notion of “themes”. The idea is to make
it easy to use predefined layouts, and also to support official cv styles, like the
european one. This has been on my todo list . . . for some time now!
8
A Customized main source file
\NeedsTeXFormat{LaTeX2e}
\documentclass [ a4paper ]{ curve}
\usepackage [nohead , nofoot , hmargin = 1.5cm, vmargin =1.5cm]{ geometry}
\ le f t h e a d e r {\ t e x t bf {Di di er Verna}\\
\ t e x t t t {d idi er@ lrd e . epit a . f r }\\
\ t e x t t t{%
htt p ://www. l r de . e p i t a . f r /˜{} d i d ier }}
\ r igh the ade r {1 wife \\
2 c h ildr e n \\
and 8 g u i t a r s }
\photo [ r ]{ d i d i e r }
\ t i t l e f o n t {\ f o ntfa m ily {pag}\ s e lec t f on t \ b fs e r i es \Huge}
\ t i t l e { A s sistan t Pr o fess o r }
\ s u b ti t l ef o n t {\ fontf a mil y {pag}\ s e le c t fo nt \it s hape \huge}
\ s u b t i t l e {Ph .D. in computer S cie nce}
\ ru b r i c f o n t {\ fo ntf a mily {pag}\ s e l ec t f on t \ b fs er i e s \Large }
\ rub ric ali gnmen t { c l }
\ s u brub r icfo n t {\ f o ntfa m ily {pag}\ s e le ct f o nt \ b f ser i e s \ i t shap e \ la r g e }
\ ke yf ont {\ fo n tfam i ly {pag}\ s e lec t f on t \ b fs e r i es }
\usepackage{ pi f ont }
\ pr e f i x {\ ding {52}}
\begin {document}
\makeheaders [ t ]
\ m a keti t l e
\makerubric{ e xpe rie nc e }
\makerubric{ educati on }
\end{document}
9