          currvita.sty

Axel Reichert

              axel.reichert@gmx.de

1999-09-13

Abstract currvita.sty is a package for typesetting a curriculum vitae. See the files README and COPYING for additional information.

Contents

1 Introduction 2 2 What You Need 3 3 Loading 3 4 Usage 4 5 Customization 5 6 Example 8 7 Bugs 8 8 Bibliographies 8 9 Typography 11

9.1 Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 9.2 Font . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 9.3 Micro-typography . . . . . . . . . . . . . . . . . . . . . 13 10 Implementation 14

10.1 Identification . . . . . . . . . . . . . . . . . . . . . . . 14 10.2 Loading Files . . . . . . . . . . . . . . . . . . . . . . . 14 10.3 Initialization . . . . . . . . . . . . . . . . . . . . . . . . 14 10.4 Option Declaration . . . . . . . . . . . . . . . . . . . . 15 10.5 Option Processing . . . . . . . . . . . . . . . . . . . . . 16 10.6 Delaying Code . . . . . . . . . . . . . . . . . . . . . . . 16 10.7 Defining Commands . . . . . . . . . . . . . . . . . . . 16

References 22

1 Introduction

Quite regularly in the L^{A}TEX newsgroups someone is asking for a package or document class to typeset a curriculum vitae. Normally, the following answers are given:

• A curriculum vitae is highly individual and so you should not rely on solutions provided by others but rather think about it on your own and create it in your style following your taste.

   • Use vita.cls.
   • Use resume.sty.
   • Use tabularx.sty.

In my opinion all answers are unsatisfactory. To create an “individual style” with L^{A}TEX is not at all easy, especially if you consider the bunch of questions in the L^{A}TEX newsgroups about list and tabular environments, which seem to be the obvious choice for the use within a curriculum vitae.

The layout produced by vita.cls is a little bit crowded, the customization has to be done by class option files (definitely not something for a beginner) and the documentation is sparse.

resume.sty is a totally out-dated (December 1989) L^{A}TEX 2.09 style file, in my opinion it gives a crowded layout as well, the documentation can be found in the style file. Those days did not have the neat system of ins/dtx files.

tabularx.sty is quite good, but to typeset a curriculum vitae spanning more than one page^{1}, interspersed with section-like headings and various \multicolumn commands is surely not an easy task.

So I finally decided to write this package, replacing the macros that I used earlier for my applications^{2}. In fact, there was not much to replace, because that time I made heavy use of \textbf, \large, \\ and other L^{A}TEXnically incorrect commands. (-;

I made it a package because a curriculum vitae can make sense not only on its own, but also within a Ph. D. thesis or a letter. This package (hopefully) has few requirements, (hopefully) produces a clearly arranged layout (also known as puristic or plain and even explained in its own section later), is (hopefully) well documented by this (hopefully) nice dvi file, (hopefully) easy to use and can (hopefully) easily be customized. There is even a (hopefully) interesting example file, my curriculum vitae, so you can see what sick brains program (and even document) such packages. If you can understand German. (-;

2 What You Need

1. L^{A}TEX 2ε (at least the 1996/12/01 release)

2. The ifthen package, part of the standard L^{A}TEX tools

3. The babel package, nowadays a “required” part of L^{A}TEX, if you want to typeset the example file.

3 Loading

Load the package with:

   \usepackage{currvita}

LabelsAligned There are two package options that can be used to change the TextAligned vertical spacing of the curriculum vitae:^{3}

   \usepackage[LabelsAligned]{currvita}

1David, I know that there is ltxtable.sty. Surely this great package was once a hack of 5 minutes on a rainy Sunday like all your other packages. (-;

2Typeset with longtable.sty written (again) by David Carlisle.

3Credits go to Timm Wetzel for inspiring me to implement this. He will notice later that I did not follow his suggestion, though. (-;

will give you a more compact spacing, whereas

   \usepackage[TextAligned]{currvita}

will give you the default, more generous spacing. See the explanation of the cvlist environment and section 5 on page 5 (“Customization”) for details.

openbib If you like the look of the “open” format for bibliographies, you can use this layout also for a list of publications within your curriculum vitae. Normally, this option will be passed automatically by the document class to all packages, so there is no need to specify it explicitely. However, if you are typesetting your Ph. D. thesis with a “normal” bibliography and you want to include your curriculum vitae with an “open” publication list, you can pass this option directly to the package:

   \usepackage[openbib]{currvita}

ManyBibs If you want to subdivide your publication list (journal articles, book chapters, …) but do not want to do without BibTEX and enter every \bibitem manually, you can use this option:

   \usepackage[ManyBibs]{currvita}

This option suppresses the normal heading and also the item labels. This makes sense only in combination with bibunits.sty, multibib.sty or other packages supporting multiple bibliographies. See section 8 on page 8 (“Bibliographies”).

NoDate If you have reason to suppress the date normally printed at the bottom of the curriculum vita,^{4} use the following option:

   \usepackage[NoDate]{currvita}

4 Usage

cv A curriculum vitae is written inside a cv environment, which takes one mandatory argument, the heading:

   \begin{cv}{<heading of the curriculum vitae>}
     <text of the curriculum vitae>
   \end{cv}

4Credits go to Matt Swift, who obviously has reason and thus suggested this feature. (-;

If you do not want a heading (perhaps because you think the addressee might have read “Curriculum Vitae” too often), you can specify an empty argument by leaving the braces empty.

cvlist The text of the curriculum vitae is normally divided into several sections, which are typeset as lists, taking the list heading as a mandatory argument:

   \begin{cvlist}{<heading of the list>}
     <list items>
   \end{cvlist}

As usual, the list items can take a label as an optional argument:

   \item <item text>
   \item[<label>] <item text>

The typesetting of the list depends on the length of the heading and the use of an optional argument in the first item: If the heading is less wide than the width reserved for the label and no optional argument was used, the item is typeset in the same line as the heading. In all other cases the text of the item itself starts a new line.

\cvplace Normally, a curriculum vitae ends with the date when and the place where you wrote it. You can specify the location as follows:

   \cvplace{<location>}

If you do not use this command, the printing of a location will be omitted.

\date To specify the date, just use the command provided by the standard L^{A}TEX document classes article.cls, report.cls and book.cls. I took special care that it works also if you are using an other class. If you do not call this macro at all, \today will be used by default, unless you have specified the NoDate option.

   \date{<date>}

5 Customization

\cvheadingfont Normally, the heading of the curriculum vitae is typeset in bold face and \Large size (see [4] for details). You can change this e. g. with:

   \renewcommand*{\cvheadingfont}{\large\bfseries}

\cvlistheadingfont Corresponding to the font of the heading, the heading of the cvlist environments is typeset in bold face and \large size. This can be changed e. g. with the following code:

   \renewcommand*{\cvlistheadingfont}{\scshape}

\cvlabelfont The labels of the cvlist environments are typeset in the normal size of the current font. You can change this e. g. with:

   \renewcommand*{\cvlabelfont}{\itshape}

\cvlabelwidth The default width of the labels of the cvlist environments is equal to the width of “88/8888–88/8888”, because normally in the left hand column dates are typeset (and, at least in Germany, should be formatted in this way).

If you are using the optional argument of the \item command for further sectioning (as I did for my curriculum vitae in the example file), you perhaps need to adjust this length by means of

   \setlength{\cvlabelwidth}{50mm}

or

   \AtBeginDocument{%
     \settowidth{\cvlabelwidth}{%
       \cvlabelfont This is my longest label%
     }%
   }

or like this, if you want the items to be typeset in-line with the labels wherever possible:

   \AtBeginDocument{%
     \settowidth{\cvlabelwidth}{%
       \cvlistheadingfont This is my longest list heading%
     }%
   }

The first example works correctly only after \begin{document}, whereas the other two show how to adjust the label width within the preamble. Make sure that you include the appropriate font if you want to measure the width.^{5} And do not try to get things done in the preamble without \AtBeginDocument, because the font setup will probably not be correct, especially if you use non-standard fonts.

\cvlabelskip This vertical space is inserted if you have a cvlist environment with a short heading and the first item of this list has no label, so that the text of the item starts in the same line as the heading. The spacing is controlled by the options TextAligned and LabelsAligned, see section 3 on page 3 (“Loading”).

By default (TextAligned), the spacing between the item text belonging to different lists is independent of the length of the list heading and also independent of the use of an optional argument of the \item command. The gaps between the item text blocks are equal. See, for example, the lists “Fremdsprachen” or “Interessen” of the example file.

The option LabelsAligned suppresses the additional space necessary to achieve this consistent layout and thus gives a more compact look with evenly distributed gaps between the headings and the labels.

If you are not satisfied with either of these options, feel free to set hands to it yourself, for example:

   \setlength{\cvlabelskip}{%
     0.5\baselineskip plus 1pt minus 1pt%
   }%

\cvlabelsep The default width of the distance between the labels and the items itself is equal to 1em. You can customize it e. g. with

   \setlength{\cvlabelsep}{1mm}

or

   \settowidth{\cvlabelsep}{~}

I strongly recommend to use relative measures like 1em (i. e. dependent on the font size), if you need to customize these lengths at all.

\cvbibname The default heading for bibliographies inside of cv environments is “Publications”. You could change this for example with:

   \renewcommand*{\cvbibname}{List of Papers}

Please keep in mind: All the customizations mentioned above are optional and in my opinion not necessary (not even the change of \cvlabelwidth, better use more suggestive label texts). See section 9 on page 11 (“Typography”) for some remarks.

5Credits go to Matt Swift for reporting the need for a better documentation.

6 Example

Run the example file cvtest.tex through L^{A}TEX. You will get my curriculum vitae. Sorry, it is written in German. Sorry, it is not an original version used for an application (though the data is correct, but I omitted the marks^{6}), because for this I need some fonts and packages not available to every user and I wanted to use as much standard L^{A}TEX as possible.

7 Bugs

Some people^{7} with an older version of the babel package (v3.6h) have reported problems due to the use of the babel shortcuts for accented letters within the \cvplace command. If you encounter this, too, try a more recent version (v3.6x definitely works) of the babel package^{8}

(or german.sty).

8 Bibliographies

This package offers several possibilities for bibliographies or publication lists.^{9} You can use BibTEX or enter each \bibitem manually. You can have multiple bibliographies within one cvlist environment (with the aid of other packages like bibunits or multibib), or only one somewhere in the cv environment. Of course the main bibliographies of your document remain untouched. You can even use a publication list in document classes without native support for bibliographies, like letter.cls.

Enough advertising, here we go with some examples. Figure 1 shows the source of a letter with a manually done bibliography and a normal cvlist enviroment in comparison. The resulting publication list (not shown here) does not fit well into the layout of the cvlist environment, so probably you want to integrate your publication list into a cvlist environment and to supply distinctive labels?

Figure 2 shows an example with multiple bibliographies automatically generated by BibTEX and in combination with bibunits.sty.

6It would have been too embarrassing for me. (-;

7Credits go to Martin Sander and Sebastian Böcker.

8Perhaps included in a new L^{A}TEX release? (-;

9Credits go to Ian Bruce for suggesting this feature and providing the first lines of code that did start the thing.

\documentclass{letter}
\usepackage{currvita}
\begin{document}
\begin{cv}{Resume}
\begin{cvlist}{Gnats and Gnus}
\item[Bar] Bar
\item[Foo] Foo
\end{cvlist}
\begin{thebibliography}{1}
\bibitem{Bar} Bar.
\bibitem{Foo} Foo.
\end{thebibliography}
\end{cv}
\end{document}

Figure 1: Curriculum vitae with bibliography, manually done

\documentclass{article}
\usepackage{bibunits}
\usepackage[ManyBibs]{currvita}
\begin{document}
\begin{cv}{Resume}
\begin{cvlist}{Gnats and Gnus}
\item[Bar] Bar
\item[Foo] Foo
\end{cvlist}
\begin{cvlist}{Publications}
  \begin{bibunit}[alpha]
    \nocite{booklet-full,manual-full,techreport-full}
  \item[Books etc.] \putbib[xampl]
  \end{bibunit}
  \begin{bibunit}[plain]
    \nocite{article-full,inproceedings-full}
  \item[Papers] \putbib[xampl]
  \end{bibunit}
\end{cvlist}
\end{cv}
\end{document}

Figure 2: Bibliographies inside a cvlist, done with bibunits.sty

   \documentclass{report}
   \usepackage{multibib}
   \usepackage[openbib,ManyBibs]{currvita}
   \newcites{books}{bar}
   \newcites{papers}{foo}
   \begin{document}
   \bibliographystyle{alpha}
   \bibliographystylebooks{unsrt}
   \bibliographystylepapers{plain}
   \begin{cv}{Resume}
     \begin{cvlist}{Gnats and Gnus}
     \item[Bar] Bar
     \item[Foo] Foo
     \end{cvlist}
     \begin{cvlist}{Publications}
     \nocitebooks{booklet-full,manual-full,techreport-full}
     \item[Books etc.] \bibliographybooks{xampl}
     \nocitepapers{article-full,inproceedings-full}
     \item[Papers] \bibliographypapers{xampl}
     \end{cvlist}
   \end{cv}
   \nocite{mastersthesis-full,misc-full,unpublished-full}
   \bibliography{xampl}
   \end{document}

Figure 3: “Open” publication lists inside a cvlist, additional “normal” bibliography outside, done with multibib.sty

This code will result in a L^{A}TEX error (“Something’s wrong–perhaps a missing \item.”) on the first run, but if you scroll through the errors and run L^{A}TEX again, you will get a nice output once you have run BibTEX according to the bibunits manual. Note that the choice of the bibliography style does not influence the labels because they are suppressed anyway by use of the ManyBibs option.

However, they work as normal outside the cv environment, see Figure 3, which shows in addition to the usage of the multibib package for “open” publication lists a “normal” bibliography in yet another bibliography style. Note also that the second argument of the \newcites command does not matter because the heading of the partial bibliographies is suppressed, again by use of the ManyBibs option.

9 Typography

A curriculum vitae is an exam. The addressee gets a proof of your skills concerning collecting, discarding, ordering and presenting information. He also gets an impression of some of your qualities that are not even mentioned in the text: Accuracy (consistency and correctness of the micro-typographic things), stinginess (extremely narrow margins) and your taste in questions of aesthetics (font overload as against clear and evident font usage). Even more things are revealed by subtle hints given by the typography of the curriculum vitae and they can be noticed by all professional readers of applications,^{10} not only by typographers.

Therefore you definitely should do your best not only when thinking about the content but also when thinking about the form of the curriculum vitae. This package tries to help you in this task.

The overall appearance of a curriculum vitae is determined mainly by three factors:

Layout Organization and arrangement of the information e. g. into lists or tabulars, usage of headings, size of the typearea, width of columns, horizontal and vertical spacing

Font Family, sizes, usage of fonts for emphasized in-line text or text serving as an eye-catcher, creation of an atmosphere appropriate to the candidate and the job in question

Micro-typography Formatting of various numbers, avoidance of bad linebreaks, distinction between small and normal spaces, typesetting of company names, usage of quotation marks

9.1 Layout

You generally should organize the necessary information (and only the necessary information) as clearly as possible, because the addressee is annoyed anyway by the pile of applications that he has to wade, and you definitely should not annoy him any further by not structuring your curriculum vitae.

Use generous margins, a not too small font and moderate vertical spacing. I recommend something around DIV12 for users of typearea.sty (part of KOMA-Script), an 11 point font for A4 paper (highly dependent on the font family) and a left hand column as narrow as possible (it will make the linebreaking in the right hand column easier). For the distance between the columns 1em creates a sufficient separation. A normal word space would not be enough, whereas something around 1cm would weaken the coherence of the layout, especially if you have some shorter labels.

10Very often subconsciously.

If you ever heard a curriculum vitae should not be longer than one page, forget it, unless you are required (by whom, if I may ask?) to stay below this limit. I made some tries with increased typearea and reduced the font size and the vertical spacing. I finally managed to arrange my test file on one page by usage of a very narrow newspaper font, but it looked horrible. The normal version, though about half a page longer, was much easier (and quicker!) to read.

9.2 Font

The most difficult thing is to choose a good font. For “normal” jobs like engineering, economics or similar, the font should look friendly and professional, just like you on the photo. Of course a typographical layman does not identify the font, but he too feels the atmosphere created by it.

I made some tries with about 50 fonts, with serifs or without, oldstyle, transitional and modern fonts and got surprisingly good agreement among the test persons^{11}. Moreover, my analysis and theirs yielded the same result: Computer Modern, Charter, Utopia and Melior really do a good job. Except Melior, these fonts are freely available. Computer Modern looks elegant, dry, precise and reserved, Charter friendly, open, solid and likable and Utopia clear and technical. The last two are nowadays part of good L^{A}TEX distributions, so you are not sticked to Computer Modern, just try them out:

   \usepackage{charter}

or

   \usepackage{utopia}

Generally, you should use bold face for the headings, to make them clearly distinct from the main text, italics are not enough. An important aspect of the font choice is the contrast between the normal and the bold face. It should be high enough, so that the headings can be identified at a glance, but neither the regular font nor the bold variant should look too “loud”. This is a problem e. g. with New Century Schoolbook, apart from that as good as Computer Modern.

11Credits go to Melanie Frisch, Rüdiger Haardt, Steffen Meißner, Joachim Gnauk and Rainer Messerschmidt for doing this tedious work.

Many fonts typically used in novels have too low a contrast, e. g. Berling, Galliard, Palatino and Stempel Garamond. Although the contrast is good in Bembo, it looks too “nice”, too familiar from books to create the correct atmosphere for a curriculum vitae, which normally is attached to a stupid letter. Plantin and Trump Medieval and perhaps New Baskerville may be acceptable in some cases, but I think there are better choices. Not everybody’s taste because a little unusual, but in my opinion quite good is Oranda, rather bold and small, but friendly and soft. Oh, I almost forgot: The obligatory Times is a good choice, too. Though it is completely over-used and overrated (I am not at all a fan of Times), its domain is the typesetting of (more or less) narrow columns and it does a good job looking both familiar and neutral.

My trials with sans-serif fonts were not very successful. Computer Modern Sans Serif, Franklin Gothic or Univers may be acceptable, Helvetica looks too boring (are you boring?), Frutiger has too low a contrast, Optima is “too nice”, Gill Sans and Futura look too bold (and the latter perhaps too cold and technical, but that may be suitable for some jobs). Generally the problem is to achieve consistency with the accompanying letter, which normally is written with a serif font (and should be, because it is a longer text with less structure, the main text only divided into paragraphs. In these cases, so-called “linear reading”, a serif font is considered more legible by many typographers).

9.3 Micro-typography

Sometimes the pile of applications is pre-sorted by a secretary. You should ensure that the micro-typography (also known as “pedantic stuff”) is correct, because secretaries learn these things during their education. German users of this package definitely should consult the relevant part of the Duden [1] or have a look into [5] or the example file. Errors in the formatting of dates, spacing or grouping of telephone numbers, usage of quotation marks or ampersands and so on are too common. Trained secretaries will notice these mistakes and, if they already did not like your photo, will put your application onto stack W (wastebasket). (-;

Think about it, micro-typography is easy, and if you get used to it, you will typeset things correctly “by default” and your documents will require less proof-reading. It is awful if the reader stumbles (and falls) over a bad linebreak. Use ties (~) or other things influencing hyphenation from babel.sty or german.sty like \,, "~ or "" not after you have discovered such a mistake, but during entering the text.

O. K., and now I will turn preaching mode off and programming mode on. (-;

10 Implementation

10.1 Identification

As this package uses the \ignorespacesafterend command, it does not work with older L^{A}TEX 2ε versions.

 1 \NeedsTeXFormat{LaTeX2e}[1996/12/01]%

The package identifies itself with its release date, a version number, and a short description.

 2 \ProvidesPackage{currvita}[%
 3 1999/09/13 v0.9i Typesetting a Curriculum Vitae%
 4 ]%

10.2 Loading Files

The ifthen package is used to make some decisions easier.

 5 \RequirePackage{ifthen}%

10.3 Initialization

\@cvplace The string for the place of the curriculum vitae is initialized. It should be defined later by the user. \@cvplace is not declared by means of \DeclareRobustCommand*, because this adds a superfluous \protect (causing problems with the ifthen package).

 6 \newcommand*{\@cvplace}{\@empty}%

\@cvlistheading The box containing the heading of a cvlist environment is allocated.

 7 \newsavebox{\@cvlistheading}%
\cvlabelsep \cvlabelskip \cvlabelwidth Some lengths are initialized.
 8 \newlength{\cvlabelsep}%

 9 \newlength{\cvlabelskip}%
10 \newlength{\cvlabelwidth}%

cv@many@bibs cv@no@date cv@open@bib We also need one new flag to handle the bibliography option ManyBibs, another one to handle the NoDate option, and another one to handle the openbib option separately for the currvita package.

11 \newboolean{cv@many@bibs}%
12 \newboolean{cv@no@date}%
13 \newboolean{cv@open@bib}%

10.4 Option Declaration

LabelsAligned The use of this option suppresses the additional vertical space inserted before in-line headings of cvlist environments. It ensures that the gaps between the various headings and labels are equal.

14 \DeclareOption{LabelsAligned}{%
15 \setlength{\cvlabelskip}{0ex}%
16 }%

TextAligned Use of this option ensures that the items of the right hand column are separated by equal vertical spacing. To achieve this, an additional gap has to be inserted in case of a short heading and no optional argument given to the \item command. See also the definition of the cvlist environment on page 20.

17 \DeclareOption{TextAligned}{%
18 \setlength{\cvlabelskip}{%
19  1.5\baselineskip plus 3pt minus 3pt%
20 }%
21 }%

openbib For document classes like letter, i. e. without native support for bibliographies, it is necessary to provide the length of the indentation used in the openbib format. It will not be changed if it is already defined.

22 \DeclareOption{openbib}{%
23 \@ifundefined{bibindent}{%
24  \newlength{\bibindent}%
25 }{}%
26 \setlength{\bibindent}{1.5em}%
27 \setboolean{cv@open@bib}{true}%
28 }%

ManyBibs Use this option in case you need more than one bibliography list, e. g. for different kinds of publications.

29 \DeclareOption{ManyBibs}{%
30 \setboolean{cv@many@bibs}{true}%
31 }%

NoDate Use this option in case you want to omit the date normally printed at the bottom of the curriculum vitae.

32 \DeclareOption{NoDate}{%
33 \setboolean{cv@no@date}{true}%
34 }%

10.5 Option Processing

If no options are specified, the text of the items is aligned by default. Otherwise the options are processed in the order given by the calling command, i. e. the last one “wins”.

35 \ExecuteOptions{TextAligned}%
36 \ProcessOptions*%

10.6 Delaying Code

The distance between labels and items is set to 1em. The maximum allowed width of the labels of the cvlist environments forming the curriculum vitae is set to the width of a typical entry. This is done at the beginning of the document, because then the normal fonts have been setup properly.^{12}

37 \AtBeginDocument{%
38 \setlength{\cvlabelsep}{1em}%
39 \settowidth{\cvlabelwidth}{%
40  \cvlabelfont 88/8888--88/8888%
41 }%
42 }%

10.7 Defining Commands

\cvheadingfont Normally, the title of the curriculum vitae is typeset in larger bold face.

43 \DeclareRobustCommand*{\cvheadingfont}{\bfseries\Large}%

12Credits go to Gerd Boerrigter for reporting this bug.

\cvbibname This macro holds the name of the publication list. In my opinion it does not make sense to inherit the definition of \refname or \bibname, so a new command is introduced.

44 \DeclareRobustCommand*{\cvbibname}{Publications}%

\cvplace This command is used to change the place to be typeset at the bottom of the curriculum vitae. It takes one mandatory argument, guess what: the place. (-;

45 \DeclareRobustCommand*{\cvplace}[1]{%
46 \gdef\@cvplace{#1}%
47 }%

The \@cvplace command is changed globally, so that you can use it also inside environments other than cv environments.

\date This command is used to change the date that is printed below the curriculum vitae. It needs the date as a mandatory argument. Because

the standard L^{A}TEX classes article.cls, report.cls and book.cls

already define such a command, it will only be defined if it is not provided by the class.

In contrast, the \@date command is part of the L^{A}TEX kernel and thus available in every class. \@date is changed globally for the same reason as the \@cvplace command.

48 \providecommand*{\date}[1]{\gdef\@date{#1}}%

cv This environment takes the heading of the curriculum vitae as a mandatory argument which is typeset at the beginning of the curriculum vitae without indentation using the corresponding font, whose scope is limited by a separate group. If the argument is empty, no heading is used.

49 \newenvironment{cv}[1]{%
50 \ifthenelse{\equal{#1}{\@empty}}{%
51 }{%
52  {%
53  \noindent\cvheadingfont#1\par\nopagebreak
54  }%
55 }%

\@biblabel The labels used within the bibliography are redefined locally as empty. In this way it is possible to add explanatory text to the items like “Articles” or “Book Chapters”.

56 \ifthenelse{\boolean{cv@many@bibs}}{%
57  \DeclareRobustCommand*{\@biblabel}[1]{\@gobble{##1}}%
58 }{}%

\newblock To support bibliographies even in document classes like letter (which do not have “native” bibliography support), it is necessary to provide this command:

59 \providecommand{\newblock}{%
60  \hspace{0.11em plus 0.33em minus 0.07em}%
61 }%

thebibliography The thebibliography environment is (re)defined locally, so you can use a “normal” bibliography elsewhere in your document.

62 \long\def\thebibliography##1{%

The heading is omitted if the ManyBibs option is used. Otherwise it is typeset using the appropriate font, without indentation. A pagebreak after the heading is suppressed.

63  \ifthenelse{\boolean{cv@many@bibs}}{%
64  }{%
65  {%
66  \noindent\cvlistheadingfont\cvbibname
67  \par\nopagebreak
68  }%
69  }%

The following redefinition is taken from the standard document classes, as is most of the rest of the environment.

70  \ifthenelse{\boolean{cv@open@bib}}{%
71  \renewcommand{\newblock}{\par}%
72  }{}%
73  \begin{list}{\@biblabel{\@arabic\c@enumiv}}{%

The lengths of \parsep and \itemsep are swapped in comparison with the cvlist environments. This gives correct spacing even with the openbib option.

74  \setlength{\parsep}{0ex}%
75  \setlength{\itemsep}{%
76  0.5\baselineskip plus 1pt minus 1pt%
77  }%

The vertical spacing is adapted to correspond to the other cvlist environments.

78  \setlength{\topsep}{0ex}%
79  \setlength{\partopsep}{0ex}%

With the ManyBibs option no labels are used, so no space needs to be reserved.

80  \ifthenelse{\boolean{cv@many@bibs}}{%

81  \setlength{\labelsep}{0em}%
82  }{}%

And now lots of code adapted from the standard document classes, only written in a L^{A}TEXnically correct way. (-;

83  \settowidth{\labelwidth}{\@biblabel{##1}}%
84  \setlength{\leftmargin}{\labelwidth}%
85  \addtolength{\leftmargin}{\labelsep}%
86  \ifthenelse{\boolean{cv@open@bib}}{%
87  \addtolength{\leftmargin}{\bibindent}%
88  \setlength{\itemindent}{-\bibindent}%
89  \setlength{\listparindent}{\itemindent}%
90  }{}%
91  \usecounter{enumiv}%
92  \let\p@enumiv\@empty
93  \renewcommand*{\theenumiv}{\@arabic\c@enumiv}%
94  }%
95  \sloppy
96  \clubpenalty4000%
97  \@clubpenalty\clubpenalty
98  \widowpenalty4000%
99  \sfcode`\.=\@m

100 }%

101 \long\def\endthebibliography{%
102  \renewcommand*{\@noitemerr}{%
103  \@latex@warning{Empty `thebibliography' environment}%

104 }%

105  \end{list}%

106 }%

107 }{%

The place (if given) followed by the date is typeset at the bottom of the curriculum vitae. It should not be indented, even if there are blank lines prior to the end of the cv environment.^{13} The amount of vertical space seems quite strange but looks right, much better than the expected 1.5\baselineskip. Don’t know why. (-;

108 \vspace{1.333\baselineskip plus 3pt minus 3pt}%
109 \ifthenelse{\equal{\@cvplace}{\@empty}}{%
110 }{%
111  \noindent
112  \@cvplace
113  \ifthenelse{\boolean{cv@no@date}}{}{%

13Credits go to Gerd Boerrigter for discovering this “feature”.

114  ,~%

115 }% 116 }%

117 \ifthenelse{\boolean{cv@no@date}}{}{%
118  \@date

119 }%

120 \par\noindent\ignorespacesafterend

121 }%

\cvlistheadingfont The headings of the cvlist environments forming the curriculum vitae are typeset in large bold face.

122 \DeclareRobustCommand*{\cvlistheadingfont}{%
123 \bfseries\large

124 }%

\cvlabelfont The labels of the cvlist environments are typeset in the normal size of the current font.

125 \DeclareRobustCommand*{\cvlabelfont}{%
126 \normalsize

127 }%

cvlist This is the list environment used for the parts of the curriculum vitae. It takes one mandatory argument, the heading of the list.

128 \newenvironment{cvlist}[1]{%

The heading of the list is put into a box, using the corresponding font.

129 \sbox{\@cvlistheading}{\cvlistheadingfont#1}%

The cvlist environment is basically a list environment …

130 \begin{list}{}{%

… but with a “smart” \makelabel command which is given the optional argument of the \item command.

131  \renewcommand*{\makelabel}[1]{%

The width of the heading of the list is measured. If it is positive (i. e. the box containing the argument of the cvlist environment is not empty), the width of the optional argument of the \item command is measured, too (using the correct font).

132  \settowidth{\@tempdima}{\usebox{\@cvlistheading}}%
133  \ifthenelse{\lengthtest{\@tempdima > 0pt}}{%
134  \settowidth{\@tempdimb}{\cvlabelfont##1}%

If the heading of the list is less wide than the allowed label width and the optional argument of the \item command is empty, the \item can be typeset in the same line as the heading.

The box containing the heading is then emptied, the heading is typeset flush to the left.

135  \ifthenelse{%
136  \lengthtest{\@tempdima < \cvlabelwidth} \and
137  \lengthtest{\@tempdimb = 0pt}}{%
138  \parbox[b]{\cvlabelwidth}{%
139  \vspace{\cvlabelskip}%
140  \makebox[\cvlabelwidth][l]{%
141  \box\@cvlistheading

142 }% 143 }%

144  }{%

If the heading is too wide or the \item command has an optional argument, the box containing the heading is emptied and the \item command starts a new line.

145  \parbox[b]{0pt}{%
146  \makebox[0pt][l]{\box\@cvlistheading}%
147  \\*[0.5\baselineskip plus 1pt minus 1pt]%

148 }% 149 }%

If the box containing the argument of the cvlist environment is empty (its width is zero), nothing is done. This case holds for all \item commands of a cvlist environment except for the first or if no heading was specified (this does normally not make sense). You see that it is crucial to empty the box by a plain TEX command [3], otherwise the heading would be typeset for every \item command.

150  }{}%

Now that the heading of the list is prepared, the optional argument of the \item command is typeset flush to the left using the corresponding font and the \makelabel command has done its work. Sigh. (-;

151  \cvlabelfont##1\hfill

152 }%

The spacing used in the cvlist environments is adjusted. Remember that \itemsep + \parsep is inserted between items [2]. The label width and the separation between labels and items are set to \cvlabelwidth and \cvlabelsep, respectively, which are globally available and thus can be re-adjusted by the user. If the 1 is omitted in the definition of \topsep, “plus 2pt minus 2pt” is written into your curriculum vitae. Strange. (-;

153  \setlength{\itemsep}{0ex}%

154  \setlength{\parsep}{%
155  0.5\baselineskip plus 1pt minus 1pt%

156 }%

157  \setlength{\topsep}{%
158  1\baselineskip plus 2pt minus 2pt%

159 }%

160  \setlength{\partopsep}{0ex}%
161  \setlength{\labelsep}{\cvlabelsep}%
162  \setlength{\labelwidth}{\cvlabelwidth}%
163  \setlength{\leftmargin}{\cvlabelwidth}%
164  \addtolength{\leftmargin}{\cvlabelsep}%

The end of the list initialization and of the cvlist environment.

165 }%

166 }{%
167 \end{list}%

168 }%

References

[1] Dudenredaktion (ed.): Duden, Rechtschreibung der deutschen Sprache, vol. 1 of Der Duden in 12 Bänden; das Standardwerk zur deutschen Sprache, chap. Richtlinien für den Schriftsatz, pp. 65– 73. Dudenverlag, Mannheim, 21st edn., 1996.

[2] Goossens, M.; Mittelbach, F.; Samarin, A.: Der L^{A}TEX-Begleiter. Addison-Wesley, Bonn, 1st edn., 1994.

[3] Kopka, H.: Erweiterungen, vol. 3 of L^{A}TEX. Addison-Wesley-Longman, Bonn, 1997.

[4] L^{A}TEX3 Project Team. L^{A}TEX 2ε font selection, Jan. 1999.

[5] Willberg, H. P.; Forssman, F.: Lesetypographie. Schmidt, Mainz, 1997.