| 1 | %% Start of file `awesome-cv.cls'. |
| 2 | % Awesome CV Class File |
| 3 | % |
| 4 | % This class has been downloaded from: |
| 5 | % https://github.com/posquit0/Awesome-CV |
| 6 | % |
| 7 | % Author: |
| 8 | % Claud D. Park <posquit0.bj@gmail.com> |
| 9 | % http://www.posquit0.com |
| 10 | % |
| 11 | % Notes: |
| 12 | % 1) This class file defines the structure and layout of the template file (cv.tex, resume.tex). |
| 13 | % 2) It has been written in such a way that under most circumstances you |
| 14 | % should not need to edit it. |
| 15 | % |
| 16 | % Class license: |
| 17 | % LPPL v1.3c (http://www.latex-project.org/lppl) |
| 18 | % |
| 19 | |
| 20 | |
| 21 | %------------------------------------------------------------------------------- |
| 22 | % Identification |
| 23 | %------------------------------------------------------------------------------- |
| 24 | \ProvidesClass{awesome-cv}[2017/02/05 v1.6.1 Awesome Curriculum Vitae Class] |
| 25 | \NeedsTeXFormat{LaTeX2e} |
| 26 | |
| 27 | |
| 28 | %------------------------------------------------------------------------------- |
| 29 | % Class options |
| 30 | % |
| 31 | % (need to be done before the external package loading, for example because |
| 32 | % we need \paperwidth, \paperheight and \@ptsize to be defined before loading |
| 33 | % geometry and fancyhdr) |
| 34 | %------------------------------------------------------------------------------- |
| 35 | % Options for draft or final |
| 36 | \DeclareOption{draft}{\setlength\overfullrule{5pt}} |
| 37 | \DeclareOption{final}{\setlength\overfullrule{0pt}} |
| 38 | % Inherit options of article |
| 39 | \DeclareOption*{% |
| 40 | \PassOptionsToClass{\CurrentOption}{article} |
| 41 | } |
| 42 | \ProcessOptions\relax |
| 43 | \LoadClass{article} |
| 44 | |
| 45 | |
| 46 | %------------------------------------------------------------------------------- |
| 47 | % 3rd party packages |
| 48 | %------------------------------------------------------------------------------- |
| 49 | % Needed to make fixed length table |
| 50 | \RequirePackage{array} |
| 51 | % Needed to handle list environment |
| 52 | \RequirePackage{enumitem} |
| 53 | % Needed to handle text alignment |
| 54 | \RequirePackage{ragged2e} |
| 55 | % Needed to configure page layout |
| 56 | \RequirePackage{geometry} |
| 57 | % Needed to make header & footer effeciently |
| 58 | \RequirePackage{fancyhdr} |
| 59 | % Needed to manage colors |
| 60 | \RequirePackage{xcolor} |
| 61 | % Needed to use \ifxetex-\else-\fi statement |
| 62 | \RequirePackage{ifxetex} |
| 63 | % Needed to use \if-\then-\else statement |
| 64 | \RequirePackage{xifthen} |
| 65 | % Needed to use a toolbox of programming tools |
| 66 | \RequirePackage{etoolbox} |
| 67 | % Needed to change line spacing in specific environment |
| 68 | \RequirePackage{setspace} |
| 69 | % Needed to manage fonts |
| 70 | \RequirePackage[quiet]{fontspec} |
| 71 | % To support LaTeX quoting style |
| 72 | \defaultfontfeatures{Ligatures=TeX} |
| 73 | % Needed to manage math fonts |
| 74 | \RequirePackage{unicode-math} |
| 75 | % Needed to use icons from font-awesome |
| 76 | % (https://github.com/posquit0/latex-fontawesome) |
| 77 | \RequirePackage{fontawesome} |
| 78 | \RequirePackage[default,opentype]{sourcesanspro} |
| 79 | % Needed for the photo ID |
| 80 | \RequirePackage[skins]{tcolorbox} |
| 81 | % Needed to deal a paragraphs |
| 82 | \RequirePackage{parskip} |
| 83 | % Needed to deal hyperlink |
| 84 | \RequirePackage[hidelinks,unicode]{hyperref} |
| 85 | \hypersetup{% |
| 86 | pdftitle={}, |
| 87 | pdfauthor={}, |
| 88 | pdfsubject={}, |
| 89 | pdfkeywords={} |
| 90 | } |
| 91 | |
| 92 | |
| 93 | %------------------------------------------------------------------------------- |
| 94 | % Configuration for directory locations |
| 95 | %------------------------------------------------------------------------------- |
| 96 | % Configure a directory location for fonts(default: 'fonts/') |
| 97 | \newcommand*{\fontdir}[1][fonts/]{\def\@fontdir{#1}} |
| 98 | \fontdir |
| 99 | |
| 100 | |
| 101 | %------------------------------------------------------------------------------- |
| 102 | % Configuration for layout |
| 103 | %------------------------------------------------------------------------------- |
| 104 | %% Page Layout |
| 105 | % Configure page margins with geometry |
| 106 | \geometry{left=2.0cm, top=1.5cm, right=2.0cm, bottom=2.0cm, footskip=.5cm} |
| 107 | |
| 108 | %% Header & Footer |
| 109 | % Set offset to each header and footer |
| 110 | \fancyhfoffset{0em} |
| 111 | % Remove head rule |
| 112 | \renewcommand{\headrulewidth}{0pt} |
| 113 | % Clear all header & footer fields |
| 114 | \fancyhf{} |
| 115 | % Enable if you want to make header or footer using fancyhdr |
| 116 | \pagestyle{fancy} |
| 117 | |
| 118 | |
| 119 | %------------------------------------------------------------------------------- |
| 120 | % Configuration for colors |
| 121 | %------------------------------------------------------------------------------- |
| 122 | % Gray-scale colors |
| 123 | \definecolor{white}{HTML}{FFFFFF} |
| 124 | \definecolor{black}{HTML}{000000} |
| 125 | \definecolor{darkgray}{HTML}{333333} |
| 126 | \definecolor{gray}{HTML}{5D5D5D} |
| 127 | \definecolor{lightgray}{HTML}{999999} |
| 128 | % Basic colors |
| 129 | \definecolor{green}{HTML}{C2E15F} |
| 130 | \definecolor{orange}{HTML}{FDA333} |
| 131 | \definecolor{purple}{HTML}{D3A4F9} |
| 132 | \definecolor{red}{HTML}{FB4485} |
| 133 | \definecolor{blue}{HTML}{6CE0F1} |
| 134 | % Text colors |
| 135 | \definecolor{darktext}{HTML}{414141} |
| 136 | \colorlet{text}{darkgray} |
| 137 | \colorlet{graytext}{gray} |
| 138 | \colorlet{lighttext}{lightgray} |
| 139 | % Awesome colors |
| 140 | \definecolor{awesome-emerald}{HTML}{00A388} |
| 141 | \definecolor{awesome-skyblue}{HTML}{0395DE} |
| 142 | \definecolor{awesome-red}{HTML}{DC3522} |
| 143 | \definecolor{awesome-pink}{HTML}{EF4089} |
| 144 | \definecolor{awesome-orange}{HTML}{FF6138} |
| 145 | \definecolor{awesome-nephritis}{HTML}{27AE60} |
| 146 | \definecolor{awesome-concrete}{HTML}{95A5A6} |
| 147 | \definecolor{awesome-darknight}{HTML}{131A28} |
| 148 | \colorlet{awesome}{awesome-red} |
| 149 | |
| 150 | % Boolean value to switch section color highlighting |
| 151 | \newbool{acvSectionColorHighlight} |
| 152 | \setbool{acvSectionColorHighlight}{true} |
| 153 | |
| 154 | % Awesome section color |
| 155 | \def\@sectioncolor#1#2#3{% |
| 156 | \ifbool{acvSectionColorHighlight}{{\color{awesome}#1#2#3}}{#1#2#3}% |
| 157 | } |
| 158 | |
| 159 | |
| 160 | %------------------------------------------------------------------------------- |
| 161 | % Configuration for fonts |
| 162 | %------------------------------------------------------------------------------- |
| 163 | % Set the FontAwesome font to be up-to-date. |
| 164 | \newfontfamily\FAF[Path=\@fontdir]{FontAwesome} |
| 165 | % Set font for header (default is Roboto) |
| 166 | \newfontfamily\headerfont[ |
| 167 | Path=\@fontdir, |
| 168 | UprightFont=*-Regular, |
| 169 | ItalicFont=*-Italic, |
| 170 | BoldFont=*-Bold, |
| 171 | BoldItalicFont=*-BoldItalic, |
| 172 | ]{Roboto} |
| 173 | |
| 174 | \newfontfamily\headerfontlight[ |
| 175 | Path=\@fontdir, |
| 176 | UprightFont=*-Thin, |
| 177 | ItalicFont=*-ThinItalic, |
| 178 | BoldFont=*-Medium, |
| 179 | BoldItalicFont=*-MediumItalic, |
| 180 | ]{Roboto} |
| 181 | |
| 182 | \newcommand*{\footerfont}{\sourcesanspro} |
| 183 | \newcommand*{\bodyfont}{\sourcesanspro} |
| 184 | \newcommand*{\bodyfontlight}{\sourcesansprolight} |
| 185 | |
| 186 | %------------------------------------------------------------------------------- |
| 187 | % Configuration for styles |
| 188 | %------------------------------------------------------------------------------- |
| 189 | % Configure styles for each CV elements |
| 190 | % For fundamental structures |
| 191 | \newcommand*{\headerfirstnamestyle}[1]{{\fontsize{32pt}{1em}\headerfontlight\color{graytext} #1}} |
| 192 | \newcommand*{\headerlastnamestyle}[1]{{\fontsize{32pt}{1em}\headerfont\bfseries\color{text} #1}} |
| 193 | \newcommand*{\headerpositionstyle}[1]{{\fontsize{7.6pt}{1em}\bodyfont\scshape\color{awesome} #1}} |
| 194 | \newcommand*{\headeraddressstyle}[1]{{\fontsize{8pt}{1em}\headerfont\itshape\color{lighttext} #1}} |
| 195 | \newcommand*{\headersocialstyle}[1]{{\fontsize{6.8pt}{1em}\headerfont\color{text} #1}} |
| 196 | \newcommand*{\headerquotestyle}[1]{{\fontsize{9pt}{1em}\bodyfont\itshape\color{darktext} #1}} |
| 197 | \newcommand*{\footerstyle}[1]{{\fontsize{8pt}{1em}\footerfont\scshape\color{lighttext} #1}} |
| 198 | \newcommand*{\sectionstyle}[1]{{\fontsize{16pt}{1em}\bodyfont\bfseries\color{text}\@sectioncolor #1}} |
| 199 | \newcommand*{\subsectionstyle}[1]{{\fontsize{12pt}{1em}\bodyfont\scshape\textcolor{text}{#1}}} |
| 200 | \newcommand*{\paragraphstyle}{\fontsize{9pt}{1em}\bodyfontlight\upshape\color{text}} |
| 201 | |
| 202 | % For elements of entry |
| 203 | \newcommand*{\entrytitlestyle}[1]{{\fontsize{10pt}{1em}\bodyfont\bfseries\color{darktext} #1}} |
| 204 | \newcommand*{\entrypositionstyle}[1]{{\fontsize{8pt}{1em}\bodyfont\scshape\color{graytext} #1}} |
| 205 | \newcommand*{\entrydatestyle}[1]{{\fontsize{8pt}{1em}\bodyfontlight\slshape\color{graytext} #1}} |
| 206 | \newcommand*{\entrylocationstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\slshape\color{awesome} #1}} |
| 207 | \newcommand*{\descriptionstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\upshape\color{text} #1}} |
| 208 | |
| 209 | % For elements of subentry |
| 210 | \newcommand*{\subentrytitlestyle}[1]{{\fontsize{8pt}{1em}\bodyfont\mdseries\color{graytext} #1}} |
| 211 | \newcommand*{\subentrypositionstyle}[1]{{\fontsize{7pt}{1em}\bodyfont\scshape\color{graytext} #1}} |
| 212 | \newcommand*{\subentrydatestyle}[1]{{\fontsize{7pt}{1em}\bodyfontlight\slshape\color{graytext} #1}} |
| 213 | \newcommand*{\subentrylocationstyle}[1]{{\fontsize{7pt}{1em}\bodyfontlight\slshape\color{awesome} #1}} |
| 214 | \newcommand*{\subdescriptionstyle}[1]{{\fontsize{8pt}{1em}\bodyfontlight\upshape\color{text} #1}} |
| 215 | |
| 216 | % For elements of honor |
| 217 | \newcommand*{\honortitlestyle}[1]{{\fontsize{9pt}{1em}\bodyfont\color{graytext} #1}} |
| 218 | \newcommand*{\honorpositionstyle}[1]{{\fontsize{9pt}{1em}\bodyfont\bfseries\color{darktext} #1}} |
| 219 | \newcommand*{\honordatestyle}[1]{{\fontsize{9pt}{1em}\bodyfont\color{graytext} #1}} |
| 220 | \newcommand*{\honorlocationstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\slshape\color{awesome} #1}} |
| 221 | |
| 222 | % For elements of skill |
| 223 | \newcommand*{\skilltypestyle}[1]{{\fontsize{10pt}{1em}\bodyfont\bfseries\color{darktext} #1}} |
| 224 | \newcommand*{\skillsetstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\color{text} #1}} |
| 225 | |
| 226 | % For elements of the cover letter |
| 227 | \newcommand*{\lettersectionstyle}[1]{{\fontsize{14pt}{1em}\bodyfont\bfseries\color{text}\@sectioncolor #1}} |
| 228 | \newcommand*{\recipientaddressstyle}[1]{{\fontsize{9pt}{1em}\bodyfont\scshape\color{graytext} #1}} |
| 229 | \newcommand*{\recipienttitlestyle}[1]{{\fontsize{11pt}{1em}\bodyfont\bfseries\color{darktext} #1}} |
| 230 | \newcommand*{\lettertitlestyle}[1]{{\fontsize{10pt}{1em}\bodyfontlight\bfseries\color{darktext} \underline{#1}}} |
| 231 | \newcommand*{\letterdatestyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\slshape\color{graytext} #1}} |
| 232 | \newcommand*{\lettertextstyle}{\fontsize{10pt}{1.4em}\bodyfontlight\upshape\color{graytext}} |
| 233 | \newcommand*{\letternamestyle}[1]{{\fontsize{10pt}{1em}\bodyfont\bfseries\color{darktext} #1}} |
| 234 | \newcommand*{\letterenclosurestyle}[1]{{\fontsize{10pt}{1em}\bodyfontlight\slshape\color{lighttext} #1}} |
| 235 | |
| 236 | |
| 237 | %------------------------------------------------------------------------------- |
| 238 | % Commands for personal information |
| 239 | %------------------------------------------------------------------------------- |
| 240 | % Define photo ID |
| 241 | % Usage: \photo[circle|rectangle,edge|noedge,left|right]{<path-to-image>} |
| 242 | \newcommand{\photo}[2][circle,edge,left]{% |
| 243 | \def\@photo{#2} |
| 244 | \@for\tmp:=#1\do{% |
| 245 | \ifthenelse{\equal{\tmp}{circle} \or \equal{\tmp}{rectangle}}% |
| 246 | {\let\@photoshape\tmp}{}% |
| 247 | \ifthenelse{\equal{\tmp}{edge} \or \equal{\tmp}{noedge}}% |
| 248 | {\let\@photoedge\tmp}{}% |
| 249 | \ifthenelse{\equal{\tmp}{left} \or \equal{\tmp}{right}}% |
| 250 | {\let\@photoalign\tmp}{}% |
| 251 | }% |
| 252 | } |
| 253 | \def\@photoshape{circle} |
| 254 | \def\@photoedge{edge} |
| 255 | \def\@photoalign{left} |
| 256 | |
| 257 | % Define writer's name |
| 258 | % Usage: \name{<firstname>}{<lastname>} |
| 259 | % Usage: \firstname{<firstname>} |
| 260 | % Usage: \lastname{<lastname>} |
| 261 | % Usage: \familyname{<familyname>} |
| 262 | \newcommand*{\name}[2]{\def\@firstname{#1}\def\@lastname{#2}} |
| 263 | \newcommand*{\firstname}[1]{\def\@firstname{#1}} |
| 264 | \newcommand*{\lastname}[1]{\def\@lastname{#1}} |
| 265 | \newcommand*{\familyname}[1]{\def\@lastname{#1}} |
| 266 | \def\@familyname{\@lastname} |
| 267 | |
| 268 | % Define writer's address |
| 269 | % Usage: \address{<address>} |
| 270 | \newcommand*{\address}[1]{\def\@address{#1}} |
| 271 | |
| 272 | % Define writer's position |
| 273 | % Usage: \name{<position>} |
| 274 | \newcommand*{\position}[1]{\def\@position{#1}} |
| 275 | |
| 276 | % Defines writer's mobile (optional) |
| 277 | % Usage: \mobile{<mobile number>} |
| 278 | \newcommand*{\mobile}[1]{\def\@mobile{#1}} |
| 279 | |
| 280 | % Defines writer's email (optional) |
| 281 | % Usage: \email{<email adress>} |
| 282 | \newcommand*{\email}[1]{\def\@email{#1}} |
| 283 | |
| 284 | % Defines writer's homepage (optional) |
| 285 | % Usage: \homepage{<url>} |
| 286 | \newcommand*{\homepage}[1]{\def\@homepage{#1}} |
| 287 | |
| 288 | % Defines writer's github (optional) |
| 289 | % Usage: \github{<github-nick>} |
| 290 | \newcommand*{\github}[1]{\def\@github{#1}} |
| 291 | |
| 292 | % Defines writer's gitlab (optional) |
| 293 | % Usage: \gitlab{<gitlab-nick>} |
| 294 | \newcommand*{\gitlab}[1]{\def\@gitlab{#1}} |
| 295 | |
| 296 | % Defines writer's stackoverflow profile (optional) |
| 297 | % Usage: \stackoverflow{<so userid>}{<so username>} |
| 298 | % e.g.https://stackoverflow.com/users/123456/sam-smith |
| 299 | % would be \stackoverflow{123456}{sam-smith} |
| 300 | \newcommand*{\stackoverflow}[2]{\def\@stackoverflowid{#1}\def\@stackoverflowname{#2}} |
| 301 | |
| 302 | % Defines writer's linked-in (optional) |
| 303 | % Usage: \linkedin{<linked-in-nick>} |
| 304 | \newcommand*{\linkedin}[1]{\def\@linkedin{#1}} |
| 305 | |
| 306 | % Usage: \twitter{<twitter handle>} |
| 307 | \newcommand*{\twitter}[1]{\def\@twitter{#1}} |
| 308 | |
| 309 | % Defines writer's skype (optional) |
| 310 | % Usage: \skype{<skype account>} |
| 311 | \newcommand*{\skype}[1]{\def\@skype{#1}} |
| 312 | |
| 313 | % Defines writer's reddit (optional) |
| 314 | % Usage: \reddit{<reddit account>} |
| 315 | \newcommand*{\reddit}[1]{\def\@reddit{#1}} |
| 316 | |
| 317 | % Defines writer's xing (optional) |
| 318 | % Usage: \xing{<xing name>} |
| 319 | \newcommand*{\xing}[1]{\def\@xing{#1}} |
| 320 | |
| 321 | % Defines writer's twitter (optional) |
| 322 | % Defines writer's extra informations (optional) |
| 323 | % Usage: \extrainfo{<extra informations>} |
| 324 | \newcommand*{\extrainfo}[1]{\def\@extrainfo{#1}} |
| 325 | |
| 326 | % Defines writer's quote (optional) |
| 327 | % Usage: \quote{<quote>} |
| 328 | \renewcommand*{\quote}[1]{\def\@quote{#1}} |
| 329 | |
| 330 | % Defines recipient's information (cover letter only) |
| 331 | % Usage: \recipient{<recipient name>}{<recipient address>} |
| 332 | % Usage: \recipientname{<recipient name>} |
| 333 | % Usage: \recipientaddress{<recipient address>} |
| 334 | \newcommand*{\recipient}[2]{\def\@recipientname{#1}\def\@recipientaddress{#2}} |
| 335 | \newcommand*{\recipientname}[1]{\def\@recipientname{#1}} |
| 336 | \newcommand*{\recipientaddress}[1]{\def\@recipientaddress{#1}} |
| 337 | |
| 338 | % Defines the title for letter (cover letter only, optional) |
| 339 | % Usage: \lettertitle{<title>} |
| 340 | \newcommand*{\lettertitle}[1]{\def\@lettertitle{#1}} |
| 341 | |
| 342 | % Defines the date for letter (cover letter only) |
| 343 | % Usage: \letterdate{<date>} |
| 344 | \newcommand*{\letterdate}[1]{\def\@letterdate{#1}} |
| 345 | |
| 346 | % Defines a message of opening for letter (cover letter only) |
| 347 | % Usage: \letteropening{<message>} |
| 348 | \newcommand*{\letteropening}[1]{\def\@letteropening{#1}} |
| 349 | |
| 350 | % Defines a message of closing for letter (cover letter only) |
| 351 | % Usage: \letterclosing{<message>} |
| 352 | \newcommand*{\letterclosing}[1]{\def\@letterclosing{#1}} |
| 353 | |
| 354 | % Defines an enclosure for letter (cover letter only, optional) |
| 355 | % Usage: \letterenclosure[<enclosure name>]{<enclosure>} |
| 356 | \newcommand*{\letterenclname}[1][Enclosure]{\def\@letterenclname{#1}} |
| 357 | \newcommand*{\letterenclosure}[2][]{% |
| 358 | % if an optional argument is provided, use it to redefine \enclname |
| 359 | \ifthenelse{\equal{#1}{}}{}{\def\@letterenclname{#1}} |
| 360 | \def\@letterenclosure{#2} |
| 361 | } |
| 362 | |
| 363 | |
| 364 | %------------------------------------------------------------------------------- |
| 365 | % Commands for extra |
| 366 | %------------------------------------------------------------------------------- |
| 367 | %% Define helper macros a user can change easily |
| 368 | % Header |
| 369 | \newcommand{\acvHeaderNameDelim}{\space} |
| 370 | \newcommand{\acvHeaderAfterNameSkip}{.4mm} |
| 371 | \newcommand{\acvHeaderAfterPositionSkip}{.4mm} |
| 372 | \newcommand{\acvHeaderAfterAddressSkip}{-.5mm} |
| 373 | \newcommand{\acvHeaderIconSep}{\space} |
| 374 | \newcommand{\acvHeaderSocialSep}{\quad\textbar\quad} |
| 375 | \newcommand{\acvHeaderAfterSocialSkip}{6mm} |
| 376 | \newcommand{\acvHeaderAfterQuoteSkip}{5mm} |
| 377 | |
| 378 | % Others |
| 379 | \newcommand{\acvSectionTopSkip}{3mm} |
| 380 | \newcommand{\acvSectionContentTopSkip}{2.5mm} |
| 381 | |
| 382 | |
| 383 | %------------------------------------------------------------------------------- |
| 384 | % Commands for utilities |
| 385 | %------------------------------------------------------------------------------- |
| 386 | % Use to align an element of tabular table |
| 387 | \newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}} |
| 388 | \newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}} |
| 389 | \newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}m{#1}} |
| 390 | |
| 391 | % Use to draw horizontal line with specific thickness |
| 392 | \def\vhrulefill#1{\leavevmode\leaders\hrule\@height#1\hfill \kern\z@} |
| 393 | |
| 394 | % Use to execute conditional statements by checking empty string |
| 395 | \newcommand*{\ifempty}[3]{\ifthenelse{\isempty{#1}}{#2}{#3}} |
| 396 | |
| 397 | |
| 398 | %------------------------------------------------------------------------------- |
| 399 | % Commands for elements of CV structure |
| 400 | %------------------------------------------------------------------------------- |
| 401 | % Define a header for CV |
| 402 | % Usage: \makecvheader |
| 403 | \newcommand*{\makecvheader}[1][C]{% |
| 404 | \newcommand*{\drawphoto}{% |
| 405 | \ifthenelse{\isundefined{\@photo}}{}{% |
| 406 | \newlength{\photodim} |
| 407 | \ifthenelse{\equal{\@photoshape}{circle}}% |
| 408 | {\setlength{\photodim}{1.3cm}}% |
| 409 | {\setlength{\photodim}{1.8cm}}% |
| 410 | \ifthenelse{\equal{\@photoedge}{edge}}% |
| 411 | {\def\@photoborder{darkgray}}% |
| 412 | {\def\@photoborder{none}}% |
| 413 | \begin{tikzpicture}% |
| 414 | \node[\@photoshape, draw=\@photoborder, line width=0.3mm, inner sep=\photodim, fill overzoom image=\@photo] () {}; |
| 415 | \end{tikzpicture} |
| 416 | }% |
| 417 | } |
| 418 | \newlength{\headertextwidth} |
| 419 | \newlength{\headerphotowidth} |
| 420 | \ifthenelse{\isundefined{\@photo}}{ |
| 421 | \setlength{\headertextwidth}{\textwidth} |
| 422 | \setlength{\headerphotowidth}{0cm} |
| 423 | }{% |
| 424 | \setlength{\headertextwidth}{0.76\textwidth} |
| 425 | \setlength{\headerphotowidth}{0.24\textwidth} |
| 426 | }% |
| 427 | \begin{minipage}[c]{\headerphotowidth}% |
| 428 | \ifthenelse{\equal{\@photoalign}{left}}{\raggedright\drawphoto}{} |
| 429 | \end{minipage} |
| 430 | \begin{minipage}[c]{\headertextwidth} |
| 431 | \ifthenelse{\equal{#1}{L}}{\raggedright}{\ifthenelse{\equal{#1}{R}}{\raggedleft}{\centering}} |
| 432 | \headerfirstnamestyle{\@firstname}\headerlastnamestyle{{}\acvHeaderNameDelim\@lastname}% |
| 433 | \\[\acvHeaderAfterNameSkip]% |
| 434 | \ifthenelse{\isundefined{\@position}}{}{\headerpositionstyle{\@position\\[\acvHeaderAfterPositionSkip]}}% |
| 435 | \ifthenelse{\isundefined{\@address}}{}{\headeraddressstyle{\@address\\[\acvHeaderAfterAddressSkip]}}% |
| 436 | \headersocialstyle{% |
| 437 | \newbool{isstart}% |
| 438 | \setbool{isstart}{true}% |
| 439 | \ifthenelse{\isundefined{\@mobile}}% |
| 440 | {}% |
| 441 | {% |
| 442 | \faMobile\acvHeaderIconSep\@mobile% |
| 443 | \setbool{isstart}{false}% |
| 444 | }% |
| 445 | \ifthenelse{\isundefined{\@email}}% |
| 446 | {}% |
| 447 | {% |
| 448 | \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% |
| 449 | \href{mailto:\@email}{\faEnvelope\acvHeaderIconSep\@email}% |
| 450 | }% |
| 451 | \ifthenelse{\isundefined{\@homepage}}% |
| 452 | {}% |
| 453 | {% |
| 454 | \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% |
| 455 | \href{http://\@homepage}{\faHome\acvHeaderIconSep\@homepage}% |
| 456 | }% |
| 457 | \ifthenelse{\isundefined{\@github}}% |
| 458 | {}% |
| 459 | {% |
| 460 | \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% |
| 461 | \href{https://github.com/\@github}{\faGithubSquare\acvHeaderIconSep\@github}% |
| 462 | }% |
| 463 | \ifthenelse{\isundefined{\@gitlab}}% |
| 464 | {}% |
| 465 | {% |
| 466 | \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% |
| 467 | \href{https://gitlab.com/\@gitlab}{\faGitlab\acvHeaderIconSep\@gitlab}% |
| 468 | }% |
| 469 | \ifthenelse{\isundefined{\@stackoverflowid}}% |
| 470 | {}% |
| 471 | {% |
| 472 | \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% |
| 473 | \href{https://stackoverflow.com/users/\@stackoverflowid}{\faStackOverflow\acvHeaderIconSep\@stackoverflowname}% |
| 474 | }% |
| 475 | \ifthenelse{\isundefined{\@linkedin}}% |
| 476 | {}% |
| 477 | {% |
| 478 | \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% |
| 479 | \href{https://www.linkedin.com/in/\@linkedin}{\faLinkedinSquare\acvHeaderIconSep\@linkedin}% |
| 480 | }% |
| 481 | \ifthenelse{\isundefined{\@twitter}}% |
| 482 | {}% |
| 483 | {% |
| 484 | \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% |
| 485 | \href{https://twitter.com/\@twitter}{\faTwitter\acvHeaderIconSep\@twitter}% |
| 486 | }% |
| 487 | \ifthenelse{\isundefined{\@skype}}% |
| 488 | {}% |
| 489 | {% |
| 490 | \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% |
| 491 | \faSkype\acvHeaderIconSep\@skype% |
| 492 | }% |
| 493 | \ifthenelse{\isundefined{\@reddit}}% |
| 494 | {}% |
| 495 | {% |
| 496 | \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% |
| 497 | \href{https://www.reddit.com/user/\@reddit}{\faReddit\acvHeaderIconSep\@reddit}% |
| 498 | }% |
| 499 | \ifthenelse{\isundefined{\@xing}}% |
| 500 | {}% |
| 501 | {% |
| 502 | \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% |
| 503 | \href{https://www.xing.com/profile/\@xing}{\faXingSquare\acvHeaderIconSep\@xing} |
| 504 | }% |
| 505 | \ifthenelse{\isundefined{\@extrainfo}}% |
| 506 | {}% |
| 507 | {% |
| 508 | \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% |
| 509 | \@extrainfo% |
| 510 | }% |
| 511 | } \\[\acvHeaderAfterSocialSkip]% |
| 512 | \ifthenelse{\isundefined{\@quote}}% |
| 513 | {}% |
| 514 | {\headerquotestyle{\@quote\\}\vspace{\acvHeaderAfterQuoteSkip}}% |
| 515 | \end{minipage}% |
| 516 | \begin{minipage}[c]{\headerphotowidth}% |
| 517 | \ifthenelse{\equal{\@photoalign}{right}}{\raggedleft\drawphoto}{} |
| 518 | \end{minipage} |
| 519 | } |
| 520 | |
| 521 | % Define a footer for CV |
| 522 | % Usage: \makecvfooter{<left>}{<center>}{<right>} |
| 523 | \newcommand*{\makecvfooter}[3]{% |
| 524 | \fancyfoot{} |
| 525 | \fancyfoot[L]{\footerstyle{#1}} |
| 526 | \fancyfoot[C]{\footerstyle{#2}} |
| 527 | \fancyfoot[R]{\footerstyle{#3}} |
| 528 | } |
| 529 | |
| 530 | % Define a section for CV |
| 531 | % Usage: \cvsection{<section-title>} |
| 532 | \newcommand{\cvsection}[1]{% |
| 533 | \vspace{\acvSectionTopSkip} |
| 534 | \sectionstyle{#1} |
| 535 | \phantomsection |
| 536 | \color{gray}\vhrulefill{0.9pt} |
| 537 | } |
| 538 | |
| 539 | % Define a subsection for CV |
| 540 | % Usage: \cvsubsection{<subsection-title>} |
| 541 | \newcommand{\cvsubsection}[1]{% |
| 542 | \vspace{\acvSectionContentTopSkip} |
| 543 | \vspace{-3mm} |
| 544 | \subsectionstyle{#1} |
| 545 | \phantomsection |
| 546 | } |
| 547 | |
| 548 | % Define a paragraph for CV |
| 549 | \newenvironment{cvparagraph}{% |
| 550 | \vspace{\acvSectionContentTopSkip} |
| 551 | \vspace{-3mm} |
| 552 | \paragraphstyle |
| 553 | }{% |
| 554 | \par |
| 555 | \vspace{2mm} |
| 556 | } |
| 557 | |
| 558 | % Define an environment for cventry |
| 559 | \newenvironment{cventries}{% |
| 560 | \vspace{\acvSectionContentTopSkip} |
| 561 | \begin{center} |
| 562 | }{% |
| 563 | \end{center} |
| 564 | } |
| 565 | % Define an entry of cv information |
| 566 | % Usage: \cventry{<position>}{<title>}{<location>}{<date>}{<description>} |
| 567 | \newcommand*{\cventry}[5]{% |
| 568 | \vspace{-2.0mm} |
| 569 | \setlength\tabcolsep{0pt} |
| 570 | \setlength{\extrarowheight}{0pt} |
| 571 | \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} L{\textwidth - 4.5cm} R{4.5cm}} |
| 572 | \ifempty{#2#3} |
| 573 | {\entrypositionstyle{#1} & \entrydatestyle{#4} \\} |
| 574 | {\entrytitlestyle{#2} & \entrylocationstyle{#3} \\ |
| 575 | \entrypositionstyle{#1} & \entrydatestyle{#4} \\} |
| 576 | \multicolumn{2}{L{\textwidth}}{\descriptionstyle{#5}} |
| 577 | \end{tabular*}% |
| 578 | } |
| 579 | |
| 580 | % Define an environment for cvsubentry |
| 581 | \newenvironment{cvsubentries}{% |
| 582 | \begin{center} |
| 583 | }{% |
| 584 | \end{center} |
| 585 | } |
| 586 | % Define a subentry of cv information |
| 587 | % Usage: \cvsubentry{<position>}{<title>}{<date>}{<description>} |
| 588 | \newcommand*{\cvsubentry}[4]{% |
| 589 | \setlength\tabcolsep{0pt} |
| 590 | \setlength{\extrarowheight}{0pt} |
| 591 | \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} L{\textwidth - 4.5cm} R{4.5cm}} |
| 592 | \setlength\leftskip{0.2cm} |
| 593 | \subentrytitlestyle{#2} & \ifthenelse{\equal{#1}{}} |
| 594 | {\subentrydatestyle{#3}}{} |
| 595 | \ifthenelse{\equal{#1}{}} |
| 596 | {} |
| 597 | {\subentrypositionstyle{#1} & \subentrydatestyle{#3} \\} |
| 598 | \ifthenelse{\equal{#4}{}} |
| 599 | {} |
| 600 | {\multicolumn{2}{L{17.0cm}}{\subdescriptionstyle{#4}} \\} |
| 601 | \end{tabular*} |
| 602 | } |
| 603 | |
| 604 | % Define an environment for cvhonor |
| 605 | \newenvironment{cvhonors}{% |
| 606 | \vspace{\acvSectionContentTopSkip} |
| 607 | \vspace{-2mm} |
| 608 | \begin{center} |
| 609 | \setlength\tabcolsep{0pt} |
| 610 | \setlength{\extrarowheight}{0pt} |
| 611 | \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} C{1.5cm} L{\textwidth - 4.0cm} R{2.5cm}} |
| 612 | }{% |
| 613 | \end{tabular*} |
| 614 | \end{center} |
| 615 | } |
| 616 | % Define a line of cv information(honor, award or something else) |
| 617 | % Usage: \cvhonor{<position>}{<title>}{<location>}{<date>} |
| 618 | \newcommand*{\cvhonor}[4]{% |
| 619 | \honordatestyle{#4} & \honorpositionstyle{#1}, \honortitlestyle{#2} & \honorlocationstyle{#3} \\ |
| 620 | } |
| 621 | |
| 622 | % Define an environment for cvskill |
| 623 | \newenvironment{cvskills}{% |
| 624 | \vspace{\acvSectionContentTopSkip} |
| 625 | \vspace{-2.0mm} |
| 626 | \begin{center} |
| 627 | \setlength\tabcolsep{1ex} |
| 628 | \setlength{\extrarowheight}{0pt} |
| 629 | \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} r L{\textwidth * \real{0.9}}} |
| 630 | }{% |
| 631 | \end{tabular*} |
| 632 | \end{center} |
| 633 | } |
| 634 | % Define a line of cv information(skill) |
| 635 | % Usage: \cvskill{<type>}{<skillset>} |
| 636 | \newcommand*{\cvskill}[2]{% |
| 637 | \skilltypestyle{#1} & \skillsetstyle{#2} \\ |
| 638 | } |
| 639 | |
| 640 | % Define an environment for cvitems(for cventry) |
| 641 | \newenvironment{cvitems}{% |
| 642 | \vspace{-4.0mm} |
| 643 | \begin{justify} |
| 644 | \begin{itemize}[leftmargin=2ex, nosep, noitemsep] |
| 645 | \setlength{\parskip}{0pt} |
| 646 | \renewcommand{\labelitemi}{\bullet} |
| 647 | }{% |
| 648 | \end{itemize} |
| 649 | \end{justify} |
| 650 | \vspace{-4.0mm} |
| 651 | } |
| 652 | |
| 653 | |
| 654 | %------------------------------------------------------------------------------- |
| 655 | % Commands for elements of Cover Letter |
| 656 | %------------------------------------------------------------------------------- |
| 657 | % Define an environment for cvletter |
| 658 | \newenvironment{cvletter}{% |
| 659 | \lettertextstyle |
| 660 | }{% |
| 661 | } |
| 662 | |
| 663 | % Define a section for the cover letter |
| 664 | % Usage: \lettersection{<section-title>} |
| 665 | \newcommand{\lettersection}[1]{% |
| 666 | \par\addvspace{2.5ex} |
| 667 | \phantomsection{} |
| 668 | \lettersectionstyle{#1} |
| 669 | \color{gray}\vhrulefill{0.9pt} |
| 670 | \par\nobreak\addvspace{0.4ex} |
| 671 | } |
| 672 | |
| 673 | % Define a title of the cover letter |
| 674 | % Usage: \makelettertitle |
| 675 | \newcommand*{\makelettertitle}{% |
| 676 | \vspace{8.4mm} |
| 677 | \setlength\tabcolsep{0pt} |
| 678 | \setlength{\extrarowheight}{0pt} |
| 679 | \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} L{\textwidth - 4.5cm} R{4.5cm}} |
| 680 | \recipienttitlestyle{\@recipientname} & \letterdatestyle{\@letterdate} |
| 681 | \end{tabular*} |
| 682 | \begin{singlespace} |
| 683 | \recipientaddressstyle{\@recipientaddress} \\\\ |
| 684 | \end{singlespace} |
| 685 | \ifthenelse{\isundefined{\@lettertitle}} |
| 686 | {} |
| 687 | {\lettertitlestyle{\@lettertitle} \\} |
| 688 | \lettertextstyle{\@letteropening} |
| 689 | } |
| 690 | |
| 691 | % Define a closing of the cover letter |
| 692 | % Usage: \makeletterclosing |
| 693 | \newcommand*{\makeletterclosing}{% |
| 694 | \vspace{3.4mm} |
| 695 | \lettertextstyle{\@letterclosing} \\\\ |
| 696 | \letternamestyle{\@firstname\ \@lastname} |
| 697 | \ifthenelse{\isundefined{\@letterenclosure}} |
| 698 | {\\} |
| 699 | {% |
| 700 | \\\\\\ |
| 701 | \letterenclosurestyle{\@letterenclname: \@letterenclosure} \\ |
| 702 | } |
| 703 | } |