|
|
@ -0,0 +1,803 @@ |
|
|
|
% RESUME DOCUMENT STYLE -- Released 23 Nov 1989 |
|
|
|
% for LaTeX version 2.09 |
|
|
|
% Copyright (C) 1988,1989 by Michael DeCorte |
|
|
|
|
|
|
|
\typeout{Document Style `res' <26 Sep 89>.} |
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% res.sty |
|
|
|
% |
|
|
|
% \documentstyle{res} |
|
|
|
% |
|
|
|
% Copyright (c) 1988 by Michael DeCorte |
|
|
|
% Permission to copy all or part of this work is granted, provided |
|
|
|
% that the copies are not made or distributed for resale, and that |
|
|
|
% the copyright notice and this notice are retained. |
|
|
|
% |
|
|
|
% THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO |
|
|
|
% WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK, |
|
|
|
% INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS |
|
|
|
% FOR ANY PARTICULAR PURPOSE. |
|
|
|
% |
|
|
|
% If you make any improvements, I'd like to hear about them. |
|
|
|
% |
|
|
|
% Michael DeCorte |
|
|
|
% P.O. Box 652 |
|
|
|
% Potsdam NY 13676 |
|
|
|
% mrd@sun.soe.clarkson.edu |
|
|
|
% mrd@clutx.bitnet |
|
|
|
% |
|
|
|
% Changes for LaTeX2e -- Venkat Krishnamurthy (Aug 7, 2001) |
|
|
|
% |
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% You can have multiple style options the legal options ones are: |
|
|
|
% |
|
|
|
% centered the name and address are centered at the top of the |
|
|
|
% page (default) |
|
|
|
% |
|
|
|
% line the name is the left with a horizontal line then |
|
|
|
% the address to the right |
|
|
|
% |
|
|
|
% overlapped the section titles overlap the body text (default) |
|
|
|
% |
|
|
|
% margin the section titles are to the left of the body text |
|
|
|
% |
|
|
|
% 11pt use 11 point fonts instead of 10 point fonts |
|
|
|
% |
|
|
|
% 12pt use 12 point fonts instead of 10 point fonts |
|
|
|
% |
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% Commands |
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% \Resume prints the word resume but typeset nicely |
|
|
|
% |
|
|
|
% \newsectionwidth{dimen} |
|
|
|
% defines the amount of space the labels extend |
|
|
|
% into the left margin. |
|
|
|
% DO NOT TRY to change any of the dimensions |
|
|
|
% yourself. You will probably confuse the style file. |
|
|
|
% |
|
|
|
% \name{text} defines your name |
|
|
|
% |
|
|
|
% \address{text} |
|
|
|
% defines your address |
|
|
|
% this can be called twice if you have two addresses |
|
|
|
% use \\'s to indicate where either line breaks or |
|
|
|
% comas should go |
|
|
|
% |
|
|
|
% \opening this prints your name and address at that spot |
|
|
|
% this is not normally needed, as \begin{resume} |
|
|
|
% does this but is provided just in case you need |
|
|
|
% to do something odd |
|
|
|
% |
|
|
|
% \begin{resume} ... \end{resume} |
|
|
|
% all of the resume should go inside of this |
|
|
|
% environment |
|
|
|
% |
|
|
|
% \section{text} |
|
|
|
% This prints 'text' in the left hand margin. |
|
|
|
% Its exact placement depends on what the style |
|
|
|
% options has been set to. (overlapped or margin) |
|
|
|
% You should use \\ to start a new line. If the |
|
|
|
% style option is margin, the \\ is converted |
|
|
|
% to a space. |
|
|
|
% To use this in any of the list environments, put |
|
|
|
% the \section after the \item[] but before the |
|
|
|
% text. |
|
|
|
% Eg. |
|
|
|
% \begin{itemize} |
|
|
|
% \item\section{text} |
|
|
|
% text |
|
|
|
% \end{itemize} |
|
|
|
% |
|
|
|
% \begin{ncolumn}{n} ... \end{ncolumn} |
|
|
|
% creates a tabular environment with n equally |
|
|
|
% spaced columns. Separate columns by & and |
|
|
|
% end them with \\ |
|
|
|
% |
|
|
|
% \begin{position} ... \end{position} |
|
|
|
% this is used to print a job description. There should |
|
|
|
% be only one job description in it. Information |
|
|
|
% related to the job (such as title, dates...) will |
|
|
|
% be printed. |
|
|
|
% |
|
|
|
% \begin{format} ... \end{format} |
|
|
|
% used to change the default format for the position |
|
|
|
% environment. Within it the recognized commands are: |
|
|
|
% \title{option} |
|
|
|
% \employer{option} |
|
|
|
% \location{option} |
|
|
|
% \dates{option} |
|
|
|
% \body |
|
|
|
% \\ |
|
|
|
% where option is one of l,r,c standing for left, right, center. |
|
|
|
% The format will eventually be used to make several |
|
|
|
% tabular environments and you are defining the number of columns |
|
|
|
% and the placement of text within the columns of the tabulars. |
|
|
|
% Each row is terminated by a \\. Any number of options can |
|
|
|
% be on a line, they will each be set in their own columns. |
|
|
|
% Any of the options except \body may be left out. |
|
|
|
% |
|
|
|
% Eg. |
|
|
|
% \begin{format} |
|
|
|
% \title{l}\employer{r}\\ |
|
|
|
% \dates{r}\\ |
|
|
|
% \body\\ |
|
|
|
% \location{l}\\ |
|
|
|
% \end{format} |
|
|
|
% |
|
|
|
% In this example the title and employer information |
|
|
|
% are set in 2 columns left justified and right justified |
|
|
|
% respectively. Then the date is set right justified. |
|
|
|
% Then the body is set. Then the location is set left |
|
|
|
% justified. |
|
|
|
% |
|
|
|
% \employer{text} |
|
|
|
% \title{text} |
|
|
|
% \dates{text} |
|
|
|
% \location{text} |
|
|
|
% declare text for the next invocation of the position |
|
|
|
% environment |
|
|
|
% |
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% Glue |
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% |
|
|
|
% sectionskip the amount of horizontal before a section |
|
|
|
% |
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% Dimensions |
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% |
|
|
|
% sectionwidth the amount that the section titles go in the |
|
|
|
% left margin |
|
|
|
% |
|
|
|
% resumewidth the width of the total resume from the left |
|
|
|
% margin to the right. Don't use textwidth |
|
|
|
% |
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% Definitions |
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% |
|
|
|
% sectionfont the font used to print section titles |
|
|
|
% use \renewcommand to change it |
|
|
|
% |
|
|
|
% namefont the font used to print your name |
|
|
|
% use \renewcommand to change it |
|
|
|
% |
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% THINGS TO DO |
|
|
|
% |
|
|
|
% add lm,rm options to format style to allow things to be placed |
|
|
|
% in the left or right margin respectivly |
|
|
|
% |
|
|
|
% add capability so that \body doesn't have to be proceeded (followed) |
|
|
|
% by a \\ allowing part of the description (eg. location) to be the |
|
|
|
% first (last) thing of the body |
|
|
|
% |
|
|
|
% clean up the list building procedures |
|
|
|
% |
|
|
|
% write docs to tell people how to use this |
|
|
|
|
|
|
|
\NeedsTeXFormat{LaTeX2e}[1995/12/01] |
|
|
|
\ProvidesClass{res}[2000/05/19 v1.4b Resume class] |
|
|
|
|
|
|
|
%\DeclareOption{11pt}{\renewcommand\@ptsize{1}} |
|
|
|
%\DeclareOption{12pt}{\renewcommand\@ptsize{2}} |
|
|
|
|
|
|
|
\PassOptionsToClass{11pt,12pt}{article} |
|
|
|
\LoadClassWithOptions{article} |
|
|
|
|
|
|
|
\newif\if@line |
|
|
|
\newif\if@margin |
|
|
|
|
|
|
|
\DeclareOption{line}{\@linetrue} |
|
|
|
\DeclareOption{centered}{\@linefalse} |
|
|
|
|
|
|
|
\DeclareOption{margin}{\@margintrue} |
|
|
|
\DeclareOption{overlapped}{\@marginfalse} |
|
|
|
|
|
|
|
\ExecuteOptions{overlapped,centered} |
|
|
|
\ProcessOptions\relax |
|
|
|
|
|
|
|
\nofiles % resume's don't need .aux files |
|
|
|
|
|
|
|
|
|
|
|
\newtoks\tabular@text % holds the current list being processed |
|
|
|
\newtoks\tabular@head % holds the head tabular list |
|
|
|
\newtoks\tabular@tail % holds the tail tabular list |
|
|
|
\newtoks\@ta % used by \@append |
|
|
|
\newtoks\undefined@token\undefined@token={} |
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% prints a centered name with the address centered |
|
|
|
% or the two address on opposite sides of the page |
|
|
|
% |
|
|
|
\def\@printcentername{\begingroup |
|
|
|
% print the name centered |
|
|
|
\leavevmode\hbox to \textwidth{\hfil\@tablebox{\namefont\@name}\hfil}\par |
|
|
|
\@ifundefined{@addressone}{% |
|
|
|
% do nothing |
|
|
|
}{% |
|
|
|
\@ifundefined{@addresstwo}{ |
|
|
|
% only one address |
|
|
|
\leavevmode\hbox to \textwidth{\hfil\@tablebox{\@addressone}\hfil}\par |
|
|
|
}{ |
|
|
|
% two addresses |
|
|
|
\leavevmode\hbox to \textwidth{\@tablebox{\@addressone}\hfil |
|
|
|
\@tablebox{\@addresstwo}}\par |
|
|
|
}% |
|
|
|
}% |
|
|
|
\endgroup} |
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% this is used to print the name and address at the top of |
|
|
|
% the page with a hline in between |
|
|
|
% |
|
|
|
\def\namefont{\large\bf} |
|
|
|
\def\@linename{\begingroup |
|
|
|
\def\\{, } |
|
|
|
{\namefont\@name} |
|
|
|
\vskip 2pt |
|
|
|
\fullline |
|
|
|
\vskip 2pt |
|
|
|
% where do you live? |
|
|
|
\@ifundefined{@addressone}{% |
|
|
|
% do nothing |
|
|
|
}{% |
|
|
|
\leavevmode\hbox to \textwidth |
|
|
|
{\hfill\vbox{\hbox{\@addressone} |
|
|
|
\hbox{\@addresstwo} |
|
|
|
}% |
|
|
|
}\par |
|
|
|
} |
|
|
|
\endgroup} |
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% HEADINGS: |
|
|
|
% There are two types of headings: |
|
|
|
% 1) one with the name centered and the address centered or |
|
|
|
% in the left and right side if there are two address |
|
|
|
% 2) one where the name is in the upper left corner |
|
|
|
% the a line accross the paper |
|
|
|
% then the address all on one line in the right corner |
|
|
|
% the second address will be directly below the first if defined |
|
|
|
% |
|
|
|
\let\print@name\relax |
|
|
|
\def\ds@centered{\ifx\print@name\relax\let\print@name\@printcentername\fi} |
|
|
|
\def\ds@line{\ifx\print@name\relax\let\print@name\@linename\fi} |
|
|
|
|
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% Use this to set the sectionwidth. |
|
|
|
% It adjust the width of the text as well as the hoffset |
|
|
|
% You probably shouldn't touch any of the size paramaters |
|
|
|
% unless you really understand all of this but it is not |
|
|
|
% hard. Either way, it can only be executed once |
|
|
|
% |
|
|
|
\def\sectionfont{\bf} |
|
|
|
\newdimen\sectionwidth |
|
|
|
\newskip\sectionskip |
|
|
|
\newdimen\resumewidth |
|
|
|
|
|
|
|
\resumewidth=6.5in |
|
|
|
\sectionskip=3.5ex plus 1ex minus -.2ex % values stolen from LaTeX |
|
|
|
|
|
|
|
\def\newsectionwidth#1{% |
|
|
|
\sectionwidth=#1 |
|
|
|
\textwidth=\resumewidth |
|
|
|
\advance\textwidth-\sectionwidth |
|
|
|
\hsize=\textwidth |
|
|
|
\hoffset=\sectionwidth |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% This is for sectiontitles that are entirely in the left margin. |
|
|
|
% multiline sectiontitles are permited and will be broken by |
|
|
|
% \TeX{} to fit into a box \verb|\sectionwidth| wide. It is advised |
|
|
|
% that \verb|\\| be used to break the lines by hand as \TeX{} will |
|
|
|
% probably not do what you want. |
|
|
|
% |
|
|
|
% When using this with {\tt tabbing} and {\tt list} (or anything |
|
|
|
% that is made out of {\tt list}) put the \section's inside of |
|
|
|
% the \verb|\begin{}| and the \verb|\item|Eg. |
|
|
|
% \begin{verbatim} |
|
|
|
% \begin{trivlist} |
|
|
|
% \item[] |
|
|
|
% \section{foo} |
|
|
|
% text |
|
|
|
% \end{trivlist} |
|
|
|
% \end{verbatim} |
|
|
|
% |
|
|
|
\def\boxed@sectiontitle#1{% |
|
|
|
% this macro may be called in a tabular. Special code must be written |
|
|
|
% to accomodate this. In LaTeX, a tabular is made out of hboxes. |
|
|
|
% TeX never goes into horizontal mode because of this; it only |
|
|
|
% gets into vertical mode and restricted horizontal mode. Certain |
|
|
|
% indenting problems must be handled because of this. They |
|
|
|
% are delt with at the end of this routine. |
|
|
|
% It is also necessary to close the hbox that was created before |
|
|
|
% the \section and create a new one when this macro has ended. |
|
|
|
% This macro therefore simulates a \kill, so that any text before |
|
|
|
% the \section not be printed. The proper use is therefore |
|
|
|
% ... |
|
|
|
% text\\ |
|
|
|
% \section{foo} |
|
|
|
% more text\\ |
|
|
|
% ... |
|
|
|
\ifx\\\@tabcr % is this in a tabular? (this *should* work but is a cludge) |
|
|
|
\@stopfield % the is the first part of a \kill |
|
|
|
\else |
|
|
|
\@@par % This will end the previous paragraph if needed and |
|
|
|
% go into vertical mode. If this was already in |
|
|
|
% vertical mode then the \par does nothing. |
|
|
|
|
|
|
|
\fi |
|
|
|
\begingroup |
|
|
|
\everypar={}% |
|
|
|
\def\par{\@@par}% |
|
|
|
\let\\=\@normalcr |
|
|
|
\addpenalty{\@secpenalty} % this would be a good place for a page break |
|
|
|
% \@secpenalty is what LaTeX uses before its |
|
|
|
% section's. It happens to be -300 |
|
|
|
\addvspace{\sectionskip} % put in a bit of glue |
|
|
|
% The following hbox will be contributed to the page list without going |
|
|
|
% into horizontal mode. Therefore, any \parindent's, \parshape's, \leftskip |
|
|
|
% will be ignored but \hoffset's are not. The result is that the box will |
|
|
|
% only by \hoffset. This is what I want |
|
|
|
\hbox to 0pt{% |
|
|
|
\hss % this is an llap. In other words, this glue |
|
|
|
% will shrink by the width of the stuff in the vbox |
|
|
|
% (\sectionwidth) into the left margin and then |
|
|
|
% insert the contents of the vbox. |
|
|
|
\vtop to 0pt{% make a 0pt height paragraph, with the baseline at the |
|
|
|
% lined up with the baseline of the first box in the list |
|
|
|
\leftskip=0pt |
|
|
|
\hsize=\sectionwidth |
|
|
|
\textwidth=\sectionwidth |
|
|
|
\raggedright % you don't want this filled out to the right margin |
|
|
|
\sectionfont |
|
|
|
#1\vss % Go into horizontal mode; do the paragraph; |
|
|
|
% go into vertical mode; add some negative glue |
|
|
|
% to give a box of 0pt height and depth |
|
|
|
}% |
|
|
|
}% |
|
|
|
\addpenalty{-\@secpenalty} % this would be a bad place for a page break |
|
|
|
\vskip-\baselineskip % when the next box is processed, baselineskip glue |
|
|
|
% glue will be added (the box has no depth because of |
|
|
|
% the \vss; therefore, we don't have to worry about |
|
|
|
% \lineskiplimit). This -\baselineskip glue |
|
|
|
% is to undo this. \nointerlineskip doesn't |
|
|
|
% work because the baseline of this line would be lined |
|
|
|
% up with the top of the top of the next box. We |
|
|
|
% want the baselines lined up. |
|
|
|
% |
|
|
|
% It may have been possible to do this by forcing the |
|
|
|
% baseline of this box to be the top of the box but |
|
|
|
% then the interline skip between this box and the |
|
|
|
% previous box would be off as the baselines of the |
|
|
|
% this box (the one that being made above) and the |
|
|
|
% previous line would be separated by \baselineskip |
|
|
|
% (probably, it may be separted by the depth of the |
|
|
|
% previous box + \lineskip) but as the baseline of |
|
|
|
% this box has been moved to the top, the box's would |
|
|
|
% separted by to much glue. The exact amount being |
|
|
|
% the height of this box. |
|
|
|
\endgroup |
|
|
|
\ifx\\\@tabcr % is this in a tabular? (this *should* work but is a cludge) |
|
|
|
% this is the second part of the \kill; it starts the next tabbing line |
|
|
|
% Because this routine will never get into paragraph mode when used in |
|
|
|
% tabbing the \parskip that is discussed below will never be inserted. |
|
|
|
% Therefore it should not be negated as done below. |
|
|
|
\@startline |
|
|
|
\ignorespaces |
|
|
|
\else |
|
|
|
\vskip-\parskip % The next thing to be contributed will be a paragraph. |
|
|
|
% Right before being contributed though a \vskip\parskip |
|
|
|
% will be inserted. This is to negate it. |
|
|
|
% |
|
|
|
% I do consider this to be a bit of a cludge but |
|
|
|
% I can not find a way to write \unskipfutureskip |
|
|
|
% or a way to make TeX think that nothing has |
|
|
|
% been contributed to the page list. |
|
|
|
\fi |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% This is for sectiontitles that are entirely above the section text |
|
|
|
% |
|
|
|
\def\unboxed@sectiontitle#1{% |
|
|
|
\ifx\\\@tabcr % see boxed@sectiontitle for explation |
|
|
|
\@stopfield |
|
|
|
\else |
|
|
|
\@@par |
|
|
|
\fi |
|
|
|
\begingroup |
|
|
|
\everypar={}% |
|
|
|
\def\par{\@@par}% |
|
|
|
\def\\{ } |
|
|
|
\addpenalty{\@secpenalty} |
|
|
|
\addvspace{\sectionskip} |
|
|
|
\hbox to 0pt{\hss\hbox to \sectionwidth{\sectionfont#1\hss}} |
|
|
|
\addpenalty{-\@secpenalty} % this would be a bad place for a page break |
|
|
|
\endgroup |
|
|
|
\ifx\\\@tabcr % see boxed@sectiontitle for explation |
|
|
|
\@startline |
|
|
|
\else |
|
|
|
\vskip-\parskip |
|
|
|
\fi |
|
|
|
\ignorespaces |
|
|
|
} |
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% There are two types of section headings: |
|
|
|
% 1) the section heading is all on one line and directly |
|
|
|
% below it, is the body of the text |
|
|
|
% 2) the section heading is entirely in the left margin |
|
|
|
% (possibly taking multiple lines) with the body of |
|
|
|
% the text next to it |
|
|
|
% |
|
|
|
\let\@@section\relax |
|
|
|
\def\ds@overlapped{\ifx\@@section\relax\newsectionwidth{0.5in}\let |
|
|
|
\@@section\unboxed@sectiontitle\fi} |
|
|
|
\def\ds@margin{\ifx\@@section\relax\newsectionwidth{1.3in}\let |
|
|
|
\@@section\boxed@sectiontitle\fi} |
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% DEFAULTS: (some of them) |
|
|
|
% |
|
|
|
% centered name |
|
|
|
% overlapped section titles |
|
|
|
% |
|
|
|
% format is: |
|
|
|
% title employer |
|
|
|
% location dates |
|
|
|
% body |
|
|
|
% with everything in the left of its column |
|
|
|
|
|
|
|
%\input article.sty |
|
|
|
|
|
|
|
\if@line\ds@line\else\ds@centered\fi |
|
|
|
\if@margin\ds@margin\else\ds@overlapped\fi |
|
|
|
|
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% typeset resume all nice and pretty |
|
|
|
% |
|
|
|
\def\Resume{{R\'{e}sum\'{e}}} |
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% makes a line of width \textwidth starting at -\hoffset |
|
|
|
% |
|
|
|
\def\fullline{ % hrules only listen to \hoffset |
|
|
|
\nointerlineskip % so I have this code |
|
|
|
\moveleft\hoffset\vbox{\hrule width\textwidth} |
|
|
|
\nointerlineskip |
|
|
|
} |
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% create a multiline box. |
|
|
|
% |
|
|
|
\def\@tablebox#1{\begin{tabular}[t]{@{}l@{\extracolsep{\fill}}}#1\end{tabular}} |
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% use this to define your name |
|
|
|
% |
|
|
|
\def\name#1{\def\@name{#1}} |
|
|
|
|
|
|
|
\def\@name{} |
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% use this to define your address, this may be called more than once. |
|
|
|
% |
|
|
|
\let\@addressone\relax |
|
|
|
\let\@addresstwo\relax |
|
|
|
|
|
|
|
\def\address#1{ |
|
|
|
\@ifundefined{@addressone}{\def\@addressone{#1}}{\def\@addresstwo{#1}}} |
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% if you want to print your name and address is a slightly |
|
|
|
% different format than sugessted, then this can be used |
|
|
|
% to place it exactly where you want |
|
|
|
% |
|
|
|
\def\opening{\def\@opening{} |
|
|
|
\begingroup |
|
|
|
\leftskip=-\hoffset % I use leftskip to move things to the left as |
|
|
|
\advance\textwidth\hoffset % changing hoffset doesn't work. But this |
|
|
|
\hsize=\textwidth % doesn't really work as hboxes are rules |
|
|
|
% are unaffeted |
|
|
|
\let\par=\@@par |
|
|
|
\parindent=0pt |
|
|
|
\parskip=0pt |
|
|
|
\print@name |
|
|
|
\endgroup |
|
|
|
} |
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% all of the resume goes in the resume environment |
|
|
|
% |
|
|
|
\newenvironment{resume}{\begingroup |
|
|
|
\@ifundefined{@opening}{\opening}{} |
|
|
|
}{\endgroup} |
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% gives you a tabular environment with n equally spaced columns |
|
|
|
% \begin{ncolumn}{#} ... \end{ncolumn} |
|
|
|
% |
|
|
|
% The p option of LaTeX is broken in all but the newest verion |
|
|
|
% of latex.tex, this is how to fix it |
|
|
|
% |
|
|
|
\def\@endpbox{\par\egroup\hfil} |
|
|
|
\let\@@endpbox=\@endpbox |
|
|
|
|
|
|
|
\newdimen\@columnwidth % the width of each column equal to |
|
|
|
\def\ncolumn#1{% |
|
|
|
% \@columnwidth = \textwidth / #1 |
|
|
|
\@columnwidth=\textwidth \divide\@columnwidth by #1 |
|
|
|
\begin{tabular*}{\textwidth}[t]% |
|
|
|
{*{#1}{@{}p{\@columnwidth}@{\extracolsep{\fill}}}} |
|
|
|
} |
|
|
|
|
|
|
|
\def\endncolumn{\end{tabular*}} |
|
|
|
|
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% \employer{text} defines employer to be text |
|
|
|
% \location{text} defines location to be text |
|
|
|
% \dates{text} defines dates to be text |
|
|
|
% \title{text} defines title to be text |
|
|
|
% \body |
|
|
|
% |
|
|
|
|
|
|
|
\def\employer#1{\def\@employer{\print@employer{#1}}} |
|
|
|
\def\location#1{\def\@location{\print@location{#1}}} |
|
|
|
\def\dates#1{\def\@dates{\print@dates{#1}}} |
|
|
|
\def\title#1{\def\@title{\print@title{#1}}} |
|
|
|
|
|
|
|
\let\l@justify\raggedright |
|
|
|
\let\r@justify\raggedleft |
|
|
|
\let\c@justify\centering |
|
|
|
|
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% \@format{name}{justify} |
|
|
|
% will define \print@#1 to print it's one argument |
|
|
|
% justified according to #2 which can be |
|
|
|
% l = left |
|
|
|
% r = right |
|
|
|
% c = center |
|
|
|
% |
|
|
|
% eg. |
|
|
|
% \@format{employer}{c} |
|
|
|
% is the same as \def\print@employer#1{{\centering #1\par}} |
|
|
|
% |
|
|
|
\def\@format#1#2{% |
|
|
|
\expandafter\gdef\csname print@#1\endcsname##1{% |
|
|
|
{\csname#2@justify\endcsname##1\par}} |
|
|
|
} |
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% this is used to define how the position environment should |
|
|
|
% formated. |
|
|
|
% |
|
|
|
% \begin{format} positioning text \end{format} |
|
|
|
% where positioning text may be |
|
|
|
% \employer{pos} |
|
|
|
% \location{pos} |
|
|
|
% \dates{pos} |
|
|
|
% \title{pos} |
|
|
|
% \body (for the body of the position environment) |
|
|
|
% where pos is |
|
|
|
% l for left |
|
|
|
% r for right |
|
|
|
% c for center |
|
|
|
% use \\ to break the line |
|
|
|
% you don't have to use all of the options. |
|
|
|
% on any one line, you should indicate what you want on that line |
|
|
|
% and where it should go within its column. |
|
|
|
% eg. |
|
|
|
% the following prints the employer in the left with the location |
|
|
|
% centered within that its column. It then prints the date on the |
|
|
|
% right. Then it prints the body of the position environment. Then |
|
|
|
% it prints the title centered within its column; as there is only |
|
|
|
% one column here it is really just centered. |
|
|
|
% |
|
|
|
% \begin{format} |
|
|
|
% \employer{l}\location{c}\\ |
|
|
|
% \dates{r}\\ |
|
|
|
% \body\\ |
|
|
|
% \title{c}\\ |
|
|
|
% \end{format} |
|
|
|
|
|
|
|
\newcounter{numberofcolumns} |
|
|
|
\newenvironment{format}{% |
|
|
|
\def\end@line@head{\append@tabular@head{tabular@text}\tabular@text={}% |
|
|
|
\c@numberofcolumns 0} |
|
|
|
\def\end@line@tail{\append@tabular@tail{tabular@text}\tabular@text={}% |
|
|
|
\c@numberofcolumns 0} |
|
|
|
\tabular@text={} |
|
|
|
\tabular@head={} |
|
|
|
\tabular@tail={} |
|
|
|
\c@numberofcolumns 0 |
|
|
|
\let\\=\end@line@head |
|
|
|
\def\employer##1{\advance\c@numberofcolumns 1 |
|
|
|
\@format{employer}{##1} |
|
|
|
\append@tabular@text{employer}} |
|
|
|
\def\location##1{\advance\c@numberofcolumns 1 |
|
|
|
\@format{location}{##1} |
|
|
|
\append@tabular@text{location}} |
|
|
|
\def\dates##1{\advance\c@numberofcolumns 1 |
|
|
|
\@format{dates}{##1} |
|
|
|
\append@tabular@text{dates}} |
|
|
|
\def\title##1{\advance\c@numberofcolumns 1 |
|
|
|
\@format{title}{##1} |
|
|
|
\append@tabular@text{title}} |
|
|
|
\def\body{\iftoks\tabular@head\undefined@token\then |
|
|
|
\else |
|
|
|
\@append{\noexpand\\}\to\tabular@head |
|
|
|
\skotfi |
|
|
|
\let\\=\end@line@tail}}{} |
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
%taken from page 378 of TeXbook but freely hacked |
|
|
|
% |
|
|
|
% appends the expansion of #1 to the token list #2 |
|
|
|
|
|
|
|
\def\@append#1\to#2{% |
|
|
|
\@ta=\expandafter{#1}% |
|
|
|
\xdef\@append@temp{\the#2\the\@ta} |
|
|
|
\global#2=\expandafter{\@append@temp}% |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% CHAA006%vaxb.rhbnc.ac.uk@NSS.Cs.Ucl.AC.UK |
|
|
|
% texhax.88.078 |
|
|
|
% is used to see if two token lists are equal |
|
|
|
% there must be a better way |
|
|
|
% |
|
|
|
|
|
|
|
\let \then = \empty |
|
|
|
\def \iftoks #1#2\then #3\else #4\skotfi{ |
|
|
|
\edef \1{\the #1} |
|
|
|
\edef \2{\the #2} |
|
|
|
\ifx \1\2\then #3\else #4\fi} |
|
|
|
|
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% \append@tabular@text{command} |
|
|
|
% |
|
|
|
% appends command to the end of \tabular@text. |
|
|
|
% NOTE: command MUST be a command but without the \ |
|
|
|
% Eg. \append@tabular@text{relax} |
|
|
|
% |
|
|
|
% used to define \tabular@text for the tabular environment |
|
|
|
% used by append@tabular@head and append@tabular@tail |
|
|
|
% |
|
|
|
|
|
|
|
\def\append@tabular@text#1{% |
|
|
|
\iftoks\tabular@text\undefined@token\then |
|
|
|
\global\tabular@text=\expandafter{\csname @#1\endcsname} |
|
|
|
\else |
|
|
|
\@append{&}\to\tabular@text |
|
|
|
\@append{\csname @#1\endcsname}\to\tabular@text |
|
|
|
\skotfi |
|
|
|
} |
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% append@tabular@head |
|
|
|
% |
|
|
|
% appends command to the end of \tabular@text@head |
|
|
|
% NOTE: command MUST be a command but without the \ |
|
|
|
% Eg. \append@tabular@head{relax} |
|
|
|
% |
|
|
|
% used to define \tabular@head for the tabular environment |
|
|
|
% used by the position environment |
|
|
|
% |
|
|
|
\def\append@tabular@head#1{% |
|
|
|
\ifnum\the\c@numberofcolumns=0\relax |
|
|
|
\else |
|
|
|
\iftoks\tabular@head\undefined@token\then |
|
|
|
\relax |
|
|
|
\else |
|
|
|
\@append{\noexpand\\}\to\tabular@head |
|
|
|
\@append{\noexpand\penalty-\@secpenalty}\to\tabular@head |
|
|
|
\skotfi |
|
|
|
\@append{\noexpand\begin{ncolumn}}\to\tabular@head |
|
|
|
\@append{\expandafter{\the\c@numberofcolumns}}\to\tabular@head |
|
|
|
\@append{\the\csname#1\endcsname}\to\tabular@head |
|
|
|
\@append{\noexpand\end{ncolumn}}\to\tabular@head |
|
|
|
\fi |
|
|
|
} |
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% append@tabular@tail |
|
|
|
% |
|
|
|
% appends command to the end of \tabular@text@htail |
|
|
|
% NOTE: command MUST be a command but without the \ |
|
|
|
% Eg. \append@tabular@tail{relax} |
|
|
|
% |
|
|
|
% used to define \tabular@tail for the tabular environment |
|
|
|
% used by the position environment |
|
|
|
% |
|
|
|
\def\append@tabular@tail#1{% |
|
|
|
\ifnum\the\c@numberofcolumns=0\relax |
|
|
|
\else |
|
|
|
\iftoks\tabular@tail\undefined@token\then |
|
|
|
\else |
|
|
|
\@append{\noexpand\\}\to\tabular@tail |
|
|
|
\@append{\noexpand\penalty-\@secpenalty}\to\tabular@tail |
|
|
|
\skotfi |
|
|
|
\@append{\noexpand\begin{ncolumn}}\to\tabular@tail |
|
|
|
\@append{\expandafter{\the\c@numberofcolumns}}\to\tabular@tail |
|
|
|
\@append{\the\csname#1\endcsname}\to\tabular@tail |
|
|
|
\@append{\noexpand\end{ncolumn}}\to\tabular@tail |
|
|
|
\fi |
|
|
|
} |
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% put the actual job descriptions here |
|
|
|
% \begin{postion} ... \end{position} |
|
|
|
% in the ... describe the position. |
|
|
|
% don't put the \dates \location etc in here. define them before hand |
|
|
|
\newenvironment{position}% |
|
|
|
{% |
|
|
|
\begingroup |
|
|
|
\par |
|
|
|
\the\tabular@head |
|
|
|
% \addpenalty{-\@secpenalty}% bad place for a page break |
|
|
|
\penalty -\@secpenalty % bad place for a page break |
|
|
|
\penalty 10000 |
|
|
|
\ignorespaces |
|
|
|
}{% |
|
|
|
\the\tabular@tail |
|
|
|
% \addpenalty{\@secpenalty}% good place for a page break |
|
|
|
\penalty \@secpenalty % good place for a page break |
|
|
|
\endgroup |
|
|
|
} |
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|
% DEFAULTS: (the rest of them) |
|
|
|
% |
|
|
|
% centered name |
|
|
|
% overlapped section titles |
|
|
|
% |
|
|
|
% format is: |
|
|
|
% title employer |
|
|
|
% location dates |
|
|
|
% body |
|
|
|
% with everything in the left of its column |
|
|
|
|
|
|
|
\@secpenalty = -500 |
|
|
|
\topmargin 0pt |
|
|
|
\headheight 0pt |
|
|
|
\headsep 0pt |
|
|
|
\textheight 9in |
|
|
|
\parindent 0pt |
|
|
|
\topmargin 0in |
|
|
|
\oddsidemargin 0pt |
|
|
|
\evensidemargin 0pt |
|
|
|
\marginparwidth 0pt |
|
|
|
\parindent 0pt |
|
|
|
\parskip \baselineskip |
|
|
|
\setcounter{secnumdepth}{0} |
|
|
|
\def\@listI{\leftmargin\leftmargini |
|
|
|
\topsep 0pt |
|
|
|
\parskip 0pt |
|
|
|
\partopsep 2pt plus 2pt |
|
|
|
\parsep 2pt plus 2pt |
|
|
|
\itemsep \parsep} |
|
|
|
|
|
|
|
\pagestyle{empty} % don't want page numbers |
|
|
|
|
|
|
|
\begin{format} |
|
|
|
\title{l}\employer{r}\\ |
|
|
|
\location{l}\dates{r}\\ |
|
|
|
\body\\ |
|
|
|
\end{format} |
|
|
|
|
|
|
|
\let\section\@@section |
|
|
|
|
xxxxxxxxxx