Cuestiones Prácticas sobre el uso de la Plantilla de TFE

Autor

Pedro L. Luque

Fecha de Publicación

19 septiembre 2022

1 Tareas habituales al escribir documentos R Markdown

1.1 Mostrar los chunks de código R y las opciones

Un chunk de código R comienza con tres acentos abiertos: ```{r} donde r indica el nombre del lenguaje1 y finaliza con tres acentos abiertos. Pueden escribirse opciones adicionales a un chunk en las llaves (por ejemplo, se define la altura de un gráfico en 5 centímetros: ```{r fig.height='5cm'}).

Nota importante: las opciones de un chunk deben estar escritas en una misma línea de texto.

Una “expresión R en línea” o en el interior de un párrafo comienza con `r y finaliza con un acento abierto `.

Para marcar texto como “código en línea” use un par de acentos abiertos, por ejemplo, `code`. Para incluir \(n\) acentos abiertos literalmente, se deben usar al menos \(n+1\) acentos abiertos que los envuelvan, por ejemplo, pueden usarse 4 acentos abiertos para preservar 3 acentos abiertos dentro: ```` ```code``` ````, lo cual se mostrará como: ```code```.

Si lo que se quiere es mostrar literalmente los chunks de código junto a las opciones seleccionadas, ver el código utilizado en el siguiente ejemplo:


````markdown
código markdown que quiera mostrarse

````

También se podría escribir lo siguiente:

Esto es un párrafo en un documento R Markdown.

A continuación se muestra un chunk de código R:

```{r}
fit = lm(dist ~ speed, data = cars)
b   = coef(fit)
```

La pendiente de la regresión es `r round(b[1],4)`

La última frase se mostraría así:

Salida

La pendiente de la regresión es -17.5791.

Hay una gran cantidad de opciones para los chunks en knitr documentadas en https://yihui.name/knitr/options. A continuación, enumeramos un subconjunto de ellas:

  • eval: si evalúa un fragmento de código (TRUE) o no (FALSE).

  • echo: si se debe presentar (TRUE) el código fuente en el documento de salida o no presentar el código fuente utilizado (FALSE).

  • result:

    • cuando se establece en 'hide' (ocultar), la salida producida se ocultará;

      ```{r echo=TRUE,results='hide'}
      cat('**Markdown** es genial. \n')
      ```
    • cuando se establece en 'asis', la salida de texto se escribe “tal cual”, por ejemplo, puede escribirse el texto markdown sin procesar el código R (como cat('**Markdown** es genial. \n')).

      ```{r echo=TRUE,results='asis'}
      cat('**Markdown** es genial. \n')
      ```
      Salida
      cat('**Markdown** es genial. \n')

      Markdown es genial.

    • De forma predeterminada ('markup' y 'hold'), la salida de texto se envolverá en elementos textuales (generalmente bloques de código simple).

      ```{r echo=TRUE, results = "hold"}
      cat('**Markdown** es genial. \n')
      ```
      Salida
      cat('**Markdown** es genial. \n')
      ## **Markdown** es genial.
  • warning, message, y error: si se muestran o no advertencias, mensajes y errores en el documento de salida. Tenga en cuenta que si establece error = FALSE, rmarkdown::render() se detendrá al encontrar un error en un fragmento de código, y el error se mostrará en la consola R, si error = TRUE, no se detendrá cuando encuentre un error en el chunk y mostrará el mensaje de error. De manera similar, cuando warning = FALSE o message = FALSE, estos mensajes se mostrarán en la consola R.

    ```{r echo=TRUE,error=TRUE}
    si(3.2)
    ```
    Salida
    si(3.2)
    ## Error in si(3.2): could not find function "si"
  • child: puede incluir un documento hijo a un documento principal. Esta opción toma una ruta a un archivo externo.

    ```{r child="fichero01.Rmd"}
    ```

En este enlace url-bookdown puede obtenerse más información sobre las opciones en un chunk de código R.

1.2 Cómo incluir un gráfico

1.2.1 Incluir un fichero gráfico en el documento

Supongamos que se tiene el fichero gráfico “capitulo05ejemplo01.png” en la subcarpeta “graficos”. Este fichero gráfico puede proceder de

  • un fichero gráfico descargado de internet,
  • una captura de pantalla que hemos obtenido de nuestro ordenador,
  • una ilustración que hemos diseñado con carácter didáctico que hemos guardado en un fichero gráfico, etc.

A continuación se ha escrito el comando LaTeX: “\clearpage”, el cual provoca un salto de página en el punto del texto en el que se ha escrito.

\clearpage

1.2.1.1 Incluir un gráfico sin leyenda y justo aquí

Si queremos incluirlo sin ningún tipo de leyenda explicativa y justamente en la posición que lo hemos colocado, podríamos hacerlo con ayuda del siguiente “chunk de código R”:

```{r echo=FALSE,out.width='70%',fig.align='center',fig.pos="H"}
knitr::include_graphics("graficos/capitulo05ejemplo01.png")
```

1.2.1.2 Incluir un gráfico con leyenda y justo aquí

Si queremos incluirlo con una leyenda explicativa con una numeración que lo identifica para poder hacer referencia a él en cualquier parte del documento y además aparezca justamente en la posición que lo hemos colocado, podríamos hacerlo con ayuda del siguiente “chunk de código R”:

```{r echo=FALSE,out.width='8cm',fig.align='center',
fig.cap="\\label{fig:c05ej01}Se muestra el panel Files de RStudio 
(fuente: elaboraci\\'on propia)",fig.pos="H"}
knitr::include_graphics("graficos/capitulo05ejemplo01.png")
```
Figura 1.1: Se muestra el panel Files de RStudio (fuente: elaboración propia)

En cualquier parte del documento, delante o detrás del gráfico, puede hacerse referencia a la figura Figura 1.1 y además puede indicarse la página en la que se encuentra: página 5.

En cualquier parte del documento, delante o detrás del gráfico, puede 
hacerse referencia a la figura \ref{fig:c05ej01} y además puede indicarse 
la página en la que se encuentra: página \pageref{fig:c05ej01}.

1.2.1.3 Gráfico con leyenda y posición flotante: superior o inferior

En muchos tipos de publicaciones se recomienda que las figuras y tablas se coloquen por motivos estéticos en la parte superior o inferior de una página.

Esta forma de trabajar evita un efecto no deseado de espacios verticales en blanco. Ya que cuando se quiere colocar una figura en una posición particular, muchas veces se queda un espacio en blanco, debido a que por su tamaño tenga que llevarse a la página siguiente (LaTeX actúa automáticamente repartiendo ese espacio vertical sobrante entre los elementos de la página, ver lo que ocurre en la página 3).

Esto requerirá que cuando se habla de la Figura o Tabla, se utilice un elemento que la identifique. Para ello, se utilizará la pareja “label-ref” vista en el apartado anterior.

Lo habitual es hacer la primera referencia cerca de donde esté ubicada. Como vemos en la Figura Figura 1.1 (ver url).

En R Markdown se tiene que utilizar en la opción del chunk correspondiente: fig.pos="t" para colocarla en la parte superior, fig.pos="b" para colocarla en la parte inferior de una página y fig.pos="htbp" para colocarla por orden: “aquí-superior-inferior-páginasolotablas”, pero a partir de la página en la que se haya colocado la figura (se decide automáticamente).

Nota. Se recomienda el uso de la opción fig.pos="htbp" o fig.pos="!htbp" para que no aparezcan espacios en blanco adicionales (! obliga). Se puede obligar a que en el caso que no se especifique se comporte obligadamente como indiquemos con floatplacement{figure}{} o floatplacement{table}{} . Por ejemplo, si queremos obligar que las figuras se coloquen como: “!bthp”.

\floatplacement{figure}{!bthp}

Nota. El comando LaTeX: \clearpage produce salto de página pero obliga a que todas las figuras o tablas que se hayan incluido anteriormente sean mostradas. Ver más en ayuda overleaf.

```{r echo=FALSE,out.width='8cm',fig.align='center',
fig.cap="\\label{fig:c05ej02}Un ejemplo de figura colocada 
en la parte superior de un documento 
(Fuente: \\url{http://destio.us.es/calvo})",fig.pos="t"}
knitr::include_graphics("graficos/capitulo05ejemplo01.png")
```
Figura 1.2: Un ejemplo de figura colocada en la parte superior de un documento (Fuente: http://destio.us.es/calvo)

1.2.2 Incluir un gráfico creado con R en el documento

Se tienen las mismas posibilidades que el caso de un fichero gráfico, pero habitualmente en este caso el gráfico se construye con funciones de R en un chunk de código R.

También es posible construir el gráfico con funciones R en un fichero de script R y guardar el resultado en un fichero gráfico (ver comandos: png() y dev.off(), ggplot2::ggsave()). Para incluirlo en el documento R Markdown se haría lo visto en la sección anterior.

El siguiente código ilustra cómo crear un fichero con ayuda del paquete “ggplot2” y lo grabamos en un fichero “.png” con ayuda de la función ggsave().

library(ggplot2)
p = ggplot(mtcars, aes(mpg, wt)) + 
  geom_point()
ggsave("figurasR/capi05mtcars.png",plot=p)

Para incluirlo en el documento se podría utilizar el siguiente chunk de código R (lo coloca aquí porque por defecto se ha definido fig.pos="H"):

```{r echo=FALSE,out.width='70%',fig.align='center'}
knitr::include_graphics("figurasR/capi05mtcars.png")
```

También se pueden grabar con las funciones png(), jpeg(), pdf(), etc, y dev.off(), como se ilustra en los siguientes ejemplos de código R:

png(file = "figurasR/capi05myplot.png", bg = "transparent")
plot(1:10)
rect(1, 5, 3, 7, col = "white")
dev.off()
 # creará myplot1.jpg y myplot2.jpg
jpeg(file = "figurasR/capi05myplot%d.jpg")
example(rect) # genera 2 gráficos
dev.off()

1.2.2.1 Incluir un gráfico creado con R sin leyenda y justo aquí

Se demuestra con un ejemplo que usa el paquete “ggplot2”, en el que además el gráfico aparece centrado (se ha indicado: fig.align='center', pero hay otros valores para esta opción: 'left', 'right'. Si no se utiliza aparece justificada a la izquierda).

```{r echo=FALSE,out.width='80%',fig.align='center',fig.pos='H'}
library(ggplot2)
p = ggplot(mtcars, aes(mpg, wt)) + 
  geom_point()
p  
```

1.2.2.2 Incluir un gráfico creado con R con leyenda y situado en la parte superior

El gráfico de la Figura Figura 1.3 es un ejemplo de gráfico creado con R y aparece con una leyenda explicativa y colocado en la parte superior de la página.

```{r echo=FALSE,out.width='80%',fig.align='center',fig.pos='htbp',
fig.cap="\\label{fig:cap05gg02}Gr\\'afico de L\\'{\\i}neas creado 
         con ggplot2 (fuente: elaboraci\\'on propia)"}
library(ggplot2)
ggplot(mtcars, aes(mpg, wt)) + 
  geom_line(col="blue")
```
Figura 1.3: Gráfico de Líneas creado con ggplot2 (fuente: elaboración propia)

1.2.2.3 Varios gráficos creados con R con varias leyendas

Con el siguiente código se pueden presentar dos gráficos en una única figura y además se puede colocar una leyenda explicativa a cada gráfico (obtenido en: stackoverflow).

Observe que no se ha usado label en fig.cap, el identificador se ha construido del identificador del chunk: “plot-cars” al que se le ha añadido como prefijo: “fig:”, quedando el identificador para usar con ref: “fig:plot-cars”. A las subfiguras se les ha añadido números consecutivos.


Vea la Figura \ref{fig:plot-cars}, la cual contiene la Figura 
\ref{fig:plot-cars-1} y la Figura \ref{fig:plot-cars-2}.

```{r plot-cars, fig.height = 3, fig.width = 4,out.width='49%', 
fig.cap="Dos gr\\'aficos", fig.subcap = c("Regresi\\'on", 
"Gr\\'afico sobre cars"),fig.pos="htbp"}
plot(mpg ~ wt, data = mtcars)
plot(cars)
```

Vea la Figura Figura 1.4, la cual contiene la Figura Figura 1.4 (a) y la Figura Figura 1.4 (b).

plot(mpg ~ wt, data = mtcars)
plot(cars)
(a) Regresión
(b) Gráfico sobre cars
Figura 1.4: Dos gráficos

Otro ejemplo en el que solamente se usa una leyenda para los dos gráficos (también se modifican los márgenes). Importante el uso de la opción de chunk: fig.show=“hold”.

```{r out.width='45%',fig.show="hold",echo=FALSE,
        fig.cap="Dos gr\\'aficos R cara a cara",fig.pos="htbp"}
par(mar = c(4, 4, 0.1, 0.1))
plot(pressure, pch = 19, type = "b")
plot(cars, pch = 19)
```

Produce la Figura 1.5.

Figura 1.5: Dos gráficos cara a cara

1.3 Cómo incluir una tabla o cuadro con información

Para profundizar en el tema de la presentación de tablas de información se recomienda visitar la siguiente url: Cómo Crear tablas de información en R Markdown.

1.3.1 Incluir una tabla con leyenda

La presentación de las primeras 10 filas de un data.frame de R, por ejemplo, el dataset iris, puede hacerse del siguiente modo:

head(iris,10)
##    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1           5.1         3.5          1.4         0.2  setosa
## 2           4.9         3.0          1.4         0.2  setosa
## 3           4.7         3.2          1.3         0.2  setosa
## 4           4.6         3.1          1.5         0.2  setosa
## 5           5.0         3.6          1.4         0.2  setosa
## 6           5.4         3.9          1.7         0.4  setosa
## 7           4.6         3.4          1.4         0.3  setosa
## 8           5.0         3.4          1.5         0.2  setosa
## 9           4.4         2.9          1.4         0.2  setosa
## 10          4.9         3.1          1.5         0.1  setosa

Pero para mejorar la presentación se pueden utilizar paquetes R especializados, como: knitr, kableExtra, huxtable (trata aspectos muy avanzados), etc. El siguiente ejemplo ilustra el uso de “kableExtra”. Se comentan algunas de las opciones usadas:

  • "hold_position": usa el posicionamiento como en las figuras “h”.
  • position="center": presenta la tabla centrada.
  • "striped": alterna el color de las filas.
  • caption="\\label{}Explicación...": Añade una leyenda que explique el contenido de la tabla junto a un identificador para hacer referencia a ella con \ref{}.
```{r}
library(knitr)
library(kableExtra) 
head(iris,10) %>%
 kable(booktabs = TRUE,format = "latex",
  caption = "\\label{tabla02}Leyenda explicativa de la segunda tabla") %>%
 kable_styling(
  latex_options = c("striped", "condensed","hold_position"), 
  position = "center",full_width = FALSE)
```

Produce el siguiente resultado:

library(knitr)
library(kableExtra) 
head(iris,10) %>%
  kable(booktabs = TRUE,format = "latex",
    caption = "\\label{tabla02}Leyenda explicativa de la segunda tabla") %>%
  kable_styling(
    latex_options = c("striped", "condensed","hold_position"), 
    position = "center",full_width = FALSE)

1.3.2 Incluir una tabla que ocupe varias páginas

Para corregir esa situación, la librería “kableExtra” nos permite presentar tablas que ocupen varias páginas utilizando los siguientes argumentos, como puede comprobarse en el ejemplo que se muestra:

  • Se ha añadido a latex_options la opción: repeat_header.

  • Se ha indicado el texto que aparecerá antes de pasar a la siguiente página: repeat_header_continued="contin\\'ua en la siguiente p\\'agina".

  • Se ha indicado también el texto que aparecerá antes de escribir información de la tabla en la siguiente página: repeat_header_text = "continuaci\\'on".

El siguiente código:

```{r echo=FALSE}
library(kableExtra) 
iris[1:50,] %>% 
  kable(booktabs = TRUE,format = "latex",digits = 1, longtable=TRUE) %>%
  kable_styling(
   latex_options = c("striped", "condensed","repeat_header"), 
   position = "center",full_width = FALSE,
   repeat_header_text = "continuaci\\'on", 
   repeat_header_continued="contin\\'ua en la siguiente p\\'agina"
  )
```

Produce el siguiente resultado:

1.3.3 Incluir una tabla con aspecto de lista-diccionario

El siguiente código:

```{r echo=FALSE}
text_tbl <- data.frame(
  Items = c("Item 1", "Item 2", "Item 3"), 
  Features = c(
    "Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    Proin vehicula tempor ex. Morbi malesuada sagittis turpis,
    at venenatis nisl luctus a. ",
    "In eu urna at magna luctus rhoncus quis in nisl. Fusce in velit
    varius, posuere risus et, cursus augue. Duis eleifend aliquam ante,
    a aliquet ex tincidunt in. ",
    "Vivamus venenatis egestas eros ut tempus. Vivamus id est nisi.
    Aliquam molestie erat et sollicitudin venenatis. In ac lacus at
    velit scelerisque mattis. "
    ) 
  )

kable(text_tbl, "latex", booktabs = T) %>% 
  kable_styling(full_width = F, latex_options = "HOLD_position") %>% 
  column_spec(1, bold = T, color = "red") %>% 
  column_spec(2, width = "30em")
```

Nota: Se recomienda en textos muy largos no usar salto de línea en cada una de las componentes del vector “character” (en el vector “Features” anterior).

Produce el siguiente resultado:

1.3.4 Incluir una tabla con notas a pie de tabla

El siguiente código

```{r echo=FALSE}
library(kableExtra)
dt <- mtcars[1:5, 1:6]

kable(dt, "latex", align = "cccrcc", booktabs = T) %>%
    kable_styling(position = "left") %>% 
    footnote(general = "Elaboración propia. ",
             number = c("Footnote 1; ", "Footnote 2; "),
             alphabet = c("Footnote A; ", "Footnote B; "),
             symbol = c("Footnote Symbol 1; ", "Footnote Symbol 2"), 
             general_title = "Fuente: ", 
             number_title = "Type I: ", 
             alphabet_title = "Type II: ", 
             symbol_title = "Type III: ", 
             footnote_as_chunk = T, 
             title_format = c("italic", "underline") )
```

Produce la siguiente salida (la tabla está justificada a la izquierda position = "left"):

1.3.5 Presentar una tabla en modo apaisado

Se presentan tres ejemplos de tablas apaisadas.

  1. La tabla 1.3 tiene de especial que se usa la función landscape().

\begingroup
\captionsetup{type=table,skip=50pt}
\caption{Es una tabla apaisada ...} \label{tab:apaisada2}
\hspace{2cm}
\Rotatebox{90}{
```{r echo=FALSE, warning=FALSE}
library(knitr)
library(kableExtra)
library(dplyr)

text_tbl <- data.frame(
  Items = c("Item 1", "Item 2", "Item 3","Item 4", "Item 5", "Item 6",
    "Item 7", "Item 8", "Item 9"), 
  Features = c(
    "Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    Proin vehicula tempor ex. Morbi malesuada sagittis turpis,
    at venenatis nisl luctus a. ",
    "In eu urna at magna luctus rhoncus quis in nisl. Fusce in velit
    varius, posuere risus et, cursus augue. Duis eleifend aliquam ante,
    a aliquet ex tincidunt in. ",
    "Vivamus venenatis egestas eros ut tempus. Vivamus id est nisi.
    Aliquam molestie erat et sollicitudin venenatis. In ac lacus at
    velit scelerisque mattis. ",
    "Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    Proin vehicula tempor ex. Morbi malesuada sagittis turpis,
    at venenatis nisl luctus a. ",
    "In eu urna at magna luctus rhoncus quis in nisl. Fusce in velit
    varius, posuere risus et, cursus augue. Duis eleifend aliquam ante,
    a aliquet ex tincidunt in. ",
    "Vivamus venenatis egestas eros ut tempus. Vivamus id est nisi.
    Aliquam molestie erat et sollicitudin venenatis. In ac lacus at
    velit scelerisque mattis. ",
    "Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    Proin vehicula tempor ex. Morbi malesuada sagittis turpis,
    at venenatis nisl luctus a. ",
    "In eu urna at magna luctus rhoncus quis in nisl. Fusce in velit
    varius, posuere risus et, cursus augue. Duis eleifend aliquam ante,
    a aliquet ex tincidunt in. ",
    "Vivamus venenatis egestas eros ut tempus. Vivamus id est nisi.
    Aliquam molestie erat et sollicitudin venenatis. In ac lacus at
    velit scelerisque mattis. "
    ) 
  )
text_tbl %>%
  kable(booktabs = TRUE,caption="\\label{tab:apaisada}Esta tabla 
          est\\'a apaisada y en una p\\'agina separada") %>% 
      column_spec(c(1), 
          width = "2cm") %>% 
      column_spec(c(2), 
          width = "10cm") %>% 
      landscape()
```
}
\endgroup

\newpage

  1. La tabla 1.4 tiene las siguientes características:

    • \hspace{2cm}: desplaza la tabla hacia la derecha desde el margen izquierdo-largo.
    • skip=50pt: desplaza verticalmente la tabla hacia abajo.

\begingroup
\captionsetup{type=table,skip=50pt}
\caption{Es una tabla apaisada ...} \label{tab:apaisada2}
\hspace{2cm}
\Rotatebox{90}{
```{r echo=FALSE, warning=FALSE}
library(knitr)
library(kableExtra)
library(dplyr)

text_tbl %>%
  kable(booktabs = TRUE) %>% 
      column_spec(c(1), width = "2cm") %>% 
      column_spec(c(2), width = "14cm")

```
}
\endgroup

\newpage

  1. La tabla 1.5 es un ejemplo de uso del entorno LaTeX “sidewaystable” (incluido en el paquete LaTeX “rotating”) que rota la tabla y la leyenda.
text_tbl <- data.frame(
  Items = c("Item 1", "Item 2", "Item 3","Item 4", "Item 5", "Item 6", 
            "Item 7", "Item 8", "Item 9"), 
  Features = c(
    "Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    Proin vehicula tempor ex. Morbi malesuada sagittis turpis,
    at venenatis nisl luctus a. ",
    "In eu urna at magna luctus rhoncus quis in nisl. Fusce in velit
    varius, posuere risus et, cursus augue. Duis eleifend aliquam ante,
    a aliquet ex tincidunt in. ",
    "Vivamus venenatis egestas eros ut tempus. Vivamus id est nisi.
    Aliquam molestie erat et sollicitudin venenatis. In ac lacus at
    velit scelerisque mattis. ",
    "Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    Proin vehicula tempor ex. Morbi malesuada sagittis turpis,
    at venenatis nisl luctus a. ",
    "In eu urna at magna luctus rhoncus quis in nisl. Fusce in velit
    varius, posuere risus et, cursus augue. Duis eleifend aliquam ante,
    a aliquet ex tincidunt in. ",
    "Vivamus venenatis egestas eros ut tempus. Vivamus id est nisi.
    Aliquam molestie erat et sollicitudin venenatis. In ac lacus at
    velit scelerisque mattis. ",
    "Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    Proin vehicula tempor ex. Morbi malesuada sagittis turpis,
    at venenatis nisl luctus a. ",
    "In eu urna at magna luctus rhoncus quis in nisl. Fusce in velit
    varius, posuere risus et, cursus augue. Duis eleifend aliquam ante,
    a aliquet ex tincidunt in. ",
    "Vivamus venenatis egestas eros ut tempus. Vivamus id est nisi.
    Aliquam molestie erat et sollicitudin venenatis. In ac lacus at
    velit scelerisque mattis. "
    ) 
  )
text_tbl %>%
  kable(booktabs = TRUE,caption="\\label{tab:apaisada}Esta tabla 
          est\\'a apaisada y en una p\\'agina separada") %>% 
      column_spec(c(1), 
          width = "2cm") %>% 
      column_spec(c(2), 
          width = "10cm") %>% 
      landscape()

1.3.6 Cambiar la etiqueta “Tabla”

Para que en lugar de “Tabla” aparezca “Cuadro” (este término es el que recomienda la RAE), se deberían hacer las siguientes modificaciones en:

  • en el fichero principal “tfe_principal.Rmd”

    \addcontentsline{toc}{section}{Índice de Tablas}
  • Quitar la opción “es-tabla” en el fichero “latex/templateMemoriaTFE.tex”

    %\usepackage[spanish,es-nodecimaldot,es-noshorthands,es-tabla]{babel}
    \usepackage[spanish,es-nodecimaldot,es-noshorthands]{babel}

Más información en la url siguiente: Documentación babel-spanish en CTAN.

1.4 Uso de expresiones matemáticas

En el siguiente enlace overleaf: alfabeto griego y símbolos matemáticos puede encontrarse una recopilación de los comandos LaTeX para representar todo el alfabeto griego y muchos de los símbolos más usados en expresiones matemáticas.

1.4.1 Algunas expresiones matemáticas

Las fracciones pueden usarse en el texto, por ejemplo \(\frac{1}{2}\), y en un estilo matemático centrado como puede verse a continuación:

\[ \frac{1}{2} \]

El código utilizado ha sido:

Las fracciones pueden usarse en el texto, por ejemplo $\frac{1}{2}$, 
y en un estilo matemático centrado como puede verse a continuación:
 
$$
\frac{1}{2}
$$
  • Como puede verse $ $ se utiliza para modo matemático en el interior de un párrafo de texto. También se puede escribir la expresión matemática entre: \( \).

  • Como puede verse $$ $$ se utiliza para modo matemático en un párrafo nuevo centrado. También se puede escribir la expresión matemática con: \[ \].

Nota. Cuando se usa el modo matemático visto anteriormente no es posible añadir etiquetado de ecuaciones para hacer referencia a ellas. Para el etiquetado se usa el entorno LaTeX: \begin{equation} \label{identificador} ... \end{equation}, el cual se verá en un próximo apartado.

Veamos más ejemplos de uso de LaTeX en R Markdown para escribir expresiones matemáticas:

$$ 
\int_0^1 x^2 + y^2 \ dx 
$$

\[ \int_0^1 x^2 + y^2 \ dx \]

$$ 
\int\limits_0^1 x^2 + y^2 \ dx
$$

\[ \int\limits_0^1 x^2 + y^2 \ dx \]

$$
a_1^2 + a_2^2 = a_3^2
$$

\[ a_1^2 + a_2^2 = a_3^2 \]

$$ 
x^{2 \alpha} - 1 = y_{ij} + y_{ij}
$$

\[ x^{2 \alpha} - 1 = y_{ij} + y_{ij} \]

$$ 
(a^n)^{r+s} = a^{nr+ns}
$$

\[ (a^n)^{r+s} = a^{nr+ns} \]

$$
\sum_{i=1}^{\infty} \frac{1}{n^s} 
= \prod_p \frac{1}{1 - p^{-s}} 
$$

\[ \sum_{i=1}^{\infty} \frac{1}{n^s} = \prod_p \frac{1}{1 - p^{-s}} \]

$$ 
F = G \left( \frac{m_1 m_2}{r^2} \right)
$$

\[ F = G \left( \frac{m_1 m_2}{r^2} \right) \]

$$ 
 \left[  \frac{ N } { \left( \frac{L}{p} \right)  - (m+n) }  \right]
$$

\[ \left[ \frac{ N } { \left( \frac{L}{p} \right) - (m+n) } \right] \]

Controlando el tamaño de los elementos separadores:

$$
 \Bigg \langle 3x+7 \bigg \rangle
$$

\[ \Bigg \langle 3x+7 \bigg \rangle \]

1.4.2 Expresiones matriciales

El uso de \begin{array}{} ... \end{array} nos permite escribir expresiones en forma de tabla. Veamos con algunos ejemplos su uso básico.

  • Ejemplo 1:

El \(\chi(\lambda)\) de la matriz \(3 \times 3\) \[ \left( \begin{array}{ccc} a & b & c \\ d & e & f \\ g & h & i \end{array} \right) \] viene dado por la fórmula \[ \chi(\lambda) = \left| \begin{array}{ccc} \lambda - a & -b & -c \\ -d & \lambda - e & -f \\ -g & -h & \lambda - i \end{array} \right|. \]

El  \emph{polinomio característico} $\chi(\lambda)$ de la matriz
$3 \times 3$
$$ 
\left( \begin{array}{ccc}
a & b & c \\
d & e & f \\
g & h & i \end{array} \right)
$$ 
viene dado por la fórmula
$$ 
\chi(\lambda) = 
\left| 
\begin{array}{ccc}
\lambda - a & -b & -c \\
-d & \lambda - e & -f \\
-g & -h & \lambda - i 
\end{array} 
\right|.
$$ 

Otros ejemplos de uso de \begin{array}{} ... \end{array}:

  • Ejemplo 2:

\[ \begin{array}{lcr} \mbox{First number} & x & 8 \\ \mbox{Second number} & y & 15 \\ \mbox{Sum} & x + y & 23 \\ \mbox{Difference} & x - y & -7 \\ \mbox{Product} & xy & 120 \end{array} \]

$$ 
\begin{array}{lcr}
\mbox{First number} & x & 8 \\
\mbox{Second number} & y & 15 \\
\mbox{Sum} & x + y & 23 \\
\mbox{Difference} & x - y & -7 \\
\mbox{Product} & xy & 120 \end{array}
$$ 
  • Ejemplo 3:

\[ |x| = \left\{ \begin{array}{ll} x & \mbox{if $x \geq 0$};\\ -x & \mbox{if $x < 0$}.\end{array} \right. \]

$$ 
|x| = \left\{ \begin{array}{ll}
         x & \mbox{if $x \geq 0$};\\
        -x & \mbox{if $x < 0$}.\end{array} \right. 
$$ 
  • Ejemplo 4: \[ f(n) = \begin{cases} n/2, & \mbox{if } n\mbox{ is even} \\ 3n+1, & \mbox{if } n\mbox{ is odd} \end{cases} \]
$$
f(n) = 
\begin{cases} 
  n/2,  & \mbox{if } n\mbox{ is even} \\ 
  3n+1, & \mbox{if } n\mbox{ is odd} 
\end{cases}
$$

1.4.3 Alineando ecuaciones y etiquetado

Para alinear ecuaciones en R Markdown habrá que utilizar las habilidades de los paquetes LaTeX. Ver overleaf.

A continuación se mostrará el código LaTeX necesario para construir expresiones matemáticas.

  • Uso de “equation-split” y etiquetado con “label” (ver la ecuación 1.1)
(ver la ecuación \ref{eq1})
\begin{equation} \label{eq1}
\begin{split}
A & = \frac{\pi r^2}{2} \\
 & = \frac{1}{2} \pi r^2
\end{split}
\end{equation}

  • Uso de “multline*” para mostrar ecuaciones largas:
\begin{multline*}
p(x) = 3x^6 + 14x^5y + 590x^4y^2 + 19x^3y^3 
            - 32x^2y^4 - 22xy^5 + 12y^6 - 7a^3b^3\\ 
- 12x^2y^4 - 12xy^5 + 2y^6 - a^3b^3
\end{multline*}

  • Uso de “align” y “align*” (diferencia entre incluir “*” y no incluirlo que equivale a no numerar las ecuaciones) para alinear varias ecuaciones usando: & y \\:
\begin{align} 
2x - 5y &=  8  \label{eqalign01}\\ 
3x + 9y &=  -12 \label{eqalign02}
\end{align}

\begin{align*}
x&=y           &  w &=z              &  a&=b+c\\
2x&=-y         &  3w&=\frac{1}{2}z   &  a&=b\\
-4 + 5x&=2+y   &  w+2&=-1+w          &  ab&=cb
\end{align*}

\[\begin{align*} x&=y & w &=z & a&=b+c\\ 2x&=-y & 3w&=\frac{1}{2}z & a&=b\\ -4 + 5x&=2+y & w+2&=-1+w & ab&=cb \end{align*}\]

  • Uso de “gather*” para agrupar y centrar ecuaciones:
\begin{gather*} 
2x - 5y =  8 \\ 
3x^2 + 9y =  3a + c
\end{gather*}

\[\begin{gather*} 2x - 5y = 8 \\ 3x^2 + 9y = 3a + c \end{gather*}\]

1.4.4 Escribiendo resultados matemáticos

Se pueden utilizar entornos matemáticos para establecer: “Definiciones”, “Teoremas”, “Corolarios”, “Demostraciones”, “Ejemplos”, etc. Se ha dado un aspecto personalizado a estas construcciones, que pueden consultarse (y modificarse) en el interior del fichero de estilos LaTeX: “latex/latex_preambulo.tex”.

A continuación se recoge un ejemplo con el código necesario.

\bedefinition
Se **define**... 
\eedefinition

\betheorem
Dado...
\eetheorem

\becorollary
Se verifica...
\eecorollary

\beproof
Para demostrar...
\eeproof

\beexample
Se considera el siguiente ejemplo...
\eeexample

1.5 Uso de la bibliografía

1.5.1 Ficheros “.bib” con la información bibliográfica

Se aconseja guardar todas las referencias bibliográficas en ficheros con formato bibtex. En este caso se usan dos ficheros de bibliografía (podrían tener otros nombres):

  • “bib/library.bib”: en este fichero podremos tener todas las referencias bibliográficas que vayamos encontrando convenientemente formateadas. Se podría utilizar en otros proyectos o trabajos.

  • “bib/paquetes.bib”: este fichero lo genera automáticamente R cuando creamos la salida R Markdown del fichero principal: “tfe_principal.Rmd”, de ahí que no se debe modificar porque se perderían los cambios introducidos. En este se recogerán las referencias bibliográficas de los paquetes R que le indiquemos. Si quisiéramos personalizar alguna referencia a un paquete R se debería incluir en el fichero: “library.bib”. Por ejemplo, en el chunk inicial del fichero “tfe_principal.Rmd” se han indicado para que paquetes R se incluirán referencias bibliográficas.

knitr::write_bib(c("knitr","rmarkdown"),
                 file="bib/paquetes.bib", width = 60)

Algunas de las referencias bibliográficas incluidas en el fichero “bib/library.bib” aparecen a continuación. Se recogen ejemplos de publicaciones de tipos diferentes: “Manual”, “Book”, “Article”, “Misc”, pero existen muchas más.

Hay que resaltar, que cada una de estas referencias bibliográficas tiene un identificador (“Luque2017”, “R-base2”, “Wickham2017”, etc) que será el que nos permita hacer referencia a las correspondientes referencias al añadir el prefijo @, es decir, por ejemplo: @Luque2017.

@Manual{Luque2017,
  title = {Escribir un Trabajo Fin de Estudios con R Markdown},
  author = {Luque Calvo, Pedro L.},
  year = "2017",
  url = {http://destio.us.es/calvo}
}

Importante:

  • Hay que escribir los nombres de los autores de un determinado modo para que las ordenaciones alfabéticas por apellidos de la bibliografía funcione correctamente. La problemática se encuentra en que en los países anglosajones se utiliza un único apellido. Se recomienda siempre que se escriban primero los apellidos (uno o dos o …), a continuación una “,” y después el nombre (se pueden utilizar “.” para poner abreviaturas). Puede verse un ejemplo de esto en el ejemplo anterior: “Luque Calvo, Pedro L.”.

  • Cuando haya más de un autor, separarlos con “and”. Puede verse algunos ejemplos a continuación.

  • Todas las referencias deben de tener al menos los campos: “author” y “year”, ya que son fundamentales para las citaciones y las ordenación de la bibliografía. En caso de no conocerlos, es conveniente buscar una solución.

@Manual{R-base2,
  title = {R: A Language and Environment for Statistical
    Computing},
  author = {{R Core Team}},
  organization = {R Foundation for Statistical Computing},
  address = {Vienna, Austria},
  year = {2016},
  url = {https://www.R-project.org/},
}


@book{Wickham2017,
    Author = {Hadley Wickham and Garrett Grolemund},
    Edition = {First Edition},
    Publisher = {O'Reilly},
    Title = {R for Data Science: Import, Tidy, Transform, Visualize, and Model Data},
    Year = {2017}
}

@ARTICLE {Example1999,
    author  = "Example, The",
    title   = "This is an exmaple article not cited in the text",
    journal = "Journal of Examples",
    year    = "1999",
    volume  = "4",
    number  = "2",
    pages   = "1-9"
}

@Misc{Techopedia,
  title = {"Definition - What does Business Intelligence (BI) mean?"},
  author = {Techopedia},
  year = "2017",
  howpublished = {Disponible en \url{https://www.techopedia.com/definition/345/business-intelligence-bi}}
}

@Misc{webPedroLuque,
  year = "{2021}",
  author = "{Luque Calvo, Pedro L.}",
  title = "{Página personal de Pedro L. Luque}",
  url = {http://destio.us.es/calvo}
} 

@Article{lopez2007aplicacion,
  title={Aplicación de la programación por metas en la distribución de servicios 
  entre empresas operadoras del sistema de transporte masivo},
  author={Lopez, Juan Fernando and Fernández Henao, Sergio and Morales, Marcela María},
  journal={Scientia et technica},
  volume={13},
  number={37},
  pages={339--343},
  year={2007},
  publisher={Universidad Tecnológica de Pereira}
}

Podrían generarse en la consola de R, al utilizar la función citation("paqueteR"), por ejemplo:

> citation("dplyr")

To cite package ‘dplyr’ in publications use:

  Hadley Wickham, Romain François, Lionel Henry and Kirill Müller (2019). dplyr: A
  Grammar of Data Manipulation. R package version 0.8.3.
  https://CRAN.R-project.org/package=dplyr

A BibTeX entry for LaTeX users is

  @Manual{,
    title = {dplyr: A Grammar of Data Manipulation},
    author = {Hadley Wickham and Romain François and Lionel Henry and Kirill Müller},
    year = {2019},
    note = {R package version 0.8.3},
    url = {https://CRAN.R-project.org/package=dplyr},
  }

Para obtener más información sobre la realización de citas en R Markdown visitar la url R Markdown: Bibliographies and Citations.

1.5.2 Hacer citaciones

Las citas van entre corchetes y están separadas por punto y coma. Cada cita debe tener una clave, compuesta de “@” + el identificador de cita de la base de datos, y opcionalmente puede tener un prefijo, un localizador y un sufijo. A continuación se muestran algunos ejemplos:

Blah blah [vea @Luque2017, págs. 33-35; también @Luque2019, cap. 1].

Blah blah [@Luque2017, págs. 33-35, 38-39 y *passim*].

Blah blah [@Luque2017; @Wickham2017].

Produce la siguiente salida:

Blah blah (vea Luque Calvo 2017, págs. 33-35; también Luque Calvo 2019 cap. 1).

Blah blah (Luque Calvo 2017, págs. 33-35, 38-39 y passim).

Blah blah (Luque Calvo 2017; Wickham & Grolemund 2017).

Un signo menos (-) antes de la @ suprimirá la mención del autor en la cita. Esto puede ser útil cuando el autor ya se menciona en el texto:

Luque dice blah [-@Luque2017].

Produce la siguiente salida:

Luque dice blah (2017).

También puede escribir una cita en el texto, de la siguiente manera:

@Luque2017 dice blah.

@Luque2017 [pág. 33] dice blah.

Produce la siguiente salida:

Luque Calvo (2017) dice blah.

Luque Calvo (2017, pág. 33) dice blah.

1.5.3 Estilos de citación

Por defecto, pandoc usará un formato de “fecha-autor” del estilo “chicago” para citas y referencias. Para usar otro estilo, deberá especificar un archivo de estilo CSL 1.0 en el campo de metadatos csl. Por ejemplo:

---
title: "Sample Document"
output: html_document
bibliography: bibliography.bib
csl: biomed-central.csl
---

Puede encontrar una introducción a la creación y modificación de estilos CSL en http://citationstyles.org/downloads/primer.html. Puede encontrar un repositorio de estilos CSL en https://github.com/citation-style-language/styles. Consulte también http://zotero.org/styles para navegar fácilmente por ellos.

Citaciones para salidas PDF. Por defecto, las citas son generadas por la utilidad “pandoc-citeproc”, y funciona para todos los formatos de salida. Cuando la salida es LaTeX/PDF, también puede usar paquetes LaTeX (por ejemplo, natbib) para generar citas; ver documentos PDF para más detalles.

1.5.4 Estilos bibliográficos con natbib: método 1

Este método es el que está activado por defecto.

Importante. Hay que asegurarse que en el fichero principal: “tfe_principal.Rmd” aparecen sin comentar las siguientes líneas (habría que comentar las del otro método):

  • En la cabecera “yaml”:
# metodobib -> true: natbib (descomentar: citation_package: natbib) 
#           -> false: pandoc (comentar: citation_package: natbib)
metodobib: true
#natbib: plainnat, abbrvnat, unsrtnat
biblio-style: "plainnat"
output: 
  pdf_document: 
    citation_package: natbib

Importante. En la bibligrafía que se muestra al final del documento aparecerán las referencias bibliográficas de aquellas que hayan sido citadas en el documento escrito.

También es posible incluir algunas referencias bibliográficas que no hayan sido citadas, con ayuda del comando \nocite{} situado al final del fichero: “tfe_principal.Rmd”, como puede verse en el siguiente código:

\ifdefined\ifcitapandoc

\else

<!-- \nocite{*} -->
\nocite{Luque2017,Luque2019,RStudio,R-base2,
R-knitr,R-rmarkdown,R-dplyr,R-ggplot2,Techopedia}

\fi 

En la cabecera “yaml” del fichero “tfe_principal.Rmd” aparece la clave “biblio-style:”, que permite presentar la bibliografía siguiendo unas pautas habituales en publicaciones científicas.

Por defecto se ha elegido el estilo “plainnat”:

biblio-style: "plainnat" 

pero se pueden elegir otras variantes de “natbib”:

  • plainnat, abbrvnat, unsrtnat

Para obtener más información sobre este tema consultar el siguiente enlace: overleaf-Bibtex y overleaf-Bibtex-natbib

Nota importante. Hay que evitar que una referencia en el fichero BibTeX no tenga los campos: “year” y “author”, ya que producirá salidas del tipo “(????)” al inicio de la referencia en la bibliografía. Cuando se incluyen referencias a páginas web suele presentarse esta situación. Las páginas webs usan el formato BibTeX: “@Misc”. La recomendación es completar esos dos campos. Pero si no se conoce de forma exacta alguno de ellos, se puede utilizar alguna de las dos soluciones siguientes.

  • Solución 1. La que recomendaría las normas “apa” (en las citas aparecerá “autor (s.f.)”, donde “s.f.” significa “sin fecha”):
@Misc{webfacmatematicasus1,
  year = "{s.f.}",
  author = "{Facultad de Matemáticas (Univ. Sevilla)}",
  url = {https://www.matematicas.us.es}
} 
  • Solución 2. En esta segunda opción (no usa el campo “author” y se añade en “year”: “Página web”) aparecería al principio de la referencia: “(Página web)”.
@Misc{webUS2a,
  year = "{Página web}",
  title = {Universidad de Sevilla},
  howpublished= {Disponible en \url{https://www.us.es}}
}

Otras formas equivalentes serían:

@Misc{webUS2b,
  year = "{Página web}",
  title = {Universidad de Sevilla},
  url = {https://www.us.es}
}
@Misc{webUS2c,
  year = "{Página web}",
  title = {Universidad de Sevilla},
  url = {https://www.us.es},
  note = {Consultada el 3-6-2021}
}

Aunque para estás últimas, aparecería en otra línea de cada referencia, la url del siguiente modo:

URL: https://www.matematicas.us.es

Nota: además de a través del paquete “natbib” hay otra forma de manejar bibliografías con el paquete biblatex que posee características adicionales al sistema bibtex, pero necesita la instalación de nuevo software.

overleaf biblatex y documentación completa biblatex

1.5.5 Estilos bibliográficos con pandoc: método 2

Importante. Hay que asegurarse que en el fichero principal: “tfe_principal.Rmd” aparecen sin comentar las siguientes líneas (habría que comentar las del otro método):

  • En la cabecera “yaml”:
# metodobib -> true: natbib (descomentar: citation_package: natbib) 
#           -> false: pandoc (comentar: citation_package: natbib)
metodobib: false
output: 
  pdf_document: 
    #citation_package: natbib

Importante. En la bibligrafía que se muestra al final del documento aparecerán las referencias bibliográficas de aquellas que hayan sido citadas, es decir, hayan aparecido en un comando @identificador en el documento.

También es posible incluir algunas referencias bibliográficas que no hayan sido citadas, con ayuda del comando nocite situado al inicio del documento R Markdown (en este proyecto al inicio del fichero “tfe_principal.Rmd”), como puede verse en el siguiente código:

---
nocite: | 
  @Luque2017,@RStudio,@R-base,
  @R-knitr,@R-rmarkdown,@R-dplyr,@R-ggplot2,@Techopedia
...

En la cabecera “yaml” del fichero “tfe_principal.Rmd” aparece la clave “csl:”, que permite presentar la bibliografía siguiendo las pautas que se exigen en algunas revistas científicas (listado para descargar en zotero csl, también más información).

csl: acm-sig-proceedings-long-author-list.csl
#csl: methods-in-ecology-and-evolution.csl

1.6 Otras cuestiones de interés

1.6.1 Cómo hacer referencias a otras partes del documento

Se pueden hacer referencias a capítulos, secciones, subsecciones, u otros subniveles. Para ello es conveniente saber cómo insertar identificadores a estas partes. Para incluir un identificador, al final de la definición de un apartado se añaden unas llaves entre las que se ha puesto el identificador deseado con el prefijo #.

Para hacer referencia a este identificador se pueden emplear los comandos LaTeX: \ref{identificador} para referirse a la numeración del apartado o \pageref{identificador} para referirse a la página en la que se encuentra definido el apartado.

En el siguiente ejemplo se ha definido a una sección el identificador “sec:incluirgrafico”,

## Cómo incluir un gráfico {#sec:incluirgrafico}

Nota. No se pueden definir identificadores iguales a secciones distintas.

1.6.2 Colorear texto

El siguiente código

\textcolor{blue!90!}{Texto azul} y 
\textcolor{green!10!orange!90!}{texto resaltado}

produce

1.6.3 Colorear texto en cajas

El siguiente código

\colorlet{Mycolor1}{green!10!orange!90!}
\colorbox{Mycolor1}{\textcolor{White}{Texto resaltado}}

produce

1.6.4 Colorear párrafos de texto

En el siguiente código se utilizan varios comandos LaTeX para producir cajas coloreadas:

  • \colorbox{color}{texto}
  • \begin{minipage}{anchocaja} \end{minipage}
  • \textcolor{color}{texto}
  • \color{color}
\noindent\colorbox{blue}{
\begin{minipage}{0.30\textwidth}
\color{white}
Lo que se ve en esta \textcolor{red}{minipágina} 
tiene un color de fondo azul y
el texto está escrito en blanco. 
\end{minipage}}\hspace{0.5cm} 
\colorbox{yellow}{\begin{minipage}{0.60\textwidth} 
Lo que se ve en esta \textcolor{red}{minipágina} 
tiene un color de fondo amarillo y
el texto está escrito en negro
\end{minipage}}

produce:

1.6.5 Incluir ficheros pdf externos

Es posible incluir un documento pdf externo dentro de nuestro documento con ayuda del comando LaTeX \includepdf del paquete: “pdfpages” (incluido en este proyecto).

En el siguiente ejemplo (no se muestra en este documento el resultado) se insertarían en nuestro documento las páginas 8 y 14 del fichero local “xaringanej01_defecto.pdf” con un escalado de 75% (de la 11 a 14, habría que escribir: pages=11-14):

\includepdf[scale=0.75,pages={8,14}, 
  pagecommand=\section*{Ejemplo de inserción de un pdf en un documento}, 
  offset=00 -30]{xaringanej01_defecto.pdf}

En el siguiente ejemplo se incluye el fichero pdf (vendría apaisado y puede que sin numerar) pero rotándolo 90 grados para que quede en vertical:

\includepdf[scale=0.90,pages=1-,angle=90,pagecommand=,
offset=00 -20]{chuleta_tabla_kableExtra_apaisada_texrevisado.pdf}

como puede verse en la siguiente página.

Referencias

Luque Calvo, P.L. (2019). Cómo crear Tablas de información en R Markdown.
Luque Calvo, P.L. (2017). Escribir un Trabajo Fin de Estudios con R Markdown.
Wickham, H. & Grolemund, G. (2017). R for Data Science: Import, Tidy, Transform, Visualize, and Model Data, First Editionn. O’Reilly.

Notas

  1. No se limita al lenguaje R, se pueden usar otros lenguajes, ver: Ingenierías de lenguaje con knitr.↩︎