1548 lines
64 KiB
TeX
1548 lines
64 KiB
TeX
% \iffalse -*- mode: LaTeX -*-
|
|
%
|
|
% curve.dtx --- Doc file for the CurVe package (code and documentation)
|
|
%
|
|
% Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Didier Verna.
|
|
% Copyright (C) 2008 Didier Verna
|
|
%
|
|
% Author: Didier Verna <didier@lrde.epita.fr>
|
|
% Maintainer: Didier Verna <didier@lrde.epita.fr>
|
|
% Created: Thu Dec 10 16:04:01 1998
|
|
% Last Revision: Mon Feb 25 17:55:12 2008
|
|
%
|
|
% This file is part of CurVe.
|
|
%
|
|
% CurVe may be distributed and/or modified under the
|
|
% conditions of the LaTeX Project Public License, either version 1.1
|
|
% of this license or (at your option) any later version.
|
|
% The latest version of this license is in
|
|
% http://www.latex-project.org/lppl.txt
|
|
% and version 1.1 or later is part of all distributions of LaTeX
|
|
% version 1999/06/01 or later.
|
|
%
|
|
% CurVe consists of the files listed in the file `README'.
|
|
%
|
|
%
|
|
% Commentary:
|
|
%
|
|
% Contents management by FCM version 0.1.
|
|
%
|
|
%
|
|
% Code:
|
|
%
|
|
%<*driver>
|
|
\documentclass[a4paper]{ltxdoc}
|
|
\newcommand{\curve}{%
|
|
\mbox{\fontfamily{ptm}\fontseries{b}\fontshape{it}\selectfont%
|
|
C%
|
|
\hspace{-.3ex}\protect\raisebox{-.3ex}{\textmd{u}}%
|
|
\hspace{-.1ex}\textmd{r}%
|
|
\hspace{-.2ex}V%
|
|
\hspace{-.6ex}\protect\raisebox{-.3ex}{\textmd{e}}}%
|
|
}
|
|
% \OnlyDescription
|
|
% \CodelineIndex
|
|
% \RecordChanges
|
|
\begin{document}
|
|
\DocInput{curve.dtx}
|
|
\end{document}
|
|
%</driver>
|
|
%
|
|
% \fi
|
|
%
|
|
% \catcode`\¡=14
|
|
% \CheckSum{1202}
|
|
%% \CharacterTable
|
|
%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
|
|
%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
|
|
%% Digits \0\1\2\3\4\5\6\7\8\9
|
|
%% Exclamation \! Double quote \" Hash (number) \#
|
|
%% Dollar \$ Percent \% Ampersand \&
|
|
%% Acute accent \' Left paren \( Right paren \)
|
|
%% Asterisk \* Plus \+ Comma \,
|
|
%% Minus \- Point \. Solidus \/
|
|
%% Colon \: Semicolon \; Less than \<
|
|
%% Equals \= Greater than \> Question mark \?
|
|
%% Commercial at \@ Left bracket \[ Backslash \\
|
|
%% Right bracket \] Circumflex \^ Underscore \_
|
|
%% Grave accent \` Left brace \{ Vertical bar \|
|
|
%% Right brace \} Tilde \~}
|
|
%
|
|
% \newcommand\version{1.15}
|
|
% \newcommand\releasedate{2008/02/25}
|
|
% \newcommand\packagecopyright{Copyright \copyright{} 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Didier Verna}
|
|
% \newcommand\auctex{AUC-\TeX}
|
|
% \newcommand\cv{\textsc{CV}}
|
|
% \MakeShortVerb{\|}
|
|
% \date{\today}
|
|
% \title{\curve{} -- a \LaTeXe{} class package for making \textbf{Cur}ricula
|
|
% \textbf{V}ita\textbf{e}.\thanks{This document describes \curve{} \version,
|
|
% release date \releasedate.}}
|
|
% \author{Didier Verna\\
|
|
% \texttt{mailto:didier@lrde.epita.fr}\\
|
|
% \texttt{http://www.lrde.epita.fr/\~{}didier}}
|
|
% \maketitle
|
|
%
|
|
%
|
|
% \begin{abstract}
|
|
% \curve{} provides a \LaTeXe{} class that hopefully will make your life
|
|
% easier when you want to write your \cv. It provides you with a set of
|
|
% commands to create rubrics, entries in these rubrics etc. \curve{} will
|
|
% then properly format your \cv{} for you (possibly splitting it onto
|
|
% multiple pages), which is usually the most painful part of \cv{} writing.
|
|
% Another nice feature of \curve{} is its ability to manage different \cv{}
|
|
% ``flavors'' simultaneously. It is in fact often the case that you want to
|
|
% maintain slightly divergent versions of your \cv{} at the same time, in
|
|
% order to emphasize on different aspects of your background.\par
|
|
% The \curve{} package is \packagecopyright{}, and distributed under the
|
|
% terms of the LPPL license.
|
|
% \end{abstract}
|
|
%
|
|
% \section{Getting \curve}
|
|
% \curve{} can be obtained from any \textsc{ctan} archive, in the
|
|
% \texttt{macros/latex/contrib} subdirectory. You can also download it
|
|
% directly from my website (online documentation available there), at the
|
|
% \textsc{url} above. Please follow the links on the left menu.
|
|
%
|
|
% If you are a Debian unstable user (unstable referring to Debian, not you),
|
|
% unofficial source and i386 packages are available (thanks to Geoffroy
|
|
% Fouquier for providing this facility). The package name is \texttt{curve}.
|
|
% Here's the \texttt{source.list} entry to use:
|
|
% \begin{verbatim}
|
|
% deb http://www.lrde.epita.fr/debian/ unstable/i386/
|
|
% deb-src http://www.lrde.epita.fr/debian/ sid/source/
|
|
% \end{verbatim}
|
|
%
|
|
% For installation instructions, please read the \texttt{README} file included
|
|
% in the distribution.
|
|
%
|
|
% \section{Frequently Asked Questions}
|
|
% If this is your first time with \curve, you might want to skip this section.
|
|
% Otherwise, please read on, especially before asking me by email\ldots
|
|
%
|
|
% \begin{enumerate}
|
|
% \item
|
|
% \textbf{Is there a way to align entries across several (all) rubrics?}\\
|
|
% Not automatically because rubrics are typeset as individual tables. There
|
|
% are many ways to manually ``trick'' too narrow keys in order to enlarge
|
|
% them however. As of version 1.11, \curve{} provides a new convenience
|
|
% macro to do something similar: see section \ref{sec:noentry}.
|
|
% \item
|
|
% \textbf{How can I change the interline spacing?}\\
|
|
% Internally, \curve{} uses \LaTeX{} tabular-based environments. As such,
|
|
% you can play with |\arraystretch| to modify the space between rows.
|
|
% \item
|
|
% \textbf{When a page break occurs in the middle of a rubric, the same
|
|
% alignment is kept on both pages, which might result in suboptimal
|
|
% layout.}\\
|
|
% This is a technical limitation of the automatic alignment computation
|
|
% process in longtables and I don't think there will be a solution anytime
|
|
% soon (page breaking is orthogonal to column width calculation). What you
|
|
% can do, once your CV is finalized, is manually split the concerned rubric
|
|
% into different ones, starting at the appropriate entries to avoid page
|
|
% breaking in the middle.
|
|
% \item
|
|
% \textbf{How can I make multi-line subrubrics?}\\
|
|
% Here are two ideas:
|
|
% \begin{itemize}
|
|
% \item Put your text in several consecutive subrubrics (one per line).
|
|
% However, this might not give you the desired vertical spacing.
|
|
% \item Probably better, put your material in a parbox:\\
|
|
% |\subrubric{\parbox{width}{first blah blah\\next blah blah}}|\\
|
|
% This is a bit dirty because you have to figure out a suitable width for
|
|
% your parbox, but this will work.
|
|
% \end{itemize}
|
|
% \item
|
|
% \textbf{How can I make multi-line keys?}\\
|
|
% The trick is to temporarily change the key cell type to a paragraph one
|
|
% (remember that we're in a tabular environment).
|
|
% \begin{enumerate}
|
|
% \item Recover the key formatting by doing something like this near
|
|
% the beginning of your document:\\
|
|
% |\makeatletter\let\mykeyfont\@keyfont\makeatother|
|
|
% \item Use something like this where you need a multi-line key (you will
|
|
% have to adjust the paragraph width manually):
|
|
% \begin{verbatim}
|
|
% \entry*[\multicolumn{1}{@{}>{\mykeyfont}p{2cm}}{%
|
|
% long key\newline long key}]
|
|
% Entry text. Entry text. Entry ...
|
|
% \end{verbatim}
|
|
% \end{enumerate}
|
|
% \item
|
|
% \textbf{How to deal with long keys?}\\
|
|
% The best thing to do is to make them multi-line manually. Please refer to
|
|
% the previous question.
|
|
% \item
|
|
% \textbf{Can I change the prefix locally?}\\
|
|
% Yes and no. The |\prefix| command can only be used in the preamble or
|
|
% between rubrics. Otherwise, there is currently no way to change the prefix
|
|
% for a single entry. This limitation will disappear in a future release.
|
|
% \end{enumerate}
|
|
%
|
|
% \section{Overview}
|
|
% The \curve{} package provides you with a document class for writing
|
|
% curricula vitae. The primary purpose of this package is to offer a set of
|
|
% predefined commands to specify the contents of your \cv, while removing from
|
|
% you the burden of formatting it. This has two important consequence however:
|
|
% \curve{} will impose that you conform to its document structuring scheme,
|
|
% and will expect that you like the way it formats things :-). If you prefer
|
|
% another structure for your \cv{}, or if you don't like the formatting
|
|
% (although it is highly configurable), then \curve{} is probably not for
|
|
% you.\par
|
|
% Once you have installed \curve{}, you might want to start with processing
|
|
% the example file \texttt{cv.tex}. This will give you an idea of what a non
|
|
% customized \cv{} looks like with \curve. You can also throw an eye to my
|
|
% own \cv, which is written with \curve{} and has some more fancy hackery on
|
|
% top of it. It's in French, but only the appearance is important for
|
|
% you\ldots My \cv{} can be found at
|
|
% \texttt{http://www.lrde.epita.fr/\~{}didier/perso/cv.php}.
|
|
%
|
|
% \subsection{Document Layout}
|
|
% A \curve{} \cv{} begins with two optional headers (upper left and upper
|
|
% right) in which you usually put your name, address, email, whether you're
|
|
% married and so on. These headers will respectively be left and right aligned.
|
|
% As of version 1.4, \curve{} lets you insert a small identity photo in the
|
|
% headers, either on the left, on the right, or between them. After these
|
|
% headers come an optional title and/or subtitle, which can be centered on
|
|
% the page, or flushed either left or right.
|
|
% \subsubsection{Rubrics}
|
|
% The remaining of the document is composed of sections called ``rubrics'' in
|
|
% the \curve{} terminology. A rubric represents a major topic that you want
|
|
% to detail in your \cv. Typical rubrics are ``Education'', ``Professional
|
|
% Experience'' and the like. Rubrics have a title (centered by default) and
|
|
% appear under the form of properly aligned ``entries'' (see below). If a
|
|
% rubric has to be split across different pages, its title will be repeated
|
|
% automatically.
|
|
% \subsubsection{Entries}
|
|
% An entry is
|
|
% an item of information related to the rubric under which it appears. An
|
|
% entry has a ``contents'', and an optional ``key'' under which it is
|
|
% classified. For instance, under the ``Education'' rubric, you could state
|
|
% that you got a Ph.D. in computer science in the year 2000. In that case, the
|
|
% year would be the entry's key, and the ``Ph.D. in computer science'' part
|
|
% would be the entry's contents. \curve{} aligns both keys and contents
|
|
% together. Keys are optional in order for you to classify several entries
|
|
% together (without repeating the same key over and over again).
|
|
% \subsubsection{Subrubrics}
|
|
% Additionally, you might want to further split your rubrics into
|
|
% ``subrubrics''. For instance, in my own \cv, I have a ``Professional
|
|
% Experience'' rubric, with three subrubrics: ``Teaching'', ``Research'' and
|
|
% ``Development''. This can be accomplished with a special command.
|
|
% Subrubrics are displayed in alignment with the entries' contents by default,
|
|
% but are formatted differently so that they remain distinguishable.
|
|
%
|
|
% \subsection{Document Structure}
|
|
% \subsubsection{Source File Splitting}
|
|
% \curve{} is based on the \texttt{LTXtable} package by David Carlisle. I
|
|
% won't go into gory details, but this has an important implication:
|
|
% \textbf{each rubric must be in its own separate file}. In other words, your
|
|
% \cv's main source file is really a skeleton whose major task is to include
|
|
% the different rubrics from their respective source files.\par
|
|
% This is not much of a hassle, really, and it actually made my life easier
|
|
% when I implemented the ``flavor'' mechanism described below.
|
|
% \subsubsection{The ``flavor'' Mechanism}
|
|
% It is often desirable to maintain several slightly divergent versions of
|
|
% one's \cv{} at the same time. For instance, when I was looking for a job some
|
|
% time ago, I had a version of my \cv{} emphasizing on Artificial Intelligence,
|
|
% and another emphasizing on Distributed Virtual Reality. Only the title and
|
|
% some entries in the ``Professional Experience'' rubric were a bit
|
|
% different; the main skeleton basically remained the same.\par
|
|
% \curve{} provides an easy-to-use mechanism for maintaining different
|
|
% ``flavors'' of your \cv{} at the same time. You basically write different
|
|
% versions of (some of) your rubrics in different files, tell \curve{} which
|
|
% flavor you want to format (\curve{} can even ask you which one to use
|
|
% directly) and that's it. \curve{} will use the global skeleton, and whenever
|
|
% it finds a rubric file specialized for that particular flavor, it will use
|
|
% it. Otherwise, it will simply fall back to the default one (no particular
|
|
% flavor).
|
|
%
|
|
%
|
|
% \section{Using \curve{}}
|
|
% First of all, please note that the \texttt{ltxtable} and \texttt{calc}
|
|
% packages are required. If you're using the identity photo feature, the
|
|
% \texttt{graphicx} package is also needed. You don't have to load them
|
|
% explicitly though. As long as \LaTeXe{} can locate them, they will be used
|
|
% automatically.
|
|
%
|
|
% \subsection{Writing the Skeleton File}
|
|
% Say |\documentclass[|\meta{options}|]{curve}| at the beginning of your
|
|
% skeleton file in order to use \curve. The available options are described
|
|
% along the text, where appropriate.
|
|
%
|
|
% \subsubsection{Making Headers}
|
|
% \DescribeMacro{\leftheader}\DescribeMacro{\rightheader}
|
|
% The |\leftheader| and |\rightheader| macros take one mandatory argument
|
|
% which defines respectively the contents of the upper left and upper right
|
|
% headers. They can be used in the document's preamble only. The headers will
|
|
% respectively be flushed to the left and to the right.
|
|
% \par
|
|
% \DescribeMacro{\photo}
|
|
% If you want to insert a small identity photo into the header part, you can
|
|
% use the |\photo| macro (available since version 1.4). It takes a mandatory
|
|
% argument in which you pass the image file name, as you would to
|
|
% |\includegraphics|. This macro also takes an optional argument which lets
|
|
% you specify the horizontal position of the photo: the values can be
|
|
% \texttt{l} (the default), \texttt{c} or \texttt{r} meaning that the photo
|
|
% will appear on the left, center, or right.
|
|
% \par
|
|
% \DescribeMacro{\photoscale}\DescribeMacro{\photosep}
|
|
% \DescribeMacro{\headerscale}
|
|
% The headers' horizontal layout is further controled by three additional
|
|
% macros. The |\photoscale| macro specifies the amount of text width that the
|
|
% photo should occupy. This should be a number between 0 and 1. By default,
|
|
% 0.1 is used (meaning 10\% of |\textwidth|). The |\photosep| macro is a
|
|
% \LaTeX{} length that specifies the space to leave between the side of the
|
|
% photo and the next headers's text. This is used only when the photo is on
|
|
% the left or right. By default, |10pt| is used. Finally, |\headerscale|
|
|
% specifies the proportion of the \emph{remaining} space that the \emph{left}
|
|
% textual header should occupy. It works like |\photoscale| and amounts to 0.5
|
|
% by default.
|
|
% \par
|
|
% Let me take an example to make this clearer. Suppose you have a |\photoscale|
|
|
% of 0.1 and a |\photosep| of \texttt{10pt}. The \emph{remaining} space, that
|
|
% is, the space occupied by the textual headers, amounts to 90\% of the text
|
|
% width, minus 10 points. If you then specify a |\headerscale| of 0.6, then
|
|
% the left header will take 60\% of that remaining space, and the right one the
|
|
% other 40\%.
|
|
% \par
|
|
% \DescribeMacro{\headerspace}
|
|
% |\headerspace| is the amount of extra vertical space to put after the
|
|
% headers. This is a \LaTeX{} length that defaults to \texttt{10pt}.\par
|
|
% \DescribeMacro{\makeheaders}
|
|
% If you have defined headers, make them appear by calling |\makeheaders| just
|
|
% after the beginning of your document. Note that calling this macro assumes
|
|
% that you have previously defined both headers (possibly empty, though).
|
|
% Otherwise, an error will be signaled. As of version 1.4, the |\makeheaders|
|
|
% command accepts an optional argument that controls the vertical alignment.
|
|
% When given, this argument must be either |t| (for top), |b| (for bottom) or
|
|
% |c| (for center; the default).
|
|
%
|
|
% \subsubsection{Making Titles}
|
|
% \DescribeMacro{\title}\DescribeMacro{\subtitle}
|
|
% The |\title| and |\subtitle| macros take one mandatory argument which
|
|
% define respectively your \cv's title and subtitle. They can be used in
|
|
% the document's preamble only.\par
|
|
% \DescribeMacro{\titlealignment}
|
|
% By default, titles are centered on the page. However, you can also have them
|
|
% aligned to the left or right side of the page. To specify your preferred
|
|
% title alignment, call |\titlealignment| with an argument of either
|
|
% \texttt{l}, \texttt{c} or \texttt{r}, the meaning of which should be
|
|
% obvious. You can also achieve the same effect by passing an optional
|
|
% argument to |\maketitle| (see below).\par
|
|
% \DescribeMacro{\titlespace}
|
|
% |\titlespace| is the amount of extra vertical space to put after the
|
|
% title(s). This is a \LaTeX{} length that defaults to \texttt{0pt}.\par
|
|
% \DescribeMacro{\titlefont}\DescribeMacro{\subtitlefont}
|
|
% The |\titlefont| and |\subtitlefont| macros take one mandatory argument
|
|
% which redefine the fonts to use for the title and the subtitle. They can be
|
|
% used in the document's preamble only. By default, |\Huge\bfseries| and
|
|
% |\Huge\itshape| are used respectively.\par
|
|
% \DescribeMacro{\maketitle}
|
|
% If you have defined a title (and possibly a subtitle), make it (them) appear
|
|
% by calling |\maketitle| after the beginning of your document, and just after
|
|
% |\makeheaders| if you happen use it. It is possible to omit the subtitle,
|
|
% but if you call |\maketitle| without having defined at least a title, an
|
|
% error will be signaled. |\maketitle| accepts an optional argument for
|
|
% specifying the title alignment scheme. This argument is the same as in
|
|
% |\titlealignment|, and takes precedence over it.
|
|
%
|
|
% \subsubsection{Choosing a Flavor}
|
|
% As you already know, each rubric must reside in its own separate file. For
|
|
% instance, if you have a ``Professional Experience'' rubric, you would write
|
|
% its contents into a file named \texttt{experience.tex}. The flavor mechanism
|
|
% works by assigning a pre-extension to rubric file names. For instance,
|
|
% suppose you want to make a special flavor of your \cv{} emphasizing on
|
|
% ``distributed virtual reality''. You would call this flavor ``dvr'', and
|
|
% write the modified ``Professional Experience'' rubric into a file named
|
|
% \texttt{experience.dvr.tex}.\par
|
|
% \DescribeMacro{\flavor}
|
|
% The |\flavor| macro takes one mandatory argument which specifies the flavor
|
|
% to use (in our example, \texttt{dvr}). Although this might be of little use,
|
|
% it is possible to change the flavor anywhere, even right in the middle of
|
|
% your \cv's skeleton.\par
|
|
% \DescribeEnv{ask}
|
|
% Instead of using the |\flavor| macro, you can make \curve{} ask you at
|
|
% run-time which flavor to use by passing the \texttt{ask} option to it.
|
|
%
|
|
% \subsubsection{Including Rubrics}
|
|
% Apart from making headers and titles, the body of your skeleton file will
|
|
% usually contain nothing but directives to include the different rubrics of
|
|
% your \cv.\par
|
|
% \DescribeMacro{\makerubric}
|
|
% To include a rubric in your document, use |\makerubric|. This macro takes
|
|
% one mandatory argument which specifies the rubric to include at that point.
|
|
% The argument actually corresponds to the rubric file name \textbf{without
|
|
% any extension}. Continuing our previous example, you would say
|
|
% |\makerubric{experience}|. First, \curve{} will try to find such a rubric
|
|
% file specific for the current flavor in use, (e.g.
|
|
% \texttt{experience.dvr.tex}). If that fails, it will fall back to a
|
|
% non-flavored file (here, \texttt{experience.tex}). This allows you to
|
|
% specialize only the required rubrics and use the default ones otherwise.\par
|
|
% \DescribeMacro{\rubricafterspace}
|
|
% As of version 1.12, \curve{} provides a new \LaTeX{} length,
|
|
% |\rubricafterspace| controlling the amount of extra vertical space to put
|
|
% after a rubric (hence, before the next one). The default is \texttt{0pt}.
|
|
%
|
|
% \subsection{Writing a Rubric File}
|
|
% \subsubsection{The \texttt{rubric} Environment}
|
|
% \DescribeEnv{rubric}
|
|
% The whole contents of a rubric file must be enclosed in a \texttt{rubric}
|
|
% environment. This environment takes one mandatory argument which specifies
|
|
% the rubric's title. When a rubric crosses several pages, its title is
|
|
% restated with a ``continuation'' text appended.\par
|
|
% \DescribeMacro{\rubricalignment}
|
|
% As of version 1.6, the rubric titles horizontal alignment can be changed
|
|
% thanks to the |\rubricalignment| macro. Possible values for its mandatory
|
|
% argument are |l|, |c| and |r| (meaning left, centered, or right relative to
|
|
% the whole text width), and |cl| and |cc| (meaning left or centered relative
|
|
% to the entries'contents). By default, rubric titles are centered (|c|).\par
|
|
% \DescribeMacro{\rubricfont}
|
|
% The |\rubricfont| macro takes one mandatory argument which redefines the
|
|
% font to use for rubric titles. By default, |\Large\bfseries| is used.\par
|
|
% \DescribeMacro{\rubricspace}
|
|
% |\rubricspace| is the amount of extra vertical space to put after the rubric
|
|
% title. This is a \LaTeX{} length that defaults to \texttt{10pt}.
|
|
%
|
|
% \subsubsection{Making Rubric Entries}
|
|
% \DescribeMacro{\entry}
|
|
% You create entries in your rubrics by calling the |\entry| macro. The first
|
|
% (optional) argument specifies the key, and the second (mandatory) one
|
|
% specifies the contents. Both keys and contents are aligned within each
|
|
% rubric.\par
|
|
% \DescribeMacro{\entry*}
|
|
% Actually, the |\entry| macro was somewhat ill-designed at the first place.
|
|
% The |rubric| environment pretty much behaves as an |itemize| one, hence the
|
|
% idea of using an |\item|-like syntax. As of version 1.2, \curve{} provides
|
|
% an |\entry*| macro which behaves like |\item| in lists: it takes the same
|
|
% first optional argument as the non starred version, but has no other
|
|
% argument. The entry's contents simply consists of the text following the
|
|
% macro call, up to the next |\entry|, |\entry*| or |\subrubric| (see
|
|
% below) call.\par
|
|
% \DescribeMacro{\keyalignment}
|
|
% As of version 1.7, entries'keys horizontal alignment can be changed thanks
|
|
% to the |\keyalignment| macro. Possible values for its mandatory argument are
|
|
% |l|, |c| and |r| (meaning left, centered, or right). By default, keys are
|
|
% left aligned (|l|).\par
|
|
% \DescribeMacro{\keyfont}
|
|
% The |\keyfont| macro takes one mandatory argument which redefines the font
|
|
% to use for the entries' keys. By default, the standard document font is
|
|
% used.\par
|
|
% \DescribeMacro{\prefix}
|
|
% Each entry's contents can be prefixed with a visual clue (a symbol for
|
|
% instance). This comes in handy to make a clear distinction between
|
|
% different entries sharing the same key (which is not repeated). The
|
|
% |\prefix| macro takes one mandatory argument which redefines the prefix to
|
|
% use. By default, |\textbullet| is used. Note that as of version 1.11,
|
|
% \curve{} forces the prefix to be empty in bibliographic entries (see section
|
|
% \ref{sec:biblio}).\par
|
|
% \DescribeEnv{skipsamekey}
|
|
% While maintaining your CV, you might end up reorganizing your entries and
|
|
% even get entries with the same key. Normally, \curve{} blindly prints the
|
|
% keys regardless of their values. If you don't want repetition, you would
|
|
% have to remove keys by hand which can be cumbersome. As of version 1.10,
|
|
% \curve{} can skip all but the first of a series of identical keys
|
|
% automatically, provided that you use the |skipsamekey| option. Note that as
|
|
% of version 1.11, \curve{} disables this mechanism in bibliography rubrics
|
|
% (see section \ref{sec:biblio}).\par
|
|
%
|
|
% \subsubsection{Making ``invisible'' entries\label{sec:noentry}}
|
|
% The most frequently asked question about \curve{} is probably whether it is
|
|
% possible to align entries across several rubrics. This is (currently) not
|
|
% possible automatically because rubrics are typeset as independant tables.
|
|
% However, a manual solution boils down to enlarging too narrow entries (keys,
|
|
% actually).\par
|
|
% \DescribeMacro{\noentry}
|
|
% As of version 1.11, \curve{} provides a convenience macro to ease
|
|
% this process: |\noentry|. This macro takes one mandatory argument; a key
|
|
% that will be used in the entries alignment calculation. However, this
|
|
% command will not produce any text.\par
|
|
% So if you want all your rubrics to share the same alignment, you typically
|
|
% spot the longest key in your CV, and issue a |\noentry{this long key}| in all
|
|
% other rubrics.
|
|
%
|
|
% \subsubsection{Making Subrubrics}
|
|
% \DescribeMacro{\subrubric}
|
|
% Within a single rubric, you can further separate entries into subrubrics.
|
|
% In order to do this, the |\subrubric| macro is provided. Its mandatory
|
|
% argument specifies the subrubric's title.\par
|
|
% \DescribeMacro{\subrubricalignment}
|
|
% As of version 1.6, the subrubrics horizontal alignment can be changed thanks
|
|
% to the |\subrubricalignment| macro. Possible values for its mandatory
|
|
% argument are |l|, |c| and |r| (meaning left, centered, or right relative to
|
|
% the whole text width), and |cl| and |cc| (meaning left or centered relative
|
|
% to the entries'contents). By default, subrubrics are left-aligned with the
|
|
% entries' contents (|cl|).\par
|
|
% \DescribeMacro{\subrubricfont}
|
|
% The |\subrubricfont| macro takes one mandatory argument which redefines the
|
|
% font to use for the subrubrics. By default, |\Large\itshape| is used.\par
|
|
% \DescribeMacro{\subrubricspace}
|
|
% \DescribeMacro{\subrubricbeforespace}
|
|
% |\subrubricspace| controls the amount of extra vertical space to put after
|
|
% subrubrics. This is a \LaTeX{} length that defaults to \texttt{5pt}.
|
|
% |\subrubricbeforespace| controls the amount of extra vertical space to put
|
|
% \textit{before} a subrubric when there are entries above. This is a \LaTeX{}
|
|
% length that defaults to \texttt{20pt}.
|
|
%
|
|
% \subsection{Bibliography\label{sec:biblio}}
|
|
% Most scientists include their own list of publications in their \cv, so
|
|
% \curve{} has support for different forms of bibliography.
|
|
% \subsubsection{Manual bibliography}
|
|
% The first thing you can do is create your own bibliography manually (I mean,
|
|
% just like an ordinary rubric), and although this may appear boring, I
|
|
% actually encourage people to do so for at least three reasons (only my
|
|
% opinion of course):
|
|
% \begin{itemize}
|
|
% \item A \cv{} should be strictly formatted and coherent in layout.
|
|
% Bibliography is no exception to this rule. In other words, it is prettier to
|
|
% have your publications formatted like the rest of your \cv.
|
|
% \item Automatic bibliography generation tools produce references, which is
|
|
% silly in a \cv{} because you don't actually reference your papers anywhere
|
|
% (or do you?). So better to sort them another way, like, by year of
|
|
% publication as I do in my own \cv.
|
|
% \item Manually adding, like, what? Half a dozen papers a year in your
|
|
% \cv{} is not that much of a burden after all.
|
|
% \end{itemize}
|
|
% \subsubsection{The \texttt{bibliography} environment}
|
|
% Some people however have expressed the wish of having standard bibliography
|
|
% support in \curve. Version 1.2 provides that.
|
|
% \DescribeEnv{thebibliography}
|
|
% \DescribeMacro{\bibitem}
|
|
% The standard |thebibliography| environment is now supported along with its
|
|
% |\bibitem| companion. The behavior is actually that of a |rubric|
|
|
% environment with its |\entry*| companion (with an empty prefix however).
|
|
% This fact has two implications: firstly, the argument to the environment is
|
|
% unused in \curve{} (but remains for compatibility with the rest of \LaTeX)
|
|
% because \curve{} itself formats the keys and contents properly aligned.
|
|
% Secondly, the bibliographic environment \textbf{must} reside in its own
|
|
% file, as any other rubric. Don't forget that if you happen to write the
|
|
% environment manually.\par
|
|
% \DescribeEnv{revbib}
|
|
% As of version 1.14, it is possible to count bibliographic items in a reverse
|
|
% order, which comes in handy when you display your publications from the most
|
|
% recent to the oldest one. The \texttt{revbib} option triggers this behavior.
|
|
% Note that this also works when you use \BibTeX{} (see below).
|
|
% \subsubsection{\BibTeX}
|
|
% \DescribeMacro{\nocite}
|
|
% \DescribeMacro{\bibliographystyle}
|
|
% \DescribeMacro{\bibliography}
|
|
% If you want to use \BibTeX, that's also possible of course. Do it as you
|
|
% would do in a random paper. You will probably issue a |\nocite{*}| command
|
|
% followed by a call to |\bibliography|. In \curve, this uses the |bbl| file
|
|
% as a rubric one.\par
|
|
% \subsubsection{Compatibility concerns}
|
|
% As of version 1.9, \curve{} is compatible with the |bibentry| package. Note
|
|
% however that there is an incompatibility between |bibentry| and |hyperref|,
|
|
% and a workaround described in the |hyperref| README file.
|
|
%
|
|
% As of version 1.12, \curve{} is compatible with the |multibbl| package.
|
|
%
|
|
% \subsection{Standard Class Features}
|
|
%
|
|
% \subsubsection{Page Size and layout}
|
|
% \DescribeEnv{a4paper}
|
|
% \DescribeEnv{a5paper}
|
|
% \DescribeEnv{b4paper}
|
|
% \DescribeEnv{letterpaper}
|
|
% \DescribeEnv{legalpaper}
|
|
% \DescribeEnv{executivepaper}
|
|
% \DescribeEnv{landscape}
|
|
% The \texttt{a4}, \texttt{a5}, \texttt{b4}, \texttt{letter}, \texttt{legal}
|
|
% and \texttt{executive} ``paper'' options allow you to select the type of
|
|
% page format you want. By default, \texttt{letterpaper} is used. The
|
|
% \texttt{landscape} options switches the horizontal and vertical settings.
|
|
% I'm not sure why I propose this option. Nobody wants to write a \cv{} in
|
|
% landscape mode, right?\par
|
|
%
|
|
% \DescribeEnv{oneside}
|
|
% \DescribeEnv{twoside}
|
|
% As of version 1.6, \curve{} also supports the standard \texttt{oneside} and
|
|
% \texttt{twoside} class options. By default, \texttt{oneside} is used. In
|
|
% \texttt{twoside} mode, odd and even pages have a different geometry and
|
|
% headings layout.
|
|
%
|
|
% \subsubsection{Font Size}
|
|
% \DescribeEnv{10pt}
|
|
% \DescribeEnv{11pt}
|
|
% \DescribeEnv{12pt}
|
|
% The \texttt{10pt}, \texttt{11pt} and \texttt{12pt} options let you choose
|
|
% the size of the default font you want to use. By default, \texttt{10pt} is
|
|
% used.
|
|
%
|
|
% \subsubsection{Output Mode}
|
|
% \DescribeEnv{final}
|
|
% \DescribeEnv{draft}
|
|
% In \texttt{draft} mode, a black rule will be drawn at the end of overfull
|
|
% lines (as done by standard classes). Due to \curve{} using the
|
|
% \texttt{LTXtable} package (and in case \texttt{longtable} prior to version 4
|
|
% is used by it), a call to |\setlongtables| is performed in \texttt{final}
|
|
% mode. Please refer to the next section for more information on this. By
|
|
% default, \texttt{final} is used.
|
|
%
|
|
% \subsubsection{Page styles}
|
|
% As of version 1.6, \curve{} supports the standard \LaTeX{} page style
|
|
% mechanism. Available styles are \texttt{empty}, \texttt{plain},
|
|
% \texttt{headings} and \texttt{myheadings}. These styles have their usual
|
|
% meaning, given that rubric and subrubric names are used for marking purpose
|
|
% (the equivalent of chapters and sections in books for instance).
|
|
% By default, the page style is \texttt{empty}.
|
|
%
|
|
% \subsubsection{Internationalization}
|
|
% \curve{} currently supports 12 languages via the following options:
|
|
% \texttt{english}, \texttt{french} (or \texttt{francais}), \texttt{spanish},
|
|
% \texttt{portuguese} (or \texttt{portuges}), \texttt{brazilian} (or
|
|
% \texttt{brazil}), \texttt{italian}, \texttt{german}, \texttt{ngerman},
|
|
% \texttt{dutch}, \texttt{danish}, \texttt{swedish} and \texttt{polish}. The
|
|
% \texttt{german} and \texttt{ngerman} options are currently equivalent; so
|
|
% are the \texttt{portuguese} and \texttt{brazilian} ones.\par
|
|
% If you want a finer grain on the language-dependent parts of \curve, the
|
|
% following macros are provided.\par
|
|
% \DescribeMacro{\continuedname}
|
|
% The |\continuedname| macro takes one mandatory argument which redefines the
|
|
% continuation text output when rubrics extend across several pages. By
|
|
% default, ``\meta{space}(continued)'' is used in English. Although this might
|
|
% be of little use, it is possible to change the continuation text in the
|
|
% middle of your document, provided that you do so outside the |rubric|
|
|
% environment.\par
|
|
% \DescribeMacro{\listpubname}
|
|
% The |\listpubname| macro takes one mandatory argument which redefines the
|
|
% title of the bibliographic section (when you use the provided bibliography
|
|
% support). By default, ``List of Publications'' is used in English. Note that
|
|
% for compatibility with the |multibbl| and |multibib| packages, \curve{}
|
|
% honors the existence of |\bibname| or |\refname| macros prior to
|
|
% |\listpubname| for deciding which title to give to the bibliographic rubric.
|
|
%
|
|
%
|
|
% \section{Hints, Tricks, Tips}
|
|
% Here are some tips that I use for my own \cv. You might find them of some
|
|
% interest.\par
|
|
%
|
|
% \subsection{Page Geometry}
|
|
% First of all, it is common to have very thin margins in curricula vitae.
|
|
% \curve{} does not do anything special about this because I don't think that
|
|
% belongs to its duty. The \texttt{geometry} package comes in handy if you
|
|
% want to reduce your margins.
|
|
%
|
|
% \subsection{Vertical spacing}
|
|
% Although they might look a bit like itemize environments, \curve{} rubrics
|
|
% are implemented with tables. This has an important consequence: empty lines
|
|
% in rubrics do affect the vertical spacing of your document (at least for the
|
|
% time being).
|
|
%
|
|
% You might be tempted to leave such empty lines here and there for
|
|
% readability, or for this precise effect it has on vertical spacing, but I
|
|
% advise you against this. Better to stick entries and subrubrics together,
|
|
% and play with the spacing commands to achieve the desired layout. This will
|
|
% ensure a more consistent layout with future versions of \curve.
|
|
%
|
|
% If you are using \BibTeX{}, you should also be aware of the fact that some
|
|
% \BibTeX{} styles output empty lines between |\bibitem|'s, and this has an
|
|
% unfortunate influence on vertical spacing for the same technical reason. If
|
|
% this vertical space annoys you, what you can do is modify the \BibTeX{}
|
|
% style in order to avoid the production of these empty lines. For instance,
|
|
% in |plain.bst|, this simply boils down to removing the call to |newline$| at
|
|
% the beginning of the |output.bibitem| function.
|
|
%
|
|
% \subsection{The \texttt{ltx} Extension}
|
|
% Personally, I prefer to keep \texttt{.tex} for \TeX{} files, and use the
|
|
% \texttt{ltx} extension for \LaTeX. This is supported by \curve{} which will
|
|
% actually prefer \texttt{ltx} files over \texttt{tex} ones, especially when
|
|
% including rubrics. To be more precise, suppose you are building a flavor
|
|
% \texttt{flv} of your \cv. A call to |\makerubric{foo}| will try to use the
|
|
% following files in that order:\\
|
|
% \texttt{foo.flv.ltx}\\
|
|
% \texttt{foo.flv.tex}\\
|
|
% \texttt{foo.ltx}\\
|
|
% \texttt{foo.tex}\par
|
|
%
|
|
% \subsection{Longtable}
|
|
% \curve{} users should be aware of the fact that the layout implementation is
|
|
% based on the \texttt{LTXtable} package, which in turn is a mix of
|
|
% \texttt{tabularx} and \texttt{longtable}. This has several implications,
|
|
% most notably that when writing a rubric, you are actually inside a tabular
|
|
% environment. Here are some things to keep in mind:
|
|
% \begin{itemize}
|
|
% \item You are not allowed to use the |\\| command to start a new line.
|
|
% However, you're free to use |\par| in your entries'contents instead. Note
|
|
% that \curve{} sets |\parskip| to |0pt| so that starting a new paragraph
|
|
% looks like just starting a new line.
|
|
% \item You can use |\raggedright| and |\raggedleft| in your entries.
|
|
% \item You can use |\pagebreak|, |\nopagebreak| and |\newpage| at the
|
|
% beginning of a line, just before starting a new entry.
|
|
% \item Prior to version 4, \texttt{longtable} used an alignment mechanism
|
|
% involving calls to |\setlongtables| (see its documentation). \curve{}
|
|
% retains this for backward compatibility and still calls |\setlongtables|
|
|
% in final (not draft) mode. If your version of \texttt{longtable} is recent
|
|
% enough, you shouldn't be concerned by this. If it is older, you might need
|
|
% to process your document a few times in draft mode, and then one last time
|
|
% in final mode. However, keep in mind that in both cases, you might still
|
|
% need up to 3 or 4 passes of \LaTeX{} on your document.
|
|
% \end{itemize}
|
|
%
|
|
% \subsection{Managing Different Flavors}
|
|
% If you maintain different flavors of your \cv{} at the same time, you
|
|
% probably want to rebuild all of them after any modification. Since you have
|
|
% a single skeleton file for all of them (say, \texttt{cv.tex}), the output
|
|
% file will have the same name for all flavors (say, \texttt{cv.dvi}). This
|
|
% can bother you if you want all flavors of your formatted \cv{} available at
|
|
% the same time.\par
|
|
% To remedy this problem, I usually use the \texttt{ask} option and a
|
|
% makefile to build the different flavors and move the output file to
|
|
% flavor-specific name. Here is a typical makefile target that should clarify
|
|
% (or maybe darken?) what I am saying:
|
|
% \begin{verbatim}
|
|
%cv.$(FLAVOR).dvi: cv.ltx $(RUBRICS)
|
|
% echo $(FLAVOR) | latex cv.ltx
|
|
% mv cv.dvi $@
|
|
% \end{verbatim}
|
|
% As you can see, the shell is responsible for answering the question.
|
|
%
|
|
% \subsection{More On Flavors}
|
|
% In order to implement the flavor mechanism, the \LaTeX{} macro |\input| has
|
|
% been redefined to look for ``flavored'' files first. This is actually very
|
|
% nice because you can use it if you want to make different flavors of text
|
|
% that does not belong in rubrics.\par
|
|
% For instance, suppose you want a special version of the subtitle of your
|
|
% \cv{} for the flavor \texttt{flv}. Create a file called
|
|
% \texttt{subtitle.flv.ltx} and put something like
|
|
% ``|\subtitle{special subtitle}|'' in it. Do something similar for the
|
|
% default subtitle. Now go to the skeleton of your \cv, and write
|
|
% |\input{subtitle}| in the preamble. That's it. You'll have different
|
|
% subtitles in your different \cv{} flavors.
|
|
%
|
|
%
|
|
% \section{\auctex{} support}
|
|
% \auctex{} is a powerful major mode for editing \TeX{} documents in
|
|
% \textsf{Emacs} or \textsf{XEmacs}. In particular, it provides automatic
|
|
% completion of macro names once they are known. \curve{} supports \auctex{}
|
|
% by providing a style file named \texttt{curve.el} which contains \auctex{}
|
|
% definitions for the relevant macros. This file should be installed to a
|
|
% location where \auctex{} can find it (usually in a subdirectory of your
|
|
% \LaTeX{} styles directory). Please refer to the \auctex{} documentation for
|
|
% more information on this.\par
|
|
% As of version 1.2, \curve{} has an improved \auctex{} support. Most notably,
|
|
% the command |M-Ret| will insert an |\entry*| macro within a |rubric|
|
|
% environment. Also, the |\makerubric| macro handling now removes both the
|
|
% file extension and the file flavor extension.
|
|
%
|
|
%
|
|
% \section{Changes}
|
|
% \begin{itemize}
|
|
% \item[v1.15] Support for itemize environments, suggested by Mirko Hessel-von
|
|
% Molo\\
|
|
% Added some documentation about vertical spacing problems in |bbl| files,
|
|
% suggested by Seweryn Habdank-Wojew\'odzki
|
|
% \item[v1.14] Support for reverse counting bibliographic entries, suggested
|
|
% by Joseph Wright\\
|
|
% Support for Polish thanks to Radek Dominiak\\
|
|
% |<radoslaw.dominiak@gmail.com>|
|
|
% \item[v1.13] Support for title alignment, suggested by Lars Kasper\\
|
|
% Support for footnotes, suggested by Alain Coletta\\
|
|
% Let rubrics honor the current |\linewidth|\\
|
|
% Changed default value of |\subrubricbeforespace| to \texttt{20pt}\\
|
|
% Fix some overfull boxes, reported by Nico Schl\"olmer\\
|
|
% FAQ and documentation update
|
|
% \item[v1.12] Support for Swedish thanks to Konrad Skeri Persson\\
|
|
% |<konrad@skeri.com>|\\
|
|
% New customizable length |\rubricafterspace| defining the space between
|
|
% each rubric\\
|
|
% Fix incompatibilities with the |multibbl| package.\\
|
|
% Honor bibliography titles (if) provided by |multibib| or |multibbl|\\
|
|
% New command |\today|\\
|
|
% FAQ update\\
|
|
% Fix implementation of \texttt{skipsamekey} option
|
|
% \item[v1.11] New FAQ section in the documentation\\
|
|
% New command |\noentry| to manually enlarge too narrow rubrics\\
|
|
% Make |\pagebreak|, |\nopagebreak| and |\newpage| work in rubrics,
|
|
% suggested by Alexandre Duret-Lutz\\
|
|
% Fix spurious right margin spaces\\
|
|
% Fix usage of the bib counter, disable |skipsamekey| and the prefix in
|
|
% bibliographic entries
|
|
% \item[v1.10] Support automatic skipping of identical keys, suggested by Akim
|
|
% Demaille\\
|
|
% Fix alignment problem with empty prefix, reported by Jonas Haulin
|
|
% \item[v1.9] Fix incompatibilities with the |bibentry| package, reported by
|
|
% Joris Desmet\\
|
|
% Fix standard bibliography support (broken in v1.8)
|
|
% \item[v1.8] Prevent page breaks after subrubric headings
|
|
% \item[v1.7] Support for key horizontal alignment\\
|
|
% |\raggedleft| and |\raggedright| can now be used within individual
|
|
% entries\\
|
|
% Fix typo in Danish version of |\continuedname|
|
|
% \item[v1.6] Support for rubric and subrubric titles horizontal alignment\\
|
|
% Support for standard \LaTeX{} page style mechanism\\
|
|
% Support for \texttt{oneside} and \texttt{twoside} options\\
|
|
% Support for Portuguese thanks to Adiel Mittmann |<adiel@inf.ufsc.br>|\\
|
|
% Fix bug in |\bibliography|: protect against non existant files, reported
|
|
% by Andrew Comport\\
|
|
% Fix conflict with \texttt{hyperref} in some bibliography definitions
|
|
% \item[v1.5] Support for Dutch thanks to Thomas Delaet\\
|
|
% |<Thomas.Delaet@student.kuleuven.ac.be>|\\
|
|
% Fix typo in rubric environment, reported by Torsten Liesk
|
|
% \item[v1.4] Support for photo inclusion\\
|
|
% Support for headers horizontal scaling\\
|
|
% Optional argument to |\makeheaders| for vertical alignment,
|
|
% suggested by Dan Luecking
|
|
% \item[v1.3] Support for Danish thanks to Kim Rud Bille
|
|
% |<krbi01@control.auc.dk>|
|
|
% \item[v1.2] Support for standard bibliography mechanism(s)\\
|
|
% New macro |\entry*|\\
|
|
% Improvements in \auctex{} support\\
|
|
% Support for German thanks to Harald Harders |<h.harders@tu-bs.de>|\\
|
|
% Support for Spanish thanks to Agust\'in Mart\'in |<agusmba@terra.es>|
|
|
% \item[v1.1] Support for Italian thanks to Riccardo Murri
|
|
% |<murri@phc.unipi.it>|
|
|
% \end{itemize}
|
|
%
|
|
%
|
|
% \StopEventually{\par Well, I think that's it. Enjoy using \curve{}!
|
|
% \vfill\hfill\small\packagecopyright{}.}
|
|
%
|
|
%
|
|
% \section{The Code}
|
|
% First, the class announcement and the initial requirements:
|
|
% \begin{macrocode}
|
|
\NeedsTeXFormat{LaTeX2e}
|
|
\ProvidesClass{curve}[2008/02/25 v1.15
|
|
Curriculum Vitae class for LaTeX2e]
|
|
|
|
\RequirePackage{ltxtable}
|
|
\RequirePackage{ifthen}
|
|
\RequirePackage{calc}
|
|
|
|
% \end{macrocode}
|
|
%
|
|
% \subsection{The Rubric File}
|
|
% We don't want to output an extra |subrubricbeforespace| if no entry is
|
|
% present before the subrubric. This is done by using an |\@beforespace|
|
|
% command which is set to |0pt| at the beginning of each rubric, and switched
|
|
% to the proper value when an entry is added.\par
|
|
% The |@nextentry| command is used to implement |\entry*| while maintaining
|
|
% backward compatibility with |\entry| and |\subrubric|. A new entry or
|
|
% a subrubric might have to close the preceding entry if it was opened using
|
|
% the starred form.
|
|
% \begin{macrocode}
|
|
\gdef\@nextentry{}
|
|
|
|
% \end{macrocode}
|
|
% \subsubsection{Entries}
|
|
% \DescribeMacro{\keyfont}
|
|
% \begin{macrocode}
|
|
\def\@keyfont{}
|
|
\newcommand\keyfont[1]{\gdef\@keyfont{#1}}
|
|
|
|
% \end{macrocode}
|
|
% \DescribeMacro{\keyalignment}
|
|
% \begin{macrocode}
|
|
\newcolumntype{k}{>{\@keyfont}l}
|
|
\newcommand\keyalignment[1]{%
|
|
\ifthenelse{\equal{#1}{l}}{}{%
|
|
\ifthenelse{\equal{#1}{r}}{}{%
|
|
\ifthenelse{\equal{#1}{c}}{}{%
|
|
\ClassError{curve}{Invalid key alignment}{%
|
|
You have called \protect\keyalignment\space with an invalid value.%
|
|
\MessageBreak
|
|
Valid options include l, c, and r.\MessageBreak
|
|
Type X <return> to quit, fix the typo, and rerun LaTeX.}}}}%
|
|
\newcolumntype{k}{>{\@keyfont}#1}}
|
|
|
|
% \end{macrocode}
|
|
% \DescribeMacro{\prefix}
|
|
% \begin{macrocode}
|
|
\def\@prefix{\textbullet}
|
|
\newcommand\prefix[1]{\gdef\@prefix{#1}}
|
|
|
|
% \end{macrocode}
|
|
% \DescribeMacro{\entry}
|
|
% As of version 1.10, \curve{} can skip keys identical to the previous one, if
|
|
% the option |skipsamekey| is used.
|
|
% \begin{macrocode}
|
|
\def\@maybekey#1{%
|
|
\def\@newkey{#1}%
|
|
\ifx\@previouskey\@newkey\gdef\@@key{}\else%
|
|
\gdef\@@key{#1}\gdef\@previouskey{#1}%
|
|
\fi}
|
|
|
|
\def\@alwayskey#1{%
|
|
\gdef\@@key{#1}}
|
|
|
|
\let\@key\@alwayskey
|
|
\DeclareOption{skipsamekey}{\let\@key\@maybekey}
|
|
|
|
\newcommand\@entry[2][]{%
|
|
\gdef\@nextentry{}\@key{#1}%
|
|
\egroup% end of \noalign opened in \entry.
|
|
\@@key&\@prefix\\\par}
|
|
|
|
\newcommand\@sentry[1][]{%
|
|
\gdef\@nextentry{\\\par}\@key{#1}%
|
|
\egroup% end of \noalign opened in \entry.
|
|
\@@key&\@prefix&}
|
|
|
|
\newcommand\entry{%
|
|
\@nextentry
|
|
\noalign\bgroup\gdef\@beforespace{\subrubricbeforespace}%
|
|
\@ifstar{\@sentry}{\@entry}}
|
|
|
|
% \end{macrocode}
|
|
% \DescribeMacro{\noentry}
|
|
% This macro is a wrapper around |\kill| to manually adjust too narrow rubrics.
|
|
% \begin{macrocode}
|
|
\newcommand\noentry[1]{\@nextentry
|
|
\noalign{\gdef\@nextentry{}}#1&&\kill}
|
|
|
|
% \end{macrocode}
|
|
%
|
|
% \subsubsection{Subrubrics}
|
|
% \DescribeMacro{\subrubricfont}
|
|
% \DescribeMacro{\subrubricbeforespace}
|
|
% \DescribeMacro{\subrubricspace}
|
|
% \begin{macrocode}
|
|
\def\@subrubricfont{\Large\itshape}
|
|
\newcommand\subrubricfont[1]{\gdef\@subrubricfont{#1}}
|
|
|
|
\newlength\subrubricbeforespace
|
|
\setlength\subrubricbeforespace{20pt}
|
|
|
|
\newlength\subrubricspace
|
|
\setlength\subrubricspace{5pt}
|
|
|
|
% \end{macrocode}
|
|
% \DescribeMacro{\subrubricalignment}
|
|
% \DescribeMacro{\subrubric}
|
|
% Note that |\@subrubricmark| is called outside the raisebox. That's because
|
|
% otherwise, the mark would not go to the toplevel page vertical box, and
|
|
% \TeX{} would not notice it.
|
|
% \begin{macrocode}
|
|
\let\@subrubricmark\@gobble
|
|
|
|
\def\@@subrubric#1{%
|
|
\rule{0bp}{\@beforespace}
|
|
{\@subrubricfont#1}
|
|
\@subrubricmark{#1}}
|
|
|
|
% \end{macrocode}
|
|
% The normal intercolumn space between the prefix and the entry's content is
|
|
% replaced with an unbreakable space. This causes a problem (fixed in version
|
|
% 1.10) with the [sub]rubric alignments cl and cc when the prefix is empty,
|
|
% because the unbreakable space in question slightly shifts the entry's
|
|
% content to the right. If we want a proper alignment, we then have to take
|
|
% this offset into account in the cl and cc multicolumns, for both rubrics and
|
|
% subrubrics. The following macro implements this:
|
|
% \begin{macrocode}
|
|
|
|
\def\@clcccolsep{\hspace{\tabcolsep}\ifx\@prefix\@empty~\fi}
|
|
|
|
\def\@subrubric@l#1{\multicolumn{3}{@{}l@{}}{\@@subrubric{#1}}}
|
|
\def\@subrubric@c#1{\multicolumn{3}{@{}c@{}}{\@@subrubric{#1}}}
|
|
\def\@subrubric@r#1{\multicolumn{3}{@{}r@{}}{\@@subrubric{#1}}}
|
|
\def\@subrubric@cl#1{&\multicolumn{2}{@{\@clcccolsep}l@{}}{\@@subrubric{#1}}}
|
|
\def\@subrubric@cc#1{&\multicolumn{2}{@{\@clcccolsep}c@{}}{\@@subrubric{#1}}}
|
|
|
|
\let\@subrubric\@subrubric@cl
|
|
|
|
\newcommand\subrubricalignment[1]{%
|
|
\def\@curve@temp@a{\let\@subrubric}
|
|
\expandafter\@curve@temp@a\csname @subrubric@#1\endcsname
|
|
\@ifundefined{@subrubric}{%
|
|
\ClassError{curve}{Invalid subrubric alignment}{%
|
|
You have called \protect\subrubricalignment\space with an invalid value.%
|
|
\MessageBreak
|
|
Valid options include l, c, r, cl and cc.\MessageBreak
|
|
Type X <return> to quit, fix the typo, and rerun LaTeX.}}
|
|
}
|
|
|
|
\newcommand\subrubric[1]{%
|
|
\@nextentry
|
|
\noalign{\gdef\@nextentry{}}%
|
|
\@subrubric{#1}\\*[\subrubricspace]\par}
|
|
|
|
% \end{macrocode}
|
|
% \subsubsection{Rubrics}
|
|
% The |\@almosttextwidth| length remains only for backward compatibility. It
|
|
% is not used anymore.
|
|
% \DescribeMacro{\rubricfont}
|
|
% \DescribeMacro{\rubricspace}
|
|
% \begin{macrocode}
|
|
\newlength{\@almosttextwidth}
|
|
\AtBeginDocument{\setlength\@almosttextwidth{\textwidth-\hfuzz}}
|
|
|
|
\def\@rubricfont{\Large\bfseries}
|
|
\newcommand\rubricfont[1]{\gdef\@rubricfont{#1}}
|
|
|
|
\newlength\rubricspace
|
|
\setlength\rubricspace{10pt}
|
|
|
|
% \end{macrocode}
|
|
% \DescribeMacro{\rubricalignment}
|
|
% \begin{macrocode}
|
|
\def\@@rubrichead#1{\@rubricfont#1}
|
|
|
|
\def\@rubrichead@l#1{\multicolumn{3}{@{}l@{}}{\@@rubrichead{#1}}}
|
|
\def\@rubrichead@c#1{\multicolumn{3}{@{}c@{}}{\@@rubrichead{#1}}}
|
|
\def\@rubrichead@r#1{\multicolumn{3}{@{}r@{}}{\@@rubrichead{#1}}}
|
|
\def\@rubrichead@cl#1{&\multicolumn{2}{@{\@clcccolsep}l@{}}{\@@rubrichead{#1}}}
|
|
\def\@rubrichead@cc#1{&\multicolumn{2}{@{\@clcccolsep}c@{}}{\@@rubrichead{#1}}}
|
|
|
|
\let\@rubrichead\@rubrichead@c
|
|
|
|
\newcommand\rubricalignment[1]{%
|
|
\def\@curve@temp@a{\let\@rubrichead}
|
|
\expandafter\@curve@temp@a\csname @rubrichead@#1\endcsname
|
|
\@ifundefined{@rubrichead}{%
|
|
\ClassError{curve}{Invalid rubric alignment}{%
|
|
You have called \protect\rubricalignment\space with an invalid value.%
|
|
\MessageBreak
|
|
Valid options include l, c, r, cl and cc.\MessageBreak
|
|
Type X <return> to quit, fix the typo, and rerun LaTeX.}}
|
|
}
|
|
|
|
% \end{macrocode}
|
|
% \DescribeMacro{\rubricafterspace}
|
|
% \begin{macrocode}
|
|
\newlength\rubricafterspace
|
|
\setlength\rubricafterspace{0pt}
|
|
|
|
% \end{macrocode}
|
|
% \DescribeEnv{rubric}
|
|
% Marking commands don't seem to work in longtable headings. So the rubric
|
|
% mark is issued just after it.\par
|
|
% As of version 1.7, |\raggedleft| and |\raggedright| are redefined in order
|
|
% to work within individual entries. This redefinition simply consists in
|
|
% removing the |\\| definition since it's not available anyway, and also to
|
|
% remove the |\parskip| setting since it's |Opt| in the whole class.
|
|
% \begin{macrocode}
|
|
\let\@rubricmark\@gobble
|
|
|
|
\newenvironment{rubric}[1]{%
|
|
%% \begin{rubric}
|
|
\def\raggedright{%
|
|
\@rightskip\@flushglue\rightskip\@rightskip\leftskip\z@skip}%
|
|
\def\raggedleft{%
|
|
\rightskip\z@skip\leftskip\@flushglue\parfillskip\z@skip}%
|
|
\gdef\@beforespace{0pt}%
|
|
\gdef\@nextentry{}%
|
|
\gdef\@previouskey{}%
|
|
\global\let\old@newpage\newpage%
|
|
\global\let\old@pagebreak\pagebreak%
|
|
\global\let\old@nopagebreak\nopagebreak
|
|
\begin{longtable}{@{}kl@{~}X@{}}
|
|
\@rubrichead{#1}\\*[\rubricspace]
|
|
\endfirsthead
|
|
\@rubrichead{#1\@continuedname}\\*[\rubricspace]
|
|
\endhead
|
|
\noalign{\@rubricmark{#1}%
|
|
\global\let\in@newpage\newpage%
|
|
\global\let\in@pagebreak\pagebreak%
|
|
\global\let\in@nopagebreak\nopagebreak%
|
|
\gdef\newpage{\@nextentry\noalign{\gdef\@nextentry{}}\in@newpage}
|
|
\gdef\pagebreak{\@nextentry\noalign{\gdef\@nextentry{}}\in@pagebreak}
|
|
\gdef\nopagebreak{\@nextentry\noalign{\gdef\@nextentry{}}\in@nopagebreak}}}{%
|
|
%% \end{rubric}
|
|
\@nextentry
|
|
\end{longtable}\par\vspace\rubricafterspace
|
|
\global\let\newpage\old@newpage%
|
|
\global\let\pagebreak\old@pagebreak%
|
|
\global\let\nopagebreak\old@nopagebreak}
|
|
|
|
% \end{macrocode}
|
|
% \DescribeMacro{\continuedname}
|
|
% \begin{macrocode}
|
|
\newcommand\continuedname[1]{\gdef\@continuedname{#1}}
|
|
|
|
% \end{macrocode}
|
|
%
|
|
% \subsection{The Skeleton File}
|
|
%
|
|
% \subsubsection{Utilities}
|
|
% \DescribeMacro{\today}
|
|
% \begin{macrocode}
|
|
\def\today{\ifcase\month\or
|
|
January\or February\or March\or April\or May\or June\or
|
|
July\or August\or September\or October\or November\or December\fi
|
|
\space\number\day, \number\year}
|
|
|
|
% \end{macrocode}
|
|
% \subsubsection{Headers}
|
|
% \DescribeMacro{\headerscale}
|
|
% \DescribeMacro{\headerspace}
|
|
% \begin{macrocode}
|
|
\def\header@scale{.5}
|
|
\newcommand\headerscale[1]{\gdef\header@scale{#1}}
|
|
\@onlypreamble\headerscale
|
|
|
|
\newlength\headerspace
|
|
\setlength\headerspace{10pt}
|
|
|
|
% \end{macrocode}
|
|
% \DescribeMacro{\leftheader}
|
|
% \DescribeMacro{\rightheader}
|
|
% If the user calls |\makeheaders| without specifying headers first, an error
|
|
% will be generated. The same applies for the title (not the subtitle), but
|
|
% this is already managed by \LaTeX{} itself.
|
|
% \begin{macrocode}
|
|
\def\@leftheader{%
|
|
\ClassError{curve}{No \protect\leftheader\space given}{%
|
|
You have called \protect\makeheaders, %
|
|
but you didn't provide a left header.\MessageBreak
|
|
Type X <return> to quit, add a call to \protect\lefheader\space %
|
|
in the preamble of your CV,\MessageBreak
|
|
and rerun LaTeX.}}
|
|
\newcommand\leftheader[1]{\gdef\@leftheader{#1}}
|
|
\@onlypreamble\leftheader
|
|
|
|
\def\@rightheader{%
|
|
\ClassError{curve}{No \protect\rightheader\space given}{%
|
|
You have called \protect\makeheaders, %
|
|
but you didn't provide a right header.\MessageBreak
|
|
Type X <return> to quit, add a call to \protect\rightheader\space %
|
|
in the preamble of your CV,\MessageBreak
|
|
and rerun LaTeX.}}
|
|
\newcommand\rightheader[1]{\gdef\@rightheader{#1}}
|
|
\@onlypreamble\rightheader
|
|
|
|
% \end{macrocode}
|
|
% \DescribeMacro{\photoscale}
|
|
% \DescribeMacro{\photosep}
|
|
% \DescribeMacro{\photo}
|
|
% \begin{macrocode}
|
|
\def\photo@scale{.1}
|
|
\newcommand\photoscale[1]{\gdef\photo@scale{#1}}
|
|
\@onlypreamble\photoscale
|
|
|
|
\newlength\photosep
|
|
\setlength\photosep{10pt}
|
|
|
|
\newcommand\photo[2][l]{%
|
|
\RequirePackage{graphicx}
|
|
\ifthenelse{\equal{#1}{l}}{}{%
|
|
\ifthenelse{\equal{#1}{r}}{}{%
|
|
\ifthenelse{\equal{#1}{c}}{}{%
|
|
\ClassError{curve}{Invalid argument to \protect\photo}{%
|
|
Argument 2 of \protect\photo must be `l', `r' or `c'.}}}}%
|
|
\def\tmp@cmd{\global\let\makeheaders@}
|
|
\expandafter\tmp@cmd\csname makeheaders@#1\endcsname
|
|
\gdef\photo@file{#2}}
|
|
\@onlypreamble\photo
|
|
|
|
% \end{macrocode}
|
|
% \DescribeMacro{\makeheaders}
|
|
% These different versions of the photo inclusion command exist for proper
|
|
% alignment of the picture itself with the left and right headers.
|
|
% \begin{macrocode}
|
|
\newlength\photo@width
|
|
|
|
\def\includephoto@t{%
|
|
\raisebox{.7\baselineskip-\height}{%
|
|
\includegraphics[width=\photo@width]{\photo@file}}}
|
|
|
|
\def\includephoto@c{%
|
|
\raisebox{-.5\height}{%
|
|
\includegraphics[width=\photo@width]{\photo@file}}}
|
|
|
|
\def\includephoto@b{\includegraphics[width=\photo@width]{\photo@file}}
|
|
|
|
% \end{macrocode}
|
|
% And here are the different versions of the |\makeheaders| command:
|
|
% \begin{macrocode}
|
|
\newlength\leftheader@width
|
|
\newlength\rightheader@width
|
|
|
|
\def\makeheaders@l#1{%
|
|
\setlength\photo@width{\photo@scale\textwidth}
|
|
\setlength\leftheader@width{%
|
|
(\textwidth - \photo@width - \photosep) * \real{\header@scale}}
|
|
\setlength\rightheader@width{%
|
|
\textwidth - \photo@width - \photosep - \leftheader@width}
|
|
\parbox[#1]{\photo@width + \photosep}{\includephoto@\hspace\photosep}%
|
|
\parbox[#1]{\leftheader@width}{\@leftheader}%
|
|
\parbox[#1]{\rightheader@width}{\raggedleft\@rightheader}}
|
|
|
|
\def\makeheaders@c#1{%
|
|
\setlength\photo@width{\photo@scale\textwidth}
|
|
\setlength\leftheader@width{(\textwidth - \photo@width) * \real{.5}}
|
|
\setlength\rightheader@width{\leftheader@width}
|
|
\parbox[#1]{\leftheader@width}{\@leftheader}%
|
|
\parbox[#1]{\photo@width}{\includephoto@}%
|
|
\parbox[#1]{\rightheader@width}{\raggedleft\@rightheader}}
|
|
|
|
\def\makeheaders@r#1{%
|
|
\setlength\photo@width{\photo@scale\textwidth}
|
|
\setlength\leftheader@width{%
|
|
(\textwidth - \photo@width - \photosep) * \real{\header@scale}}
|
|
\setlength\rightheader@width{%
|
|
\textwidth - \photo@width - \photosep - \leftheader@width}
|
|
\parbox[#1]{\leftheader@width}{\@leftheader}%
|
|
\parbox[#1]{\rightheader@width}{\raggedleft\@rightheader}%
|
|
\parbox[#1]{\photo@width + \photosep}{\hspace\photosep\includephoto@}}
|
|
|
|
\def\makeheaders@#1{%
|
|
\setlength\leftheader@width{\header@scale\textwidth}%
|
|
\setlength\rightheader@width{\textwidth - \leftheader@width}%
|
|
\parbox[#1]{\leftheader@width}{\@leftheader}%
|
|
\parbox[#1]{\rightheader@width}{\raggedleft\@rightheader}}
|
|
|
|
\newcommand\makeheaders[1][c]{%
|
|
\ifthenelse{\equal{#1}{t}}{}{%
|
|
\ifthenelse{\equal{#1}{b}}{}{%
|
|
\ifthenelse{\equal{#1}{c}}{}{%
|
|
\ClassError{curve}{Invalid argument to \protect\makeheaders}{%
|
|
Argument of \protect\makeheaders must be `t', `b' or `c'.}}}}%
|
|
\def\tmp@cmd{\global\let\includephoto@}
|
|
\expandafter\tmp@cmd\csname includephoto@#1\endcsname
|
|
\makeheaders@{#1}%
|
|
\par\vspace\headerspace}
|
|
|
|
% \end{macrocode}
|
|
% \subsubsection{Titles}
|
|
% \DescribeMacro{\titlefont}
|
|
% \DescribeMacro{\titlespace}
|
|
% \begin{macrocode}
|
|
\@onlypreamble\title
|
|
|
|
\def\@titlefont{\Huge\bfseries}
|
|
\newcommand\titlefont[1]{\gdef\@titlefont{#1}}
|
|
\@onlypreamble\titlefont
|
|
|
|
\newlength\titlespace
|
|
\setlength\titlespace{0pt}
|
|
|
|
% \end{macrocode}
|
|
% \DescribeMacro{\subtitle}
|
|
% \DescribeMacro{\subtitlefont}
|
|
% \begin{macrocode}
|
|
\let\@subtitle\@undefined
|
|
\newcommand\subtitle[1]{\gdef\@subtitle{#1}}
|
|
\@onlypreamble\subtitle
|
|
|
|
\def\@subtitlefont{\huge\itshape}
|
|
\newcommand\subtitlefont[1]{\gdef\@subtitlefont{#1}}
|
|
\@onlypreamble\subtitlefont
|
|
|
|
% \end{macrocode}
|
|
% \DescribeMacro{\titlealignment}
|
|
% \begin{macrocode}
|
|
\def\@titlealignment@l{\raggedright}
|
|
\def\@titlealignment@c{\centering}
|
|
\def\@titlealignment@r{\raggedleft}
|
|
|
|
\let\@title@lignment\@titlealignment@c
|
|
|
|
\def\@titlealignment#1#2{%
|
|
\def\@curve@temp@a{\let\@title@lignment}
|
|
\expandafter\@curve@temp@a\csname @titlealignment@#2\endcsname
|
|
\@ifundefined{@title@lignment}{%
|
|
\ClassError{curve}{Invalid title alignment}{%
|
|
You have called \expandafter\string\csname#1\endcsname\space%
|
|
with an invalid value.%
|
|
\MessageBreak
|
|
Valid options include l, c and r.\MessageBreak
|
|
Type X <return> to quit, fix the typo, and rerun LaTeX.}}
|
|
}
|
|
|
|
\newcommand\titlealignment[1]{\@titlealignment{titlealignment}{#1}}
|
|
|
|
% \end{macrocode}
|
|
% \DescribeMacro{\maketitle}
|
|
% \begin{macrocode}
|
|
\def\@@maketitle{%
|
|
\bgroup\trivlist\@title@lignment\item\relax
|
|
{\@titlefont\@title}
|
|
\ifx\@subtitle\@undefined\else\\\@subtitlefont\@subtitle\fi
|
|
\endtrivlist\egroup
|
|
\vspace\titlespace}
|
|
|
|
\def\@maketitle[#1]{\@titlealignment{maketitle}{#1}\@@maketitle}
|
|
|
|
\newcommand\maketitle{\@ifnextchar[%]
|
|
\@maketitle\@@maketitle}
|
|
|
|
% \end{macrocode}
|
|
% \subsubsection{Rubric Inclusion}
|
|
% \DescribeMacro{\flavor}
|
|
% \begin{macrocode}
|
|
\let\@flavor\empty
|
|
\newcommand\flavor[1]{\gdef\@flavor{#1}
|
|
\ifx\@flavor\empty\else\edef\@flavor{.\@flavor}\fi}
|
|
|
|
\DeclareOption{ask}{%
|
|
\typein[\@flavor]{Please specify a CV flavor (none by default):}
|
|
\ifx\@flavor\empty\else\edef\@flavor{.\@flavor}\fi}
|
|
|
|
% \end{macrocode}
|
|
% |\input| is redefined in order to deal with flavors and the |ltx| extension.
|
|
% \begin{macrocode}
|
|
\def\@curveinput#1{%
|
|
\IfFileExists{#1\@flavor.ltx}{\@iinput{#1\@flavor.ltx}}{%
|
|
\IfFileExists{#1\@flavor.tex}{\@iinput{#1\@flavor.tex}}{%
|
|
\IfFileExists{#1.ltx}{\@iinput{#1.ltx}}{%
|
|
\IfFileExists{#1.tex}{\@iinput{#1.tex}}{%
|
|
\@iinput{#1}}}}}}
|
|
|
|
\renewcommand\input{\@ifnextchar\bgroup\@curveinput\@@input}
|
|
|
|
% \end{macrocode}
|
|
% \DescribeMacro{\makerubric}
|
|
% \begin{macrocode}
|
|
\newcommand\makerubric[1]{\LTXtable{\linewidth}{#1}}
|
|
|
|
% \end{macrocode}
|
|
% \subsubsection{Bibliography}
|
|
% \begin{macrocode}
|
|
\let\newblock\par
|
|
\newcounter{bibcount}
|
|
\newcounter{bibtotal}
|
|
|
|
\newif\ifcurve@revbib\curve@revbibfalse
|
|
\DeclareOption{revbib}{\curve@revbibtrue}
|
|
|
|
% \end{macrocode}
|
|
% \DescribeMacro{\bibliography}
|
|
% Define |\bibliography| to issue a |\makerubric| call on the |bbl| file. As
|
|
% of version 1.12, handle |multibbl| syntax if the package is loaded.
|
|
% \begin{macrocode}
|
|
\AtBeginDocument{
|
|
\@ifpackageloaded{multibbl}{
|
|
%% multibbl version
|
|
\def\bibliography#1#2#3{%
|
|
\@ifundefined{#1@auxfile}{}{\expandafter\immediate%
|
|
\write\csname #1@auxfile\endcsname{\string\bibdata{#2}}}%
|
|
\def\bibname{#3}%
|
|
\def\refname{#3}%
|
|
\IfFileExists{#1.bbl}{\makerubric{#1.bbl}}{%
|
|
\typeout{No file #1.bbl.}}}
|
|
}{ %% standard version
|
|
\def\bibliography#1{%
|
|
\if@filesw
|
|
\immediate\write\@auxout{\string\bibdata{#1}}%
|
|
\fi
|
|
\IfFileExists{\jobname.bbl}{\makerubric{\jobname.bbl}}{%
|
|
\typeout{No file \jobname.bbl.}}}
|
|
}
|
|
}
|
|
|
|
% \end{macrocode}
|
|
% \DescribeMacro{\bibitem}
|
|
% Redefine |\bibitem| and its internal implementation to behave like |\entry|.
|
|
%
|
|
% Do this late to overwrite a possible |hyperref| redefinition back again (it
|
|
% is arguable whether we should preserve |hyperref| functionality or not, but
|
|
% the current answer is no).
|
|
%
|
|
% One exception: if |bibentry| is used, don't get in the way. It redefines its
|
|
% own bibliographic environment and stuff.
|
|
% \begin{macrocode}
|
|
\AtBeginDocument{
|
|
\@ifpackageloaded{bibentry}{}{
|
|
\def\@lbibitem[#1]#2{\@sentry[\@biblabel{#1}]%
|
|
\if@filesw{%
|
|
\let\protect\noexpand%
|
|
\immediate\write\@auxout{\string\bibcite{#2}{#1}}}
|
|
\fi%
|
|
\ignorespaces}
|
|
\def\@bibitem#1{\stepcounter{bibcount}%
|
|
\@sentry[\@biblabel{\ifcurve@revbib\thebibtotal\else\thebibcount\fi}]%
|
|
\ifcurve@revbib\addtocounter{bibtotal}{-1}\fi%
|
|
\if@filesw%
|
|
\immediate\write\@auxout{\string\bibcite{#1}{\thebibcount}}%
|
|
\fi%
|
|
\ignorespaces}
|
|
\renewcommand\bibitem{%
|
|
%% #### FIXME: Dirty code duplication from \entry
|
|
\@nextentry
|
|
\noalign\bgroup\gdef\@beforespace{\subrubricbeforespace}%
|
|
\@ifnextchar[%]
|
|
\@lbibitem\@bibitem}
|
|
}
|
|
}
|
|
|
|
\AtEndDocument{%
|
|
\if@filesw%
|
|
\immediate\write\@auxout{\string\setcounter{bibtotal}{\thebibcount}}%
|
|
\fi}
|
|
|
|
% \end{macrocode}
|
|
% \DescribeMacro{\listpubname}
|
|
% \begin{macrocode}
|
|
\newcommand\listpubname[1]{\gdef\@listpubname{#1}}
|
|
|
|
% \end{macrocode}
|
|
% \DescribeEnv{thebibliography}
|
|
% Note that |bibentry| overrides this definition.
|
|
% \begin{macrocode}
|
|
\newenvironment{thebibliography}[1]{%
|
|
% \end{macrocode}
|
|
% Disable the |skipsamekey| mechanism and the prefix which would get in the
|
|
% way.
|
|
% \begin{macrocode}
|
|
\let\@key\@alwayskey
|
|
\def\@prefix{}
|
|
% \end{macrocode}
|
|
% For compatibility with bibliographic packages such as |multibib|, the
|
|
% bibliography title is set (by order of priority) to either |\bibname|,
|
|
% |\refname| or |\@listpubname|.
|
|
% \begin{macrocode}
|
|
\begin{rubric}{\@ifundefined{bibname}{%
|
|
\@ifundefined{refname}{\@listpubname}{\refname}}{%
|
|
\bibname}}
|
|
}{%
|
|
\end{rubric}
|
|
}
|
|
|
|
% \end{macrocode}
|
|
% \subsection{Language Processing}
|
|
% \begin{macrocode}
|
|
\DeclareOption{english}{%
|
|
\continuedname{~(continued)}
|
|
\listpubname{List of Publications}}
|
|
\DeclareOption{french}{%
|
|
\continuedname{~(suite)}
|
|
\listpubname{Liste des Publications}}
|
|
\DeclareOption{francais}{%
|
|
\ExecuteOptions{french}}
|
|
\DeclareOption{spanish}{%
|
|
\continuedname{~(contin\'ua)}
|
|
\listpubname{Lista de Publicaciones}}
|
|
\DeclareOption{portuges}{%
|
|
\continuedname{~(continua\c c\~ao)}
|
|
\listpubname{Publica\c c\~oes}}
|
|
\DeclareOption{portuguese}{%
|
|
\ExecuteOptions{portuges}}
|
|
\DeclareOption{brazil}{%
|
|
\ExecuteOptions{portuges}}
|
|
\DeclareOption{brazilian}{%
|
|
\ExecuteOptions{portuges}}
|
|
\DeclareOption{italian}{%
|
|
\continuedname{~(continua)}
|
|
\listpubname{Pubblicazioni}}
|
|
\DeclareOption{german}{%
|
|
\continuedname{~(fortgesetzt)}
|
|
\listpubname{Verzeichnis der Ver\"offentlichungen}}
|
|
\DeclareOption{ngerman}{%
|
|
\ExecuteOptions{german}}
|
|
\DeclareOption{dutch}{%
|
|
\continuedname{~(vervolg)}
|
|
\listpubname{Publicaties}}
|
|
\DeclareOption{danish}{%
|
|
\continuedname{~(fortsat)}
|
|
\listpubname{Udgivelser}}
|
|
\DeclareOption{swedish}{%
|
|
\continuedname{~(forts.)}
|
|
\listpubname{Publikationer}}
|
|
\DeclareOption{polish}{
|
|
\continuedname{~(kontynuacja)}
|
|
\listpubname{Publikacje}}
|
|
|
|
% \end{macrocode}
|
|
% \subsection{Standard Class Processing}
|
|
% \begin{macrocode}
|
|
\DeclareOption{a4paper}{
|
|
\setlength\paperheight{297mm}
|
|
\setlength\paperwidth{210mm}}
|
|
\DeclareOption{a5paper}{
|
|
\setlength\paperheight{210mm}
|
|
\setlength\paperwidth{148mm}}
|
|
\DeclareOption{b5paper}{
|
|
\setlength\paperheight{250mm}
|
|
\setlength\paperwidth{176mm}}
|
|
\DeclareOption{letterpaper}{
|
|
\setlength\paperheight{11in}
|
|
\setlength\paperwidth{8.5in}}
|
|
\DeclareOption{legalpaper}{
|
|
\setlength\paperheight{14in}
|
|
\setlength\paperwidth{8.5in}}
|
|
\DeclareOption{executivepaper}{
|
|
\setlength\paperheight{10.5in}
|
|
\setlength\paperwidth{7.25in}}
|
|
\DeclareOption{landscape}{
|
|
\setlength\@tempdima{\paperheight}
|
|
\setlength\paperheight{\paperwidth}
|
|
\setlength\paperwidth{\@tempdima}}
|
|
|
|
\DeclareOption{10pt}{\def\@ptsize{0}}
|
|
\DeclareOption{11pt}{\def\@ptsize{1}}
|
|
\DeclareOption{12pt}{\def\@ptsize{2}}
|
|
|
|
\DeclareOption{oneside}{\@twosidefalse\@mparswitchfalse}
|
|
\DeclareOption{twoside}{\@twosidetrue\@mparswitchtrue}
|
|
|
|
\DeclareOption{draft}{\setlength\overfullrule{5pt}}
|
|
\DeclareOption{final}{%
|
|
\setlength\overfullrule{0pt}
|
|
\setlongtables}
|
|
|
|
\ExecuteOptions{english,letterpaper,10pt,oneside,final}
|
|
\ProcessOptions
|
|
|
|
\input{size1\@ptsize.clo}
|
|
\setlength\parindent{0pt}
|
|
\setlength\parskip{0pt}
|
|
\setlength\tabcolsep{10pt}
|
|
\setlength\arrayrulewidth{.4\p@}
|
|
\setlength\leftmargini{2.5em}
|
|
\leftmargin\leftmargini
|
|
\setlength\leftmarginii{2.2em}
|
|
\setlength\leftmarginiii{1.87em}
|
|
\setlength\leftmarginiv{1.7em}
|
|
\setlength\leftmarginv{1em}
|
|
\setlength\leftmarginvi{1em}
|
|
\setlength\labelsep{.5em}
|
|
\setlength\labelwidth{\leftmargini}
|
|
\addtolength\labelwidth{-\labelsep}
|
|
\@beginparpenalty -\@lowpenalty
|
|
\@endparpenalty -\@lowpenalty
|
|
\@itempenalty -\@lowpenalty
|
|
\renewcommand\theenumi{\@arabic\c@enumi}
|
|
\renewcommand\theenumii{\@alph\c@enumii}
|
|
\renewcommand\theenumiii{\@roman\c@enumiii}
|
|
\renewcommand\theenumiv{\@Alph\c@enumiv}
|
|
\newcommand\labelenumi{\theenumi.}
|
|
\newcommand\labelenumii{(\theenumii)}
|
|
\newcommand\labelenumiii{\theenumiii.}
|
|
\newcommand\labelenumiv{\theenumiv.}
|
|
\renewcommand\p@enumii{\theenumi}
|
|
\renewcommand\p@enumiii{\theenumi(\theenumii)}
|
|
\renewcommand\p@enumiv{\p@enumiii\theenumiii}
|
|
\newcommand\labelitemi{\textbullet}
|
|
\newcommand\labelitemii{\normalfont\bfseries \textendash}
|
|
\newcommand\labelitemiii{\textasteriskcentered}
|
|
\newcommand\labelitemiv{\textperiodcentered}
|
|
\raggedbottom
|
|
\onecolumn
|
|
\pagestyle{empty}
|
|
\pagenumbering{arabic}
|
|
|
|
\newcommand\@makefntext[1]{\noindent\hb@xt@1em{\hss\@makefnmark}#1}
|
|
|
|
\if@twoside
|
|
\def\ps@headings{%
|
|
\let\@oddfoot\@empty\let\@evenfoot\@empty
|
|
\def\@evenhead{\thepage\hfil\slshape\leftmark}%
|
|
\def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
|
|
\let\@mkboth\markboth
|
|
\def\@rubricmark##1{\markboth{\MakeUppercase{##1}}{}}%
|
|
\def\@subrubricmark##1{\markright{##1}}%
|
|
}
|
|
\else
|
|
\def\ps@headings{%
|
|
\let\@oddfoot\@empty
|
|
\def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
|
|
\let\@mkboth\markboth
|
|
\def\@rubricmark##1{\markright{\MakeUppercase{##1}}}%
|
|
}
|
|
\fi
|
|
\def\ps@myheadings{%
|
|
\let\@oddfoot\@empty\let\@evenfoot\@empty
|
|
\def\@evenhead{\thepage\hfil\slshape\leftmark}%
|
|
\def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
|
|
\let\@mkboth\@gobbletwo
|
|
\let\@rubricmark\@gobble
|
|
\let\@subrubricmark\@gobble
|
|
}
|
|
|
|
% \end{macrocode}
|
|
% ^^A \PrintChanges
|
|
% ^^A \PrintIndex
|
|
% \Finale
|
|
%
|
|
% ^^A curve.dtx ends here.
|