diff options
17 files changed, 4304 insertions, 1 deletions
diff --git a/Master/texmf-dist/doc/latex/limecv/LICENSE b/Master/texmf-dist/doc/latex/limecv/LICENSE new file mode 100644 index 00000000000..c5e9f888b1a --- /dev/null +++ b/Master/texmf-dist/doc/latex/limecv/LICENSE @@ -0,0 +1,297 @@ +The LaTeX Project Public License +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + +LPPL Version 1.3c 2008-05-04 + +Copyright 1999 2002-2008 LaTeX3 Project + Everyone is allowed to distribute verbatim copies of this + license document, but modification of it is not allowed. + + +PREAMBLE +======== + +The LaTeX Project Public License (LPPL) is the primary license under +which the LaTeX kernel and the base LaTeX packages are distributed. + +You may use this license for any work of which you hold the copyright +and which you wish to distribute. This license may be particularly +suitable if your work is TeX-related (such as a LaTeX package), but +it is written in such a way that you can use it even if your work is +unrelated to TeX. + +The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE', +below, gives instructions, examples, and recommendations for authors +who are considering distributing their works under this license. + +This license gives conditions under which a work may be distributed +and modified, as well as conditions under which modified versions of +that work may be distributed. + +We, the LaTeX3 Project, believe that the conditions below give you +the freedom to make and distribute modified versions of your work +that conform with whatever technical specifications you wish while +maintaining the availability, integrity, and reliability of +that work. If you do not see how to achieve your goal while +meeting these conditions, then read the document `cfgguide.tex' +and `modguide.tex' in the base LaTeX distribution for suggestions. + + +DEFINITIONS +=========== + +In this license document the following terms are used: + + `Work' + Any work being distributed under this License. + + `Derived Work' + Any work that under any applicable law is derived from the Work. + + `Modification' + Any procedure that produces a Derived Work under any applicable + law -- for example, the production of a file containing an + original file associated with the Work or a significant portion of + such a file, either verbatim or with modifications and/or + translated into another language. + + `Modify' + To apply any procedure that produces a Derived Work under any + applicable law. + + `Distribution' + Making copies of the Work available from one person to another, in + whole or in part. Distribution includes (but is not limited to) + making any electronic components of the Work accessible by + file transfer protocols such as FTP or HTTP or by shared file + systems such as Sun's Network File System (NFS). + + `Compiled Work' + A version of the Work that has been processed into a form where it + is directly usable on a computer system. This processing may + include using installation facilities provided by the Work, + transformations of the Work, copying of components of the Work, or + other activities. Note that modification of any installation + facilities provided by the Work constitutes modification of the Work. + + `Current Maintainer' + A person or persons nominated as such within the Work. If there is + no such explicit nomination then it is the `Copyright Holder' under + any applicable law. + + `Base Interpreter' + A program or process that is normally needed for running or + interpreting a part or the whole of the Work. + + A Base Interpreter may depend on external components but these + are not considered part of the Base Interpreter provided that each + external component clearly identifies itself whenever it is used + interactively. Unless explicitly specified when applying the + license to the Work, the only applicable Base Interpreter is a + `LaTeX-Format' or in the case of files belonging to the + `LaTeX-format' a program implementing the `TeX language'. + + + +CONDITIONS ON DISTRIBUTION AND MODIFICATION +=========================================== + +1. Activities other than distribution and/or modification of the Work +are not covered by this license; they are outside its scope. In +particular, the act of running the Work is not restricted and no +requirements are made concerning any offers of support for the Work. + +2. You may distribute a complete, unmodified copy of the Work as you +received it. Distribution of only part of the Work is considered +modification of the Work, and no right to distribute such a Derived +Work may be assumed under the terms of this clause. + +3. You may distribute a Compiled Work that has been generated from a +complete, unmodified copy of the Work as distributed under Clause 2 +above, as long as that Compiled Work is distributed in such a way that +the recipients may install the Compiled Work on their system exactly +as it would have been installed if they generated a Compiled Work +directly from the Work. + +4. If you are the Current Maintainer of the Work, you may, without +restriction, modify the Work, thus creating a Derived Work. You may +also distribute the Derived Work without restriction, including +Compiled Works generated from the Derived Work. Derived Works +distributed in this manner by the Current Maintainer are considered to +be updated versions of the Work. + +5. If you are not the Current Maintainer of the Work, you may modify +your copy of the Work, thus creating a Derived Work based on the Work, +and compile this Derived Work, thus creating a Compiled Work based on +the Derived Work. + +6. If you are not the Current Maintainer of the Work, you may +distribute a Derived Work provided the following conditions are met +for every component of the Work unless that component clearly states +in the copyright notice that it is exempt from that condition. Only +the Current Maintainer is allowed to add such statements of exemption +to a component of the Work. + + a. If a component of this Derived Work can be a direct replacement + for a component of the Work when that component is used with the + Base Interpreter, then, wherever this component of the Work + identifies itself to the user when used interactively with that + Base Interpreter, the replacement component of this Derived Work + clearly and unambiguously identifies itself as a modified version + of this component to the user when used interactively with that + Base Interpreter. + + b. Every component of the Derived Work contains prominent notices + detailing the nature of the changes to that component, or a + prominent reference to another file that is distributed as part + of the Derived Work and that contains a complete and accurate log + of the changes. + + c. No information in the Derived Work implies that any persons, + including (but not limited to) the authors of the original version + of the Work, provide any support, including (but not limited to) + the reporting and handling of errors, to recipients of the + Derived Work unless those persons have stated explicitly that + they do provide such support for the Derived Work. + + d. You distribute at least one of the following with the Derived Work: + + 1. A complete, unmodified copy of the Work; + if your distribution of a modified component is made by + offering access to copy the modified component from a + designated place, then offering equivalent access to copy + the Work from the same or some similar place meets this + condition, even though third parties are not compelled to + copy the Work along with the modified component; + + 2. Information that is sufficient to obtain a complete, + unmodified copy of the Work. + +7. If you are not the Current Maintainer of the Work, you may +distribute a Compiled Work generated from a Derived Work, as long as +the Derived Work is distributed to all recipients of the Compiled +Work, and as long as the conditions of Clause 6, above, are met with +regard to the Derived Work. + +8. The conditions above are not intended to prohibit, and hence do not +apply to, the modification, by any method, of any component so that it +becomes identical to an updated version of that component of the Work as +it is distributed by the Current Maintainer under Clause 4, above. + +9. Distribution of the Work or any Derived Work in an alternative +format, where the Work or that Derived Work (in whole or in part) is +then produced by applying some process to that format, does not relax or +nullify any sections of this license as they pertain to the results of +applying that process. + +10. a. A Derived Work may be distributed under a different license + provided that license itself honors the conditions listed in + Clause 6 above, in regard to the Work, though it does not have + to honor the rest of the conditions in this license. + + b. If a Derived Work is distributed under a different license, that + Derived Work must provide sufficient documentation as part of + itself to allow each recipient of that Derived Work to honor the + restrictions in Clause 6 above, concerning changes from the Work. + +11. This license places no restrictions on works that are unrelated to +the Work, nor does this license place any restrictions on aggregating +such works with the Work by any means. + +12. Nothing in this license is intended to, or may be used to, prevent +complete compliance by all parties with all applicable laws. + + +NO WARRANTY +=========== + +There is no warranty for the Work. Except when otherwise stated in +writing, the Copyright Holder provides the Work `as is', without +warranty of any kind, either expressed or implied, including, but not +limited to, the implied warranties of merchantability and fitness for a +particular purpose. The entire risk as to the quality and performance +of the Work is with you. Should the Work prove defective, you assume +the cost of all necessary servicing, repair, or correction. + +In no event unless required by applicable law or agreed to in writing +will The Copyright Holder, or any author named in the components of the +Work, or any other party who may distribute and/or modify the Work as +permitted above, be liable to you for damages, including any general, +special, incidental or consequential damages arising out of any use of +the Work or out of inability to use the Work (including, but not limited +to, loss of data, data being rendered inaccurate, or losses sustained by +anyone as a result of any failure of the Work to operate with any other +programs), even if the Copyright Holder or said author or said other +party has been advised of the possibility of such damages. + + +MAINTENANCE OF THE WORK +======================= + +The Work has the status `author-maintained' if the Copyright Holder +explicitly and prominently states near the primary copyright notice in +the Work that the Work can only be maintained by the Copyright Holder +or simply that it is `author-maintained'. + +The Work has the status `maintained' if there is a Current Maintainer +who has indicated in the Work that they are willing to receive error +reports for the Work (for example, by supplying a valid e-mail +address). It is not required for the Current Maintainer to acknowledge +or act upon these error reports. + +The Work changes from status `maintained' to `unmaintained' if there +is no Current Maintainer, or the person stated to be Current +Maintainer of the work cannot be reached through the indicated means +of communication for a period of six months, and there are no other +significant signs of active maintenance. + +You can become the Current Maintainer of the Work by agreement with +any existing Current Maintainer to take over this role. + +If the Work is unmaintained, you can become the Current Maintainer of +the Work through the following steps: + + 1. Make a reasonable attempt to trace the Current Maintainer (and + the Copyright Holder, if the two differ) through the means of + an Internet or similar search. + + 2. If this search is successful, then enquire whether the Work + is still maintained. + + a. If it is being maintained, then ask the Current Maintainer + to update their communication data within one month. + + b. If the search is unsuccessful or no action to resume active + maintenance is taken by the Current Maintainer, then announce + within the pertinent community your intention to take over + maintenance. (If the Work is a LaTeX work, this could be + done, for example, by posting to comp.text.tex.) + + 3a. If the Current Maintainer is reachable and agrees to pass + maintenance of the Work to you, then this takes effect + immediately upon announcement. + + b. If the Current Maintainer is not reachable and the Copyright + Holder agrees that maintenance of the Work be passed to you, + then this takes effect immediately upon announcement. + + 4. If you make an `intention announcement' as described in 2b. above + and after three months your intention is challenged neither by + the Current Maintainer nor by the Copyright Holder nor by other + people, then you may arrange for the Work to be changed so as + to name you as the (new) Current Maintainer. + + 5. If the previously unreachable Current Maintainer becomes + reachable once more within three months of a change completed + under the terms of 3b) or 4), then that Current Maintainer must + become or remain the Current Maintainer upon request provided + they then update their communication data within one month. + +A change in the Current Maintainer does not, of itself, alter the fact +that the Work is distributed under the LPPL license. + +If you become the Current Maintainer of the Work, you should +immediately provide, within the Work, a prominent and unambiguous +statement of your status as Current Maintainer. You should also +announce your new status to the same pertinent community as +in 2b) above. diff --git a/Master/texmf-dist/doc/latex/limecv/README.md b/Master/texmf-dist/doc/latex/limecv/README.md new file mode 100644 index 00000000000..989f872feaa --- /dev/null +++ b/Master/texmf-dist/doc/latex/limecv/README.md @@ -0,0 +1,74 @@ +# limecv <img src="src/images/limecv-icon.png" alt="limecv project icon" width="40px"/> + +`limecv` is a document class to typeset curriculum vitæ in (Xe/Lua)LaTeX. + +The design of this document class is detailed in [a series of blog posts][blog]. + +Example CV: + +<div> + <img src="images/cv.png" alt-="CV example" width="300px"/> + <img src="images/cover_letter.png" alt-="cover letter example" width="300px"/> +</div> + +## Installation + +The package is available from CTAN, to install this document class using your favourite package manager. + +After installing this package, make sure you have the following fonts installed: + +* [FontAwesome][FA] +* [Fira][fira] + +The following packages need to be installed on your system. They are all available on CTAN: +`kvoptions`, +`ifxetex`, +`ifluatex`, +`xparse`, +`calc`, +`xcolor`, +`tabularx`, +`hyperref`, +`url`, +`parskip`, +`xstring`, +`xkeyval`, +`tikz`, +`graphicx`, +`fontspec` (XeLaTeX and LuaLaTeX only) and +`fontawesome`. + +## Documentation + +The class documentation can be found on CTAN. + +Alternatively, the documentation can also be created by running `pdflatex limecv.dtx`. + +## Examples + +To compile the examples in `/examples/`, install the package from CTAN or compile from source by running: `pdflatex limecv.ins` and copy the resulting `limecv.cls` file to the `/examples/` folder. + +## Roadmap + +Below is a list of upcoming features and important to-d items. After these have been resolved, the first stable release will be released. + +- [x] Publish to CTAN. +- [x] Initial release. +- [x] LuaLaTeX support. +- [x] LaTeX support. +- [ ] Cleaned code. +- [x] `.dtx` source code format. +- [ ] Real testing by third party. + +## Licence + +LPPL v1.3c See LICENSE file. + +Default profile picture courtesy of Twitter. + +© 2017 Olivier Pieters + +[blog]: https://olivierpieters.be/blog/archive/tag/limecv +[FA]: http://fontawesome.io +[fira]: https://github.com/mozilla/Fira +[docs]: http://ctan.org/tex-archive/macros/generic/limecv/limecv.pdf diff --git a/Master/texmf-dist/doc/latex/limecv/examples/limecv-icon.pdf b/Master/texmf-dist/doc/latex/limecv/examples/limecv-icon.pdf Binary files differnew file mode 100644 index 00000000000..f360232f465 --- /dev/null +++ b/Master/texmf-dist/doc/latex/limecv/examples/limecv-icon.pdf diff --git a/Master/texmf-dist/doc/latex/limecv/examples/mwe-latex.pdf b/Master/texmf-dist/doc/latex/limecv/examples/mwe-latex.pdf Binary files differnew file mode 100644 index 00000000000..9558f626fdc --- /dev/null +++ b/Master/texmf-dist/doc/latex/limecv/examples/mwe-latex.pdf diff --git a/Master/texmf-dist/doc/latex/limecv/examples/mwe-latex.tex b/Master/texmf-dist/doc/latex/limecv/examples/mwe-latex.tex new file mode 100644 index 00000000000..96e0e9a1a34 --- /dev/null +++ b/Master/texmf-dist/doc/latex/limecv/examples/mwe-latex.tex @@ -0,0 +1,145 @@ +% !TEX TS-program = pdflatex +% !TEX encoding = UTF-8 Unicode + +% mwe-latex.cls +% +% Copyright 2017 Olivier Pieters +% +% This is a MWE of the `limecv' class that showcases its features +% and sane packages to load. This MWE assumes that the LaTeX +% compiler is used. +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Olivier Pieters. +% Contact the maintainer at: me (at) olivierpieters (dot) be. + + +\documentclass[a4paper]{limecv} + + % Defaults used in template design. + \usepackage[margin=\cvMargin,noheadfoot]{geometry} + + % For cover letter. + \usepackage{lipsum} + + \begin{document} + + % Design of side bar. + \begin{cvSideBar} + \cvID{John}{Doe}{picture}{position} + + \begin{cvProfile} + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus ullamcorper euismod lorem nec eleifend. Suspendisse ac varius quam. Etiam laoreet nunc orci, vestibulum imperdiet enim elementum at. Duis dictum metus sapien, eu blandit quam malesuada et. Ut viverra maximus eros. + \end{cvProfile} + + \begin{cvContact} + \cvContactAddress{Some Street 78\\B-9000 Ghent} + \cvContactEmail{mailto:john@doe.tld}{john@doe.tld} + \cvContactPhone{+1 781 555 1212} + \cvContactWebsite{https://doe.tld}{doe.tld} + \cvContactLinkedin{https://www.linkedin.com/in/johndoe/}{johndoe} + \cvContactTwitter{https://twitter.com/johndoe}{@johndoe} + \cvContactKeybase{https://keybase.io/johndoe}{\texttt{AAAA 5555 BBBB FFFF}} + \end{cvContact} + + \begin{cvLanguages} + \cvLanguage{English (native)}{5} + \cvLanguage{German (B2)}{3} + \cvLanguage{Spanish}{3} + \end{cvLanguages} + + \begin{cvInterests}[short] + \cvInterestsPersonal + \cvInterest{\faTrain}{model trains} + \cvInterest{\faGamepad}{gaming} + \cvInterest{\faSuitcase}{travelling} + \cvInterestsProfessional + \cvInterest{\faFilm}{film} + \cvInterest{\faCamera}{photography} + \end{cvInterests} + + \begin{cvProjects} + \cvProject[image=limecv-icon,width=1cm,link=https://github.com/opieters/limecv]{\texttt{limecv}}{A \LaTeX\ CV document class.} + \end{cvProjects} + + \end{cvSideBar} + + \begin{cvMainContent} + + \begin{cvEducation} + \cvItem{Evening class: Chinese\\ + Some School, City. September 2015 -- June 2016\\ + Achieved A2 language skill in Chinese (Mandarin).} + \cvItem{Bachelor of Science in Biochemistry and Biotechnology\\ + University, City. September 2009 -- June 2012\\ + General training in the basic sciences and the molecular life science.} + \cvItem{Master of Science in Biochemistry and Biotechnology\\ + University, City. September 2012 -- June 2015\\ + Acquisition of insight into and knowledge of possibilities for application in the area of biochemistry and biotechnology, specific with applications in biomedical application and due problem-solving reasoning skills.} + \end{cvEducation} + + \begin{cvExperience} + \cvItem{Student Job\\ + \textsc{\selectfont Company X}, Location X. Summer 2010\\ + Integer tincidunt dapibus consectetur. Nullam tristique aliquam luctus. Sed ut ante velit. Nulla pharetra maximus lacus at elementum. Suspendisse sodales consectetur metus, sit amet ultricies ipsum ultrices ut.}; + \cvItem{Internship\\ + \textsc{Company Y}, Location Y. June 2012 -- August 2012\\ + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi dictum cursus sapien, id eleifend mi pellentesque id. Etiam lobortis eu odio a sodales. Phasellus ut dolor feugiat, lacinia lectus in, blandit metus. Fusce lacinia dolor et metus gravida pulvinar sit amet et ex.}; + \cvItem{Internship\\ + \textsc{Company Z}, Location Z. August 2014 -- September 2014\\ + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi dictum cursus sapien, id eleifend mi pellentesque id. Etiam lobortis eu odio a sodales. Phasellus ut dolor feugiat, lacinia lectus in, blandit metus. Fusce lacinia dolor et metus gravida pulvinar sit amet et ex. Suspendisse vestibulum, leo malesuada molestie maximus, sem risus ornare elit, vitae sodales felis elit in ipsum.}; + \end{cvExperience} + + \begin{cvSkills} + \cvSkillTwo{5}{MATLAB}{5}{\LaTeX} + \cvSkillTwo{4}{Python}{4}{VHDL} + \cvSkillTwo{4}{Microsoft Office}{4}{macOS} + \cvSkillTwo{3}{C, C++}{1}{Javascript} + \cvSkillTwo{3}{HTML5/CSS}{3}{Bash} + \end{cvSkills} + + \begin{cvReferences} + \cvAddReference{% + name=Jane Smith, + company=Company ABC Co.\ Ltd., + position=Job title, + address line 1=Street lane 2, + address line 2=B-1150 Brussels, + mobile phone=+1 781 555 1212}% + \end{cvReferences} + + \end{cvMainContent} + + \clearpage + + \begin{cvCoverLetter} + + \cvBeneficiary{% + name=Jane Smith, + position=Position, + company=Company, + address line 1=Address line 1, + address line 2=Address line 2} + + Dear Miss.\ Smith + + \vspace{\baselineskip} + + \lipsum[1-3] + + \vspace{\cvMargin} + + \cvFullName + + \end{cvCoverLetter} + + \end{document}
\ No newline at end of file diff --git a/Master/texmf-dist/doc/latex/limecv/examples/mwe-lualatex.pdf b/Master/texmf-dist/doc/latex/limecv/examples/mwe-lualatex.pdf Binary files differnew file mode 100644 index 00000000000..390eb037877 --- /dev/null +++ b/Master/texmf-dist/doc/latex/limecv/examples/mwe-lualatex.pdf diff --git a/Master/texmf-dist/doc/latex/limecv/examples/mwe-lualatex.tex b/Master/texmf-dist/doc/latex/limecv/examples/mwe-lualatex.tex new file mode 100644 index 00000000000..93b67070225 --- /dev/null +++ b/Master/texmf-dist/doc/latex/limecv/examples/mwe-lualatex.tex @@ -0,0 +1,146 @@ +% !TEX TS-program = lualatex +% !TEX encoding = UTF-8 Unicode + +% mwe-lualatex.cls +% +% Copyright 2017 Olivier Pieters +% +% This is a MWE of the `limecv' class that showcases its features +% and sane packages to load. This MWE assumes that the LuaLaTeX +% compiler is used. It might be necessary to manually specify the +% font path for FontAwesome if recent symbols are used. +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Olivier Pieters. +% Contact the maintainer at: me (at) olivierpieters (dot) be. + + +\documentclass[a4paper]{limecv} + + % Defaults used in template design. + \usepackage[margin=\cvMargin,noheadfoot]{geometry} + + % For cover letter. + \usepackage{lipsum} + + \begin{document} + + % Design of side bar. + \begin{cvSideBar} + \cvID{John}{Doe}{picture}{position} + + \begin{cvProfile} + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus ullamcorper euismod lorem nec eleifend. Suspendisse ac varius quam. Etiam laoreet nunc orci, vestibulum imperdiet enim elementum at. Duis dictum metus sapien, eu blandit quam malesuada et. Ut viverra maximus eros. + \end{cvProfile} + + \begin{cvContact} + \cvContactAddress{Some Street 78\\B-9000 Ghent} + \cvContactEmail{mailto:john@doe.tld}{john@doe.tld} + \cvContactPhone{+1 781 555 1212} + \cvContactWebsite{https://doe.tld}{doe.tld} + \cvContactLinkedin{https://www.linkedin.com/in/johndoe/}{johndoe} + \cvContactTwitter{https://twitter.com/johndoe}{@johndoe} + \cvContactKeybase{https://keybase.io/johndoe}{\texttt{AAAA 5555 BBBB FFFF}} + \end{cvContact} + + \begin{cvLanguages} + \cvLanguage{English (native)}{5} + \cvLanguage{German (B2)}{3} + \cvLanguage{Spanish}{3} + \end{cvLanguages} + + \begin{cvInterests}[short] + \cvInterestsPersonal + \cvInterest{\faTrain}{model trains} + \cvInterest{\faGamepad}{gaming} + \cvInterest{\faSuitcase}{travelling} + \cvInterestsProfessional + \cvInterest{\faFilm}{film} + \cvInterest{\faCamera}{photography} + \end{cvInterests} + + \begin{cvProjects} + \cvProject[image=limecv-icon,width=1cm,link=https://github.com/opieters/limecv]{\texttt{limecv}}{A \LaTeX\ CV document class.} + \end{cvProjects} + + \end{cvSideBar} + + \begin{cvMainContent} + + \begin{cvEducation} + \cvItem{Evening class: Chinese\\ + Some School, City. September 2015 -- June 2016\\ + Achieved A2 language skill in Chinese (Mandarin).} + \cvItem{Bachelor of Science in Biochemistry and Biotechnology\\ + University, City. September 2009 -- June 2012\\ + General training in the basic sciences and the molecular life science.} + \cvItem{Master of Science in Biochemistry and Biotechnology\\ + University, City. September 2012 -- June 2015\\ + Acquisition of insight into and knowledge of possibilities for application in the area of biochemistry and biotechnology, specific with applications in biomedical application and due problem-solving reasoning skills.} + \end{cvEducation} + + \begin{cvExperience} + \cvItem{Student Job\\ + \textsc{\selectfont Company X}, Location X. Summer 2010\\ + Integer tincidunt dapibus consectetur. Nullam tristique aliquam luctus. Sed ut ante velit. Nulla pharetra maximus lacus at elementum. Suspendisse sodales consectetur metus, sit amet ultricies ipsum ultrices ut.}; + \cvItem{Internship\\ + \textsc{Company Y}, Location Y. June 2012 -- August 2012\\ + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi dictum cursus sapien, id eleifend mi pellentesque id. Etiam lobortis eu odio a sodales. Phasellus ut dolor feugiat, lacinia lectus in, blandit metus. Fusce lacinia dolor et metus gravida pulvinar sit amet et ex.}; + \cvItem{Internship\\ + \textsc{Company Z}, Location Z. August 2014 -- September 2014\\ + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi dictum cursus sapien, id eleifend mi pellentesque id. Etiam lobortis eu odio a sodales. Phasellus ut dolor feugiat, lacinia lectus in, blandit metus. Fusce lacinia dolor et metus gravida pulvinar sit amet et ex. Suspendisse vestibulum, leo malesuada molestie maximus, sem risus ornare elit, vitae sodales felis elit in ipsum.}; + \end{cvExperience} + + \begin{cvSkills} + \cvSkillTwo{5}{MATLAB}{5}{\LaTeX} + \cvSkillTwo{4}{Python}{4}{VHDL} + \cvSkillTwo{4}{Microsoft Office}{4}{macOS} + \cvSkillTwo{3}{C, C++}{1}{Javascript} + \cvSkillTwo{3}{HTML5/CSS}{3}{Bash} + \end{cvSkills} + + \begin{cvReferences} + \cvAddReference{% + name=Jane Smith, + company=Company ABC Co.\ Ltd., + position=Job title, + address line 1=Street lane 2, + address line 2=B-1150 Brussels, + mobile phone=+1 781 555 1212}% <<-- important! + \end{cvReferences} + + \end{cvMainContent} + + \clearpage + + \begin{cvCoverLetter} + + \cvBeneficiary{% + name=Jane Smith, + position=Position, + company=Company, + address line 1=Address line 1, + address line 2=Address line 2} + + Dear Miss.\ Smith + + \vspace{\baselineskip} + + \lipsum[1-3] + + \vspace{\cvMargin} + + \cvFullName + + \end{cvCoverLetter} + + \end{document}
\ No newline at end of file diff --git a/Master/texmf-dist/doc/latex/limecv/examples/mwe-xelatex.pdf b/Master/texmf-dist/doc/latex/limecv/examples/mwe-xelatex.pdf Binary files differnew file mode 100644 index 00000000000..c7d990b2fac --- /dev/null +++ b/Master/texmf-dist/doc/latex/limecv/examples/mwe-xelatex.pdf diff --git a/Master/texmf-dist/doc/latex/limecv/examples/mwe-xelatex.tex b/Master/texmf-dist/doc/latex/limecv/examples/mwe-xelatex.tex new file mode 100644 index 00000000000..8f6e288f42c --- /dev/null +++ b/Master/texmf-dist/doc/latex/limecv/examples/mwe-xelatex.tex @@ -0,0 +1,147 @@ +% !TEX TS-program = xelatex +% !TEX encoding = UTF-8 Unicode + +% mwe-xelatex.cls +% +% Copyright 2017 Olivier Pieters +% +% This is a MWE of the `limecv' class that showcases its features +% and sane packages to load. This MWE assumes that the XeLaTeX +% compiler is used. It might be necessary to manually specify the +% font path for FontAwesome if recent symbols are used. +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Olivier Pieters. +% Contact the maintainer at: me (at) olivierpieters (dot) be. + + +\documentclass[a4paper]{limecv} + +% Defaults used in template design. +\usepackage[margin=\cvMargin,noheadfoot]{geometry} + +% For cover letter. +\usepackage{lipsum} + +\begin{document} + + +% Design of side bar. +\begin{cvSideBar} + \cvID{John}{Doe}{picture}{position} + + \begin{cvProfile} + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus ullamcorper euismod lorem nec eleifend. Suspendisse ac varius quam. Etiam laoreet nunc orci, vestibulum imperdiet enim elementum at. Duis dictum metus sapien, eu blandit quam malesuada et. Ut viverra maximus eros. + \end{cvProfile} + + \begin{cvContact} + \cvContactAddress{Some Street 78\\B-9000 Ghent} + \cvContactEmail{mailto:john@doe.tld}{john@doe.tld} + \cvContactPhone{+1 781 555 1212} + \cvContactWebsite{https://doe.tld}{doe.tld} + \cvContactLinkedin{https://www.linkedin.com/in/johndoe/}{johndoe} + \cvContactTwitter{https://twitter.com/johndoe}{@johndoe} + \cvContactKeybase{https://keybase.io/johndoe}{\texttt{AAAA 5555 BBBB FFFF}} + \end{cvContact} + + \begin{cvLanguages} + \cvLanguage{English (native)}{5} + \cvLanguage{German (B2)}{3} + \cvLanguage{Spanish}{3} + \end{cvLanguages} + + \begin{cvInterests}[short] + \cvInterestsPersonal + \cvInterest{\faTrain}{model trains} + \cvInterest{\faGamepad}{gaming} + \cvInterest{\faSuitcase}{travelling} + \cvInterestsProfessional + \cvInterest{\faFilm}{film} + \cvInterest{\faCamera}{photography} + \end{cvInterests} + + \begin{cvProjects} + \cvProject[image=limecv-icon,width=1cm,link=https://github.com/opieters/limecv]{\texttt{limecv}}{A \LaTeX\ CV document class.} + \end{cvProjects} + +\end{cvSideBar} + +\begin{cvMainContent} + + \begin{cvEducation} + \cvItem{Evening class: Chinese\\ + Some School, City. September 2015 -- June 2016\\ + Achieved A2 language skill in Chinese (Mandarin).} + \cvItem{Bachelor of Science in Biochemistry and Biotechnology\\ + University, City. September 2009 -- June 2012\\ + General training in the basic sciences and the molecular life science.} + \cvItem{Master of Science in Biochemistry and Biotechnology\\ + University, City. September 2012 -- June 2015\\ + Acquisition of insight into and knowledge of possibilities for application in the area of biochemistry and biotechnology, specific with applications in biomedical application and due problem-solving reasoning skills.} + \end{cvEducation} + + \begin{cvExperience} + \cvItem{Student Job\\ + \textsc{\selectfont Company X}, Location X. Summer 2010\\ + Integer tincidunt dapibus consectetur. Nullam tristique aliquam luctus. Sed ut ante velit. Nulla pharetra maximus lacus at elementum. Suspendisse sodales consectetur metus, sit amet ultricies ipsum ultrices ut.}; + \cvItem{Internship\\ + \textsc{Company Y}, Location Y. June 2012 -- August 2012\\ + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi dictum cursus sapien, id eleifend mi pellentesque id. Etiam lobortis eu odio a sodales. Phasellus ut dolor feugiat, lacinia lectus in, blandit metus. Fusce lacinia dolor et metus gravida pulvinar sit amet et ex.}; + \cvItem{Internship\\ + \textsc{Company Z}, Location Z. August 2014 -- September 2014\\ + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi dictum cursus sapien, id eleifend mi pellentesque id. Etiam lobortis eu odio a sodales. Phasellus ut dolor feugiat, lacinia lectus in, blandit metus. Fusce lacinia dolor et metus gravida pulvinar sit amet et ex. Suspendisse vestibulum, leo malesuada molestie maximus, sem risus ornare elit, vitae sodales felis elit in ipsum.}; + \end{cvExperience} + + \begin{cvSkills} + \cvSkillTwo{5}{MATLAB}{5}{\LaTeX} + \cvSkillTwo{4}{Python}{4}{VHDL} + \cvSkillTwo{4}{Microsoft Office}{4}{macOS} + \cvSkillTwo{3}{C, C++}{1}{Javascript} + \cvSkillTwo{3}{HTML5/CSS}{3}{Bash} + \end{cvSkills} + + \begin{cvReferences} + \cvAddReference{% + name=Jane Smith, + company=Company ABC Co.\ Ltd., + position=Job title, + address line 1=Street lane 2, + address line 2=B-1150 Brussels, + mobile phone=+1 781 555 1212}% <<-- important! + \end{cvReferences} + +\end{cvMainContent} + +\clearpage + +\begin{cvCoverLetter} + +\cvBeneficiary{% + name=Jane Smith, + position=Position, + company=Company, + address line 1=Address line 1, + address line 2=Address line 2} + +Dear Miss.\ Smith + +\vspace{\baselineskip} + +\lipsum[1-3] + +\vspace{\cvMargin} + +\cvFullName + +\end{cvCoverLetter} + +\end{document}
\ No newline at end of file diff --git a/Master/texmf-dist/doc/latex/limecv/examples/picture.png b/Master/texmf-dist/doc/latex/limecv/examples/picture.png Binary files differnew file mode 100644 index 00000000000..a99b44c7572 --- /dev/null +++ b/Master/texmf-dist/doc/latex/limecv/examples/picture.png diff --git a/Master/texmf-dist/doc/latex/limecv/limecv.pdf b/Master/texmf-dist/doc/latex/limecv/limecv.pdf Binary files differnew file mode 100644 index 00000000000..325eecc76f4 --- /dev/null +++ b/Master/texmf-dist/doc/latex/limecv/limecv.pdf diff --git a/Master/texmf-dist/source/latex/limecv/limecv.dtx b/Master/texmf-dist/source/latex/limecv/limecv.dtx new file mode 100644 index 00000000000..70170b50dcf --- /dev/null +++ b/Master/texmf-dist/source/latex/limecv/limecv.dtx @@ -0,0 +1,2351 @@ +% \iffalse meta-comment +% +% Copyright (C) 2017 by Olivier Pieters - me (at) olivierpieters (dot) be +% -------------------------------------------------------------------------- +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Olivier Pieters. +% +% This work consists of the files limecv.dtx and limecv.ins +% and the derived filebase limecv.sty. +% +% \fi +% +% \iffalse +%<*driver> +\ProvidesFile{limecv.dtx} +%</driver> +%<class>\NeedsTeXFormat{LaTeX2e}[1999/12/01] +%<class>\ProvidesClass{limecv} +%<*class> + [2017/09/12 v0.1.1 limecv Document class for CVs.] +%</class> +% +%<*driver> +\documentclass{ltxdoc} +\usepackage{listings} +\usepackage{tikz} +\usepackage{hyperref} +\usepackage{cleveref} +\usepackage{xparse} + +\NewDocumentCommand{\cvRequirement}{m}{\textbf{#1}} + +\definecolor{cvGreen}{HTML}{357F2D} +\definecolor{cvGreenLight}{HTML}{b8e4b3} +\definecolor{cvRed}{HTML}{7f2d35} +\definecolor{cvDark}{HTML}{2F3142} +\definecolor{cvAccent}{HTML}{474A65} + +\lstset{% + basicstyle=\ttfamily, % font style and size + breakatwhitespace=false, + breaklines=true, + numbers=left, + numberstyle=\tiny, + numbersep=5pt, + language=[LaTeX]{TeX}, + keywordstyle=\color{blue}, + commentstyle=\color{red} +} + +\EnableCrossrefs +\CodelineIndex +\RecordChanges +\begin{document} + \DocInput{limecv.dtx} + \PrintChanges + \PrintIndex +\end{document} +%</driver> +% \fi +% +% \CheckSum{1469} +% +% \CharacterTable +% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +% Digits \0\1\2\3\4\5\6\7\8\9 +% Exclamation \! Double quote \" Hash (number) \# +% Dollar \$ Percent \% Ampersand \& +% Acute accent \' Left paren \( Right paren \) +% Asterisk \* Plus \+ Comma \, +% Minus \- Point \. Solidus \/ +% Colon \: Semicolon \; Less than \< +% Equals \= Greater than \> Question mark \? +% Commercial at \@ Left bracket \[ Backslash \\ +% Right bracket \] Circumflex \^ Underscore \_ +% Grave accent \` Left brace \{ Vertical bar \| +% Right brace \} Tilde \~} +% +% +% \changes{v0.1}{2017/09/12}{Initial version.} +% \changes{v0.1.1}{2017/09/13}{Bug fixes and improved documentation.} +% +% \DoNotIndex{\NewDocumentCommand,\NewDocumentEnvironment} +% +% \providecommand*{\url}{\texttt} +% +% \def\fileversion{v0.1.1} +% \def\filedate{2017/09/12} +% +% \GetFileInfo{limecv.dtx} +% \title{The \textsf{limecv} document class\thanks{This document corresponds % +% to \textsf{limecv}~\fileversion, dated \filedate.}} +% \author{Olivier Pieters \\ \url{me (at) olivierpieters (dot) be}} +% \date{\fileversion~from \filedate} +% +% \maketitle +% +% \tableofcontents +% +% \section{Introduction} +% +% This document class is designed to facilitate easy development of +% curriculum vit\ae\ (CV). A set of predefined macros and environments are +% available for most common sections on a CV. These special elements have +% been designed to ease quick +% creation. This document class was co-designed with a business card, which +% can be found on GitHub: \url{https://github.com/opieters/business-card}. +% +% The design of this CV is split up in three parts, illustrated by +% \cref{design}. Each of these parts that make up this CV template +% will be detailed in the sections below. +% +% \begin{figure}[!ht] +% \centering +% \begin{tikzpicture} +% \draw (0,0) rectangle ++(4.20,5.94); +% \draw[fill=black!20] (0,0) rectangle ++(1.5,5.94); +% \draw (0.75,2.97) node {\LARGE 1}; +% \draw (2.85,2.97) node {\LARGE 2}; +% \end{tikzpicture}% +% \hspace{2cm}% +% \begin{tikzpicture} +% \draw (0,0) rectangle ++(-4.20,-5.94); +% \draw[fill=black!20] (0,0) rectangle ++(-4.2,-1.5); +% \end{tikzpicture} +% \caption{Illustation of a basic template. The image to the left depicts the +% actual CV: side bar to the left (1) with main content on the right (2). +% The image to the right depicts the cover letter design.} +% \label{design} +% \end{figure} +% +% \section{Requirements} +% +% It is advised to use the \cvRequirement{XeLaTeX} engine. However, there is +% also support for \cvRequirement{LaTeX} and \cvRequirement{LuaLaTeX}. In these +% cases, fonts might be different than intended and side bearings will not be +% corrected, since only the XeLaTeX engine has access to these. In the subsequent +% sections, it will always be assumed that the XeLaTeX compiler is used (unless +% noted otherwise). +% +% Any font can be used, though by default the \cvRequirement{Fira} +% \footnote{\url{https://github.com/mozilla/Fira}} font is used. This should be +% installed and accessible by the typesetting system. If another font is desired, +% it can be overwritten using the |sansfont| document class options and +% |\cvMainFont| command. The mono spaced font can be changed by means of the +% |monofont| class option. +% +% \cvRequirement{FontAwesome}\footnote{\url{http://fontawesome.io}} is the icon +% font used. This font should also be available and cannot be replaced by another +% icon font. Most modern TeX distributions ship with this font since they provide +% the |fontawesome| package. +% +% \section{General Macros and Document Class Options} +% +% \section{Side Bar} +% +% The side bar should contain personal information such as your name, job title +% (or industry or similar), contact information, small bio, interests and language +% skills. Special environments and commands have been defined for each of these +% sections and will be described below. +% +% Everything that should be inside the side bar should be placed in the |cvSideBar| +% environment. This environment is placed on the left side of the page by default. +% If it should be typeset on the right side, use the starred version (|cvSideBar*|) +% +% The following environments are available inside the side bar environment: +% |cvProfile|, |cvContact|, |cvLanguages|, |cvInterests| and |cvProjects|. +% +% \DescribeMacro{\cvID} +% This command typesets a picture (in a circle) with name and position underneath it. +% The argument order is: |\cvID{|\meta{first name}|}{|\meta{last name}|}{| +% \meta{picture location}|}{|\meta{job position}|}|. Empty fields are allowed for +% the third and fourth arguments. No picture and no job position will then be +% typeset. Example code: +% \iffalse +%<*example> +% \fi + \begin{lstlisting} +\cvID{John}{Doe}{profile_picture}{Broker} + \end{lstlisting} +% \iffalse +%</example> +% \fi +% +% \DescribeMacro{cvProfile} +% This environment contains a brief profile description or biography. No additional +% arguments are allowed. Example code: +% \iffalse +%<*example> +% \fi + \begin{lstlisting} +\begin{cvProfile} + A short biography goes here. +\end{cvProfile} + \end{lstlisting} +% \iffalse +%</example> +% \fi +% +% \DescribeMacro{cvContact} +% All the contact information goes here. Inside this environment, the following +% commands are available: +% \begin{itemize} +% \item \DescribeMacro{\cvContactAddress} |\cvContactAddress{|\meta{address}|}| +% typesets an address. How this address should be typeset exactly, is left to the +% user. The use of line breaks (|\\|) is allowed; +% \item \DescribeMacro{\cvContactEmail} +% |\cvContactEmail{|\meta{link}|}{|\meta{email address}|}| typesets an email +% address. The link variable should be a something like |mailto:john@doe.tld|. +% Clicking on the email address will then automatically open the default email +% client with this address as recipient. If the link argument is left empty, no +% link will be created. +% \item \DescribeMacro{\cvContactPhone} +% |\cvContactPhone{|\meta{mobile phone number}|}| typesets a mobile phone number. +% \item \DescribeMacro{\cvContactWebsite} +% |\cvContactWebsite{|\meta{link}|}{|\meta{website URL}|}| typesets a website. The +% link variable should be a something like |https://johndoe.tld|. Clicking on the +% website will then automatically open the default web browser. If the link argument +% is left empty, no action will be performed upon clicking on the website. +% \item \DescribeMacro{\cvContactGithub} +% |\cvContactGithub{|\meta{link}|}{|\meta{username}|}| typesets a GitHub profile. +% The link variable should be a valid link to the GitHub profile (for example +% |https://github.com/johndoe|). Clicking on the username will then automatically +% open the default web browser. If the link argument is left empty, no action will +% be performed upon clicking on the website. +% \item \DescribeMacro{\cvContactLinkedin} +% |\cvContactLinkedin{|\meta{link}|}{|\meta{username}|}| typesets a LinkedIn profile. +% The link variable should be a link to your LinkedIn profile homepage (for example +% |https://www.linkedin.com/in/johndoe/|). Clicking on the username will then +% automatically open the default web browser. If the link argument is left empty, +% no action will be performed upon clicking on the website. +% \item \DescribeMacro{\cvContactTwitter} +% |\cvContactTwitter{|\meta{link}|}{|\meta{username}|}| typesets a Twitter profile. +% The link variable should direct to your Twitter profile. An example link looks as +% follows: |https://twitter.com/johndoe|. Clicking on the username will then +% automatically open the default web browser. If the link argument is left empty, +% no action will be performed upon clicking on the website.this address as recipient. +% If the link argument is left empty, no link will be created. +% \item \DescribeMacro{\cvContactKeybase} +% |\cvContactKeybase{|\meta{link}|}{|\meta{fingerprint}|}| typesets a Keybase +% fingerprint (and account). The link variable should be a link to the KeyBase +% profile (e.g.\ |https://keybase.io/johndoe|). Clicking on the fingerprint will then +% automatically open the default web browser. If the link argument is left empty, no +% action will be performed upon clicking on the website. +% \end{itemize} +% +% A full example: +% \iffalse +%<*example> +% \fi + \begin{lstlisting} +\begin{cvContact} + \cvContactAddress{Some Street 78\\B-9000 Ghent\\Belgium} + \cvContactEmail{mailto:john@doe.tld}{john@doe.tld} + \cvContactPhone{+1 781 555 1212} + \cvContactWebsite{https://doe.tld}{doe.tld} + \cvContactGithub{https://github.com/johndoe}{johndoe} + \cvContactLinkedin{https://www.linkedin.com/in/johndoe/}{johndoe} + \cvContactTwitter{https://twitter.com/johndoe}{@johndoe} + \cvContactKeybase{https://keybase.io/johndoe}{\texttt{AAAA 5555 BBBB FFFF}} +\end{cvContact} + \end{lstlisting} +% \iffalse +%</example> +% \fi +% +% If you wish to add contact information that is not available by default, you can extend +% the command using two internal commands: |\cv@ContactTemplateLink| and +% |\cv@ContactTemplate|. See the source code for usage instructions. +% +% \DescribeMacro{cvLanguages} +% This environment is used to showcase language skills. The +% \DescribeMacro{\cvLanguage} |\cvLanguage{|\meta{language}|}{|\meta{skill level}|}| +% should be used inside this environment. The skill level is a real value with a maximum +% value of 5. If higher values are used, the result will not be typeset properly. An +% example is included below. +% +% \iffalse +%<*example> +% \fi + \begin{lstlisting} +\begin{cvLanguages} + \cvLanguage{English (native)}{5} + \cvLanguage{German (B1)}{3} + \cvLanguage{Spanish}{3} +\end{cvLanguages} + \end{lstlisting} +% \iffalse +%</example> +% \fi +% +% \DescribeMacro{cvInterests} +% Typeset interests (can be both professional and personal) using |cvInterests|. +% By default it just typesets a list of items in the long format +% (|long|). The short format can be activated by passing the |short| option to the +% environment. Inside this environment, three commands can be used: |\cvInterestsPersonal|, +% |\cvInterestsProfessional| and |\cvInterest|. \DescribeMacro{\cvInterestsPersonal} +% |\cvInterestsPersonal| and \DescribeMacro{\cvInterestsProfessional} +% |\cvInterestsProfessional| add optional sections inside this environment to differentiate +% between personal and professional interests respectively. Both macros have no options nor +% arguments. The \DescribeMacro{\cvInterest} |\cvInterest{|\meta{icon}|}{|\meta{interest}|}| +% command takes an icon and interest as arguments. +% +% Examples that illustrate the different options are depicted below: +% +% \iffalse +%<*example> +% \fi + \begin{lstlisting} +\begin{cvInterests} + \cvInterestsPersonal + \cvInterest{\faTrain}{model trains} + \cvInterest{\faFlask}{(applied) sciences} + \cvInterest{\faSuitcase}{travelling} + \cvInterestsProfessional + \cvInterest{\faGraduationCap}{machine learning} + \cvInterest{\faCogs}{robotics} +\end{cvInterests} + \end{lstlisting} +% \iffalse +%</example> +% \fi +% +% \iffalse +%<*example> +% \fi + \begin{lstlisting} +\begin{cvInterests}[short] + \cvInterestsPersonal + \cvInterest{\faTrain}{model trains} + \cvInterest{\faFlask}{(applied) sciences} + \cvInterest{\faSuitcase}{travelling} + \cvInterest{\faCamera}{photography} + \cvInterest{\faGamepad}{gaming} + \cvInterest{\faMusic}{music} +\end{cvInterests} + \end{lstlisting} +% \iffalse +%</example> +% \fi +% +% \DescribeMacro{cvProjects} If you have interesting (side) projects that are relevant for +% your CV, you can list them using the |cvProjects| environment. Inside this environment +% you can use the \DescribeMacro{\cvProject} +% |\cvProject[|\meta{options}|]{|\meta{name}|}{|\meta{description}|}| macro to list all +% your projects. The only options currently allowed in \meta{options} are an image +% (using |image|) and a URL (using |link|). This image must be an external file and the user +% must handle its size through |width| or |height|. Example usage: +% +% \iffalse +%<*example> +% \fi + \begin{lstlisting} +\begin{cvProjects} + \cvProject[image=clock,width=1cm]{yanic}{An IoT nixie clock.} + \cvProject{\texttt{limecv}}{A \LaTeX\ document class for curriculum vit\ae.} +\end{cvProjects} + \end{lstlisting} +% \iffalse +%</example> +% \fi +% +% It is currently not possible to extend the side bar with additional environments. To add +% your own, look at the source code and create your own \LaTeX-style hack. +% +% \section{Main Content} +% +% The main content section includes details on your education, experience, skills, references +% and more. Several environments have been designed to suit specific needs. These will be +% discussed next. +% +% \DescribeMacro{cvMainContent} +% Everything in the main content section should be encapsulated in the |cvMainContent| +% environment. This environment defines four new environments: |cvEducation|, +% |cvExperience|, |cvSkills| and |cvReferences|. These four environments are self +% explanatory in terms of functionality. We will detail each of these +% environments. +% +% Note that |cvMainContent| also has a starred variant (|cvMainContent*|). The +% function is similar to |cvSideBar*|, in the sense that it places everything to the +% left instead of the default right location. +% +% \DescribeMacro{cvEducation} +% The education environment creates a timeline styled list of your education. Individual +% education items should be listed by means of the |\cvItem{|\meta{details}|}| macro which +% is available within this environment. Instead of forcing a specific layout structure, it +% was preferred to leave the actual mark-up to the end user. \emph{All} information +% concerning a single education should be passed to this single argument. However, the user +% is always welcome to create his own styling macro that takes multiple arguments. This is +% illustrated by the examples below. +% +% \iffalse +%<*example> +% \fi + \begin{lstlisting}[caption={\lstinline!cvEducation! \emph{without} special user mark-up + command.}] +\begin{cvEducation} + \cvItem{Evening class: Chinese\\ + Some School, City. September 2015 -- June 2016\\ + Achieved A2 language skill in Chinese (Mandarin).} + \cvItem{Bachelor of Science in Biochemistry and Biotechnology\\ + University, City. September 2009 -- June 2012\\ + General training in the basic sciences and the molecular life science.} + \cvItem{Master of Science in Biochemistry and Biotechnology\\ + University, City. September 2012 -- June 2015\\ + Acquisition of insight into and knowledge of possibilities for application in the area + of biochemistry and biotechnology, specific with applications in biomedical application + and due problem-solving reasoning skills.} +\end{cvEducation} + \end{lstlisting} +% \iffalse +%</example> +% \fi +% +% \iffalse +%<*example> +% \fi + \begin{lstlisting}[caption={\lstinline!cvEducation! \emph{with} special user mark-up + command.}] +% in preamble: +\newfontfamily\firaMedium{Fira Sans Medium} +\NewDocumentCommand{\cvEducation}{mmm}{{\firaMedium #1}\\ #2\\ \emph{#3}} +% in document: +\begin{cvEducation} + \cvItem{\cvEducation{Evening class: Chinese}% + {Some School, City. September 2015 -- June 2016}% + {Achieved A2 language skill in Chinese (Mandarin).}} + \cvItem{\cvEducation{Bachelor of Science in Biochemistry and Biotechnology}% + {University, City. September 2009 -- June 2012}% + {General training in the basic sciences and the molecular life science.}} + \cvItem{\cvEducation{Master of Science in Biochemistry and Biotechnology}% + {University, City. September 2012 -- June 2015}% + {Acquisition of insight into and knowledge of possibilities for application + in the area of biochemistry and biotechnology, specific with applications + in biomedical application and due problem-solving reasoning skills.}} +\end{cvEducation} + \end{lstlisting} +% \iffalse +%</example> +% \fi +% +% \DescribeMacro{cvExperience} +% |cvExperience| works very similar to |cvEducation|. If follows the exact same structure +% and has the same design philosophy where you should use |\cvItem| inside this environment +% to typeset the individual items in a timeline style. \Cref{cvExperience} illustrates this with an example. +% +% \iffalse +%<*example> +% \fi + \begin{lstlisting}[caption={\lstinline!cvExperience! code example.},label=cvExperience] +\begin{cvExperience} + \cvItem{Student Job\\ + \textsc{\selectfont Company X}, Location X. Summer 2010\\ + Integer tincidunt dapibus consectetur. Nullam tristique aliquam luctus. Sed ut ante velit. + Nulla pharetra maximus lacus at elementum. Suspendisse sodales consectetur metus, sit amet + ultricies ipsum ultrices ut.}; + \cvItem{Internship\\ + \textsc{Company Y}, Location Y. June 2012 -- August 2012\\ + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi dictum cursus sapien, id + eleifend mi pellentesque id. Etiam lobortis eu odio a sodales. Phasellus ut dolor feugiat, + lacinia lectus in, blandit metus. Fusce lacinia dolor et metus gravida pulvinar sit amet + et ex.}; + \cvItem{Internship\\ + \textsc{Company Z}, Location Z. August 2014 -- September 2014\\ + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi dictum cursus sapien, id + eleifend mi pellentesque id. Etiam lobortis eu odio a sodales. Phasellus ut dolor feugiat, + lacinia lectus in, blandit metus. Fusce lacinia dolor et metus gravida pulvinar sit amet + et ex. Suspendisse vestibulum, leo malesuada molestie maximus, sem risus ornare elit, vitae + sodales felis elit in ipsum.}; +\end{cvExperience} + \end{lstlisting} +% \iffalse +%</example> +% \fi +% +% \DescribeMacro{cvSkills} +% The skills section is contained within the |cvSkills| environment. This environment typesets +% your skills on a 5-level (discrete) scale. These are divided into two columns. To that end, +% two macros are available: |cvSkillOne| and |cvSkillTwo|. \DescribeMacro{cvSkillTwo} +% |cvSkillTwo{|\meta{skill level}|}{|\meta{skill}|}{|\meta{skill level}|}{|\meta{skill}|}| +% typesets a row of two skills. If you have an odd number of items, \DescribeMacro{cvSkillOne} +% |cvSkillOne{|\meta{skill level}|}{|\meta{skill}|}| should be used. An example of a skill-list +% can be found in \cref{cvSkills}. +% +% \iffalse +%<*example> +% \fi + \begin{lstlisting}[caption={Illustration of the \lstinline!cvSkills! environment.},label=cvSkills] +\begin{cvSkills} + \cvSkillTwo{5}{MATLAB}{5}{\LaTeX} + \cvSkillTwo{4}{Python}{4}{VHDL} + \cvSkillTwo{4}{Microsoft Office}{4}{macOS} + \cvSkillOne{3}{C, C++} +\end{cvSkills} + \end{lstlisting} +% \iffalse +%</example> +% \fi +% +% \DescribeMacro{cvReferences} +% The final section is intended to list all your references. These go inside the |cvReferences| +% environment. The enumeration of the different items should be done using the +% \DescribeMacro{\cvAddReference} |\cvAddReference{|\meta{information}|}| macro. The following +% keys are available: |name|, |company|, |job|, |address line 1|, |address line 2|, +% |address line 3|, |mobile phone|, |work phone| and |email|. These are all optional arguments +% and will be typeset consistently between the two references per row. When adding two references, +% the left one should be specified first using |\cvAddReference*|. This will store the values and +% typeset them when adding the second reference through |\cvAddReference|. Note that +% |\cvAddReference| should be used if only one reference needs to be typese. \Cref{cvReferences} +% illustrates the usage of this environment. +% +% \emph{Important remark}: the comment after the usage of |\cvAddReference| is required! +% Otherwise, spacing will not be as intended. +% +% \iffalse +%<*example> +% \fi + \begin{lstlisting}[caption={\lstinline!cvReferences! code example.},label=cvReferences] +\begin{cvReferences} + \cvAddReference{% + name=Jane Smith, + company=Company ABC Co.\ Ltd., + job=Job title, + address line 1=Street lane 2, + address line 2=B-1150 Brussels, + mobile phone=+1 781 555 1212}% <<-- Important!!! +\end{cvReferences} + \end{lstlisting} +% \iffalse +%</example> +% \fi +% +% \section{Cover Letter} +% +% A final (optional) part of a CV is the cover letter. This is a fairly simple part to create +% design wise, but probably the hardest to write in an actual CV. +% +% \DescribeMacro{cvCoverLetter} +% The cover letter environment is |cvCoverLetter| and contains all the cover letter details. +% It will automatically add a header with your name and position based on the information +% filled in in |\cvID|. +% +% \DescribeMacro{\cvBeneficiary} +% The |\cvBeneficiary{|\meta{options}|}| macro offers a convenience wrapper to typeset the +% beneficiary. Possible options are |name|, |position|, |company|, |address line 1|, +% |address line 2| and |address line 3|. The remainder of the cover letter design is up +% to the user. An example design can be found in \cref{cvCoverLetter}. +% +% \DescribeMacro{\cvFullName} +% |\cvFullName| typeset the authors name based on the data provided in |cvID|. +% +% \iffalse +%<*example> +% \fi + \begin{lstlisting}[caption={\lstinline!cvCoverLetter! code example.},label=cvCoverLetter] +\section{Cover Letter} + +\begin{cvCoverLetter} + +\cvBeneficiary{% + name=Jane Smith, + position=Position, + company=Company, + address line 1=Address line 1, + address line 2=Address line 2} + +Dear Miss.\ Smith + +\vspace{\baselineskip} +\lipsum[1-3] +\vspace{\margin} + +\cvFullName + +\end{cvCoverLetter} + \end{lstlisting} +% \iffalse +%</example> +% \fi +% +% \section{Change Style and Layout} +% +% To change the style, one can redefine the colours, lengths and TikZ styles used throughout +% the document class. +% +% By default the following colours are defined: +% \begin{itemize} +% \item |cvGreen| default dark green colour (hex value: {\color{cvGreen} |357F2D|}) +% \item |cvGreenLight| light green colour, for larger shapes and backgrounds (hex value: +% {\color{cvGreenLight} |B8E4B3|}) +% \item |cvDark| default text colour (hex value: {\color{cvDark} |2F3142|}) +% \item |cvRed| currently not used (hex value: {\color{cvRed} |7F2D35|}) +% \item |cvAccent| lighter grey shade for accented text (hex value: {\color{cvAccent} +% |474A65|}) +% \end{itemize} +% +% To change these, use the code from \cref{cvColour} in the preamble: +% +% \iffalse +%<*example> +% \fi + \begin{lstlisting}[caption={Colour editing.},label=cvColour] +\definecolor{cvDark}{HTML}{000000} + \end{lstlisting} +% \iffalse +%</example> +% \fi +% +% By overwriting the following styles, one can change the appearance of multiple TikZ nodes. +% The following styles are available. +% \begin{itemize} +% \item |interesticon| +% \item |interesttext| +% \item |eventdottext| +% \item |invisibletimedot| +% \item |timedot| +% \item |eventdot| +% \item |contactIcon| +% \item |contactText| +% \item |headerIcon| +% \item |skillLevel| +% \item |languageText| +% \item |skillText| +% \item |progressArea| +% \item |progressBar| +% \item |sectionTitle| +% \item |sectionEduText| +% \end{itemize} +% +% Adding your own styles is easy with the code from \cref{cvTikZStyle}. +% +% \iffalse +%<*example> +% \fi + \begin{lstlisting}[caption={Change TikZ style.},label=cvTikZStyle] +\tikzset{ + interesticon/.style = {}, +} + \end{lstlisting} +% \iffalse +%</example> +% \fi + +% Spacing used inside the document can also be modified by the user. The following +% lengths have been defined: +% \begin{itemize} +% \item |\cvColSep| Distance between columns of |cvSkills|. +% Default value: |1cm|. +% \item |\cvNodeSep| Not used currently. +% Default value: |0.75cm|. +% \item |\cvTimeDotDiameter| Size of the dots in a timeline. +% Default value: |3pt|. +% \item |\cvMargin| Margin around the entire page. +% Default value: |1cm|. +% \item |\cvSideWidth| Width of the side bar. +% Default value: |0.3\paperwidth-\cvMargin|. +% \item |\cvMainWidth| Width of the main content section. +% Default value: |\paperwidth-4\cvMargin-\cvSideWidth|. +% \item |\cvTimeDotSep| Distance between timeline dot and text. +% Default value: |0.4cm|. +% \item |\cvStartEndSep| Not used. +% Default value: |0.3cm|. +% \item |\cvItemSep| Distance between |cvItem| entries. +% Default value: |0.4cm|. +% \item |\cvTableSepWidth| Distance between two columns of |cvReferences| environment. +% Default value: |0.3cm|. +% \item |\cvCoverLetterHeight| Height of the coloured bar at the top of the cover letter. +% Default value: |\cvSideWidth|. +% \item |\cvCoverLetterWidth| Width of the cover letter text. This can be used to improve +% to layout. Default value: |\cvMainWidth+3\cvMargin|. +% \item |\cvPictureWidth| Diameter of the profile picture. +% Default value: |4cm|. +% \item |\cvProgressAreaWidth| Length of a progress bar for the languages section. +% Default value: |5em|. +% \item |\cvProgressAreaHeight| Height of a progress bar for the languages section. +% Default value: |0.75em|. +% \item |\cvSectionSep| Distance between sections of the main content section. +% Default value: |0.6cm|. +% \item |\cvSectionSBSep| Distance between sections of the side bar section. +% Default value: |4pt|. +% \item |\cvTitleLineWidth| Line width of horizontal line below section title. +% Default value: |2pt|. +% \item |\cvTitleLineSpacing| Distance from bottom of the titles of the main content section to +% the horizontal centre of line. Default value: |0.1cm|. +% \item |\cv@projectSep| Internal length. +% Automatically set to |\cvItemSep|. +% \item |\cvProjectDetailsSep| Internal spacing between details of a single project. +% Default value: |0.2cm|. +% \item |\cvInterestDetailsSep| Distance between items in case the |long| options is used for the +% |cvInterests| environment. Default value: |4pt|. +% \item |\cvContactItemSep| Distance between items in the |cvContact| environment. +% Default value: |5pt|. +% \item |\cvCoverLetterLineWidth| Line width of line below cover letter name. +% Default value: |3pt|. +% \item |\cvCoverLetterPositionSpacing| Distance between name and position in the cover letter. +% Default value: |10pt|. +% \item |\cvSBSectionLineWidth| Line width of left and right lines next to the titles of in the +% side bar. Default value: |1pt|. +% \item |\cvCoverLetterLineSpacing| Distance between name and line below it in the cover letter. +% Default value: |0pt|. +% \item |\cvIDNameSep| Distance between first and last name. +% Default value: |0.1cm|. +% \item |\cvPositionSep| Distance before and after the position. +% Default value: |0.5cm|. +% \item |\cvSkillSep| Distance between skills. +% Default value: |1ex|. +% \item |\cvHeaderIconWidth| Automatically set, currently has no visible effect on document. +% Default value: |0pt|. +% \end{itemize} +% +% The fonts can also be changed, either by using the |sansfont| and |monofont| class options, or +% by using the default ways provided by \LaTeX, XeLaTeX and LuaLaTeX. Note that the |fontspec| +% package is already loaded by the class, so you can directly use |\setmainfont| in the preamble +% if you are using the XeLaTeX or LuaLaTeX engine. +% +% \section{Example} +% +% The source code of a typical CV document can be found in the examples folder. +% \Cref{example-cv,example-cover-letter} depict the resulting PDF documents. +% +% \begin{figure}[!ht] +% \IfFileExists{./mwe-xelatex.pdf}{\includegraphics[width=\textwidth,page=1]% +% {mwe-xelatex.pdf}}{No built examples found. Figure not included.} +% \caption{Example CV (scaled).} +% \label{example-cv} +% \end{figure} +% +% \begin{figure}[!ht] +% \IfFileExists{./mwe-xelatex.pdf}{\includegraphics[width=\textwidth,page=2]% +% {mwe-xelatex.pdf}}{No built examples found.} +% \caption{Example cover letter (scaled). Figure not included.} +% \label{example-cover-letter} +% \end{figure} +% +% \StopEventually{} +% +% \section{Implementation} +% +% \iffalse +%<*class> +% \fi +% +% limecv.cls +% +% Copyright 2017 Olivier Pieters +% +% A (Xe/Lua)LaTeX document class +% +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Olivier Pieters. +% Contact the maintainer at: me (at) olivierpieters (dot) be. +% +%------------------------------------------------------ +% +% Include minimal required packages +% +% process key-value class options +% \begin{macrocode} +\RequirePackage{kvoptions} +% \end{macrocode} +%------------------------------------------------------ +% +% Process options of this class. +% +% \begin{macrocode} +\DeclareBoolOption[false]{print} +\newif\ifcv@fontPath +\cv@fontPathfalse +\DeclareStringOption{path} +\AddToKeyvalOption*{path}{\cv@fontPathtrue} +\DeclareStringOption[Fira Sans]{sansfont} +\DeclareStringOption[Fira Mono]{monofont} +\ProcessKeyvalOptions* +% \end{macrocode} +%------------------------------------------------------ +% +% Process general class options +% +% pass document options to article class, which forms +% base of this document class +% \begin{macrocode} +\DeclareOption*{% + \PassOptionsToClass{\CurrentOption}{article}% +} +\ProcessOptions\relax +\LoadClass{article} +% \end{macrocode} +%------------------------------------------------------ +% +% Include required packages +% +% check if XeTeX is used +% \begin{macrocode} +\RequirePackage{ifxetex} +% \end{macrocode} +% check if LuaTeX is used +% \begin{macrocode} +\RequirePackage{ifluatex} +% \end{macrocode} +% Advanced command definitions +% \begin{macrocode} +\RequirePackage{xparse} +% \end{macrocode} +% complex length calculations +% \begin{macrocode} +\RequirePackage{calc} +% \end{macrocode} +% colour options +% \begin{macrocode} +\RequirePackage{xcolor} +% \end{macrocode} +% advanced table options +% \begin{macrocode} +\RequirePackage{tabularx} +% \end{macrocode} +% links +% \begin{macrocode} +\RequirePackage{hyperref} +\RequirePackage{url} +% \end{macrocode} +% remove paragraph indent +% \begin{macrocode} +\RequirePackage{parskip} +% \end{macrocode} +% string operations +% \begin{macrocode} +\RequirePackage{xstring} +% \end{macrocode} +% key-value parsing within document +% \begin{macrocode} +\RequirePackage{xkeyval} +% \end{macrocode} +%------------------------------------------------------ +% +% Define colours +% +% \begin{macrocode} +\definecolor{cvGreen}{HTML}{357F2D} +\definecolor{cvGreenLight}{HTML}{b8e4b3} +\definecolor{cvRed}{HTML}{7f2d35} +\definecolor{cvDark}{HTML}{2F3142} +\definecolor{cvAccent}{HTML}{474A65} +% \end{macrocode} +%------------------------------------------------------ +% +% Define new table column types with fixed width. +% +% \begin{macrocode} +\newcolumntype{L}[1]{>{\raggedright\let\newline\\% +\arraybackslash\hspace{0pt}}m{#1}} +\newcolumntype{C}[1]{>{\centering\let\newline\\% +\arraybackslash\hspace{0pt}}m{#1}} +\newcolumntype{R}[1]{>{\raggedleft\let\newline\\% +\arraybackslash\hspace{0pt}}m{#1}} +% \end{macrocode} +%------------------------------------------------------ +% +% Misc and helper commands +% +% Add comma in a cvReference entry. +% \begin{macrocode} +\NewDocumentCommand{\cvComma}{}{,} +% \end{macrocode} +% Define check if argument is empty +% argument order: |{argument}{if empty}{if not empty}| +% +% Based on: http://tex.stackexchange.com/questions/63223 +% +% \begin{macrocode} +\ExplSyntaxOn +\DeclareExpandableDocumentCommand{\@IfNoValueOrEmptyTF}% + {mmm}{\IfNoValueTF{#1}{#2}{ + \tl_if_empty:nTF {#1} {#2} {#3}% + } +} +\ExplSyntaxOff +% \end{macrocode} +% +% \begin{macro}{\ifnodedefined} +% Check if node is defined. +% Based on: https://tex.stackexchange.com/questions/37709 +% \begin{macrocode} +\long\def\ifnodedefined#1#2#3{% + \@ifundefined{pgf@sh@ns@#1}{#3}{#2}% +} +% \end{macrocode} +% \end{macro} +% +%------------------------------------------------------ +% +% Update global font colour +% +% \begin{macrocode} +\NewDocumentCommand{\globalcolor}{m}{% + \color{#1}\global\let\default@color\current@color +} +\AtBeginDocument{\globalcolor{cvDark}} +% \end{macrocode} +%------------------------------------------------------ +% +% TikZ +% +% \begin{macrocode} +\RequirePackage{tikz} +\RequirePackage{graphicx} +\usetikzlibrary{% + calc, + positioning, + fit, + arrows.meta, + backgrounds, + matrix} +\tikzset{ + interesticon/.style = {}, + interesttext/.style = {}, + eventdottext/.style = {}, + invisibletimedot/.style = {}, + timedot/.style = {}, + contactIcon/.style={}, + contactText/.style={}, + headerIcon/.style={}, + skillLevel/.style={}, + languageText/.style={}, + skillText/.style={}, + progressArea/.style={}, + progressBar/.style={}, + sectionTitle/.style={}, + sectionEduText/.style={% + eventdottext, + anchor=north west + }, + cv@interesticon/.style = {% + minimum width=\cvHeaderIconWidth, + interesticon + }, + cv@interesttext/.style = {% + interesttext, + }, + cv@eventdottext/.style = {% + text width=\cvMainWidth-\cvTimeDotSep, + black, + anchor=north west, + eventdottext, + }, + cv@invisibletimedot/.style = {% + circle, + minimum width=\cvTimeDotDiameter, + anchor=center, + invisibletimedot, + }, + cv@timedot/.style = {% + cv@invisibletimedot, + draw, + fill, + black, + timedot, + }, + cv@contactIcon/.style={% + minimum height=\baselineskip, + contactIcon, + }, + cv@contactText/.style={% + minimum height=\baselineskip, + text depth=0pt, + contactText, + }, + cv@headerIcon/.style={% + minimum width=\cvHeaderIconWidth, + anchor=center, + headerIcon, + }, + cv@skillLevel/.style={skillLevel,}, + cv@languageText/.style={languageText,}, + cv@skillText/.style={skillText,}, + cv@progressArea/.style={% + minimum width=\cvProgressAreaWidth, + minimum height=\cvProgressAreaHeight, + rectangle, + draw, + cvGreen, + progressArea + }, + cv@progressBar/.style={% + minimum height=\cvProgressAreaHeight, + rectangle, + draw, + fill, + cvGreen, + anchor=west, + progressBar + }, + cv@sectionTitle/.style={% + anchor=north west, + align=left, + sectionTitle, + }, + cv@sectionEduText/.style={% + cv@eventdottext, + anchor=north west, + sectionEduText, + }, +} +% \end{macrocode} +%------------------------------------------------------ +% +% XeLaTeX/LuaLaTeX specific +% +% \begin{macrocode} +\NewDocumentCommand{\cv@loadFonts}{}{ + \RequirePackage{fontspec} + \RequirePackage{fontawesome} +% \end{macrocode} +% set fonts +% \begin{macrocode} + \setmainfont[Numbers={Monospaced}]{\limecv@sansfont} + \setsansfont{\limecv@sansfont} + \setmonofont{\limecv@monofont} + \ifcv@fontPath + \newfontfamily{\cv@FA}[Path=\limecv@path]% + {FontAwesome} + \else + \newfontfamily{\cv@FA}{FontAwesome} + \fi +% \end{macrocode} +% define some missing icons +% \begin{macrocode} + \ProvideDocumentCommand{\faAddressCard}{}{{\cv@FA% + \symbol{"F2B9}}} + \ProvideDocumentCommand{\faVcard}{}{{\cv@FA% + \symbol{"F2BB}}} + \ProvideDocumentCommand{\faMicrochip}{}{{\cv@FA% + \symbol{"F2DB}}} +% \end{macrocode} +% future possibility: +% https://raw.githubusercontent.com/xdanaux/moderncv/ +% master/moderncviconsmarvosym.sty +% \begin{macrocode} +} +\ifxetex + \cv@loadFonts +\else + \ifluatex + \cv@loadFonts + \else + \RequirePackage{fontawesome} + \RenewDocumentCommand{\familydefault}{}{\sfdefault} + \fi +\fi +% \end{macrocode} +%------------------------------------------------------ +% +% XeLaTeX/LuaLaTeX specific +% +% Removes left/right side bearing of character +% +% Based on: +% https://tex.stackexchange.com/questions/274479 +% https://tex.stackexchange.com/questions/34563 +% +% \begin{macrocode} +\ifxetex + \NewDocumentCommand{\kright}{m}{\leavevmode #1% + \kern-\XeTeXglyphbounds3 \the\XeTeXcharglyph`#1 } + \NewDocumentCommand{\kleft}{m}{\leavevmode % + \kern-\XeTeXglyphbounds1 \the\XeTeXcharglyph`#1 #1} +\else + \NewDocumentCommand{\kright}{m}{#1} + \NewDocumentCommand{\kleft}{m}{#1} +\fi +% \end{macrocode} +% Extracts n-th charcter from a string +% Argument order: string - character number +% \begin{macrocode} +\ExplSyntaxOn +\DeclareExpandableDocumentCommand{\extract}{mm}{% + \tl_item:nn { #1 } { #2 }% +} +\ExplSyntaxOff +% \end{macrocode} +%------------------------------------------------------ +% +% Page layout +% +% remove page numbers +% \begin{macrocode} +%% \pagenumbering{gobble} +% \end{macrocode} +% remove all page styling +% \begin{macrocode} +\pagestyle{empty} +% \end{macrocode} +% not used +% \begin{macrocode} +\newlength\cvColSep +\setlength\cvColSep{1cm} % 2 times column separation! +% \end{macrocode} +% not used +% \begin{macrocode} +\newlength\cvNodeSep +\setlength\cvNodeSep{0.75cm} +\newlength\cvTimeDotDiameter +\setlength\cvTimeDotDiameter{3pt} +\newlength\cvMargin +\setlength\cvMargin{1cm} +\newlength\cvSideWidth +\setlength\cvSideWidth{0.3\paperwidth-\cvMargin} +\newlength\cvMainWidth +\setlength\cvMainWidth{\paperwidth-4\cvMargin-\cvSideWidth} +\newlength\cvTimeDotSep +\setlength\cvTimeDotSep{0.4cm} +\newlength\cvStartEndSep +\setlength\cvStartEndSep{0.3cm} +\newlength\cvItemSep +\setlength\cvItemSep{0.4cm} +\newlength\cvTableSepWidth +\setlength\cvTableSepWidth{0.3cm} +\newlength\cvCoverLetterHeight +\setlength\cvCoverLetterHeight{\cvSideWidth} +\newlength\cvCoverLetterWidth +\setlength\cvCoverLetterWidth{\cvMainWidth+3\cvMargin} +\newlength\cvPictureWidth +\setlength\cvPictureWidth{4cm} +% \end{macrocode} +% progress area size definition +% \begin{macrocode} +\newlength\cvProgressAreaWidth +\setlength\cvProgressAreaWidth{5em} +\newlength\cvProgressAreaHeight +\setlength\cvProgressAreaHeight{0.75em} +\newlength\cvSectionSep +\setlength\cvSectionSep{0.6cm} +\newlength\cvSectionSBSep +\setlength\cvSectionSBSep{4pt} +% \end{macrocode} +% line width of horizontal line below section title +% \begin{macrocode} +\newlength\cvTitleLineWidth +\setlength\cvTitleLineWidth{2pt} +% \end{macrocode} +% distance from bottom of text to centre of line +% \begin{macrocode} +\newlength\cvTitleLineSpacing +\setlength\cvTitleLineSpacing{0.1cm} +% \end{macrocode} +% set to |\cvItemSep| by default (do not overwrite!) +% \begin{macrocode} +\newlength\cv@projectSep +\setlength\cv@projectSep{0cm} +% \end{macrocode} +% internal spacing between details of a single project +% \begin{macrocode} +\newlength\cvProjectDetailsSep +\setlength\cvProjectDetailsSep{0.2cm} +\newlength\cvInterestDetailsSep +\setlength\cvInterestDetailsSep{4pt} +\newlength\cvContactItemSep +\setlength\cvContactItemSep{5pt} +% \end{macrocode} +% line width of line below cover letter name +% \begin{macrocode} +\newlength\cvCoverLetterLineWidth +\setlength\cvCoverLetterLineWidth{3pt} +\newlength\cvCoverLetterPositionSpacing +\setlength\cvCoverLetterPositionSpacing{10pt} +\newlength\cvSBSectionLineWidth +\setlength\cvSBSectionLineWidth{1pt} +\newlength\cvCoverLetterLineSpacing +\setlength\cvCoverLetterLineSpacing{0pt} +\newlength\cvIDNameSep +\setlength\cvIDNameSep{0.1cm} +\newlength\cvPositionSep +\setlength\cvPositionSep{0.5cm} +\newlength\cvSkillSep +\setlength\cvSkillSep{1ex} +\newlength\cvHeaderIconWidth +\setlength\cvHeaderIconWidth{0pt} +% \end{macrocode} +%------------------------------------------------------ +% +% New styling commands +% +% +% Style main section title +% \begin{macrocode} +\NewDocumentCommand{\cvSection}{m}{\Large\textbf{#1}} +% \end{macrocode} +% Typeset skill level +% \begin{macrocode} +\newcount\my@repeat@count +\NewDocumentCommand{\cvSkill}{m}{% + \begingroup + \my@repeat@count=\z@ + \@whilenum\my@repeat@count<#1\do{\faCircle\advance% + \my@repeat@count\@ne}% + \my@repeat@count=\numexpr5-\z@\relax + \@whilenum\my@repeat@count>#1\do{\faCircleO\advance% + \my@repeat@count\m@ne}% + \endgroup +} +% \end{macrocode} +% Create horizontal line from edge to edge for side bar +% section titles. +% +% Based on: +% https://tex.stackexchange.com/questions/65731 +% Alternative: +% https://tex.stackexchange.com/questions/15119 +% \begin{macrocode} +\NewDocumentCommand{\cvhrulefill}{}{{\color{cvGreen}% +\leavevmode\leaders\hrule height \cvSBSectionLineWidth\hfill\kern\z@}} +\NewDocumentCommand{\ruleline}{m}{\par\noindent\raisebox{.6ex}{% +\makebox[\linewidth]{\cvhrulefill\hspace{1ex}% +\raisebox{-.6ex}{#1}\hspace{1ex}\cvhrulefill}}} +% \end{macrocode} +% Title counters +% \begin{macrocode} +\newcounter{cv@titlePrev} +\setcounter{cv@titlePrev}{0} +\newcounter{cv@titleNext} +\setcounter{cv@titleNext}{1} +% \end{macrocode} +% Draw everything associated with main section title. +% \begin{macrocode} +\NewDocumentCommand{\cv@Title}{mm}{% + \ifnodedefined{cv@last item \the\value{cv@lastItem}}{% + \setlength\cvHeaderIconWidth{\maxof{\cvHeaderIconWidth}{\widthof{\Large #2}}}% + \protected@write\@auxout{}{\global\cvHeaderIconWidth=\the\cvHeaderIconWidth} + \node[% + below=\cvSectionSep of cv@last item % + \the\value{cv@lastItem}.south west, + cv@sectionTitle] + (cv@title \the\value{cv@titleNext}) + {\begingroup\edef\y{\endgroup% + \cvSection\bgroup\noexpand\kleft{% + \extract{#1}{1}}}% + \y\StrGobbleLeft{#1}{1}\egroup}; + \node[% + left=\cvTimeDotSep of cv@title \the\value{cv@titleNext}, + cv@headerIcon] + {#2}; + \node[ + below=\cvSectionSep of cv@last item % + \the\value{cv@lastItem}.south west, + cv@sectionTitle] + (cv@title \the\value{cv@titleNext} dummy) {% + \phantom{\cvSection{Education}}}; + \begin{scope}[on background layer] + \draw[line width=\cvTitleLineWidth,cvGreen] + let \p1=(cv@title \the\value{cv@titleNext} % + dummy.south west), + \p2=(current page.east) in + (\x1,\y1-\cvTitleLineSpacing) to (\x2,\y1-\cvTitleLineSpacing); + \end{scope} + }{% + \node[cv@sectionTitle] at (0,0) (cv@title % + \the\value{cv@titleNext}) + {\begingroup\edef\y{\endgroup% + \cvSection\bgroup\noexpand\kleft{\extract{#1}{1}}}% + \y\StrGobbleLeft{#1}{1}\egroup}; + \node[% + left=\cvTimeDotSep of cv@title \the\value{cv@titleNext}, + cv@headerIcon] + {#2}; + \begin{scope}[on background layer] + \draw[line width=\cvTitleLineWidth,cvGreen] + let \p1=(cv@title \the\value{cv@titleNext}% + .south west), + \p2=(current page.east) in + (\x1,\y1-\cvTitleLineSpacing) to (\x2,\y1-\cvTitleLineSpacing); + \end{scope} +}% +\stepcounter{cv@titlePrev}% +\stepcounter{cv@titleNext} +} +% \end{macrocode} +% Draw the timeline +% \begin{macrocode} +\NewDocumentCommand{\cv@EndSectionDraw}{}{ + \draw (start) to (end.center);} +% \end{macrocode} +% Item counters +% \begin{macrocode} +\newcounter{cv@itemPrev} +\setcounter{cv@itemPrev}{0} +\newcounter{cv@itemNext} +\setcounter{cv@itemNext}{1} +\newcounter{cv@lastItem} +\setcounter{cv@lastItem}{1} +% \end{macrocode} +% List a timeline entry +% \begin{macrocode} +\NewDocumentCommand{\cv@definecvItem}{}{ + \NewDocumentCommand{\cvItem}{m}{% + \ifnodedefined{item \the\value{cv@itemPrev}}{% + \node[% + below=\cvItemSep of item % + \the\value{cv@itemPrev}.south west, + cv@eventdottext] + (item \the\value{cv@itemNext} header) + {\phantom{Evening}}; + \node[% + below=\cvItemSep of item % + \the\value{cv@itemPrev}.south west, + cv@sectionEduText] + (item \the\value{cv@itemNext}) + {##1}; + \node[% + left=\cvTimeDotSep of item % + \the\value{cv@itemNext} header, + cv@timedot] + {}; + }{ + \node[% + below=\cvItemSep of cv@title % + \the\value{cv@titlePrev}.south west, + cv@eventdottext] + (item \the\value{cv@itemNext} header) + {\phantom{Evening}}; + \node[ + below=\cvItemSep of cv@title % + \the\value{cv@titlePrev}.south west, + cv@sectionEduText] + (item \the\value{cv@itemNext}) + {##1}; + \node[ + left=\cvTimeDotSep of item % + \the\value{cv@itemNext} header, + cv@timedot] + (start) + {}; + } + \node[ + left=\cvTimeDotSep of item % + \the\value{cv@itemNext}.south west, + cv@invisibletimedot] + (end) + {}; + \stepcounter{cv@itemPrev} + \stepcounter{cv@itemNext} + } +} +% \end{macrocode} +%------------------------------------------------------ +% +% Commands specific for cvSkills section +% +% +% information in temporary command yes/no +% \begin{macrocode} +\newif\ifcv@firstskill +% \end{macrocode} +% temporary command that stores skill information +% \begin{macrocode} +\NewDocumentCommand{\cv@skillsTable}{}{} +% \end{macrocode} +% typeset two skills +% \begin{macrocode} +\NewDocumentCommand{\cvSkillTwo}{mmmm}{% + \ifcv@firstskill + \g@addto@macro\cv@skillsTable{\cvSkill{#1} % + & #2 & \cvSkill{#3} & #4} + \cv@firstskillfalse + \else + \g@addto@macro\cv@skillsTable{\\[\cvSkillSep] \cvSkill{#1} % + & #2 & \cvSkill{#3} & #4} + \fi +} +% \end{macrocode} +% typeset one skill +% \begin{macrocode} +\NewDocumentCommand{\cvSkillOne}{mm}{% + \ifcv@firstskill + \g@addto@macro\cv@skillsTable{\cvSkill{#1} & #2} + \cv@firstskillfalse + \else + \g@addto@macro\cv@skillsTable{\\[\cvSkillSep] \cvSkill{#1} & #2} + \fi +} +% \end{macrocode} +%------------------------------------------------------ +% +% cvMainContent environments +% +% +% \begin{macrocode} +\NewDocumentEnvironment{cvMainContent}{}{% + \begin{tikzpicture}[% + every node/.style={% + inner sep=0pt, + outer sep=0pt}, + remember picture, + overlay, + shift={($(current page.north west)+% + (\cvSideWidth+3\cvMargin+\cvTimeDotSep,-\cvMargin)$)}] +}{% + \end{tikzpicture} +} +\NewDocumentEnvironment{cvMainContent*}{}{% + \stepcounter{titlePrev} + \stepcounter{titleNext} + \begin{tikzpicture}[% + every node/.style={ + inner sep=0pt, + outer sep=0pt}, + remember picture, + overlay, + shift={($(current page.north west)+% + (\cvMargin+\cvTimeDotSep,-\cvMargin)$)}] +}{% + \end{tikzpicture}% +} +% \end{macrocode} +%------------------------------------------------------ +% +% cvEductation environment +% +% \begin{macrocode} +\NewDocumentEnvironment{cvEducation}{}{% + \cv@Title{Education}{\faGraduationCap} +% \end{macrocode} +% insures uniqueness +% \begin{macrocode} + \stepcounter{cv@itemPrev} + \stepcounter{cv@itemNext} + \cv@definecvItem + }{% + \cv@EndSectionDraw + \stepcounter{cv@lastItem} + \draw (item \the\value{cv@itemPrev}.south west) + node (cv@last item \the\value{cv@lastItem}) {}; +} +% \end{macrocode} +%------------------------------------------------------ +% +% cvExperience environment +% +% \begin{macrocode} +\NewDocumentEnvironment{cvExperience}{}{% + \cv@Title{Experience}{\faBriefcase} +% \end{macrocode} +% insures uniqueness +% \begin{macrocode} + \stepcounter{cv@itemPrev} + \stepcounter{cv@itemNext} + \cv@definecvItem +}{% + \cv@EndSectionDraw + \stepcounter{cv@lastItem} + \draw (item \the\value{cv@itemPrev}.south west) + node (cv@last item \the\value{cv@lastItem}) {}; +} +% \end{macrocode} +%------------------------------------------------------ +% +% cvSkills environment +% +% \begin{macrocode} +\NewDocumentEnvironment{cvSkills}{}{% + \cv@Title{Skills}{\faStar} + \global\cv@firstskilltrue +}{% + \node[ + below=\cvSectionSep of cv@title \the\value{cv@titlePrev}% + .south west, + anchor=north west] (skills) % + {\begin{tabular}{@{}ll@{\hskip\cvColSep}ll@{}}% + \cv@skillsTable + \end{tabular}}; + \stepcounter{cv@lastItem} + \draw (skills.south west) node % + (cv@last item \the\value{cv@lastItem}) {}; +} +% \end{macrocode} +%------------------------------------------------------ +% +% cvReferences environment +% +% \begin{macrocode} +\NewDocumentEnvironment{cvReferences}{}{% + \cv@Title{References}{\faLink} + \node[ + below=\cvSectionSep of cv@title \the\value{cv@titlePrev}.% + south west, + anchor=north west, + ] (cv@References) \bgroup % +}{% + \egroup; + \stepcounter{cv@lastItem} + \draw (cv@References.south west) node % + (cv@last item \the\value{cv@lastItem}) {}; +} +% \end{macrocode} +% Key-value parsing structure +% \begin{macrocode} +\pgfkeys{/@cv/references/.is family, + /@cv/references/.unknown/.style = % + {\pgfkeyscurrentpath/\pgfkeyscurrentname/% + .initial = #1}} +\newif\ifcv@refName +\pgfkeys{/@cv/references/name/.is if=cv@refName} +\pgfkeys{/@cv/references/name=false} +\newif\ifcv@refPosition +\pgfkeys{/@cv/references/position/.is if=cv@refPosition} +\pgfkeys{/@cv/references/position=false} +\newif\ifcv@refCompany +\pgfkeys{/@cv/references/company/.is if=cv@refCompany} +\pgfkeys{/@cv/references/copmany=false} +\newif\ifcv@refAddressLineA +\pgfkeys{/@cv/references/address line 1/.is if=% + cv@refAddressLineA} +\pgfkeys{/@cv/references/address line 1=false} + \newif\ifcv@refAddressLineB +\pgfkeys{/@cv/references/address line 2/.is if=% + cv@refAddressLineB} +\pgfkeys{/@cv/references/address line 2=false} +\newif\ifcv@refAddressLineC +\pgfkeys{/@cv/references/address line 3/.is if=% + cv@refAddressLineC} +\pgfkeys{/@cv/references/address line 3=false} +\newif\ifcv@refWorkPhone +\pgfkeys{/@cv/references/work phone/.is if=% + cv@refWorkPhone} +\pgfkeys{/@cv/references/work phone=false} +\newif\ifcv@refMobilePhone +\pgfkeys{/@cv/references/mobile phone/.is if=% + cv@refMobilePhone} +\pgfkeys{/@cv/references/mobile phone=false} +\newif\ifcv@refStored +\pgfkeys{/@cv/references/value stored/.is if=% + cv@refStored} +\pgfkeys{/@cv/references/value stored=false} +% \end{macrocode} +% +% keys +% \begin{macrocode} +\define@key{cvAddReferenceA}{name}{% + \global\def\cv@refAName{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/name = true}}} +% \end{macrocode} +% +% +% \begin{macrocode} +\define@key{cvAddReferenceA}{company}{% + \global\def\cv@refACompany{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/company = true}}} +% \end{macrocode} +% +% +% \begin{macrocode} +\define@key{cvAddReferenceA}{position}{% + \global\def\cv@refAPosition{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/position = true}}} +% \end{macrocode} +% +% +% \begin{macrocode} +\define@key{cvAddReferenceA}{address line 1}{% + \global\def\cv@refAAddressLineA{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/address line 1 = true}}} +% \end{macrocode} +% +% +% \begin{macrocode} +\define@key{cvAddReferenceA}{address line 2}{% + \global\def\cv@refAAddressLineB{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/address line 2 = true}}} +% \end{macrocode} +% +% +% \begin{macrocode} +\define@key{cvAddReferenceA}{address line 3}{% + \global\def\cv@refAAddressLineC{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/address line 3 = true}}} +% \end{macrocode} +% +% +% \begin{macrocode} +\define@key{cvAddReferenceA}{phone work}{% + \global\def\cv@refAPhoneWork{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/phone work = true}}} +% \end{macrocode} +% +% +% \begin{macrocode} +\define@key{cvAddReferenceA}{mobile phone}{% + \global\def\cv@refAMobilePhone{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/mobile phone = true}}} +% \end{macrocode} +% +% +% \begin{macrocode} +\define@key{cvAddReferenceB}{name}{% + \global\def\cv@refBName{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/name = true}}} +% \end{macrocode} +% +% +% \begin{macrocode} +\define@key{cvAddReferenceB}{company}{% + \global\def\cv@refBCompany{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/company = true}}} +% \end{macrocode} +% +% +% \begin{macrocode} +\define@key{cvAddReferenceB}{position}{% + \global\def\cv@refBPosition{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/position = true}}} +% \end{macrocode} +% +% +% \begin{macrocode} +\define@key{cvAddReferenceB}{address line 1}{% + \global\def\cv@refBAddressLineA{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/address line 1 = true}}} +% \end{macrocode} +% +% +% \begin{macrocode} +\define@key{cvAddReferenceB}{address line 2}{% + \global\def\cv@refBAddressLineB{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/address line 2 = true}}} +% \end{macrocode} +% +% +% \begin{macrocode} +\define@key{cvAddReferenceB}{address line 3}{% + \global\def\cv@refBAddressLineC{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/address line 3 = true}}} +% \end{macrocode} +% +% +% \begin{macrocode} +\define@key{cvAddReferenceB}{phone work}{% + \global\def\cv@refBPhoneWork{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/phone work = true}}} +% \end{macrocode} +% +% +% \begin{macrocode} +\define@key{cvAddReferenceB}{mobile phone}{% + \global\def\cv@refBMobilePhone{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/mobile phone = true}}} +\NewDocumentCommand{\cvAddReference}{sm}{% + \IfBooleanTF{#1}{% + \setkeys{cvAddReferenceA}{name=,company=, + position=,address line 1=,address line 2=, + address line 3=,phone work=,mobile phone=,#2} + \pgfkeys{/@cv/references/name = true}% + }{% + \setkeys{cvAddReferenceB}{name=,company=, + position=,address line 1=,address line 2=, + address line 3=,phone work=,mobile phone=,#2} + \ifcv@refStored% + \begin{tabular}{@{}L{0.5\cvMainWidth-0.5\cvTimeDotSep% + -0.5\cvTableSepWidth}@{\hskip \cvTableSepWidth}% + L{0.5\cvMainWidth-0.5\cvTimeDotSep% + -0.5\cvTableSepWidth}@{}}% + \ifcv@refName \cv@refAName & \cv@refBName \fi % + \ifcv@refCompany \\ \cv@refACompany & \cv@refBCompany \fi % + \ifcv@refPosition \\ \cv@refAPosition & \cv@refBPosition \fi % + \ifcv@refAddressLineA \\ \cv@refAAddressLineA & \cv@refBAddressLineA \fi % + \ifcv@refAddressLineB \\ \cv@refAAddressLineB & \cv@refBAddressLineB \fi % + \ifcv@refAddressLineC \\ \cv@refAAddressLineC & \cv@refBAddressLineC \fi % + \ifcv@refWorkPhone \\ \cv@refAPhoneWork & \cv@refBPhoneWork \fi % + \ifcv@refMobilePhone \\ \cv@refAMobilePhone & \cv@refBMobilePhone \fi % + \end{tabular}% + \pgfkeys{/@cv/references/value stored = false}% + \else% + \begin{tabular}{@{}L{0.5\cvMainWidth% + -0.5\cvTimeDotSep}@{}}% + \ifcv@refName \cv@refBName \fi % + \ifcv@refCompany \\ \cv@refBCompany \fi % + \ifcv@refPosition \\ \cv@refBPosition \fi % + \ifcv@refAddressLineA \\ \cv@refBAddressLineA \fi % + \ifcv@refAddressLineB \\ \cv@refBAddressLineB \fi % + \ifcv@refAddressLineC \\ \cv@refBAddressLineC \fi % + \ifcv@refWorkPhone \\ \cv@refBPhoneWork \fi % + \ifcv@refMobilePhone \\ \cv@refBMobilePhone \fi % + \end{tabular}% + \fi% + }% +} +% \end{macrocode} +% +%------------------------------------------------------ +% +% cvSideBar environment +% +% +% \begin{macrocode} +\NewDocumentEnvironment{cvSideBar}{}{% + \vspace*{\fill} + \vspace*{-0.5\cvMargin} + \begin{tikzpicture}[remember picture,overlay] + \fill[cvGreenLight] (current page.north west) rectangle % + ++(\cvSideWidth+2\cvMargin,-\paperheight); + \end{tikzpicture}% + \begin{minipage}{\cvSideWidth} + \begin{center} +}{% + \end{center} + \end{minipage} + \vspace*{\fill} +} +\NewDocumentEnvironment{cvSideBar*}{}{% + \vspace*{\fill} + \vspace*{-0.5\cvMargin} + \begin{tikzpicture}[remember picture,overlay] + \fill[cvGreenLight] (current page.north east) rectangle % + ++(-\cvSideWidth-2\cvMargin,-\paperheight); + \end{tikzpicture}% + \begin{minipage}{\cvSideWidth} + \begin{center} +}{% + \end{center} + \end{minipage} + \vspace*{\fill} +} +% \end{macrocode} +%------------------------------------------------------ +% +% cvProfile environment +% +% \begin{macrocode} +\NewDocumentEnvironment{cvProfile}{}{% + \vspace{\cvSectionSBSep} + \ruleline{Profile} +}{% +} +% \end{macrocode} +%------------------------------------------------------ +% +% cvContact environment +% +% +% \begin{macrocode} +\NewDocumentCommand{\cv@ContactTemplate}{mm}{ + \NewDocumentCommand{#1}{m}{ + \ifcv@contactfirst \\ \else % + \global\cv@contactfirsttrue \fi\node[cv@contactIcon]{#2}; + \pgfmatrixnextcell \node[cv@contactText]{##1}; + } +} +\NewDocumentCommand{\cv@ContactTemplateLink}{mm}{ + \NewDocumentCommand{#1}{mm}{ + \ifcv@contactfirst \\ \else % + \global\cv@contactfirsttrue \fi\node[cv@contactIcon]{#2}; + \pgfmatrixnextcell \node[cv@contactText]{% + \@IfNoValueOrEmptyTF{##1}{##2}{\href{##1}{##2}}}; + } +} +\newif\ifcv@contactfirst +\NewDocumentEnvironment{cvContact}{}{% + \vspace{\cvSectionSBSep} + \ruleline{Contact}% + \vspace{\cvSectionSBSep} + + \global\cv@contactfirstfalse + \cv@ContactTemplate{\cvContactAddress}{\faMapMarker} + \cv@ContactTemplate{\cvContactPhone}{\faPhone} + + \cv@ContactTemplateLink{\cvContactEmail}{\faEnvelope} + \cv@ContactTemplateLink{\cvContactWebsite}{\faGlobe} + \cv@ContactTemplateLink{\cvContactGithub}{\faGithub} + \cv@ContactTemplateLink{\cvContactLinkedin}{\faLinkedinSquare} + \cv@ContactTemplateLink{\cvContactTwitter}{\faTwitter} + \cv@ContactTemplateLink{\cvContactKeybase}{\faKey} + \begin{tikzpicture}[% + every node/.style={inner sep=0pt, outer sep=0pt}] + \matrix [ + column 1/.style={anchor=center}, + column 2/.style={anchor=west,align=left}, + column sep=\cvContactItemSep, + row sep=\cvContactItemSep, + inner sep=0pt, + outer sep=0pt] (contact) \bgroup +}{% + \\\egroup; % \\ required, does not compile otherwise + \end{tikzpicture}% +} +% \end{macrocode} +%------------------------------------------------------ +% +% cvInterests environment +% +% \begin{macrocode} +\newif\ifcv@interestLong +\cv@interestLongtrue +\newcounter{cv@cvInterestCounter} +\setcounter{cv@cvInterestCounter}{1} +\newcounter{cv@cvInterestCounterPrev} +\setcounter{cv@cvInterestCounterPrev}{0} +\newif\ifcv@interestContent +\cv@interestContentfalse +\NewDocumentCommand{\cv@TypesetTableRows}{}{} +\newif\ifcv@interesttikzopen +\cv@interesttikzopenfalse +\NewDocumentCommand{\cv@interestClose}{}{ + \ifcv@interestLong + \ifcv@interesttikzopen + \end{tikzpicture} + \global\cv@interesttikzopenfalse + \fi + \else + \ifcv@interestContent + \begin{tabular}{@{}cl@{}} + \cv@TypesetTableRows + \end{tabular} + \fi + \fi +} +\NewDocumentCommand{\cv@interestOpen}{}{ + \ifcv@interestLong + \ifcv@interesttikzopen + \else + \cv@interesttikzopentrue + \begin{tikzpicture}[% + every node/.style={inner sep=0cm,outer sep=0cm}] + \fi + \else + \global\def\cv@TypesetTableRows{} + \global\cv@interestContentfalse + \fi +} +\NewDocumentCommand{\cv@definecv@interestSection}{}{ + \NewDocumentCommand{\cv@interestSection}{m}{% + \cv@interestClose\\ + \ifcv@interestContent + \vspace*{2\cvSectionSBSep} + \fi + {\color{cvGreen}---} ##1 {\color{cvGreen}---}\\ + \vspace*{\cvSectionSBSep} + \cv@interestOpen + } +} +\NewDocumentCommand{\cv@definecvInterestLong}{}{ + \NewDocumentCommand{\cvInterest}{mm}{% + \ifcv@interestContent % + \node[ + below=\cvItemSep of cv@interest text \the\value{cv@cvInterestCounterPrev}, + cv@interesticon] + (cv@interest icon \the\value{cv@cvInterestCounter}) {##1}; + \node[ + below=\cvInterestDetailsSep of cv@interest icon \the\value{cv@cvInterestCounter}, + cv@interesttext] + (cv@interest text \the\value{cv@cvInterestCounter}) {##2}; + \else + \cv@interestOpen + \node[cv@interesticon] (cv@interest icon \the\value{cv@cvInterestCounter}) {##1}; + \node[ + below=\cvInterestDetailsSep of cv@interest icon \the\value{cv@cvInterestCounter}, + cv@interesttext] + (cv@interest text \the\value{cv@cvInterestCounter}) {##2}; + \fi + \stepcounter{cv@cvInterestCounter} + \stepcounter{cv@cvInterestCounterPrev} + \global\cv@interestContenttrue + } +} +\NewDocumentCommand{\cv@definecvInterestShort}{}{ +% \end{macrocode} +% https://tex.stackexchange.com/questions/12761 +% \begin{macrocode} + %\def\Z{\vphantom{\parbox[c]{1cm}{\Huge Something Long}}} + \NewDocumentCommand{\cvInterest}{mm}{% +% \end{macrocode} +% parse optinal argument if present +% \begin{macrocode} + \g@addto@macro\cv@TypesetTableRows{##1}% + \g@addto@macro\cv@TypesetTableRows{&}% + \g@addto@macro\cv@TypesetTableRows{##2}% + \g@addto@macro\cv@TypesetTableRows{\\[\cvInterestDetailsSep]}% + \global\cv@interestContenttrue + } +} +\ExplSyntaxOn +\NewDocumentEnvironment{cvInterests}{o}{% +% \end{macrocode} +% set defaults +% \begin{macrocode} + \cv@interestLongtrue +% \end{macrocode} +% parse optional arguments +% \begin{macrocode} + + \@IfNoValueOrEmptyTF{#1}{}{% + \str_case:nnF {#1}{ + {long}{\cv@interestLongtrue} + {short}{\cv@interestLongfalse} + }{\ClassError{limecv}{Unkown option `#1' for cvInterests % + environment.}{Only `long' and `short' are valid options % + for this environment.}} + } + + \cv@definecv@interestSection +% \end{macrocode} +% define new commands +% \begin{macrocode} + \NewDocumentCommand{\cvInterestsPersonal}{}{% + \cv@interestSection{\faUser\ \emph{Personal}}} +% \end{macrocode} +% \begin{macrocode} + \NewDocumentCommand{\cvInterestsProfessional}{}{% + \cv@interestSection{\faBriefcase\ \emph{Professional}}} +% \end{macrocode} +% \begin{macrocode} + \ifcv@interestLong + \cv@definecvInterestLong + \else + \cv@definecvInterestShort + \fi + %%%%%% + \vspace{\cvSectionSBSep} + \ruleline{Interests}% + \vspace{\cvSectionSBSep} +}{% + \cv@interestClose +} +\ExplSyntaxOff +% \end{macrocode} +%------------------------------------------------------ +% +% cvProject environment +% +% +% \begin{macrocode} +\newif\ifcv@projectImage +\cv@projectImagefalse +\newif\ifcv@projectLink +\cv@projectLinkfalse +\newif\ifcv@projectWidth +\cv@projectWidthfalse +\newif\ifcv@projectHeight +\cv@projectHeightfalse +\newcounter{cv@projectCurrent} +\setcounter{cv@projectCurrent}{1} +\newcounter{cv@projectPrevious} +\setcounter{cv@projectPrevious}{0} +% \end{macrocode} +% +% \begin{macrocode} +\define@key{cv@Project}{image}{% + \global\def\cv@projectImage{#1}% + \cv@projectImagetrue} +% \end{macrocode} +% +% +% \begin{macrocode} +\define@key{cv@Project}{link}{% + \global\def\cv@projectLink{#1}% + \cv@projectLinktrue} +% \end{macrocode} +% +% +% \begin{macrocode} +\define@key{cv@Project}{width}{% + \global\def\cv@projectWidth{#1}% + \cv@projectWidthtrue} +% \end{macrocode} +% +% +% \begin{macrocode} +\define@key{cv@Project}{height}{% + \global\def\cv@projectHeight{#1}% + \cv@projectHeighttrue} +\NewDocumentCommand{\cv@definecvProject}{}{ + \NewDocumentCommand{\cvProject}{omm}{% +% \end{macrocode} +% default settings +% \begin{macrocode} + \cv@projectImagefalse + \cv@projectLinkfalse + \cv@projectWidthfalse + \cv@projectHeightfalse +% \end{macrocode} +% parse optional arguments +% \begin{macrocode} + \@IfNoValueOrEmptyTF{##1}{}{\setkeys{cv@Project}{##1}} + \ifnodedefined{project \the\value{cv@projectPrevious} % + description}{}{% + \node (project \the\value{cv@projectPrevious} % + description) {}; + } +% \end{macrocode} +% draw image +% \begin{macrocode} + \ifcv@projectImage + \ifcv@projectWidth + \node[below=\cv@projectSep of project % + \the\value{cv@projectPrevious} description] + (project \the\value{cv@projectCurrent} image) + {\includegraphics[width=\cv@projectWidth]{\cv@projectImage}}; + \else + \ifcv@projectHeight + \node[below=\cv@projectSep of project % + \the\value{cv@projectPrevious} description] + (project \the\value{cv@projectCurrent} image) + {\includegraphics[height=\cv@projectHeight]{\cv@projectImage}}; + \else + \ClassError{limecv}{No width or height specified, % + but image specified.}{Always specify the height or % + width if an image is set.} + \fi + \fi +% \end{macrocode} +% draw title (and add href if specified) +% \begin{macrocode} + \node[% + text width=\cvSideWidth, + align=center, + below=\cvProjectDetailsSep of project \the\value{cv@projectCurrent} image] + (project \the\value{cv@projectCurrent} title) {% + \ifcv@projectLink \href{\cv@projectLink}{##2} \else ##2 \fi }; + \else +% \end{macrocode} +% draw title (and add href if specified) +% \begin{macrocode} + \node[below=\cv@projectSep of project % + \the\value{cv@projectPrevious} description, + text width=\cvSideWidth, + align=center] + (project \the\value{cv@projectCurrent} title) {% + \ifcv@projectLink \href{\cv@projectLink}{##2} \else ##2 \fi }; + \fi + \node[ + below=\cvProjectDetailsSep of project \the\value{cv@projectCurrent} title, + text width=\cvSideWidth, + align=center] + (project \the\value{cv@projectCurrent} description) {##3}; + + \setlength\cv@projectSep\cvItemSep +% \end{macrocode} +% increase counter value +% \begin{macrocode} + \stepcounter{cv@projectCurrent} + \stepcounter{cv@projectPrevious} + } +} +% \end{macrocode} +% +% \begin{macrocode} +\NewDocumentEnvironment{cvProjects}{}{% + \vspace{\cvSectionSBSep} + \ruleline{Projects}% + \vspace{\cvSectionSBSep} + \cv@definecvProject + \begin{tikzpicture}[every node/.style={inner sep=0cm,outer sep=0cm}] +}{ + \end{tikzpicture} +} +% \end{macrocode} +%------------------------------------------------------ +% +% cvLanguages environment +% +% \begin{macrocode} +\newcounter{cv@languages} +\setcounter{cv@languages}{1} +\pgfkeys{/@cv/languages/.is family, +/@cv/languages/.unknown/.style = {% + \pgfkeyscurrentpath/\pgfkeyscurrentname/.initial = #1}} +\NewDocumentEnvironment{cvLanguages}{}{% + \NewDocumentCommand{\cvLanguage}{mm}{% + {\globaldefs=1\relax\pgfkeys{% + /@cv/languages/lang\the\value{cv@languages} = ##2}} + \node[cv@languageText]{##1}; \pgfmatrixnextcell % + \node[cv@progressArea] (cv@language \the\value{cv@languages}) {}; \\ + \stepcounter{cv@languages} + }% + \vspace{\cvSectionSBSep} + \ruleline{Languages}% + \vspace{\cvSectionSBSep} + \begin{tikzpicture}[% + every node/.style={text depth=0pt,inner sep=0pt,outer sep=0pt}] + \matrix [ + column 1/.style={anchor=east}, + column sep=1.5\cvSectionSBSep, + row sep=1.5\cvSectionSBSep, + column 2/.style={anchor=west,align=left} + ] (contact) \bgroup +}{% + \\\egroup; + \newcounter{cv@languagelevel} + \setcounter{cv@languagelevel}{1} + \loop\ifnum\value{cv@languagelevel}<\value{cv@languages} + \draw (cv@language \the\value{cv@languagelevel}.west) % + node[% + cv@progressBar, + minimum width=\pgfkeysvalueof{% + /@cv/languages/lang\the\value{cv@languagelevel}}em]% + {}; + \stepcounter{cv@languagelevel} + \repeat + \end{tikzpicture} +} +% \end{macrocode} +%------------------------------------------------------ +% +% cvCoverLetter environment +% +% +% +% cover letter keys +% \begin{macrocode} +\define@key{cvCoverLetter}{name}{% +% \end{macrocode} +% +% +% \begin{macro}{\cv@coverletterName} +% \begin{macrocode} +\global\def\cv@coverletterName{#1}} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macrocode} +\define@key{cvCoverLetter}{company}{% +% \end{macrocode} +% +% +% \begin{macro}{\cv@coverletterCompany} +% \begin{macrocode} +\global\def\cv@coverletterCompany{#1}} +% \end{macrocode} +% \end{macro} +% +% + +% \begin{macrocode} +\define@key{cvCoverLetter}{position}{% +% \end{macrocode} +% +% +% \begin{macro}{\cv@coverletterPosition} +% \begin{macrocode} +\global\def\cv@coverletterPosition{#1}} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macrocode} +\define@key{cvCoverLetter}{address line 1}{% +% \end{macrocode} +% +% +% \begin{macro}{\cv@coverletterAddressLineA} +% \begin{macrocode} +\global\def\cv@coverletterAddressLineA{#1}} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macrocode} +\define@key{cvCoverLetter}{address line 2}{% +% \end{macrocode} +% +% +% \begin{macro}{\cv@coverletterAddressLineB} +% \begin{macrocode} +\global\def\cv@coverletterAddressLineB{#1}} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macrocode} +\define@key{cvCoverLetter}{address line 3}{% +% \end{macrocode} +% +% +% \begin{macro}{\cv@coverletterAddressLineC} +% \begin{macrocode} +\global\def\cv@coverletterAddressLineC{#1}} +\NewDocumentCommand{\cv@definecvBeneficiary}{}{ + \NewDocumentCommand{\cvBeneficiary}{m}{% + \setkeys{cvCoverLetter}{name={},company={}, + position={},address line 1={},address line 2={}, + address line 3={},##1} + \begin{tabular}{@{}l} + \@IfNoValueOrEmptyTF{% + \cv@coverletterName}{}{% + \MakeUppercase{\cv@coverletterName}} % + \@IfNoValueOrEmptyTF{% + \cv@coverletterCompany}{}{\\ % + \cv@coverletterCompany} % + \@IfNoValueOrEmptyTF{% + \cv@coverletterPosition}{}{\\ % + \cv@coverletterPosition} % + \@IfNoValueOrEmptyTF{% + \cv@coverletterAddressLineA}{}{\\ % + \cv@coverletterAddressLineA} % + \@IfNoValueOrEmptyTF{% + \cv@coverletterAddressLineB}{}{\\ % + \cv@coverletterAddressLineB} % + \@IfNoValueOrEmptyTF{% + \cv@coverletterAddressLineC}{}{\\ % + \cv@coverletterAddressLineC} % + \end{tabular}% + \vspace{\cvMargin} + } +} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\NewDocumentCommand{\cv@definecvFullName}{}{ + \NewDocumentCommand{\cvFullName}{}{% + \pgfkeysvalueof{/@cv/info/first name} % + \pgfkeysvalueof{/@cv/info/last name} + } +} +\NewDocumentEnvironment{cvCoverLetter}{}{% + \begin{tikzpicture}[% + remember picture, + overlay, + every node/.style={inner sep=0cm,outer sep=0cm}] +% \end{macrocode} +% draw green background +% \begin{macrocode} + \begin{scope}[on background layer] + \fill[cvGreenLight] (current page.north west) rectangle % + ++(\paperwidth,-\cvCoverLetterHeight); + \end{scope} + \draw (current page.north east) % + ++(-0.5\paperwidth+0.5\cvCoverLetterWidth, + -\cvCoverLetterHeight/2) node (cv@h7) {}; + \node[anchor=east] at (cv@h7) (cv cover letter name){% + \fontsize{50}{60}\selectfont +% \end{macrocode} +% trick to expand argument such that `kleft` sees an +% alphabetic constant (i.e. a single letter) +% \begin{macrocode} + \begingroup\edef\y{\endgroup% + \noexpand\kleft{\cv@FirstNameLetter}}% + \y + \StrGobbleLeft{\pgfkeysvalueof{/@cv/info/first name}}{1}\space + \StrGobbleRight{\pgfkeysvalueof{/@cv/info/last name}}{1} +% \end{macrocode} +% same trick +% trick to expand argument such that `kleft` sees an +% alphabetic constant (i.e. a single letter) +% \begin{macrocode} + \begingroup\edef\y{\endgroup% + \noexpand\kright{\cv@LastNameLetter}}% + \y + }; + \node[% + align=right, + cvAccent, + below=\cvCoverLetterPositionSpacing of cv cover letter name.south east, + anchor=north east]{% + \StrGobbleRight{\pgfkeysvalueof{/@cv/info/position}}{1} + \begingroup\edef\y{\endgroup% + \noexpand\kright{\cv@PositionLetter}}% + \y}; + + \begin{scope}[on background layer] + \draw[line width=\cvCoverLetterLineWidth,cvGreen] + ($(cv cover letter name.south west)+(0,-\cvCoverLetterLineSpacing)$) to + ($(cv cover letter name.south east)+(0,-\cvCoverLetterLineSpacing)$); + \end{scope} + \end{tikzpicture} + \vspace{\dimexpr\cvCoverLetterHeight\relax} + + \begin{center} + \begin{minipage}{\cvCoverLetterWidth} + \today + + \vspace{\baselineskip} + \cv@definecvBeneficiary + \cv@definecvFullName +}{% + \end{minipage} + \end{center} +} +% \end{macrocode} +%------------------------------------------------------ +% +% cvID macro +% +% +% \begin{macrocode} +\pgfkeys{/@cv/info/.is family, + /@cv/info/.unknown/.style = % + {\pgfkeyscurrentpath/\pgfkeyscurrentname/% + .initial = #1}} +% \end{macrocode} +% first name, second name, picture, position +% \begin{macrocode} +\NewDocumentCommand{\cvID}{mmmm}{ + \@IfNoValueOrEmptyTF{#3}{}{ + \begin{tikzpicture} + \node[ + circle, + text=white, + minimum size=\cvPictureWidth, + path picture={ + \node at (path picture bounding box.center){ + \includegraphics[width=\cvPictureWidth]{#3} + }; + }] + {}; + \end{tikzpicture}\\ + } + {\LARGE + #1 + \vspace{\cvIDNameSep} + #2} + + \vspace{\cvPositionSep} + + \@IfNoValueOrEmptyTF{#4}{}{\color{cvAccent} #4} + + \vspace{\cvPositionSep} + {\globaldefs=1\relax\pgfkeys{/@cv/info/first name = % + #1}\def\cv@FirstNameLetter{\extract{#1}{1}}} + {\globaldefs=1\relax\pgfkeys{/@cv/info/last name = % + #2}\def\cv@LastNameLetter{\extract{#2}{-1}}} + {\globaldefs=1\relax\pgfkeys{/@cv/info/position = % + #4}\def\cv@PositionLetter{\extract{#4}{-1}}} +} +% \end{macrocode} + +% +% \iffalse +%</class> +% \fi +% +% \Finale +\endinput + diff --git a/Master/texmf-dist/source/latex/limecv/limecv.ins b/Master/texmf-dist/source/latex/limecv/limecv.ins new file mode 100644 index 00000000000..2e2742911ca --- /dev/null +++ b/Master/texmf-dist/source/latex/limecv/limecv.ins @@ -0,0 +1,53 @@ +%% +%% Copyright (C) 2017 by Olivier Pieters +%% +%% This file may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either +%% version 1.3 of this license or (at your option) any later +%% version. The latest version of this license is in: +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.3 or later is part of all distributions of +%% LaTeX version 2005/12/01 or later. +%% + +\input docstrip.tex +\keepsilent + +\usedir{tex/latex/limecv} + +\preamble + +This is a generated file. + +This file may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either +version 1.3 of this license or (at your option) any later +version. The latest version of this license is in: + + http://www.latex-project.org/lppl.txt + +and version 1.3 or later is part of all distributions of +LaTeX version 2005/12/01 or later. + +\endpreamble + +\generate{\file{limecv.cls}{\from{limecv.dtx}{class}}} + +\obeyspaces +\Msg{****************************************************} +\Msg{* *} +\Msg{* To finish the installation you have to move the *} +\Msg{* following file into a directory searched by TeX: *} +\Msg{* *} +\Msg{* \space\space limecv.cls *} +\Msg{* *} +\Msg{* To produce the documentation run the file *} +\Msg{* limecv.dtx through LaTeX. *} +\Msg{* *} +\Msg{* Happy TeXing! *} +\Msg{* *} +\Msg{****************************************************} + +\endbatchfile diff --git a/Master/texmf-dist/tex/latex/limecv/limecv.cls b/Master/texmf-dist/tex/latex/limecv/limecv.cls new file mode 100644 index 00000000000..df8962e445e --- /dev/null +++ b/Master/texmf-dist/tex/latex/limecv/limecv.cls @@ -0,0 +1,1089 @@ +%% +%% This is file `limecv.cls', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% limecv.dtx (with options: `class') +%% +%% This is a generated file. +%% +%% This file may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either +%% version 1.3 of this license or (at your option) any later +%% version. The latest version of this license is in: +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.3 or later is part of all distributions of +%% LaTeX version 2005/12/01 or later. +%% +\NeedsTeXFormat{LaTeX2e}[1999/12/01] +\ProvidesClass{limecv} + [2017/09/12 v0.1.1 limecv Document class for CVs.] + +\RequirePackage{kvoptions} +\DeclareBoolOption[false]{print} +\newif\ifcv@fontPath +\cv@fontPathfalse +\DeclareStringOption{path} +\AddToKeyvalOption*{path}{\cv@fontPathtrue} +\DeclareStringOption[Fira Sans]{sansfont} +\DeclareStringOption[Fira Mono]{monofont} +\ProcessKeyvalOptions* +\DeclareOption*{% + \PassOptionsToClass{\CurrentOption}{article}% +} +\ProcessOptions\relax +\LoadClass{article} +\RequirePackage{ifxetex} +\RequirePackage{ifluatex} +\RequirePackage{xparse} +\RequirePackage{calc} +\RequirePackage{xcolor} +\RequirePackage{tabularx} +\RequirePackage{hyperref} +\RequirePackage{url} +\RequirePackage{parskip} +\RequirePackage{xstring} +\RequirePackage{xkeyval} +\definecolor{cvGreen}{HTML}{357F2D} +\definecolor{cvGreenLight}{HTML}{b8e4b3} +\definecolor{cvRed}{HTML}{7f2d35} +\definecolor{cvDark}{HTML}{2F3142} +\definecolor{cvAccent}{HTML}{474A65} +\newcolumntype{L}[1]{>{\raggedright\let\newline\\% +\arraybackslash\hspace{0pt}}m{#1}} +\newcolumntype{C}[1]{>{\centering\let\newline\\% +\arraybackslash\hspace{0pt}}m{#1}} +\newcolumntype{R}[1]{>{\raggedleft\let\newline\\% +\arraybackslash\hspace{0pt}}m{#1}} +\NewDocumentCommand{\cvComma}{}{,} +\ExplSyntaxOn +\DeclareExpandableDocumentCommand{\@IfNoValueOrEmptyTF}% + {mmm}{\IfNoValueTF{#1}{#2}{ + \tl_if_empty:nTF {#1} {#2} {#3}% + } +} +\ExplSyntaxOff +\long\def\ifnodedefined#1#2#3{% + \@ifundefined{pgf@sh@ns@#1}{#3}{#2}% +} +\NewDocumentCommand{\globalcolor}{m}{% + \color{#1}\global\let\default@color\current@color +} +\AtBeginDocument{\globalcolor{cvDark}} +\RequirePackage{tikz} +\RequirePackage{graphicx} +\usetikzlibrary{% + calc, + positioning, + fit, + arrows.meta, + backgrounds, + matrix} +\tikzset{ + interesticon/.style = {}, + interesttext/.style = {}, + eventdottext/.style = {}, + invisibletimedot/.style = {}, + timedot/.style = {}, + contactIcon/.style={}, + contactText/.style={}, + headerIcon/.style={}, + skillLevel/.style={}, + languageText/.style={}, + skillText/.style={}, + progressArea/.style={}, + progressBar/.style={}, + sectionTitle/.style={}, + sectionEduText/.style={% + eventdottext, + anchor=north west + }, + cv@interesticon/.style = {% + minimum width=\cvHeaderIconWidth, + interesticon + }, + cv@interesttext/.style = {% + interesttext, + }, + cv@eventdottext/.style = {% + text width=\cvMainWidth-\cvTimeDotSep, + black, + anchor=north west, + eventdottext, + }, + cv@invisibletimedot/.style = {% + circle, + minimum width=\cvTimeDotDiameter, + anchor=center, + invisibletimedot, + }, + cv@timedot/.style = {% + cv@invisibletimedot, + draw, + fill, + black, + timedot, + }, + cv@contactIcon/.style={% + minimum height=\baselineskip, + contactIcon, + }, + cv@contactText/.style={% + minimum height=\baselineskip, + text depth=0pt, + contactText, + }, + cv@headerIcon/.style={% + minimum width=\cvHeaderIconWidth, + anchor=center, + headerIcon, + }, + cv@skillLevel/.style={skillLevel,}, + cv@languageText/.style={languageText,}, + cv@skillText/.style={skillText,}, + cv@progressArea/.style={% + minimum width=\cvProgressAreaWidth, + minimum height=\cvProgressAreaHeight, + rectangle, + draw, + cvGreen, + progressArea + }, + cv@progressBar/.style={% + minimum height=\cvProgressAreaHeight, + rectangle, + draw, + fill, + cvGreen, + anchor=west, + progressBar + }, + cv@sectionTitle/.style={% + anchor=north west, + align=left, + sectionTitle, + }, + cv@sectionEduText/.style={% + cv@eventdottext, + anchor=north west, + sectionEduText, + }, +} +\NewDocumentCommand{\cv@loadFonts}{}{ + \RequirePackage{fontspec} + \RequirePackage{fontawesome} + \setmainfont[Numbers={Monospaced}]{\limecv@sansfont} + \setsansfont{\limecv@sansfont} + \setmonofont{\limecv@monofont} + \ifcv@fontPath + \newfontfamily{\cv@FA}[Path=\limecv@path]% + {FontAwesome} + \else + \newfontfamily{\cv@FA}{FontAwesome} + \fi + \ProvideDocumentCommand{\faAddressCard}{}{{\cv@FA% + \symbol{"F2B9}}} + \ProvideDocumentCommand{\faVcard}{}{{\cv@FA% + \symbol{"F2BB}}} + \ProvideDocumentCommand{\faMicrochip}{}{{\cv@FA% + \symbol{"F2DB}}} +} +\ifxetex + \cv@loadFonts +\else + \ifluatex + \cv@loadFonts + \else + \RequirePackage{fontawesome} + \RenewDocumentCommand{\familydefault}{}{\sfdefault} + \fi +\fi +\ifxetex + \NewDocumentCommand{\kright}{m}{\leavevmode #1% + \kern-\XeTeXglyphbounds3 \the\XeTeXcharglyph`#1 } + \NewDocumentCommand{\kleft}{m}{\leavevmode % + \kern-\XeTeXglyphbounds1 \the\XeTeXcharglyph`#1 #1} +\else + \NewDocumentCommand{\kright}{m}{#1} + \NewDocumentCommand{\kleft}{m}{#1} +\fi +\ExplSyntaxOn +\DeclareExpandableDocumentCommand{\extract}{mm}{% + \tl_item:nn { #1 } { #2 }% +} +\ExplSyntaxOff +%% \pagenumbering{gobble} +\pagestyle{empty} +\newlength\cvColSep +\setlength\cvColSep{1cm} % 2 times column separation! +\newlength\cvNodeSep +\setlength\cvNodeSep{0.75cm} +\newlength\cvTimeDotDiameter +\setlength\cvTimeDotDiameter{3pt} +\newlength\cvMargin +\setlength\cvMargin{1cm} +\newlength\cvSideWidth +\setlength\cvSideWidth{0.3\paperwidth-\cvMargin} +\newlength\cvMainWidth +\setlength\cvMainWidth{\paperwidth-4\cvMargin-\cvSideWidth} +\newlength\cvTimeDotSep +\setlength\cvTimeDotSep{0.4cm} +\newlength\cvStartEndSep +\setlength\cvStartEndSep{0.3cm} +\newlength\cvItemSep +\setlength\cvItemSep{0.4cm} +\newlength\cvTableSepWidth +\setlength\cvTableSepWidth{0.3cm} +\newlength\cvCoverLetterHeight +\setlength\cvCoverLetterHeight{\cvSideWidth} +\newlength\cvCoverLetterWidth +\setlength\cvCoverLetterWidth{\cvMainWidth+3\cvMargin} +\newlength\cvPictureWidth +\setlength\cvPictureWidth{4cm} +\newlength\cvProgressAreaWidth +\setlength\cvProgressAreaWidth{5em} +\newlength\cvProgressAreaHeight +\setlength\cvProgressAreaHeight{0.75em} +\newlength\cvSectionSep +\setlength\cvSectionSep{0.6cm} +\newlength\cvSectionSBSep +\setlength\cvSectionSBSep{4pt} +\newlength\cvTitleLineWidth +\setlength\cvTitleLineWidth{2pt} +\newlength\cvTitleLineSpacing +\setlength\cvTitleLineSpacing{0.1cm} +\newlength\cv@projectSep +\setlength\cv@projectSep{0cm} +\newlength\cvProjectDetailsSep +\setlength\cvProjectDetailsSep{0.2cm} +\newlength\cvInterestDetailsSep +\setlength\cvInterestDetailsSep{4pt} +\newlength\cvContactItemSep +\setlength\cvContactItemSep{5pt} +\newlength\cvCoverLetterLineWidth +\setlength\cvCoverLetterLineWidth{3pt} +\newlength\cvCoverLetterPositionSpacing +\setlength\cvCoverLetterPositionSpacing{10pt} +\newlength\cvSBSectionLineWidth +\setlength\cvSBSectionLineWidth{1pt} +\newlength\cvCoverLetterLineSpacing +\setlength\cvCoverLetterLineSpacing{0pt} +\newlength\cvIDNameSep +\setlength\cvIDNameSep{0.1cm} +\newlength\cvPositionSep +\setlength\cvPositionSep{0.5cm} +\newlength\cvSkillSep +\setlength\cvSkillSep{1ex} +\newlength\cvHeaderIconWidth +\setlength\cvHeaderIconWidth{0pt} +\NewDocumentCommand{\cvSection}{m}{\Large\textbf{#1}} +\newcount\my@repeat@count +\NewDocumentCommand{\cvSkill}{m}{% + \begingroup + \my@repeat@count=\z@ + \@whilenum\my@repeat@count<#1\do{\faCircle\advance% + \my@repeat@count\@ne}% + \my@repeat@count=\numexpr5-\z@\relax + \@whilenum\my@repeat@count>#1\do{\faCircleO\advance% + \my@repeat@count\m@ne}% + \endgroup +} +\NewDocumentCommand{\cvhrulefill}{}{{\color{cvGreen}% +\leavevmode\leaders\hrule height \cvSBSectionLineWidth\hfill\kern\z@}} +\NewDocumentCommand{\ruleline}{m}{\par\noindent\raisebox{.6ex}{% +\makebox[\linewidth]{\cvhrulefill\hspace{1ex}% +\raisebox{-.6ex}{#1}\hspace{1ex}\cvhrulefill}}} +\newcounter{cv@titlePrev} +\setcounter{cv@titlePrev}{0} +\newcounter{cv@titleNext} +\setcounter{cv@titleNext}{1} +\NewDocumentCommand{\cv@Title}{mm}{% + \ifnodedefined{cv@last item \the\value{cv@lastItem}}{% + \setlength\cvHeaderIconWidth{\maxof{\cvHeaderIconWidth}{\widthof{\Large #2}}}% + \protected@write\@auxout{}{\global\cvHeaderIconWidth=\the\cvHeaderIconWidth} + \node[% + below=\cvSectionSep of cv@last item % + \the\value{cv@lastItem}.south west, + cv@sectionTitle] + (cv@title \the\value{cv@titleNext}) + {\begingroup\edef\y{\endgroup% + \cvSection\bgroup\noexpand\kleft{% + \extract{#1}{1}}}% + \y\StrGobbleLeft{#1}{1}\egroup}; + \node[% + left=\cvTimeDotSep of cv@title \the\value{cv@titleNext}, + cv@headerIcon] + {#2}; + \node[ + below=\cvSectionSep of cv@last item % + \the\value{cv@lastItem}.south west, + cv@sectionTitle] + (cv@title \the\value{cv@titleNext} dummy) {% + \phantom{\cvSection{Education}}}; + \begin{scope}[on background layer] + \draw[line width=\cvTitleLineWidth,cvGreen] + let \p1=(cv@title \the\value{cv@titleNext} % + dummy.south west), + \p2=(current page.east) in + (\x1,\y1-\cvTitleLineSpacing) to (\x2,\y1-\cvTitleLineSpacing); + \end{scope} + }{% + \node[cv@sectionTitle] at (0,0) (cv@title % + \the\value{cv@titleNext}) + {\begingroup\edef\y{\endgroup% + \cvSection\bgroup\noexpand\kleft{\extract{#1}{1}}}% + \y\StrGobbleLeft{#1}{1}\egroup}; + \node[% + left=\cvTimeDotSep of cv@title \the\value{cv@titleNext}, + cv@headerIcon] + {#2}; + \begin{scope}[on background layer] + \draw[line width=\cvTitleLineWidth,cvGreen] + let \p1=(cv@title \the\value{cv@titleNext}% + .south west), + \p2=(current page.east) in + (\x1,\y1-\cvTitleLineSpacing) to (\x2,\y1-\cvTitleLineSpacing); + \end{scope} +}% +\stepcounter{cv@titlePrev}% +\stepcounter{cv@titleNext} +} +\NewDocumentCommand{\cv@EndSectionDraw}{}{ + \draw (start) to (end.center);} +\newcounter{cv@itemPrev} +\setcounter{cv@itemPrev}{0} +\newcounter{cv@itemNext} +\setcounter{cv@itemNext}{1} +\newcounter{cv@lastItem} +\setcounter{cv@lastItem}{1} +\NewDocumentCommand{\cv@definecvItem}{}{ + \NewDocumentCommand{\cvItem}{m}{% + \ifnodedefined{item \the\value{cv@itemPrev}}{% + \node[% + below=\cvItemSep of item % + \the\value{cv@itemPrev}.south west, + cv@eventdottext] + (item \the\value{cv@itemNext} header) + {\phantom{Evening}}; + \node[% + below=\cvItemSep of item % + \the\value{cv@itemPrev}.south west, + cv@sectionEduText] + (item \the\value{cv@itemNext}) + {##1}; + \node[% + left=\cvTimeDotSep of item % + \the\value{cv@itemNext} header, + cv@timedot] + {}; + }{ + \node[% + below=\cvItemSep of cv@title % + \the\value{cv@titlePrev}.south west, + cv@eventdottext] + (item \the\value{cv@itemNext} header) + {\phantom{Evening}}; + \node[ + below=\cvItemSep of cv@title % + \the\value{cv@titlePrev}.south west, + cv@sectionEduText] + (item \the\value{cv@itemNext}) + {##1}; + \node[ + left=\cvTimeDotSep of item % + \the\value{cv@itemNext} header, + cv@timedot] + (start) + {}; + } + \node[ + left=\cvTimeDotSep of item % + \the\value{cv@itemNext}.south west, + cv@invisibletimedot] + (end) + {}; + \stepcounter{cv@itemPrev} + \stepcounter{cv@itemNext} + } +} +\newif\ifcv@firstskill +\NewDocumentCommand{\cv@skillsTable}{}{} +\NewDocumentCommand{\cvSkillTwo}{mmmm}{% + \ifcv@firstskill + \g@addto@macro\cv@skillsTable{\cvSkill{#1} % + & #2 & \cvSkill{#3} & #4} + \cv@firstskillfalse + \else + \g@addto@macro\cv@skillsTable{\\[\cvSkillSep] \cvSkill{#1} % + & #2 & \cvSkill{#3} & #4} + \fi +} +\NewDocumentCommand{\cvSkillOne}{mm}{% + \ifcv@firstskill + \g@addto@macro\cv@skillsTable{\cvSkill{#1} & #2} + \cv@firstskillfalse + \else + \g@addto@macro\cv@skillsTable{\\[\cvSkillSep] \cvSkill{#1} & #2} + \fi +} +\NewDocumentEnvironment{cvMainContent}{}{% + \begin{tikzpicture}[% + every node/.style={% + inner sep=0pt, + outer sep=0pt}, + remember picture, + overlay, + shift={($(current page.north west)+% + (\cvSideWidth+3\cvMargin+\cvTimeDotSep,-\cvMargin)$)}] +}{% + \end{tikzpicture} +} +\NewDocumentEnvironment{cvMainContent*}{}{% + \stepcounter{titlePrev} + \stepcounter{titleNext} + \begin{tikzpicture}[% + every node/.style={ + inner sep=0pt, + outer sep=0pt}, + remember picture, + overlay, + shift={($(current page.north west)+% + (\cvMargin+\cvTimeDotSep,-\cvMargin)$)}] +}{% + \end{tikzpicture}% +} +\NewDocumentEnvironment{cvEducation}{}{% + \cv@Title{Education}{\faGraduationCap} + \stepcounter{cv@itemPrev} + \stepcounter{cv@itemNext} + \cv@definecvItem + }{% + \cv@EndSectionDraw + \stepcounter{cv@lastItem} + \draw (item \the\value{cv@itemPrev}.south west) + node (cv@last item \the\value{cv@lastItem}) {}; +} +\NewDocumentEnvironment{cvExperience}{}{% + \cv@Title{Experience}{\faBriefcase} + \stepcounter{cv@itemPrev} + \stepcounter{cv@itemNext} + \cv@definecvItem +}{% + \cv@EndSectionDraw + \stepcounter{cv@lastItem} + \draw (item \the\value{cv@itemPrev}.south west) + node (cv@last item \the\value{cv@lastItem}) {}; +} +\NewDocumentEnvironment{cvSkills}{}{% + \cv@Title{Skills}{\faStar} + \global\cv@firstskilltrue +}{% + \node[ + below=\cvSectionSep of cv@title \the\value{cv@titlePrev}% + .south west, + anchor=north west] (skills) % + {\begin{tabular}{@{}ll@{\hskip\cvColSep}ll@{}}% + \cv@skillsTable + \end{tabular}}; + \stepcounter{cv@lastItem} + \draw (skills.south west) node % + (cv@last item \the\value{cv@lastItem}) {}; +} +\NewDocumentEnvironment{cvReferences}{}{% + \cv@Title{References}{\faLink} + \node[ + below=\cvSectionSep of cv@title \the\value{cv@titlePrev}.% + south west, + anchor=north west, + ] (cv@References) \bgroup % +}{% + \egroup; + \stepcounter{cv@lastItem} + \draw (cv@References.south west) node % + (cv@last item \the\value{cv@lastItem}) {}; +} +\pgfkeys{/@cv/references/.is family, + /@cv/references/.unknown/.style = % + {\pgfkeyscurrentpath/\pgfkeyscurrentname/% + .initial = #1}} +\newif\ifcv@refName +\pgfkeys{/@cv/references/name/.is if=cv@refName} +\pgfkeys{/@cv/references/name=false} +\newif\ifcv@refPosition +\pgfkeys{/@cv/references/position/.is if=cv@refPosition} +\pgfkeys{/@cv/references/position=false} +\newif\ifcv@refCompany +\pgfkeys{/@cv/references/company/.is if=cv@refCompany} +\pgfkeys{/@cv/references/copmany=false} +\newif\ifcv@refAddressLineA +\pgfkeys{/@cv/references/address line 1/.is if=% + cv@refAddressLineA} +\pgfkeys{/@cv/references/address line 1=false} + \newif\ifcv@refAddressLineB +\pgfkeys{/@cv/references/address line 2/.is if=% + cv@refAddressLineB} +\pgfkeys{/@cv/references/address line 2=false} +\newif\ifcv@refAddressLineC +\pgfkeys{/@cv/references/address line 3/.is if=% + cv@refAddressLineC} +\pgfkeys{/@cv/references/address line 3=false} +\newif\ifcv@refWorkPhone +\pgfkeys{/@cv/references/work phone/.is if=% + cv@refWorkPhone} +\pgfkeys{/@cv/references/work phone=false} +\newif\ifcv@refMobilePhone +\pgfkeys{/@cv/references/mobile phone/.is if=% + cv@refMobilePhone} +\pgfkeys{/@cv/references/mobile phone=false} +\newif\ifcv@refStored +\pgfkeys{/@cv/references/value stored/.is if=% + cv@refStored} +\pgfkeys{/@cv/references/value stored=false} +\define@key{cvAddReferenceA}{name}{% + \global\def\cv@refAName{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/name = true}}} +\define@key{cvAddReferenceA}{company}{% + \global\def\cv@refACompany{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/company = true}}} +\define@key{cvAddReferenceA}{position}{% + \global\def\cv@refAPosition{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/position = true}}} +\define@key{cvAddReferenceA}{address line 1}{% + \global\def\cv@refAAddressLineA{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/address line 1 = true}}} +\define@key{cvAddReferenceA}{address line 2}{% + \global\def\cv@refAAddressLineB{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/address line 2 = true}}} +\define@key{cvAddReferenceA}{address line 3}{% + \global\def\cv@refAAddressLineC{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/address line 3 = true}}} +\define@key{cvAddReferenceA}{phone work}{% + \global\def\cv@refAPhoneWork{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/phone work = true}}} +\define@key{cvAddReferenceA}{mobile phone}{% + \global\def\cv@refAMobilePhone{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/mobile phone = true}}} +\define@key{cvAddReferenceB}{name}{% + \global\def\cv@refBName{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/name = true}}} +\define@key{cvAddReferenceB}{company}{% + \global\def\cv@refBCompany{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/company = true}}} +\define@key{cvAddReferenceB}{position}{% + \global\def\cv@refBPosition{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/position = true}}} +\define@key{cvAddReferenceB}{address line 1}{% + \global\def\cv@refBAddressLineA{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/address line 1 = true}}} +\define@key{cvAddReferenceB}{address line 2}{% + \global\def\cv@refBAddressLineB{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/address line 2 = true}}} +\define@key{cvAddReferenceB}{address line 3}{% + \global\def\cv@refBAddressLineC{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/address line 3 = true}}} +\define@key{cvAddReferenceB}{phone work}{% + \global\def\cv@refBPhoneWork{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/phone work = true}}} +\define@key{cvAddReferenceB}{mobile phone}{% + \global\def\cv@refBMobilePhone{#1}% + \@IfNoValueOrEmptyTF{#1}{}{\pgfkeys{/@cv/references/mobile phone = true}}} +\NewDocumentCommand{\cvAddReference}{sm}{% + \IfBooleanTF{#1}{% + \setkeys{cvAddReferenceA}{name=,company=, + position=,address line 1=,address line 2=, + address line 3=,phone work=,mobile phone=,#2} + \pgfkeys{/@cv/references/name = true}% + }{% + \setkeys{cvAddReferenceB}{name=,company=, + position=,address line 1=,address line 2=, + address line 3=,phone work=,mobile phone=,#2} + \ifcv@refStored% + \begin{tabular}{@{}L{0.5\cvMainWidth-0.5\cvTimeDotSep% + -0.5\cvTableSepWidth}@{\hskip \cvTableSepWidth}% + L{0.5\cvMainWidth-0.5\cvTimeDotSep% + -0.5\cvTableSepWidth}@{}}% + \ifcv@refName \cv@refAName & \cv@refBName \fi % + \ifcv@refCompany \\ \cv@refACompany & \cv@refBCompany \fi % + \ifcv@refPosition \\ \cv@refAPosition & \cv@refBPosition \fi % + \ifcv@refAddressLineA \\ \cv@refAAddressLineA & \cv@refBAddressLineA \fi % + \ifcv@refAddressLineB \\ \cv@refAAddressLineB & \cv@refBAddressLineB \fi % + \ifcv@refAddressLineC \\ \cv@refAAddressLineC & \cv@refBAddressLineC \fi % + \ifcv@refWorkPhone \\ \cv@refAPhoneWork & \cv@refBPhoneWork \fi % + \ifcv@refMobilePhone \\ \cv@refAMobilePhone & \cv@refBMobilePhone \fi % + \end{tabular}% + \pgfkeys{/@cv/references/value stored = false}% + \else% + \begin{tabular}{@{}L{0.5\cvMainWidth% + -0.5\cvTimeDotSep}@{}}% + \ifcv@refName \cv@refBName \fi % + \ifcv@refCompany \\ \cv@refBCompany \fi % + \ifcv@refPosition \\ \cv@refBPosition \fi % + \ifcv@refAddressLineA \\ \cv@refBAddressLineA \fi % + \ifcv@refAddressLineB \\ \cv@refBAddressLineB \fi % + \ifcv@refAddressLineC \\ \cv@refBAddressLineC \fi % + \ifcv@refWorkPhone \\ \cv@refBPhoneWork \fi % + \ifcv@refMobilePhone \\ \cv@refBMobilePhone \fi % + \end{tabular}% + \fi% + }% +} +\NewDocumentEnvironment{cvSideBar}{}{% + \vspace*{\fill} + \vspace*{-0.5\cvMargin} + \begin{tikzpicture}[remember picture,overlay] + \fill[cvGreenLight] (current page.north west) rectangle % + ++(\cvSideWidth+2\cvMargin,-\paperheight); + \end{tikzpicture}% + \begin{minipage}{\cvSideWidth} + \begin{center} +}{% + \end{center} + \end{minipage} + \vspace*{\fill} +} +\NewDocumentEnvironment{cvSideBar*}{}{% + \vspace*{\fill} + \vspace*{-0.5\cvMargin} + \begin{tikzpicture}[remember picture,overlay] + \fill[cvGreenLight] (current page.north east) rectangle % + ++(-\cvSideWidth-2\cvMargin,-\paperheight); + \end{tikzpicture}% + \begin{minipage}{\cvSideWidth} + \begin{center} +}{% + \end{center} + \end{minipage} + \vspace*{\fill} +} +\NewDocumentEnvironment{cvProfile}{}{% + \vspace{\cvSectionSBSep} + \ruleline{Profile} +}{% +} +\NewDocumentCommand{\cv@ContactTemplate}{mm}{ + \NewDocumentCommand{#1}{m}{ + \ifcv@contactfirst \\ \else % + \global\cv@contactfirsttrue \fi\node[cv@contactIcon]{#2}; + \pgfmatrixnextcell \node[cv@contactText]{##1}; + } +} +\NewDocumentCommand{\cv@ContactTemplateLink}{mm}{ + \NewDocumentCommand{#1}{mm}{ + \ifcv@contactfirst \\ \else % + \global\cv@contactfirsttrue \fi\node[cv@contactIcon]{#2}; + \pgfmatrixnextcell \node[cv@contactText]{% + \@IfNoValueOrEmptyTF{##1}{##2}{\href{##1}{##2}}}; + } +} +\newif\ifcv@contactfirst +\NewDocumentEnvironment{cvContact}{}{% + \vspace{\cvSectionSBSep} + \ruleline{Contact}% + \vspace{\cvSectionSBSep} + + \global\cv@contactfirstfalse + \cv@ContactTemplate{\cvContactAddress}{\faMapMarker} + \cv@ContactTemplate{\cvContactPhone}{\faPhone} + + \cv@ContactTemplateLink{\cvContactEmail}{\faEnvelope} + \cv@ContactTemplateLink{\cvContactWebsite}{\faGlobe} + \cv@ContactTemplateLink{\cvContactGithub}{\faGithub} + \cv@ContactTemplateLink{\cvContactLinkedin}{\faLinkedinSquare} + \cv@ContactTemplateLink{\cvContactTwitter}{\faTwitter} + \cv@ContactTemplateLink{\cvContactKeybase}{\faKey} + \begin{tikzpicture}[% + every node/.style={inner sep=0pt, outer sep=0pt}] + \matrix [ + column 1/.style={anchor=center}, + column 2/.style={anchor=west,align=left}, + column sep=\cvContactItemSep, + row sep=\cvContactItemSep, + inner sep=0pt, + outer sep=0pt] (contact) \bgroup +}{% + \\\egroup; % \\ required, does not compile otherwise + \end{tikzpicture}% +} +\newif\ifcv@interestLong +\cv@interestLongtrue +\newcounter{cv@cvInterestCounter} +\setcounter{cv@cvInterestCounter}{1} +\newcounter{cv@cvInterestCounterPrev} +\setcounter{cv@cvInterestCounterPrev}{0} +\newif\ifcv@interestContent +\cv@interestContentfalse +\NewDocumentCommand{\cv@TypesetTableRows}{}{} +\newif\ifcv@interesttikzopen +\cv@interesttikzopenfalse +\NewDocumentCommand{\cv@interestClose}{}{ + \ifcv@interestLong + \ifcv@interesttikzopen + \end{tikzpicture} + \global\cv@interesttikzopenfalse + \fi + \else + \ifcv@interestContent + \begin{tabular}{@{}cl@{}} + \cv@TypesetTableRows + \end{tabular} + \fi + \fi +} +\NewDocumentCommand{\cv@interestOpen}{}{ + \ifcv@interestLong + \ifcv@interesttikzopen + \else + \cv@interesttikzopentrue + \begin{tikzpicture}[% + every node/.style={inner sep=0cm,outer sep=0cm}] + \fi + \else + \global\def\cv@TypesetTableRows{} + \global\cv@interestContentfalse + \fi +} +\NewDocumentCommand{\cv@definecv@interestSection}{}{ + \NewDocumentCommand{\cv@interestSection}{m}{% + \cv@interestClose\\ + \ifcv@interestContent + \vspace*{2\cvSectionSBSep} + \fi + {\color{cvGreen}---} ##1 {\color{cvGreen}---}\\ + \vspace*{\cvSectionSBSep} + \cv@interestOpen + } +} +\NewDocumentCommand{\cv@definecvInterestLong}{}{ + \NewDocumentCommand{\cvInterest}{mm}{% + \ifcv@interestContent % + \node[ + below=\cvItemSep of cv@interest text \the\value{cv@cvInterestCounterPrev}, + cv@interesticon] + (cv@interest icon \the\value{cv@cvInterestCounter}) {##1}; + \node[ + below=\cvInterestDetailsSep of cv@interest icon \the\value{cv@cvInterestCounter}, + cv@interesttext] + (cv@interest text \the\value{cv@cvInterestCounter}) {##2}; + \else + \cv@interestOpen + \node[cv@interesticon] (cv@interest icon \the\value{cv@cvInterestCounter}) {##1}; + \node[ + below=\cvInterestDetailsSep of cv@interest icon \the\value{cv@cvInterestCounter}, + cv@interesttext] + (cv@interest text \the\value{cv@cvInterestCounter}) {##2}; + \fi + \stepcounter{cv@cvInterestCounter} + \stepcounter{cv@cvInterestCounterPrev} + \global\cv@interestContenttrue + } +} +\NewDocumentCommand{\cv@definecvInterestShort}{}{ + %\def\Z{\vphantom{\parbox[c]{1cm}{\Huge Something Long}}} + \NewDocumentCommand{\cvInterest}{mm}{% + \g@addto@macro\cv@TypesetTableRows{##1}% + \g@addto@macro\cv@TypesetTableRows{&}% + \g@addto@macro\cv@TypesetTableRows{##2}% + \g@addto@macro\cv@TypesetTableRows{\\[\cvInterestDetailsSep]}% + \global\cv@interestContenttrue + } +} +\ExplSyntaxOn +\NewDocumentEnvironment{cvInterests}{o}{% + \cv@interestLongtrue + + \@IfNoValueOrEmptyTF{#1}{}{% + \str_case:nnF {#1}{ + {long}{\cv@interestLongtrue} + {short}{\cv@interestLongfalse} + }{\ClassError{limecv}{Unkown option `#1' for cvInterests % + environment.}{Only `long' and `short' are valid options % + for this environment.}} + } + + \cv@definecv@interestSection + \NewDocumentCommand{\cvInterestsPersonal}{}{% + \cv@interestSection{\faUser\ \emph{Personal}}} + \NewDocumentCommand{\cvInterestsProfessional}{}{% + \cv@interestSection{\faBriefcase\ \emph{Professional}}} + \ifcv@interestLong + \cv@definecvInterestLong + \else + \cv@definecvInterestShort + \fi + %%%%%% + \vspace{\cvSectionSBSep} + \ruleline{Interests}% + \vspace{\cvSectionSBSep} +}{% + \cv@interestClose +} +\ExplSyntaxOff +\newif\ifcv@projectImage +\cv@projectImagefalse +\newif\ifcv@projectLink +\cv@projectLinkfalse +\newif\ifcv@projectWidth +\cv@projectWidthfalse +\newif\ifcv@projectHeight +\cv@projectHeightfalse +\newcounter{cv@projectCurrent} +\setcounter{cv@projectCurrent}{1} +\newcounter{cv@projectPrevious} +\setcounter{cv@projectPrevious}{0} +\define@key{cv@Project}{image}{% + \global\def\cv@projectImage{#1}% + \cv@projectImagetrue} +\define@key{cv@Project}{link}{% + \global\def\cv@projectLink{#1}% + \cv@projectLinktrue} +\define@key{cv@Project}{width}{% + \global\def\cv@projectWidth{#1}% + \cv@projectWidthtrue} +\define@key{cv@Project}{height}{% + \global\def\cv@projectHeight{#1}% + \cv@projectHeighttrue} +\NewDocumentCommand{\cv@definecvProject}{}{ + \NewDocumentCommand{\cvProject}{omm}{% + \cv@projectImagefalse + \cv@projectLinkfalse + \cv@projectWidthfalse + \cv@projectHeightfalse + \@IfNoValueOrEmptyTF{##1}{}{\setkeys{cv@Project}{##1}} + \ifnodedefined{project \the\value{cv@projectPrevious} % + description}{}{% + \node (project \the\value{cv@projectPrevious} % + description) {}; + } + \ifcv@projectImage + \ifcv@projectWidth + \node[below=\cv@projectSep of project % + \the\value{cv@projectPrevious} description] + (project \the\value{cv@projectCurrent} image) + {\includegraphics[width=\cv@projectWidth]{\cv@projectImage}}; + \else + \ifcv@projectHeight + \node[below=\cv@projectSep of project % + \the\value{cv@projectPrevious} description] + (project \the\value{cv@projectCurrent} image) + {\includegraphics[height=\cv@projectHeight]{\cv@projectImage}}; + \else + \ClassError{limecv}{No width or height specified, % + but image specified.}{Always specify the height or % + width if an image is set.} + \fi + \fi + \node[% + text width=\cvSideWidth, + align=center, + below=\cvProjectDetailsSep of project \the\value{cv@projectCurrent} image] + (project \the\value{cv@projectCurrent} title) {% + \ifcv@projectLink \href{\cv@projectLink}{##2} \else ##2 \fi }; + \else + \node[below=\cv@projectSep of project % + \the\value{cv@projectPrevious} description, + text width=\cvSideWidth, + align=center] + (project \the\value{cv@projectCurrent} title) {% + \ifcv@projectLink \href{\cv@projectLink}{##2} \else ##2 \fi }; + \fi + \node[ + below=\cvProjectDetailsSep of project \the\value{cv@projectCurrent} title, + text width=\cvSideWidth, + align=center] + (project \the\value{cv@projectCurrent} description) {##3}; + + \setlength\cv@projectSep\cvItemSep + \stepcounter{cv@projectCurrent} + \stepcounter{cv@projectPrevious} + } +} +\NewDocumentEnvironment{cvProjects}{}{% + \vspace{\cvSectionSBSep} + \ruleline{Projects}% + \vspace{\cvSectionSBSep} + \cv@definecvProject + \begin{tikzpicture}[every node/.style={inner sep=0cm,outer sep=0cm}] +}{ + \end{tikzpicture} +} +\newcounter{cv@languages} +\setcounter{cv@languages}{1} +\pgfkeys{/@cv/languages/.is family, +/@cv/languages/.unknown/.style = {% + \pgfkeyscurrentpath/\pgfkeyscurrentname/.initial = #1}} +\NewDocumentEnvironment{cvLanguages}{}{% + \NewDocumentCommand{\cvLanguage}{mm}{% + {\globaldefs=1\relax\pgfkeys{% + /@cv/languages/lang\the\value{cv@languages} = ##2}} + \node[cv@languageText]{##1}; \pgfmatrixnextcell % + \node[cv@progressArea] (cv@language \the\value{cv@languages}) {}; \\ + \stepcounter{cv@languages} + }% + \vspace{\cvSectionSBSep} + \ruleline{Languages}% + \vspace{\cvSectionSBSep} + \begin{tikzpicture}[% + every node/.style={text depth=0pt,inner sep=0pt,outer sep=0pt}] + \matrix [ + column 1/.style={anchor=east}, + column sep=1.5\cvSectionSBSep, + row sep=1.5\cvSectionSBSep, + column 2/.style={anchor=west,align=left} + ] (contact) \bgroup +}{% + \\\egroup; + \newcounter{cv@languagelevel} + \setcounter{cv@languagelevel}{1} + \loop\ifnum\value{cv@languagelevel}<\value{cv@languages} + \draw (cv@language \the\value{cv@languagelevel}.west) % + node[% + cv@progressBar, + minimum width=\pgfkeysvalueof{% + /@cv/languages/lang\the\value{cv@languagelevel}}em]% + {}; + \stepcounter{cv@languagelevel} + \repeat + \end{tikzpicture} +} +\define@key{cvCoverLetter}{name}{% +\global\def\cv@coverletterName{#1}} +\define@key{cvCoverLetter}{company}{% +\global\def\cv@coverletterCompany{#1}} + +\define@key{cvCoverLetter}{position}{% +\global\def\cv@coverletterPosition{#1}} +\define@key{cvCoverLetter}{address line 1}{% +\global\def\cv@coverletterAddressLineA{#1}} +\define@key{cvCoverLetter}{address line 2}{% +\global\def\cv@coverletterAddressLineB{#1}} +\define@key{cvCoverLetter}{address line 3}{% +\global\def\cv@coverletterAddressLineC{#1}} +\NewDocumentCommand{\cv@definecvBeneficiary}{}{ + \NewDocumentCommand{\cvBeneficiary}{m}{% + \setkeys{cvCoverLetter}{name={},company={}, + position={},address line 1={},address line 2={}, + address line 3={},##1} + \begin{tabular}{@{}l} + \@IfNoValueOrEmptyTF{% + \cv@coverletterName}{}{% + \MakeUppercase{\cv@coverletterName}} % + \@IfNoValueOrEmptyTF{% + \cv@coverletterCompany}{}{\\ % + \cv@coverletterCompany} % + \@IfNoValueOrEmptyTF{% + \cv@coverletterPosition}{}{\\ % + \cv@coverletterPosition} % + \@IfNoValueOrEmptyTF{% + \cv@coverletterAddressLineA}{}{\\ % + \cv@coverletterAddressLineA} % + \@IfNoValueOrEmptyTF{% + \cv@coverletterAddressLineB}{}{\\ % + \cv@coverletterAddressLineB} % + \@IfNoValueOrEmptyTF{% + \cv@coverletterAddressLineC}{}{\\ % + \cv@coverletterAddressLineC} % + \end{tabular}% + \vspace{\cvMargin} + } +} +\NewDocumentCommand{\cv@definecvFullName}{}{ + \NewDocumentCommand{\cvFullName}{}{% + \pgfkeysvalueof{/@cv/info/first name} % + \pgfkeysvalueof{/@cv/info/last name} + } +} +\NewDocumentEnvironment{cvCoverLetter}{}{% + \begin{tikzpicture}[% + remember picture, + overlay, + every node/.style={inner sep=0cm,outer sep=0cm}] + \begin{scope}[on background layer] + \fill[cvGreenLight] (current page.north west) rectangle % + ++(\paperwidth,-\cvCoverLetterHeight); + \end{scope} + \draw (current page.north east) % + ++(-0.5\paperwidth+0.5\cvCoverLetterWidth, + -\cvCoverLetterHeight/2) node (cv@h7) {}; + \node[anchor=east] at (cv@h7) (cv cover letter name){% + \fontsize{50}{60}\selectfont + \begingroup\edef\y{\endgroup% + \noexpand\kleft{\cv@FirstNameLetter}}% + \y + \StrGobbleLeft{\pgfkeysvalueof{/@cv/info/first name}}{1}\space + \StrGobbleRight{\pgfkeysvalueof{/@cv/info/last name}}{1} + \begingroup\edef\y{\endgroup% + \noexpand\kright{\cv@LastNameLetter}}% + \y + }; + \node[% + align=right, + cvAccent, + below=\cvCoverLetterPositionSpacing of cv cover letter name.south east, + anchor=north east]{% + \StrGobbleRight{\pgfkeysvalueof{/@cv/info/position}}{1} + \begingroup\edef\y{\endgroup% + \noexpand\kright{\cv@PositionLetter}}% + \y}; + + \begin{scope}[on background layer] + \draw[line width=\cvCoverLetterLineWidth,cvGreen] + ($(cv cover letter name.south west)+(0,-\cvCoverLetterLineSpacing)$) to + ($(cv cover letter name.south east)+(0,-\cvCoverLetterLineSpacing)$); + \end{scope} + \end{tikzpicture} + \vspace{\dimexpr\cvCoverLetterHeight\relax} + + \begin{center} + \begin{minipage}{\cvCoverLetterWidth} + \today + + \vspace{\baselineskip} + \cv@definecvBeneficiary + \cv@definecvFullName +}{% + \end{minipage} + \end{center} +} +\pgfkeys{/@cv/info/.is family, + /@cv/info/.unknown/.style = % + {\pgfkeyscurrentpath/\pgfkeyscurrentname/% + .initial = #1}} +\NewDocumentCommand{\cvID}{mmmm}{ + \@IfNoValueOrEmptyTF{#3}{}{ + \begin{tikzpicture} + \node[ + circle, + text=white, + minimum size=\cvPictureWidth, + path picture={ + \node at (path picture bounding box.center){ + \includegraphics[width=\cvPictureWidth]{#3} + }; + }] + {}; + \end{tikzpicture}\\ + } + {\LARGE + #1 + \vspace{\cvIDNameSep} + #2} + + \vspace{\cvPositionSep} + + \@IfNoValueOrEmptyTF{#4}{}{\color{cvAccent} #4} + + \vspace{\cvPositionSep} + {\globaldefs=1\relax\pgfkeys{/@cv/info/first name = % + #1}\def\cv@FirstNameLetter{\extract{#1}{1}}} + {\globaldefs=1\relax\pgfkeys{/@cv/info/last name = % + #2}\def\cv@LastNameLetter{\extract{#2}{-1}}} + {\globaldefs=1\relax\pgfkeys{/@cv/info/position = % + #4}\def\cv@PositionLetter{\extract{#4}{-1}}} +} + +\endinput +%% +%% End of file `limecv.cls'. diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check index e6c6140eef9..615831a68d5 100755 --- a/Master/tlpkg/bin/tlpkg-ctan-check +++ b/Master/tlpkg/bin/tlpkg-ctan-check @@ -370,7 +370,7 @@ my @TLP_working = qw( lettre lettrine levy lewis lexikon lexref lfb lgreek lh lhcyr lhelp libertine libertinegc libertinus libertinust1math libgreek librarian librebaskerville librebodoni librecaslon - libris lilyglyphs limap linearA linegoal + libris lilyglyphs limap limecv linearA linegoal lineno ling-macros linguex linop lion-msc lipsum lisp-on-tex listbib listing listings listings-ext listlbls listliketab diff --git a/Master/tlpkg/tlpsrc/collection-publishers.tlpsrc b/Master/tlpkg/tlpsrc/collection-publishers.tlpsrc index 6a50ee09ed0..df4fa0d03d6 100644 --- a/Master/tlpkg/tlpsrc/collection-publishers.tlpsrc +++ b/Master/tlpkg/tlpsrc/collection-publishers.tlpsrc @@ -86,6 +86,7 @@ depend kluwer depend ksp-thesis depend ku-template depend langsci +depend limecv depend lion-msc depend lni depend lps diff --git a/Master/tlpkg/tlpsrc/limecv.tlpsrc b/Master/tlpkg/tlpsrc/limecv.tlpsrc new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/Master/tlpkg/tlpsrc/limecv.tlpsrc |