TinyTeX tener LaTeX desde R sin esfuerzo

Con el último artículo he aprovechado para actualizar RSTUDIO y de paso, probar TinyTeX la versión de \(\LaTeX\) ligera para R que ha hecho Yihui Xie.

La verdad que, hasta ahora me he apañado bien con MikTeX, pero esta versión de \(\LaTeX\) requiere cierta paciencia y un aprendizaje que no todo el mundo es capaz de sacrificar para la utilidad que obtiene, por eso la idea de una versión de \(\LaTeX\) sencilla y manejable desde R me pareció fantástica y esa es TinyTeX.

Instalar TinyTeX

He aprovechado la última actualización de R y RSTUDIO, para des-instalar MikTeX de un PC y probar la instalación de TinyTeX desde el mismo RSTUDIO.

MiKTeX es una versión completa de \(\LaTeX\) de tropecientos megas e instalación dificil.. una vez hecho va bastante bien, pero es complejo, algo duro al principio. Como ya solo uso \(\LaTeX\) desde R, creo que la mejor opción es usar esta versión ligera de Xie que se puede instalar desde el mismo entorno de RSTUDIO.

Manos a la obra.

… un rato más tarde…..

La prueba ha salido bien, simple y funcional, así que os voy a explicar cómo se hace.

Paso previo-compueba que tienes RTOOLS

Antes de nada hay que tener instalado RTOOLS, si no lo tienes descárgalo, ya que hace falta para la instalación de muchos paquetes, entre ellos este de TinyTeX.

RTOOLs es un programa de librerías que complementa R, se descarga e instala de forma independiente, no tiene interfaz, es solo por las dll que trae. Al descargar he instalar, he optado por la versión ligera y en mi caso solo la de 64 bits.

Instalación de TinyTeX

Ahora si, para instalar TinyTeX, ejecuta el código siguiente desde R. Primero instala la librería library(tinytex), después ejecuta la función de instalación de \(\LaTeX\) :tinytex::install_tinytex(). Lo normal es que tarde un par de minutos en descargar e instalar todos los paquetes \(\LaTeX\) básicos. Después te pedirá que reinicies la sesión de R, compruebas que se ha instalado correctamente con tinytex:::is_tinytex() y listo.

# instalacion de TinyTeX
    install.packages('tinytex')
    tinytex::install_tinytex()
    
    # comprobar la instalación
    tinytex:::is_tinytex()

La principal ventaja de TinyTeX es que instala automáticamente los paquetes de \(\LaTeX\) que necesitas, ya que detecta los que son necesarios por si mismo y no tienes que cambiar de programa para esto, buscar el paquete etc… Esto ya es mucho, porque \(\LaTeX\) es complicadete. Si hay cualquier problema te lo dirá en la ventana de avisos. Con MikTeX por ejemplo tenía que estar revisando los ficheros *.log, para ver qué paquetes faltaban, en TinyTeX esto lo hace solo.

Comprueba la instalación

Una vez hecho el paso anterior, tendrás \(\LaTeX\) en tu PC, y también pdflatex, xelatex y lualatex. Estas son algunas de las impresoras que podrás usar para transformar tu código rmarkdown en pdf.

Yo me inclino por xelatex que me ha dado buenos resultados y pocos problemas. Podemos establecer la impresora pdf en el encabezado YAML como vimos en el post guia-para-imprimir-en-pdf-desde-r, y también desde las opciones de salida del documento en RSTUDIO.

impresora pdf desde RSTUDIO

impresora pdf desde RSTUDIO

Uso de LaTeX par impresión en pdf

Como vimos en el post guia-para-imprimir-en-pdf-desde-r, un lenguaje llamado pandoc es el encargado de convertir nuestro documento escrito en Rmarkdown a la salida final que deseemos, que puede ser pdf, html, word,….. Si la opción es pdf, pandoc lo que hace es generar un fichero *.tex, es decir un fichero en lenguaje de edicion de textos , que después imprime a pdf con las impresoras que hemos nombrado antes.

Con la instalación de \(\LaTeX\), se crean varias impresoras virtuales en el PC de las que hemos hablado: pdflatex, xelatex y lualatex. Cada una tiene sus características que puedes investigar, pero nos quedaremos con xelatex de momento.

Ejemplo

Para probar una salida de documento puedes copiar el siguiente encabezado YAML y meter un texto con capítulos e imprimir a pdf. Verás que la calidad del documento generado en pdf es muy buena.

---
title: "El libro si forma"
author: "FVB"
date: "abril 2019"
keywords: "como no tener forma"
geometry:
- top=1in
- bottom=1in
- right=0.5in
- left=1in
graphics: yes
lang: es
link-citations: yes
linkcolor: blue
documentclass: article
papersize: a5
citecolor: blue
urlcolor: blue
fontsize: 12pt
header-includes:
- \usepackage{graphicx}
- \usepackage{fancyhdr}
- \pagestyle{fancy}
- \fancyhead[L]{\slshape \rightmark}
- \fancyfoot[R]{\textit{\scriptsize www.enrdados.net }}
- \fancyfoot[C]{\thepage}
- \renewcommand{\headrulewidth}{0.2pt}
- \usepackage{fontspec}
- \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}
- \setmainfont{Courier}
- \setmonofont{Times}
output:
  pdf_document: 
    latex_engine: xelatex
    number_sections: yes
    toc: yes
    toc_depth: 2
editor_options: 
  chunk_output_type: console
---

Cambiar el tipo de letra

Vamos a indicar solo una cosay es que el tipo de letra que usa \(\LaTeX\) es un quebradero de cabeza, pues no valen los mismos tipos de letra del sistema que en Windows. Solo se pueden especificar aquellos que estén en \(\LaTeX\) instalados. Normalmente en archivos *.sty que se instalan con el desarrollo \(\LaTeX\) y los que trae por defecto son: palatino, helvet, utopia, times, pifont, courier, bookman, newcent y avant.

Para elegir cualquiera de estos es suficiente con poner en el encabezado YAML esto:

---
fontsize: 11pt
fontfamily: bookman
---

También podemos especificar por separado el tipo de letra principal, y el de las que se usan en los bloques de código (monofont) o sans así:

---
mainfont: times
sansfont: palatino
monofont: courier
---

Otra opción, con más posibilidades de uso de tipos de letra es meterlo en el encabezado de YAML en header-includes: con código \(\LaTeX\) directo, por ejemplo con \setmainfont{Calibri} establecemos la fuente principal en Calibri y con \setmonofont{Tahoma} la monofont es decir la de las porciones de código en Tahoma, siempre que las tengamos en el sistema:

header-includes:
- \usepackage{fontspec}
- \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}
- \setmainfont{Calibri}
- \setmonofont{Tahoma}

¡Ojo!, antes deberías ejecutar la librería extrafont para leer todos los tipos de letra que tienes en el ordenador, e importarlas a R con font_import(), para poderlas usar. Esto puede tardar un rato.

Después de esto si quieres saber los que están disponibles para documentos pdf ejecuta names(pdfFonts())

library(extrafont)
font_import()

# ver letras disponibles para pdf:
names(pdfFonts())
# fuentes disponibles en el dispositivo para pdf
head(names(pdfFonts()), 30)

Conclusiones

La calidad de los documentos que se generan con este sistema es muy superior a los que obtenemos con procesadores normales e texto como word. Me refiero a calidad de edición, pues el resultado es realmente profesional, sin que tengamos que perder el tiempo en cosas como la generación de indices, numeraciones encaje de fotografías o gráficas, etc.. vamos que nos evitamos todos los molestos trabajos a los que los habituales de microchof están acostrumbrados.

Soy un entusiasta de rmarkdown, es maravilloso que puedas escribir un documento complejo, largo y lleno de código y texto como una tesis doctoral con herramientas tan sencillas y fáciles como el marcado de rmarkdown. La impresión final es fantástica y lo mejor es que puedes cambiar de tipo de salida cuando quieras sin tener que hacer cambios en el documento original, es decir, lo mismo puedes sacar el libro en A4 o en A5 y ver cómo queda en un segundo, o cambiar la salida de pdf a word, o en html, sin modificar una coma del texto original. ESTO ES FANTÁSTICO !, aunque tu jefe no lo entienda, es fantástico.

Espero que esto te anime a usarlo, pruébalo, encima es !grátis!.