Programación literaria en Emacs. 2ª Parte.


Introducción


Como ya vimos en la primera parte sobre Programación Literaria en Emacs, el uso de esta técnica está muy facilitada en nuestro editor preferido, por lo que aunque sea una técnica independiente de la herramienta o software que usemos, el hecho de que Emacs la facilite tanto hace que muchos usuarios de Emacs la usen en su día a día. En un principio la quise comentar porque muchas personas la usan para generar los ficheros de configuración del propio Emacs, pero como digo se puede usar para el día a día de los programadores.


En este caso quiero poner un ejemplo de uso distinto que es para crear nuestro Curriculum Vitae.


Definición del problema y solución


Aunque trabajo en una empresa y me siento bastante estable, las cosas cambian, te pueden echar de la empresa, o simplemente uno puede querer cambiar de empresa, o al menos quiere tener actualizado el CV para lo que pueda pasar. Mi problema con el CV es que por un lado siempre me ha aburrido mucho hacerlo, y por otro lado, soy una persona con muchos intereses. Crear un único CV es arriesgado porque tengo experiencia en campos muy distintos, con lo que decidí que era mejor poder generar distintos CVs dependiendo del tipo de trabajo al que quería optar. El otro asunto, es que me aburre hacer el CV y por lo tanto quería que el mecanismo fuera muy automatizado, así que decidí hacerlo con Latex, un software que permite por un lado generar un documento lleno de marcas a lo HTML y posteriormente a raíz de él generar distintos documentos en distintos formatos como el PDF, Word, LibreOffice, etc.


Para las personas que no sepan acerca de Latex, tendré una serie de artículos al respecto. Pero dejo algo de información por aquí.


Por otra parte, no quería tener distintos documentos de Latex con los distintos tipos de trabajo a los que querría o podría optar, por lo que pensé en centralizarlo todo en un único documento y generar distintos documentos una vez llegado el momento a partir de él.


La programación literaria también me daba la opción de tener muy bien documentado el proceso, ya que Latex, no es algo difícil, una vez que lo usas muchas veces pero reconozco que si estás mucho tiempo sin usarlo se puede olvidar un poco como funciona. Y como hace tiempo que sustituí Latex por un lenguaje de marcado del propio Emacs, que es org-mode, pues no tenía ganas de tener que estar recordando Latex, cada vez que quisiera actualizar mi CV, también decir que hacer un CV con Latex no es lo más habitual.


Combinando Latex y la programación literaria


Bien lo que vamos a usar es un paquete de Latex llamado cvmodern, donde si vamos a su web vemos como funciona. En la misma web hay un fichero .tex de ejemplo auto-documentado. Esa documentación es muy útil, pero como digo, para los que hemos descubierto la programación literaria la forma de hacer según este principio es mucho más claro y mejor.


https://ctan.org/pkg/moderncv


Para no hacer el artículo muy largo no voy a explicar el fichero de Latex para crear un CV, si fuera necesario por favor, contactar conmigo y sin problemas haré un artículo específico para ello. Vamos a ir directamente al fichero escrito en Emacs. En Emacs gracias a la marcación de ORG y al paquete babel que incluye Emacs por defecto podemos generar distintos ficheros. Vamos a ver como.


Empezamos con nuestro típico documento en ORG con lo yo siempre empiezo:


------------------------------------------------------
#+TITLE: curriculums
#+AUTHOR: Patricio Martínez
#+EMAIL: maxxcan@disroot.org`
---------------------------------------------------------------------------------

Eso es fácil, ahora en el documento Latex tendremos que poner distintos parámetros para el estilo del documento incluido, el agregar el paquete de cvmodern para que el documento se transforme en un CV y además alguno parámetros específicos como el color que queremos que tenga nuestro CV.


-------------------------------------------------------
* Currículum de Patricio Martínez

** Configuración del currículum

En esta parte configuraremos cosas como:

1. El estilo del documento
2. Añadiremos los paquetes necesarios
3. Ajustaremos los márgenes de la página

#+name: color
#+BEGIN_SRC latex
blue
#+END_SRC

#+NAME: configuracion del cv 
#+begin_src latex :noweb yes
\documentclass[11,a4paper]{moderncv}
% estilos del cv
\moderncvstyle{classic} %otras opciones son nocolor (blanco y negro) y roman y classic
\moderncvcolor{<<color>>}
\usepackage{hyperref}

% codificación de los caractéres
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern} 
\usepackage{graphicx}
\usepackage{marvosym}

% ajustando los margenes de la página
\usepackage[scale=0.8]{geometry}
\recomputelengths
#+end_src
---------------------------------------------------------------------

Como podéis observar hay una parte en nuestro documento ORG que es la parte de empieza con #+BEGIN_SRC latex y termina con #+END_SRC latex. Ese código es el que cuando creemos nuestro fichero código, donde sólo habrá código Latex, es el que aparecerá en el documento Latex. Además, antes del #+BEGIN_SRC latex, encontramos una entrada que pone #+NAME: pues ahí eso es como una especie de variable que podremos añadir posteriormente, sería para sustituir la palabra COLOR por BLUE, en nuestro primer ejemplo. En la segunda parte del código sutituiriamos la parte que pone CONFIGURACiON DEL CV por todo lo que hay dentro de las etiquetas BEGIN_SRC Y END_SRC. Sigamos:


Ahora en nuestro documento ORG vamos a escribir como "variables" nuestros datos personales


------------------------------------------------------------
** Datos personales del usuario del cv

#+name: nombre 
#+begin_src latex
Patricio
#+end_src 

#+name: apellidos
#+begin_src latex
Martínez Cano
#+end_src

#+name: título
#+begin_src latex 
Consultor IT y Docente Freelance
#+end_src

#+name: teléfono
#+begin_src latex 
+34 555 55 55
#+end_src 

#+name: correo
#+begin_src latex 
maxxcan@disroot.org
#+end_src

#+name: web
#+begin_src latex
gemini://maxxcan.flounder.online
#+end_src 

#+name: linkedin
#+BEGIN_SRC latex
maxxcan
#+END_SRC

#+name: github
#+BEGIN_SRC latex
maxxcan
#+END_SRC

#+name: foto
#+begin_src latex 
patricio.png
#+end_src 

#+name: cita
#+BEGIN_SRC latex
El mayor riesgo es no asumir ningún riesgo... En un mundo que cambia realmente rápido, la única estrategia en la que el fracaso está garantizado es la de no asumir riesgos.
#+END_SRC
----------------------------------------------------------------------------------------------------------------------

Bueno, como he dicho, esto es una especie de forma de crear variables, para que luego en cuenta yo quiera cambiar algún dato o crear un CV para otra persona, solo tenga que ir a esta sección y cambiarlo ahí. (nota personal: La cita es una chorrada :-) )


Ahora veamos como esas "variables" van a ser aplicadas en una parte del código de ORG que cuando generemos el código LATEX serán exportadas.


---------------------------------------------------
#+name: datos personales
#+begin_src latex :noweb yes :results silent
\firstname{\huge <<nombre>>}
\familyname{\huge <<apellidos>>}
\title{<<título>>}
\phone[mobile]{<<teléfono>>}
\email{<<correo>>}
\homepage{<<web>>}
\social[linkedin]{<<linkedin>>}
\social[github]{<<github>>}
\photo[64pt]{<<foto>>}
\quote{<<cita>>}
#+end_src
---------------------------------------------------

Como podéis ver esas "variables" para que se transformen en la parte del código que hemos comenzado con #+NAME, se ponen entre comillas españolas.


Sigamos con otras partes del código necesario como aquella específica del paquete cvmodern para ajustar margenes y otras weas.



------------------------------------------------------------------------------------
** Arreglos (sin sentido para mí)

#+name: arreglos
#+begin_src tex 
% the ConTeXt symbol
\def\ConTeXt{%
  C%
  \kern-.0333emo%
  \kern-.0333emn%
  \kern-.0667em\TeX%
  \kern-.0333emt}

% comando y color independiente del moderncv 
\definecolor{see}{rgb}{0.5,0.5,0.5}% for web links
\newcommand{\up}[1]{\ensuremath{^\textrm{\scriptsize#1}}}
#+end_src 
-------------------------------------------------------------------------------------------------------------------------------

Ahora vamos con el tema de añadir nuestros estudios, experiencia profesional. idiomas, etc,


--------------------------------------------------------------------------------------

** Formación académica

Aquí ponemos 6 campos entre corchetes. Los campos se refieren a lo siguiente:

+ Año de la formación académica
+ Título
+ Institución
+ Ciudad
+ Curso actual
+ Descripción


#+name:estudios
#+begin_src latex :noweb yes
{2012}{Licenciatura en Biología}{Universidad de Murcia}{Murcia}{}{}
#+end_src

#+name: formación académica
#+begin_src latex :noweb yes
\section{Formación Académica Oficial}
\cventry<<estudios>>
#+end_src


-----------------------------------------------------------------------------------------

Seguimos observando como primero con el lenguaje de marcado de ORG explico la sección que va a continuación, luego creo una "variable" que se llama estudios y luego genero entre las etiquetas BEGIN_SRC latex y END_SRC latex el código Latex que se exportará donde sustituirá la parte del código precedido con NAME:estudios en la parte entre comillas <<estudios>>.



Creo que se va entendiendo, pero con la siguiente parte del documento lo veréis de nuevo:


----------------------------------------------------------------

** Formación complementaria

También son 6 campos que pondremos entre corchetes. Los campos se refieren a:


+ Año
+ Nombre de la formación
+ Número de horas de la formación
+ Lugar de la formación
+ Otros



#+name: complementaria
#+begin_src latex :noweb yes 
{2001}{Cursos de administración de sistemas operativos}{80h}{Universidad de Murcia}{}{}
{2001}{Curso de informática en sistemas Windows: Word, Excel y Access}{Universidad de Murcia}{70h}{}{}
{2003}{Asistencia al II Curso de Introducción a la informática para científicos}{Universidad de Murcia}{}{}{}
{2003}{Alumno interno en el departamento de fisiología animal (área de nutrición)}{400h}{Universidad de Murcia}{}{}
{2006}{Colaboración en distintos departamentos para la investigación y desarrollo de aplicaciones sobre bases de datos para la gestión y control de materiales biológicos y catálogos}{}{}{}{}
{2006}{Asistencia y participación en el XI Congreso de Métodos Cuantitativos, Sistemas de Información Geográfica y Teledetección}{Universidad de Murcia}{}{}{}
{2006}{Curso de Teledetección, tratamientos, bases de datos y aplicaciones}{}{}{}{}
{2008}{Curso de Experto en Microsoft  Dinamic Navition. (ERP y CRM)} {40 horas}{}{}{}
{2009}{Curso de Inglés de nivel medio}{Universidad de Murcia}{}{}{}
#+end_src

#+name: formación complementaria
#+begin_src latex :noweb yes
\section{Formación Complementaria}
\cventry<<complementaria>>
#+end_src
-----------------------------------------------------------------------------------------------------------------------------

Creo que vamos pillando la idea ¿no?. Los bloques de código, los cuales son los que están entre las etiquetas BEGIN_SRC Y END_SRC son los que se exportan cuando generamos el documento de código, y los que van precedidos de la etiqueta NAME sustituirán las zonas que pongamos entre comillas españolas << >> el mismo nombre que hemos puesto en la etiqueta NAME en otras parte del documento.


No escribo más partes de mi documento ya que os pongo el enlace a continuación.


Pero ahora vayamos a la última parte donde unimos todo el código y generamos nuestro documento Tex final:


--------------------------------------------------------------------------------------------------------------------
** Juntando todo el código

*** CV Para docente 

#+begin_src latex :tangle cv-docente.tex :noweb yes :padline no :results silent
<<configuracion del cv>>
<<datos personales>>
<<arreglos>>
\begin{document}
\maketitle
<<formación académica>>
<<formación complementaria>>
<<experiencia profesional>>
<<experiencia docente>>
<<idiomas>>
<<conocimientos>>
<<otras consideraciones>>
\end{document}
#+end_src 

*** CV Para SysAdmin 

#+begin_src latex :tangle cv-sysadmin.tex :noweb yes :padline no :results silent
<<configuracion del cv>>
<<datos personales>>
<<arreglos>>
\begin{document}
\maketitle
<<formación académica>>
<<formación complementaria>>
<<experiencia profesional>>
<<idiomas>>
<<conocimientos>>
<<otras consideraciones>>
\end{document}
#+end_src 
 
--------------------------------------------------------------------------------------

Si vemos los parámetros que van después de la etiqueta BEGIN_SRC latex, el más importante es el :tangle, con él definimos el nombre del fichero que vamos a generar, cuando ejecutemos el comando correspondiente en Emacs.


Así que si vemos, una vez que yo ejecute la orden adecuada, de mi fichero llamado curriculums.org se generarán dos ficheros distintos, uno llamado cv-docente.tex y cv-sysaadmin.tex, también puedo generar otros. Y finalmente en el documento ORG agrego el comando que hay que ejecutar en Emacs por si se me olvidara o si se lo tengo que dar a otra persona para que lo haga.


--------------------------------------------------------------------------------------

* Exportando 

Tal como he indicado en la propia plantilla para exportar el código podemos usar la combinación de teclas C-c C-v t
(C es control) o bien escribir en el minibuffer con Alt-x, org-babel-tangle

Como vemos al final hay dos conjuntos de código que tienen la orden :tangle y nombre de archivo.
Ese tangle significa que ese código se generará en un fichero que le hemos indicado.

------------------------------------------------------------------------------------------------------------------------------------

Ya solo nos quedería compilar los documentos .tex y ya tendríamos 2 o 3 o los que hayamos configurado, pdfs bonitos para presentar en distintas empresas si fuera necesario.


Finalizando


No soy para nada un usuario avanzado de ORG y Babel, así que os dejaré los enlaces al manual de ORG y a otros sitios interesantes por si queréis profundizar aún más en este asunto de la programación literaria. Mi idea era poneros un ejemplo para no programadores de algunas de las posibilidades que nos ofrece, pero hay muchísimas más.


Además también comentar que es muy habitual que muchos usuarios de Emacs la usen para la configuración de Emacs, y por eso también la quería comentar ya que en un futuro post comentaré mi propia configuración de Emacs y por qué la hago con programación literaria al igual que muchos otros usuarios de Emacs. Aún así, Emacs es tan amplio y sobre todo nos da tanta libertad que el cómo yo hago la configuración es un asunto puramente personal, muchas personas lo hacen de manera distinta y todas son maravillosas.


Os dejo el enlace a los ficheros fuente



Saludos y que Emacs os acompañe en todas vuestras tareas.


Enlaces recomendados



Introducción a ORG + BABEL


Introducción a la programación literaria


Introducción a la programación literaria con ORG-MODE


Introducción a Latex



--------------------------------------------------------------------------------------------------------------------------


Si estás viendo este artículo desde un navegador web a través del proxi de flounder, aconsejo que accedas a la dirección de gemini usando un navegador compatible con este protocolo.


Gemini, es un protocolo minimalista que minimiza el uso de recursos del cliente y del servidor reduciendo las emisiones de carbono y además no permite el uso de programas que accedan a tu información personal, por lo que tu privacidad está asegurada.


Usa Gemini, salva al planeta, salva tus datos. Por un futuro mejor.



/informatica/emacs/articulos/