From 32008ac937685b0ce5f66d143f7f53a2366b1ca3 Mon Sep 17 00:00:00 2001 From: Ryan Hagenson Date: Tue, 18 Jun 2019 09:48:59 -0500 Subject: [PATCH 1/7] Fix issue #1 --- awesome-cv.cls | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/awesome-cv.cls b/awesome-cv.cls index c26c7754b..3d5189a40 100644 --- a/awesome-cv.cls +++ b/awesome-cv.cls @@ -639,7 +639,7 @@ \begin{center} \setlength\tabcolsep{0pt} \setlength{\extrarowheight}{0pt} - \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} C{1.5cm} L{\textwidth - 4.0cm} R{2.5cm}} + \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} L{3.0cm} L{\textwidth - 5.0cm} R{2.0cm}} }{% \end{tabular*} \end{center} From af67d6dcd058b7940a5a964b343758db90352baf Mon Sep 17 00:00:00 2001 From: Ryan Hagenson Date: Tue, 18 Jun 2019 09:50:56 -0500 Subject: [PATCH 2/7] Fix issue #2 --- awesome-cv.cls | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/awesome-cv.cls b/awesome-cv.cls index 3d5189a40..4805d69da 100644 --- a/awesome-cv.cls +++ b/awesome-cv.cls @@ -293,6 +293,10 @@ % Usage: \gitlab{} \newcommand*{\gitlab}[1]{\def\@gitlab{#1}} +% Defines writer's bitbucket (optional) +% Usage: \bitbucket{} +\newcommand*{\bitbucket}[1]{\def\@bitbucket{#1}} + % Defines writer's stackoverflow profile (optional) % Usage: \stackoverflow{}{} % e.g.https://stackoverflow.com/users/123456/sam-smith @@ -485,6 +489,12 @@ \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% \href{https://gitlab.com/\@gitlab}{\faGitlab\acvHeaderIconSep\@gitlab}% }% + \ifthenelse{\isundefined{\@bitbucket}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \href{https://bitbucket.com/\@bitbucket}{\faBitbucketSquare\acvHeaderIconSep\@bitbucket}% + }% \ifthenelse{\isundefined{\@stackoverflowid}}% {}% {% From ee3af70cb9138790653f40f56054c53886e163f8 Mon Sep 17 00:00:00 2001 From: "Ryan A. Hagenson" Date: Tue, 6 Aug 2019 19:48:14 -0500 Subject: [PATCH 3/7] Prevent pagebreak at start of sections via needspace --- awesome-cv.cls | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/awesome-cv.cls b/awesome-cv.cls index 4805d69da..0768f79f7 100644 --- a/awesome-cv.cls +++ b/awesome-cv.cls @@ -54,7 +54,7 @@ \RequirePackage{ragged2e} % Needed to configure page layout \RequirePackage{geometry} -% Needed to make header & footer effeciently +% Needed to make header & footer efficiently \RequirePackage{fancyhdr} % Needed to manage colors \RequirePackage{xcolor} @@ -88,7 +88,8 @@ pdfsubject={}, pdfkeywords={} } - +% Require additional space to be filled by content +\RequirePackage{needspace} %------------------------------------------------------------------------------- % Configuration for directory locations @@ -571,6 +572,7 @@ % Define a section for CV % Usage: \cvsection{} \newcommand{\cvsection}[1]{% + \needspace{5\baselineskip} \vspace{\acvSectionTopSkip} \sectionstyle{#1} \phantomsection @@ -580,6 +582,7 @@ % Define a subsection for CV % Usage: \cvsubsection{} \newcommand{\cvsubsection}[1]{% + \needspace{5\baselineskip} \vspace{\acvSectionContentTopSkip} \vspace{-3mm} \subsectionstyle{#1} @@ -742,3 +745,4 @@ \letterenclosurestyle{\@letterenclname: \@letterenclosure} \\ } } + From cb3ac31c1ea748bd09cd1fe9d373fc0911377e4c Mon Sep 17 00:00:00 2001 From: Ryan Hagenson Date: Wed, 9 Oct 2019 20:15:30 -0500 Subject: [PATCH 4/7] Fix #6, order header socials via their order in source file --- awesome-cv.cls | 164 ++++++++++++++----------------------------------- 1 file changed, 45 insertions(+), 119 deletions(-) diff --git a/awesome-cv.cls b/awesome-cv.cls index 0768f79f7..83d0ef23a 100644 --- a/awesome-cv.cls +++ b/awesome-cv.cls @@ -75,6 +75,8 @@ % Needed to use icons from font-awesome % (https://github.com/posquit0/latex-fontawesome) \RequirePackage{fontawesome} +% Needed to use icons from academicons +\RequirePackage{academicons} \RequirePackage[default,opentype]{sourcesanspro} % Needed for the photo ID \RequirePackage[skins]{tcolorbox} @@ -91,6 +93,7 @@ % Require additional space to be filled by content \RequirePackage{needspace} + %------------------------------------------------------------------------------- % Configuration for directory locations %------------------------------------------------------------------------------- @@ -162,7 +165,7 @@ % Configuration for fonts %------------------------------------------------------------------------------- % Set the FontAwesome font to be up-to-date. -\newfontfamily\FA[Path=\@fontdir]{FontAwesome} +% \newfontfamily\FA[Path=\@fontdir]{FontAwesome} % Uncomment if \FA is not defined % Set font for header (default is Roboto) \newfontfamily\headerfont[ Path=\@fontdir, @@ -234,10 +237,21 @@ \newcommand*{\letternamestyle}[1]{{\fontsize{10pt}{1em}\bodyfont\bfseries\color{darktext} #1}} \newcommand*{\letterenclosurestyle}[1]{{\fontsize{10pt}{1em}\bodyfontlight\slshape\color{lighttext} #1}} - %------------------------------------------------------------------------------- % Commands for personal information %------------------------------------------------------------------------------- +% Define a collection of header information +\edef\header{} +\newcommand{\headerAdd}[1]{ + \ifnonprint{\ignorespaces\header}{% + \protected@edef\header{#1}% + }{% + \protected@edef\header{\header{} \acvHeaderSocialSep #1}% + }% +}% +\newcommand{\headerSocial}[3]{ + \headerAdd{\href{#2#3}{#1\acvHeaderIconSep#3}} +} % Define photo ID % Usage: \photo[circle|rectangle,edge|noedge,left|right]{} \newcommand{\photo}[2][circle,edge,left]{% @@ -276,57 +290,61 @@ % Defines writer's mobile (optional) % Usage: \mobile{} -\newcommand*{\mobile}[1]{\def\@mobile{#1}} +\newcommand{\mobile}[1]{\headerAdd{\faMobile\acvHeaderIconSep#1}} % Defines writer's email (optional) % Usage: \email{} -\newcommand*{\email}[1]{\def\@email{#1}} +\newcommand{\email}[1]{\headerSocial{\faEnvelope}{mailto:}{#1}} % Defines writer's homepage (optional) % Usage: \homepage{} -\newcommand*{\homepage}[1]{\def\@homepage{#1}} +\newcommand{\homepage}[1]{\headerSocial{\faHome}{https://#1}{#1}} % Defines writer's github (optional) % Usage: \github{} -\newcommand*{\github}[1]{\def\@github{#1}} +\newcommand{\github}[1]{\headerSocial{\faGithub}{https://github.com/}{#1}} % Defines writer's gitlab (optional) % Usage: \gitlab{} -\newcommand*{\gitlab}[1]{\def\@gitlab{#1}} +\newcommand{\gitlab}[1]{\headerSocial{\faGitlab}{https://gitlab.com/}{#1}} % Defines writer's bitbucket (optional) % Usage: \bitbucket{} -\newcommand*{\bitbucket}[1]{\def\@bitbucket{#1}} +\newcommand{\bitbucket}[1]{\headerSocial{\faBitbucket}{https://bitbucket.com/}{#1}} % Defines writer's stackoverflow profile (optional) % Usage: \stackoverflow{}{} % e.g.https://stackoverflow.com/users/123456/sam-smith % would be \stackoverflow{123456}{sam-smith} -\newcommand*{\stackoverflow}[2]{\def\@stackoverflowid{#1}\def\@stackoverflowname{#2}} +\newcommand{\stackoverflow}[2]{\headerAdd{\href{https://stackoverflow.com/users/#1}{\faStackOverflow\acvHeaderIconSep#2}}} % Defines writer's linked-in (optional) % Usage: \linkedin{} -\newcommand*{\linkedin}[1]{\def\@linkedin{#1}} +\newcommand{\linkedin}[1]{\headerSocial{\faLinkedin}{https://www.linkedin.com/in/}{#1}} % Defines writer's twitter (optional) % Usage: \twitter{} -\newcommand*{\twitter}[1]{\def\@twitter{#1}} +\newcommand{\twitter}[1]{\headerSocial{\faTwitter}{https://twitter.com/}{#1}} + +% Defines writer's ORCID (optional) +% Usage: \orcid{} +\newcommand{\orcid}[1]{\headerSocial{\aiOrcid}{https://orcid.org/}{#1}} % Defines writer's skype (optional) % Usage: \skype{} -\newcommand*{\skype}[1]{\def\@skype{#1}} +\newcommand{\skype}[1]{\headerAdd{\faSkype\acvHeaderIconSep#1}} % Defines writer's reddit (optional) % Usage: \reddit{} -\newcommand*{\reddit}[1]{\def\@reddit{#1}} +\newcommand{\reddit}[1]{\headerSocial{\faReddit}{https://www.reddit.com/user/}{#1}} % Defines writer's xing (optional) % Usage: \xing{} -\newcommand*{\xing}[1]{\def\@xing{#1}} +\newcommand{\xing}[1]{\headerSocial{\faXing}{https://www.xing.com/profile/}{#1}} % Defines writer's medium profile (optional) % Usage: \medium{} -\newcommand*{\medium}[1]{\def\@medium{#1}} +\newcommand{\medium}[1]{\headerSocial{\faMedium}{https://medium.com/}{#1}} % Defines writer's google scholar profile (optional) % Usage: \googlescholar{}{} @@ -334,18 +352,11 @@ % would be \googlescholar{wpZDx1cAAAAJ}{Name-to-display-next-icon} % If 'googlescholar-name' is not provided than it defaults to % '\firstname \lastname' -\newcommand*{\googlescholar}[2]{% - \def\@googlescholarid{#1}% - \ifthenelse{\equal{#2}{}}{% - \def\@googlescholarname{\@firstname~\@lastname}% - }{% - \def\@googlescholarname{#2}% - }% -} +\newcommand{\googlescholar}[2]{\headerAdd{\href{https://scholar.google.com/citations?user=#1}{\faGraduationCap\acvHeaderIconSep#2}}} % Defines writer's extra informations (optional) % Usage: \extrainfo{} -\newcommand*{\extrainfo}[1]{\def\@extrainfo{#1}} +\newcommand{\extrainfo}[1]{\headerAdd{#1}} % Defines writer's quote (optional) % Usage: \quote{} @@ -403,7 +414,6 @@ \newcommand{\acvSectionTopSkip}{3mm} \newcommand{\acvSectionContentTopSkip}{2.5mm} - %------------------------------------------------------------------------------- % Commands for utilities %------------------------------------------------------------------------------- @@ -418,6 +428,14 @@ % Use to execute conditional statements by checking empty string \newcommand*{\ifempty}[3]{\ifthenelse{\isempty{#1}}{#2}{#3}} +% Use to execute conditional statements by checking non-printing string +\newcommand*{\ifnonprint}[3]{ +\setbox0=\hbox{#1\unskip}\ifdim\wd0=0pt + #2 +\else + #3 +\fi +} %------------------------------------------------------------------------------- % Commands for elements of CV structure @@ -458,98 +476,7 @@ \ifthenelse{\isundefined{\@position}}{}{\headerpositionstyle{\@position\\[\acvHeaderAfterPositionSkip]}}% \ifthenelse{\isundefined{\@address}}{}{\headeraddressstyle{\@address\\[\acvHeaderAfterAddressSkip]}}% \headersocialstyle{% - \newbool{isstart}% - \setbool{isstart}{true}% - \ifthenelse{\isundefined{\@mobile}}% - {}% - {% - \faMobile\acvHeaderIconSep\@mobile% - \setbool{isstart}{false}% - }% - \ifthenelse{\isundefined{\@email}}% - {}% - {% - \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% - \href{mailto:\@email}{\faEnvelope\acvHeaderIconSep\@email}% - }% - \ifthenelse{\isundefined{\@homepage}}% - {}% - {% - \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% - \href{http://\@homepage}{\faHome\acvHeaderIconSep\@homepage}% - }% - \ifthenelse{\isundefined{\@github}}% - {}% - {% - \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% - \href{https://github.com/\@github}{\faGithubSquare\acvHeaderIconSep\@github}% - }% - \ifthenelse{\isundefined{\@gitlab}}% - {}% - {% - \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% - \href{https://gitlab.com/\@gitlab}{\faGitlab\acvHeaderIconSep\@gitlab}% - }% - \ifthenelse{\isundefined{\@bitbucket}}% - {}% - {% - \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% - \href{https://bitbucket.com/\@bitbucket}{\faBitbucketSquare\acvHeaderIconSep\@bitbucket}% - }% - \ifthenelse{\isundefined{\@stackoverflowid}}% - {}% - {% - \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% - \href{https://stackoverflow.com/users/\@stackoverflowid}{\faStackOverflow\acvHeaderIconSep\@stackoverflowname}% - }% - \ifthenelse{\isundefined{\@linkedin}}% - {}% - {% - \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% - \href{https://www.linkedin.com/in/\@linkedin}{\faLinkedinSquare\acvHeaderIconSep\@linkedin}% - }% - \ifthenelse{\isundefined{\@twitter}}% - {}% - {% - \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% - \href{https://twitter.com/\@twitter}{\faTwitter\acvHeaderIconSep\@twitter}% - }% - \ifthenelse{\isundefined{\@skype}}% - {}% - {% - \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% - \faSkype\acvHeaderIconSep\@skype% - }% - \ifthenelse{\isundefined{\@reddit}}% - {}% - {% - \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% - \href{https://www.reddit.com/user/\@reddit}{\faReddit\acvHeaderIconSep\@reddit}% - }% - \ifthenelse{\isundefined{\@xing}}% - {}% - {% - \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% - \href{https://www.xing.com/profile/\@xing}{\faXingSquare\acvHeaderIconSep\@xing} - }% - \ifthenelse{\isundefined{\@medium}}% - {}% - {% - \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% - \href{https://medium.com/@\@medium}{\faMedium\acvHeaderIconSep\@medium}% - }% - \ifthenelse{\isundefined{\@googlescholarid}}% - {}% - {% - \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% - \href{https://scholar.google.com/citations?user=\@googlescholarid}{\faGraduationCap\acvHeaderIconSep\@googlescholarname}% - }% - \ifthenelse{\isundefined{\@extrainfo}}% - {}% - {% - \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% - \@extrainfo% - }% + \header{} } \\[\acvHeaderAfterSocialSkip]% \ifthenelse{\isundefined{\@quote}}% {}% @@ -678,7 +605,7 @@ % Define a line of cv information(skill) % Usage: \cvskill{}{} \newcommand*{\cvskill}[2]{% - \skilltypestyle{#1} & \skillsetstyle{#2} \\ + \skilltypestyle{#1} & \skillsetstyle{#2} \\ } % Define an environment for cvitems(for cventry) @@ -745,4 +672,3 @@ \letterenclosurestyle{\@letterenclname: \@letterenclosure} \\ } } - From 98a5c6bd872b169ef12455cd107872a110f62ce0 Mon Sep 17 00:00:00 2001 From: Ryan Hagenson Date: Fri, 25 Oct 2019 15:23:15 -0500 Subject: [PATCH 5/7] Order \cventry, fix #5 --- awesome-cv.cls | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/awesome-cv.cls b/awesome-cv.cls index 83d0ef23a..9caf5c3be 100644 --- a/awesome-cv.cls +++ b/awesome-cv.cls @@ -533,17 +533,20 @@ }{% \end{center} } + % Define an entry of cv information % Usage: \cventry{}{}{<location>}{<date>}{<description>} +% This command formats with <position> above <title> on the left and <location> above <date> +% on the right with <description> below both \newcommand*{\cventry}[5]{% \vspace{-2.0mm} \setlength\tabcolsep{0pt} \setlength{\extrarowheight}{0pt} \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} L{\textwidth - 4.5cm} R{4.5cm}} - \ifempty{#2#3} - {\entrypositionstyle{#1} & \entrydatestyle{#4} \\} - {\entrytitlestyle{#2} & \entrylocationstyle{#3} \\ - \entrypositionstyle{#1} & \entrydatestyle{#4} \\} + \ifempty{#1#3} + {\entrypositionstyle{#2} & \entrydatestyle{#4} \\} + {\entrytitlestyle{#1} & \entrylocationstyle{#3} \\ + \entrypositionstyle{#2} & \entrydatestyle{#4} \\} \multicolumn{2}{L{\textwidth}}{\descriptionstyle{#5}} \end{tabular*}% } From d271dc08484643f8954b6d36b180101db0f7f076 Mon Sep 17 00:00:00 2001 From: "Ryan A. Hagenson" <Ryan.Hagenson@gmail.com> Date: Mon, 25 Nov 2019 11:51:41 -0600 Subject: [PATCH 6/7] Require 10 lines to place new section on current page Bumps a new section to the next page if there is not enough space left on the current page to fit at least 10 additional lines --- awesome-cv.cls | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/awesome-cv.cls b/awesome-cv.cls index 9caf5c3be..8ae8a77f4 100644 --- a/awesome-cv.cls +++ b/awesome-cv.cls @@ -499,7 +499,7 @@ % Define a section for CV % Usage: \cvsection{<section-title>} \newcommand{\cvsection}[1]{% - \needspace{5\baselineskip} + \needspace{10\baselineskip} \vspace{\acvSectionTopSkip} \sectionstyle{#1} \phantomsection From 2340f2ece0ab067b82a00fa8441ee67bd64ee415 Mon Sep 17 00:00:00 2001 From: "Ryan A. Hagenson" <Ryan.Hagenson@gmail.com> Date: Wed, 12 Feb 2020 08:33:42 -0600 Subject: [PATCH 7/7] Accomodate longer left and right entries --- awesome-cv.cls | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/awesome-cv.cls b/awesome-cv.cls index 8ae8a77f4..bd850b1a2 100644 --- a/awesome-cv.cls +++ b/awesome-cv.cls @@ -582,7 +582,7 @@ \begin{center} \setlength\tabcolsep{0pt} \setlength{\extrarowheight}{0pt} - \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} L{3.0cm} L{\textwidth - 5.0cm} R{2.0cm}} + \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} L{3.0cm} L{\textwidth - 6.5cm} R{3.5cm}} }{% \end{tabular*} \end{center}