Merge branch 'readme' into HEAD

This commit is contained in:
Óscar Nájera 2018-05-02 00:28:12 +02:00
commit d922879dcf
13 changed files with 526 additions and 51 deletions

29
.gitlab-ci.yml Normal file
View file

@ -0,0 +1,29 @@
image: najeraoscar/latex-emacs-min
variables:
GIT_SUBMODULE_STRATEGY: recursive
before_script:
- ./installs.sh
test:
script:
- emacs --batch -Q --script genfiles.el
- cd doc; hugo
except:
- master
artifacts:
paths:
- doc/public
pages:
script:
- emacs --batch -Q --script genfiles.el
- cd doc; hugo
- mv doc/public/ public/
artifacts:
paths:
- public
only:
- master

3
.gitmodules vendored Normal file
View file

@ -0,0 +1,3 @@
[submodule "doc/themes/project-landing-page"]
path = doc/themes/project-landing-page
url = https://github.com/Titan-C/github-project-landing-page.git

24
doc/config.toml Normal file
View file

@ -0,0 +1,24 @@
baseURL = "https://titan-c.gitlab.io/org-cv/"
languageCode = "en-us"
title = "Org CV backend export"
theme = "project-landing-page"
[params]
description = "Org-mode backend exporters for CV"
author_url = "http://blog.oscarnajera.com"
author = "Titan-C"
project_url = "https://gitlab.com/Titan-C/org-cv/"
logo = "https://upload.wikimedia.org/wikipedia/commons/a/a6/Org-mode-unicorn.svg"
first_color="#f8f8f8"
first_border_color="#e7e7e7"
first_text_color="#333"
second_color="white"
second_text_color="#333"
header_color="#f8f8f8"
header_text_color="rgb(51, 51, 51)"
header_link_color="#777"
header_link_hover_color="rgb(51, 51, 51)"

View file

@ -0,0 +1,82 @@
+++
title = "Basic Org file"
author = ["Óscar Nájera"]
draft = false
weight = 1003
+++
The basic structure of an org file containing your CV is shown next.
## Personal contact information {#personal-contact-information}
`TITLE`, `AUTHOR` and `EMAIL` are standard org options. But on `TITLE` you
put your foreseen job.
<div class="ox-hugo-table table table-striped">
<div></div>
| Field | Description |
|----------|----------------------------------------------------|
| TITLE | Desired job |
| AUTHOR | Who you are? |
| 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 |
</div>
```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
```
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`.
```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
```

11
doc/content/post/goal.md Normal file
View file

@ -0,0 +1,11 @@
+++
title = "Goal: Export backend for CV"
author = ["Óscar Nájera"]
draft = false
weight = 1001
+++
This project aims to generate from an org-mode file with reasonably ordered
items a latex file which compiles into a reasonably nice CV. In the same
spirit the org-mode file must export to markdown so that it can be uses for
web based CV.

View file

@ -0,0 +1,23 @@
+++
title = "Installation"
author = ["Óscar Nájera"]
draft = false
weight = 1001
+++
This project is not on MELPA so you have to do a manual installation. First
clone this git repository.
```bash
git clone https://gitlab.com/Titan-C/org-cv.git
```
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`.
```emacs-lisp
(use-package ox-moderncv
:load-path "path_to_repository/org-cv/"
:init (require 'ox-moderncv))
```

View file

@ -0,0 +1,94 @@
+++
title = "Latex Exporter"
author = ["Óscar Nájera"]
draft = false
weight = 1004
+++
## Using modern-cv {#using-modern-cv}
[moderncv](https://www.ctan.org/tex-archive/macros/latex/contrib/moderncv) is a standard \\(\LaTeX\\) package that you can find in many of your
latex distributions. For I maintain for personal purposes a fork of it to
better 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.
```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
```
When exporting you can call the following function to get the latex file.
```emacs-lisp
(org-export-to-file 'moderncv "moderncv.tex")
(org-latex-compile "moderncv.tex")
```
<object data="/moderncv.org.pdf" type="application/pdf" width="100%" height="500px">
<p>Alternative text - include a link <a href="/moderncv.org.pdf">to the PDF!</a></p>
</object>
## Using alta-cv {#using-alta-cv}
[AltaCV](https://github.com/liantze/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.
```org
#+LATEX_HEADER: \geometry{left=1cm,right=9cm,marginparwidth=6.8cm,marginparsep=1.2cm,top=1.25cm,bottom=1.25cm}
```
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.
```org
#+latex: \marginpar{
```
```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
```
```org
#+latex: }
```
When exporting you can call the following function to get the latex file.
```emacs-lisp
(org-export-to-file 'altacv "altacv.tex")
(org-latex-compile "altacv.tex")
```
<object data="/altacv.org.pdf" type="application/pdf" width="100%" height="500px">
<p>Alternative text - include a link <a href="/altacv.org.pdf">to the PDF!</a></p>
</object>

BIN
doc/smile.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

1
doc/themes/project-landing-page vendored Submodule

@ -0,0 +1 @@
Subproject commit 24fa3973fe9822c133292fe356132975738c226e

34
genfiles.el Normal file
View file

@ -0,0 +1,34 @@
;; remember the current directory, find-file changes it
(defvar cwd default-directory)
(defvar workdir "/tmp/org-cv-exports/")
(find-file "/tmp/install-org.el")
(eval-buffer)
(add-to-list 'load-path cwd)
(require 'ox-moderncv)
(require 'ox-altacv)
(let ((readme (concat cwd "readme.org")))
(find-file readme)
(make-directory workdir t)
(cd workdir)
(org-babel-tangle))
(copy-file (concat cwd "doc/smile.png") workdir)
(defun export-latex (backend file)
(let ((workfile (concat workdir file))
(outfile (concat workdir file ".tex")))
(message (format "%s exists: %s" workfile (file-exists-p workfile)))
(find-file workfile)
(org-mode)
(org-export-to-file backend outfile)
(shell-command (format "pdflatex %s" outfile) "*Messages*" "*Messages*")
(copy-file (concat file ".pdf") (concat cwd "/doc/static/" (concat file ".pdf")))
))
(make-directory (concat cwd "/doc/static/") t)
(export-latex 'altacv "altacv.org")
(export-latex 'moderncv "moderncv.org")

17
installs.sh Executable file
View file

@ -0,0 +1,17 @@
#!/usr/bin/env bash
wget https://github.com/gohugoio/hugo/releases/download/v0.39/hugo_0.39_Linux-64bit.deb
dpkg -i hugo*.deb
echo "Installed Hugo:"
hugo version
# Latex
latexdir=/root/texmf/tex/latex
mkdir -p $latexdir
echo "Install altacv"
wget https://github.com/Titan-C/AltaCV/archive/sections.zip
unzip -j sections.zip -d $latexdir/AltaCV
echo "Install moderncv"
wget https://github.com/Titan-C/moderncv/archive/master.zip
unzip -j master.zip -d $latexdir/moderncv

View file

@ -139,7 +139,8 @@ holding export options."
"\\personalinfo{\n" "\\personalinfo{\n"
;; address ;; address
(let ((address (org-export-data (plist-get info :address) info))) (let ((address (org-export-data (plist-get info :address) info)))
(when address (format "\\mailaddress{%s}\n" (mapconcat (lambda (line) (format "%s" line)) (when (org-string-nw-p address) (format "\\mailaddress{%s}\n"
(mapconcat (lambda (line) (format "%s" line))
(split-string address "\n") " -- ")))) (split-string address "\n") " -- "))))
;; email ;; email
(let ((email (and (plist-get info :with-email) (let ((email (and (plist-get info :with-email)

View file

@ -1,59 +1,215 @@
#+TITLE: Org exporter for curriculum vitae #+TITLE: Org exporter for curriculum vitae
#+AUTHOR: Óscar Nájera #+AUTHOR: Óscar Nájera
#+EMAIL: hello@oscarnajera.com #+EMAIL: hello@oscarnajera.com
#+DATE: 2018 Mar 22
#+LATEX_HEADER: \usepackage[top=2cm,bottom=2.5cm,left=3cm,right=3cm]{geometry}
#+LATEX_HEADER: \usepackage{indentfirst}
#+LATEX_CLASS_OPTIONS: [a4paper,12pt]
#+STARTUP: hideblocks
#+OPTIONS: toc:nil num:nil
# This is for syntax highlight
#+LaTeX_HEADER: \usepackage{minted}
#+LaTeX_HEADER: \usemintedstyle{friendly}
#+LaTeX_HEADER: \newminted{common-lisp}{fontsize=\footnotesize}
This project aims on generating from an orgmode file with reasonably ordered #+HUGO_BASE_DIR: doc
items of live to export to a latex file which compiles into a reasonably #+HUGO_SECTION: post
nice CV. #+HUGO_WEIGHT: auto
* Update readme * Goal: Export backend for CV
** TODO examples [0/2] :PROPERTIES:
*** TODO pictures :EXPORT_FILE_NAME: goal
*** TODO scripts
* TODO Make a package
Complete the file with license and how to load it.
* DONE Base environment
- State "DONE" from "TODO" [2018-03-22 Thu 17:57]
I have the basic cv template that gets exported
* DONE org-exporter for latex
- State "DONE" from "TODO" [2018-04-05 Thu 03:04]
:LOGBOOK:
CLOCK: [2018-03-22 Thu 23:17]--[2018-03-23 Fri 03:25] => 4:08
CLOCK: [2018-03-22 Thu 17:58]--[2018-03-22 Thu 18:37] => 0:39
:END: :END:
I'm comparing the contents of the template export function. It looks that This project aims to generate from an org-mode file with reasonably ordered
this one give the genera document layout and this is where I shall insert items a latex file which compiles into a reasonably nice CV. In the same
them data. spirit the org-mode file must export to markdown so that it can be uses for
comparing ox-latex, ox-beamer, ox-koma web based CV.
* Installation
I learned quite a lot from the main latex and koma files. Currently I :PROPERTIES:
already reproduce latex export, which is not much as that was already a :EXPORT_FILE_NAME: installation
working output. But now I have the specific keywords for the personal
information part.
** DONE Process headings with properties into cventries
- State "DONE" from "TODO" [2018-03-24 Sat 03:02]
:LOGBOOK:
CLOCK: [2018-03-23 Fri 22:54]--[2018-03-24 Sat 03:05] => 4:11
CLOCK: [2018-03-23 Fri 14:41]--[2018-03-23 Fri 19:05] => 4:24
:END: :END:
I'm constructing the entries quite fine but somehow the intermedia function This project is not on MELPA so you have to do a manual installation. First
refuses to get written even when it appears that its output is correct. clone this git repository.
#+BEGIN_SRC bash
git clone https://gitlab.com/Titan-C/org-cv.git
#+END_SRC
I don't fully understand. But it appear that I need to call the exporter There are various modules to perform the export. As of now =ox-moderncv=,
again within the exporting of the headings. This maybe is what helps =ox-altacv=, =ox-hugocv=. Choose any or all that you prefer for install. I
getting down the subtrees and getting to the latex output. use =use-package= to manage the installation for example of =ox-moderncv=.
** DONE Incorporate from beamer how the do the theme settings
- State "DONE" from "TODO" [2018-03-23 Fri 16:01] #+BEGIN_SRC emacs-lisp
This looks like a fancy way to avoid repetition. Have a look too trying to (use-package ox-moderncv
imitate that behavior for the other personal tags of social media,url,phones. :load-path "path_to_repository/org-cv/"
* DONE Markdown exporter for integration with hugo blog :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 you are? |
| 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. For I maintain for personal purposes a fork of it to
better 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
<object data="/moderncv.org.pdf" type="application/pdf" width="100%" height="500px">
<p>Alternative text - include a link <a href="/moderncv.org.pdf">to the PDF!</a></p>
</object>
#+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
<object data="/altacv.org.pdf" type="application/pdf" width="100%" height="500px">
<p>Alternative text - include a link <a href="/altacv.org.pdf">to the PDF!</a></p>
</object>
#+END_EXPORT
* Local Variables :ARCHIVE:
# Local Variables:
# eval: (add-hook 'after-save-hook #'org-hugo-export-wim-to-md-after-save :append :local)
# End: