%% %% This is file `curve.cls', %% generated with the docstrip utility. %% %% The original source files were: %% %% curve.dtx %% %% Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Didier Verna %% 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'. %% \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 \~} \NeedsTeXFormat{LaTeX2e} \ProvidesClass{curve}[2005/09/14 v1.10 Curriculum Vitae class for LaTeX2e] \RequirePackage{ltxtable} \RequirePackage{calc} \newif\ifstrok\strokfalse \def\strtest#1#2{% \def\@strone{#1}\def\@strtwo{#2}% \ifstrok\else\ifx\@strone\@strtwo\stroktrue\fi\fi} \gdef\@nextentry{} \def\@keyfont{} \newcommand\keyfont[1]{\gdef\@keyfont{#1}} \newcolumntype{k}{>{\@keyfont}l} \newcommand\keyalignment[1]{% \strokfalse\strtest{#1}{l}\strtest{#1}{r}\strtest{#1}{c}% \ifstrok\else% \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.}% \fi \newcolumntype{k}{>{\@keyfont}#1} } \def\@prefix{\textbullet} \newcommand\prefix[1]{\gdef\@prefix{#1}} \def\@maybekey#1{% \def\@newkey{#1}% \ifx\@previouskey\@newkey\else% #1\gdef\@previouskey{#1}% \fi} \def\@key#1{#1} \DeclareOption{skipsamekey}{\let\@key\@maybekey} \newcommand\@entry[2][]{% \gdef\@nextentry{}\egroup% end of \noalign opened in \entry. \@key{#1}&\@prefix\\} \newcommand\@sentry[1][]{% \gdef\@nextentry{\\}\egroup% end of \noalign opened in \entry. \@key{#1}&\@prefix&} \newcommand\entry{% \@nextentry \noalign\bgroup\gdef\@beforespace{-\subrubricbeforespace}% \@ifstar{\@sentry}{\@entry}} \def\@subrubricfont{\Large\itshape} \newcommand\subrubricfont[1]{\gdef\@subrubricfont{#1}} \newlength\subrubricbeforespace \setlength\subrubricbeforespace{10pt} \newlength\subrubricspace \setlength\subrubricspace{5pt} \let\@subrubricmark\@gobble \def\@@subrubric#1{% \parbox{0cm}{% \raisebox{\@beforespace}{\@subrubricfont#1}% \par\vspace\subrubricspace}% \@subrubricmark{#1}} \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}\\*} \newlength{\@almosttextwidth} \AtBeginDocument{\setlength\@almosttextwidth{\textwidth-\hfuzz}} \def\@rubricfont{\Large\bfseries} \newcommand\rubricfont[1]{\gdef\@rubricfont{#1}} \newlength\rubricspace \setlength\rubricspace{10pt} \let\@rubricmark\@gobble \def\@@rubrichead#1{\@rubricfont#1\par\vspace\rubricspace} \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.}} } \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{} \begin{longtable}{@{}kl@{~}X} \@rubrichead{#1} \endfirsthead \@rubrichead{#1\@continuedname} \endhead \noalign{\@rubricmark{#1}}}{% %% \end{rubric} \@nextentry \end{longtable}} \newcommand\continuedname[1]{\gdef\@continuedname{#1}} \def\header@scale{.5} \newcommand\headerscale[1]{\gdef\header@scale{#1}} \@onlypreamble\headerscale \newlength\headerspace \setlength\headerspace{10pt} \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 \def\photo@scale{.1} \newcommand\photoscale[1]{\gdef\photo@scale{#1}} \@onlypreamble\photoscale \newlength\photosep \setlength\photosep{10pt} \newcommand\photo[2][l]{% \RequirePackage{graphicx} \strokfalse\strtest{#1}{l}\strtest{#1}{r}\strtest{#1}{c}% \ifstrok\else\ClassError{curve}{Invalid argument to \protect\photo}{% Argument 2 of \protect\photo must be `l', `r' or `c'.}\fi \def\tmp@cmd{\global\let\makeheaders@} \expandafter\tmp@cmd\csname makeheaders@#1\endcsname \gdef\photo@file{#2}} \@onlypreamble\photo \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}} \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]{% \strokfalse\strtest{#1}{t}\strtest{#1}{b}\strtest{#1}{c}% \ifstrok\else\ClassError{curve}{Invalid argument to \protect\makeheaders}{% Argument of \protect\makeheaders must be `t', `b' or `c'.}\fi \def\tmp@cmd{\global\let\includephoto@} \expandafter\tmp@cmd\csname includephoto@#1\endcsname \makeheaders@{#1}% \par\vspace\headerspace} \@onlypreamble\title \def\@titlefont{\Huge\bfseries} \newcommand\titlefont[1]{\gdef\@titlefont{#1}} \@onlypreamble\titlefont \newlength\titlespace \setlength\titlespace{0pt} \let\@subtitle\@undefined \newcommand\subtitle[1]{\gdef\@subtitle{#1}} \@onlypreamble\subtitle \def\@subtitlefont{\huge\itshape} \newcommand\subtitlefont[1]{\gdef\@subtitlefont{#1}} \@onlypreamble\subtitlefont \newcommand\maketitle{% \begin{center} {\@titlefont\@title} \ifx\@subtitle\@undefined\else\\\@subtitlefont\@subtitle\fi \end{center} \vspace\titlespace} \let\@flavor\empty \newcommand\flavor[1]{\gdef\@flavor{#1} \ifx\@flavor\empty\else\edef\@flavor{.\@flavor}\fi} \DeclareOption{ask}{% \typein[\@flavor]{Please specify a CV flavor (none by default):} \ifx\@flavor\empty\else\edef\@flavor{.\@flavor}\fi} \def\@curveinput#1{% \IfFileExists{#1\@flavor.ltx}{\@iinput{#1\@flavor.ltx}}{% \IfFileExists{#1\@flavor.tex}{\@iinput{#1\@flavor.tex}}{% \IfFileExists{#1.ltx}{\@iinput{#1.ltx}}{% \IfFileExists{#1.tex}{\@iinput{#1.tex}}{% \@iinput{#1}}}}}} \renewcommand\input{\@ifnextchar\bgroup\@curveinput\@@input} \newcommand\makerubric[1]{\LTXtable{\@almosttextwidth}{#1}} \let\newblock\par \newcounter{bibcount} \newif\if@bibentry \AtBeginDocument{\@ifpackageloaded{bibentry}{\@bibentrytrue}{}} \def\bibliography#1{% \if@filesw \if@bibentry\global\BR@starfalse\fi \immediate\write\@auxout{\string\bibdata{#1}}% \fi \IfFileExists{\jobname.bbl}{\makerubric{\jobname.bbl}}{% \typeout{No file \jobname.bbl.}}} \newcommand\listpubname[1]{\gdef\@listpubname{#1}} \newenvironment{thebibliography}[1]{% \def\@lbibitem[##1]##2{\@sentry[\@biblabel{##1}]% \if@filesw{% \let\protect\noexpand% \immediate\write\@auxout{\string\bibcite{##2}{##1}}} \fi% \ignorespaces} \def\@bibitem##1{\@sentry[\stepcounter{bibcount}\@biblabel{\thebibcount}]% \if@filesw% \immediate\write\@auxout{\string\bibcite{##1}{\thebibcount}}% \fi% \ignorespaces} \renewcommand\bibitem{% \@nextentry \noalign\bgroup\gdef\@beforespace{-\subrubricbeforespace}% \@ifnextchar[\@lbibitem\@bibitem} \begin{rubric}{\@listpubname} }{% \end{rubric} } \DeclareOption{english}{% \continuedname{~(continued)} \listpubname{List of Publications}} \DeclareOption{french}{% \continuedname{~(suite)} \listpubname{Liste des Publications}} \DeclareOption{francais}{% \ExecuteOptions{french}} \DeclareOption{spanish}{% \continuedname{~(contin\'ua)} \listpubname{Lista de Publicaciones}} \DeclareOption{italian}{% \continuedname{~(continua)} \listpubname{Pubblicazioni}} \DeclareOption{german}{% \continuedname{~(fortgesetzt)} \listpubname{Verzeichnis der Ver\"offentlichungen}} \DeclareOption{ngerman}{% \ExecuteOptions{german}} \DeclareOption{danish}{% \continuedname{~(fortsat)} \listpubname{Udgivelser}} \DeclareOption{dutch}{% \continuedname{~(vervolg)} \listpubname{Publicaties}} \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{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@} \raggedbottom \onecolumn \pagestyle{empty} \pagenumbering{arabic} \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 } \endinput %% %% End of file `curve.cls'.