% \iffalse                                                 -*- mode: LaTeX -*-
%
% curve.dtx --- Doc file for the CurVe package (code and documentation)
%
% Copyright (C) 2000-2002 Didier Verna.
%
% PRCS: $Id: curve.dtx 1.17 Wed, 03 Apr 2002 12:59:09 +0200 didier $
%
% Author:        Didier Verna <didier@lrde.epita.fr>
% Maintainer:    Didier Verna <didier@lrde.epita.fr>
% Created:       Thu Dec 10 16:04:01 1998
% Last Revision: Mon Jan 21 17:20:40 2002
%
% 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}
\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}}}%
  }
% \OnlyDescription
% \CodelineIndex
% \RecordChanges
\begin{document}
\DocInput{curve.dtx}
\end{document}
%</driver>
%
% \fi
%
% \catcode`\�=14
% \CheckSum{425}
%% \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         \~}
%
% ^^A $Format: "% \\newcommand{\\version}{v$Version$}"$
% \newcommand{\version}{v1.2}
% ^^A $Format: "% \\newcommand{\\releasedate}{$ReleaseDate$}"$
% \newcommand{\releasedate}{2002/04/03}
% ^^A $Format: "% \\newcommand{\\packagecopyright}{$LaTeXCopyright$}"$
% \newcommand{\packagecopyright}{Copyright \copyright{} 2000-2002 Didier Verna}
% \newcommand{\auctex}{AUC-\TeX}
% \MakeShortVerb{\|}
% \date{\today}
% \title{\curve{} -- a \LaTeXe{} class package for making \textbf{Cur}riculum
% \textbf{V}ita\textbf{e}'s. \thanks{This document describes \curve{}
% \version, release date \releasedate.}}
% \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.\par
% The \curve{} package is \packagecopyright{}, and distributed under the terms
% of the LPPL license.
% \end{abstract}
%
%
% \section{Overview}
% The \curve{} package provides you with a document class for writing
% curriculum vitae's. The primary purpose of this package is to offer a set of
% predefined commands to specify the contents of your CV, while removing from
% you the burden of formatting it. This has two important consequence however:
% \curve{} will impose that you conform to its document structuring scheme,
% and will expect that you like the way it formats things :-). If you prefer
% another structure of your CV, or if you don't like the formatting
% (although it is highly configurable), then \curve{} is probably not for
% you.\par
% Once you have installed \curve{}, you might want to start with processing
% the example file \texttt{cv.tex}. 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 hacking on top of it.
% It's in French, but only the appearance is important for you\ldots. My CV
% can be found at \texttt{http://www.lrde.epita.fr/\~{}didier/perso/cv.php}.
%
% \subsection{Document Layout}
% 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. After
% these headers come an optional title and/or subtitle, which will be centered
% on the page.
% \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 (which will be centered)
% 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.
% \subsubsection{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).
% \subsubsection{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, but
% 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.\par
% This is not much of a hassle, really, and it actually made my life easier
% when I implemented the ``flavor'' mechanism described below.
% \subsubsection{The ``flavor'' Mechanism}
% 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.\par
% \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 the \texttt{ltxtable} and \texttt{calc}
% packages are required because \curve{} needs them. You don't have to call
% them explicitly though. As long as \LaTeXe{} can locate them, they will be
% used automatically.
%
% \subsection{Writing the Skeleton File}
% Say |\documentclass[|\meta{options}|]{curve}| at the beginning of your
% skeleton file in order to use \curve.
%
% \subsubsection{Making Headers}
% \DescribeMacro{\leftheader}\DescribeMacro{\rightheader}
% The |\leftheader| and |\rightheader| macros take one mandatory argument
% which defines 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.
% \par
% \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}.\par
% \DescribeMacro{\makeheaders}
% 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.
%
% \subsubsection{Making Titles}
% \DescribeMacro{\title}\DescribeMacro{\subtitle}
% 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. These titles will be centered on the page.\par
% \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}.\par
% \DescribeMacro{\titlefont}\DescribeMacro{\subtitlefont}
% 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.\par
% \DescribeMacro{\maketitle}
% 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.
%
% \subsubsection{Choosing a Flavor}
% 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}.\par
% \DescribeMacro{\flavor}
% 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.\par
% \DescribeEnv{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{Including 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.\par
% \DescribeMacro{\makerubric}
% 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.
%
% \subsection{Writing a Rubric File}
% \subsubsection{The \texttt{rubric} Environment}
% \DescribeEnv{rubric}
% 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.\par
% When a rubric crosses several pages, its title is restated with a
% ``continuation'' text appended.
%
% \DescribeMacro{\rubricfont}
% The |\rubricfont| macro takes one mandatory argument which redefines the
% font to use for rubric titles. By default, |\Large\bfseries| is used.\par
% \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}.\par
%
% \subsubsection{Making Rubric Entries}
% \DescribeMacro{\entry}
% 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.\par
% \DescribeMacro{\entry*}
% Actually, the |\entry| macro was somewhat ill-designed at 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 |\subrubrubric| (see
% below) call.
%
% \DescribeMacro{\keyfont}
% 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.\par
% \DescribeMacro{\prefix}
% 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.
%
% \subsubsection{Making Subrubrics}
% \DescribeMacro{\subrubric}
% 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. Subrubrics are aligned with the
% entries' contents.\par
% \DescribeMacro{\subrubricfont}
% The |\subrubricfont| macro takes one mandatory argument which redefines the
% font to use for the subrubrics. By default, |\Large\itshape| is used.\par
% \DescribeMacro{\subrubricspace}
% \DescribeMacro{\subrubricbeforespace}
% |\subrubricspace| controls the amount of extra vertical space to put after
% subrubrics. This is a \LaTeX{} length that defaults to \texttt{5pt}.
% |\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{10pt}.
%
% \subsection{Bibliography Support}
% Most scientists include their own list of publications in their CV. The
% first thing you can do is create your own bibliography manually, 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}
%
% Some people however have expressed the wish of having standard bibliography
% support in \curve. Version 1.2 provides that.
% \DescribeEnv{thebibliography}
% \DescribeMacro{\bibitem}
% 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. 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.\par
% \DescribeMacro{\nocite}
% \DescribeMacro{\bibliographystyle}
% \DescribeMacro{\bibliography}
% 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|. In \curve, this uses the |bbl| file
% as a rubric one.
%
% \subsection{Selecting the language}
% \DescribeEnv{english}
% \DescribeEnv{french}
% \DescribeEnv{francais}
% \DescribeEnv{spanish}
% \DescribeEnv{italian}
% \DescribeEnv{german}
% \DescribeEnv{ngerman}
% \curve{} currently supports English, French, Spanish, Italian and German.
% You can select the language you want to use by using the corresponding
% option. The \texttt{french} and \texttt{francais} options are synonyms. The
% \texttt{german} and \texttt{ngerman} options are currently equivalent.\par
% If you want a finer grain on the language-dependent parts of \curve, the
% following macros are provided.\par
% \DescribeMacro{\continuedname}
% 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.\par
% \DescribeMacro{\listpubname}
% 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.
%
% \section{Standard Class Options}
% \curve{} comes with the usual standard class options, restated below.\par
%
% \subsection{Paper Size}
% \DescribeEnv{a4paper}
% \DescribeEnv{a5paper}
% \DescribeEnv{b4paper}
% \DescribeEnv{letterpaper}
% \DescribeEnv{legalpaper}
% \DescribeEnv{executivepaper}
% \DescribeEnv{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 ?\par
%
% \subsection{Font Size}
% \DescribeEnv{10pt}
% \DescribeEnv{11pt}
% \DescribeEnv{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.
%
% \subsection{Output Mode}
% \DescribeEnv{final}
% \DescribeEnv{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, 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.
%
%
% \section{Hints, Tricks, Tips}
% Here are some tips that I use for my own CV. You might find them of some
% interest.\par
%
% \subsection{Page Geometry}
% First of all, it is common to have very thin margins in curriculum vitae's.
% \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{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}\par
%
% \subsection{Longtables}
% The \texttt{LTXtable} package on which \curve{} is based is a mix of
% \texttt{tabularx} and \texttt{longtables}. If you read the documentation of
% the later, you will discover that for table width computing reasons
% (especially when a table crosses several pages), \LaTeX{} has to be called
% twice, sometimes three times, with the last run involving a call to
% |\setlongtables|.\par
% Normally, you shouldn't have problems with \curve{} because all tables are
% set to the maximum width. However, for safety reasons (I mean, just to be
% sure\ldots), \curve{} automatically calls |\setlongtables| in \texttt{final}
% mode. If you experiment problems with the formatting, you should process
% your document once or twice in draft mode, and a second or third time in
% final mode.\par
% Ah, and also, since you're basically working in tabular environments, don't
% forget that you are not allowed to use the |\\| command\ldots
%
%
% \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.\par
% 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. Of
% course, you have to build the default version last.
%
% \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.\par
% 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.
%
%
% \section{\auctex{} support}
% \auctex{} is a powerful major mode for editing \TeX{} documents in
% \textsf{Emacs} or \textsf{XEmacs}. In particular, it provides automatic
% completion of macro names once they are known. \curve{} supports \auctex{}
% by providing a style file named \texttt{curve.el} which contains \auctex{}
% definitions for the relevant macros. This file should be installed to a
% location 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.\par
% 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.
%
%
% \section{Changes}
% \begin{itemize}
% \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 |<agusmb@netscape.net>|
% \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{}.}
%
%
% \section{The Code}
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
� $Format: "\\ProvidesClass{curve}[$ReleaseDate$ v$Version$"$
\ProvidesClass{curve}[2002/04/03 v1.2
                      Curriculum Vitae class for LaTeX2e]

\RequirePackage{ltxtable}
\RequirePackage{calc}

%    \end{macrocode}
%
% \subsection{The Rubric File}
% 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.\par
% 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}
% \subsubsection{Entries}
% \DescribeMacro{\keyfont}
% \DescribeMacro{\prefix}
% \DescribeMacro{\entry}
%    \begin{macrocode}
\def\@keyfont{}
\newcommand\keyfont[1]{\gdef\@keyfont{#1}}

\def\@prefix{\textbullet}
\newcommand\prefix[1]{\gdef\@prefix{#1}}

\newcommand\@entry[2][]{%
  \@nextentry
  \gdef\@nextentry{}%
  \gdef\@beforespace{-\subrubricbeforespace}%
  #1&\@prefix&#2\\}

\newcommand\@sentry[1][]{%
  \@nextentry
  \gdef\@nextentry{\\}%
  \gdef\@beforespace{-\subrubricbeforespace}%
  #1&\@prefix&}

\newcommand\entry{\@ifstar{\@sentry}{\@entry}}

%    \end{macrocode}
% \subsubsection{Subrubrics}
% \DescribeMacro{\subrubricfont}
% \DescribeMacro{\subrubricbeforespace}
% \DescribeMacro{\subrubricspace}
% \DescribeMacro{\subrubric}
%    \begin{macrocode}
\def\@subrubricfont{\Large\itshape}
\newcommand\subrubricfont[1]{\gdef\@subrubricfont{#1}}

\newlength\subrubricbeforespace
\setlength\subrubricbeforespace{10pt}

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

\newcommand\subrubric[1]{%
  \@nextentry
  \gdef\@nextentry{}%
  &\multicolumn{2}{l}{%
    \raisebox{\@beforespace}{\@subrubricfont#1}%
    \par\vspace{\subrubricspace}}\\}

%    \end{macrocode}
% \subsubsection{Rubrics}
% It seems that making boxes of exactly |\textwidth| inside a table row makes
% \texttt{ltxtable} think that the table width changes all the time. So let's
% use |\textwidth| slightly reduced instead.
% \DescribeMacro{\rubricfont}
% \DescribeMacro{\rubricspace}
% \DescribeMacro{\continuedname}
% \DescribeEnv{rubric}
%    \begin{macrocode}
\newlength{\@almosttextwidth}
\AtBeginDocument{\setlength\@almosttextwidth{\textwidth-\hfuzz}}

\def\@rubricfont{\Large\bfseries}
\newcommand\rubricfont[1]{\gdef\@rubricfont{#1}}

\newlength\rubricspace
\setlength\rubricspace{10pt}

\def\@rubrichead#1{%
  \multicolumn{3}{@{}c}{%
    \@rubricfont%
    \makebox[\@almosttextwidth][c]{#1}\par\vspace\rubricspace}\\}

\newcommand\continuedname[1]{\gdef\@continuedname{#1}}

\newenvironment{rubric}[1]{%
  %% \begin{rubric}
  \gdef\@beforespace{0pt}%
  \gdef\@nexentry{}%
  \begin{longtable}{@{}>{\@keyfont}ll@{~}X}
    \@rubrichead{#1}
    \endfirsthead
    \@rubrichead{#1\@continuedname}
    \endhead}{%
    %% \end{rubric}
    \@nextentry
  \end{longtable}}

%    \end{macrocode}
%
% \subsection{The Skeleton File}
%
% \subsubsection{Headers}
% 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.
% \DescribeMacro{\leftheader}
% \DescribeMacro{\rightheader}
% \DescribeMacro{\headerspace}
% \DescribeMacro{\makeheaders}
%    \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

\newlength\headerspace
\setlength\headerspace{10pt}

\newcommand\makeheaders{%
  \parbox{.5\textwidth}{\@leftheader}%
  \parbox{.5\textwidth}{\raggedleft\@rightheader}%
  \par\vspace\headerspace}

%    \end{macrocode}
% \subsubsection{Titles}
% \DescribeMacro{\titlefont}
% \DescribeMacro{\subtitle}
% \DescribeMacro{\subtitlefont}
% \DescribeMacro{\titlespace}
% \DescribeMacro{\maketitle}
%    \begin{macrocode}
\def\@titlefont{\Huge\bfseries}
\newcommand\titlefont[1]{\gdef\@titlefont{#1}}
\@onlypreamble\titlefont

\@onlypreamble\title

\let\@subtitle\@undefined
\newcommand\subtitle[1]{\gdef\@subtitle{#1}}
\@onlypreamble\subtitle

\def\@subtitlefont{\huge\itshape}
\newcommand\subtitlefont[1]{\gdef\@subtitlefont{#1}}
\@onlypreamble\subtitlefont

\newlength\titlespace
\setlength\titlespace{0pt}

\newcommand\maketitle{%
  \begin{center}
    {\@titlefont\@title}
    \ifx\@subtitle\@undefined\else\\\@subtitlefont\@subtitle\fi
  \end{center}
  \vspace\titlespace}

%    \end{macrocode}
% \subsubsection{Rubric Inclusion}
% \DescribeMacro{\input}
% \DescribeMacro{\makerubric}
%    \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}

\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}

\newcommand\makerubric[1]{\LTXtable{\textwidth}{#1}}

%    \end{macrocode}
% \subsubsection{Bibliography}
% \DescribeMacro{\listpubname}
%    \begin{macrocode}
\let\newblock\par
\newcounter{bibcount}
\def\@lbibitem[#1]#2{\entry*[\@biblabel{#1}]%
  \if@filesw{%
    \let\protect\noexpand%
    \immediate\write\@auxout{\string\bibcite{#2}{#1}}}
  \fi%
  \ignorespaces}
\def\@bibitem#1{\entry*[\stepcounter{bibcount}\@biblabel{\thebibcount}]%
  \if@filesw%
    \immediate\write\@auxout{\string\bibcite{#1}{\thebibcount}}%
  \fi%
  \ignorespaces}

\def\bibliography#1{%
  \if@filesw
    \immediate\write\@auxout{\string\bibdata{#1}}%
  \fi
  \makerubric{\jobname.bbl}}

\newcommand\listpubname[1]{\gdef\@listpubname{#1}}
\newenvironment{thebibliography}[1]{%
  \begin{rubric}{\@listpubname}
  }{%
  \end{rubric}
}

%    \end{macrocode}
%
% \subsection{Language Processing}
%    \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{italian}{%
  \continuedname{~(continua)}
  \listpubname{Pubblicazioni}}
\DeclareOption{german}{%
  \continuedname{~(fortgesetzt)}
  \listpubname{Verzeichnis der Ver\"offentlichungen}}
\DeclareOption{ngerman}{%
  \ExecuteOptions{german}}

%    \end{macrocode}
% \subsection{Standard Class Processing}
%    \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}}

\DeclareOption{10pt}{\def\@ptsize{0}}
\DeclareOption{11pt}{\def\@ptsize{1}}
\DeclareOption{12pt}{\def\@ptsize{2}}

\DeclareOption{draft}{\setlength\overfullrule{5pt}}
\DeclareOption{final}{%
  \setlength\overfullrule{0pt}
  \setlongtables}

\ExecuteOptions{letterpaper,10pt,english,final}
\ProcessOptions

\input{size1\@ptsize.clo}
\setlength\parindent{0pt}
\setlength\parskip{0pt}
\setlength\tabcolsep{10pt}
\raggedbottom
\onecolumn

%    \end{macrocode}
% ^^A \PrintChanges
% ^^A \PrintIndex
% \Finale
%
% ^^A curve.dtx ends here.
