% \iffalse
%
% curve.dtx --- Doc file for the CurVe package (code and documentation)
%
% Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Didier Verna
% Copyright (C) 2008, 2010 Didier Verna
%
% Author:        Didier Verna <didier@lrde.epita.fr>
% Maintainer:    Didier Verna <didier@lrde.epita.fr>
% Created:       Thu Dec 10 16:04:01 1998
% Last Revision: Tue Nov 30 18:37:39 2010
%
% This file is part of CurVe.
%
% CurVe may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.1
% of this license or (at your option) any later version.
% The latest version of this license is in
% http://www.latex-project.org/lppl.txt
% and version 1.1 or later is part of all distributions of LaTeX
% version 1999/06/01 or later.
%
% CurVe consists of the files listed in the file `README'.
%
%
% Commentary:
%
% Contents management by FCM version 0.1.
%
%
% Code:
%
%<*driver>
\documentclass[a4paper]{ltxdoc}

\usepackage{dox}[2009/09/21]
\doxitem[idxtype=env.]{Env}{environment}{environments}
\doxitem[idxtype=opt.]{Option}{option}{options}
\doxitem[idxtype=cnt.]{Counter}{counter}{counters}
\doxitem[idxtype=lang.]{Lang}{lang}{languages}
\doxitem[idxtype=cond.]{Cond}{conditional}{conditionals}

\usepackage{xspace}
\usepackage[T1]{fontenc}
\newcommand{\curve}{%
  \mbox{\fontfamily{ptm}\fontseries{b}\fontshape{it}\selectfont%
    C%
    \hspace{-.3ex}\protect\raisebox{-.3ex}{\textmd{u}}%
    \hspace{-.1ex}\textmd{r}%
    \hspace{-.2ex}V%
    \hspace{-.6ex}\protect\raisebox{-.3ex}{\textmd{e}}}%
  \xspace}

% #### NOTE: I don't want to \usepackage{curve} just for getting the file
% information. So here's what I do: generate a header with only the
% \ProvidesPackage command. Then, I \input it so that \GetFileInfo works.
% However, I need to manually set the current file name and extension that
% would normally be set by \RequirePackage. Also, note that the call to
% \GetFileInfo below needs to use the extension of the header, that is inc
% instead of sty, even the file curve.inc does not really exist.
\makeatletter
  \def\@currname{curve}
  \def\@currext{inc}
\makeatother
\input{header.inc}
% \OnlyDescription
\CodelineIndex
% \RecordChanges
\setcounter{secnumdepth}{4}
\begin{document}
\DocInput{curve.dtx}
\end{document}
%</driver>
%
% \fi
%
% \catcode`\¡=14
% \CheckSum{1830}
% \GetFileInfo{curve.inc}
%% \CharacterTable
%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%%   Digits        \0\1\2\3\4\5\6\7\8\9
%%   Exclamation   \!     Double quote  \"     Hash (number) \#
%%   Dollar        \$     Percent       \%     Ampersand     \&
%%   Acute accent  \'     Left paren    \(     Right paren   \)
%%   Asterisk      \*     Plus          \+     Comma         \,
%%   Minus         \-     Point         \.     Solidus       \/
%%   Colon         \:     Semicolon     \;     Less than     \<
%%   Equals        \=     Greater than  \>     Question mark \?
%%   Commercial at \@     Left bracket  \[     Backslash     \\
%%   Right bracket \]     Circumflex    \^     Underscore    \_
%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%%   Right brace   \}     Tilde         \~}
%
% \MakeShortVerb{\|}
%
% \makeatletter
% \def\ps@mystyle{
%   \def\@oddfoot{\hfil\thepage\hfil}
%   \def\@evenfoot{\hfil\thepage\hfil}
%   \def\@evenhead{\hfil\slshape\leftmark}
%   \def\@oddhead{\slshape\rightmark\hfil}}
% \renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}{%
%     -3.25ex\@plus -1ex \@minus -.2ex}{%
%     1.5ex \@plus .2ex}{%
%     \normalfont\normalsize\bfseries}}
% \makeatother
%
% \newcommand\packagecopyright{Copyright \copyright{} 2000, 2001, 2002, 2003,
%   2004, 2005, 2006, 2007, 2008, 2010 Didier Verna\xspace}
%
% \newcommand\emacs{\textsf{Emacs}}
% \newcommand\auctex{AUC-\TeX\xspace}
% \newcommand\cv{\textsc{CV}\xspace}
%
% \pagestyle{mystyle}
% \markright{\hskip-.5\marginparwidth \curve \fileversion{} (\filedate)}
%
% \date{\texttt{\fileversion{} (\filedate)}}
% \title{\curve{} -- a \LaTeXe{} class package for making \textbf{Cur}ricula
%   \textbf{V}ita\textbf{e}\footnote{\curve homepage:
%     \texttt{http://www.lrde.epita.fr/\~{}didier/software/latex.php\#curve}}}
% \author{Didier Verna\\
%   \texttt{mailto:didier@lrde.epita.fr}\\
%   \texttt{http://www.lrde.epita.fr/\~{}didier}}
% \maketitle
%
%
% \begin{abstract}
%   \curve provides a \LaTeXe{} class that hopefully will make your life
%   easier when you want to write your \cv. It provides you with a set of
%   commands to create rubrics, entries in these rubrics etc. \curve will then
%   properly format your \cv for you (possibly splitting it onto multiple
%   pages), which is usually the most painful part of \cv writing. Another
%   nice feature of \curve is its ability to manage different \cv ``flavors''
%   simultaneously. It is in fact often the case that you want to maintain
%   slightly divergent versions of your \cv at the same time, in order to
%   emphasize on different aspects of your background.
%
%   The \curve package is \packagecopyright, and distributed under the terms
%   of the LPPL license.
% \end{abstract}
%
%
% \tableofcontents
%
%
% \section{Installation}
% \subsection{Extraction}
% If you are building \curve from the tarball you need to execute the
% following steps in order to extract the necessary files. \curve also
% requires the \textsf{DoX} package (version 2.0, release date 2009/09/21 or
% later), to build. It is not required to use the package.
% \begin{verbatim}
% [pdf]latex curve.ins
% [pdf]latex curve.dtx
% [pdf]latex curve.dtx
% makeindex -s gind curve.idx
% [pdf]latex curve.dtx
% [pdf]latex curve.dtx
% \end{verbatim}
% After that, you need to install the generated documentation and style files
% to a location where \LaTeX{} can find them.
%
% \subsection{TDS-compliant layout}
% For a TDS-compliant layout, the following locations are suggested:
% \begin{verbatim}
% [TEXMF]/tex/latex/curve/curve.cls
% [TEXMF]/doc/latex/curve/curve.[pdf|dvi]
% \end{verbatim}
%
% \subsection{\auctex support}
% \auctex is a powerful major mode for editing \TeX{} documents in \emacs. In
% particular, it provides automatic completion of command names once they are
% known. \curve supports \auctex by providing a style file named
% \texttt{curve.el} which contains \auctex definitions for the relevant
% commands. This file should be installed in a place where \auctex can find it
% (usually in a subdirectory of your \LaTeX{} styles directory). Please refer
% to the \auctex documentation for more information on this.
%
% As of version 1.2, \curve has an improved \auctex support. Most notably, the
% command |M-Ret| will insert an |\entry*| macro within a |rubric|
% environment. Also, the |\makerubric| macro handling now removes both the
% file extension and the file flavor extension.
%
% \subsection{Examples}
% Once you have installed \curve, you might want to start with processing the
% examples in the \texttt{examples/} directory. This will give you an idea of
% what a non customized \cv looks like with \curve. You can also throw an eye
% to my own \cv, which is written with \curve and has some more fancy hackery
% on top of it. It's in French, but only the appearance is important for you.
% My \cv can be found at
% \texttt{http://www.lrde.epita.fr/\~{}didier/about/cv.pdf}.
%
%
% \section{Overview}
% \subsection{Document Layout}
% \subsubsection{Headers}
% A \curve \cv begins with two optional headers (upper left and upper right)
% in which you usually put your name, address, email, whether you're married
% and so on. These headers will respectively be left and right aligned. As of
% version 1.4, \curve lets you insert a small identity photo in the headers,
% either on the left, on the right, or between them.
%
% \subsubsection{Titles}
% After these headers come an optional title and/or subtitle, which can be
% centered on the page, or flushed either left or right.
%
% \subsubsection{Rubrics}
% The remaining of the document is composed of sections called ``rubrics'' in
% the \curve terminology. A rubric represents a major topic that you want to
% detail in your \cv. Typical rubrics are ``Education'', ``Professional
% Experience'' and the like. Rubrics have a title (centered 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
% automatically.
%
% \paragraph{Entries}
% 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. \curve 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).
%
% \paragraph{Subrubrics}
% Additionally, you might want to further split your rubrics into
% ``subrubrics''. For instance, in my own \cv, I have a ``Professional
% Experience'' rubric, with three subrubrics: ``Teaching'', ``Research'' and
% ``Development''. This can be accomplished with a special command. Subrubrics
% are displayed in alignment with the entries' contents by default, but are
% formatted differently so that they remain distinguishable.
%
% \subsection{Document Structure}
% \subsubsection{Source File Splitting}
% \curve is based on the \texttt{LTXtable} package by David Carlisle. I won't
% go into gory details, but this has an important implication: \textbf{each
%   rubric must be in its own separate file}. In other words, your \cv's main
% source file is really a skeleton whose major task is to include the
% different rubrics from their respective source files.
%
% This is not much of a hassle, really, and it actually made my life easier
% when I implemented the ``flavor'' mechanism described below.
%
% \subsubsection{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 on Artificial Intelligence,
% and another emphasizing on 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.
%
% \curve 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 \curve which
% flavor you want to format (\curve can even ask you which one to use
% directly) and that's it. \curve will use the global skeleton, and whenever
% it finds a rubric file specialized for that particular flavor, it will use
% it. Otherwise, it will simply fall back to the default one (no particular
% flavor).
%
%
% \section{Using \curve}
% First of all, please note that \curve requires the presence of
% \texttt{ltxtable}, \texttt{ifthen}, \texttt{calc} and \texttt{filehook}. If
% you're using the identity photo feature, the \texttt{graphicx} package is
% also needed. You don't have to load them explicitly though. As long as
% \LaTeX{} can locate them, they will be used automatically.
%
% \subsection{Skeleton File}
% Say |\documentclass[|\meta{options}|]{curve}| at the beginning of your
% skeleton file in order to use \curve. The available options are described
% along the text, where appropriate.
%
% \subsubsection{Headers}
% \paragraph{Header Components}
% \DescribeMacro{\leftheader}
% \marg{contents}\\
% \DescribeMacro{\rightheader}
% \ldots\\
% The |\leftheader| and |\rightheader| macros define respectively the contents
% of the upper left and upper right headers. They can be used in the
% document's preamble only. The headers will respectively be flushed to the
% left and to the right.
%
% \noindent\DescribeMacro{\photo}\oarg{hpos}\marg{file}\\
% If you want to insert a small identity photo into the header part, you can
% use the |\photo| macro (available since version 1.4). It takes a mandatory
% argument in which you pass the image file name, as you would to
% |\includegraphics|. This macro also takes an optional argument which lets
% you specify the horizontal position of the photo: the values can be
% \texttt{l} (the default), \texttt{c} or \texttt{r} meaning that the photo
% will appear on the left, center, or right.
%
% \paragraph{Header Layout}
% The headers' horizontal layout is further controled by three additional
% macros.
%
% \noindent\DescribeMacro{\photoscale}\marg{scale}\\
% The |\photoscale| macro specifies the amount of text width that the photo
% should occupy. This should be a number between 0 and 1. By default,
% 0.1 is used (meaning 10\% of |\textwidth|).\\
% \DescribeMacro{\photosep} The |\photosep| macro is a \LaTeX{} length that
% specifies the space to leave between the side of the photo and the next
% headers's text. This is used only
% when the photo is on the left or right. By default, |10pt| is used.\\
% \DescribeMacro{\headerscale}\marg{scale}\\
% Finally, |\headerscale| specifies the proportion of the \emph{remaining}
% space that the \emph{left} textual header should occupy. It works like
% |\photoscale| and amounts to 0.5 by default.
%
% Let me take an example to make this clearer. Suppose you have a
% |\photoscale| of 0.1 and a |\photosep| of \texttt{10pt}. The
% \emph{remaining} space, that is, the space occupied by the textual headers,
% amounts to 90\% of the text width, minus 10 points. If you then specify a
% |\headerscale| of 0.6, then the left header will take 60\% of that remaining
% space, and the right one the other 40\%.
%
% \noindent\DescribeMacro{\headerspace}
% |\headerspace| is the amount of extra vertical space to put after the
% headers. This is a \LaTeX{} length that defaults to \texttt{10pt}.
%
% \paragraph{Making Headers}
% \DescribeMacro{\makeheaders}\oarg{vpos}\\
% If you have defined headers, make them appear by calling |\makeheaders| just
% after the beginning of your document. Note that calling this macro assumes
% that you have previously defined both headers (possibly empty, though).
% Otherwise, an error will be signaled. As of version 1.4, the |\makeheaders|
% command accepts an optional argument that controls the vertical alignment.
% When given, this argument must be either |t| (for top), |b| (for bottom) or
% |c| (for center; the default).
%
% \subsubsection{Titles}
% \paragraph{Title Components}
% \DescribeMacro{\title}\marg{text}\\
% \DescribeMacro{\subtitle}\ldots\\
% The |\title| and |\subtitle| macros take one mandatory argument which define
% respectively your \cv's title and subtitle. They can be used in the
% document's preamble only.
%
% \paragraph{Title Layout}
% \DescribeMacro{\titlealignment}\marg{hpos}\\
% By default, titles are centered on the page. However, you can also have them
% aligned to the left or right side of the page. To specify your preferred
% title alignment, call |\titlealignment| with an argument of either
% \texttt{l}, \texttt{c} or \texttt{r}, the meaning of which should be
% obvious. You can also achieve the same effect by passing an optional
% argument to |\maketitle| (see below).\\
% \DescribeMacro{\titlespace}
% |\titlespace| is the amount of extra vertical space to put after the
% title(s). This is a \LaTeX{} length that defaults to \texttt{0pt}.\\
% \DescribeMacro{\titlefont}\marg{cmds}\\
% \DescribeMacro{\subtitlefont}\ldots\\
% The |\titlefont| and |\subtitlefont| macros take one mandatory argument
% which redefine the fonts to use for the title and the subtitle. They can be
% used in the document's preamble only. By default, |\Huge\bfseries| and
% |\Huge\itshape| are used respectively.
%
% \paragraph{Making Titles}
% \DescribeMacro{\maketitle}\oarg{hpos}\\
% If you have defined a title (and possibly a subtitle), make it (them) appear
% by calling |\maketitle| after the beginning of your document, and just after
% |\makeheaders| if you happen use it. It is possible to omit the subtitle,
% but if you call |\maketitle| without having defined at least a title, an
% error will be signaled. |\maketitle| accepts an optional argument for
% specifying the title alignment scheme. This argument is the same as in
% |\titlealignment|, and takes precedence over it.
%
% \subsubsection{Flavors}
% As you already know, each rubric must reside in its own separate file. For
% instance, if you have a ``Professional Experience'' rubric, you would write
% its contents into a file named \texttt{experience.tex}. 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 on
% ``distributed virtual reality''. You would call this flavor ``dvr'', and
% write the modified ``Professional Experience'' rubric into a file named
% \texttt{experience.dvr.tex}.
%
% \noindent\DescribeMacro{\flavor}\marg{key}\\
% The |\flavor| macro takes one mandatory argument which specifies the flavor
% to use (in our example, \texttt{dvr}). Although this might be of little use,
% it is possible to change the flavor anywhere, even right in the middle of
% your \cv's skeleton.\\
% \DescribeOption{ask}
% Instead of using the |\flavor| macro, you can make \curve ask you at
% run-time which flavor to use by passing the \texttt{ask} option to it.
%
% \subsubsection{Rubrics}
% Apart from making headers and titles, the body of your skeleton file will
% usually contain nothing but directives to include the different rubrics of
% your \cv.
%
% \noindent\DescribeMacro{\makerubric}\marg{name}\\
% To include a rubric in your document, use |\makerubric|. This macro takes
% one mandatory argument which specifies the rubric to include at that point.
% The argument actually corresponds to the rubric file name \textbf{without
%   any extension}. Continuing our previous example, you would say
% |\makerubric{experience}|. First, \curve will try to find such a rubric file
% specific for the current flavor in use, (e.g. \texttt{experience.dvr.tex}).
% If that fails, it will fall back to a non-flavored file (here,
% \texttt{experience.tex}). This allows you to specialize only the required
% rubrics and use the default ones otherwise.
%
% \noindent\DescribeMacro{\rubricafterspace}
% As of version 1.12, \curve provides a new \LaTeX{} length,
% |\rubricafterspace| controlling the amount of extra vertical space to put
% after a rubric (hence, before the next one). The default is \texttt{0pt}.
%
% \subsection{Rubric Files}
% \subsubsection{The \texttt{rubric} Environment}
% \DescribeEnv{rubric}\marg{title}\\
% The whole contents of a rubric file must be enclosed in a \texttt{rubric}
% environment. This environment takes one mandatory argument which specifies
% the rubric's title. When a rubric crosses several pages, its title is
% restated with a ``continuation'' text appended.
%
% \noindent\DescribeMacro{\rubricalignment}\marg{hpos}\\
% As of version 1.6, the rubric titles horizontal alignment can be changed
% thanks to the |\rubricalignment| macro. Possible values for its mandatory
% argument are |l|, |c| and |r| (meaning left, centered, or right relative to
% the whole text width), and |cl| and |cc| (meaning left or centered relative
% to the entries'contents). By default, rubric titles are centered (|c|).
%
% \noindent\DescribeMacro{\rubricfont}\marg{cmds}
% The |\rubricfont| macro takes one mandatory argument which redefines the
% font to use for rubric titles. By default, |\Large\bfseries| is used.
%
% \noindent\DescribeMacro{\rubricspace}
% |\rubricspace| is the amount of extra vertical space to put after the rubric
% title. This is a \LaTeX{} length that defaults to \texttt{10pt}.
%
% \subsubsection{Standard Entries}
% \paragraph{Creating rubric entries}
% \DescribeMacro{\entry}\oarg{key}\marg{contents}\\
% You create entries in your rubrics by calling the |\entry| macro. The first
% (optional) argument specifies the key, and the second (mandatory) one
% specifies the contents. Both keys and contents are aligned within each
% rubric.
%
% \noindent\DescribeMacro{\entry*}\oarg{key}\\
% Actually, the |\entry| macro was somewhat ill-designed in the first place.
% The |rubric| environment pretty much behaves as an |itemize| one, hence the
% idea of using an |\item|-like syntax. As of version 1.2, \curve provides an
% |\entry*| macro which behaves like |\item| in lists: it takes the same first
% optional argument as the non starred version, but has no other argument. The
% entry's contents simply consists of the text following the macro call, up to
% the next |\entry|, |\entry*| or |\subrubric| (see below) call.
%
% \paragraph{Entries layout}
% \DescribeMacro{\keyalignment}\marg{hpos}\\
% As of version 1.7, entries'keys horizontal alignment can be changed thanks
% to the |\keyalignment| macro. Possible values for its mandatory argument are
% |l|, |c| and |r| (meaning left, centered, or right). By default, keys are
% left aligned (|l|).
%
% \noindent\DescribeMacro{\keyfont}\marg{cmds}\\
% The |\keyfont| macro takes one mandatory argument which redefines the font
% to use for the entries' keys. By default, the standard document font is
% used.
%
% \noindent\DescribeMacro{\prefix}\marg{cmds}\\
% Each entry's contents can be prefixed with a visual clue (a symbol for
% instance). This comes in handy to make a clear distinction between different
% entries sharing the same key (which is not repeated). The |\prefix| macro
% takes one mandatory argument which redefines the prefix to use. By default,
% |\textbullet| is used. Note that as of version 1.11, \curve forces the
% prefix to be empty in bibliographic entries (see section \ref{sec:biblio}).
%
% \noindent\DescribeOption{skipsamekey}
% While maintaining your CV, you might end up reorganizing your entries and
% even get entries with the same key. Normally, \curve blindly prints the keys
% regardless of their values. If you don't want repetition, you would have to
% remove keys by hand which can be cumbersome. As of version 1.10, \curve can
% skip all but the first of a series of identical keys automatically, provided
% that you use the |skipsamekey| option. Note that as of version 1.11, \curve
% disables this mechanism in bibliography rubrics (see section
% \ref{sec:biblio}).
%
% \subsubsection{Plain text entries}
% \DescribeMacro{\text}\marg{contents}\\
% Sometimes, you may feel the need to insert plain text in the middle of a
% rubric, without the fancy key/prefix formatting stuff. As of version 1.16,
% \curve provides a |\text| macro for that. Plain text occupies the whole page
% width. If you whish to further distinguish it from the surrounding entries,
% you can use |\par| to add vertical space before and/or after the text.
%
% \subsubsection{Invisible entries\label{sec:noentry}}
% The most frequently asked question about \curve is probably whether it is
% possible to align entries across several rubrics. This is (currently) not
% possible automatically because rubrics are typeset as independant tables.
% However, a manual solution boils down to enlarging too narrow entries (keys,
% actually).
%
% \noindent \DescribeMacro{\noentry}\marg{key}\\
% As of version 1.11, \curve provides a convenience macro to ease this
% process: |\noentry|. This macro takes one mandatory argument, a key that
% will be used in the entries alignment calculation. However, this command
% will not produce any text. So if you want all your rubrics to share the same
% alignment, you typically spot the longest key in your CV, and issue a
% |\noentry{this long key}| call in all other rubrics.
%
% \subsubsection{Subrubrics}
% \DescribeMacro{\subrubric}\marg{title}\\
% Within a single rubric, you can further separate entries into subrubrics. In
% order to do this, the |\subrubric| macro is provided. Its mandatory argument
% specifies the subrubric's title.
%
% \noindent\DescribeMacro{\subrubricalignment}\marg{hpos}\\
% As of version 1.6, the subrubrics horizontal alignment can be changed thanks
% to the |\subrubricalignment| macro. Possible values for its mandatory
% argument are |l|, |c| and |r| (meaning left, centered, or right relative to
% the whole text width), and |cl| and |cc| (meaning left or centered relative
% to the entries'contents). By default, subrubrics are left-aligned with the
% entries' contents (|cl|).
%
% \noindent\DescribeMacro{\subrubricfont}\marg{cmds}\\
% The |\subrubricfont| macro takes one mandatory argument which redefines the
% font to use for the subrubrics. By default, |\Large\itshape| is used.
%
% \noindent\DescribeMacro{\subrubricspace}
% |\subrubricspace| controls the amount of extra vertical space to put after
% subrubrics. This is a \LaTeX{} length that defaults to \texttt{5pt}.
% \DescribeMacro{\subrubricbeforespace}
% |\subrubricbeforespace| controls the amount of extra vertical space to put
% \textit{before} a subrubric when there are entries above. This is a \LaTeX{}
% length that defaults to \texttt{20pt}.
%
% \subsection{Bibliography\label{sec:biblio}}
% Most scientists include their own list of publications in their \cv, so
% \curve has support for different forms of bibliography.
%
% \subsubsection{Manual bibliography}
% The first thing you can do is create your own bibliography manually (I mean,
% just like an ordinary rubric), and although this may appear boring, I
% actually encourage people to do so for at least three reasons (only my
% opinion of course):
% \begin{itemize}
% \item A \cv should be strictly formatted and coherent in layout.
%   Bibliography is no exception to this rule. In other words, it is prettier
%   to have your publications formatted like the rest of your \cv.
% \item Automatic bibliography generation tools produce references, which is
%   silly in a \cv because you don't actually reference your papers anywhere
%   (or do you?). So better to sort them another way, like, by year of
%   publication as I do in my own \cv.
% \item Manually adding, like, what? Half a dozen papers a year in your
%   \cv is not that much of a burden after all.
% \end{itemize}
%
% \subsubsection{The \texttt{bibliography} environment}
% \DescribeEnv{thebibliography}\marg{key}\\
% \DescribeMacro{\bibitem}\oarg{label}\marg{ref}\\
% Some people however have expressed the wish of having standard bibliography
% support in \curve. Version 1.2 provides that. The standard |thebibliography|
% environment is now supported along with its |\bibitem| companion. The
% behavior is actually that of a |rubric| environment with its |\entry*|
% companion (with an empty prefix however). This fact has two implications:
% firstly, the argument to the environment is unused in \curve (but remains
% for compatibility with the rest of \LaTeX) because \curve itself formats the
% keys and contents properly aligned. Secondly, the bibliographic environment
% \textbf{must} reside in its own file, as any other rubric. Don't forget that
% if you happen to write the environment manually.
%
% \noindent\DescribeOption{openbib}
% As of version 1.16, the \texttt{openbib} option is supported. When used,
% bibliographic blocks appear on different lines instead of in a single
% paragraph. Note that prior to version 1.16, this was actually the default
% behavior, which was not quite right (the standard classes don't openbib by
% default).
%
% \noindent\DescribeOption{revbib}
% As of version 1.14, it is possible to count bibliographic items in a reverse
% order, which comes in handy when you display your publications from the most
% recent to the oldest one. The \texttt{revbib} option triggers this behavior.
% Note that this also works when you use \BibTeX{} (see below).
%
% \subsubsection{\BibTeX}
% \DescribeMacro{\nocite}\marg{citations}\\
% \DescribeMacro{\bibliographystyle}\marg{style}\\
% \DescribeMacro{\bibliography}\marg{files}\\
% If you want to use \BibTeX, that's also possible of course. Do it as you
% would do in a random paper. You will probably issue a |\nocite{*}| command
% followed by a call to |\bibliography|. \curve uses the |bbl| file as a
% rubric one.
%
% \subsubsection{Compatibility concerns}
% \begin{itemize}
% \item |bibentry|: \curve is compatible with the |bibentry| package since
%   version 1.9. Note that there is an incompatibility between |bibentry| and
%   |hyperref| with a workaround described in the |hyperref| README file.
%   However, \curve takes care of this problem for you so you \emph{must not}
%   use the workaround described there.
% \item |multibbl|: \curve is compatible with the |multibbl| package since
%   version 1.12.
% \item |splitbib|: \curve is compatible with the |splitbib| package since
%   version 1.16. Note however that only one level of category is allowed
%   (categories appear as subrubrics).
% \end{itemize}
%
% \subsection{Standard Class Features}
% \subsubsection{Page Size and layout}
% \DescribeOption[noindex]{*paper}
% \DescribeOption[noprint]{a4paper}
% \DescribeOption[noprint]{a5paper}
% \DescribeOption[noprint]{b4paper}
% \DescribeOption[noprint]{letterpaper}
% \DescribeOption[noprint]{legalpaper}
% \DescribeOption[noprint]{executivepaper}
% \DescribeOption{landscape}
% The \texttt{a4}, \texttt{a5}, \texttt{b4}, \texttt{letter}, \texttt{legal}
% and \texttt{executive} ``paper'' options allow you to select the type of
% page format you want. By default, \texttt{letterpaper} is used. The
% \texttt{landscape} options switches the horizontal and vertical settings.
% I'm not sure why I propose this option. Nobody wants to write a \cv in
% landscape mode, right?
%
% \noindent\DescribeOption{oneside}
% \DescribeOption{twoside}
% As of version 1.6, \curve also supports the standard \texttt{oneside} and
% \texttt{twoside} class options. By default, \texttt{oneside} is used. In
% \texttt{twoside} mode, odd and even pages have a different geometry and
% headings layout.
%
% \subsubsection{Font Size}
% \DescribeOption{10pt}
% \DescribeOption{11pt}
% \DescribeOption{12pt}
% The \texttt{10pt}, \texttt{11pt} and \texttt{12pt} options let you choose
% the size of the default font you want to use. By default, \texttt{10pt} is
% used.
%
% \subsubsection{Output Mode}
% \DescribeOption{final}
% \DescribeOption{draft}
% In \texttt{draft} mode, a black rule will be drawn at the end of overfull
% lines (as done by standard classes). Due to \curve using the
% \texttt{LTXtable} package (and in case \texttt{longtable} prior to version 4
% is used by it), a call to |\setlongtables| is performed in \texttt{final}
% mode. Please refer to the next section for more information on this. By
% default, \texttt{final} is used.
%
% \subsubsection{Page styles}
% \DescribeMacro{\pagestyle}\marg{style}\\
% \DescribeMacro{\thispagestyle}\marg{style}\\
% As of version 1.6, \curve supports the standard \LaTeX{} page style
% mechanism. Available styles are \texttt{empty}, \texttt{plain},
% \texttt{headings} and \texttt{myheadings}. These styles have their usual
% meaning, given that rubric and subrubric names are used for marking purpose
% (the equivalent of chapters and sections in books for instance). By default,
% the page style is \texttt{empty}.
%
% \subsubsection{Internationalization}
% \curve currently supports 12 languages via the following options:
% \texttt{english}, \texttt{french} (or \texttt{francais}), \texttt{spanish},
% \texttt{portuguese} (or \texttt{portuges}), \texttt{brazilian} (or
% \texttt{brazil}), \texttt{italian}, \texttt{german}, \texttt{ngerman},
% \texttt{dutch}, \texttt{danish}, \texttt{swedish} and \texttt{polish}. The
% \texttt{german} and \texttt{ngerman} options are currently equivalent; so
% are the \texttt{portuguese} and \texttt{brazilian} ones.
%
% If you want a finer grain on the language-dependent parts of \curve, the
% following macros are provided.
%
% \noindent\DescribeMacro{\continuedname}\marg{continuation text}\\
% The |\continuedname| macro takes one mandatory argument which redefines the
% continuation text output when rubrics extend across several pages. By
% default, ``\meta{space}(continued)'' is used in English. Although this might
% be of little use, it is possible to change the continuation text in the
% middle of your document, provided that you do so outside the |rubric|
% environment.
%
% \noindent\DescribeMacro{\listpubname}\marg{title}\\
% The |\listpubname| macro takes one mandatory argument which redefines the
% title of the bibliographic section (when you use the provided bibliography
% support). By default, ``List of Publications'' is used in English. Note that
% for compatibility with the |multibbl| and |multibib| packages, \curve honors
% the existence of |\bibname| or |\refname| macros prior to |\listpubname| for
% deciding which title to give to the bibliographic rubric.
%
%
% \section{Hints, Tips'n Tricks}
% Here are some tips that I use for my own \cv. You might find them of some
% interest.
%
% \subsection{Page Geometry}
% First of all, it is common to have very thin margins in curricula vitae.
% \curve does not do anything special about this because I don't think that
% belongs to its duty. The \texttt{geometry} package comes in handy if you
% want to reduce your margins.
%
% \subsection{Vertical spacing}
% Although they might look a bit like itemize environments, \curve rubrics
% are implemented with tables. This has an important consequence: empty lines
% in rubrics do affect the vertical spacing of your document (at least for the
% time being).
%
% You might be tempted to leave such empty lines here and there for
% readability, or for this precise effect it has on vertical spacing, but I
% advise you against this. Better to stick entries and subrubrics together,
% and play with the spacing commands to achieve the desired layout. This will
% ensure a more consistent layout with future versions of \curve.
%
% If you are using \BibTeX{}, you should also be aware of the fact that some
% \BibTeX{} styles output empty lines between |\bibitem|'s, and this has an
% unfortunate influence on vertical spacing for the same technical reason. If
% this vertical space annoys you, what you can do is modify the \BibTeX{}
% style in order to avoid the production of these empty lines. For instance,
% in |plain.bst|, this simply boils down to removing the call to |newline$| at
% the beginning of the |output.bibitem| function.
%
% \subsection{The \texttt{ltx} Extension}
% Personally, I prefer to keep \texttt{.tex} for \TeX{} files, and use the
% \texttt{ltx} extension for \LaTeX. This is supported by \curve which will
% actually prefer \texttt{ltx} files over \texttt{tex} ones, especially when
% including rubrics. To be more precise, suppose you are building a flavor
% \texttt{flv} of your \cv. A call to |\makerubric{foo}| will try to use the
% following files in that order:\\
% \texttt{foo.flv.ltx}\\
% \texttt{foo.flv.tex}\\
% \texttt{foo.ltx}\\
% \texttt{foo.tex}
%
% \subsection{Longtable}
% \curve users should be aware of the fact that the layout implementation is
% based on the \texttt{LTXtable} package, which in turn is a mix of
% \texttt{tabularx} and \texttt{longtable}. This has several implications,
% most notably that when writing a rubric, you are actually inside a tabular
% environment. Here are some things to keep in mind:
% \begin{itemize}
% \item You are not allowed to use the |\\| command to start a new line.
%   However, you're free to use |\par| in your entries'contents instead. Note
%   that \curve sets |\parskip| to |0pt| so that starting a new paragraph
%   looks like just starting a new line.
% \item You can use |\raggedright| and |\raggedleft| in your entries.
% \item You can use |\pagebreak|, |\nopagebreak| and |\newpage| at the
%   beginning of a line, just before starting a new entry.
% \item Prior to version 4, \texttt{longtable} used an alignment mechanism
%   involving calls to |\setlongtables| (see its documentation). \curve
%   retains this for backward compatibility and still calls |\setlongtables|
%   in final (not draft) mode. If your version of \texttt{longtable} is recent
%   enough, you shouldn't be concerned by this. If it is older, you might need
%   to process your document a few times in draft mode, and then one last time
%   in final mode. However, keep in mind that in both cases, you might still
%   need up to 3 or 4 passes of \LaTeX{} on your document.
% \end{itemize}
%
% \subsection{Managing Different Flavors}
% If you maintain different flavors of your \cv at the same time, you probably
% want to rebuild all of them after any modification. Since you have a single
% skeleton file for all of them (say, \texttt{cv.tex}), the output file will
% have the same name for all flavors (say, \texttt{cv.dvi}). This can bother
% you if you want all flavors of your formatted \cv available at the same
% time.
%
% To remedy this problem, I usually use the \texttt{ask} option and a
% makefile to build the different flavors and move the output file to
% flavor-specific name. Here is a typical makefile target that should clarify
% (or maybe darken?) what I am saying:
% \begin{verbatim}
%cv.$(FLAVOR).dvi: cv.ltx $(RUBRICS)
%       echo $(FLAVOR) | latex cv.ltx
%       mv cv.dvi $@
% \end{verbatim}
% As you can see, the shell is responsible for answering the question.
%
% \subsection{More On Flavors}
% In order to implement the flavor mechanism, the \LaTeX{} macro |\input| has
% been redefined 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 \texttt{flv}. Create a file called \texttt{subtitle.flv.ltx}
% 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'll have different
% subtitles in your different \cv flavors.
%
%
% \appendix
% \section{Appendix}
%
% \subsection{Frequently Asked Questions}
% \begin{enumerate}
% \item
%   \textbf{Is there a way to align entries across several (all) rubrics?}\\
%   Not automatically because rubrics are typeset as individual tables. There
%   are many ways to manually ``trick'' too narrow keys in order to enlarge
%   them however. As of version 1.11, \curve provides a new convenience
%   macro to do something similar: see section \ref{sec:noentry}.
% \item
%   \textbf{How can I change the interline spacing?}\\
%   Internally, \curve uses \LaTeX{} tabular-based environments. As such,
%   you can play with |\arraystretch| to modify the space between rows.
% \item
%   \textbf{When a page break occurs in the middle of a rubric, the same
%     alignment is kept on both pages, which might result in suboptimal
%     layout.}\\
%   This is a technical limitation of the automatic alignment computation
%   process in longtables and I don't think there will be a solution anytime
%   soon (page breaking is orthogonal to column width calculation). What you
%   can do, once your CV is finalized, is manually split the concerned rubric
%   into different ones, starting at the appropriate entries to avoid page
%   breaking in the middle.
% \item
%   \textbf{How can I make multi-line subrubrics?}\\
%   Here are two ideas:
%   \begin{itemize}
%   \item Put your text in several consecutive subrubrics (one per line).
%     However, this might not give you the desired vertical spacing.
%   \item Probably better, put your material in a parbox:\\
%     |\subrubric{\parbox{width}{first blah blah\\next blah blah}}|\\
%     This is a bit dirty because you have to figure out a suitable width for
%     your parbox, but this will work.
%   \end{itemize}
% \item
%   \textbf{How can I make multi-line keys?}\\
%   The trick is to temporarily change the key cell type to a paragraph one
%   (remember that we're in a tabular environment).
%   \begin{enumerate}
%   \item Recover the key formatting by doing something like this near
%     the beginning of your document:\\
%     |\makeatletter\let\mykeyfont\@keyfont\makeatother|
%   \item Use something like this where you need a multi-line key (you will
%   have to adjust the paragraph width manually):
% \begin{verbatim}
% \entry*[\multicolumn{1}{@{}>{\mykeyfont}p{2cm}}{%
%   long key\newline long key}]
%   Entry text. Entry text. Entry ...
% \end{verbatim}
%   \end{enumerate}
% \item
%   \textbf{How to deal with long keys?}\\
%   The best thing to do is to make them multi-line manually. Please refer to
%   the previous question.
% \item
%   \textbf{Can I change the prefix locally?}\\
%   Yes and no. The |\prefix| command can only be used in the preamble or
%   between rubrics. Otherwise, there is currently no way to change the prefix
%   for a single entry. This limitation will disappear in a future release.
% \end{enumerate}
%
% \subsection{Changes}
% \begin{itemize}
% \item[v1.16] New |\text| macro, suggested by Alexandre Duret-Lutz and Franco
%   Callegati.\\
%   Support for the \texttt{openbib} option which was implicit
%   before, reported by Vasilis Boucharas.\\
%   Fix incompatibilities with the |splitbib| package, reported by Jean
%   Taucol.\\
%   Handle the |bibentry|/|hyperref| incompatibiity directly.\\
%   Implement old font commands, letting packages using them (e.g. |fancyhdr|)
%   work correctly.
% \item[v1.15] Support for itemize environments, suggested by Mirko Hessel-von
%   Molo\\
%   Added some documentation about vertical spacing problems in |bbl| files,
%   suggested by Seweryn Habdank-Wojew\'odzki
% \item[v1.14] Support for reverse counting bibliographic entries, suggested
%   by Joseph Wright\\
%   Support for Polish thanks to Radek Dominiak\\
%   |<radoslaw.dominiak@gmail.com>|
% \item[v1.13] Support for title alignment, suggested by Lars Kasper\\
%   Support for footnotes, suggested by Alain Coletta\\
%   Let rubrics honor the current |\linewidth|\\
%   Changed default value of |\subrubricbeforespace| to \texttt{20pt}\\
%   Fix some overfull boxes, reported by Nico Schl\"olmer\\
%   FAQ and documentation update
% \item[v1.12] Support for Swedish thanks to Konrad Skeri Persson\\
%   |<konrad@skeri.com>|\\
%   New customizable length |\rubricafterspace| defining the space between
%   each rubric\\
%   Fix incompatibilities with the |multibbl| package.\\
%   Honor bibliography titles (if) provided by |multibib| or |multibbl|\\
%   New command |\today|\\
%   FAQ update\\
%   Fix implementation of \texttt{skipsamekey} option
% \item[v1.11] New FAQ section in the documentation\\
%   New command |\noentry| to manually enlarge too narrow rubrics\\
%   Make |\pagebreak|, |\nopagebreak| and |\newpage| work in rubrics,
%   suggested by Alexandre Duret-Lutz\\
%   Fix spurious right margin spaces\\
%   Fix usage of the bib counter, disable |skipsamekey| and the prefix in
%   bibliographic entries
% \item[v1.10] Support automatic skipping of identical keys, suggested by Akim
%   Demaille\\
%   Fix alignment problem with empty prefix, reported by Jonas Haulin
% \item[v1.9] Fix incompatibilities with the |bibentry| package, reported by
%   Joris Desmet\\
%   Fix standard bibliography support (broken in v1.8)
% \item[v1.8] Prevent page breaks after subrubric headings
% \item[v1.7] Support for key horizontal alignment\\
%   |\raggedleft| and |\raggedright| can now be used within individual
%   entries\\
%   Fix typo in Danish version of |\continuedname|
% \item[v1.6] Support for rubric and subrubric titles horizontal alignment\\
%   Support for standard \LaTeX{} page style mechanism\\
%   Support for \texttt{oneside} and \texttt{twoside} options\\
%   Support for Portuguese thanks to Adiel Mittmann |<adiel@inf.ufsc.br>|\\
%   Fix bug in |\bibliography|: protect against non existant files, reported
%   by Andrew Comport\\
%   Fix conflict with \texttt{hyperref} in some bibliography definitions
% \item[v1.5] Support for Dutch thanks to Thomas Delaet\\
%   |<Thomas.Delaet@student.kuleuven.ac.be>|\\
%   Fix typo in rubric environment, reported by Torsten Liesk
% \item[v1.4] Support for photo inclusion\\
%   Support for headers horizontal scaling\\
%   Optional argument to |\makeheaders| for vertical alignment,
%   suggested by Dan Luecking
% \item[v1.3] Support for Danish thanks to Kim Rud Bille
%   |<krbi01@control.auc.dk>|
% \item[v1.2] Support for standard bibliography mechanism(s)\\
%   New macro |\entry*|\\
%   Improvements in \auctex support\\
%   Support for German thanks to Harald Harders |<h.harders@tu-bs.de>|\\
%   Support for Spanish thanks to Agust\'in Mart\'in |<agusmba@terra.es>|
% \item[v1.1] Support for Italian thanks to Riccardo Murri
%   |<murri@phc.unipi.it>|
% \end{itemize}
%
%
% \StopEventually{\par Well, I think that's it. Enjoy using \curve!
%   \vfill\hfill\small\packagecopyright.}
%
%
% \subsection{Implementation}
% First, the class announcement and the initial requirements:
%    \begin{macrocode}
%<curve>\NeedsTeXFormat{LaTeX2e}
%<*header>
\ProvidesClass{curve}[2010/12/14 v1.16 Curriculum Vitae class for LaTeX2e]

%</header>
%<*curve>
\RequirePackage{ltxtable}
\RequirePackage{ifthen}
\RequirePackage{calc}
\RequirePackage{filehook}

%    \end{macrocode}
%
% \subsubsection{Rubric Files}
% We don't want to output an extra |subrubricbeforespace| if no entry is
% present before the subrubric. This is done by using an |\@beforespace|
% command which is set to |0pt| at the beginning of each rubric, and switched
% to the proper value when an entry is added.
% \begin{macro}{\@nextentry}
%   The |@nextentry| command is used to implement |\entry*| while maintaining
%   backward compatibility with |\entry| and |\subrubric|. A new entry or a
%   subrubric might have to close the preceding entry if it was opened using
%   the starred form.
%    \begin{macrocode}
\gdef\@nextentry{}

%    \end{macrocode}
% \end{macro}
%
% \paragraph{Entries}
% \begin{macro}{\@keyfont}
%   \mbox{}\MacroTopsep=0pt
% \begin{macro}{\keyfont}
%   \marg{cmds}
%    \begin{macrocode}
\def\@keyfont{}
\newcommand\keyfont[1]{\gdef\@keyfont{#1}}

%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\keyalignment}
%   \marg{hpos}
%    \begin{macrocode}
\newcolumntype{k}{>{\@keyfont}l}
\newcommand\keyalignment[1]{%
  \ifthenelse{\equal{#1}{l}}{}{%
    \ifthenelse{\equal{#1}{r}}{}{%
      \ifthenelse{\equal{#1}{c}}{}{%
        \ClassError{curve}{Invalid key alignment}{%
          You have called \protect\keyalignment\space with an invalid value.%
          \MessageBreak
          Valid options include l, c, and r.\MessageBreak
          Type X <return> to quit, fix the typo, and rerun LaTeX.}}}}%
  \newcolumntype{k}{>{\@keyfont}#1}}

%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@prefix}
%   \mbox{}\MacroTopsep=0pt
% \begin{macro}{\prefix}
%   \marg{cmds}
%    \begin{macrocode}
\def\@prefix{\textbullet}
\newcommand\prefix[1]{\gdef\@prefix{#1}}

%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\@maybekey}
%   \mbox{}\MacroTopsep=0pt
% \begin{macro}{\@alwayskey}
%   \marg{key}
% \begin{option}{skipsamekey}
%   As of version 1.10, \curve can skip keys identical to the previous one, if
%   the option |skipsamekey| is used.
%    \begin{macrocode}
\def\@maybekey#1{%
  \def\@newkey{#1}%
  \ifx\@previouskey\@newkey\gdef\@@key{}\else%
    \gdef\@@key{#1}\gdef\@previouskey{#1}%
  \fi}

\def\@alwayskey#1{%
  \gdef\@@key{#1}}

\let\@key\@alwayskey
\DeclareOption{skipsamekey}{\let\@key\@maybekey}
%    \end{macrocode}
% \end{option}
% \end{macro}
% \end{macro}
% \begin{macro}{\@entry}
%   \oarg{key}\marg{contents}\MacroTopsep=0pt
% \begin{macro}{\@sentry}
%   \oarg{key}
% \begin{macro}{\entry}
%    \begin{macrocode}
\newcommand\@entry[2][]{%
  \gdef\@nextentry{}\@key{#1}%
  \egroup% end of \noalign opened in \entry.
  \@@key&\@prefix&#2\\\par}

\newcommand\@sentry[1][]{%
  \gdef\@nextentry{\\\par}\@key{#1}%
  \egroup% end of \noalign opened in \entry.
  \@@key&\@prefix&}

\newcommand\entry{%
  \@nextentry
  \noalign\bgroup\gdef\@beforespace{\subrubricbeforespace}%
  \@ifstar{\@sentry}{\@entry}}

%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \begin{macro}{\@almosttextwidth}
%   \mbox{}\MacroTopsep=0pt
% \begin{macro}{\@text}
%   \marg{contents}
% \begin{macro}{\@stext}
% \begin{macro}{\text}
%   This macro wraps around |\multicol| to let people input plain text within
%   a rubric. Currently, plain text doesn't interfere with the |skipsamekey|
%   mechanism, but this choice is arguable. Note that the use of |\text*| is
%   not documented yet because it doesn't work quite right. It produces an
%   undesired space before the text and I don't understand why.
%    \begin{macrocode}
\newlength{\@almosttextwidth}
\AtBeginDocument{\setlength\@almosttextwidth{\textwidth-\hfuzz}}

\newcommand\@text[1]{%
  \gdef\@nextentry{}%
  \egroup% end of \noalign opened in \text.
  \multicolumn{3}{@{}p{\@almosttextwidth}@{}}{#1}\\}

\newcommand\@stext{%
  \gdef\@nextentry{\egroup\\\par}%
  \egroup% end of \noalign opened in \text.
  \multicolumn{3}{@{}p{\@almosttextwidth}@{}}\bgroup}

\newcommand\text{%
  \@nextentry
  \noalign\bgroup\gdef\@beforespace{\subrubricbeforespace}%
  \@ifstar{\@stext}{\@text}}

%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\noentry}
%   \marg{key}\\
%   This macro is a wrapper around |\kill| to manually adjust too narrow
%   rubrics.
%    \begin{macrocode}
\newcommand\noentry[1]{\@nextentry
  \noalign{\gdef\@nextentry{}}#1&&\kill}

%    \end{macrocode}
% \end{macro}
%
% \paragraph{Subrubrics}
% \begin{macro}{\@subrubricfont}
%   \mbox{}\MacroTopsep=0pt
% \begin{macro}{\subrubricfont}
%   \marg{cmds}
%    \begin{macrocode}
\def\@subrubricfont{\Large\itshape}
\newcommand\subrubricfont[1]{\gdef\@subrubricfont{#1}}

%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\subrubricbeforespace}
%   \MacroTopsep=0pt
% \begin{macro}{\subrubricspace}
%    \begin{macrocode}
\newlength\subrubricbeforespace
\setlength\subrubricbeforespace{20pt}

\newlength\subrubricspace
\setlength\subrubricspace{5pt}

%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\@subrubricmark}
%   \mbox{}\MacroTopsep=0pt
% \begin{macro}{\@@subrubric}
%   \marg{title}\\
%   Note that |\@subrubricmark| is called outside the raisebox. That's because
%   otherwise, the mark would not go to the toplevel page vertical box, and
%   \TeX{} would not notice it.
%    \begin{macrocode}
\let\@subrubricmark\@gobble

\def\@@subrubric#1{%
  \rule{0bp}{\@beforespace}
  {\@subrubricfont#1}
  \@subrubricmark{#1}}

%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\@clcccolsep}
%   The normal intercolumn space between the prefix and the entry's content is
%   replaced with an unbreakable space. This causes a problem (fixed in
%   version 1.10) with the [sub]rubric alignments cl and cc when the prefix is
%   empty, because the unbreakable space in question slightly shifts the
%   entry's content to the right. If we want a proper alignment, we then have
%   to take this offset into account in the cl and cc multicolumns, for both
%   rubrics and subrubrics. The following macro implements this:
%    \begin{macrocode}
\def\@clcccolsep{\hspace{\tabcolsep}\ifx\@prefix\@empty~\fi}

%    \end{macrocode}
% \begin{macro}[noindex]{\@subrubric@*}
%   \MacroTopsep=0pt
% \begin{macro}{\@subrubric}
%   \marg{title}
% \begin{macro}[noprint]{\@subrubric@l}
% \begin{macro}[noprint]{\@subrubric@c}
% \begin{macro}[noprint]{\@subrubric@r}
% \begin{macro}[noprint]{\@subrubric@cl}
% \begin{macro}[noprint]{\@subrubric@cc}
% \begin{macro}[noprint]{\@subrubric@cc}
%    \begin{macrocode}

\def\@subrubric@l#1{\multicolumn{3}{@{}l@{}}{\@@subrubric{#1}}}
\def\@subrubric@c#1{\multicolumn{3}{@{}c@{}}{\@@subrubric{#1}}}
\def\@subrubric@r#1{\multicolumn{3}{@{}r@{}}{\@@subrubric{#1}}}
\def\@subrubric@cl#1{&\multicolumn{2}{@{\@clcccolsep}l@{}}{\@@subrubric{#1}}}
\def\@subrubric@cc#1{&\multicolumn{2}{@{\@clcccolsep}c@{}}{\@@subrubric{#1}}}

\let\@subrubric\@subrubric@cl

%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \begin{macro}{\subrubricalignment}
%   \marg{hpos}
%    \begin{macrocode}
\newcommand\subrubricalignment[1]{%
  \def\@curve@temp@a{\let\@subrubric}
  \expandafter\@curve@temp@a\csname @subrubric@#1\endcsname
  \@ifundefined{@subrubric}{%
    \ClassError{curve}{Invalid subrubric alignment}{%
      You have called \protect\subrubricalignment\space with an invalid value.%
      \MessageBreak
      Valid options include l, c, r, cl and cc.\MessageBreak
      Type X <return> to quit, fix the typo, and rerun LaTeX.}}
}

%    \end{macrocode}
% \end{macro}
% \begin{macro}{\subrubric}
%   \marg{title}
%    \begin{macrocode}
\newcommand\subrubric[1]{%
  \@nextentry
  \noalign{\gdef\@nextentry{}}%
  \@subrubric{#1}\\*[\subrubricspace]\par}

%    \end{macrocode}
% \end{macro}
%
% \paragraph{Rubrics}
% \begin{macro}{\@rubricfont}
%   \mbox{}\MacroTopsep=0pt
% \begin{macro}{\rubricfont}
%   \marg{cmds}
%    \begin{macrocode}
\def\@rubricfont{\Large\bfseries}
\newcommand\rubricfont[1]{\gdef\@rubricfont{#1}}

%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\rubricspace}
%    \begin{macrocode}
\newlength\rubricspace
\setlength\rubricspace{10pt}

%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@rubrichead}
%   \marg{title}\MacroTopsep=0pt
% \begin{macro}[noindex]{\@rubrichead@*}
%   \ldots
% \begin{macro}{\@rubrichead}
% \begin{macro}[noprint]{\@rubrichead@l}
% \begin{macro}[noprint]{\@rubrichead@c}
% \begin{macro}[noprint]{\@rubrichead@r}
% \begin{macro}[noprint]{\@rubrichead@cl}
% \begin{macro}[noprint]{\@rubrichead@cc}
%    \begin{macrocode}
\def\@@rubrichead#1{\@rubricfont#1}

\def\@rubrichead@l#1{\multicolumn{3}{@{}l@{}}{\@@rubrichead{#1}}}
\def\@rubrichead@c#1{\multicolumn{3}{@{}c@{}}{\@@rubrichead{#1}}}
\def\@rubrichead@r#1{\multicolumn{3}{@{}r@{}}{\@@rubrichead{#1}}}
\def\@rubrichead@cl#1{&\multicolumn{2}{@{\@clcccolsep}l@{}}{\@@rubrichead{#1}}}
\def\@rubrichead@cc#1{&\multicolumn{2}{@{\@clcccolsep}c@{}}{\@@rubrichead{#1}}}

\let\@rubrichead\@rubrichead@c

%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \begin{macro}{\rubricalignment}
%   \marg{hpos}
%    \begin{macrocode}
\newcommand\rubricalignment[1]{%
  \def\@curve@temp@a{\let\@rubrichead} \expandafter\@curve@temp@a\csname
  @rubrichead@#1\endcsname \@ifundefined{@rubrichead}{%
    \ClassError{curve}{Invalid rubric alignment}{%
      You have called \protect\rubricalignment\space with an invalid value.%
      \MessageBreak Valid options include l, c, r, cl and cc.\MessageBreak
      Type X <return> to quit, fix the typo, and rerun LaTeX.}} }

%    \end{macrocode}
% \end{macro}
% \begin{macro}{\rubricafterspace}
%    \begin{macrocode}
\newlength\rubricafterspace
\setlength\rubricafterspace{0pt}

%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@rubricmark}
%   \mbox{}\MacroTopsep=0pt
% \begin{environment}{rubric}
%   \marg{title}\\
%   Marking commands don't seem to work in longtable headings. So the rubric
%   mark is issued just after it.\\
%   As of version 1.7, |\raggedleft| and |\raggedright| are redefined in order
%   to work within individual entries. This redefinition simply consists in
%   removing the |\\| definition since it's not available anyway, and also to
%   remove the |\parskip| setting since it's |Opt| in the whole class.
%    \begin{macrocode}
\let\@rubricmark\@gobble

\newenvironment{rubric}[1]{%
  %% \begin{rubric}
  \def\raggedright{%
    \@rightskip\@flushglue\rightskip\@rightskip\leftskip\z@skip}%
  \def\raggedleft{%
    \rightskip\z@skip\leftskip\@flushglue\parfillskip\z@skip}%
  \gdef\@beforespace{0pt}%
  \gdef\@nextentry{}%
  \gdef\@previouskey{}%
  \global\let\old@newpage\newpage%
  \global\let\old@pagebreak\pagebreak%
  \global\let\old@nopagebreak\nopagebreak
  \begin{longtable}{@{}kl@{~}X@{}}
    \@rubrichead{#1}\\*[\rubricspace]
    \endfirsthead
    \@rubrichead{#1\@continuedname}\\*[\rubricspace]
    \endhead
    \noalign{\@rubricmark{#1}%
      \global\let\in@newpage\newpage%
      \global\let\in@pagebreak\pagebreak%
      \global\let\in@nopagebreak\nopagebreak%
      \gdef\newpage{\@nextentry\noalign{\gdef\@nextentry{}}\in@newpage}
      \gdef\pagebreak{\@nextentry\noalign{\gdef\@nextentry{}}\in@pagebreak}
      \gdef\nopagebreak{\@nextentry\noalign{\gdef\@nextentry{}}\in@nopagebreak}}}{%
    %% \end{rubric}
    \@nextentry
  \end{longtable}\par\vspace\rubricafterspace
  \global\let\newpage\old@newpage%
  \global\let\pagebreak\old@pagebreak%
  \global\let\nopagebreak\old@nopagebreak}

%    \end{macrocode}
% \end{environment}
% \end{macro}
% \begin{macro}{\continuedname}
%   \marg{continuation text}
%    \begin{macrocode}
\newcommand\continuedname[1]{\gdef\@continuedname{#1}}

%    \end{macrocode}
% \end{macro}
%
% \subsubsection{Skeleton File}
% \paragraph{Utilities}
% \begin{macro}{\today}
%    \begin{macrocode}
\def\today{\ifcase\month\or
  January\or February\or March\or April\or May\or June\or
  July\or August\or September\or October\or November\or December\fi
  \space\number\day, \number\year}

%    \end{macrocode}
% \end{macro}
%
% \paragraph{Headers}
% \begin{macro}{\header@scale}
%   \mbox{}\MacroTopsep=0pt
% \begin{macro}{\headerscale}
%   \marg{scale}
%    \begin{macrocode}
\def\header@scale{.5}
\newcommand\headerscale[1]{\gdef\header@scale{#1}}
\@onlypreamble\headerscale

%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\headerspace}
%    \begin{macrocode}
\newlength\headerspace
\setlength\headerspace{10pt}

%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@leftheader}
%   \mbox{}\MacroTopsep=0pt
% \begin{macro}{\leftheader}
%   \marg{contents}
% \begin{macro}{\@rightheader}
%   \mbox{}
% \begin{macro}{\rightheader}
%   \marg{contents}\\
%   If the user calls |\makeheaders| without specifying headers first, an
%   error will be generated. The same applies for the title (not the
%   subtitle), but this is already managed by \LaTeX{} itself.
%    \begin{macrocode}
\def\@leftheader{%
  \ClassError{curve}{No \protect\leftheader\space given}{%
    You have called \protect\makeheaders, %
    but you didn't provide a left header.\MessageBreak
    Type X <return> to quit, add a call to \protect\lefheader\space %
    in the preamble of your CV,\MessageBreak
    and rerun LaTeX.}}
\newcommand\leftheader[1]{\gdef\@leftheader{#1}}
\@onlypreamble\leftheader

\def\@rightheader{%
  \ClassError{curve}{No \protect\rightheader\space given}{%
    You have called \protect\makeheaders, %
    but you didn't provide a right header.\MessageBreak
    Type X <return> to quit, add a call to \protect\rightheader\space %
    in the preamble of your CV,\MessageBreak
    and rerun LaTeX.}}
\newcommand\rightheader[1]{\gdef\@rightheader{#1}}
\@onlypreamble\rightheader

%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \begin{macro}{\photoscale}
%   \marg{scale}\MacroTopsep=0pt
% \begin{macro}{\photosep}
%   \marg{length}
% \begin{macro}{\photo}
%   \oarg{hpos}\marg{file}
%    \begin{macrocode}
\def\photo@scale{.1}
\newcommand\photoscale[1]{\gdef\photo@scale{#1}}
\@onlypreamble\photoscale

\newlength\photosep
\setlength\photosep{10pt}

\newcommand\photo[2][l]{%
  \RequirePackage{graphicx}
  \ifthenelse{\equal{#1}{l}}{}{%
    \ifthenelse{\equal{#1}{r}}{}{%
      \ifthenelse{\equal{#1}{c}}{}{%
        \ClassError{curve}{Invalid argument to \protect\photo}{%
          Argument 2 of \protect\photo must be `l', `r' or `c'.}}}}%
  \def\tmp@cmd{\global\let\makeheaders@}
  \expandafter\tmp@cmd\csname makeheaders@#1\endcsname
  \gdef\photo@file{#2}}
\@onlypreamble\photo

%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \begin{macro}{\photo@width}
% \begin{macro}[noindex]{\includephoto@*}
% \begin{macro}[noprint]{\includephoto@t}
% \begin{macro}[noprint]{\includephoto@c}
% \begin{macro}[noprint]{\includephoto@b}
%   These different versions of the photo inclusion command exist for proper
%   alignment of the picture itself with the left and right headers.
%    \begin{macrocode}
\newlength\photo@width

\def\includephoto@t{%
  \raisebox{.7\baselineskip-\height}{%
    \includegraphics[width=\photo@width]{\photo@file}}}

\def\includephoto@c{%
  \raisebox{-.5\height}{%
    \includegraphics[width=\photo@width]{\photo@file}}}

\def\includephoto@b{\includegraphics[width=\photo@width]{\photo@file}}

%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \begin{macro}{\leftheader@width}
%   \MacroTopsep=0pt
% \begin{macro}{\rightheader@width}
%    \begin{macrocode}
\newlength\leftheader@width
\newlength\rightheader@width

%    \end{macrocode}
% \end{macro}
% \end{macro}
% And here are the different versions of the |\makeheaders| command:
% \begin{macro}{\makeheaders@l}
%   \marg{vpos}
%    \begin{macrocode}
\def\makeheaders@l#1{%
  \setlength\photo@width{\photo@scale\textwidth} \setlength\leftheader@width{%
    (\textwidth - \photo@width - \photosep) * \real{\header@scale}}
  \setlength\rightheader@width{%
    \textwidth - \photo@width - \photosep - \leftheader@width}
  \parbox[#1]{\photo@width + \photosep}{\includephoto@\hspace\photosep}%
  \parbox[#1]{\leftheader@width}{\@leftheader}%
  \parbox[#1]{\rightheader@width}{\raggedleft\@rightheader}}

%    \end{macrocode}
% \end{macro}
% \begin{macro}{\makeheaders@c}
%   \marg{vpos}
%    \begin{macrocode}
\def\makeheaders@c#1{%
  \setlength\photo@width{\photo@scale\textwidth}
  \setlength\leftheader@width{(\textwidth - \photo@width) * \real{.5}}
  \setlength\rightheader@width{\leftheader@width}
  \parbox[#1]{\leftheader@width}{\@leftheader}%
  \parbox[#1]{\photo@width}{\includephoto@}%
  \parbox[#1]{\rightheader@width}{\raggedleft\@rightheader}}

%    \end{macrocode}
% \end{macro}
% \begin{macro}{\makeheaders@r}
%   \marg{vpos}
%    \begin{macrocode}
\def\makeheaders@r#1{%
  \setlength\photo@width{\photo@scale\textwidth}
  \setlength\leftheader@width{%
    (\textwidth - \photo@width - \photosep) * \real{\header@scale}}
  \setlength\rightheader@width{%
    \textwidth - \photo@width - \photosep - \leftheader@width}
  \parbox[#1]{\leftheader@width}{\@leftheader}%
  \parbox[#1]{\rightheader@width}{\raggedleft\@rightheader}%
  \parbox[#1]{\photo@width + \photosep}{\hspace\photosep\includephoto@}}

%    \end{macrocode}
% \end{macro}
% \begin{macro}{\makeheaders@}
%   \marg{vpos}
%    \begin{macrocode}
\def\makeheaders@#1{%
  \setlength\leftheader@width{\header@scale\textwidth}%
  \setlength\rightheader@width{\textwidth - \leftheader@width}%
  \parbox[#1]{\leftheader@width}{\@leftheader}%
  \parbox[#1]{\rightheader@width}{\raggedleft\@rightheader}}

%    \end{macrocode}
% \end{macro}
% \begin{macro}{\makeheaders}
%   \oarg{vpos}
%    \begin{macrocode}
\newcommand\makeheaders[1][c]{%
  \ifthenelse{\equal{#1}{t}}{}{%
    \ifthenelse{\equal{#1}{b}}{}{%
      \ifthenelse{\equal{#1}{c}}{}{%
        \ClassError{curve}{Invalid argument to \protect\makeheaders}{%
          Argument of \protect\makeheaders must be `t', `b' or `c'.}}}}%
  \def\tmp@cmd{\global\let\includephoto@}
  \expandafter\tmp@cmd\csname includephoto@#1\endcsname
  \makeheaders@{#1}%
  \par\vspace\headerspace}

%    \end{macrocode}
% \end{macro}
%
% \paragraph{Titles}
% \begin{macro}{\@titlefont}
%   \mbox{}\MacroTopsep=0pt
% \begin{macro}{\titlefont}
%   \marg{cmds}
%    \begin{macrocode}
\@onlypreamble\title

\def\@titlefont{\Huge\bfseries}
\newcommand\titlefont[1]{\gdef\@titlefont{#1}}
\@onlypreamble\titlefont

%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\titlespace}
%    \begin{macrocode}
\newlength\titlespace
\setlength\titlespace{0pt}

%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@subtitle}
%   \mbox{}\MacroTopsep=0pt
% \begin{macro}{\subtitle}
%   \marg{title}
%    \begin{macrocode}
\let\@subtitle\@undefined
\newcommand\subtitle[1]{\gdef\@subtitle{#1}}
\@onlypreamble\subtitle

%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\@subtitlefont}
%   \mbox{}\MacroTopsep=0pt
% \begin{macro}{\subtitlefont}
%   \marg{cmds}
%    \begin{macrocode}
\def\@subtitlefont{\huge\itshape}
\newcommand\subtitlefont[1]{\gdef\@subtitlefont{#1}}
\@onlypreamble\subtitlefont

%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}[noindex]{\@titlealignment@*}
%   \MacroTopsep=0pt
% \begin{macro}{\@title@lignment}
% \begin{macro}[noprint]{\@titlealignment@l}
% \begin{macro}[noprint]{\@titlealignment@c}
% \begin{macro}[noprint]{\@titlealignment@r}
% \begin{macro}[noprint]{\@titlealignment}
%    \begin{macrocode}
\def\@titlealignment@l{\raggedright}
\def\@titlealignment@c{\centering}
\def\@titlealignment@r{\raggedleft}

\let\@title@lignment\@titlealignment@c

%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \begin{macro}{\@titlealignment}
%   \marg{src}\marg{hpos}
%    \begin{macrocode}
\def\@titlealignment#1#2{%
  \def\@curve@temp@a{\let\@title@lignment}
  \expandafter\@curve@temp@a\csname @titlealignment@#2\endcsname
  \@ifundefined{@title@lignment}{%
    \ClassError{curve}{Invalid title alignment}{%
      You have called \expandafter\string\csname#1\endcsname\space%
      with an invalid value.%
      \MessageBreak
      Valid options include l, c and r.\MessageBreak
      Type X <return> to quit, fix the typo, and rerun LaTeX.}}
}

%    \end{macrocode}
% \end{macro}
% \begin{macro}{\titlealignment}
%   \marg{hpos}
%    \begin{macrocode}
\newcommand\titlealignment[1]{\@titlealignment{titlealignment}{#1}}

%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@@maketitle}
%   \mbox{}\MacroTopsep=0pt
% \begin{macro}{\@maketitle}
%   \oarg{hpos}
% \begin{macro}{\maketitle}
%    \begin{macrocode}
\def\@@maketitle{%
  \bgroup\trivlist\@title@lignment\item\relax {\@titlefont\@title}
  \ifx\@subtitle\@undefined\else\\\@subtitlefont\@subtitle\fi
  \endtrivlist\egroup
  \vspace\titlespace}

\def\@maketitle[#1]{\@titlealignment{maketitle}{#1}\@@maketitle}

\newcommand\maketitle{\@ifnextchar[%]
  \@maketitle\@@maketitle}

%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \paragraph{Rubric Inclusion}
% \begin{macro}{\@flavor}
%   \MacroTopsep=0pt
% \begin{option}{ask}
%    \begin{macrocode}
\let\@flavor\empty \newcommand\flavor[1]{\gdef\@flavor{#1}
  \ifx\@flavor\empty\else\edef\@flavor{.\@flavor}\fi}

\DeclareOption{ask}{%
  \typein[\@flavor]{Please specify a CV flavor (none by default):}
  \ifx\@flavor\empty\else\edef\@flavor{.\@flavor}\fi}

%    \end{macrocode}
% \end{option}
% \end{macro}
% \begin{macro}{\@curveinput}
%   \marg{file}\MacroTopsep=0pt
% \begin{macro}{\input}
%   |\input| is redefined in order to deal with flavors and the |ltx|
%   extension.
%    \begin{macrocode}
\def\@curveinput#1{%
  \IfFileExists{#1\@flavor.ltx}{\@iinput{#1\@flavor.ltx}}{%
    \IfFileExists{#1\@flavor.tex}{\@iinput{#1\@flavor.tex}}{%
      \IfFileExists{#1.ltx}{\@iinput{#1.ltx}}{%
	\IfFileExists{#1.tex}{\@iinput{#1.tex}}{%
	  \@iinput{#1}}}}}}
\renewcommand\input{\@ifnextchar\bgroup\@curveinput\@@input}

%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\makerubric}
%   \marg{name}
%    \begin{macrocode}
\newcommand\makerubric[1]{\LTXtable{\linewidth}{#1}}

%    \end{macrocode}
% \end{macro}
%
% \paragraph{Bibliography}
% In case |splitbib| is loaded, we require it to export to the sbb file. It is
% simpler to make \curve compatible with it that way.
%    \begin{macrocode}
\PassOptionsToPackage{export}{splitbib}

%    \end{macrocode}
%
% \begin{option}{openbib}
%    \begin{macrocode}
\let\newblock\empty
\DeclareOption{openbib}{\let\newblock\par}

%    \end{macrocode}
% \end{option}
% \begin{option}{revbib}
% \begin{counter}{bibcount}
% \begin{counter}{bibtotal}
% \begin{conditional}{curve@revbib}
%    \begin{macrocode}
\newcounter{bibcount}
\newcounter{bibtotal}
\newif\ifcurve@revbib\curve@revbibfalse
\AtEndDocument{
  \if@filesw
    \immediate\write\@auxout{\string\setcounter{bibtotal}{\thebibcount}}%
  \fi}
\DeclareOption{revbib}{\curve@revbibtrue}

%    \end{macrocode}
% \end{conditional}
% \end{counter}
% \end{counter}
% \end{option}
% \begin{macro}{\@listpubname}
%   \mbox{}\MacroTopsep=0pt
% \begin{macro}{\listpubname}
%   \marg{title}
%    \begin{macrocode}
\newcommand\listpubname[1]{\gdef\@listpubname{#1}}

%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\@curve@input@}
%   \marg{file}\\
%   Emulation of |\@input@| for bibliographic inclusion:
%    \begin{macrocode}
\def\@curve@input@#1{%
  \IfFileExists{#1}{\makerubric{#1}}{\typeout{No file #1.}}}

%    \end{macrocode}
% \end{macro}
% Redefine |\bibitem| and its internal implementation to behave like |\entry|.
% \begin{macro}{\@curveltx@lbibitem}
%   \oarg{label}\marg{ref}\MacroTopsep=0pt
% \begin{macro}{\@curve@lbibitem}
%   \ldots
% \begin{macro}{\@lbibitem}
%    \begin{macrocode}
\let\@curveltx@lbibitem\@lbibitem
\def\@curve@lbibitem[#1]#2{\@sentry[\@biblabel{#1}]%
  \if@filesw
    {\let\protect\noexpand%
     \immediate\write\@auxout{\string\bibcite{#2}{#1}}}%
  \fi%
  \ignorespaces}
\let\@lbibitem\@curve@lbibitem

%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \begin{macro}{\@curveltx@bibitem}
%   \marg{ref}\MacroTopsep=0pt
% \begin{macro}{\@curve@bibitem}
%   \ldots
% \begin{macro}{\@bibitem}
%    \begin{macrocode}
\let\@curveltx@bibitem\@bibitem
\def\@curve@bibitem#1{\stepcounter{bibcount}%
  \@sentry[\@biblabel{\ifcurve@revbib\thebibtotal\else\thebibcount\fi}]%
  \ifcurve@revbib\addtocounter{bibtotal}{-1}\fi%
  \if@filesw
    \immediate\write\@auxout{\string\bibcite{#1}{\thebibcount}}%
  \fi%
  \ignorespaces}
\let\@bibitem\@curve@bibitem

%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \begin{macro}{\@curveltxbibitem}
%   \MacroTopsep=0pt
% \begin{macro}{\@curvebibitem}
% \begin{macro}{\bibitem}
%    \begin{macrocode}
\let\@curveltxbibitem\bibitem
\def\@curvebibitem{%
  %% #### FIXME: Dirty code duplication from \entry.
  \@nextentry
  \noalign\bgroup\gdef\@beforespace{\subrubricbeforespace}%
  \@ifnextchar[%]
  \@lbibitem\@bibitem}
\let\bibitem\@curvebibitem

%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% Special cases:
% \begin{itemize}
% \item |bibentry| (version 1.9): restore standard definitions because
%   bibentry just inlines bibliographic contents.
%    \begin{macrocode}
\AtBeginOfFile{bibentry.sty}{
  \let\@lbibitem\@curveltx@lbibitem
  \let\@bibitem\@curveltx@bibitem
  \let\bibitem\@curveltxbibitem}

%    \end{macrocode}
% \item |splitbib| (version 1.16): restore standard definitions because ours
%   are used only as part of the |\endthebibliography| redefinition.
%    \begin{macrocode}
\AtBeginOfFile{splitbib.sty}{
  \let\@lbibitem\@curveltx@lbibitem
  \let\@bibitem\@curveltx@bibitem
  \let\bibitem\@curveltxbibitem}

%    \end{macrocode}
% \item |hyperref|: restore whatever previous behavior we had. It is arguable
%   whether we should preserve |hyperref|'s functionality, but this answer is
%   no, at least for the time being. Note that we assume that |hyperref| is
%   loaded late in the process. Also, |hyperref| does not affect |\bibitem|.
%    \begin{macrocode}
\AtBeginOfFile{hyperref.sty}{
  \let\@curveprevious@lbibitem\@lbibitem
  \let\@curveprevious@bibitem\@bibitem}
\AtEndOfFile{hyperref.sty}{
  \let\@lbibitem\@curveprevious@lbibitem
  \let\@bibitem\@curveprevious@bibitem}

%    \end{macrocode}
% \end{itemize}
% \begin{environment}{thebibliography}
%   \marg{key}\\
%   |bibentry| overrides this definition in its own group in |\BR@nobib|, but
%   this is in fact okay because it's not supposed to print anything. The same
%   goes for |splitbib| which saves this definition and restores it when it
%   actually matters.
%    \begin{macrocode}
\newenvironment{thebibliography}[1]{%
%    \end{macrocode}
% Disable the |skipsamekey| mechanism and the prefix which would get in the
% way.
%    \begin{macrocode}
  \let\@key\@alwayskey
  \def\@prefix{}
%    \end{macrocode}
% For compatibility with bibliographic packages such as |multibib|, the
% bibliography title is set (by order of priority) to either |\bibname|,
% |\refname| or |\@listpubname|.
%    \begin{macrocode}
  \begin{rubric}{\@ifundefined{bibname}{%
	\@ifundefined{refname}{\@listpubname}{\refname}}{%
	\bibname}}
  }{%
  \end{rubric}
}

%    \end{macrocode}
% \end{environment}
% \begin{macro}{\@curveltxbibliography}
%   \marg{bibs}\MacroTopsep=0pt
% \begin{macro}{\bibliography}
%   \ldots\\
%   Define |\bibliography| to issue a |\makerubric| call on the |bbl| file.
%    \begin{macrocode}
\let\@curveltxbibliography\bibliography
\def\bibliography#1{%
  \if@filesw
    \immediate\write\@auxout{\string\bibdata{#1}}%
  \fi%
  \@curve@input@{\jobname.bbl}}

%    \end{macrocode}
% \end{macro}
% \end{macro}
% Special cases:
% \begin{itemize}
% \item |multibbl| (version 1.12): merge definitions.
%    \begin{macrocode}
\AtEndOfFile{multibbl.sty}{
  \def\bibliography##1##2##3{%
    \@ifundefined{##1@auxfile}{}{%
      \expandafter\immediate\write\csname ##1@auxfile\endcsname%
      {\string\bibdata{##2}}}%
    \def\bibname{##3}%
    \def\refname{##3}%
    \@curve@input@{##1.bbl}}}

%    \end{macrocode}
% \item |splitbib|: restore original version because ours are used only as
%   part of the |\endthebibliography| redefinition.
%    \begin{macrocode}
\AtBeginOfFile{splitbib.sty}{
  \let\bibliography\@curveltxbibliography}

%    \end{macrocode}
% \end{itemize}
% Apart from that, completing |splitbib| support is a pain in the ass. We need
% to do two things. First, redefine the abominable |\NMSB@writeentry| in order
% to output a correctly typeset rubric (titles are converted to subrubrics for
% instance). Next we need to redefine |\endthebibliography| to restore our own
% definitions for |\bibitem|, |\@bibitem| and |\@lbibitem|, and make it use
% |\@curve@input@| instead of |\@input@|.
%    \begin{macrocode}
\AtEndOfFile{splitbib.sty}{
  \def\NMSB@writeentry##1##2##3##4##5,{\ifx\relax ##5\relax
    \else
      \def\NMSB@currcat{##1##2##3##4}%
      \def\NMSB@currcatlevelone{##1##2}%
      \ifx\NMSB@currcatlevelone\NMSB@prevcatlevelone\else
        \expandafter\ifx\csname NMSBtitle@\NMSB@currcatlevelone
         \endcsname\relax
        \else
          \if@filesw
            \expandafter\let\expandafter\NMSB@tempentry
              \csname NMSBtitle@\NMSB@currcatlevelone\endcsname
            \edef\NMSB@tempentry{\@backslashchar subrubric{\NMSB@tempentry}}
            \expandafter\NMSB@writecatbib\expandafter{\NMSB@tempentry}
            \expandafter\ifx\csname
             NMSBcomment@\NMSB@currcatlevelone\endcsname\relax
            \else
              \immediate\write\NMSB@catbib{\string\vskip2ex^^J%
                \string\hspace{-\leftmargin}\string\relax^^J%
                \string\begin{minipage}{\textwidth}^^J%
                \string\addtolength\string\parindent{20pt}^^J%
                \string\noindent}
              \expandafter\let\expandafter\NMSB@tempentry
                \csname NMSBcomment@\NMSB@currcatlevelone\endcsname
              \expandafter\NMSB@writecatbib\expandafter{%
                \NMSB@tempentry^^J}%
              \immediate\write\NMSB@catbib{\string\end{minipage}^^J%
                \string\par\string\addpenalty{\NMSB@penalty}
                \string\vskip2ex}
            \fi
          \fi
        \fi
        \xdef\NMSB@prevcatlevelone{##1##2}%
        \ifnum\theSBresetdepth>0\relax
          \setcounter{\@listctr}{0}%
        \fi
        \expandafter\ifx\csname NMSBprefix@\NMSB@prevcatlevelone
         \endcsname\relax
          \NMSB@currprefixlevelonetok{\relax}%
        \else
          \expandafter\expandafter\expandafter\NMSB@currprefixlevelonetok
          \expandafter\expandafter\expandafter{%
             \csname NMSBprefix@\NMSB@prevcatlevelone\endcsname}%
        \fi
      \fi
      \ifx\NMSB@currcat\NMSB@prevcat\else
        \ifnum\NMSB@currcat=9999\else
          \expandafter\ifx\csname NMSBtitle@\NMSB@currcat\endcsname
           \relax
          \else
            \if@filesw
              \immediate\write\NMSB@catbib{%
                \string\par\string\addpenalty{-\NMSB@halfpenalty}%
                \string\relax^^J%
                \string\item[]%
                \string\SBsubtitle}%
              \expandafter\let\expandafter\NMSB@tempentrya
                \csname NMSBtitle@\NMSB@currcatlevelone\endcsname
              \expandafter\let\expandafter\NMSB@tempentryb
                \csname NMSBtitle@\NMSB@currcat\endcsname
              \expandafter\NMSB@writecatbib\expandafter{%
                \expandafter{\NMSB@tempentrya}}
              \expandafter\NMSB@writecatbib\expandafter{%
                \expandafter{\NMSB@tempentryb}}
              \immediate\write\NMSB@catbib{\string\relax^^J%
                \string\par\string\addpenalty{\NMSB@penalty}%
                \string\relax}%
              \expandafter\ifx\csname
               NMSBcomment@\NMSB@currcat\endcsname\relax
              \else
                \immediate\write\NMSB@catbib{\string\vskip2ex^^J%
                  \string\hspace{-\leftmargin}\string\relax^^J%
                  \string\begin{minipage}{\textwidth}^^J%
                  \string\addtolength\string\parindent{20pt}^^J%
                  \string\noindent}
                \expandafter\let\expandafter\NMSB@tempentry
                  \csname NMSBcomment@\NMSB@currcat\endcsname
                \expandafter\NMSB@writecatbib\expandafter{%
                  \NMSB@tempentry^^J}%
                \immediate\write\NMSB@catbib{\string\end{minipage}^^J%
                  \string\par\string\addpenalty{\NMSB@penalty}%
                  \string\vskip2ex}
              \fi
            \fi
          \fi
        \fi
        \xdef\NMSB@prevcat{##1##2##3##4}%
        \ifnum\theSBresetdepth>1\relax
          \setcounter{\@listctr}{0}%
        \fi
        \expandafter\ifx\csname NMSBprefix@\NMSB@currcat\endcsname\relax
          \expandafter\NMSB@currprefixtok\expandafter{%
             \the\NMSB@currprefixlevelonetok}%
        \else
          \expandafter\expandafter\expandafter\NMSB@currprefixtok
          \expandafter\expandafter\expandafter{%
            \csname NMSBprefix@\NMSB@currcat\endcsname}
        \fi
      \fi
      \expandafter\ifx\csname NMSBlabel@##5\endcsname\relax
        \if@filesw
          \stepcounter\@listctr
          \expandafter\ifx\expandafter\relax\the\NMSB@currprefixtok
            \def\NMSB@tempentry{}%
          \else
            \expandafter\expandafter\expandafter\def
            \expandafter\expandafter\expandafter\NMSB@tempentry
            \expandafter\expandafter\expandafter{%
              \expandafter\the\expandafter\NMSB@currprefixtok
                      \the\value{\@listctr}}%
            \edef\NMSB@tempentry{[\NMSB@tempentry]}
          \fi
          \edef\NMSB@tempentry{%
            \@backslashchar bibitem%
            \NMSB@tempentry{\csname NMSBkey@##5\endcsname}}%
          \expandafter\NMSB@writecatbib\expandafter{%
            \NMSB@tempentry}
          \expandafter\let\expandafter\NMSB@tempentry
            \csname NMSBentry@##5\endcsname%
          \expandafter\NMSB@writecatbib\expandafter{%
            \NMSB@tempentry}
        \fi
        \setbox\@tempboxa=\hbox{\the\NMSB@currprefixtok\the\value{\@listctr}}%
        \ifdim\NMSB@reallylongest<\wd\@tempboxa
          \setlength{\NMSB@reallylongest}{\wd\@tempboxa}%
          \xdef\NMSB@reallylongestlabel{%
            \expandafter\ifx\expandafter\relax\the\NMSB@currprefixtok
    \else\the\NMSB@currprefixtok\fi\the\value{\@listctr}}%
        \fi
      \else
        \if@filesw
          \immediate\write\NMSB@catbib{%
            \string\bibitem}
          \expandafter\let\expandafter\NMSB@tempentry
            \csname NMSBlabel@##5\endcsname
          \expandafter\NMSB@writecatbib\expandafter{%
            \expandafter[\NMSB@tempentry]}%
          \immediate\write\NMSB@catbib{%
            {\csname NMSBkey@##5\endcsname}}%
          \expandafter\let\expandafter\NMSB@tempentry
            \csname NMSBentry@##5\endcsname%
          \expandafter\NMSB@writecatbib\expandafter{%
            \NMSB@tempentry^^J^^J}
        \fi
        \setbox\@tempboxa=\hbox{\csname NMSBlabel@##5\endcsname}%
        \ifdim\NMSB@reallylongest<\wd\@tempboxa
          \setlength{\NMSB@reallylongest}{\wd\@tempboxa}%
          \expandafter\let\expandafter\NMSB@reallylongestlabel\csname
    NMSBlabel@##5\endcsname
        \fi
      \fi
    \fi
  }
  \def\endthebibliography{%
    \usecounter{enumiv}%
    \edef\NMSB@sortedvaluelist{%
      \expandafter\NMSBsortlt\expandafter{\NMSB@valuelist}}%
    \expandafter\NMSB@writelist\expandafter{\NMSB@sortedvaluelist}%
    \if@filesw
      \immediate\write\NMSB@catbib{%
        \string\end{thebibliography}}
      \immediate\closeout\NMSB@catbib
    \fi
    \begingroup
      \ifNMSB@newchap\else
        \@ifundefined{chapter}{\def\section####1####2{}}{%
          \def\chapter####1####2{}}%
      \fi
      \let\thebibliography\@NMSBorig@thebibliography
      \let\endthebibliography\@NMSBorig@endthebibliography
      \let\bibitem\@curvebibitem
      \let\@lbibitem\@curve@lbibitem
      \let\@bibitem\@curve@bibitem
      \@curve@input@{\jobname.sbb}
    \endgroup
    \ifx\NMSB@missingcat\NMSB@empty\else
      \expandafter\NMSB@warnnocateg\NMSB@missingcat\end
    \fi
    \ifNMSB@strict
      \ifx\NMSB@doublecat\NMSB@empty\else
        \expandafter\NMSB@warndblcateg\NMSB@doublecat\end
      \fi
    \fi
    \ifdim\NMSB@reallylongest=\NMSB@longest\relax\else
      \NMSB@warnwronglongest
    \fi}}

%    \end{macrocode}
%
% \subsubsection{Language Processing}
% \begin{lang}{english}
%   \MacroTopsep=0pt
% \begin{lang}{french}
% \begin{lang}{francais}
% \begin{lang}{spanish}
% \begin{lang}{portuges}
% \begin{lang}{portugese}
% \begin{lang}{brazil}
% \begin{lang}{brazilian}
% \begin{lang}{italian}
% \begin{lang}{german}
% \begin{lang}{ngerman}
% \begin{lang}{dutch}
% \begin{lang}{danish}
% \begin{lang}{swedish}
% \begin{lang}{polish}
%    \begin{macrocode}
\DeclareOption{english}{%
  \continuedname{~(continued)}
  \listpubname{List of Publications}}
\DeclareOption{french}{%
  \continuedname{~(suite)}
  \listpubname{Liste des Publications}}
\DeclareOption{francais}{%
  \ExecuteOptions{french}}
\DeclareOption{spanish}{%
  \continuedname{~(contin\'ua)}
  \listpubname{Lista de Publicaciones}}
\DeclareOption{portuges}{%
  \continuedname{~(continua\c c\~ao)}
  \listpubname{Publica\c c\~oes}}
\DeclareOption{portuguese}{%
  \ExecuteOptions{portuges}}
\DeclareOption{brazil}{%
  \ExecuteOptions{portuges}}
\DeclareOption{brazilian}{%
  \ExecuteOptions{portuges}}
\DeclareOption{italian}{%
  \continuedname{~(continua)}
  \listpubname{Pubblicazioni}}
\DeclareOption{german}{%
  \continuedname{~(fortgesetzt)}
  \listpubname{Verzeichnis der Ver\"offentlichungen}}
\DeclareOption{ngerman}{%
  \ExecuteOptions{german}}
\DeclareOption{dutch}{%
  \continuedname{~(vervolg)}
  \listpubname{Publicaties}}
\DeclareOption{danish}{%
  \continuedname{~(fortsat)}
  \listpubname{Udgivelser}}
\DeclareOption{swedish}{%
 \continuedname{~(forts.)}
 \listpubname{Publikationer}}
\DeclareOption{polish}{
  \continuedname{~(kontynuacja)}
  \listpubname{Publikacje}}

%    \end{macrocode}
% \end{lang}
% \end{lang}
% \end{lang}
% \end{lang}
% \end{lang}
% \end{lang}
% \end{lang}
% \end{lang}
% \end{lang}
% \end{lang}
% \end{lang}
% \end{lang}
% \end{lang}
% \end{lang}
% \end{lang}
%
% \subsubsection{Standard Class Processing}
% \begin{option}[noindex]{*paper}
% \begin{option}{landscape}
% \begin{option}[noprint]{a4paper}
% \begin{option}[noprint]{a5paper}
% \begin{option}[noprint]{b5paper}
% \begin{option}[noprint]{letterpaper}
% \begin{option}[noprint]{legalpaper}
% \begin{option}[noprint]{executivepaper}
%    \begin{macrocode}
\DeclareOption{a4paper}{
  \setlength\paperheight{297mm}
  \setlength\paperwidth{210mm}}
\DeclareOption{a5paper}{
  \setlength\paperheight{210mm}
  \setlength\paperwidth{148mm}}
\DeclareOption{b5paper}{
  \setlength\paperheight{250mm}
  \setlength\paperwidth{176mm}}
\DeclareOption{letterpaper}{
  \setlength\paperheight{11in}
  \setlength\paperwidth{8.5in}}
\DeclareOption{legalpaper}{
  \setlength\paperheight{14in}
  \setlength\paperwidth{8.5in}}
\DeclareOption{executivepaper}{
  \setlength\paperheight{10.5in}
  \setlength\paperwidth{7.25in}}
\DeclareOption{landscape}{
  \setlength\@tempdima{\paperheight}
  \setlength\paperheight{\paperwidth}
  \setlength\paperwidth{\@tempdima}}

%    \end{macrocode}
% \end{option}
% \end{option}
% \end{option}
% \end{option}
% \end{option}
% \end{option}
% \end{option}
% \end{option}
% \begin{option}{10pt}
% \begin{option}{11pt}
% \begin{option}{12pt}
%    \begin{macrocode}
\DeclareOption{10pt}{\def\@ptsize{0}}
\DeclareOption{11pt}{\def\@ptsize{1}}
\DeclareOption{12pt}{\def\@ptsize{2}}

%    \end{macrocode}
% \end{option}
% \end{option}
% \end{option}
% \begin{option}{oneside}
% \begin{option}{twoside}
%    \begin{macrocode}
\DeclareOption{oneside}{\@twosidefalse\@mparswitchfalse}
\DeclareOption{twoside}{\@twosidetrue\@mparswitchtrue}

%    \end{macrocode}
% \end{option}
% \end{option}
% \begin{option}{final}
% \begin{option}{draft}
%    \begin{macrocode}
\DeclareOption{draft}{\setlength\overfullrule{5pt}}
\DeclareOption{final}{%
  \setlength\overfullrule{0pt}
  \setlongtables}

%    \end{macrocode}
% \end{option}
% \end{option}
%    \begin{macrocode}
\ExecuteOptions{english,letterpaper,10pt,oneside,final}
\ProcessOptions

\input{size1\@ptsize.clo}
\setlength\parindent{0pt}
\setlength\parskip{0pt}
\setlength\tabcolsep{10pt}
\setlength\arrayrulewidth{.4\p@}
\setlength\leftmargini{2.5em}
\leftmargin\leftmargini
\setlength\leftmarginii{2.2em}
\setlength\leftmarginiii{1.87em}
\setlength\leftmarginiv{1.7em}
\setlength\leftmarginv{1em}
\setlength\leftmarginvi{1em}
\setlength\labelsep{.5em}
\setlength\labelwidth{\leftmargini}
\addtolength\labelwidth{-\labelsep}
\@beginparpenalty -\@lowpenalty
\@endparpenalty   -\@lowpenalty
\@itempenalty     -\@lowpenalty
\renewcommand\theenumi{\@arabic\c@enumi}
\renewcommand\theenumii{\@alph\c@enumii}
\renewcommand\theenumiii{\@roman\c@enumiii}
\renewcommand\theenumiv{\@Alph\c@enumiv}
\newcommand\labelenumi{\theenumi.}
\newcommand\labelenumii{(\theenumii)}
\newcommand\labelenumiii{\theenumiii.}
\newcommand\labelenumiv{\theenumiv.}
\renewcommand\p@enumii{\theenumi}
\renewcommand\p@enumiii{\theenumi(\theenumii)}
\renewcommand\p@enumiv{\p@enumiii\theenumiii}
\newcommand\labelitemi{\textbullet}
\newcommand\labelitemii{\normalfont\bfseries \textendash}
\newcommand\labelitemiii{\textasteriskcentered}
\newcommand\labelitemiv{\textperiodcentered}
\raggedbottom
\onecolumn
\pagestyle{empty}
\pagenumbering{arabic}

\newcommand\@makefntext[1]{\noindent\hb@xt@1em{\hss\@makefnmark}#1}

\if@twoside
  \def\ps@headings{%
    \let\@oddfoot\@empty\let\@evenfoot\@empty
    \def\@evenhead{\thepage\hfil\slshape\leftmark}%
    \def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
    \let\@mkboth\markboth
    \def\@rubricmark##1{\markboth{\MakeUppercase{##1}}{}}%
    \def\@subrubricmark##1{\markright{##1}}%
  }
\else
  \def\ps@headings{%
    \let\@oddfoot\@empty
    \def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
    \let\@mkboth\markboth
    \def\@rubricmark##1{\markright{\MakeUppercase{##1}}}%
  }
\fi
\def\ps@myheadings{%
  \let\@oddfoot\@empty\let\@evenfoot\@empty
  \def\@evenhead{\thepage\hfil\slshape\leftmark}%
  \def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
  \let\@mkboth\@gobbletwo
  \let\@rubricmark\@gobble
  \let\@subrubricmark\@gobble
}

\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}

%</curve>
%    \end{macrocode}
% ^^A \PrintChanges
% \makeatletter{\let\markboth\@gobbletwo\PrintIndex}\makeatother
% \Finale
%
% ^^A Local variables:
% ^^A eval : (add-hook 'TeX-update-style-hook (lambda () (doxitems "option" "counter" "length" "lang" "if")) nil t)
% ^^A End:
% ^^A curve.dtx ends here.
