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 804