Crear un libro con RSTUDIO by vilber

View this thread on steempeak.com
· @vilber · (edited)
Crear un libro con RSTUDIO
Durante las pasadas fiestas navideñas he podido terminar, ¡por fin! un [manual de R](https://drive.google.com/file/d/1EoLm-rqr5eikmpodb90uIGyju6E1jBjZ/view?usp=sharing) 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.

# Formato 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 ](https://steemitimages.com/DQmQbEEb44y5oVis7Xhy8F4F1SWxxWEcChkvCR4h3bpkp4w/imagen.png) 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:

```{r}
---
title: "Mi primer libro de chistes"
author: "fervilber@gmail.com"
date: '2017'
---
# Chiste 1
Estaba Juanito en el colegio.....
```
## YAML

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](http://yaml.org/) 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](http://rmarkdown.rstudio.com/formats.html) puedes ver muchas características de YAML para su uso en RSTUDIO, pero si no te queda claro en los siguientes apartados lo vemos.

### Parámetros de formato YAML

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](https://miktex.org/) 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 "---":


* **title:**  titulo del documento
* **author:** escribimos el nombre del autor entre comillas
* **author_bio:**  Pequeña descripción de la biografía del autor
* **date:** la fecha del documento y que normalmente aparece en la portada
* **lang:** idioma del documento (español=es)
* **fontsize: ** tamaño del tipo de letra (solo se admite en LaTex 10pt, 11 y 12pt)
* **documentclass:**  el tipo de documento pdf de salida, las plantillas de LaTeX por defecto son: *book*, *article*, aunque se pueden instalar las que deseemos, con un poco más de trabajo
* **classoption:** se ponen algunas características de la edición como por ejemplo las siguientes: ( este comando puede repetirse indicando cada vez una característica:
  * **oneside**  indica que el documento es a una cara
* **summary:** Resumen del documento
* **description:** Descripción del documento.
* **geometry:** damos los márgenes del documento en las siguientes lineas:
 - tmargin=2.5cm    # margen de arriba
 - bmargin=2.5cm  # margen de abajo
 - lmargin=2.5cm # margen de izquierdo
 - rmargin=2cm  # margen de  derecho
* **output:** especificamos el formato de salida y algunas características del mismo en las lineas siguientes
   * **pdf_document:** especificamos características de la salida como pdf
   * **html_document:** especificamos características de la salida como html (por defecto=default)

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

```

### Personalizar más con **LaTeX**

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:
 
*  * \thepage* nos escribirá el número de página.
* * \leftmark* el nombre del capítulo actual.
* * \rightmark* el nombre de la sección actual 
* * \thechapter* que es el número del capítulo actual (por ejemplo "Capítulo 2")
* * \chaptername* que indica el nombre de CAPITULO en el lenguaje o idioma del documento.. en inglés "chapter." en español "capítulo."

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* :

* book : formato libro, cada capítulo inicia una nueva hoja
* report: formato informe
* article: formato de artículo de revista científica, incluye un resumen en la pagina inicial.
* letter: carta
* minimal: lo minimo, solo el tamaño de pagina y el tipo de fuente

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)
properties (22)
post_id25,824,524
authorvilber
permlinkgenerar-un-libro-con-rstudio
categorymarkdown
json_metadata"{"app": "steemit/0.1", "format": "markdown", "links": ["https://drive.google.com/file/d/1EoLm-rqr5eikmpodb90uIGyju6E1jBjZ/view?usp=sharing", "https://steemitimages.com/DQmQbEEb44y5oVis7Xhy8F4F1SWxxWEcChkvCR4h3bpkp4w/imagen.png", "http://yaml.org/", "http://rmarkdown.rstudio.com/formats.html", "https://miktex.org/"], "tags": ["markdown", "r", "yaml", "pdf", "rstudio"]}"
created2018-01-15 12:54:21
last_update2018-01-15 12:55:27
depth0
children0
net_rshares0
last_payout2018-01-22 12:54:21
cashout_time1969-12-31 23:59:59
total_payout_value0.000 SBD
curator_payout_value0.000 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length9,227
author_reputation0
root_title"Crear un libro con RSTUDIO"
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000