the - knitr/rmarkdown/Latex: ¿Cómo hacer referencias cruzadas de figuras y tablas?
r markdown tutorial pdf (2)
Estoy intentando hacer una referencia cruzada de figuras y tablas en un PDF producido con knitr / rmarkdown. Hay algunas preguntas sobre SO y tex.stackexchange ( here y here , por ejemplo), que sugieren que la forma de hacer esto en línea es agregar /ref{fig:my_fig}
, donde my_fig
es la etiqueta del fragmento. Sin embargo, cuando intento eso en mi documento rmarkdown
, obtengo ??
donde debería estar el número de la figura. Me gustaría saber cómo hacer que las referencias cruzadas funcionen correctamente.
A continuación se muestra un ejemplo reproducible. Hay dos archivos: el archivo rmarkdown
más un archivo header.tex
que he incluido en caso de que afecte la respuesta (aunque tengo el mismo problema si header.tex
archivo header.tex
o no).
En el archivo rmarkdown
hay tres ejemplos de referencias cruzadas. El ejemplo 1 es una figura para la cual fallan las referencias cruzadas (se muestra ??
en lugar del número de figura). También hay un segundo intento comentado (basado en here ), donde intento configurar el entorno, la etiqueta y el título de la figura con el marcado de latex
antes y después del fragmento, pero esto produce un error de pandoc
cuando intento tejer el documento. El error es:
! Missing $ inserted. <inserted text> $ l.108 ![](testCrossRef_
El ejemplo 2 utiliza xtable
y trabajos de referencias cruzadas. El ejemplo 3 usa kable
y las referencias cruzadas fallan.
Se incluye una captura de pantalla de la salida en PDF al final de esta publicación.
archivo rmarkdown
---
title: |
| My Title
author: |
| eipi10
| Department of Redundancy Department
date: "`r format(Sys.time(), ''%B %e, %Y'')`"
output:
pdf_document:
fig_caption: yes
includes:
in_header: header.tex
keep_tex: yes
fontsize: 11pt
geometry: margin=1in
graphics: yes
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE, message=FALSE, warning=FALSE, fig.height=2, fig.width=4)
```
# Example 1. Figure
This is a report. Take a look at Figure /ref{fig:fig1}.
```{r fig1, echo=FALSE, fig.cap="This is a caption"}
plot(mtcars$wt, mtcars$mpg)
```
<!-- Now, let''s take a look at this other plot in Figure /ref{fig:fig2}. -->
<!-- /begin{figure} -->
<!-- ```{r fig2, echo=FALSE} -->
<!-- plot(mtcars$cyl, mtcars$mpg) -->
<!-- ``` -->
<!-- /caption{This is another caption} -->
<!-- /label{fig:fig2} -->
<!-- /end{figure} -->
# Example 2: `xtable`
Some more text. See Table /ref{tab:tab1} below.
```{r echo=FALSE, results="asis"}
library(xtable)
print.xtable(
xtable(mtcars[1:3,1:4], label="tab:tab1", caption="An xtable table"),
comment=FALSE)
```
# Example 3: `kable`
Some more text. See Table /ref{tab:tab2} below.
```{r tab2, echo=FALSE}
library(knitr)
kable(mtcars[1:3,1:4], caption="A `kable` table")
```
archivo header.tex
% Caption on top
% https://tex.stackexchange.com/a/14862/4762
/usepackage{floatrow}
/floatsetup[figure]{capposition=top}
/floatsetup[table]{capposition=top}
Salida de PDF
Puede usar el formato de salida bookdown::pdf_document2
lugar de pdf_document
, y la sintaxis para hacer referencia a una figura es /@ref(fig:chunk-label)
; Consulte la documentación para obtener más información: https://bookdown.org/yihui/bookdown/figures.html
Siguiendo no puedo generar / label {fig: mwe-plot} con knitr , al agregar /label{...}
a los argumentos de los títulos , se producirán etiquetas en el archivo tex
subyacente, es decir
```{r fig1, echo=FALSE, fig.cap="//label{fig:fig1}This is a caption"}
plot(mtcars$wt, mtcars$mpg)
```
y
```{r tab2, echo=FALSE}
library(knitr)
kable(mtcars[1:3,1:4], caption="//label{tab:tab2}A `kable` table")
```