cv

Source code for my CV

awesome-cv.cls (20377B)

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