% \iffalse % % curve.dtx --- Doc file for the CurVe package (code and documentation) % % Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Didier Verna % Copyright (C) 2008, 2010 Didier Verna % % Author: Didier Verna % Maintainer: Didier Verna % Created: Thu Dec 10 16:04:01 1998 % Last Revision: Tue Nov 30 18:37:39 2010 % % This file is part of CurVe. % % CurVe may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.1 % of this license or (at your option) any later version. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.1 or later is part of all distributions of LaTeX % version 1999/06/01 or later. % % CurVe consists of the files listed in the file `README'. % % % Commentary: % % Contents management by FCM version 0.1. % % % Code: % %<*driver> \documentclass[a4paper]{ltxdoc} \usepackage{dox}[2009/09/21] \doxitem[idxtype=env.]{Env}{environment}{environments} \doxitem[idxtype=opt.]{Option}{option}{options} \doxitem[idxtype=cnt.]{Counter}{counter}{counters} \doxitem[idxtype=lang.]{Lang}{lang}{languages} \doxitem[idxtype=cond.]{Cond}{conditional}{conditionals} \usepackage{xspace} \usepackage[T1]{fontenc} \newcommand{\curve}{% \mbox{\fontfamily{ptm}\fontseries{b}\fontshape{it}\selectfont% C% \hspace{-.3ex}\protect\raisebox{-.3ex}{\textmd{u}}% \hspace{-.1ex}\textmd{r}% \hspace{-.2ex}V% \hspace{-.6ex}\protect\raisebox{-.3ex}{\textmd{e}}}% \xspace} % #### NOTE: I don't want to \usepackage{curve} just for getting the file % information. So here's what I do: generate a header with only the % \ProvidesPackage command. Then, I \input it so that \GetFileInfo works. % However, I need to manually set the current file name and extension that % would normally be set by \RequirePackage. Also, note that the call to % \GetFileInfo below needs to use the extension of the header, that is inc % instead of sty, even the file curve.inc does not really exist. \makeatletter \def\@currname{curve} \def\@currext{inc} \makeatother \input{header.inc} % \OnlyDescription \CodelineIndex % \RecordChanges \setcounter{secnumdepth}{4} \begin{document} \DocInput{curve.dtx} \end{document} % % % \fi % % \catcode`\¡=14 % \CheckSum{1830} % \GetFileInfo{curve.inc} %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z %% Digits \0\1\2\3\4\5\6\7\8\9 %% Exclamation \! Double quote \" Hash (number) \# %% Dollar \$ Percent \% Ampersand \& %% Acute accent \' Left paren \( Right paren \) %% Asterisk \* Plus \+ Comma \, %% Minus \- Point \. Solidus \/ %% Colon \: Semicolon \; Less than \< %% Equals \= Greater than \> Question mark \? %% Commercial at \@ Left bracket \[ Backslash \\ %% Right bracket \] Circumflex \^ Underscore \_ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} % % \MakeShortVerb{\|} % % \makeatletter % \def\ps@mystyle{ % \def\@oddfoot{\hfil\thepage\hfil} % \def\@evenfoot{\hfil\thepage\hfil} % \def\@evenhead{\hfil\slshape\leftmark} % \def\@oddhead{\slshape\rightmark\hfil}} % \renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}{% % -3.25ex\@plus -1ex \@minus -.2ex}{% % 1.5ex \@plus .2ex}{% % \normalfont\normalsize\bfseries}} % \makeatother % % \newcommand\packagecopyright{Copyright \copyright{} 2000, 2001, 2002, 2003, % 2004, 2005, 2006, 2007, 2008, 2010 Didier Verna\xspace} % % \newcommand\emacs{\textsf{Emacs}} % \newcommand\auctex{AUC-\TeX\xspace} % \newcommand\cv{\textsc{CV}\xspace} % % \pagestyle{mystyle} % \markright{\hskip-.5\marginparwidth \curve \fileversion{} (\filedate)} % % \date{\texttt{\fileversion{} (\filedate)}} % \title{\curve{} -- a \LaTeXe{} class package for making \textbf{Cur}ricula % \textbf{V}ita\textbf{e}\footnote{\curve homepage: % \texttt{http://www.lrde.epita.fr/\~{}didier/software/latex.php\#curve}}} % \author{Didier Verna\\ % \texttt{mailto:didier@lrde.epita.fr}\\ % \texttt{http://www.lrde.epita.fr/\~{}didier}} % \maketitle % % % \begin{abstract} % \curve provides a \LaTeXe{} class that hopefully will make your life % easier when you want to write your \cv. It provides you with a set of % commands to create rubrics, entries in these rubrics etc. \curve will then % properly format your \cv for you (possibly splitting it onto multiple % pages), which is usually the most painful part of \cv writing. Another % nice feature of \curve is its ability to manage different \cv ``flavors'' % simultaneously. It is in fact often the case that you want to maintain % slightly divergent versions of your \cv at the same time, in order to % emphasize on different aspects of your background. % % The \curve package is \packagecopyright, and distributed under the terms % of the LPPL license. % \end{abstract} % % % \tableofcontents % % % \section{Installation} % \subsection{Extraction} % If you are building \curve from the tarball you need to execute the % following steps in order to extract the necessary files. \curve also % requires the \textsf{DoX} package (version 2.0, release date 2009/09/21 or % later), to build. It is not required to use the package. % \begin{verbatim} % [pdf]latex curve.ins % [pdf]latex curve.dtx % [pdf]latex curve.dtx % makeindex -s gind curve.idx % [pdf]latex curve.dtx % [pdf]latex curve.dtx % \end{verbatim} % After that, you need to install the generated documentation and style files % to a location where \LaTeX{} can find them. % % \subsection{TDS-compliant layout} % For a TDS-compliant layout, the following locations are suggested: % \begin{verbatim} % [TEXMF]/tex/latex/curve/curve.cls % [TEXMF]/doc/latex/curve/curve.[pdf|dvi] % \end{verbatim} % % \subsection{\auctex support} % \auctex is a powerful major mode for editing \TeX{} documents in \emacs. In % particular, it provides automatic completion of command names once they are % known. \curve supports \auctex by providing a style file named % \texttt{curve.el} which contains \auctex definitions for the relevant % commands. This file should be installed in a place where \auctex can find it % (usually in a subdirectory of your \LaTeX{} styles directory). Please refer % to the \auctex documentation for more information on this. % % As of version 1.2, \curve has an improved \auctex support. Most notably, the % command |M-Ret| will insert an |\entry*| macro within a |rubric| % environment. Also, the |\makerubric| macro handling now removes both the % file extension and the file flavor extension. % % \subsection{Examples} % Once you have installed \curve, you might want to start with processing the % examples in the \texttt{examples/} directory. This will give you an idea of % what a non customized \cv looks like with \curve. You can also throw an eye % to my own \cv, which is written with \curve and has some more fancy hackery % on top of it. It's in French, but only the appearance is important for you. % My \cv can be found at % \texttt{http://www.lrde.epita.fr/\~{}didier/about/cv.pdf}. % % % \section{Overview} % \subsection{Document Layout} % \subsubsection{Headers} % A \curve \cv begins with two optional headers (upper left and upper right) % in which you usually put your name, address, email, whether you're married % and so on. These headers will respectively be left and right aligned. As of % version 1.4, \curve lets you insert a small identity photo in the headers, % either on the left, on the right, or between them. % % \subsubsection{Titles} % After these headers come an optional title and/or subtitle, which can be % centered on the page, or flushed either left or right. % % \subsubsection{Rubrics} % The remaining of the document is composed of sections called ``rubrics'' in % the \curve terminology. A rubric represents a major topic that you want to % detail in your \cv. Typical rubrics are ``Education'', ``Professional % Experience'' and the like. Rubrics have a title (centered by default) and % appear under the form of properly aligned ``entries'' (see below). If a % rubric has to be split across different pages, its title will be repeated % automatically. % % \paragraph{Entries} % An entry is an item of information related to the rubric under which it % appears. An entry has a ``contents'', and an optional ``key'' under which it % is classified. For instance, under the ``Education'' rubric, you could state % that you got a Ph.D. in computer science in the year 2000. In that case, the % year would be the entry's key, and the ``Ph.D. in computer science'' part % would be the entry's contents. \curve aligns both keys and contents % together. Keys are optional in order for you to classify several entries % together (without repeating the same key over and over again). % % \paragraph{Subrubrics} % Additionally, you might want to further split your rubrics into % ``subrubrics''. For instance, in my own \cv, I have a ``Professional % Experience'' rubric, with three subrubrics: ``Teaching'', ``Research'' and % ``Development''. This can be accomplished with a special command. Subrubrics % are displayed in alignment with the entries' contents by default, but are % formatted differently so that they remain distinguishable. % % \subsection{Document Structure} % \subsubsection{Source File Splitting} % \curve is based on the \texttt{LTXtable} package by David Carlisle. I won't % go into gory details, but this has an important implication: \textbf{each % rubric must be in its own separate file}. In other words, your \cv's main % source file is really a skeleton whose major task is to include the % different rubrics from their respective source files. % % This is not much of a hassle, really, and it actually made my life easier % when I implemented the ``flavor'' mechanism described below. % % \subsubsection{Flavors} % It is often desirable to maintain several slightly divergent versions of % one's \cv at the same time. For instance, when I was looking for a job some % time ago, I had a version of my \cv emphasizing on Artificial Intelligence, % and another emphasizing on Distributed Virtual Reality. Only the title and % some entries in the ``Professional Experience'' rubric were a bit different; % the main skeleton basically remained the same. % % \curve provides an easy-to-use mechanism for maintaining different % ``flavors'' of your \cv at the same time. You basically write different % versions of (some of) your rubrics in different files, tell \curve which % flavor you want to format (\curve can even ask you which one to use % directly) and that's it. \curve will use the global skeleton, and whenever % it finds a rubric file specialized for that particular flavor, it will use % it. Otherwise, it will simply fall back to the default one (no particular % flavor). % % % \section{Using \curve} % First of all, please note that \curve requires the presence of % \texttt{ltxtable}, \texttt{ifthen}, \texttt{calc} and \texttt{filehook}. If % you're using the identity photo feature, the \texttt{graphicx} package is % also needed. You don't have to load them explicitly though. As long as % \LaTeX{} can locate them, they will be used automatically. % % \subsection{Skeleton File} % Say |\documentclass[|\meta{options}|]{curve}| at the beginning of your % skeleton file in order to use \curve. The available options are described % along the text, where appropriate. % % \subsubsection{Headers} % \paragraph{Header Components} % \DescribeMacro{\leftheader} % \marg{contents}\\ % \DescribeMacro{\rightheader} % \ldots\\ % The |\leftheader| and |\rightheader| macros define respectively the contents % of the upper left and upper right headers. They can be used in the % document's preamble only. The headers will respectively be flushed to the % left and to the right. % % \noindent\DescribeMacro{\photo}\oarg{hpos}\marg{file}\\ % If you want to insert a small identity photo into the header part, you can % use the |\photo| macro (available since version 1.4). It takes a mandatory % argument in which you pass the image file name, as you would to % |\includegraphics|. This macro also takes an optional argument which lets % you specify the horizontal position of the photo: the values can be % \texttt{l} (the default), \texttt{c} or \texttt{r} meaning that the photo % will appear on the left, center, or right. % % \paragraph{Header Layout} % The headers' horizontal layout is further controled by three additional % macros. % % \noindent\DescribeMacro{\photoscale}\marg{scale}\\ % The |\photoscale| macro specifies the amount of text width that the photo % should occupy. This should be a number between 0 and 1. By default, % 0.1 is used (meaning 10\% of |\textwidth|).\\ % \DescribeMacro{\photosep} The |\photosep| macro is a \LaTeX{} length that % specifies the space to leave between the side of the photo and the next % headers's text. This is used only % when the photo is on the left or right. By default, |10pt| is used.\\ % \DescribeMacro{\headerscale}\marg{scale}\\ % Finally, |\headerscale| specifies the proportion of the \emph{remaining} % space that the \emph{left} textual header should occupy. It works like % |\photoscale| and amounts to 0.5 by default. % % Let me take an example to make this clearer. Suppose you have a % |\photoscale| of 0.1 and a |\photosep| of \texttt{10pt}. The % \emph{remaining} space, that is, the space occupied by the textual headers, % amounts to 90\% of the text width, minus 10 points. If you then specify a % |\headerscale| of 0.6, then the left header will take 60\% of that remaining % space, and the right one the other 40\%. % % \noindent\DescribeMacro{\headerspace} % |\headerspace| is the amount of extra vertical space to put after the % headers. This is a \LaTeX{} length that defaults to \texttt{10pt}. % % \paragraph{Making Headers} % \DescribeMacro{\makeheaders}\oarg{vpos}\\ % If you have defined headers, make them appear by calling |\makeheaders| just % after the beginning of your document. Note that calling this macro assumes % that you have previously defined both headers (possibly empty, though). % Otherwise, an error will be signaled. As of version 1.4, the |\makeheaders| % command accepts an optional argument that controls the vertical alignment. % When given, this argument must be either |t| (for top), |b| (for bottom) or % |c| (for center; the default). % % \subsubsection{Titles} % \paragraph{Title Components} % \DescribeMacro{\title}\marg{text}\\ % \DescribeMacro{\subtitle}\ldots\\ % The |\title| and |\subtitle| macros take one mandatory argument which define % respectively your \cv's title and subtitle. They can be used in the % document's preamble only. % % \paragraph{Title Layout} % \DescribeMacro{\titlealignment}\marg{hpos}\\ % By default, titles are centered on the page. However, you can also have them % aligned to the left or right side of the page. To specify your preferred % title alignment, call |\titlealignment| with an argument of either % \texttt{l}, \texttt{c} or \texttt{r}, the meaning of which should be % obvious. You can also achieve the same effect by passing an optional % argument to |\maketitle| (see below).\\ % \DescribeMacro{\titlespace} % |\titlespace| is the amount of extra vertical space to put after the % title(s). This is a \LaTeX{} length that defaults to \texttt{0pt}.\\ % \DescribeMacro{\titlefont}\marg{cmds}\\ % \DescribeMacro{\subtitlefont}\ldots\\ % The |\titlefont| and |\subtitlefont| macros take one mandatory argument % which redefine the fonts to use for the title and the subtitle. They can be % used in the document's preamble only. By default, |\Huge\bfseries| and % |\Huge\itshape| are used respectively. % % \paragraph{Making Titles} % \DescribeMacro{\maketitle}\oarg{hpos}\\ % If you have defined a title (and possibly a subtitle), make it (them) appear % by calling |\maketitle| after the beginning of your document, and just after % |\makeheaders| if you happen use it. It is possible to omit the subtitle, % but if you call |\maketitle| without having defined at least a title, an % error will be signaled. |\maketitle| accepts an optional argument for % specifying the title alignment scheme. This argument is the same as in % |\titlealignment|, and takes precedence over it. % % \subsubsection{Flavors} % As you already know, each rubric must reside in its own separate file. For % instance, if you have a ``Professional Experience'' rubric, you would write % its contents into a file named \texttt{experience.tex}. The flavor mechanism % works by assigning a pre-extension to rubric file names. For instance, % suppose you want to make a special flavor of your \cv emphasizing on % ``distributed virtual reality''. You would call this flavor ``dvr'', and % write the modified ``Professional Experience'' rubric into a file named % \texttt{experience.dvr.tex}. % % \noindent\DescribeMacro{\flavor}\marg{key}\\ % The |\flavor| macro takes one mandatory argument which specifies the flavor % to use (in our example, \texttt{dvr}). Although this might be of little use, % it is possible to change the flavor anywhere, even right in the middle of % your \cv's skeleton.\\ % \DescribeOption{ask} % Instead of using the |\flavor| macro, you can make \curve ask you at % run-time which flavor to use by passing the \texttt{ask} option to it. % % \subsubsection{Rubrics} % Apart from making headers and titles, the body of your skeleton file will % usually contain nothing but directives to include the different rubrics of % your \cv. % % \noindent\DescribeMacro{\makerubric}\marg{name}\\ % To include a rubric in your document, use |\makerubric|. This macro takes % one mandatory argument which specifies the rubric to include at that point. % The argument actually corresponds to the rubric file name \textbf{without % any extension}. Continuing our previous example, you would say % |\makerubric{experience}|. First, \curve will try to find such a rubric file % specific for the current flavor in use, (e.g. \texttt{experience.dvr.tex}). % If that fails, it will fall back to a non-flavored file (here, % \texttt{experience.tex}). This allows you to specialize only the required % rubrics and use the default ones otherwise. % % \noindent\DescribeMacro{\rubricafterspace} % As of version 1.12, \curve provides a new \LaTeX{} length, % |\rubricafterspace| controlling the amount of extra vertical space to put % after a rubric (hence, before the next one). The default is \texttt{0pt}. % % \subsection{Rubric Files} % \subsubsection{The \texttt{rubric} Environment} % \DescribeEnv{rubric}\marg{title}\\ % The whole contents of a rubric file must be enclosed in a \texttt{rubric} % environment. This environment takes one mandatory argument which specifies % the rubric's title. When a rubric crosses several pages, its title is % restated with a ``continuation'' text appended. % % \noindent\DescribeMacro{\rubricalignment}\marg{hpos}\\ % As of version 1.6, the rubric titles horizontal alignment can be changed % thanks to the |\rubricalignment| macro. Possible values for its mandatory % argument are |l|, |c| and |r| (meaning left, centered, or right relative to % the whole text width), and |cl| and |cc| (meaning left or centered relative % to the entries'contents). By default, rubric titles are centered (|c|). % % \noindent\DescribeMacro{\rubricfont}\marg{cmds} % The |\rubricfont| macro takes one mandatory argument which redefines the % font to use for rubric titles. By default, |\Large\bfseries| is used. % % \noindent\DescribeMacro{\rubricspace} % |\rubricspace| is the amount of extra vertical space to put after the rubric % title. This is a \LaTeX{} length that defaults to \texttt{10pt}. % % \subsubsection{Standard Entries} % \paragraph{Creating rubric entries} % \DescribeMacro{\entry}\oarg{key}\marg{contents}\\ % You create entries in your rubrics by calling the |\entry| macro. The first % (optional) argument specifies the key, and the second (mandatory) one % specifies the contents. Both keys and contents are aligned within each % rubric. % % \noindent\DescribeMacro{\entry*}\oarg{key}\\ % Actually, the |\entry| macro was somewhat ill-designed in the first place. % The |rubric| environment pretty much behaves as an |itemize| one, hence the % idea of using an |\item|-like syntax. As of version 1.2, \curve provides an % |\entry*| macro which behaves like |\item| in lists: it takes the same first % optional argument as the non starred version, but has no other argument. The % entry's contents simply consists of the text following the macro call, up to % the next |\entry|, |\entry*| or |\subrubric| (see below) call. % % \paragraph{Entries layout} % \DescribeMacro{\keyalignment}\marg{hpos}\\ % As of version 1.7, entries'keys horizontal alignment can be changed thanks % to the |\keyalignment| macro. Possible values for its mandatory argument are % |l|, |c| and |r| (meaning left, centered, or right). By default, keys are % left aligned (|l|). % % \noindent\DescribeMacro{\keyfont}\marg{cmds}\\ % The |\keyfont| macro takes one mandatory argument which redefines the font % to use for the entries' keys. By default, the standard document font is % used. % % \noindent\DescribeMacro{\prefix}\marg{cmds}\\ % Each entry's contents can be prefixed with a visual clue (a symbol for % instance). This comes in handy to make a clear distinction between different % entries sharing the same key (which is not repeated). The |\prefix| macro % takes one mandatory argument which redefines the prefix to use. By default, % |\textbullet| is used. Note that as of version 1.11, \curve forces the % prefix to be empty in bibliographic entries (see section \ref{sec:biblio}). % % \noindent\DescribeOption{skipsamekey} % While maintaining your CV, you might end up reorganizing your entries and % even get entries with the same key. Normally, \curve blindly prints the keys % regardless of their values. If you don't want repetition, you would have to % remove keys by hand which can be cumbersome. As of version 1.10, \curve can % skip all but the first of a series of identical keys automatically, provided % that you use the |skipsamekey| option. Note that as of version 1.11, \curve % disables this mechanism in bibliography rubrics (see section % \ref{sec:biblio}). % % \subsubsection{Plain text entries} % \DescribeMacro{\text}\marg{contents}\\ % Sometimes, you may feel the need to insert plain text in the middle of a % rubric, without the fancy key/prefix formatting stuff. As of version 1.16, % \curve provides a |\text| macro for that. Plain text occupies the whole page % width. If you whish to further distinguish it from the surrounding entries, % you can use |\par| to add vertical space before and/or after the text. % % \subsubsection{Invisible entries\label{sec:noentry}} % The most frequently asked question about \curve is probably whether it is % possible to align entries across several rubrics. This is (currently) not % possible automatically because rubrics are typeset as independant tables. % However, a manual solution boils down to enlarging too narrow entries (keys, % actually). % % \noindent \DescribeMacro{\noentry}\marg{key}\\ % As of version 1.11, \curve provides a convenience macro to ease this % process: |\noentry|. This macro takes one mandatory argument, a key that % will be used in the entries alignment calculation. However, this command % will not produce any text. So if you want all your rubrics to share the same % alignment, you typically spot the longest key in your CV, and issue a % |\noentry{this long key}| call in all other rubrics. % % \subsubsection{Subrubrics} % \DescribeMacro{\subrubric}\marg{title}\\ % Within a single rubric, you can further separate entries into subrubrics. In % order to do this, the |\subrubric| macro is provided. Its mandatory argument % specifies the subrubric's title. % % \noindent\DescribeMacro{\subrubricalignment}\marg{hpos}\\ % As of version 1.6, the subrubrics horizontal alignment can be changed thanks % to the |\subrubricalignment| macro. Possible values for its mandatory % argument are |l|, |c| and |r| (meaning left, centered, or right relative to % the whole text width), and |cl| and |cc| (meaning left or centered relative % to the entries'contents). By default, subrubrics are left-aligned with the % entries' contents (|cl|). % % \noindent\DescribeMacro{\subrubricfont}\marg{cmds}\\ % The |\subrubricfont| macro takes one mandatory argument which redefines the % font to use for the subrubrics. By default, |\Large\itshape| is used. % % \noindent\DescribeMacro{\subrubricspace} % |\subrubricspace| controls the amount of extra vertical space to put after % subrubrics. This is a \LaTeX{} length that defaults to \texttt{5pt}. % \DescribeMacro{\subrubricbeforespace} % |\subrubricbeforespace| controls the amount of extra vertical space to put % \textit{before} a subrubric when there are entries above. This is a \LaTeX{} % length that defaults to \texttt{20pt}. % % \subsection{Bibliography\label{sec:biblio}} % Most scientists include their own list of publications in their \cv, so % \curve has support for different forms of bibliography. % % \subsubsection{Manual bibliography} % The first thing you can do is create your own bibliography manually (I mean, % just like an ordinary rubric), and although this may appear boring, I % actually encourage people to do so for at least three reasons (only my % opinion of course): % \begin{itemize} % \item A \cv should be strictly formatted and coherent in layout. % Bibliography is no exception to this rule. In other words, it is prettier % to have your publications formatted like the rest of your \cv. % \item Automatic bibliography generation tools produce references, which is % silly in a \cv because you don't actually reference your papers anywhere % (or do you?). So better to sort them another way, like, by year of % publication as I do in my own \cv. % \item Manually adding, like, what? Half a dozen papers a year in your % \cv is not that much of a burden after all. % \end{itemize} % % \subsubsection{The \texttt{bibliography} environment} % \DescribeEnv{thebibliography}\marg{key}\\ % \DescribeMacro{\bibitem}\oarg{label}\marg{ref}\\ % Some people however have expressed the wish of having standard bibliography % support in \curve. Version 1.2 provides that. The standard |thebibliography| % environment is now supported along with its |\bibitem| companion. The % behavior is actually that of a |rubric| environment with its |\entry*| % companion (with an empty prefix however). This fact has two implications: % firstly, the argument to the environment is unused in \curve (but remains % for compatibility with the rest of \LaTeX) because \curve itself formats the % keys and contents properly aligned. Secondly, the bibliographic environment % \textbf{must} reside in its own file, as any other rubric. Don't forget that % if you happen to write the environment manually. % % \noindent\DescribeOption{openbib} % As of version 1.16, the \texttt{openbib} option is supported. When used, % bibliographic blocks appear on different lines instead of in a single % paragraph. Note that prior to version 1.16, this was actually the default % behavior, which was not quite right (the standard classes don't openbib by % default). % % \noindent\DescribeOption{revbib} % As of version 1.14, it is possible to count bibliographic items in a reverse % order, which comes in handy when you display your publications from the most % recent to the oldest one. The \texttt{revbib} option triggers this behavior. % Note that this also works when you use \BibTeX{} (see below). % % \subsubsection{\BibTeX} % \DescribeMacro{\nocite}\marg{citations}\\ % \DescribeMacro{\bibliographystyle}\marg{style}\\ % \DescribeMacro{\bibliography}\marg{files}\\ % If you want to use \BibTeX, that's also possible of course. Do it as you % would do in a random paper. You will probably issue a |\nocite{*}| command % followed by a call to |\bibliography|. \curve uses the |bbl| file as a % rubric one. % % \subsubsection{Compatibility concerns} % \begin{itemize} % \item |bibentry|: \curve is compatible with the |bibentry| package since % version 1.9. Note that there is an incompatibility between |bibentry| and % |hyperref| with a workaround described in the |hyperref| README file. % However, \curve takes care of this problem for you so you \emph{must not} % use the workaround described there. % \item |multibbl|: \curve is compatible with the |multibbl| package since % version 1.12. % \item |splitbib|: \curve is compatible with the |splitbib| package since % version 1.16. Note however that only one level of category is allowed % (categories appear as subrubrics). % \end{itemize} % % \subsection{Standard Class Features} % \subsubsection{Page Size and layout} % \DescribeOption[noindex]{*paper} % \DescribeOption[noprint]{a4paper} % \DescribeOption[noprint]{a5paper} % \DescribeOption[noprint]{b4paper} % \DescribeOption[noprint]{letterpaper} % \DescribeOption[noprint]{legalpaper} % \DescribeOption[noprint]{executivepaper} % \DescribeOption{landscape} % The \texttt{a4}, \texttt{a5}, \texttt{b4}, \texttt{letter}, \texttt{legal} % and \texttt{executive} ``paper'' options allow you to select the type of % page format you want. By default, \texttt{letterpaper} is used. The % \texttt{landscape} options switches the horizontal and vertical settings. % I'm not sure why I propose this option. Nobody wants to write a \cv in % landscape mode, right? % % \noindent\DescribeOption{oneside} % \DescribeOption{twoside} % As of version 1.6, \curve also supports the standard \texttt{oneside} and % \texttt{twoside} class options. By default, \texttt{oneside} is used. In % \texttt{twoside} mode, odd and even pages have a different geometry and % headings layout. % % \subsubsection{Font Size} % \DescribeOption{10pt} % \DescribeOption{11pt} % \DescribeOption{12pt} % The \texttt{10pt}, \texttt{11pt} and \texttt{12pt} options let you choose % the size of the default font you want to use. By default, \texttt{10pt} is % used. % % \subsubsection{Output Mode} % \DescribeOption{final} % \DescribeOption{draft} % In \texttt{draft} mode, a black rule will be drawn at the end of overfull % lines (as done by standard classes). Due to \curve using the % \texttt{LTXtable} package (and in case \texttt{longtable} prior to version 4 % is used by it), a call to |\setlongtables| is performed in \texttt{final} % mode. Please refer to the next section for more information on this. By % default, \texttt{final} is used. % % \subsubsection{Page styles} % \DescribeMacro{\pagestyle}\marg{style}\\ % \DescribeMacro{\thispagestyle}\marg{style}\\ % As of version 1.6, \curve supports the standard \LaTeX{} page style % mechanism. Available styles are \texttt{empty}, \texttt{plain}, % \texttt{headings} and \texttt{myheadings}. These styles have their usual % meaning, given that rubric and subrubric names are used for marking purpose % (the equivalent of chapters and sections in books for instance). By default, % the page style is \texttt{empty}. % % \subsubsection{Internationalization} % \curve currently supports 12 languages via the following options: % \texttt{english}, \texttt{french} (or \texttt{francais}), \texttt{spanish}, % \texttt{portuguese} (or \texttt{portuges}), \texttt{brazilian} (or % \texttt{brazil}), \texttt{italian}, \texttt{german}, \texttt{ngerman}, % \texttt{dutch}, \texttt{danish}, \texttt{swedish} and \texttt{polish}. The % \texttt{german} and \texttt{ngerman} options are currently equivalent; so % are the \texttt{portuguese} and \texttt{brazilian} ones. % % If you want a finer grain on the language-dependent parts of \curve, the % following macros are provided. % % \noindent\DescribeMacro{\continuedname}\marg{continuation text}\\ % The |\continuedname| macro takes one mandatory argument which redefines the % continuation text output when rubrics extend across several pages. By % default, ``\meta{space}(continued)'' is used in English. Although this might % be of little use, it is possible to change the continuation text in the % middle of your document, provided that you do so outside the |rubric| % environment. % % \noindent\DescribeMacro{\listpubname}\marg{title}\\ % The |\listpubname| macro takes one mandatory argument which redefines the % title of the bibliographic section (when you use the provided bibliography % support). By default, ``List of Publications'' is used in English. Note that % for compatibility with the |multibbl| and |multibib| packages, \curve honors % the existence of |\bibname| or |\refname| macros prior to |\listpubname| for % deciding which title to give to the bibliographic rubric. % % % \section{Hints, Tips'n Tricks} % Here are some tips that I use for my own \cv. You might find them of some % interest. % % \subsection{Page Geometry} % First of all, it is common to have very thin margins in curricula vitae. % \curve does not do anything special about this because I don't think that % belongs to its duty. The \texttt{geometry} package comes in handy if you % want to reduce your margins. % % \subsection{Vertical spacing} % Although they might look a bit like itemize environments, \curve rubrics % are implemented with tables. This has an important consequence: empty lines % in rubrics do affect the vertical spacing of your document (at least for the % time being). % % You might be tempted to leave such empty lines here and there for % readability, or for this precise effect it has on vertical spacing, but I % advise you against this. Better to stick entries and subrubrics together, % and play with the spacing commands to achieve the desired layout. This will % ensure a more consistent layout with future versions of \curve. % % If you are using \BibTeX{}, you should also be aware of the fact that some % \BibTeX{} styles output empty lines between |\bibitem|'s, and this has an % unfortunate influence on vertical spacing for the same technical reason. If % this vertical space annoys you, what you can do is modify the \BibTeX{} % style in order to avoid the production of these empty lines. For instance, % in |plain.bst|, this simply boils down to removing the call to |newline$| at % the beginning of the |output.bibitem| function. % % \subsection{The \texttt{ltx} Extension} % Personally, I prefer to keep \texttt{.tex} for \TeX{} files, and use the % \texttt{ltx} extension for \LaTeX. This is supported by \curve which will % actually prefer \texttt{ltx} files over \texttt{tex} ones, especially when % including rubrics. To be more precise, suppose you are building a flavor % \texttt{flv} of your \cv. A call to |\makerubric{foo}| will try to use the % following files in that order:\\ % \texttt{foo.flv.ltx}\\ % \texttt{foo.flv.tex}\\ % \texttt{foo.ltx}\\ % \texttt{foo.tex} % % \subsection{Longtable} % \curve users should be aware of the fact that the layout implementation is % based on the \texttt{LTXtable} package, which in turn is a mix of % \texttt{tabularx} and \texttt{longtable}. This has several implications, % most notably that when writing a rubric, you are actually inside a tabular % environment. Here are some things to keep in mind: % \begin{itemize} % \item You are not allowed to use the |\\| command to start a new line. % However, you're free to use |\par| in your entries'contents instead. Note % that \curve sets |\parskip| to |0pt| so that starting a new paragraph % looks like just starting a new line. % \item You can use |\raggedright| and |\raggedleft| in your entries. % \item You can use |\pagebreak|, |\nopagebreak| and |\newpage| at the % beginning of a line, just before starting a new entry. % \item Prior to version 4, \texttt{longtable} used an alignment mechanism % involving calls to |\setlongtables| (see its documentation). \curve % retains this for backward compatibility and still calls |\setlongtables| % in final (not draft) mode. If your version of \texttt{longtable} is recent % enough, you shouldn't be concerned by this. If it is older, you might need % to process your document a few times in draft mode, and then one last time % in final mode. However, keep in mind that in both cases, you might still % need up to 3 or 4 passes of \LaTeX{} on your document. % \end{itemize} % % \subsection{Managing Different Flavors} % If you maintain different flavors of your \cv at the same time, you probably % want to rebuild all of them after any modification. Since you have a single % skeleton file for all of them (say, \texttt{cv.tex}), the output file will % have the same name for all flavors (say, \texttt{cv.dvi}). This can bother % you if you want all flavors of your formatted \cv available at the same % time. % % To remedy this problem, I usually use the \texttt{ask} option and a % makefile to build the different flavors and move the output file to % flavor-specific name. Here is a typical makefile target that should clarify % (or maybe darken?) what I am saying: % \begin{verbatim} %cv.$(FLAVOR).dvi: cv.ltx $(RUBRICS) % echo $(FLAVOR) | latex cv.ltx % mv cv.dvi $@ % \end{verbatim} % As you can see, the shell is responsible for answering the question. % % \subsection{More On Flavors} % In order to implement the flavor mechanism, the \LaTeX{} macro |\input| has % been redefined to look for ``flavored'' files first. This is actually very % nice because you can use it if you want to make different flavors of text % that does not belong in rubrics. % % For instance, suppose you want a special version of the subtitle of your \cv % for the flavor \texttt{flv}. Create a file called \texttt{subtitle.flv.ltx} % and put something like ``|\subtitle{special subtitle}|'' in it. Do something % similar for the default subtitle. Now go to the skeleton of your \cv, and % write |\input{subtitle}| in the preamble. That's it. You'll have different % subtitles in your different \cv flavors. % % % \appendix % \section{Appendix} % % \subsection{Frequently Asked Questions} % \begin{enumerate} % \item % \textbf{Is there a way to align entries across several (all) rubrics?}\\ % Not automatically because rubrics are typeset as individual tables. There % are many ways to manually ``trick'' too narrow keys in order to enlarge % them however. As of version 1.11, \curve provides a new convenience % macro to do something similar: see section \ref{sec:noentry}. % \item % \textbf{How can I change the interline spacing?}\\ % Internally, \curve uses \LaTeX{} tabular-based environments. As such, % you can play with |\arraystretch| to modify the space between rows. % \item % \textbf{When a page break occurs in the middle of a rubric, the same % alignment is kept on both pages, which might result in suboptimal % layout.}\\ % This is a technical limitation of the automatic alignment computation % process in longtables and I don't think there will be a solution anytime % soon (page breaking is orthogonal to column width calculation). What you % can do, once your CV is finalized, is manually split the concerned rubric % into different ones, starting at the appropriate entries to avoid page % breaking in the middle. % \item % \textbf{How can I make multi-line subrubrics?}\\ % Here are two ideas: % \begin{itemize} % \item Put your text in several consecutive subrubrics (one per line). % However, this might not give you the desired vertical spacing. % \item Probably better, put your material in a parbox:\\ % |\subrubric{\parbox{width}{first blah blah\\next blah blah}}|\\ % This is a bit dirty because you have to figure out a suitable width for % your parbox, but this will work. % \end{itemize} % \item % \textbf{How can I make multi-line keys?}\\ % The trick is to temporarily change the key cell type to a paragraph one % (remember that we're in a tabular environment). % \begin{enumerate} % \item Recover the key formatting by doing something like this near % the beginning of your document:\\ % |\makeatletter\let\mykeyfont\@keyfont\makeatother| % \item Use something like this where you need a multi-line key (you will % have to adjust the paragraph width manually): % \begin{verbatim} % \entry*[\multicolumn{1}{@{}>{\mykeyfont}p{2cm}}{% % long key\newline long key}] % Entry text. Entry text. Entry ... % \end{verbatim} % \end{enumerate} % \item % \textbf{How to deal with long keys?}\\ % The best thing to do is to make them multi-line manually. Please refer to % the previous question. % \item % \textbf{Can I change the prefix locally?}\\ % Yes and no. The |\prefix| command can only be used in the preamble or % between rubrics. Otherwise, there is currently no way to change the prefix % for a single entry. This limitation will disappear in a future release. % \end{enumerate} % % \subsection{Changes} % \begin{itemize} % \item[v1.16] New |\text| macro, suggested by Alexandre Duret-Lutz and Franco % Callegati.\\ % Support for the \texttt{openbib} option which was implicit % before, reported by Vasilis Boucharas.\\ % Fix incompatibilities with the |splitbib| package, reported by Jean % Taucol.\\ % Handle the |bibentry|/|hyperref| incompatibiity directly.\\ % Implement old font commands, letting packages using them (e.g. |fancyhdr|) % work correctly. % \item[v1.15] Support for itemize environments, suggested by Mirko Hessel-von % Molo\\ % Added some documentation about vertical spacing problems in |bbl| files, % suggested by Seweryn Habdank-Wojew\'odzki % \item[v1.14] Support for reverse counting bibliographic entries, suggested % by Joseph Wright\\ % Support for Polish thanks to Radek Dominiak\\ % || % \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.} % % % \subsection{Implementation} % First, the class announcement and the initial requirements: % \begin{macrocode} %\NeedsTeXFormat{LaTeX2e} %<*header> \ProvidesClass{curve}[2010/12/14 v1.16 Curriculum Vitae class for LaTeX2e] % %<*curve> \RequirePackage{ltxtable} \RequirePackage{ifthen} \RequirePackage{calc} \RequirePackage{filehook} % \end{macrocode} % % \subsubsection{Rubric Files} % We don't want to output an extra |subrubricbeforespace| if no entry is % present before the subrubric. This is done by using an |\@beforespace| % command which is set to |0pt| at the beginning of each rubric, and switched % to the proper value when an entry is added. % \begin{macro}{\@nextentry} % The |@nextentry| command is used to implement |\entry*| while maintaining % backward compatibility with |\entry| and |\subrubric|. A new entry or a % subrubric might have to close the preceding entry if it was opened using % the starred form. % \begin{macrocode} \gdef\@nextentry{} % \end{macrocode} % \end{macro} % % \paragraph{Entries} % \begin{macro}{\@keyfont} % \mbox{}\MacroTopsep=0pt % \begin{macro}{\keyfont} % \marg{cmds} % \begin{macrocode} \def\@keyfont{} \newcommand\keyfont[1]{\gdef\@keyfont{#1}} % \end{macrocode} % \end{macro} % \end{macro} % \begin{macro}{\keyalignment} % \marg{hpos} % \begin{macrocode} \newcolumntype{k}{>{\@keyfont}l} \newcommand\keyalignment[1]{% \ifthenelse{\equal{#1}{l}}{}{% \ifthenelse{\equal{#1}{r}}{}{% \ifthenelse{\equal{#1}{c}}{}{% \ClassError{curve}{Invalid key alignment}{% You have called \protect\keyalignment\space with an invalid value.% \MessageBreak Valid options include l, c, and r.\MessageBreak Type X to quit, fix the typo, and rerun LaTeX.}}}}% \newcolumntype{k}{>{\@keyfont}#1}} % \end{macrocode} % \end{macro} % \begin{macro}{\@prefix} % \mbox{}\MacroTopsep=0pt % \begin{macro}{\prefix} % \marg{cmds} % \begin{macrocode} \def\@prefix{\textbullet} \newcommand\prefix[1]{\gdef\@prefix{#1}} % \end{macrocode} % \end{macro} % \end{macro} % \begin{macro}{\@maybekey} % \mbox{}\MacroTopsep=0pt % \begin{macro}{\@alwayskey} % \marg{key} % \begin{option}{skipsamekey} % As of version 1.10, \curve can skip keys identical to the previous one, if % the option |skipsamekey| is used. % \begin{macrocode} \def\@maybekey#1{% \def\@newkey{#1}% \ifx\@previouskey\@newkey\gdef\@@key{}\else% \gdef\@@key{#1}\gdef\@previouskey{#1}% \fi} \def\@alwayskey#1{% \gdef\@@key{#1}} \let\@key\@alwayskey \DeclareOption{skipsamekey}{\let\@key\@maybekey} % \end{macrocode} % \end{option} % \end{macro} % \end{macro} % \begin{macro}{\@entry} % \oarg{key}\marg{contents}\MacroTopsep=0pt % \begin{macro}{\@sentry} % \oarg{key} % \begin{macro}{\entry} % \begin{macrocode} \newcommand\@entry[2][]{% \gdef\@nextentry{}\@key{#1}% \egroup% end of \noalign opened in \entry. \@@key&\@prefix\\\par} \newcommand\@sentry[1][]{% \gdef\@nextentry{\\\par}\@key{#1}% \egroup% end of \noalign opened in \entry. \@@key&\@prefix&} \newcommand\entry{% \@nextentry \noalign\bgroup\gdef\@beforespace{\subrubricbeforespace}% \@ifstar{\@sentry}{\@entry}} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \begin{macro}{\@almosttextwidth} % \mbox{}\MacroTopsep=0pt % \begin{macro}{\@text} % \marg{contents} % \begin{macro}{\@stext} % \begin{macro}{\text} % This macro wraps around |\multicol| to let people input plain text within % a rubric. Currently, plain text doesn't interfere with the |skipsamekey| % mechanism, but this choice is arguable. Note that the use of |\text*| is % not documented yet because it doesn't work quite right. It produces an % undesired space before the text and I don't understand why. % \begin{macrocode} \newlength{\@almosttextwidth} \AtBeginDocument{\setlength\@almosttextwidth{\textwidth-\hfuzz}} \newcommand\@text[1]{% \gdef\@nextentry{}% \egroup% end of \noalign opened in \text. \multicolumn{3}{@{}p{\@almosttextwidth}@{}}{#1}\\} \newcommand\@stext{% \gdef\@nextentry{\egroup\\\par}% \egroup% end of \noalign opened in \text. \multicolumn{3}{@{}p{\@almosttextwidth}@{}}\bgroup} \newcommand\text{% \@nextentry \noalign\bgroup\gdef\@beforespace{\subrubricbeforespace}% \@ifstar{\@stext}{\@text}} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\noentry} % \marg{key}\\ % This macro is a wrapper around |\kill| to manually adjust too narrow % rubrics. % \begin{macrocode} \newcommand\noentry[1]{\@nextentry \noalign{\gdef\@nextentry{}}#1&&\kill} % \end{macrocode} % \end{macro} % % \paragraph{Subrubrics} % \begin{macro}{\@subrubricfont} % \mbox{}\MacroTopsep=0pt % \begin{macro}{\subrubricfont} % \marg{cmds} % \begin{macrocode} \def\@subrubricfont{\Large\itshape} \newcommand\subrubricfont[1]{\gdef\@subrubricfont{#1}} % \end{macrocode} % \end{macro} % \end{macro} % \begin{macro}{\subrubricbeforespace} % \MacroTopsep=0pt % \begin{macro}{\subrubricspace} % \begin{macrocode} \newlength\subrubricbeforespace \setlength\subrubricbeforespace{20pt} \newlength\subrubricspace \setlength\subrubricspace{5pt} % \end{macrocode} % \end{macro} % \end{macro} % \begin{macro}{\@subrubricmark} % \mbox{}\MacroTopsep=0pt % \begin{macro}{\@@subrubric} % \marg{title}\\ % Note that |\@subrubricmark| is called outside the raisebox. That's because % otherwise, the mark would not go to the toplevel page vertical box, and % \TeX{} would not notice it. % \begin{macrocode} \let\@subrubricmark\@gobble \def\@@subrubric#1{% \rule{0bp}{\@beforespace} {\@subrubricfont#1} \@subrubricmark{#1}} % \end{macrocode} % \end{macro} % \end{macro} % \begin{macro}{\@clcccolsep} % The normal intercolumn space between the prefix and the entry's content is % replaced with an unbreakable space. This causes a problem (fixed in % version 1.10) with the [sub]rubric alignments cl and cc when the prefix is % empty, because the unbreakable space in question slightly shifts the % entry's content to the right. If we want a proper alignment, we then have % to take this offset into account in the cl and cc multicolumns, for both % rubrics and subrubrics. The following macro implements this: % \begin{macrocode} \def\@clcccolsep{\hspace{\tabcolsep}\ifx\@prefix\@empty~\fi} % \end{macrocode} % \begin{macro}[noindex]{\@subrubric@*} % \MacroTopsep=0pt % \begin{macro}{\@subrubric} % \marg{title} % \begin{macro}[noprint]{\@subrubric@l} % \begin{macro}[noprint]{\@subrubric@c} % \begin{macro}[noprint]{\@subrubric@r} % \begin{macro}[noprint]{\@subrubric@cl} % \begin{macro}[noprint]{\@subrubric@cc} % \begin{macro}[noprint]{\@subrubric@cc} % \begin{macrocode} \def\@subrubric@l#1{\multicolumn{3}{@{}l@{}}{\@@subrubric{#1}}} \def\@subrubric@c#1{\multicolumn{3}{@{}c@{}}{\@@subrubric{#1}}} \def\@subrubric@r#1{\multicolumn{3}{@{}r@{}}{\@@subrubric{#1}}} \def\@subrubric@cl#1{&\multicolumn{2}{@{\@clcccolsep}l@{}}{\@@subrubric{#1}}} \def\@subrubric@cc#1{&\multicolumn{2}{@{\@clcccolsep}c@{}}{\@@subrubric{#1}}} \let\@subrubric\@subrubric@cl % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \begin{macro}{\subrubricalignment} % \marg{hpos} % \begin{macrocode} \newcommand\subrubricalignment[1]{% \def\@curve@temp@a{\let\@subrubric} \expandafter\@curve@temp@a\csname @subrubric@#1\endcsname \@ifundefined{@subrubric}{% \ClassError{curve}{Invalid subrubric alignment}{% You have called \protect\subrubricalignment\space with an invalid value.% \MessageBreak Valid options include l, c, r, cl and cc.\MessageBreak Type X to quit, fix the typo, and rerun LaTeX.}} } % \end{macrocode} % \end{macro} % \begin{macro}{\subrubric} % \marg{title} % \begin{macrocode} \newcommand\subrubric[1]{% \@nextentry \noalign{\gdef\@nextentry{}}% \@subrubric{#1}\\*[\subrubricspace]\par} % \end{macrocode} % \end{macro} % % \paragraph{Rubrics} % \begin{macro}{\@rubricfont} % \mbox{}\MacroTopsep=0pt % \begin{macro}{\rubricfont} % \marg{cmds} % \begin{macrocode} \def\@rubricfont{\Large\bfseries} \newcommand\rubricfont[1]{\gdef\@rubricfont{#1}} % \end{macrocode} % \end{macro} % \end{macro} % \begin{macro}{\rubricspace} % \begin{macrocode} \newlength\rubricspace \setlength\rubricspace{10pt} % \end{macrocode} % \end{macro} % \begin{macro}{\@@rubrichead} % \marg{title}\MacroTopsep=0pt % \begin{macro}[noindex]{\@rubrichead@*} % \ldots % \begin{macro}{\@rubrichead} % \begin{macro}[noprint]{\@rubrichead@l} % \begin{macro}[noprint]{\@rubrichead@c} % \begin{macro}[noprint]{\@rubrichead@r} % \begin{macro}[noprint]{\@rubrichead@cl} % \begin{macro}[noprint]{\@rubrichead@cc} % \begin{macrocode} \def\@@rubrichead#1{\@rubricfont#1} \def\@rubrichead@l#1{\multicolumn{3}{@{}l@{}}{\@@rubrichead{#1}}} \def\@rubrichead@c#1{\multicolumn{3}{@{}c@{}}{\@@rubrichead{#1}}} \def\@rubrichead@r#1{\multicolumn{3}{@{}r@{}}{\@@rubrichead{#1}}} \def\@rubrichead@cl#1{&\multicolumn{2}{@{\@clcccolsep}l@{}}{\@@rubrichead{#1}}} \def\@rubrichead@cc#1{&\multicolumn{2}{@{\@clcccolsep}c@{}}{\@@rubrichead{#1}}} \let\@rubrichead\@rubrichead@c % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \begin{macro}{\rubricalignment} % \marg{hpos} % \begin{macrocode} \newcommand\rubricalignment[1]{% \def\@curve@temp@a{\let\@rubrichead} \expandafter\@curve@temp@a\csname @rubrichead@#1\endcsname \@ifundefined{@rubrichead}{% \ClassError{curve}{Invalid rubric alignment}{% You have called \protect\rubricalignment\space with an invalid value.% \MessageBreak Valid options include l, c, r, cl and cc.\MessageBreak Type X to quit, fix the typo, and rerun LaTeX.}} } % \end{macrocode} % \end{macro} % \begin{macro}{\rubricafterspace} % \begin{macrocode} \newlength\rubricafterspace \setlength\rubricafterspace{0pt} % \end{macrocode} % \end{macro} % \begin{macro}{\@rubricmark} % \mbox{}\MacroTopsep=0pt % \begin{environment}{rubric} % \marg{title}\\ % Marking commands don't seem to work in longtable headings. So the rubric % mark is issued just after it.\\ % As of version 1.7, |\raggedleft| and |\raggedright| are redefined in order % to work within individual entries. This redefinition simply consists in % removing the |\\| definition since it's not available anyway, and also to % remove the |\parskip| setting since it's |Opt| in the whole class. % \begin{macrocode} \let\@rubricmark\@gobble \newenvironment{rubric}[1]{% %% \begin{rubric} \def\raggedright{% \@rightskip\@flushglue\rightskip\@rightskip\leftskip\z@skip}% \def\raggedleft{% \rightskip\z@skip\leftskip\@flushglue\parfillskip\z@skip}% \gdef\@beforespace{0pt}% \gdef\@nextentry{}% \gdef\@previouskey{}% \global\let\old@newpage\newpage% \global\let\old@pagebreak\pagebreak% \global\let\old@nopagebreak\nopagebreak \begin{longtable}{@{}kl@{~}X@{}} \@rubrichead{#1}\\*[\rubricspace] \endfirsthead \@rubrichead{#1\@continuedname}\\*[\rubricspace] \endhead \noalign{\@rubricmark{#1}% \global\let\in@newpage\newpage% \global\let\in@pagebreak\pagebreak% \global\let\in@nopagebreak\nopagebreak% \gdef\newpage{\@nextentry\noalign{\gdef\@nextentry{}}\in@newpage} \gdef\pagebreak{\@nextentry\noalign{\gdef\@nextentry{}}\in@pagebreak} \gdef\nopagebreak{\@nextentry\noalign{\gdef\@nextentry{}}\in@nopagebreak}}}{% %% \end{rubric} \@nextentry \end{longtable}\par\vspace\rubricafterspace \global\let\newpage\old@newpage% \global\let\pagebreak\old@pagebreak% \global\let\nopagebreak\old@nopagebreak} % \end{macrocode} % \end{environment} % \end{macro} % \begin{macro}{\continuedname} % \marg{continuation text} % \begin{macrocode} \newcommand\continuedname[1]{\gdef\@continuedname{#1}} % \end{macrocode} % \end{macro} % % \subsubsection{Skeleton File} % \paragraph{Utilities} % \begin{macro}{\today} % \begin{macrocode} \def\today{\ifcase\month\or January\or February\or March\or April\or May\or June\or July\or August\or September\or October\or November\or December\fi \space\number\day, \number\year} % \end{macrocode} % \end{macro} % % \paragraph{Headers} % \begin{macro}{\header@scale} % \mbox{}\MacroTopsep=0pt % \begin{macro}{\headerscale} % \marg{scale} % \begin{macrocode} \def\header@scale{.5} \newcommand\headerscale[1]{\gdef\header@scale{#1}} \@onlypreamble\headerscale % \end{macrocode} % \end{macro} % \end{macro} % \begin{macro}{\headerspace} % \begin{macrocode} \newlength\headerspace \setlength\headerspace{10pt} % \end{macrocode} % \end{macro} % \begin{macro}{\@leftheader} % \mbox{}\MacroTopsep=0pt % \begin{macro}{\leftheader} % \marg{contents} % \begin{macro}{\@rightheader} % \mbox{} % \begin{macro}{\rightheader} % \marg{contents}\\ % If the user calls |\makeheaders| without specifying headers first, an % error will be generated. The same applies for the title (not the % subtitle), but this is already managed by \LaTeX{} itself. % \begin{macrocode} \def\@leftheader{% \ClassError{curve}{No \protect\leftheader\space given}{% You have called \protect\makeheaders, % but you didn't provide a left header.\MessageBreak Type X 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} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \begin{macro}{\photoscale} % \marg{scale}\MacroTopsep=0pt % \begin{macro}{\photosep} % \marg{length} % \begin{macro}{\photo} % \oarg{hpos}\marg{file} % \begin{macrocode} \def\photo@scale{.1} \newcommand\photoscale[1]{\gdef\photo@scale{#1}} \@onlypreamble\photoscale \newlength\photosep \setlength\photosep{10pt} \newcommand\photo[2][l]{% \RequirePackage{graphicx} \ifthenelse{\equal{#1}{l}}{}{% \ifthenelse{\equal{#1}{r}}{}{% \ifthenelse{\equal{#1}{c}}{}{% \ClassError{curve}{Invalid argument to \protect\photo}{% Argument 2 of \protect\photo must be `l', `r' or `c'.}}}}% \def\tmp@cmd{\global\let\makeheaders@} \expandafter\tmp@cmd\csname makeheaders@#1\endcsname \gdef\photo@file{#2}} \@onlypreamble\photo % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \begin{macro}{\photo@width} % \begin{macro}[noindex]{\includephoto@*} % \begin{macro}[noprint]{\includephoto@t} % \begin{macro}[noprint]{\includephoto@c} % \begin{macro}[noprint]{\includephoto@b} % These different versions of the photo inclusion command exist for proper % alignment of the picture itself with the left and right headers. % \begin{macrocode} \newlength\photo@width \def\includephoto@t{% \raisebox{.7\baselineskip-\height}{% \includegraphics[width=\photo@width]{\photo@file}}} \def\includephoto@c{% \raisebox{-.5\height}{% \includegraphics[width=\photo@width]{\photo@file}}} \def\includephoto@b{\includegraphics[width=\photo@width]{\photo@file}} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \begin{macro}{\leftheader@width} % \MacroTopsep=0pt % \begin{macro}{\rightheader@width} % \begin{macrocode} \newlength\leftheader@width \newlength\rightheader@width % \end{macrocode} % \end{macro} % \end{macro} % And here are the different versions of the |\makeheaders| command: % \begin{macro}{\makeheaders@l} % \marg{vpos} % \begin{macrocode} \def\makeheaders@l#1{% \setlength\photo@width{\photo@scale\textwidth} \setlength\leftheader@width{% (\textwidth - \photo@width - \photosep) * \real{\header@scale}} \setlength\rightheader@width{% \textwidth - \photo@width - \photosep - \leftheader@width} \parbox[#1]{\photo@width + \photosep}{\includephoto@\hspace\photosep}% \parbox[#1]{\leftheader@width}{\@leftheader}% \parbox[#1]{\rightheader@width}{\raggedleft\@rightheader}} % \end{macrocode} % \end{macro} % \begin{macro}{\makeheaders@c} % \marg{vpos} % \begin{macrocode} \def\makeheaders@c#1{% \setlength\photo@width{\photo@scale\textwidth} \setlength\leftheader@width{(\textwidth - \photo@width) * \real{.5}} \setlength\rightheader@width{\leftheader@width} \parbox[#1]{\leftheader@width}{\@leftheader}% \parbox[#1]{\photo@width}{\includephoto@}% \parbox[#1]{\rightheader@width}{\raggedleft\@rightheader}} % \end{macrocode} % \end{macro} % \begin{macro}{\makeheaders@r} % \marg{vpos} % \begin{macrocode} \def\makeheaders@r#1{% \setlength\photo@width{\photo@scale\textwidth} \setlength\leftheader@width{% (\textwidth - \photo@width - \photosep) * \real{\header@scale}} \setlength\rightheader@width{% \textwidth - \photo@width - \photosep - \leftheader@width} \parbox[#1]{\leftheader@width}{\@leftheader}% \parbox[#1]{\rightheader@width}{\raggedleft\@rightheader}% \parbox[#1]{\photo@width + \photosep}{\hspace\photosep\includephoto@}} % \end{macrocode} % \end{macro} % \begin{macro}{\makeheaders@} % \marg{vpos} % \begin{macrocode} \def\makeheaders@#1{% \setlength\leftheader@width{\header@scale\textwidth}% \setlength\rightheader@width{\textwidth - \leftheader@width}% \parbox[#1]{\leftheader@width}{\@leftheader}% \parbox[#1]{\rightheader@width}{\raggedleft\@rightheader}} % \end{macrocode} % \end{macro} % \begin{macro}{\makeheaders} % \oarg{vpos} % \begin{macrocode} \newcommand\makeheaders[1][c]{% \ifthenelse{\equal{#1}{t}}{}{% \ifthenelse{\equal{#1}{b}}{}{% \ifthenelse{\equal{#1}{c}}{}{% \ClassError{curve}{Invalid argument to \protect\makeheaders}{% Argument of \protect\makeheaders must be `t', `b' or `c'.}}}}% \def\tmp@cmd{\global\let\includephoto@} \expandafter\tmp@cmd\csname includephoto@#1\endcsname \makeheaders@{#1}% \par\vspace\headerspace} % \end{macrocode} % \end{macro} % % \paragraph{Titles} % \begin{macro}{\@titlefont} % \mbox{}\MacroTopsep=0pt % \begin{macro}{\titlefont} % \marg{cmds} % \begin{macrocode} \@onlypreamble\title \def\@titlefont{\Huge\bfseries} \newcommand\titlefont[1]{\gdef\@titlefont{#1}} \@onlypreamble\titlefont % \end{macrocode} % \end{macro} % \end{macro} % \begin{macro}{\titlespace} % \begin{macrocode} \newlength\titlespace \setlength\titlespace{0pt} % \end{macrocode} % \end{macro} % \begin{macro}{\@subtitle} % \mbox{}\MacroTopsep=0pt % \begin{macro}{\subtitle} % \marg{title} % \begin{macrocode} \let\@subtitle\@undefined \newcommand\subtitle[1]{\gdef\@subtitle{#1}} \@onlypreamble\subtitle % \end{macrocode} % \end{macro} % \end{macro} % \begin{macro}{\@subtitlefont} % \mbox{}\MacroTopsep=0pt % \begin{macro}{\subtitlefont} % \marg{cmds} % \begin{macrocode} \def\@subtitlefont{\huge\itshape} \newcommand\subtitlefont[1]{\gdef\@subtitlefont{#1}} \@onlypreamble\subtitlefont % \end{macrocode} % \end{macro} % \end{macro} % \begin{macro}[noindex]{\@titlealignment@*} % \MacroTopsep=0pt % \begin{macro}{\@title@lignment} % \begin{macro}[noprint]{\@titlealignment@l} % \begin{macro}[noprint]{\@titlealignment@c} % \begin{macro}[noprint]{\@titlealignment@r} % \begin{macro}[noprint]{\@titlealignment} % \begin{macrocode} \def\@titlealignment@l{\raggedright} \def\@titlealignment@c{\centering} \def\@titlealignment@r{\raggedleft} \let\@title@lignment\@titlealignment@c % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \begin{macro}{\@titlealignment} % \marg{src}\marg{hpos} % \begin{macrocode} \def\@titlealignment#1#2{% \def\@curve@temp@a{\let\@title@lignment} \expandafter\@curve@temp@a\csname @titlealignment@#2\endcsname \@ifundefined{@title@lignment}{% \ClassError{curve}{Invalid title alignment}{% You have called \expandafter\string\csname#1\endcsname\space% with an invalid value.% \MessageBreak Valid options include l, c and r.\MessageBreak Type X to quit, fix the typo, and rerun LaTeX.}} } % \end{macrocode} % \end{macro} % \begin{macro}{\titlealignment} % \marg{hpos} % \begin{macrocode} \newcommand\titlealignment[1]{\@titlealignment{titlealignment}{#1}} % \end{macrocode} % \end{macro} % \begin{macro}{\@@maketitle} % \mbox{}\MacroTopsep=0pt % \begin{macro}{\@maketitle} % \oarg{hpos} % \begin{macro}{\maketitle} % \begin{macrocode} \def\@@maketitle{% \bgroup\trivlist\@title@lignment\item\relax {\@titlefont\@title} \ifx\@subtitle\@undefined\else\\\@subtitlefont\@subtitle\fi \endtrivlist\egroup \vspace\titlespace} \def\@maketitle[#1]{\@titlealignment{maketitle}{#1}\@@maketitle} \newcommand\maketitle{\@ifnextchar[%] \@maketitle\@@maketitle} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \paragraph{Rubric Inclusion} % \begin{macro}{\@flavor} % \MacroTopsep=0pt % \begin{option}{ask} % \begin{macrocode} \let\@flavor\empty \newcommand\flavor[1]{\gdef\@flavor{#1} \ifx\@flavor\empty\else\edef\@flavor{.\@flavor}\fi} \DeclareOption{ask}{% \typein[\@flavor]{Please specify a CV flavor (none by default):} \ifx\@flavor\empty\else\edef\@flavor{.\@flavor}\fi} % \end{macrocode} % \end{option} % \end{macro} % \begin{macro}{\@curveinput} % \marg{file}\MacroTopsep=0pt % \begin{macro}{\input} % |\input| is redefined in order to deal with flavors and the |ltx| % extension. % \begin{macrocode} \def\@curveinput#1{% \IfFileExists{#1\@flavor.ltx}{\@iinput{#1\@flavor.ltx}}{% \IfFileExists{#1\@flavor.tex}{\@iinput{#1\@flavor.tex}}{% \IfFileExists{#1.ltx}{\@iinput{#1.ltx}}{% \IfFileExists{#1.tex}{\@iinput{#1.tex}}{% \@iinput{#1}}}}}} \renewcommand\input{\@ifnextchar\bgroup\@curveinput\@@input} % \end{macrocode} % \end{macro} % \end{macro} % \begin{macro}{\makerubric} % \marg{name} % \begin{macrocode} \newcommand\makerubric[1]{\LTXtable{\linewidth}{#1}} % \end{macrocode} % \end{macro} % % \paragraph{Bibliography} % In case |splitbib| is loaded, we require it to export to the sbb file. It is % simpler to make \curve compatible with it that way. % \begin{macrocode} \PassOptionsToPackage{export}{splitbib} % \end{macrocode} % % \begin{option}{openbib} % \begin{macrocode} \let\newblock\empty \DeclareOption{openbib}{\let\newblock\par} % \end{macrocode} % \end{option} % \begin{option}{revbib} % \begin{counter}{bibcount} % \begin{counter}{bibtotal} % \begin{conditional}{curve@revbib} % \begin{macrocode} \newcounter{bibcount} \newcounter{bibtotal} \newif\ifcurve@revbib\curve@revbibfalse \AtEndDocument{ \if@filesw \immediate\write\@auxout{\string\setcounter{bibtotal}{\thebibcount}}% \fi} \DeclareOption{revbib}{\curve@revbibtrue} % \end{macrocode} % \end{conditional} % \end{counter} % \end{counter} % \end{option} % \begin{macro}{\@listpubname} % \mbox{}\MacroTopsep=0pt % \begin{macro}{\listpubname} % \marg{title} % \begin{macrocode} \newcommand\listpubname[1]{\gdef\@listpubname{#1}} % \end{macrocode} % \end{macro} % \end{macro} % \begin{macro}{\@curve@input@} % \marg{file}\\ % Emulation of |\@input@| for bibliographic inclusion: % \begin{macrocode} \def\@curve@input@#1{% \IfFileExists{#1}{\makerubric{#1}}{\typeout{No file #1.}}} % \end{macrocode} % \end{macro} % Redefine |\bibitem| and its internal implementation to behave like |\entry|. % \begin{macro}{\@curveltx@lbibitem} % \oarg{label}\marg{ref}\MacroTopsep=0pt % \begin{macro}{\@curve@lbibitem} % \ldots % \begin{macro}{\@lbibitem} % \begin{macrocode} \let\@curveltx@lbibitem\@lbibitem \def\@curve@lbibitem[#1]#2{\@sentry[\@biblabel{#1}]% \if@filesw {\let\protect\noexpand% \immediate\write\@auxout{\string\bibcite{#2}{#1}}}% \fi% \ignorespaces} \let\@lbibitem\@curve@lbibitem % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \begin{macro}{\@curveltx@bibitem} % \marg{ref}\MacroTopsep=0pt % \begin{macro}{\@curve@bibitem} % \ldots % \begin{macro}{\@bibitem} % \begin{macrocode} \let\@curveltx@bibitem\@bibitem \def\@curve@bibitem#1{\stepcounter{bibcount}% \@sentry[\@biblabel{\ifcurve@revbib\thebibtotal\else\thebibcount\fi}]% \ifcurve@revbib\addtocounter{bibtotal}{-1}\fi% \if@filesw \immediate\write\@auxout{\string\bibcite{#1}{\thebibcount}}% \fi% \ignorespaces} \let\@bibitem\@curve@bibitem % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \begin{macro}{\@curveltxbibitem} % \MacroTopsep=0pt % \begin{macro}{\@curvebibitem} % \begin{macro}{\bibitem} % \begin{macrocode} \let\@curveltxbibitem\bibitem \def\@curvebibitem{% %% #### FIXME: Dirty code duplication from \entry. \@nextentry \noalign\bgroup\gdef\@beforespace{\subrubricbeforespace}% \@ifnextchar[%] \@lbibitem\@bibitem} \let\bibitem\@curvebibitem % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % Special cases: % \begin{itemize} % \item |bibentry| (version 1.9): restore standard definitions because % bibentry just inlines bibliographic contents. % \begin{macrocode} \AtBeginOfFile{bibentry.sty}{ \let\@lbibitem\@curveltx@lbibitem \let\@bibitem\@curveltx@bibitem \let\bibitem\@curveltxbibitem} % \end{macrocode} % \item |splitbib| (version 1.16): restore standard definitions because ours % are used only as part of the |\endthebibliography| redefinition. % \begin{macrocode} \AtBeginOfFile{splitbib.sty}{ \let\@lbibitem\@curveltx@lbibitem \let\@bibitem\@curveltx@bibitem \let\bibitem\@curveltxbibitem} % \end{macrocode} % \item |hyperref|: restore whatever previous behavior we had. It is arguable % whether we should preserve |hyperref|'s functionality, but this answer is % no, at least for the time being. Note that we assume that |hyperref| is % loaded late in the process. Also, |hyperref| does not affect |\bibitem|. % \begin{macrocode} \AtBeginOfFile{hyperref.sty}{ \let\@curveprevious@lbibitem\@lbibitem \let\@curveprevious@bibitem\@bibitem} \AtEndOfFile{hyperref.sty}{ \let\@lbibitem\@curveprevious@lbibitem \let\@bibitem\@curveprevious@bibitem} % \end{macrocode} % \end{itemize} % \begin{environment}{thebibliography} % \marg{key}\\ % |bibentry| overrides this definition in its own group in |\BR@nobib|, but % this is in fact okay because it's not supposed to print anything. The same % goes for |splitbib| which saves this definition and restores it when it % actually matters. % \begin{macrocode} \newenvironment{thebibliography}[1]{% % \end{macrocode} % Disable the |skipsamekey| mechanism and the prefix which would get in the % way. % \begin{macrocode} \let\@key\@alwayskey \def\@prefix{} % \end{macrocode} % For compatibility with bibliographic packages such as |multibib|, the % bibliography title is set (by order of priority) to either |\bibname|, % |\refname| or |\@listpubname|. % \begin{macrocode} \begin{rubric}{\@ifundefined{bibname}{% \@ifundefined{refname}{\@listpubname}{\refname}}{% \bibname}} }{% \end{rubric} } % \end{macrocode} % \end{environment} % \begin{macro}{\@curveltxbibliography} % \marg{bibs}\MacroTopsep=0pt % \begin{macro}{\bibliography} % \ldots\\ % Define |\bibliography| to issue a |\makerubric| call on the |bbl| file. % \begin{macrocode} \let\@curveltxbibliography\bibliography \def\bibliography#1{% \if@filesw \immediate\write\@auxout{\string\bibdata{#1}}% \fi% \@curve@input@{\jobname.bbl}} % \end{macrocode} % \end{macro} % \end{macro} % Special cases: % \begin{itemize} % \item |multibbl| (version 1.12): merge definitions. % \begin{macrocode} \AtEndOfFile{multibbl.sty}{ \def\bibliography##1##2##3{% \@ifundefined{##1@auxfile}{}{% \expandafter\immediate\write\csname ##1@auxfile\endcsname% {\string\bibdata{##2}}}% \def\bibname{##3}% \def\refname{##3}% \@curve@input@{##1.bbl}}} % \end{macrocode} % \item |splitbib|: restore original version because ours are used only as % part of the |\endthebibliography| redefinition. % \begin{macrocode} \AtBeginOfFile{splitbib.sty}{ \let\bibliography\@curveltxbibliography} % \end{macrocode} % \end{itemize} % Apart from that, completing |splitbib| support is a pain in the ass. We need % to do two things. First, redefine the abominable |\NMSB@writeentry| in order % to output a correctly typeset rubric (titles are converted to subrubrics for % instance). Next we need to redefine |\endthebibliography| to restore our own % definitions for |\bibitem|, |\@bibitem| and |\@lbibitem|, and make it use % |\@curve@input@| instead of |\@input@|. % \begin{macrocode} \AtEndOfFile{splitbib.sty}{ \def\NMSB@writeentry##1##2##3##4##5,{\ifx\relax ##5\relax \else \def\NMSB@currcat{##1##2##3##4}% \def\NMSB@currcatlevelone{##1##2}% \ifx\NMSB@currcatlevelone\NMSB@prevcatlevelone\else \expandafter\ifx\csname NMSBtitle@\NMSB@currcatlevelone \endcsname\relax \else \if@filesw \expandafter\let\expandafter\NMSB@tempentry \csname NMSBtitle@\NMSB@currcatlevelone\endcsname \edef\NMSB@tempentry{\@backslashchar subrubric{\NMSB@tempentry}} \expandafter\NMSB@writecatbib\expandafter{\NMSB@tempentry} \expandafter\ifx\csname NMSBcomment@\NMSB@currcatlevelone\endcsname\relax \else \immediate\write\NMSB@catbib{\string\vskip2ex^^J% \string\hspace{-\leftmargin}\string\relax^^J% \string\begin{minipage}{\textwidth}^^J% \string\addtolength\string\parindent{20pt}^^J% \string\noindent} \expandafter\let\expandafter\NMSB@tempentry \csname NMSBcomment@\NMSB@currcatlevelone\endcsname \expandafter\NMSB@writecatbib\expandafter{% \NMSB@tempentry^^J}% \immediate\write\NMSB@catbib{\string\end{minipage}^^J% \string\par\string\addpenalty{\NMSB@penalty} \string\vskip2ex} \fi \fi \fi \xdef\NMSB@prevcatlevelone{##1##2}% \ifnum\theSBresetdepth>0\relax \setcounter{\@listctr}{0}% \fi \expandafter\ifx\csname NMSBprefix@\NMSB@prevcatlevelone \endcsname\relax \NMSB@currprefixlevelonetok{\relax}% \else \expandafter\expandafter\expandafter\NMSB@currprefixlevelonetok \expandafter\expandafter\expandafter{% \csname NMSBprefix@\NMSB@prevcatlevelone\endcsname}% \fi \fi \ifx\NMSB@currcat\NMSB@prevcat\else \ifnum\NMSB@currcat=9999\else \expandafter\ifx\csname NMSBtitle@\NMSB@currcat\endcsname \relax \else \if@filesw \immediate\write\NMSB@catbib{% \string\par\string\addpenalty{-\NMSB@halfpenalty}% \string\relax^^J% \string\item[]% \string\SBsubtitle}% \expandafter\let\expandafter\NMSB@tempentrya \csname NMSBtitle@\NMSB@currcatlevelone\endcsname \expandafter\let\expandafter\NMSB@tempentryb \csname NMSBtitle@\NMSB@currcat\endcsname \expandafter\NMSB@writecatbib\expandafter{% \expandafter{\NMSB@tempentrya}} \expandafter\NMSB@writecatbib\expandafter{% \expandafter{\NMSB@tempentryb}} \immediate\write\NMSB@catbib{\string\relax^^J% \string\par\string\addpenalty{\NMSB@penalty}% \string\relax}% \expandafter\ifx\csname NMSBcomment@\NMSB@currcat\endcsname\relax \else \immediate\write\NMSB@catbib{\string\vskip2ex^^J% \string\hspace{-\leftmargin}\string\relax^^J% \string\begin{minipage}{\textwidth}^^J% \string\addtolength\string\parindent{20pt}^^J% \string\noindent} \expandafter\let\expandafter\NMSB@tempentry \csname NMSBcomment@\NMSB@currcat\endcsname \expandafter\NMSB@writecatbib\expandafter{% \NMSB@tempentry^^J}% \immediate\write\NMSB@catbib{\string\end{minipage}^^J% \string\par\string\addpenalty{\NMSB@penalty}% \string\vskip2ex} \fi \fi \fi \fi \xdef\NMSB@prevcat{##1##2##3##4}% \ifnum\theSBresetdepth>1\relax \setcounter{\@listctr}{0}% \fi \expandafter\ifx\csname NMSBprefix@\NMSB@currcat\endcsname\relax \expandafter\NMSB@currprefixtok\expandafter{% \the\NMSB@currprefixlevelonetok}% \else \expandafter\expandafter\expandafter\NMSB@currprefixtok \expandafter\expandafter\expandafter{% \csname NMSBprefix@\NMSB@currcat\endcsname} \fi \fi \expandafter\ifx\csname NMSBlabel@##5\endcsname\relax \if@filesw \stepcounter\@listctr \expandafter\ifx\expandafter\relax\the\NMSB@currprefixtok \def\NMSB@tempentry{}% \else \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter\NMSB@tempentry \expandafter\expandafter\expandafter{% \expandafter\the\expandafter\NMSB@currprefixtok \the\value{\@listctr}}% \edef\NMSB@tempentry{[\NMSB@tempentry]} \fi \edef\NMSB@tempentry{% \@backslashchar bibitem% \NMSB@tempentry{\csname NMSBkey@##5\endcsname}}% \expandafter\NMSB@writecatbib\expandafter{% \NMSB@tempentry} \expandafter\let\expandafter\NMSB@tempentry \csname NMSBentry@##5\endcsname% \expandafter\NMSB@writecatbib\expandafter{% \NMSB@tempentry} \fi \setbox\@tempboxa=\hbox{\the\NMSB@currprefixtok\the\value{\@listctr}}% \ifdim\NMSB@reallylongest<\wd\@tempboxa \setlength{\NMSB@reallylongest}{\wd\@tempboxa}% \xdef\NMSB@reallylongestlabel{% \expandafter\ifx\expandafter\relax\the\NMSB@currprefixtok \else\the\NMSB@currprefixtok\fi\the\value{\@listctr}}% \fi \else \if@filesw \immediate\write\NMSB@catbib{% \string\bibitem} \expandafter\let\expandafter\NMSB@tempentry \csname NMSBlabel@##5\endcsname \expandafter\NMSB@writecatbib\expandafter{% \expandafter[\NMSB@tempentry]}% \immediate\write\NMSB@catbib{% {\csname NMSBkey@##5\endcsname}}% \expandafter\let\expandafter\NMSB@tempentry \csname NMSBentry@##5\endcsname% \expandafter\NMSB@writecatbib\expandafter{% \NMSB@tempentry^^J^^J} \fi \setbox\@tempboxa=\hbox{\csname NMSBlabel@##5\endcsname}% \ifdim\NMSB@reallylongest<\wd\@tempboxa \setlength{\NMSB@reallylongest}{\wd\@tempboxa}% \expandafter\let\expandafter\NMSB@reallylongestlabel\csname NMSBlabel@##5\endcsname \fi \fi \fi } \def\endthebibliography{% \usecounter{enumiv}% \edef\NMSB@sortedvaluelist{% \expandafter\NMSBsortlt\expandafter{\NMSB@valuelist}}% \expandafter\NMSB@writelist\expandafter{\NMSB@sortedvaluelist}% \if@filesw \immediate\write\NMSB@catbib{% \string\end{thebibliography}} \immediate\closeout\NMSB@catbib \fi \begingroup \ifNMSB@newchap\else \@ifundefined{chapter}{\def\section####1####2{}}{% \def\chapter####1####2{}}% \fi \let\thebibliography\@NMSBorig@thebibliography \let\endthebibliography\@NMSBorig@endthebibliography \let\bibitem\@curvebibitem \let\@lbibitem\@curve@lbibitem \let\@bibitem\@curve@bibitem \@curve@input@{\jobname.sbb} \endgroup \ifx\NMSB@missingcat\NMSB@empty\else \expandafter\NMSB@warnnocateg\NMSB@missingcat\end \fi \ifNMSB@strict \ifx\NMSB@doublecat\NMSB@empty\else \expandafter\NMSB@warndblcateg\NMSB@doublecat\end \fi \fi \ifdim\NMSB@reallylongest=\NMSB@longest\relax\else \NMSB@warnwronglongest \fi}} % \end{macrocode} % % \subsubsection{Language Processing} % \begin{lang}{english} % \MacroTopsep=0pt % \begin{lang}{french} % \begin{lang}{francais} % \begin{lang}{spanish} % \begin{lang}{portuges} % \begin{lang}{portugese} % \begin{lang}{brazil} % \begin{lang}{brazilian} % \begin{lang}{italian} % \begin{lang}{german} % \begin{lang}{ngerman} % \begin{lang}{dutch} % \begin{lang}{danish} % \begin{lang}{swedish} % \begin{lang}{polish} % \begin{macrocode} \DeclareOption{english}{% \continuedname{~(continued)} \listpubname{List of Publications}} \DeclareOption{french}{% \continuedname{~(suite)} \listpubname{Liste des Publications}} \DeclareOption{francais}{% \ExecuteOptions{french}} \DeclareOption{spanish}{% \continuedname{~(contin\'ua)} \listpubname{Lista de Publicaciones}} \DeclareOption{portuges}{% \continuedname{~(continua\c c\~ao)} \listpubname{Publica\c c\~oes}} \DeclareOption{portuguese}{% \ExecuteOptions{portuges}} \DeclareOption{brazil}{% \ExecuteOptions{portuges}} \DeclareOption{brazilian}{% \ExecuteOptions{portuges}} \DeclareOption{italian}{% \continuedname{~(continua)} \listpubname{Pubblicazioni}} \DeclareOption{german}{% \continuedname{~(fortgesetzt)} \listpubname{Verzeichnis der Ver\"offentlichungen}} \DeclareOption{ngerman}{% \ExecuteOptions{german}} \DeclareOption{dutch}{% \continuedname{~(vervolg)} \listpubname{Publicaties}} \DeclareOption{danish}{% \continuedname{~(fortsat)} \listpubname{Udgivelser}} \DeclareOption{swedish}{% \continuedname{~(forts.)} \listpubname{Publikationer}} \DeclareOption{polish}{ \continuedname{~(kontynuacja)} \listpubname{Publikacje}} % \end{macrocode} % \end{lang} % \end{lang} % \end{lang} % \end{lang} % \end{lang} % \end{lang} % \end{lang} % \end{lang} % \end{lang} % \end{lang} % \end{lang} % \end{lang} % \end{lang} % \end{lang} % \end{lang} % % \subsubsection{Standard Class Processing} % \begin{option}[noindex]{*paper} % \begin{option}{landscape} % \begin{option}[noprint]{a4paper} % \begin{option}[noprint]{a5paper} % \begin{option}[noprint]{b5paper} % \begin{option}[noprint]{letterpaper} % \begin{option}[noprint]{legalpaper} % \begin{option}[noprint]{executivepaper} % \begin{macrocode} \DeclareOption{a4paper}{ \setlength\paperheight{297mm} \setlength\paperwidth{210mm}} \DeclareOption{a5paper}{ \setlength\paperheight{210mm} \setlength\paperwidth{148mm}} \DeclareOption{b5paper}{ \setlength\paperheight{250mm} \setlength\paperwidth{176mm}} \DeclareOption{letterpaper}{ \setlength\paperheight{11in} \setlength\paperwidth{8.5in}} \DeclareOption{legalpaper}{ \setlength\paperheight{14in} \setlength\paperwidth{8.5in}} \DeclareOption{executivepaper}{ \setlength\paperheight{10.5in} \setlength\paperwidth{7.25in}} \DeclareOption{landscape}{ \setlength\@tempdima{\paperheight} \setlength\paperheight{\paperwidth} \setlength\paperwidth{\@tempdima}} % \end{macrocode} % \end{option} % \end{option} % \end{option} % \end{option} % \end{option} % \end{option} % \end{option} % \end{option} % \begin{option}{10pt} % \begin{option}{11pt} % \begin{option}{12pt} % \begin{macrocode} \DeclareOption{10pt}{\def\@ptsize{0}} \DeclareOption{11pt}{\def\@ptsize{1}} \DeclareOption{12pt}{\def\@ptsize{2}} % \end{macrocode} % \end{option} % \end{option} % \end{option} % \begin{option}{oneside} % \begin{option}{twoside} % \begin{macrocode} \DeclareOption{oneside}{\@twosidefalse\@mparswitchfalse} \DeclareOption{twoside}{\@twosidetrue\@mparswitchtrue} % \end{macrocode} % \end{option} % \end{option} % \begin{option}{final} % \begin{option}{draft} % \begin{macrocode} \DeclareOption{draft}{\setlength\overfullrule{5pt}} \DeclareOption{final}{% \setlength\overfullrule{0pt} \setlongtables} % \end{macrocode} % \end{option} % \end{option} % \begin{macrocode} \ExecuteOptions{english,letterpaper,10pt,oneside,final} \ProcessOptions \input{size1\@ptsize.clo} \setlength\parindent{0pt} \setlength\parskip{0pt} \setlength\tabcolsep{10pt} \setlength\arrayrulewidth{.4\p@} \setlength\leftmargini{2.5em} \leftmargin\leftmargini \setlength\leftmarginii{2.2em} \setlength\leftmarginiii{1.87em} \setlength\leftmarginiv{1.7em} \setlength\leftmarginv{1em} \setlength\leftmarginvi{1em} \setlength\labelsep{.5em} \setlength\labelwidth{\leftmargini} \addtolength\labelwidth{-\labelsep} \@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty -\@lowpenalty \renewcommand\theenumi{\@arabic\c@enumi} \renewcommand\theenumii{\@alph\c@enumii} \renewcommand\theenumiii{\@roman\c@enumiii} \renewcommand\theenumiv{\@Alph\c@enumiv} \newcommand\labelenumi{\theenumi.} \newcommand\labelenumii{(\theenumii)} \newcommand\labelenumiii{\theenumiii.} \newcommand\labelenumiv{\theenumiv.} \renewcommand\p@enumii{\theenumi} \renewcommand\p@enumiii{\theenumi(\theenumii)} \renewcommand\p@enumiv{\p@enumiii\theenumiii} \newcommand\labelitemi{\textbullet} \newcommand\labelitemii{\normalfont\bfseries \textendash} \newcommand\labelitemiii{\textasteriskcentered} \newcommand\labelitemiv{\textperiodcentered} \raggedbottom \onecolumn \pagestyle{empty} \pagenumbering{arabic} \newcommand\@makefntext[1]{\noindent\hb@xt@1em{\hss\@makefnmark}#1} \if@twoside \def\ps@headings{% \let\@oddfoot\@empty\let\@evenfoot\@empty \def\@evenhead{\thepage\hfil\slshape\leftmark}% \def\@oddhead{{\slshape\rightmark}\hfil\thepage}% \let\@mkboth\markboth \def\@rubricmark##1{\markboth{\MakeUppercase{##1}}{}}% \def\@subrubricmark##1{\markright{##1}}% } \else \def\ps@headings{% \let\@oddfoot\@empty \def\@oddhead{{\slshape\rightmark}\hfil\thepage}% \let\@mkboth\markboth \def\@rubricmark##1{\markright{\MakeUppercase{##1}}}% } \fi \def\ps@myheadings{% \let\@oddfoot\@empty\let\@evenfoot\@empty \def\@evenhead{\thepage\hfil\slshape\leftmark}% \def\@oddhead{{\slshape\rightmark}\hfil\thepage}% \let\@mkboth\@gobbletwo \let\@rubricmark\@gobble \let\@subrubricmark\@gobble } \DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} \DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} \DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} \DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} \DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} \DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl} \DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc} % % \end{macrocode} % ^^A \PrintChanges % \makeatletter{\let\markboth\@gobbletwo\PrintIndex}\makeatother % \Finale % % ^^A Local variables: % ^^A eval : (add-hook 'TeX-update-style-hook (lambda () (doxitems "option" "counter" "length" "lang" "if")) nil t) % ^^A End: % ^^A curve.dtx ends here.