CV/curve.dtx

1548 lines
64 KiB
TeX

% \iffalse -*- mode: LaTeX -*-
%
% 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 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: Mon Feb 25 17:55:12 2008
%
% 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{1202}
%% \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 \~}
%
% \newcommand\version{1.15}
% \newcommand\releasedate{2008/02/25}
% \newcommand\packagecopyright{Copyright \copyright{} 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Didier Verna}
% \newcommand\auctex{AUC-\TeX}
% \newcommand\cv{\textsc{CV}}
% \MakeShortVerb{\|}
% \date{\today}
% \title{\curve{} -- a \LaTeXe{} class package for making \textbf{Cur}ricula
% \textbf{V}ita\textbf{e}.\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{Getting \curve}
% \curve{} can be obtained from any \textsc{ctan} archive, in the
% \texttt{macros/latex/contrib} subdirectory. You can also download it
% directly from my website (online documentation available there), at the
% \textsc{url} above. Please follow the links on the left menu.
%
% If you are a Debian unstable user (unstable referring to Debian, not you),
% unofficial source and i386 packages are available (thanks to Geoffroy
% Fouquier for providing this facility). The package name is \texttt{curve}.
% Here's the \texttt{source.list} entry to use:
% \begin{verbatim}
% deb http://www.lrde.epita.fr/debian/ unstable/i386/
% deb-src http://www.lrde.epita.fr/debian/ sid/source/
% \end{verbatim}
%
% For installation instructions, please read the \texttt{README} file included
% in the distribution.
%
% \section{Frequently Asked Questions}
% If this is your first time with \curve, you might want to skip this section.
% Otherwise, please read on, especially before asking me by email\ldots
%
% \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}
%
% \section{Overview}
% The \curve{} package provides you with a document class for writing
% curricula vitae. 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 for 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 hackery 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.
% 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. 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.
% \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 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.\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. 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 \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. The available options are described
% along the text, where appropriate.
%
% \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{\photo}
% 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.
% \par
% \DescribeMacro{\photoscale}\DescribeMacro{\photosep}
% \DescribeMacro{\headerscale}
% The headers' horizontal layout is further controled by three additional
% macros. 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|). 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. 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.
% \par
% 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\%.
% \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. 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{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.\par
% \DescribeMacro{\titlealignment}
% 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).\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. |\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{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.\par
% \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{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. When a rubric crosses several pages, its title is
% restated with a ``continuation'' text appended.\par
% \DescribeMacro{\rubricalignment}
% 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|).\par
% \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}.
%
% \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 |\subrubric| (see
% below) call.\par
% \DescribeMacro{\keyalignment}
% 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|).\par
% \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. Note that as of version 1.11,
% \curve{} forces the prefix to be empty in bibliographic entries (see section
% \ref{sec:biblio}).\par
% \DescribeEnv{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}).\par
%
% \subsubsection{Making ``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).\par
% \DescribeMacro{\noentry}
% 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.\par
% 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}| in all
% other rubrics.
%
% \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.\par
% \DescribeMacro{\subrubricalignment}
% 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|).\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{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}
% 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 (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.\par
% \DescribeEnv{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}
% \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.\par
% \subsubsection{Compatibility concerns}
% As of version 1.9, \curve{} is compatible with the |bibentry| package. Note
% however that there is an incompatibility between |bibentry| and |hyperref|,
% and a workaround described in the |hyperref| README file.
%
% As of version 1.12, \curve{} is compatible with the |multibbl| package.
%
% \subsection{Standard Class Features}
%
% \subsubsection{Page Size and layout}
% \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
%
% \DescribeEnv{oneside}
% \DescribeEnv{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}
% \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.
%
% \subsubsection{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 (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}
% 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.\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. 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, 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 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}\par
%
% \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.\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.
%
% \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.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{}.}
%
%
% \section{The Code}
% First, the class announcement and the initial requirements:
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{curve}[2008/02/25 v1.15
Curriculum Vitae class for LaTeX2e]
\RequirePackage{ltxtable}
\RequirePackage{ifthen}
\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}
% \begin{macrocode}
\def\@keyfont{}
\newcommand\keyfont[1]{\gdef\@keyfont{#1}}
% \end{macrocode}
% \DescribeMacro{\keyalignment}
% \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}
% \DescribeMacro{\prefix}
% \begin{macrocode}
\def\@prefix{\textbullet}
\newcommand\prefix[1]{\gdef\@prefix{#1}}
% \end{macrocode}
% \DescribeMacro{\entry}
% 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}
\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}
% \DescribeMacro{\noentry}
% 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}
%
% \subsubsection{Subrubrics}
% \DescribeMacro{\subrubricfont}
% \DescribeMacro{\subrubricbeforespace}
% \DescribeMacro{\subrubricspace}
% \begin{macrocode}
\def\@subrubricfont{\Large\itshape}
\newcommand\subrubricfont[1]{\gdef\@subrubricfont{#1}}
\newlength\subrubricbeforespace
\setlength\subrubricbeforespace{20pt}
\newlength\subrubricspace
\setlength\subrubricspace{5pt}
% \end{macrocode}
% \DescribeMacro{\subrubricalignment}
% \DescribeMacro{\subrubric}
% 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}
% 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}
\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
\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.}}
}
\newcommand\subrubric[1]{%
\@nextentry
\noalign{\gdef\@nextentry{}}%
\@subrubric{#1}\\*[\subrubricspace]\par}
% \end{macrocode}
% \subsubsection{Rubrics}
% The |\@almosttextwidth| length remains only for backward compatibility. It
% is not used anymore.
% \DescribeMacro{\rubricfont}
% \DescribeMacro{\rubricspace}
% \begin{macrocode}
\newlength{\@almosttextwidth}
\AtBeginDocument{\setlength\@almosttextwidth{\textwidth-\hfuzz}}
\def\@rubricfont{\Large\bfseries}
\newcommand\rubricfont[1]{\gdef\@rubricfont{#1}}
\newlength\rubricspace
\setlength\rubricspace{10pt}
% \end{macrocode}
% \DescribeMacro{\rubricalignment}
% \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
\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}
% \DescribeMacro{\rubricafterspace}
% \begin{macrocode}
\newlength\rubricafterspace
\setlength\rubricafterspace{0pt}
% \end{macrocode}
% \DescribeEnv{rubric}
% Marking commands don't seem to work in longtable headings. So the rubric
% mark is issued just after it.\par
% 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}
% \DescribeMacro{\continuedname}
% \begin{macrocode}
\newcommand\continuedname[1]{\gdef\@continuedname{#1}}
% \end{macrocode}
%
% \subsection{The Skeleton File}
%
% \subsubsection{Utilities}
% \DescribeMacro{\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}
% \subsubsection{Headers}
% \DescribeMacro{\headerscale}
% \DescribeMacro{\headerspace}
% \begin{macrocode}
\def\header@scale{.5}
\newcommand\headerscale[1]{\gdef\header@scale{#1}}
\@onlypreamble\headerscale
\newlength\headerspace
\setlength\headerspace{10pt}
% \end{macrocode}
% \DescribeMacro{\leftheader}
% \DescribeMacro{\rightheader}
% 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}
% \DescribeMacro{\photoscale}
% \DescribeMacro{\photosep}
% \DescribeMacro{\photo}
% \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}
% \DescribeMacro{\makeheaders}
% 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}
% And here are the different versions of the |\makeheaders| command:
% \begin{macrocode}
\newlength\leftheader@width
\newlength\rightheader@width
\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}}
\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}}
\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@}}
\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}}
\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}
% \subsubsection{Titles}
% \DescribeMacro{\titlefont}
% \DescribeMacro{\titlespace}
% \begin{macrocode}
\@onlypreamble\title
\def\@titlefont{\Huge\bfseries}
\newcommand\titlefont[1]{\gdef\@titlefont{#1}}
\@onlypreamble\titlefont
\newlength\titlespace
\setlength\titlespace{0pt}
% \end{macrocode}
% \DescribeMacro{\subtitle}
% \DescribeMacro{\subtitlefont}
% \begin{macrocode}
\let\@subtitle\@undefined
\newcommand\subtitle[1]{\gdef\@subtitle{#1}}
\@onlypreamble\subtitle
\def\@subtitlefont{\huge\itshape}
\newcommand\subtitlefont[1]{\gdef\@subtitlefont{#1}}
\@onlypreamble\subtitlefont
% \end{macrocode}
% \DescribeMacro{\titlealignment}
% \begin{macrocode}
\def\@titlealignment@l{\raggedright}
\def\@titlealignment@c{\centering}
\def\@titlealignment@r{\raggedleft}
\let\@title@lignment\@titlealignment@c
\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.}}
}
\newcommand\titlealignment[1]{\@titlealignment{titlealignment}{#1}}
% \end{macrocode}
% \DescribeMacro{\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}
% \subsubsection{Rubric Inclusion}
% \DescribeMacro{\flavor}
% \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}
% |\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}
% \DescribeMacro{\makerubric}
% \begin{macrocode}
\newcommand\makerubric[1]{\LTXtable{\linewidth}{#1}}
% \end{macrocode}
% \subsubsection{Bibliography}
% \begin{macrocode}
\let\newblock\par
\newcounter{bibcount}
\newcounter{bibtotal}
\newif\ifcurve@revbib\curve@revbibfalse
\DeclareOption{revbib}{\curve@revbibtrue}
% \end{macrocode}
% \DescribeMacro{\bibliography}
% Define |\bibliography| to issue a |\makerubric| call on the |bbl| file. As
% of version 1.12, handle |multibbl| syntax if the package is loaded.
% \begin{macrocode}
\AtBeginDocument{
\@ifpackageloaded{multibbl}{
%% multibbl version
\def\bibliography#1#2#3{%
\@ifundefined{#1@auxfile}{}{\expandafter\immediate%
\write\csname #1@auxfile\endcsname{\string\bibdata{#2}}}%
\def\bibname{#3}%
\def\refname{#3}%
\IfFileExists{#1.bbl}{\makerubric{#1.bbl}}{%
\typeout{No file #1.bbl.}}}
}{ %% standard version
\def\bibliography#1{%
\if@filesw
\immediate\write\@auxout{\string\bibdata{#1}}%
\fi
\IfFileExists{\jobname.bbl}{\makerubric{\jobname.bbl}}{%
\typeout{No file \jobname.bbl.}}}
}
}
% \end{macrocode}
% \DescribeMacro{\bibitem}
% Redefine |\bibitem| and its internal implementation to behave like |\entry|.
%
% Do this late to overwrite a possible |hyperref| redefinition back again (it
% is arguable whether we should preserve |hyperref| functionality or not, but
% the current answer is no).
%
% One exception: if |bibentry| is used, don't get in the way. It redefines its
% own bibliographic environment and stuff.
% \begin{macrocode}
\AtBeginDocument{
\@ifpackageloaded{bibentry}{}{
\def\@lbibitem[#1]#2{\@sentry[\@biblabel{#1}]%
\if@filesw{%
\let\protect\noexpand%
\immediate\write\@auxout{\string\bibcite{#2}{#1}}}
\fi%
\ignorespaces}
\def\@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}
\renewcommand\bibitem{%
%% #### FIXME: Dirty code duplication from \entry
\@nextentry
\noalign\bgroup\gdef\@beforespace{\subrubricbeforespace}%
\@ifnextchar[%]
\@lbibitem\@bibitem}
}
}
\AtEndDocument{%
\if@filesw%
\immediate\write\@auxout{\string\setcounter{bibtotal}{\thebibcount}}%
\fi}
% \end{macrocode}
% \DescribeMacro{\listpubname}
% \begin{macrocode}
\newcommand\listpubname[1]{\gdef\@listpubname{#1}}
% \end{macrocode}
% \DescribeEnv{thebibliography}
% Note that |bibentry| overrides this definition.
% \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}
% \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{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}
% \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{oneside}{\@twosidefalse\@mparswitchfalse}
\DeclareOption{twoside}{\@twosidetrue\@mparswitchtrue}
\DeclareOption{draft}{\setlength\overfullrule{5pt}}
\DeclareOption{final}{%
\setlength\overfullrule{0pt}
\setlongtables}
\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
}
% \end{macrocode}
% ^^A \PrintChanges
% ^^A \PrintIndex
% \Finale
%
% ^^A curve.dtx ends here.