Vendor awesome-cv.cls
[resume.git] / awesome-cv.cls
CommitLineData
2c9a40d6
JC
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}