dont need res.cls any more
Getty Ritter
6 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 |