dont need res.cls any more
Getty Ritter
7 years ago
| 1 | % RESUME DOCUMENT STYLE -- Released 23 Nov 1989 | |
| 2 | % for LaTeX version 2.09 | |
| 3 | % Copyright (C) 1988,1989 by Michael DeCorte | |
| 4 | ||
| 5 | \typeout{Document Style `res' <26 Sep 89>.} | |
| 6 | ||
| 7 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 8 | % res.sty | |
| 9 | % | |
| 10 | % \documentstyle{res} | |
| 11 | % | |
| 12 | % Copyright (c) 1988 by Michael DeCorte | |
| 13 | % Permission to copy all or part of this work is granted, provided | |
| 14 | % that the copies are not made or distributed for resale, and that | |
| 15 | % the copyright notice and this notice are retained. | |
| 16 | % | |
| 17 | % THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO | |
| 18 | % WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK, | |
| 19 | % INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS | |
| 20 | % FOR ANY PARTICULAR PURPOSE. | |
| 21 | % | |
| 22 | % If you make any improvements, I'd like to hear about them. | |
| 23 | % | |
| 24 | % Michael DeCorte | |
| 25 | % P.O. Box 652 | |
| 26 | % Potsdam NY 13676 | |
| 27 | % mrd@sun.soe.clarkson.edu | |
| 28 | % mrd@clutx.bitnet | |
| 29 | % | |
| 30 | % Changes for LaTeX2e -- Venkat Krishnamurthy (Aug 7, 2001) | |
| 31 | % | |
| 32 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 33 | % You can have multiple style options the legal options ones are: | |
| 34 | % | |
| 35 | % centered the name and address are centered at the top of the | |
| 36 | % page (default) | |
| 37 | % | |
| 38 | % line the name is the left with a horizontal line then | |
| 39 | % the address to the right | |
| 40 | % | |
| 41 | % overlapped the section titles overlap the body text (default) | |
| 42 | % | |
| 43 | % margin the section titles are to the left of the body text | |
| 44 | % | |
| 45 | % 11pt use 11 point fonts instead of 10 point fonts | |
| 46 | % | |
| 47 | % 12pt use 12 point fonts instead of 10 point fonts | |
| 48 | % | |
| 49 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 50 | % Commands | |
| 51 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 52 | % \Resume prints the word resume but typeset nicely | |
| 53 | % | |
| 54 | % \newsectionwidth{dimen} | |
| 55 | % defines the amount of space the labels extend | |
| 56 | % into the left margin. | |
| 57 | % DO NOT TRY to change any of the dimensions | |
| 58 | % yourself. You will probably confuse the style file. | |
| 59 | % | |
| 60 | % \name{text} defines your name | |
| 61 | % | |
| 62 | % \address{text} | |
| 63 | % defines your address | |
| 64 | % this can be called twice if you have two addresses | |
| 65 | % use \\'s to indicate where either line breaks or | |
| 66 | % comas should go | |
| 67 | % | |
| 68 | % \opening this prints your name and address at that spot | |
| 69 | % this is not normally needed, as \begin{resume} | |
| 70 | % does this but is provided just in case you need | |
| 71 | % to do something odd | |
| 72 | % | |
| 73 | % \begin{resume} ... \end{resume} | |
| 74 | % all of the resume should go inside of this | |
| 75 | % environment | |
| 76 | % | |
| 77 | % \section{text} | |
| 78 | % This prints 'text' in the left hand margin. | |
| 79 | % Its exact placement depends on what the style | |
| 80 | % options has been set to. (overlapped or margin) | |
| 81 | % You should use \\ to start a new line. If the | |
| 82 | % style option is margin, the \\ is converted | |
| 83 | % to a space. | |
| 84 | % To use this in any of the list environments, put | |
| 85 | % the \section after the \item[] but before the | |
| 86 | % text. | |
| 87 | % Eg. | |
| 88 | % \begin{itemize} | |
| 89 | % \item\section{text} | |
| 90 | % text | |
| 91 | % \end{itemize} | |
| 92 | % | |
| 93 | % \begin{ncolumn}{n} ... \end{ncolumn} | |
| 94 | % creates a tabular environment with n equally | |
| 95 | % spaced columns. Separate columns by & and | |
| 96 | % end them with \\ | |
| 97 | % | |
| 98 | % \begin{position} ... \end{position} | |
| 99 | % this is used to print a job description. There should | |
| 100 | % be only one job description in it. Information | |
| 101 | % related to the job (such as title, dates...) will | |
| 102 | % be printed. | |
| 103 | % | |
| 104 | % \begin{format} ... \end{format} | |
| 105 | % used to change the default format for the position | |
| 106 | % environment. Within it the recognized commands are: | |
| 107 | % \title{option} | |
| 108 | % \employer{option} | |
| 109 | % \location{option} | |
| 110 | % \dates{option} | |
| 111 | % \body | |
| 112 | % \\ | |
| 113 | % where option is one of l,r,c standing for left, right, center. | |
| 114 | % The format will eventually be used to make several | |
| 115 | % tabular environments and you are defining the number of columns | |
| 116 | % and the placement of text within the columns of the tabulars. | |
| 117 | % Each row is terminated by a \\. Any number of options can | |
| 118 | % be on a line, they will each be set in their own columns. | |
| 119 | % Any of the options except \body may be left out. | |
| 120 | % | |
| 121 | % Eg. | |
| 122 | % \begin{format} | |
| 123 | % \title{l}\employer{r}\\ | |
| 124 | % \dates{r}\\ | |
| 125 | % \body\\ | |
| 126 | % \location{l}\\ | |
| 127 | % \end{format} | |
| 128 | % | |
| 129 | % In this example the title and employer information | |
| 130 | % are set in 2 columns left justified and right justified | |
| 131 | % respectively. Then the date is set right justified. | |
| 132 | % Then the body is set. Then the location is set left | |
| 133 | % justified. | |
| 134 | % | |
| 135 | % \employer{text} | |
| 136 | % \title{text} | |
| 137 | % \dates{text} | |
| 138 | % \location{text} | |
| 139 | % declare text for the next invocation of the position | |
| 140 | % environment | |
| 141 | % | |
| 142 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 143 | % Glue | |
| 144 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 145 | % | |
| 146 | % sectionskip the amount of horizontal before a section | |
| 147 | % | |
| 148 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 149 | % Dimensions | |
| 150 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 151 | % | |
| 152 | % sectionwidth the amount that the section titles go in the | |
| 153 | % left margin | |
| 154 | % | |
| 155 | % resumewidth the width of the total resume from the left | |
| 156 | % margin to the right. Don't use textwidth | |
| 157 | % | |
| 158 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 159 | % Definitions | |
| 160 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 161 | % | |
| 162 | % sectionfont the font used to print section titles | |
| 163 | % use \renewcommand to change it | |
| 164 | % | |
| 165 | % namefont the font used to print your name | |
| 166 | % use \renewcommand to change it | |
| 167 | % | |
| 168 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 169 | % THINGS TO DO | |
| 170 | % | |
| 171 | % add lm,rm options to format style to allow things to be placed | |
| 172 | % in the left or right margin respectivly | |
| 173 | % | |
| 174 | % add capability so that \body doesn't have to be proceeded (followed) | |
| 175 | % by a \\ allowing part of the description (eg. location) to be the | |
| 176 | % first (last) thing of the body | |
| 177 | % | |
| 178 | % clean up the list building procedures | |
| 179 | % | |
| 180 | % write docs to tell people how to use this | |
| 181 | ||
| 182 | \NeedsTeXFormat{LaTeX2e}[1995/12/01] | |
| 183 | \ProvidesClass{res}[2000/05/19 v1.4b Resume class] | |
| 184 | ||
| 185 | %\DeclareOption{11pt}{\renewcommand\@ptsize{1}} | |
| 186 | %\DeclareOption{12pt}{\renewcommand\@ptsize{2}} | |
| 187 | ||
| 188 | \PassOptionsToClass{11pt,12pt}{article} | |
| 189 | \LoadClassWithOptions{article} | |
| 190 | ||
| 191 | \newif\if@line | |
| 192 | \newif\if@margin | |
| 193 | ||
| 194 | \DeclareOption{line}{\@linetrue} | |
| 195 | \DeclareOption{centered}{\@linefalse} | |
| 196 | ||
| 197 | \DeclareOption{margin}{\@margintrue} | |
| 198 | \DeclareOption{overlapped}{\@marginfalse} | |
| 199 | ||
| 200 | \ExecuteOptions{overlapped,centered} | |
| 201 | \ProcessOptions\relax | |
| 202 | ||
| 203 | \nofiles % resume's don't need .aux files | |
| 204 | ||
| 205 | ||
| 206 | \newtoks\tabular@text % holds the current list being processed | |
| 207 | \newtoks\tabular@head % holds the head tabular list | |
| 208 | \newtoks\tabular@tail % holds the tail tabular list | |
| 209 | \newtoks\@ta % used by \@append | |
| 210 | \newtoks\undefined@token\undefined@token={} | |
| 211 | ||
| 212 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 213 | % prints a centered name with the address centered | |
| 214 | % or the two address on opposite sides of the page | |
| 215 | % | |
| 216 | \def\@printcentername{\begingroup | |
| 217 | % print the name centered | |
| 218 | \leavevmode\hbox to \textwidth{\hfil\@tablebox{\namefont\@name}\hfil}\par | |
| 219 | \@ifundefined{@addressone}{% | |
| 220 | % do nothing | |
| 221 | }{% | |
| 222 | \@ifundefined{@addresstwo}{ | |
| 223 | % only one address | |
| 224 | \leavevmode\hbox to \textwidth{\hfil\@tablebox{\@addressone}\hfil}\par | |
| 225 | }{ | |
| 226 | % two addresses | |
| 227 | \leavevmode\hbox to \textwidth{\@tablebox{\@addressone}\hfil | |
| 228 | \@tablebox{\@addresstwo}}\par | |
| 229 | }% | |
| 230 | }% | |
| 231 | \endgroup} | |
| 232 | ||
| 233 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 234 | % this is used to print the name and address at the top of | |
| 235 | % the page with a hline in between | |
| 236 | % | |
| 237 | \def\namefont{\large\bf} | |
| 238 | \def\@linename{\begingroup | |
| 239 | \def\\{, } | |
| 240 | {\namefont\@name} | |
| 241 | \vskip 2pt | |
| 242 | \fullline | |
| 243 | \vskip 2pt | |
| 244 | % where do you live? | |
| 245 | \@ifundefined{@addressone}{% | |
| 246 | % do nothing | |
| 247 | }{% | |
| 248 | \leavevmode\hbox to \textwidth | |
| 249 | {\hfill\vbox{\hbox{\@addressone} | |
| 250 | \hbox{\@addresstwo} | |
| 251 | }% | |
| 252 | }\par | |
| 253 | } | |
| 254 | \endgroup} | |
| 255 | ||
| 256 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 257 | % HEADINGS: | |
| 258 | % There are two types of headings: | |
| 259 | % 1) one with the name centered and the address centered or | |
| 260 | % in the left and right side if there are two address | |
| 261 | % 2) one where the name is in the upper left corner | |
| 262 | % the a line accross the paper | |
| 263 | % then the address all on one line in the right corner | |
| 264 | % the second address will be directly below the first if defined | |
| 265 | % | |
| 266 | \let\print@name\relax | |
| 267 | \def\ds@centered{\ifx\print@name\relax\let\print@name\@printcentername\fi} | |
| 268 | \def\ds@line{\ifx\print@name\relax\let\print@name\@linename\fi} | |
| 269 | ||
| 270 | ||
| 271 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 272 | % Use this to set the sectionwidth. | |
| 273 | % It adjust the width of the text as well as the hoffset | |
| 274 | % You probably shouldn't touch any of the size paramaters | |
| 275 | % unless you really understand all of this but it is not | |
| 276 | % hard. Either way, it can only be executed once | |
| 277 | % | |
| 278 | \def\sectionfont{\bf} | |
| 279 | \newdimen\sectionwidth | |
| 280 | \newskip\sectionskip | |
| 281 | \newdimen\resumewidth | |
| 282 | ||
| 283 | \resumewidth=6.5in | |
| 284 | \sectionskip=3.5ex plus 1ex minus -.2ex % values stolen from LaTeX | |
| 285 | ||
| 286 | \def\newsectionwidth#1{% | |
| 287 | \sectionwidth=#1 | |
| 288 | \textwidth=\resumewidth | |
| 289 | \advance\textwidth-\sectionwidth | |
| 290 | \hsize=\textwidth | |
| 291 | \hoffset=\sectionwidth | |
| 292 | } | |
| 293 | ||
| 294 | ||
| 295 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 296 | % This is for sectiontitles that are entirely in the left margin. | |
| 297 | % multiline sectiontitles are permited and will be broken by | |
| 298 | % \TeX{} to fit into a box \verb|\sectionwidth| wide. It is advised | |
| 299 | % that \verb|\\| be used to break the lines by hand as \TeX{} will | |
| 300 | % probably not do what you want. | |
| 301 | % | |
| 302 | % When using this with {\tt tabbing} and {\tt list} (or anything | |
| 303 | % that is made out of {\tt list}) put the \section's inside of | |
| 304 | % the \verb|\begin{}| and the \verb|\item|Eg. | |
| 305 | % \begin{verbatim} | |
| 306 | % \begin{trivlist} | |
| 307 | % \item[] | |
| 308 | % \section{foo} | |
| 309 | % text | |
| 310 | % \end{trivlist} | |
| 311 | % \end{verbatim} | |
| 312 | % | |
| 313 | \def\boxed@sectiontitle#1{% | |
| 314 | % this macro may be called in a tabular. Special code must be written | |
| 315 | % to accomodate this. In LaTeX, a tabular is made out of hboxes. | |
| 316 | % TeX never goes into horizontal mode because of this; it only | |
| 317 | % gets into vertical mode and restricted horizontal mode. Certain | |
| 318 | % indenting problems must be handled because of this. They | |
| 319 | % are delt with at the end of this routine. | |
| 320 | % It is also necessary to close the hbox that was created before | |
| 321 | % the \section and create a new one when this macro has ended. | |
| 322 | % This macro therefore simulates a \kill, so that any text before | |
| 323 | % the \section not be printed. The proper use is therefore | |
| 324 | % ... | |
| 325 | % text\\ | |
| 326 | % \section{foo} | |
| 327 | % more text\\ | |
| 328 | % ... | |
| 329 | \ifx\\\@tabcr % is this in a tabular? (this *should* work but is a cludge) | |
| 330 | \@stopfield % the is the first part of a \kill | |
| 331 | \else | |
| 332 | \@@par % This will end the previous paragraph if needed and | |
| 333 | % go into vertical mode. If this was already in | |
| 334 | % vertical mode then the \par does nothing. | |
| 335 | ||
| 336 | \fi | |
| 337 | \begingroup | |
| 338 | \everypar={}% | |
| 339 | \def\par{\@@par}% | |
| 340 | \let\\=\@normalcr | |
| 341 | \addpenalty{\@secpenalty} % this would be a good place for a page break | |
| 342 | % \@secpenalty is what LaTeX uses before its | |
| 343 | % section's. It happens to be -300 | |
| 344 | \addvspace{\sectionskip} % put in a bit of glue | |
| 345 | % The following hbox will be contributed to the page list without going | |
| 346 | % into horizontal mode. Therefore, any \parindent's, \parshape's, \leftskip | |
| 347 | % will be ignored but \hoffset's are not. The result is that the box will | |
| 348 | % only by \hoffset. This is what I want | |
| 349 | \hbox to 0pt{% | |
| 350 | \hss % this is an llap. In other words, this glue | |
| 351 | % will shrink by the width of the stuff in the vbox | |
| 352 | % (\sectionwidth) into the left margin and then | |
| 353 | % insert the contents of the vbox. | |
| 354 | \vtop to 0pt{% make a 0pt height paragraph, with the baseline at the | |
| 355 | % lined up with the baseline of the first box in the list | |
| 356 | \leftskip=0pt | |
| 357 | \hsize=\sectionwidth | |
| 358 | \textwidth=\sectionwidth | |
| 359 | \raggedright % you don't want this filled out to the right margin | |
| 360 | \sectionfont | |
| 361 | #1\vss % Go into horizontal mode; do the paragraph; | |
| 362 | % go into vertical mode; add some negative glue | |
| 363 | % to give a box of 0pt height and depth | |
| 364 | }% | |
| 365 | }% | |
| 366 | \addpenalty{-\@secpenalty} % this would be a bad place for a page break | |
| 367 | \vskip-\baselineskip % when the next box is processed, baselineskip glue | |
| 368 | % glue will be added (the box has no depth because of | |
| 369 | % the \vss; therefore, we don't have to worry about | |
| 370 | % \lineskiplimit). This -\baselineskip glue | |
| 371 | % is to undo this. \nointerlineskip doesn't | |
| 372 | % work because the baseline of this line would be lined | |
| 373 | % up with the top of the top of the next box. We | |
| 374 | % want the baselines lined up. | |
| 375 | % | |
| 376 | % It may have been possible to do this by forcing the | |
| 377 | % baseline of this box to be the top of the box but | |
| 378 | % then the interline skip between this box and the | |
| 379 | % previous box would be off as the baselines of the | |
| 380 | % this box (the one that being made above) and the | |
| 381 | % previous line would be separated by \baselineskip | |
| 382 | % (probably, it may be separted by the depth of the | |
| 383 | % previous box + \lineskip) but as the baseline of | |
| 384 | % this box has been moved to the top, the box's would | |
| 385 | % separted by to much glue. The exact amount being | |
| 386 | % the height of this box. | |
| 387 | \endgroup | |
| 388 | \ifx\\\@tabcr % is this in a tabular? (this *should* work but is a cludge) | |
| 389 | % this is the second part of the \kill; it starts the next tabbing line | |
| 390 | % Because this routine will never get into paragraph mode when used in | |
| 391 | % tabbing the \parskip that is discussed below will never be inserted. | |
| 392 | % Therefore it should not be negated as done below. | |
| 393 | \@startline | |
| 394 | \ignorespaces | |
| 395 | \else | |
| 396 | \vskip-\parskip % The next thing to be contributed will be a paragraph. | |
| 397 | % Right before being contributed though a \vskip\parskip | |
| 398 | % will be inserted. This is to negate it. | |
| 399 | % | |
| 400 | % I do consider this to be a bit of a cludge but | |
| 401 | % I can not find a way to write \unskipfutureskip | |
| 402 | % or a way to make TeX think that nothing has | |
| 403 | % been contributed to the page list. | |
| 404 | \fi | |
| 405 | } | |
| 406 | ||
| 407 | ||
| 408 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 409 | % This is for sectiontitles that are entirely above the section text | |
| 410 | % | |
| 411 | \def\unboxed@sectiontitle#1{% | |
| 412 | \ifx\\\@tabcr % see boxed@sectiontitle for explation | |
| 413 | \@stopfield | |
| 414 | \else | |
| 415 | \@@par | |
| 416 | \fi | |
| 417 | \begingroup | |
| 418 | \everypar={}% | |
| 419 | \def\par{\@@par}% | |
| 420 | \def\\{ } | |
| 421 | \addpenalty{\@secpenalty} | |
| 422 | \addvspace{\sectionskip} | |
| 423 | \hbox to 0pt{\hss\hbox to \sectionwidth{\sectionfont#1\hss}} | |
| 424 | \addpenalty{-\@secpenalty} % this would be a bad place for a page break | |
| 425 | \endgroup | |
| 426 | \ifx\\\@tabcr % see boxed@sectiontitle for explation | |
| 427 | \@startline | |
| 428 | \else | |
| 429 | \vskip-\parskip | |
| 430 | \fi | |
| 431 | \ignorespaces | |
| 432 | } | |
| 433 | ||
| 434 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 435 | % There are two types of section headings: | |
| 436 | % 1) the section heading is all on one line and directly | |
| 437 | % below it, is the body of the text | |
| 438 | % 2) the section heading is entirely in the left margin | |
| 439 | % (possibly taking multiple lines) with the body of | |
| 440 | % the text next to it | |
| 441 | % | |
| 442 | \let\@@section\relax | |
| 443 | \def\ds@overlapped{\ifx\@@section\relax\newsectionwidth{0.5in}\let | |
| 444 | \@@section\unboxed@sectiontitle\fi} | |
| 445 | \def\ds@margin{\ifx\@@section\relax\newsectionwidth{1.3in}\let | |
| 446 | \@@section\boxed@sectiontitle\fi} | |
| 447 | ||
| 448 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 449 | % DEFAULTS: (some of them) | |
| 450 | % | |
| 451 | % centered name | |
| 452 | % overlapped section titles | |
| 453 | % | |
| 454 | % format is: | |
| 455 | % title employer | |
| 456 | % location dates | |
| 457 | % body | |
| 458 | % with everything in the left of its column | |
| 459 | ||
| 460 | %\input article.sty | |
| 461 | ||
| 462 | \if@line\ds@line\else\ds@centered\fi | |
| 463 | \if@margin\ds@margin\else\ds@overlapped\fi | |
| 464 | ||
| 465 | ||
| 466 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 467 | % typeset resume all nice and pretty | |
| 468 | % | |
| 469 | \def\Resume{{R\'{e}sum\'{e}}} | |
| 470 | ||
| 471 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 472 | % makes a line of width \textwidth starting at -\hoffset | |
| 473 | % | |
| 474 | \def\fullline{ % hrules only listen to \hoffset | |
| 475 | \nointerlineskip % so I have this code | |
| 476 | \moveleft\hoffset\vbox{\hrule width\textwidth} | |
| 477 | \nointerlineskip | |
| 478 | } | |
| 479 | ||
| 480 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 481 | % create a multiline box. | |
| 482 | % | |
| 483 | \def\@tablebox#1{\begin{tabular}[t]{@{}l@{\extracolsep{\fill}}}#1\end{tabular}} | |
| 484 | ||
| 485 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 486 | % use this to define your name | |
| 487 | % | |
| 488 | \def\name#1{\def\@name{#1}} | |
| 489 | ||
| 490 | \def\@name{} | |
| 491 | ||
| 492 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 493 | % use this to define your address, this may be called more than once. | |
| 494 | % | |
| 495 | \let\@addressone\relax | |
| 496 | \let\@addresstwo\relax | |
| 497 | ||
| 498 | \def\address#1{ | |
| 499 | \@ifundefined{@addressone}{\def\@addressone{#1}}{\def\@addresstwo{#1}}} | |
| 500 | ||
| 501 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 502 | % if you want to print your name and address is a slightly | |
| 503 | % different format than sugessted, then this can be used | |
| 504 | % to place it exactly where you want | |
| 505 | % | |
| 506 | \def\opening{\def\@opening{} | |
| 507 | \begingroup | |
| 508 | \leftskip=-\hoffset % I use leftskip to move things to the left as | |
| 509 | \advance\textwidth\hoffset % changing hoffset doesn't work. But this | |
| 510 | \hsize=\textwidth % doesn't really work as hboxes are rules | |
| 511 | % are unaffeted | |
| 512 | \let\par=\@@par | |
| 513 | \parindent=0pt | |
| 514 | \parskip=0pt | |
| 515 | \print@name | |
| 516 | \endgroup | |
| 517 | } | |
| 518 | ||
| 519 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 520 | % all of the resume goes in the resume environment | |
| 521 | % | |
| 522 | \newenvironment{resume}{\begingroup | |
| 523 | \@ifundefined{@opening}{\opening}{} | |
| 524 | }{\endgroup} | |
| 525 | ||
| 526 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 527 | % gives you a tabular environment with n equally spaced columns | |
| 528 | % \begin{ncolumn}{#} ... \end{ncolumn} | |
| 529 | % | |
| 530 | % The p option of LaTeX is broken in all but the newest verion | |
| 531 | % of latex.tex, this is how to fix it | |
| 532 | % | |
| 533 | \def\@endpbox{\par\egroup\hfil} | |
| 534 | \let\@@endpbox=\@endpbox | |
| 535 | ||
| 536 | \newdimen\@columnwidth % the width of each column equal to | |
| 537 | \def\ncolumn#1{% | |
| 538 | % \@columnwidth = \textwidth / #1 | |
| 539 | \@columnwidth=\textwidth \divide\@columnwidth by #1 | |
| 540 | \begin{tabular*}{\textwidth}[t]% | |
| 541 | {*{#1}{@{}p{\@columnwidth}@{\extracolsep{\fill}}}} | |
| 542 | } | |
| 543 | ||
| 544 | \def\endncolumn{\end{tabular*}} | |
| 545 | ||
| 546 | ||
| 547 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 548 | % \employer{text} defines employer to be text | |
| 549 | % \location{text} defines location to be text | |
| 550 | % \dates{text} defines dates to be text | |
| 551 | % \title{text} defines title to be text | |
| 552 | % \body | |
| 553 | % | |
| 554 | ||
| 555 | \def\employer#1{\def\@employer{\print@employer{#1}}} | |
| 556 | \def\location#1{\def\@location{\print@location{#1}}} | |
| 557 | \def\dates#1{\def\@dates{\print@dates{#1}}} | |
| 558 | \def\title#1{\def\@title{\print@title{#1}}} | |
| 559 | ||
| 560 | \let\l@justify\raggedright | |
| 561 | \let\r@justify\raggedleft | |
| 562 | \let\c@justify\centering | |
| 563 | ||
| 564 | ||
| 565 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 566 | % \@format{name}{justify} | |
| 567 | % will define \print@#1 to print it's one argument | |
| 568 | % justified according to #2 which can be | |
| 569 | % l = left | |
| 570 | % r = right | |
| 571 | % c = center | |
| 572 | % | |
| 573 | % eg. | |
| 574 | % \@format{employer}{c} | |
| 575 | % is the same as \def\print@employer#1{{\centering #1\par}} | |
| 576 | % | |
| 577 | \def\@format#1#2{% | |
| 578 | \expandafter\gdef\csname print@#1\endcsname##1{% | |
| 579 | {\csname#2@justify\endcsname##1\par}} | |
| 580 | } | |
| 581 | ||
| 582 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 583 | % this is used to define how the position environment should | |
| 584 | % formated. | |
| 585 | % | |
| 586 | % \begin{format} positioning text \end{format} | |
| 587 | % where positioning text may be | |
| 588 | % \employer{pos} | |
| 589 | % \location{pos} | |
| 590 | % \dates{pos} | |
| 591 | % \title{pos} | |
| 592 | % \body (for the body of the position environment) | |
| 593 | % where pos is | |
| 594 | % l for left | |
| 595 | % r for right | |
| 596 | % c for center | |
| 597 | % use \\ to break the line | |
| 598 | % you don't have to use all of the options. | |
| 599 | % on any one line, you should indicate what you want on that line | |
| 600 | % and where it should go within its column. | |
| 601 | % eg. | |
| 602 | % the following prints the employer in the left with the location | |
| 603 | % centered within that its column. It then prints the date on the | |
| 604 | % right. Then it prints the body of the position environment. Then | |
| 605 | % it prints the title centered within its column; as there is only | |
| 606 | % one column here it is really just centered. | |
| 607 | % | |
| 608 | % \begin{format} | |
| 609 | % \employer{l}\location{c}\\ | |
| 610 | % \dates{r}\\ | |
| 611 | % \body\\ | |
| 612 | % \title{c}\\ | |
| 613 | % \end{format} | |
| 614 | ||
| 615 | \newcounter{numberofcolumns} | |
| 616 | \newenvironment{format}{% | |
| 617 | \def\end@line@head{\append@tabular@head{tabular@text}\tabular@text={}% | |
| 618 | \c@numberofcolumns 0} | |
| 619 | \def\end@line@tail{\append@tabular@tail{tabular@text}\tabular@text={}% | |
| 620 | \c@numberofcolumns 0} | |
| 621 | \tabular@text={} | |
| 622 | \tabular@head={} | |
| 623 | \tabular@tail={} | |
| 624 | \c@numberofcolumns 0 | |
| 625 | \let\\=\end@line@head | |
| 626 | \def\employer##1{\advance\c@numberofcolumns 1 | |
| 627 | \@format{employer}{##1} | |
| 628 | \append@tabular@text{employer}} | |
| 629 | \def\location##1{\advance\c@numberofcolumns 1 | |
| 630 | \@format{location}{##1} | |
| 631 | \append@tabular@text{location}} | |
| 632 | \def\dates##1{\advance\c@numberofcolumns 1 | |
| 633 | \@format{dates}{##1} | |
| 634 | \append@tabular@text{dates}} | |
| 635 | \def\title##1{\advance\c@numberofcolumns 1 | |
| 636 | \@format{title}{##1} | |
| 637 | \append@tabular@text{title}} | |
| 638 | \def\body{\iftoks\tabular@head\undefined@token\then | |
| 639 | \else | |
| 640 | \@append{\noexpand\\}\to\tabular@head | |
| 641 | \skotfi | |
| 642 | \let\\=\end@line@tail}}{} | |
| 643 | ||
| 644 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 645 | %taken from page 378 of TeXbook but freely hacked | |
| 646 | % | |
| 647 | % appends the expansion of #1 to the token list #2 | |
| 648 | ||
| 649 | \def\@append#1\to#2{% | |
| 650 | \@ta=\expandafter{#1}% | |
| 651 | \xdef\@append@temp{\the#2\the\@ta} | |
| 652 | \global#2=\expandafter{\@append@temp}% | |
| 653 | } | |
| 654 | ||
| 655 | ||
| 656 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 657 | % CHAA006%vaxb.rhbnc.ac.uk@NSS.Cs.Ucl.AC.UK | |
| 658 | % texhax.88.078 | |
| 659 | % is used to see if two token lists are equal | |
| 660 | % there must be a better way | |
| 661 | % | |
| 662 | ||
| 663 | \let \then = \empty | |
| 664 | \def \iftoks #1#2\then #3\else #4\skotfi{ | |
| 665 | \edef \1{\the #1} | |
| 666 | \edef \2{\the #2} | |
| 667 | \ifx \1\2\then #3\else #4\fi} | |
| 668 | ||
| 669 | ||
| 670 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 671 | % \append@tabular@text{command} | |
| 672 | % | |
| 673 | % appends command to the end of \tabular@text. | |
| 674 | % NOTE: command MUST be a command but without the \ | |
| 675 | % Eg. \append@tabular@text{relax} | |
| 676 | % | |
| 677 | % used to define \tabular@text for the tabular environment | |
| 678 | % used by append@tabular@head and append@tabular@tail | |
| 679 | % | |
| 680 | ||
| 681 | \def\append@tabular@text#1{% | |
| 682 | \iftoks\tabular@text\undefined@token\then | |
| 683 | \global\tabular@text=\expandafter{\csname @#1\endcsname} | |
| 684 | \else | |
| 685 | \@append{&}\to\tabular@text | |
| 686 | \@append{\csname @#1\endcsname}\to\tabular@text | |
| 687 | \skotfi | |
| 688 | } | |
| 689 | ||
| 690 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 691 | % append@tabular@head | |
| 692 | % | |
| 693 | % appends command to the end of \tabular@text@head | |
| 694 | % NOTE: command MUST be a command but without the \ | |
| 695 | % Eg. \append@tabular@head{relax} | |
| 696 | % | |
| 697 | % used to define \tabular@head for the tabular environment | |
| 698 | % used by the position environment | |
| 699 | % | |
| 700 | \def\append@tabular@head#1{% | |
| 701 | \ifnum\the\c@numberofcolumns=0\relax | |
| 702 | \else | |
| 703 | \iftoks\tabular@head\undefined@token\then | |
| 704 | \relax | |
| 705 | \else | |
| 706 | \@append{\noexpand\\}\to\tabular@head | |
| 707 | \@append{\noexpand\penalty-\@secpenalty}\to\tabular@head | |
| 708 | \skotfi | |
| 709 | \@append{\noexpand\begin{ncolumn}}\to\tabular@head | |
| 710 | \@append{\expandafter{\the\c@numberofcolumns}}\to\tabular@head | |
| 711 | \@append{\the\csname#1\endcsname}\to\tabular@head | |
| 712 | \@append{\noexpand\end{ncolumn}}\to\tabular@head | |
| 713 | \fi | |
| 714 | } | |
| 715 | ||
| 716 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 717 | % append@tabular@tail | |
| 718 | % | |
| 719 | % appends command to the end of \tabular@text@htail | |
| 720 | % NOTE: command MUST be a command but without the \ | |
| 721 | % Eg. \append@tabular@tail{relax} | |
| 722 | % | |
| 723 | % used to define \tabular@tail for the tabular environment | |
| 724 | % used by the position environment | |
| 725 | % | |
| 726 | \def\append@tabular@tail#1{% | |
| 727 | \ifnum\the\c@numberofcolumns=0\relax | |
| 728 | \else | |
| 729 | \iftoks\tabular@tail\undefined@token\then | |
| 730 | \else | |
| 731 | \@append{\noexpand\\}\to\tabular@tail | |
| 732 | \@append{\noexpand\penalty-\@secpenalty}\to\tabular@tail | |
| 733 | \skotfi | |
| 734 | \@append{\noexpand\begin{ncolumn}}\to\tabular@tail | |
| 735 | \@append{\expandafter{\the\c@numberofcolumns}}\to\tabular@tail | |
| 736 | \@append{\the\csname#1\endcsname}\to\tabular@tail | |
| 737 | \@append{\noexpand\end{ncolumn}}\to\tabular@tail | |
| 738 | \fi | |
| 739 | } | |
| 740 | ||
| 741 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 742 | % put the actual job descriptions here | |
| 743 | % \begin{postion} ... \end{position} | |
| 744 | % in the ... describe the position. | |
| 745 | % don't put the \dates \location etc in here. define them before hand | |
| 746 | \newenvironment{position}% | |
| 747 | {% | |
| 748 | \begingroup | |
| 749 | \par | |
| 750 | \the\tabular@head | |
| 751 | % \addpenalty{-\@secpenalty}% bad place for a page break | |
| 752 | \penalty -\@secpenalty % bad place for a page break | |
| 753 | \penalty 10000 | |
| 754 | \ignorespaces | |
| 755 | }{% | |
| 756 | \the\tabular@tail | |
| 757 | % \addpenalty{\@secpenalty}% good place for a page break | |
| 758 | \penalty \@secpenalty % good place for a page break | |
| 759 | \endgroup | |
| 760 | } | |
| 761 | ||
| 762 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
| 763 | % DEFAULTS: (the rest of them) | |
| 764 | % | |
| 765 | % centered name | |
| 766 | % overlapped section titles | |
| 767 | % | |
| 768 | % format is: | |
| 769 | % title employer | |
| 770 | % location dates | |
| 771 | % body | |
| 772 | % with everything in the left of its column | |
| 773 | ||
| 774 | \@secpenalty = -500 | |
| 775 | \topmargin 0pt | |
| 776 | \headheight 0pt | |
| 777 | \headsep 0pt | |
| 778 | \textheight 9in | |
| 779 | \parindent 0pt | |
| 780 | \topmargin 0in | |
| 781 | \oddsidemargin 0pt | |
| 782 | \evensidemargin 0pt | |
| 783 | \marginparwidth 0pt | |
| 784 | \parindent 0pt | |
| 785 | \parskip \baselineskip | |
| 786 | \setcounter{secnumdepth}{0} | |
| 787 | \def\@listI{\leftmargin\leftmargini | |
| 788 | \topsep 0pt | |
| 789 | \parskip 0pt | |
| 790 | \partopsep 2pt plus 2pt | |
| 791 | \parsep 2pt plus 2pt | |
| 792 | \itemsep \parsep} | |
| 793 | ||
| 794 | \pagestyle{empty} % don't want page numbers | |
| 795 | ||
| 796 | \begin{format} | |
| 797 | \title{l}\employer{r}\\ | |
| 798 | \location{l}\dates{r}\\ | |
| 799 | \body\\ | |
| 800 | \end{format} | |
| 801 | ||
| 802 | \let\section\@@section | |
| 803 |