From 32c458f85a2bcea0785476df74d191c7641e52d0 Mon Sep 17 00:00:00 2001 From: Jean-Michel Tremblay Date: Sat, 21 Jun 2025 23:15:56 -0400 Subject: [PATCH] my resume template --- .gitignore | 4 + LICENCE | 417 +++++++++++++++++ Makefile | 12 + README.md | 129 +----- awesome-cv.cls | 813 +++++++++++++++++++++++++++++++++ examples/awesome-cv.cls | 1 + examples/resume.tex | 107 +++++ examples/resume/education.tex | 48 ++ examples/resume/experience.tex | 89 ++++ examples/resume/skills.tex | 51 +++ examples/resume/summary.tex | 20 + 11 files changed, 1570 insertions(+), 121 deletions(-) create mode 100644 .gitignore create mode 100644 LICENCE create mode 100644 Makefile create mode 100644 awesome-cv.cls create mode 120000 examples/awesome-cv.cls create mode 100644 examples/resume.tex create mode 100644 examples/resume/education.tex create mode 100644 examples/resume/experience.tex create mode 100644 examples/resume/skills.tex create mode 100644 examples/resume/summary.tex diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e0f3a0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +*.aux +*.log +*.pdf +trash \ No newline at end of file diff --git a/LICENCE b/LICENCE new file mode 100644 index 0000000..9566bc7 --- /dev/null +++ b/LICENCE @@ -0,0 +1,417 @@ +The LaTeX Project Public License +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + +LPPL Version 1.3c 2008-05-04 + +Copyright 1999 2002-2008 LaTeX3 Project + Everyone is allowed to distribute verbatim copies of this + license document, but modification of it is not allowed. + + +PREAMBLE +======== + +The LaTeX Project Public License (LPPL) is the primary license under +which the LaTeX kernel and the base LaTeX packages are distributed. + +You may use this license for any work of which you hold the copyright +and which you wish to distribute. This license may be particularly +suitable if your work is TeX-related (such as a LaTeX package), but +it is written in such a way that you can use it even if your work is +unrelated to TeX. + +The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE', +below, gives instructions, examples, and recommendations for authors +who are considering distributing their works under this license. + +This license gives conditions under which a work may be distributed +and modified, as well as conditions under which modified versions of +that work may be distributed. + +We, the LaTeX3 Project, believe that the conditions below give you +the freedom to make and distribute modified versions of your work +that conform with whatever technical specifications you wish while +maintaining the availability, integrity, and reliability of +that work. If you do not see how to achieve your goal while +meeting these conditions, then read the document `cfgguide.tex' +and `modguide.tex' in the base LaTeX distribution for suggestions. + + +DEFINITIONS +=========== + +In this license document the following terms are used: + + `Work' + Any work being distributed under this License. + + `Derived Work' + Any work that under any applicable law is derived from the Work. + + `Modification' + Any procedure that produces a Derived Work under any applicable + law -- for example, the production of a file containing an + original file associated with the Work or a significant portion of + such a file, either verbatim or with modifications and/or + translated into another language. + + `Modify' + To apply any procedure that produces a Derived Work under any + applicable law. + + `Distribution' + Making copies of the Work available from one person to another, in + whole or in part. Distribution includes (but is not limited to) + making any electronic components of the Work accessible by + file transfer protocols such as FTP or HTTP or by shared file + systems such as Sun's Network File System (NFS). + + `Compiled Work' + A version of the Work that has been processed into a form where it + is directly usable on a computer system. This processing may + include using installation facilities provided by the Work, + transformations of the Work, copying of components of the Work, or + other activities. Note that modification of any installation + facilities provided by the Work constitutes modification of the Work. + + `Current Maintainer' + A person or persons nominated as such within the Work. If there is + no such explicit nomination then it is the `Copyright Holder' under + any applicable law. + + `Base Interpreter' + A program or process that is normally needed for running or + interpreting a part or the whole of the Work. + + A Base Interpreter may depend on external components but these + are not considered part of the Base Interpreter provided that each + external component clearly identifies itself whenever it is used + interactively. Unless explicitly specified when applying the + license to the Work, the only applicable Base Interpreter is a + `LaTeX-Format' or in the case of files belonging to the + `LaTeX-format' a program implementing the `TeX language'. + + + +CONDITIONS ON DISTRIBUTION AND MODIFICATION +=========================================== + +1. Activities other than distribution and/or modification of the Work +are not covered by this license; they are outside its scope. In +particular, the act of running the Work is not restricted and no +requirements are made concerning any offers of support for the Work. + +2. You may distribute a complete, unmodified copy of the Work as you +received it. Distribution of only part of the Work is considered +modification of the Work, and no right to distribute such a Derived +Work may be assumed under the terms of this clause. + +3. You may distribute a Compiled Work that has been generated from a +complete, unmodified copy of the Work as distributed under Clause 2 +above, as long as that Compiled Work is distributed in such a way that +the recipients may install the Compiled Work on their system exactly +as it would have been installed if they generated a Compiled Work +directly from the Work. + +4. If you are the Current Maintainer of the Work, you may, without +restriction, modify the Work, thus creating a Derived Work. You may +also distribute the Derived Work without restriction, including +Compiled Works generated from the Derived Work. Derived Works +distributed in this manner by the Current Maintainer are considered to +be updated versions of the Work. + +5. If you are not the Current Maintainer of the Work, you may modify +your copy of the Work, thus creating a Derived Work based on the Work, +and compile this Derived Work, thus creating a Compiled Work based on +the Derived Work. + +6. If you are not the Current Maintainer of the Work, you may +distribute a Derived Work provided the following conditions are met +for every component of the Work unless that component clearly states +in the copyright notice that it is exempt from that condition. Only +the Current Maintainer is allowed to add such statements of exemption +to a component of the Work. + + a. If a component of this Derived Work can be a direct replacement + for a component of the Work when that component is used with the + Base Interpreter, then, wherever this component of the Work + identifies itself to the user when used interactively with that + Base Interpreter, the replacement component of this Derived Work + clearly and unambiguously identifies itself as a modified version + of this component to the user when used interactively with that + Base Interpreter. + + b. Every component of the Derived Work contains prominent notices + detailing the nature of the changes to that component, or a + prominent reference to another file that is distributed as part + of the Derived Work and that contains a complete and accurate log + of the changes. + + c. No information in the Derived Work implies that any persons, + including (but not limited to) the authors of the original version + of the Work, provide any support, including (but not limited to) + the reporting and handling of errors, to recipients of the + Derived Work unless those persons have stated explicitly that + they do provide such support for the Derived Work. + + d. You distribute at least one of the following with the Derived Work: + + 1. A complete, unmodified copy of the Work; + if your distribution of a modified component is made by + offering access to copy the modified component from a + designated place, then offering equivalent access to copy + the Work from the same or some similar place meets this + condition, even though third parties are not compelled to + copy the Work along with the modified component; + + 2. Information that is sufficient to obtain a complete, + unmodified copy of the Work. + +7. If you are not the Current Maintainer of the Work, you may +distribute a Compiled Work generated from a Derived Work, as long as +the Derived Work is distributed to all recipients of the Compiled +Work, and as long as the conditions of Clause 6, above, are met with +regard to the Derived Work. + +8. The conditions above are not intended to prohibit, and hence do not +apply to, the modification, by any method, of any component so that it +becomes identical to an updated version of that component of the Work as +it is distributed by the Current Maintainer under Clause 4, above. + +9. Distribution of the Work or any Derived Work in an alternative +format, where the Work or that Derived Work (in whole or in part) is +then produced by applying some process to that format, does not relax or +nullify any sections of this license as they pertain to the results of +applying that process. + +10. a. A Derived Work may be distributed under a different license + provided that license itself honors the conditions listed in + Clause 6 above, in regard to the Work, though it does not have + to honor the rest of the conditions in this license. + + b. If a Derived Work is distributed under a different license, that + Derived Work must provide sufficient documentation as part of + itself to allow each recipient of that Derived Work to honor the + restrictions in Clause 6 above, concerning changes from the Work. + +11. This license places no restrictions on works that are unrelated to +the Work, nor does this license place any restrictions on aggregating +such works with the Work by any means. + +12. Nothing in this license is intended to, or may be used to, prevent +complete compliance by all parties with all applicable laws. + + +NO WARRANTY +=========== + +There is no warranty for the Work. Except when otherwise stated in +writing, the Copyright Holder provides the Work `as is', without +warranty of any kind, either expressed or implied, including, but not +limited to, the implied warranties of merchantability and fitness for a +particular purpose. The entire risk as to the quality and performance +of the Work is with you. Should the Work prove defective, you assume +the cost of all necessary servicing, repair, or correction. + +In no event unless required by applicable law or agreed to in writing +will The Copyright Holder, or any author named in the components of the +Work, or any other party who may distribute and/or modify the Work as +permitted above, be liable to you for damages, including any general, +special, incidental or consequential damages arising out of any use of +the Work or out of inability to use the Work (including, but not limited +to, loss of data, data being rendered inaccurate, or losses sustained by +anyone as a result of any failure of the Work to operate with any other +programs), even if the Copyright Holder or said author or said other +party has been advised of the possibility of such damages. + + +MAINTENANCE OF THE WORK +======================= + +The Work has the status `author-maintained' if the Copyright Holder +explicitly and prominently states near the primary copyright notice in +the Work that the Work can only be maintained by the Copyright Holder +or simply that it is `author-maintained'. + +The Work has the status `maintained' if there is a Current Maintainer +who has indicated in the Work that they are willing to receive error +reports for the Work (for example, by supplying a valid e-mail +address). It is not required for the Current Maintainer to acknowledge +or act upon these error reports. + +The Work changes from status `maintained' to `unmaintained' if there +is no Current Maintainer, or the person stated to be Current +Maintainer of the work cannot be reached through the indicated means +of communication for a period of six months, and there are no other +significant signs of active maintenance. + +You can become the Current Maintainer of the Work by agreement with +any existing Current Maintainer to take over this role. + +If the Work is unmaintained, you can become the Current Maintainer of +the Work through the following steps: + + 1. Make a reasonable attempt to trace the Current Maintainer (and + the Copyright Holder, if the two differ) through the means of + an Internet or similar search. + + 2. If this search is successful, then enquire whether the Work + is still maintained. + + a. If it is being maintained, then ask the Current Maintainer + to update their communication data within one month. + + b. If the search is unsuccessful or no action to resume active + maintenance is taken by the Current Maintainer, then announce + within the pertinent community your intention to take over + maintenance. (If the Work is a LaTeX work, this could be + done, for example, by posting to comp.text.tex.) + + 3a. If the Current Maintainer is reachable and agrees to pass + maintenance of the Work to you, then this takes effect + immediately upon announcement. + + b. If the Current Maintainer is not reachable and the Copyright + Holder agrees that maintenance of the Work be passed to you, + then this takes effect immediately upon announcement. + + 4. If you make an `intention announcement' as described in 2b. above + and after three months your intention is challenged neither by + the Current Maintainer nor by the Copyright Holder nor by other + people, then you may arrange for the Work to be changed so as + to name you as the (new) Current Maintainer. + + 5. If the previously unreachable Current Maintainer becomes + reachable once more within three months of a change completed + under the terms of 3b) or 4), then that Current Maintainer must + become or remain the Current Maintainer upon request provided + they then update their communication data within one month. + +A change in the Current Maintainer does not, of itself, alter the fact +that the Work is distributed under the LPPL license. + +If you become the Current Maintainer of the Work, you should +immediately provide, within the Work, a prominent and unambiguous +statement of your status as Current Maintainer. You should also +announce your new status to the same pertinent community as +in 2b) above. + + +WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE +====================================================== + +This section contains important instructions, examples, and +recommendations for authors who are considering distributing their +works under this license. These authors are addressed as `you' in +this section. + +Choosing This License or Another License +---------------------------------------- + +If for any part of your work you want or need to use *distribution* +conditions that differ significantly from those in this license, then +do not refer to this license anywhere in your work but, instead, +distribute your work under a different license. You may use the text +of this license as a model for your own license, but your license +should not refer to the LPPL or otherwise give the impression that +your work is distributed under the LPPL. + +The document `modguide.tex' in the base LaTeX distribution explains +the motivation behind the conditions of this license. It explains, +for example, why distributing LaTeX under the GNU General Public +License (GPL) was considered inappropriate. Even if your work is +unrelated to LaTeX, the discussion in `modguide.tex' may still be +relevant, and authors intending to distribute their works under any +license are encouraged to read it. + +A Recommendation on Modification Without Distribution +----------------------------------------------------- + +It is wise never to modify a component of the Work, even for your own +personal use, without also meeting the above conditions for +distributing the modified component. While you might intend that such +modifications will never be distributed, often this will happen by +accident -- you may forget that you have modified that component; or +it may not occur to you when allowing others to access the modified +version that you are thus distributing it and violating the conditions +of this license in ways that could have legal implications and, worse, +cause problems for the community. It is therefore usually in your +best interest to keep your copy of the Work identical with the public +one. Many works provide ways to control the behavior of that work +without altering any of its licensed components. + +How to Use This License +----------------------- + +To use this license, place in each of the components of your work both +an explicit copyright notice including your name and the year the work +was authored and/or last substantially modified. Include also a +statement that the distribution and/or modification of that +component is constrained by the conditions in this license. + +Here is an example of such a notice and statement: + + %% pig.dtx + %% Copyright 2005 M. Y. Name + % + % This work may be distributed and/or modified under the + % conditions of the LaTeX Project Public License, either version 1.3 + % of this license or (at your option) any later version. + % The latest version of this license is in + % http://www.latex-project.org/lppl.txt + % and version 1.3 or later is part of all distributions of LaTeX + % version 2005/12/01 or later. + % + % This work has the LPPL maintenance status `maintained'. + % + % The Current Maintainer of this work is M. Y. Name. + % + % This work consists of the files pig.dtx and pig.ins + % and the derived file pig.sty. + +Given such a notice and statement in a file, the conditions +given in this license document would apply, with the `Work' referring +to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being +generated from `pig.dtx' using `pig.ins'), the `Base Interpreter' +referring to any `LaTeX-Format', and both `Copyright Holder' and +`Current Maintainer' referring to the person `M. Y. Name'. + +If you do not want the Maintenance section of LPPL to apply to your +Work, change `maintained' above into `author-maintained'. +However, we recommend that you use `maintained', as the Maintenance +section was added in order to ensure that your Work remains useful to +the community even when you can no longer maintain and support it +yourself. + +Derived Works That Are Not Replacements +--------------------------------------- + +Several clauses of the LPPL specify means to provide reliability and +stability for the user community. They therefore concern themselves +with the case that a Derived Work is intended to be used as a +(compatible or incompatible) replacement of the original Work. If +this is not the case (e.g., if a few lines of code are reused for a +completely different task), then clauses 6b and 6d shall not apply. + + +Important Recommendations +------------------------- + + Defining What Constitutes the Work + + The LPPL requires that distributions of the Work contain all the + files of the Work. It is therefore important that you provide a + way for the licensee to determine which files constitute the Work. + This could, for example, be achieved by explicitly listing all the + files of the Work near the copyright notice of each file or by + using a line such as: + + % This work consists of all files listed in manifest.txt. + + in that place. In the absence of an unequivocal list it might be + impossible for the licensee to determine what is considered by you + to comprise the Work and, in such a case, the licensee would be + entitled to make reasonable conjectures as to which files comprise + the Work. + + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..6ca6386 --- /dev/null +++ b/Makefile @@ -0,0 +1,12 @@ +.PHONY: examples + +CC = xelatex +EXAMPLES_DIR = examples +RESUME_DIR = examples/resume +CV_DIR = examples/cv +RESUME_SRCS = $(shell find $(RESUME_DIR) -name '*.tex') +CV_SRCS = $(shell find $(CV_DIR) -name '*.tex') + + +resume.pdf: $(EXAMPLES_DIR)/resume.tex $(RESUME_SRCS) + $(CC) -output-directory=$(EXAMPLES_DIR) $< diff --git a/README.md b/README.md index 2325199..08fdb37 100644 --- a/README.md +++ b/README.md @@ -1,126 +1,13 @@ -

- - AwesomeCV - -
- Awesome CV -

+This is taken from: https://github.com/posquit0/Awesome-CV -

- LaTeX template for your outstanding job application -

+and contains only content changes to build my resume -
- - Donate - - - GitHub Actions - - - Example Resume - - - Example CV - - - Example Coverletter - -
+# reminders to my future self -
- -## What is Awesome CV? - -**Awesome CV** is LaTeX template for a **CV(Curriculum Vitae)**, **Résumé** or **Cover Letter** inspired by [Fancy CV](https://www.sharelatex.com/templates/cv-or-resume/fancy-cv). It is easy to customize your own template, especially since it is really written by a clean, semantic markup. - - -## Donate - -Please help keep this project alive! Donations are welcome and will go towards further development of this project. - - PayPal: paypal.me/posquit0 - -*Thank you for your support!* - -## Preview - -#### Résumé - -You can see [PDF](https://raw.githubusercontent.com/posquit0/Awesome-CV/master/examples/resume.pdf) - -| Page. 1 | Page. 2 | -|:---:|:---:| -| [![Résumé](https://raw.githubusercontent.com/posquit0/Awesome-CV/master/examples/resume-0.png)](https://raw.githubusercontent.com/posquit0/Awesome-CV/master/examples/resume.pdf) | [![Résumé](https://raw.githubusercontent.com/posquit0/Awesome-CV/master/examples/resume-1.png)](https://raw.githubusercontent.com/posquit0/Awesome-CV/master/examples/resume.pdf) | - -#### Cover Letter - -You can see [PDF](https://raw.githubusercontent.com/posquit0/Awesome-CV/master/examples/coverletter.pdf) - -| Without Sections | With Sections | -|:---:|:---:| -| [![Cover Letter(Traditional)](https://raw.githubusercontent.com/posquit0/Awesome-CV/master/examples/coverletter-0.png)](https://raw.githubusercontent.com/posquit0/Awesome-CV/master/examples/coverletter.pdf) | [![Cover Letter(Awesome)](https://raw.githubusercontent.com/posquit0/Awesome-CV/master/examples/coverletter-1.png)](https://raw.githubusercontent.com/posquit0/Awesome-CV/master/examples/coverletter.pdf) | - - -## Quick Start - -* [**Edit Résumé on OverLeaf.com**](https://www.overleaf.com/latex/templates/awesome-cv/tvmzpvdjfqxp) -* [**Edit Cover Letter on OverLeaf.com**](https://www.overleaf.com/latex/templates/awesome-cv-cover-letter/pfzzjspkthbk) - -**_Note:_ Above services do not guarantee up-to-date source code of Awesome CV** - - -## How to Use - -#### Requirements - -A full TeX distribution is assumed. [Various distributions for different operating systems (Windows, Mac, \*nix) are available](http://tex.stackexchange.com/q/55437) but TeX Live is recommended. -You can [install TeX from upstream](https://tex.stackexchange.com/q/1092) (recommended; most up-to-date) or use `sudo apt-get install texlive-full` if you really want that. (It's generally a few years behind.) - -If you don't want to install the dependencies on your system, this can also be obtained via [Docker](https://docker.com). - -#### Usage - -At a command prompt, run +* clone that repo: https://github.com/posquit0/Awesome-CV +* replace Makefile / example folders with the ones in this repo ```bash -xelatex {your-cv}.tex -``` - -Or using docker: - -```bash -docker run --rm --user $(id -u):$(id -g) -i -w "/doc" -v "$PWD":/doc thomasweise/texlive make -``` - -In either case, this should result in the creation of ``{your-cv}.pdf`` - - -## Credit - -[**LaTeX**](https://www.latex-project.org) is a fantastic typesetting program that a lot of people use these days, especially the math and computer science people in academia. - -[**LaTeX FontAwesome**](https://github.com/furl/latex-fontawesome) is bindings for FontAwesome icons to be used in XeLaTeX. - -[**Roboto**](https://github.com/google/roboto) is the default font on Android and ChromeOS, and the recommended font for Google’s visual language, Material Design. - -[**Source Sans Pro**](https://github.com/adobe-fonts/source-sans-pro) is a set of OpenType fonts that have been designed to work well in user interface (UI) environments. - - -## Contact - -You are free to take my `.tex` file and modify it to create your own resume. Please don't use my resume for anything else without my permission, though! - -If you have any questions, feel free to join me at [`#posquit0` on Freenode](irc://irc.freenode.net/posquit0) and ask away. Click [here](https://kiwiirc.com/client/irc.freenode.net/posquit0) to connect. - -Good luck! - - -## Maintainers -- [posquit0](https://github.com/posquit0) -- [OJFord](https://github.com/OJFord) - - -## See Also - -* [Awesome Identity](https://github.com/posquit0/hugo-awesome-identity) - A single-page Hugo theme to introduce yourself. +# build: +docker run --rm --user $(id -u):$(id -g) -i -w "/doc" -v "$PWD":/doc thomasweise/docker-texlive-full make +``` \ No newline at end of file diff --git a/awesome-cv.cls b/awesome-cv.cls new file mode 100644 index 0000000..a4270c1 --- /dev/null +++ b/awesome-cv.cls @@ -0,0 +1,813 @@ +%% Start of file `awesome-cv.cls'. +% Awesome CV Class File +% +% This class has been downloaded from: +% https://github.com/posquit0/Awesome-CV +% +% Author: +% Claud D. Park +% http://www.posquit0.com +% +% Notes: +% 1) This class file defines the structure and layout of the template file (cv.tex, resume.tex). +% 2) It has been written in such a way that under most circumstances you +% should not need to edit it. +% +% Class license: +% LPPL v1.3c (http://www.latex-project.org/lppl) +% + + +%------------------------------------------------------------------------------- +% Identification +%------------------------------------------------------------------------------- +\ProvidesClass{awesome-cv}[2017/02/05 v1.6.1 Awesome Curriculum Vitae Class] +\NeedsTeXFormat{LaTeX2e} + + +%------------------------------------------------------------------------------- +% Class options +% +% (need to be done before the external package loading, for example because +% we need \paperwidth, \paperheight and \@ptsize to be defined before loading +% geometry and fancyhdr) +%------------------------------------------------------------------------------- +% Options for draft or final +\DeclareOption{draft}{\setlength\overfullrule{5pt}} +\DeclareOption{final}{\setlength\overfullrule{0pt}} +% Inherit options of article +\DeclareOption*{% + \PassOptionsToClass{\CurrentOption}{article} +} +\ProcessOptions\relax +\LoadClass{article} + + +%------------------------------------------------------------------------------- +% 3rd party packages +%------------------------------------------------------------------------------- +% Needed to make fixed length table +\RequirePackage{array} +% Needed to handle list environment +\RequirePackage{enumitem} +% Needed to handle text alignment +\RequirePackage{ragged2e} +% Needed to configure page layout +\RequirePackage{geometry} +% Needed to make header & footer efficiently +\RequirePackage{fancyhdr} +% Needed to manage colors +\RequirePackage{xcolor} +% Needed to use \ifxetex-\else-\fi statement +\RequirePackage{ifxetex} +% Needed to use \if-\then-\else statement +\RequirePackage{xifthen} +% Needed to strip chars from telephone number +\RequirePackage{xstring} +% Needed to use a toolbox of programming tools +\RequirePackage{etoolbox} +% Needed to change line spacing in specific environment +\RequirePackage{setspace} +% Needed to manage fonts +\RequirePackage[quiet]{fontspec} +% To support LaTeX quoting style +\defaultfontfeatures{Ligatures=TeX} +% Needed to manage math fonts +\RequirePackage{unicode-math} +% Needed to use icons from font-awesome +\RequirePackage{fontawesome5} +\RequirePackage{roboto} +\RequirePackage[default,opentype]{sourcesanspro} +% Needed for the photo ID +\RequirePackage[skins]{tcolorbox} +% Needed to deal a paragraphs +\RequirePackage{parskip} +% Needed to deal hyperlink +\RequirePackage[hidelinks,unicode,pdfpagelabels=false]{hyperref} +\hypersetup{% + pdftitle={}, + pdfauthor={}, + pdfsubject={}, + pdfkeywords={} +} +% Solves issues Warning: File `cv.out' has changed +\RequirePackage{bookmark} + +%------------------------------------------------------------------------------- +% Configuration for directory locations +%------------------------------------------------------------------------------- +% Configure an optional directory location for fonts(default: 'fonts/') +% Not required anymore but left in place for backward compatability. +\newcommand*{\fontdir}[1][fonts/]{\def\@fontdir{#1}} + +%------------------------------------------------------------------------------- +% Configuration for layout +%------------------------------------------------------------------------------- +%% Page Layout +% Configure page margins with geometry +\geometry{left=2.0cm, top=1.5cm, right=2.0cm, bottom=2.0cm, footskip=.5cm} + +%% Header & Footer +% Set offset to each header and footer +\fancyhfoffset{0em} +% Remove head rule +\renewcommand{\headrulewidth}{0pt} +% Clear all header & footer fields +\fancyhf{} +% Enable if you want to make header or footer using fancyhdr +\pagestyle{fancy} + + +%------------------------------------------------------------------------------- +% Configuration for colors +%------------------------------------------------------------------------------- +% Gray-scale colors +\definecolor{white}{HTML}{FFFFFF} +\definecolor{black}{HTML}{000000} +\definecolor{darkgray}{HTML}{333333} +\definecolor{gray}{HTML}{5D5D5D} +\definecolor{lightgray}{HTML}{999999} +% Basic colors +\definecolor{green}{HTML}{C2E15F} +\definecolor{orange}{HTML}{FDA333} +\definecolor{purple}{HTML}{D3A4F9} +\definecolor{red}{HTML}{FB4485} +\definecolor{blue}{HTML}{6CE0F1} +% Text colors +\definecolor{darktext}{HTML}{414141} +\colorlet{text}{darkgray} +\colorlet{graytext}{gray} +\colorlet{lighttext}{lightgray} +\colorlet{sectiondivider}{gray} +% Awesome colors +\definecolor{awesome-emerald}{HTML}{00A388} +\definecolor{awesome-skyblue}{HTML}{0395DE} +\definecolor{awesome-red}{HTML}{DC3522} +\definecolor{awesome-pink}{HTML}{EF4089} +\definecolor{awesome-orange}{HTML}{FF6138} +\definecolor{awesome-nephritis}{HTML}{27AE60} +\definecolor{awesome-concrete}{HTML}{95A5A6} +\definecolor{awesome-darknight}{HTML}{131A28} +\colorlet{awesome}{awesome-red} + +% Boolean value to switch section color highlighting +\newbool{acvSectionColorHighlight} +\setbool{acvSectionColorHighlight}{true} + +% Awesome section color +\def\@sectioncolor#1#2#3{% + \ifbool{acvSectionColorHighlight}{{\color{awesome}#1#2#3}}{#1#2#3}% +} + + +%------------------------------------------------------------------------------- +% Configuration for fonts +%------------------------------------------------------------------------------- +\newcommand*{\headerfont}{\roboto} +\newcommand*{\headerfontlight}{\robotolight} +\newcommand*{\footerfont}{\sourcesanspro} +\newcommand*{\bodyfont}{\sourcesanspro} +\newcommand*{\bodyfontlight}{\sourcesansprolight} + +%------------------------------------------------------------------------------- +% Configuration for styles +%------------------------------------------------------------------------------- +% Configure styles for each CV elements +% For fundamental structures +\newcommand*{\headerfirstnamestyle}[1]{{\fontsize{32pt}{1em}\headerfontlight\color{graytext} #1}} +\newcommand*{\headerlastnamestyle}[1]{{\fontsize{32pt}{1em}\headerfont\bfseries\color{text} #1}} +\newcommand*{\headerpositionstyle}[1]{{\fontsize{7.6pt}{1em}\bodyfont\scshape\color{awesome} #1}} +\newcommand*{\headeraddressstyle}[1]{{\fontsize{8pt}{1em}\headerfont\itshape\color{lighttext} #1}} +\newcommand*{\headersocialstyle}[1]{{\fontsize{6.8pt}{1em}\headerfont\color{text} #1}} +\newcommand*{\headerquotestyle}[1]{{\fontsize{9pt}{1em}\bodyfont\itshape\color{darktext} #1}} +\newcommand*{\footerstyle}[1]{{\fontsize{8pt}{1em}\footerfont\scshape\color{lighttext} #1}} +\newcommand*{\sectionstyle}[1]{{\fontsize{16pt}{1em}\bodyfont\bfseries\color{text}\@sectioncolor #1}} +\newcommand*{\subsectionstyle}[1]{{\fontsize{12pt}{1em}\bodyfont\scshape\textcolor{text}{#1}}} +\newcommand*{\paragraphstyle}{\fontsize{9pt}{1em}\bodyfontlight\upshape\color{text}} + +% For elements of entry +\newcommand*{\entrytitlestyle}[1]{{\fontsize{10pt}{1em}\bodyfont\bfseries\color{darktext} #1}} +\newcommand*{\entrypositionstyle}[1]{{\fontsize{8pt}{1em}\bodyfont\scshape\color{graytext} #1}} +\newcommand*{\entrydatestyle}[1]{{\fontsize{8pt}{1em}\bodyfontlight\slshape\color{graytext} #1}} +\newcommand*{\entrylocationstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\slshape\color{awesome} #1}} +\newcommand*{\descriptionstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\upshape\color{text} #1}} + +% For elements of subentry +\newcommand*{\subentrytitlestyle}[1]{{\fontsize{8pt}{1em}\bodyfont\mdseries\color{graytext} #1}} +\newcommand*{\subentrypositionstyle}[1]{{\fontsize{7pt}{1em}\bodyfont\scshape\color{graytext} #1}} +\newcommand*{\subentrydatestyle}[1]{{\fontsize{7pt}{1em}\bodyfontlight\slshape\color{graytext} #1}} +\newcommand*{\subentrylocationstyle}[1]{{\fontsize{7pt}{1em}\bodyfontlight\slshape\color{awesome} #1}} +\newcommand*{\subdescriptionstyle}[1]{{\fontsize{8pt}{1em}\bodyfontlight\upshape\color{text} #1}} + +% For elements of honor +\newcommand*{\honortitlestyle}[1]{{\fontsize{9pt}{1em}\bodyfont\color{graytext} #1}} +\newcommand*{\honorpositionstyle}[1]{{\fontsize{9pt}{1em}\bodyfont\bfseries\color{darktext} #1}} +\newcommand*{\honordatestyle}[1]{{\fontsize{9pt}{1em}\bodyfont\color{graytext} #1}} +\newcommand*{\honorlocationstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\slshape\color{awesome} #1}} + +% For elements of skill +\newcommand*{\skilltypestyle}[1]{{\fontsize{10pt}{1em}\bodyfont\bfseries\color{darktext} #1}} +\newcommand*{\skillsetstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\color{text} #1}} + +% For elements of the cover letter +\newcommand*{\lettersectionstyle}[1]{{\fontsize{14pt}{1em}\bodyfont\bfseries\color{text}\@sectioncolor #1}} +\newcommand*{\recipientaddressstyle}[1]{{\fontsize{9pt}{1em}\bodyfont\scshape\color{graytext} #1}} +\newcommand*{\recipienttitlestyle}[1]{{\fontsize{11pt}{1em}\bodyfont\bfseries\color{darktext} #1}} +\newcommand*{\lettertitlestyle}[1]{{\fontsize{10pt}{1em}\bodyfontlight\bfseries\color{darktext} \underline{#1}}} +\newcommand*{\letterdatestyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\slshape\color{graytext} #1}} +\newcommand*{\lettertextstyle}{\fontsize{10pt}{1.4em}\bodyfontlight\upshape\color{graytext}} +\newcommand*{\letternamestyle}[1]{{\fontsize{10pt}{1em}\bodyfont\bfseries\color{darktext} #1}} +\newcommand*{\letterenclosurestyle}[1]{{\fontsize{10pt}{1em}\bodyfontlight\slshape\color{lighttext} #1}} + + +%------------------------------------------------------------------------------- +% Commands for personal information +%------------------------------------------------------------------------------- +% Define photo ID +% Usage: \photo[circle|rectangle,edge|noedge,left|right]{} +\newcommand{\photo}[2][circle,edge,left]{% + \def\@photo{#2} + \@for\tmp:=#1\do{% + \ifthenelse{\equal{\tmp}{circle} \or \equal{\tmp}{rectangle}}% + {\let\@photoshape\tmp}{}% + \ifthenelse{\equal{\tmp}{edge} \or \equal{\tmp}{noedge}}% + {\let\@photoedge\tmp}{}% + \ifthenelse{\equal{\tmp}{left} \or \equal{\tmp}{right}}% + {\let\@photoalign\tmp}{}% + }% +} +\def\@photoshape{circle} +\def\@photoedge{edge} +\def\@photoalign{left} + +% Define writer's name +% Usage: \name{}{} +% Usage: \firstname{} +% Usage: \lastname{} +% Usage: \familyname{} +\newcommand*{\name}[2]{\def\@firstname{#1}\def\@lastname{#2}} +\newcommand*{\firstname}[1]{\def\@firstname{#1}} +\newcommand*{\lastname}[1]{\def\@lastname{#1}} +\newcommand*{\familyname}[1]{\def\@lastname{#1}} +\def\@familyname{\@lastname} + +% Define writer's address +% Usage: \address{
} +\newcommand*{\address}[1]{\def\@address{#1}} + +% Define writer's position +% Usage: \position{} +\newcommand*{\position}[1]{\def\@position{#1}} + +% Defines writer's mobile (optional) +% Usage: \mobile{} +\newcommand*{\mobile}[1] +{ + \def\@mobile{#1} + \def\@teluri{tel:\@mobile} + % Strip unwanted characters + \StrDel{\@teluri}{ }[\@teluri]% + \StrDel{\@teluri}{-}[\@teluri]% + \StrDel{\@teluri}{(}[\@teluri]% + \StrDel{\@teluri}{)}[\@teluri]% +} + +% Defines writer's email (optional) +% Usage: \email{} +\newcommand*{\email}[1]{\def\@email{#1}} + +% Defines writer's date of birth (optional) +% Usage: \dateofbirth{} +\newcommand*{\dateofbirth}[1]{\def\@dateofbirth{#1}} + +% Defines writer's homepage (optional) +% Usage: \homepage{} +\newcommand*{\homepage}[1]{\def\@homepage{#1}} + +% Defines writer's github (optional) +% Usage: \github{} +\newcommand*{\github}[1]{\def\@github{#1}} + +% Defines writer's gitlab (optional) +% Usage: \gitlab{} +\newcommand*{\gitlab}[1]{\def\@gitlab{#1}} + +% Defines writer's bitbucket (optional) +% Usage: \bitbucket{} +\newcommand*{\bitbucket}[1]{\def\@bitbucket{#1}} + +% Defines writer's stackoverflow profile (optional) +% Usage: \stackoverflow{}{} +% e.g.https://stackoverflow.com/users/123456/sam-smith +% would be \stackoverflow{123456}{sam-smith} +\newcommand*{\stackoverflow}[2]{\def\@stackoverflowid{#1}\def\@stackoverflowname{#2}} + +% Defines writer's linked-in (optional) +% Usage: \linkedin{} +\newcommand*{\linkedin}[1]{\def\@linkedin{#1}} + +% Defines writer's orcid (optional) +% Usage: \orcid{} +\newcommand*{\orcid}[1]{\def\@orcid{#1}} + +% Defines writer's twitter (optional) +% Usage: \twitter{} +\newcommand*{\twitter}[1]{\def\@twitter{#1}} + +% Defines writer's Mastodon (optional) +% Usage: \mastodon{}{} +\newcommand*{\mastodon}[2]{\def\@mastodoninstance{#1}\def\@mastodonname{#2}} + +% Defines writer's resarchgate (optional) +% Usage: \researchgate{} +\newcommand*{\researchgate}[1]{\def\@researchgate{#1}} + +% Defines writer's skype (optional) +% Usage: \skype{} +\newcommand*{\skype}[1]{\def\@skype{#1}} + +% Defines writer's reddit (optional) +% Usage: \reddit{} +\newcommand*{\reddit}[1]{\def\@reddit{#1}} + +% Defines writer's xing (optional) +% Usage: \xing{} +\newcommand*{\xing}[1]{\def\@xing{#1}} + +% Defines writer's medium profile (optional) +% Usage: \medium{} +\newcommand*{\medium}[1]{\def\@medium{#1}} + +% Defines writer's kaggle (optional) +% Usage: \kaggle{} +\newcommand*{\kaggle}[1]{\def\@kaggle{#1}} + +% Defines writer's Hackerrank (optional) +% Usage: \hackerrank{} +\newcommand*{\hackerrank}[1]{\def\@hackerrank{#1}} + +% Defines writer's Telegram (optional) +% Usage: \telegram{} +\newcommand*{\telegram}[1]{\def\@telegram{#1}} + +% Defines writer's google scholar profile (optional) +% Usage: \googlescholar{}{} +% e.g.https://scholar.google.co.uk/citations?user=wpZDx1cAAAAJ +% would be \googlescholar{wpZDx1cAAAAJ}{Name-to-display-next-icon} +% If 'googlescholar-name' is not provided than it defaults to +% '\firstname \lastname' +\newcommand*{\googlescholar}[2]{% + \def\@googlescholarid{#1}% + \ifthenelse{\equal{#2}{}}{% + \def\@googlescholarname{\@firstname~\@lastname}% + }{% + \def\@googlescholarname{#2}% + }% +} + +% Defines writer's extra information (optional) +% Usage: \extrainfo{} +\newcommand*{\extrainfo}[1]{\def\@extrainfo{#1}} + +% Defines writer's quote (optional) +% Usage: \quote{} +\renewcommand*{\quote}[1]{\def\@quote{#1}} + +% Defines recipient's information (cover letter only) +% Usage: \recipient{}{} +% Usage: \recipientname{} +% Usage: \recipientaddress{} +\newcommand*{\recipient}[2]{\def\@recipientname{#1}\def\@recipientaddress{#2}} +\newcommand*{\recipientname}[1]{\def\@recipientname{#1}} +\newcommand*{\recipientaddress}[1]{\def\@recipientaddress{#1}} + +% Defines the title for letter (cover letter only, optional) +% Usage: \lettertitle{} +\newcommand*{\lettertitle}[1]{\def\@lettertitle{#1}} + +% Defines the date for letter (cover letter only) +% Usage: \letterdate{<date>} +\newcommand*{\letterdate}[1]{\def\@letterdate{#1}} + +% Defines a message of opening for letter (cover letter only) +% Usage: \letteropening{<message>} +\newcommand*{\letteropening}[1]{\def\@letteropening{#1}} + +% Defines a message of closing for letter (cover letter only) +% Usage: \letterclosing{<message>} +\newcommand*{\letterclosing}[1]{\def\@letterclosing{#1}} + +% Defines an enclosure for letter (cover letter only, optional) +% Usage: \letterenclosure[<enclosure name>]{<enclosure>} +\newcommand*{\letterenclname}[1][Enclosure]{\def\@letterenclname{#1}} +\newcommand*{\letterenclosure}[2][]{% + % if an optional argument is provided, use it to redefine \enclname + \ifthenelse{\equal{#1}{}}{}{\def\@letterenclname{#1}} + \def\@letterenclosure{#2} +} + + +%------------------------------------------------------------------------------- +% Commands for extra +%------------------------------------------------------------------------------- +%% Define helper macros a user can change easily +% Header +\newcommand{\acvHeaderNameDelim}{\space} +\newcommand{\acvHeaderAfterNameSkip}{.4mm} +\newcommand{\acvHeaderAfterPositionSkip}{.4mm} +\newcommand{\acvHeaderAfterAddressSkip}{-.5mm} +\newcommand{\acvHeaderIconSep}{\space} +\newcommand{\acvHeaderSocialSep}{\quad\textbar\quad} +\newcommand{\acvHeaderAfterSocialSkip}{6mm} +\newcommand{\acvHeaderAfterQuoteSkip}{5mm} + +% Others +\newcommand{\acvSectionTopSkip}{3mm} +\newcommand{\acvSectionContentTopSkip}{2.5mm} + + +%------------------------------------------------------------------------------- +% Commands for utilities +%------------------------------------------------------------------------------- +% Use to align an element of tabular table +\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}} +\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}} +\newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}m{#1}} + +% Use to draw horizontal line with specific thickness +\def\vhrulefill#1{\leavevmode\leaders\hrule\@height#1\hfill \kern\z@} + +% Use to execute conditional statements by checking empty string +\newcommand*{\ifempty}[3]{\ifthenelse{\isempty{#1}}{#2}{#3}} + + +%------------------------------------------------------------------------------- +% Commands for elements of CV structure +%------------------------------------------------------------------------------- +% Define a header for CV +% Usage: \makecvheader +\newcommand*{\makecvheader}[1][C]{% + \newcommand*{\drawphoto}{% + \ifthenelse{\isundefined{\@photo}}{}{% + \newlength{\photodim} + \ifthenelse{\equal{\@photoshape}{circle}}% + {\setlength{\photodim}{1.3cm}}% + {\setlength{\photodim}{1.8cm}}% + \ifthenelse{\equal{\@photoedge}{edge}}% + {\def\@photoborder{darkgray}}% + {\def\@photoborder{none}}% + \begin{tikzpicture}% + \node[\@photoshape, draw=\@photoborder, line width=0.3mm, inner sep=\photodim, fill overzoom image=\@photo] () {}; + \end{tikzpicture} + }% + } + \newlength{\headertextwidth} + \newlength{\headerphotowidth} + \ifthenelse{\isundefined{\@photo}}{ + \setlength{\headertextwidth}{\textwidth} + \setlength{\headerphotowidth}{0cm} + }{% + \setlength{\headertextwidth}{0.76\textwidth} + \setlength{\headerphotowidth}{0.24\textwidth} + }% + \begin{minipage}[c]{\headerphotowidth}% + \ifthenelse{\equal{\@photoalign}{left}}{\raggedright\drawphoto}{} + \end{minipage} + \begin{minipage}[c]{\headertextwidth} + \ifthenelse{\equal{#1}{L}}{\raggedright}{\ifthenelse{\equal{#1}{R}}{\raggedleft}{\centering}} + \headerfirstnamestyle{\@firstname}\headerlastnamestyle{{}\acvHeaderNameDelim\@lastname}% + \\[\acvHeaderAfterNameSkip]% + \ifthenelse{\isundefined{\@position}}{}{\headerpositionstyle{\@position\\[\acvHeaderAfterPositionSkip]}}% + \ifthenelse{\isundefined{\@address}}{}{\headeraddressstyle{\@address\\[\acvHeaderAfterAddressSkip]}}% + \headersocialstyle{% + \newbool{isstart}% + \setbool{isstart}{true}% + \ifthenelse{\isundefined{\@mobile}}% + {}% + {% + \href{\@teluri}{\faMobile\acvHeaderIconSep\@mobile}% + \setbool{isstart}{false}% + }% + \ifthenelse{\isundefined{\@email}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \href{mailto:\@email}{\faEnvelope\acvHeaderIconSep\@email}% + }% + \ifthenelse{\isundefined{\@dateofbirth}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + % \mbox prevents wrapping of elements% + \mbox{\faBirthdayCake\acvHeaderIconSep\@dateofbirth}% + }% + \ifthenelse{\isundefined{\@homepage}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \href{http://\@homepage}{\faHome\acvHeaderIconSep\@homepage}% + }% + \ifthenelse{\isundefined{\@github}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \href{https://github.com/\@github}{\faGithubSquare\acvHeaderIconSep\@github}% + }% + \ifthenelse{\isundefined{\@gitlab}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \href{https://gitlab.com/\@gitlab}{\faGitlab\acvHeaderIconSep\@gitlab}% + }% + \ifthenelse{\isundefined{\@bitbucket}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \href{https://bitbucket.com/\@bitbucket}{\faBitbucket\acvHeaderIconSep\@bitbucket}% + }% + \ifthenelse{\isundefined{\@stackoverflowid}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \href{https://stackoverflow.com/users/\@stackoverflowid}{\faStackOverflow\acvHeaderIconSep\@stackoverflowname}% + }% + \ifthenelse{\isundefined{\@linkedin}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \href{https://www.linkedin.com/in/\@linkedin}{\faLinkedin\acvHeaderIconSep\@linkedin}% + }% + \ifthenelse{\isundefined{\@orcid}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \href{https://orcid.org/\@orcid}{\faOrcid\acvHeaderIconSep\@orcid}% + }% + \ifthenelse{\isundefined{\@twitter}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \href{https://twitter.com/\@twitter}{\faTwitter\acvHeaderIconSep\@twitter}% + }% + \ifthenelse{\isundefined{\@mastodonname}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \href{https://\@mastodoninstance/@\@mastodonname}{\faMastodon\acvHeaderIconSep\@mastodonname}% + }% + \ifthenelse{\isundefined{\@skype}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \faSkype\acvHeaderIconSep\@skype% + }% + \ifthenelse{\isundefined{\@reddit}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \href{https://www.reddit.com/user/\@reddit}{\faReddit\acvHeaderIconSep\@reddit}% + }% + \ifthenelse{\isundefined{\@researchgate}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \href{https://www.researchgate.net/profile/\@researchgate}{\faResearchgate\acvHeaderIconSep\@researchgate}% + }% + \ifthenelse{\isundefined{\@xing}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \href{https://www.xing.com/profile/\@xing}{\faXingSquare\acvHeaderIconSep\@xing} + }% + \ifthenelse{\isundefined{\@medium}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \href{https://medium.com/@\@medium}{\faMedium\acvHeaderIconSep\@medium}% + }% + \ifthenelse{\isundefined{\@kaggle}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \href{https://kaggle.com/\@kaggle}{\faKaggle\acvHeaderIconSep\@kaggle}% + }% + \ifthenelse{\isundefined{\@hackerrank}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \href{https://www.hackerrank.com/\@hackerrank}{\faHackerrank\acvHeaderIconSep\@hackerrank}% + }% + \ifthenelse{\isundefined{\@telegram}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \href{https://t.me/\@telegram}{\faTelegram\acvHeaderIconSep\@telegram}% + }% + \ifthenelse{\isundefined{\@googlescholarid}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \href{https://scholar.google.com/citations?user=\@googlescholarid}{\faGraduationCap\acvHeaderIconSep\@googlescholarname}% + }% + \ifthenelse{\isundefined{\@extrainfo}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \@extrainfo% + }% + } \\[\acvHeaderAfterSocialSkip]% + \ifthenelse{\isundefined{\@quote}}% + {}% + {\headerquotestyle{\@quote\\}\vspace{\acvHeaderAfterQuoteSkip}}% + \end{minipage}% + \begin{minipage}[c]{\headerphotowidth}% + \ifthenelse{\equal{\@photoalign}{right}}{\raggedleft\drawphoto}{} + \end{minipage} +} + +% Define a footer for CV +% Usage: \makecvfooter{<left>}{<center>}{<right>} +\newcommand*{\makecvfooter}[3]{% + \fancyfoot{} + \fancyfoot[L]{\footerstyle{#1}} + \fancyfoot[C]{\footerstyle{#2}} + \fancyfoot[R]{\footerstyle{#3}} +} + +% Define a section for CV +% Usage: \cvsection{<section-title>} +\newcommand{\cvsection}[1]{% + \vspace{\acvSectionTopSkip} + \sectionstyle{#1} + \phantomsection + \color{sectiondivider}\vhrulefill{0.9pt} +} + +% Define a subsection for CV +% Usage: \cvsubsection{<subsection-title>} +\newcommand{\cvsubsection}[1]{% + \vspace{\acvSectionContentTopSkip} + \vspace{-3mm} + \subsectionstyle{#1} + \phantomsection +} + +% Define a paragraph for CV +\newenvironment{cvparagraph}{% + \vspace{\acvSectionContentTopSkip} + \vspace{-3mm} + \paragraphstyle +}{% + \par + \vspace{2mm} +} + +% Define an environment for cventry +\newenvironment{cventries}{% + \vspace{\acvSectionContentTopSkip} + \begin{center} +}{% + \end{center} +} +% Define an entry of cv information +% Usage: \cventry{<position>}{<title>}{<location>}{<date>}{<description>} +\newcommand*{\cventry}[5]{% + \vspace{-2.0mm} + \setlength\tabcolsep{0pt} + \setlength{\extrarowheight}{0pt} + \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} L{\textwidth - 4.5cm} R{4.5cm}} + \ifempty{#2#3} + {\entrypositionstyle{#1} & \entrydatestyle{#4} \\} + {\entrytitlestyle{#2} & \entrylocationstyle{#3} \\ + \entrypositionstyle{#1} & \entrydatestyle{#4} \\} + \ifstrempty{#5} + {} + {\multicolumn{2}{L{\textwidth}}{\descriptionstyle{#5}} \\} + \end{tabular*}% +} + +% Define an environment for cvsubentry +\newenvironment{cvsubentries}{% + \begin{center} +}{% + \end{center} +} +% Define a subentry of cv information +% Usage: \cvsubentry{<position>}{<title>}{<date>}{<description>} +\newcommand*{\cvsubentry}[4]{% + \setlength\tabcolsep{0pt} + \setlength{\extrarowheight}{0pt} + \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} L{\textwidth - 4.5cm} R{4.5cm}} + \setlength\leftskip{0.2cm} + \subentrytitlestyle{#2} & \ifthenelse{\equal{#1}{}} + {\subentrydatestyle{#3}}{} + \ifthenelse{\equal{#1}{}} + {} + {\subentrypositionstyle{#1} & \subentrydatestyle{#3} \\} + \ifthenelse{\equal{#4}{}} + {} + {\multicolumn{2}{L{17.0cm}}{\subdescriptionstyle{#4}} \\} + \end{tabular*} +} + +% Define an environment for cvhonor +\newenvironment{cvhonors}{% + \vspace{\acvSectionContentTopSkip} + \vspace{-2mm} + \begin{center} + \setlength\tabcolsep{0pt} + \setlength{\extrarowheight}{0pt} + \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} C{1.5cm} L{\textwidth - 4.0cm} R{2.5cm}} +}{% + \end{tabular*} + \end{center} +} +% Define a line of cv information(honor, award or something else) +% Usage: \cvhonor{<position>}{<title>}{<location>}{<date>} +\newcommand*{\cvhonor}[4]{% + \honordatestyle{#4} & \honorpositionstyle{#1}\ifempty{#2}{}{,} \honortitlestyle{#2} & \honorlocationstyle{#3} \\ +} + +% Define an environment for cvskill +\newenvironment{cvskills}{% + \vspace{\acvSectionContentTopSkip} + \vspace{-2.0mm} + \begin{center} + \setlength\tabcolsep{1ex} + \setlength{\extrarowheight}{0pt} + \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} r L{\textwidth * \real{0.9}}} +}{% + \end{tabular*} + \end{center} +} +% Define a line of cv information(skill) +% Usage: \cvskill{<type>}{<skillset>} +\newcommand*{\cvskill}[2]{% + \skilltypestyle{#1} & \skillsetstyle{#2} \\ +} + +% Define an environment for cvitems(for cventry) +\newenvironment{cvitems}{% + \vspace{-4.0mm} + \begin{justify} + \begin{itemize}[leftmargin=2ex, nosep, noitemsep] + \setlength{\parskip}{0pt} + \renewcommand{\labelitemi}{\bullet} +}{% + \end{itemize} + \end{justify} + \vspace{-4.0mm} +} + + +%------------------------------------------------------------------------------- +% Commands for elements of Cover Letter +%------------------------------------------------------------------------------- +% Define an environment for cvletter +\newenvironment{cvletter}{% + \lettertextstyle +}{% +} + +% Define a section for the cover letter +% Usage: \lettersection{<section-title>} +\newcommand{\lettersection}[1]{% + \par\addvspace{2.5ex} + \phantomsection{} + \lettersectionstyle{#1} + \color{sectiondivider}\vhrulefill{0.9pt} + \par\nobreak\addvspace{0.4ex} + \lettertextstyle +} + +% Define a title of the cover letter +% Usage: \makelettertitle +\newcommand*{\makelettertitle}{% + \vspace{8.4mm} + \setlength\tabcolsep{0pt} + \setlength{\extrarowheight}{0pt} + \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} L{\textwidth - 4.5cm} R{4.5cm}} + \recipienttitlestyle{\@recipientname} & \letterdatestyle{\@letterdate} + \end{tabular*} + \begin{singlespace} + \recipientaddressstyle{\@recipientaddress} \\\\ + \end{singlespace} + \ifthenelse{\isundefined{\@lettertitle}} + {} + {\lettertitlestyle{\@lettertitle} \\} + \lettertextstyle{\@letteropening} +} + +% Define a closing of the cover letter +% Usage: \makeletterclosing +\newcommand*{\makeletterclosing}{% + \vspace{3.4mm} + \lettertextstyle{\@letterclosing} \\\\ + \letternamestyle{\@firstname\ \@lastname} + \ifthenelse{\isundefined{\@letterenclosure}} + {\\} + {% + \\\\\\ + \letterenclosurestyle{\@letterenclname: \@letterenclosure} \\ + } +} diff --git a/examples/awesome-cv.cls b/examples/awesome-cv.cls new file mode 120000 index 0000000..29e4a2f --- /dev/null +++ b/examples/awesome-cv.cls @@ -0,0 +1 @@ +../awesome-cv.cls \ No newline at end of file diff --git a/examples/resume.tex b/examples/resume.tex new file mode 100644 index 0000000..f39f3cc --- /dev/null +++ b/examples/resume.tex @@ -0,0 +1,107 @@ +%!TEX TS-program = xelatex +%!TEX encoding = UTF-8 Unicode +% Awesome CV LaTeX Template for CV/Resume +% +% This template has been downloaded from: +% https://github.com/posquit0/Awesome-CV +% +% Author: +% Claud D. Park <posquit0.bj@gmail.com> +% http://www.posquit0.com +% +% Template license: +% CC BY-SA 4.0 (https://creativecommons.org/licenses/by-sa/4.0/) +% + + +%------------------------------------------------------------------------------- +% CONFIGURATIONS +%------------------------------------------------------------------------------- +% A4 paper size by default, use 'letterpaper' for US letter +\documentclass[11pt, a4paper]{awesome-cv} + +% Configure page margins with geometry +\geometry{left=1cm, top=.8cm, right=1cm, bottom=1.8cm, footskip=.5cm} + +% Color for highlights +% Awesome Colors: awesome-emerald, awesome-skyblue, awesome-red, awesome-pink, awesome-orange +% awesome-nephritis, awesome-concrete, awesome-darknight +\colorlet{awesome}{awesome-skyblue} +% Uncomment if you would like to specify your own color +% \definecolor{awesome}{HTML}{3E6D9C} + +% Colors for text +% Uncomment if you would like to specify your own color +% \definecolor{darktext}{HTML}{414141} +% \definecolor{text}{HTML}{333333} +% \definecolor{graytext}{HTML}{5D5D5D} +% \definecolor{lighttext}{HTML}{999999} +% \definecolor{sectiondivider}{HTML}{5D5D5D} + +% Set false if you don't want to highlight section with awesome color +\setbool{acvSectionColorHighlight}{false} + +% If you would like to change the social information separator from a pipe (|) to something else +\renewcommand{\acvHeaderSocialSep}{\quad\textbar\quad} + + +%------------------------------------------------------------------------------- +% PERSONAL INFORMATION +% Comment any of the lines below if they are not required +%------------------------------------------------------------------------------- +% Available options: circle|rectangle,edge/noedge,left/right +% \photo[rectangle,edge,right]{./examples/profile} +\name{Jean-Michel}{Tremblay} +\position{Senior Software Engineer} +% \address{Sainte-Julie, Qu\'ebec, Canada} + +% \mobile{(+82) 10-9030-1843} +\email{jeanmi.tremblay@gmail.com} +%\dateofbirth{January 1st, 1970} +% \homepage{www.posquit0.com} +% \github{posquit0} +% \linkedin{posquit0} +% \gitlab{gitlab-id} +% \stackoverflow{SO-id}{SO-name} +% \twitter{@twit} +% \skype{skype-id} +% \reddit{reddit-id} +% \medium{madium-id} +% \kaggle{kaggle-id} +% \hackerrank{hackerrank-id} +% \telegram{telegram-username} +% \googlescholar{googlescholar-id}{name-to-display} +%% \firstname and \lastname will be used +% \googlescholar{googlescholar-id}{} +% \extrainfo{extra information} + +% \quote{``Rather than love, than money, than fame, give me data"} + + +%------------------------------------------------------------------------------- +\begin{document} + +% Print the header with above personal information +% Give optional argument to change alignment(C: center, L: left, R: right) +\makecvheader[C] + +% Print the footer with 3 arguments(<left>, <center>, <right>) +% Leave any of these blank if they are not needed +\makecvfooter + {\today} + {JM Tremblay~~~·~~~Résumé} + {\thepage} + + +%------------------------------------------------------------------------------- +% CV/RESUME CONTENT +% Each section is imported separately, open each file in turn to modify content +%------------------------------------------------------------------------------- +\input{resume/summary.tex} +\input{resume/skills.tex} +\input{resume/experience.tex} +\input{resume/education.tex} + + +%------------------------------------------------------------------------------- +\end{document} diff --git a/examples/resume/education.tex b/examples/resume/education.tex new file mode 100644 index 0000000..99a730f --- /dev/null +++ b/examples/resume/education.tex @@ -0,0 +1,48 @@ +%------------------------------------------------------------------------------- +% SECTION TITLE +%------------------------------------------------------------------------------- +\cvsection{Education} + + +%------------------------------------------------------------------------------- +% CONTENT +%------------------------------------------------------------------------------- +\begin{cventries} + +%--------------------------------------------------------- + % \cventry + % {Ph.D. Transportation Engineering} % Degree + % {Univertity of Maryland} % Institution + % {College Park, Maryland} % Location + % {Apr. 2016} % Date(s) + % {} + + % \cventry + % {M.Sc. Transportation Engineering} % Degree + % {Univertity of Maryland} % Institution + % {College Park, Maryland} % Location + % {Jun. 2012} % Date(s) + % {} + + % \cventry + % {B.Sc. Math\'ematiques} % Degree + % {Universit\'e de Montr\'eal} % Institution + % {Montr\'eal, Qu\'ebec} % Location + % {Jun. 2010} % Date(s) + % {} + + \cventry + {Ph.D. (2016) and M.Sc. (2012) in Transportation Engineering} % Degree + {University of Maryland} % Institution + {College Park, Maryland} % Location + {} % Date(s) + {} + + \cventry + {B.Sc. Math\'ematiques (2010)} % Degree + {Universit\'e de Montr\'eal} % Institution + {Montr\'eal, Qu\'ebec} % Location + {} % Date(s) + {} +%--------------------------------------------------------- +\end{cventries} diff --git a/examples/resume/experience.tex b/examples/resume/experience.tex new file mode 100644 index 0000000..ca45c49 --- /dev/null +++ b/examples/resume/experience.tex @@ -0,0 +1,89 @@ +%------------------------------------------------------------------------------- +% SECTION TITLE +%------------------------------------------------------------------------------- +\cvsection{Work Experience} + + +%------------------------------------------------------------------------------- +% CONTENT +%------------------------------------------------------------------------------- +\begin{cventries} + +%--------------------------------------------------------- + +\cventry +{Senior Software Engineer} % Job title +{Forterra} % Organization +{Clarksburg, Maryland} % Location +{Dec. 2023 - Present} % Date(s) +{ + \begin{cvitems} % Description(s) of tasks/responsibilities + \item {Lead design and development of cloud-native data infrastructure powering autonomous vehicle telemetry and operational analytics} + \item {Architect and implement Python microservices on AWS Lambda and ECS, processing large-scale S3 event-triggered data streams} + % \item {Design and optimize PostgreSQL RDS databases, including complex schema, queries, materialized views, and reporting pipelines for engineering, compliance, and executive teams} + \item {Design and optimize PostgreSQL databases, queries, materialized views, and reporting pipelines for engineering, compliance, and executives} + % \item {Own Terraform infrastructure-as-code deployments covering cloud networking (transit gateways, VPNs), IAM policies, serverless, container workloads, and CI/CD pipelines} + \item {Own Terraform infrastructure-as-code deployments, including cloud networking, IAM, serverless, container workloads, and CI/CD pipelines} + \item {Build and maintain end-to-end data pipelines supporting safety, regulatory, and business reporting across multiple internal systems} + \item {Integrate corporate APIs (Microsoft Graph, SharePoint, Slack) for authentication, automated reporting, and operational notifications} + \item {Provide technical leadership in project planning, architecture, estimation, and mentor junior engineers} + % \item {Collaborate cross-functionally to uncover operational data challenges, refine requirements, and shape backend systems that directly support engineering and business goals} + \item {Collaborate cross-functionally to address data challenges, refine requirements, and shape backend systems supporting business goals} + \end{cvitems} +} +\cventry +{Software Engineer} % Job title +{Edgybees} % Organization +{Rockville, Maryland} % Location +{Dec. 2019 - Nov. 2021} % Date(s) +{ + \begin{cvitems} % Description(s) of tasks/responsibilities + \item {Led complex field deployments of Edgybees’ real-time video georegistration platform, managing integration of customer hardware, networks, maps and telemetry streams in air-gapped Kubernetes environments} + \item {Designed and delivered Python-based GIS backend services, including raster tiling pipelines and tile reprojection tools, eliminating reliance on external GIS servers and improving performance, portability, and cost-efficiency} + \item {Developed in-house expertise on MISB 0601 video telemetry standards to troubleshoot and validate live video georegistration accuracy for government and defense customers} + \item {Served as primary technical liaison during customer onboarding, providing hands-on support for deployment, configuration, and training} + \item {Delivered high-stakes technical demos to government and defense stakeholders, securing operational adoption} +\end{cvitems} +} + +\cventry +{Research Statistician Developer} % Job title +{SAS} % Organization +{Cary, North Carolina} % Location +{Nov. 2018 - Nov. 2019} % Date(s) +{ + \begin{cvitems} + \item {Ported a large discrete-choice modeling codebase from single-node to map-reduce architecture} + \item {Developed statistical algorithms in Python, and SAS/IML for integration into production systems} + \item {Rigorously validated numerical results against industry benchmarks to ensure accuracy and reliability} + \end{cvitems} +} + +\cventry +{Senior Biostatistician} % Job title +{Johns Hopkins University} % Organization +{Baltimore, Maryland} % Location +{Oct. 2016 - Oct. 2018} % Date(s) +{ + \begin{cvitems} + \item {Led statistical methodology and calculations for NIH grant proposals and peer-reviewed articles} + \item {Directed early-stage data exploration and visualization to uncover patterns and support clinical decision-making} + \item {Managed PostgreSQL databases to maintain data integrity and support operations} + \end{cvitems} +} + +\cventry +{Research Assistant} % Job title +{University of Maryland} % Organization +{College Park, Maryland} % Location +{Aug. 2010 - Jul. 2016} % Date(s) +{ + \begin{cvitems} % Description(s) of tasks/responsibilities + \item{Developed transportation simulation and discrete-choice models in C and R} + \item{Supported publications: literature review, data analysis, model implementation} + \item{Designed and taught graduate-level discrete-choice modeling courses} +\end{cvitems} +} + +%--------------------------------------------------------- +\end{cventries} diff --git a/examples/resume/skills.tex b/examples/resume/skills.tex new file mode 100644 index 0000000..b56ce08 --- /dev/null +++ b/examples/resume/skills.tex @@ -0,0 +1,51 @@ +%------------------------------------------------------------------------------- +% SECTION TITLE +%------------------------------------------------------------------------------- +\cvsection{Skills} + + +%------------------------------------------------------------------------------- +% CONTENT +%------------------------------------------------------------------------------- +% \begin{cvskills} +% \cvskill +% {Languages}{\begin{minipage}[t]{0.7\textwidth} +% Python, C, C++, R +% \end{minipage}} + +% \cvskill +% {Cloud \& DevOps}{\begin{minipage}[t]{0.7\textwidth} +% AWS (Lambda, ECS, S3, RDS, Terraform, IAM, Networking), Git, Docker +% \end{minipage}} + +% \cvskill +% {Databases}{\begin{minipage}[t]{0.7\textwidth} +% PostgreSQL, data modeling, query optimization +% \end{minipage}} + +% \cvskill +% {Computing}{\begin{minipage}[t]{0.7\textwidth} +% Linux, Bash scripting, basic sysadmin +% \end{minipage}} + +% \cvskill +% {Numerical \& Data Science}{\begin{minipage}[t]{0.7\textwidth} +% Numerical simulation, numerical optimization, R, BLAS/OpenBLAS +% \end{minipage}} +% \end{cvskills} +\begin{cvskills} + \cvskill + {Programming \& Data Science}{\begin{minipage}[t]{0.7\textwidth} + Python, C, C++, R; numerical simulation, numerical optimization; BLAS/OpenBLAS; data modeling + \end{minipage}} + + \cvskill + {Cloud \& Infrastructure}{\begin{minipage}[t]{0.7\textwidth} + AWS (Lambda, ECS, S3, RDS, IAM, Networking), Terraform, Docker, Git, Linux, Bash scripting, basic sysadmin + \end{minipage}} + + \cvskill + {Databases \& DevOps}{\begin{minipage}[t]{0.7\textwidth} + PostgreSQL, CI/CD, infrastructure-as-code, system monitoring, version control + \end{minipage}} +\end{cvskills} \ No newline at end of file diff --git a/examples/resume/summary.tex b/examples/resume/summary.tex new file mode 100644 index 0000000..68d9b21 --- /dev/null +++ b/examples/resume/summary.tex @@ -0,0 +1,20 @@ +%------------------------------------------------------------------------------- +% SECTION TITLE +%------------------------------------------------------------------------------- +\cvsection{Summary} + + +%------------------------------------------------------------------------------- +% CONTENT +%------------------------------------------------------------------------------- +\begin{cvparagraph} + +%--------------------------------------------------------- + +Data-focused and design-minded software engineer with over a decade of experience spanning research, +backend development, and data engineering. +Skilled at building scalable, reliable systems with a startup mindset — +pragmatic, driven, and focused on quality. +Proven leader in customer-facing roles, translating complex technical challenges into real-world solutions. +Fiercely committed to doing what’s right, not just what’s easy. +\end{cvparagraph}