#+TITLE: Org exporter for curriculum vitae #+AUTHOR: Óscar Nájera #+EMAIL: hello@oscarnajera.com #+HUGO_BASE_DIR: doc #+HUGO_SECTION: post #+HUGO_WEIGHT: auto * Goal: Export backend for CV :PROPERTIES: :EXPORT_FILE_NAME: goal :END: This project exports an org-mode file with reasonably structured items into a latex file, which compiles into a nice CV. In the same spirit the org-mode file may export to markdown so that it can be used for a web based CV. - Online documentation in [[https://titan-c.gitlab.io/org-cv/]] - Development happens in the gitlab repository: https://gitlab.com/Titan-C/org-cv - There is a mirror in github for backup: https://github.com/Titan-C/org-cv This project dog feeds itself and produces the examples on this documentation page directly. * Installation :PROPERTIES: :EXPORT_FILE_NAME: installation :END: This project is not on MELPA so you have to do a manual installation. First clone this git repository. #+BEGIN_SRC bash git clone https://gitlab.com/Titan-C/org-cv.git #+END_SRC There are various modules to perform the export. As of now =ox-moderncv=, =ox-altacv=, =ox-hugocv=. Choose any or all that you prefer for install. I use =use-package= to manage the installation for example of =ox-moderncv=. #+BEGIN_SRC emacs-lisp (use-package ox-moderncv :load-path "path_to_repository/org-cv/" :init (require 'ox-moderncv)) #+END_SRC * Basic Org file :PROPERTIES: :EXPORT_FILE_NAME: basic_config :END: The basic structure of an org file containing your CV is shown next. ** Personal contact information =TITLE=, =AUTHOR= and =EMAIL= are standard org options. But on =TITLE= you put your foreseen job. #+attr_html: :class table table-striped | Field | Description | |----------+----------------------------------------------------| | TITLE | Desired job | | AUTHOR | Who are you? | | EMAIL | Your contact email | | ADDRESS | Mailing address, this can span over multiple lines | | HOMEPAGE | URL of your website | | MOBILE | Mobile phone | | GITHUB | GitHub user | | GITLAB | GitLab user | | LINKEDIN | Linkedin username | | PHOTO | path to photo file | #+BEGIN_SRC org :tangle basic_cv.org ,#+TITLE: My dream job ,#+AUTHOR: John Doe ,#+email: john@doe.lost ,#+ADDRESS: My Awesome crib ,#+ADDRESS: Fantastic city -- Planet Earth ,#+MOBILE: (+9) 87654321 ,#+HOMEPAGE: example.com ,#+GITHUB: Titan-C ,#+GITLAB: Titan-C ,#+LINKEDIN: oscar-najera ,#+PHOTO: smile.png #+END_SRC You can use org-modes hierarchical structure to describe your CV. To make a specific subtree an item describing an experience point (Job you have, degree you pursued, etc.) you use the org properties drawer and with the =:CV_ENV: cventry= property. You should also include the =FROM= and =TO= properties defining the span of the event, as =LOCATION= and =EMPLOYER=. #+BEGIN_SRC org :tangle workcontent.org ,* Employement ,** One job :PROPERTIES: :CV_ENV: cventry :FROM: <2014-09-01> :TO: <2017-12-07> :LOCATION: a city, a country :EMPLOYER: The employer :END: I write about awesome stuff I do. ,** Other job :PROPERTIES: :CV_ENV: cventry :FROM: <2013-09-01> :TO: <2014-08-07> :LOCATION: my city, your country :EMPLOYER: The other employer :END: I write about awesome stuff I do. ,* Other stuff I do - I work a lot - I sleep a lot - I eat a lot #+END_SRC * Latex Exporter :PROPERTIES: :EXPORT_FILE_NAME: latex_export :END: ** Using modern-cv [[https://www.ctan.org/tex-archive/macros/latex/contrib/moderncv][moderncv]] is a standard \(\LaTeX\) package that you can find in many of your latex distributions. I maintain a fork of it, to work with my use case at https://github.com/Titan-C/moderncv.git Feel free to use any or even your personal fork for your desired use case. To configure the export for moderncv you need the addition options in your org file. #+BEGIN_SRC org :tangle moderncv.org # CV theme - options include: 'casual' (default), 'classic', 'oldstyle' and 'banking' ,#+CVSTYLE: banking # CV color - options include: 'blue' (default), 'orange', 'green', 'red', 'purple', 'grey' and 'black' ,#+CVCOLOR: green #+END_SRC # Next block is to generate exports #+BEGIN_SRC org :exports none :tangle moderncv.org #+include: basic_cv.org #+include: sideactivities.org #+include: workcontent.org #+END_SRC When exporting you can call the following function to get the latex file. #+BEGIN_SRC emacs-lisp (org-export-to-file 'moderncv "moderncv.tex") (org-latex-compile "moderncv.tex") #+END_SRC #+BEGIN_EXPORT md #+END_EXPORT ** Using alta-cv [[https://github.com/liantze/AltaCV][AltaCV]] is another project to generate a CV, you will need to install it yourself. I maintain a fork too at https://github.com/Titan-C/AltaCV.git because I need extra features and I encourage to use this fork on the =sections= branch. The style of this CV is more involved and you need some configuration in your org file to get it to work. First define the margins, the large margin to the right is to allow for a second column. #+BEGIN_SRC org :tangle altacv.org ,#+LATEX_HEADER: \geometry{left=1cm,right=9cm,marginparwidth=6.8cm,marginparsep=1.2cm,top=1.25cm,bottom=1.25cm} #+END_SRC # Next block is to generate exports #+BEGIN_SRC org :exports none :tangle altacv.org #+include: basic_cv.org #+END_SRC Content on the right column has the same structure of a org file, but you need to enclose it in the =\marginpar{}= command as shown next. #+BEGIN_SRC org :tangle altacv.org ,#+latex: \marginpar{ #+END_SRC #+BEGIN_SRC org :tangle sideactivities.org ,* Main Interests - Free/Libre and Open Source Software (FLOSS) - Free food - Free beer ,* Programming - Python - C/C++ - EmacsLisp - Bash - JavaScript - PHP ,* Languages - *English* Fluent - *German* Fluent - *Spanish* Native - *French* Intermediate #+END_SRC # Next block is to generate exports #+BEGIN_SRC org :exports none :tangle altacv.org #+include: sideactivities.org #+END_SRC #+BEGIN_SRC org :tangle altacv.org ,#+latex: } #+END_SRC # Next block is to generate exports #+BEGIN_SRC org :exports none :tangle altacv.org #+include: workcontent.org #+END_SRC When exporting you can call the following function to get the latex file. #+BEGIN_SRC emacs-lisp (org-export-to-file 'altacv "altacv.tex") (org-latex-compile "altacv.tex") #+END_SRC #+BEGIN_EXPORT md #+END_EXPORT * Markdown Hugo Exporter :PROPERTIES: :EXPORT_FILE_NAME: hugo_export :END: If your target is not a PDF file but a website, this exporter extends the [[https://ox-hugo.scripter.co/][ox-hugo]] exporter backend. So be sure to install that too. To export, there is nothing fancy to keep track of, but as an example I exclude some tags during export. #+BEGIN_SRC emacs-lisp (let ((org-export-exclude-tags '("noexport" "latexonly"))) (org-export-to-file 'hugocv "hugocv.md")) #+END_SRC You are responsible for styling your website. * License :PROPERTIES: :EXPORT_FILE_NAME: license :END: #+begin_quote org-cv Copyright (C) 2018-2020 Óscar Nájera This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. #+end_quote * Tips :PROPERTIES: :EXPORT_FILE_NAME: tips :END: If you have found this project useful. Please consider giving back. You can kindly tip me for this project - Stellar :: GDPTOFND6HSE5AVHPRXOCJFOA6NPFB65JAEWKTN23EBUGBB2AU4PLIBD - liberapay :: [[https://liberapay.com/Titan-C/][Titan-C]] #+BEGIN_EXPORT md
#+END_EXPORT * Local Variables :ARCHIVE: # Local Variables: # eval: (add-hook 'after-save-hook #'org-hugo-export-wim-to-md-after-save :append :local) # End: