J'essaie de faire des références croisées entre les figures et les tableaux dans un PDF produit avec knitr/rmarkdown. Il y a quelques questions sur SO et tex.stackexchange ( ici et ici par exemple), qui suggèrent que la façon de le faire en ligne est d'ajouter le texte suivant \ref{fig:my_fig}
où my_fig
est l'étiquette du morceau. Cependant, lorsque j'essaie cela dans mon rmarkdown
j'obtiens ??
où le numéro de la figure doit être. J'aimerais savoir comment faire pour que les références croisées fonctionnent correctement.
Un exemple reproductible est présenté ci-dessous. Il y a deux fichiers : le rmarkdown
plus un header.tex
que j'ai inclus juste au cas où cela affecterait la réponse (bien que j'aie le même problème que j'inclue le fichier header.tex
ou non).
Dans le rmarkdown
Le fichier contient trois exemples de références croisées. L'exemple 1 est une figure pour laquelle la référence croisée échoue ( ??
s'affiche à la place du numéro de la figure). Il y a aussi une deuxième tentative, commentée (basée sur cette réponse SO ), où j'essaie de définir l'environnement de la figure, l'étiquette et la légende avec latex
avant et après le chunk, mais cela donne lieu à une pandoc
erreur lorsque j'essaie de tricoter le document. L'erreur est la suivante :
! Missing $ inserted. <inserted text> $ l.108 ![](testCrossRef_
L'exemple 2 utilise xtable
et les références croisées fonctionnent. L'exemple 3 utilise kable
et les références croisées échouent.
Une capture d'écran de la sortie PDF est incluse au bas de cet article.
rmarkdown
fichier
---
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")
```
header.tex
fichier
% Caption on top
% https://tex.stackexchange.com/a/14862/4762
\usepackage{floatrow}
\floatsetup[figure]{capposition=top}
\floatsetup[table]{capposition=top}
10 votes
Cette question semble avoir été discutée ici : Je ne peux pas générer \label {fig:mwe-plot} avec knitr . Codage en dur
{r fig1, echo=FALSE, fig.cap="\\label{fig:fig1}This is a caption"}
semble fonctionner.