Durante las pasadas fiestas navideñas he podido terminar, ¡por fin! un manual de R que llevo haciendo desde hace tiempo.
Cuando se trata de un hobby y encima tienes muchos lios familiares y cosas que hacer en casa, no queda mucho tiempo para uno mismo, y terminar el manual me ha costado mucho más de lo que hubiera deseado. Así que estas mini vacaciones y sin más planes a la vista más que estar en casa le dí el empujón que necesitaba y terminé una versión en pdf para repartir y compartir.
El resultado a nivel de edición me ha gustado mucho, y creo que aprender algunos conceptos de RSTUDIO para editar libros, artículos o páginas web es un tema muy interesante y que da muy buenos resultados, por lo que voy a explicar hoy cómo sacar un buen pdf con formato perfecto a partir de un fichero de RMarkdown *.Rmd.
Los ficheros *.Rmd de RSTUDIO siguen básicamente el formato estándar de markdown, lo mismo que al escribir este blog de steemit. Puedes buscar en muchas webs los símbolos de preformato básicos de markdown. Los ficheros de markdown son texto plano, aunque normalmente los guardamos con la extensión *.md .
A diferencia de los ficheros *.md (= markdown simple), el *.Rmd tiene unos complementos visibles en el mismo inicio del fichero, visibles nada más abrir el fichero. Estas adicciones son fundamentales y ahorran mucho trabajo.
Así podemos distinguir en las primeras líneas de código la existencia de código encerrado entre el símbolo "---" (tres barras de resta ) , por ejemplo en este fichero:
---
title: "Mi primer libro de chistes"
author: "[email protected]"
date: '2017'
---
# Chiste 1
Estaba Juanito en el colegio.....
Las palabras que aparecen entre los dos símbolos "---" le pasan a RSTUDIO el formato de salida del documento. Es decir definen muchas características generales del documento del tipo formato, y están escritas en un lenguaje simple que hace de intermediario entre RSTUDIO y las librerías de formato como Pandoc, LaTeX, ese lenguaje simple se llama YAML Ain't Markup Language...
Lo único que debemos saber es que YAML es usado ampliamente por aplicaciones de edición de contenido, para definir de manera sencilla el formato final de salida del documento, de forma que lo independizamos del contenido del documento en sí.
De esta forma, un mismo documento, artículo, o estudio podríamos sacarlo en diferentes medios, por ejemplo como articulo en pdf, como presentación de diapositivas o como página web, tan solo cambiando el encabezado YAML del fichero que lo define y no cambiando nada del texto interior.
En esta web puedes ver muchas características de YAML para su uso en RSTUDIO, pero si no te queda claro en los siguientes apartados lo vemos.
Vamos a explicar las diferentes opciones de formato de salida, especialmente para pdf que podemos personalizar con YAML y sacar documentos pdf con acabado profesional.
Para empezar es necesario instalar LaTeX en el PC, para ello debemos bajar la aplicación MIKTEX que es el que nos instalará todas las dll necesarias para la impresión final de los textos pdf.
Con MIKTEX incluso podríamos insertar código LaTeX directamente en Rmd por lo que las posibilidades de impresión son enormes, pero eso en otro post. Ahora vamos a explicar berevemente el significado de varias entradas YAML en el encabezado que podemos o no poner en la zona delimitada por "---":
Dentro de los parámetros del pdf podemos especificar mil cosas, veamos cómo. Primero escribimos output:, y en la siguiente linea indentado a la derecha el formato de salida en este caso pdf escribiendo pdf_document:. Debajo de esto podemos especificar todas las características de la salida pdf que queramos, por ejemplo si incluimos una pagina indice, si van a ser numerados etc..
output:
pdf_document:
toc: true # indicamos que queremos un indice de capítulos
toc_depth: 2 # indicamos que el indice sea hasta el nivel de título 2
number_sections: true # indica si se numeran o no los capítulos del documento
highlight: tango # indica la plantilla de formato usada para salida, existen varias: tango ,espresso, kate, monochromo...
df_print: kable # kable es un paquete que mejora la salida gráfica de tablas de datos, haciendo las tablas más bonitas en la impresión, otra opcion buena es *tibble*
fig_width: 7 # indica el ancho por defecto de las figuras en pulgadas
fig_height: 6 # indica el alto por defecto de las figuras
fig_caption: true # indica que las figuras llevarán título
Una opción muy interesante es meter código LaTeX directamente en el encabezado YAML. Esto se puede hacer de varias formas, la primera especificando el fichero *.tex que contiene el código LaTeX de formato y añadiendo al encabezado YAML el comando include y el nombre del fichero que debe estar en el mismo directorio de trabajo que el fichero *.Rmd ,de la forma:
---
title: "Cosas de RSTUDIO y Markdown"
output:
pdf_document:
includes:
in_header: header.tex # donde header.tex es el nombre del fichero LaTeX
---
Otra forma más directa es escribir el código LaTeX directamente dentro del encabezado YAML después del parámetro header-includes: en la forma siguiente:
# meter código Latex de format en YAML
---
header-includes:
- \usepackage[utf8]{inputenc}
- \usepackage{graphicx}
- \usepackage[labelfont=bf]{caption}
- \usepackage{float}
- \usepackage{fancyhdr}
- \usepackage{fancyheadings}
- \pagestyle{fancy}
- \lhead{\scriptsize Manual de R para el científico de datos}
- \chead{}
- \rhead{\scriptsize \leftmark}
- \lfoot{\textit{www.gritos.org}}
- \cfoot{\includegraphics[height=0.08\textwidth]{imag/logo1.jpg}}
- \rfoot{\thepage}
title: "Manual de R para el científico de datos"
author: "VilBer"
date: 2017
En el código anterior hemos creado encabezados complejos en las páginas del documento, incluyendo incluso imágenes de logos en diferentes posiciones. este código permite crear un formato personalizado al dividir tanto el encabezado como el pie de página en izquierda centro y derecha y posicionando en cada parte lo que queramos.
Para poder personalizar a gusto todo tenemos que saber algo de LaTeX, como que por ejemplo:
Con esta pequeña chuleta podemos personalizar completamente el documento, teniendo en cuenta que según sea el tipo de documento especificado en la clase documentclass (book,article...) la salida será diferente.
Existen muchas plantillas de LaTeX para el tipo de documento (documentclass), las principales por defecto son:
Tipos de documento para especificar en * documentclass* :
Si cargamos en LaTeX la librería KOMA-Script, esta posee muchos más tipos de documento algunos mucho más trabajados (scrbook,scrreprt, scrartcl, scrlttr2) y con mejor presentación que los por defecto (book, report, article y letter respectivamente)