My current resume, in LaTeX format. Output in PDF.

resume.cls 26KB

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