% \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 % Maintainer: Didier Verna % 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} % % % \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\\ % || % \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\\ % ||\\ % 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 ||\\ % 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\\ % ||\\ % 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 % || % \item[v1.2] Support for standard bibliography mechanism(s)\\ % New macro |\entry*|\\ % Improvements in \auctex{} support\\ % Support for German thanks to Harald Harders ||\\ % Support for Spanish thanks to Agust\'in Mart\'in || % \item[v1.1] Support for Italian thanks to Riccardo Murri % || % \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 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\\\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 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 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 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 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 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.