resume

Fork of Awesome CV that I've modified for my own use - requires XeLaTex.
git clone git://git.mattfehrenbach.xyz/resume.git
Log | Files | Refs | README | LICENSE

awesome-cv.cls (23600B)


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