knitr / rmarkdown / Latex: ¿Cómo referenciar figuras y tablas?

Estoy intentando hacer referencias cruzadas de figuras y tablas en un PDF producido con knitr / rmarkdown. Hay algunas preguntas sobre SO y tex.stackexchange ( aquí y aquí , por ejemplo), que sugieren que la manera de hacerlo en línea es agregar \ref{fig:my_fig} , donde my_fig es la etiqueta del fragmento. Sin embargo, cuando lo bash en mi documento de rmarkdown , me sale ?? donde debe estar el número de la figura. Me gustaría saber cómo hacer que las referencias cruzadas funcionen correctamente.

Un ejemplo reproducible está debajo. 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 la referencia cruzada falla (se muestra ?? en vez del número de la figura). También hay un segundo bash comentado (basado en esta respuesta SO ), donde trato de configurar el entorno de la figura, la etiqueta y los subtítulos con el marcado de latex antes y después del fragmento, pero esto da como resultado un error de pandoc cuando bash tejer el documento. El error es:

 ! Missing $ inserted.  $ l.108 ![](testCrossRef_ 

El ejemplo 2 usa xtable y de referencias cruzadas. El ejemplo 3 usa kable y de referencias cruzadas.

Se incluye una captura de pantalla de la salida PDF en la parte inferior 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) ```         # 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 PDF

enter image description here

Puede utilizar el formato de salida bookdown::pdf_document2 lugar de pdf_document , y la syntax para hacer referencia a una figura es \@ref(fig:chunk-label) ; vea la documentación para más detalles: https://bookdown.org/yihui/bookdown/figures.html

Siguiendo que no puedo generar \ label {fig: mwe-plot} con knitr , agregando \label{...} a los argumentos de título producirán tags 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") ```