Sto cercando di fare riferimenti incrociati su figure e tabelle in un PDF prodotto con knitr / rmarkdown. Ci sono alcune domande su SO e tex.stackexchange ( qui e qui , per esempio), che suggeriscono che il modo per farlo inline è aggiungere \ref{fig:my_fig}
, dove my_fig
è l’etichetta del blocco. Tuttavia, quando provo nel mio documento rmarkdown
, ottengo ??
dove dovrebbe essere il numero della figura. Mi piacerebbe scoprire come far funzionare correttamente i riferimenti incrociati.
Un esempio riproducibile è qui sotto. Ci sono due file: il file rmarkdown
più un file header.tex
che ho incluso nel caso in cui influenzi la risposta (anche se ho lo stesso problema se header.tex
o meno il file header.tex
).
Nel file rmarkdown
ci sono tre esempi di riferimenti incrociati. L’Esempio 1 è una figura per la quale il cross-referencing fallisce (viene visualizzato invece il numero della figura). C’è anche un secondo tentativo commentato (basato su questa risposta SO ), in cui provo ad impostare l’ambiente figura, l’etichetta e la didascalia con il markup in latex
prima e dopo il blocco, ma questo si traduce in un errore pandoc
quando provo a lavorare a maglia il documento. L’errore è:
! Missing $ inserted. $ l.108 , '%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") ```
header.tex
file % Caption on top % https://tex.stackexchange.com/a/14862/4762 \usepackage{floatrow} \floatsetup[figure]{capposition=top} \floatsetup[table]{capposition=top}
È ansible utilizzare il formato di output bookdown::pdf_document2
anziché pdf_document
e la syntax per il riferimento a una figura è \@ref(fig:chunk-label)
; vedere la documentazione per i dettagli: https://bookdown.org/yihui/bookdown/figures.html
Di seguito non riesco a generare \ label {fig: mwe-plot} con knitr , aggiungendo \label{...}
agli argomenti della didascalia produrranno etichette nel file tex
sottostante, cioè
```{r fig1, echo=FALSE, fig.cap="\\label{fig:fig1}This is a caption"} plot(mtcars$wt, mtcars$mpg) ```
e
```{r tab2, echo=FALSE} library(knitr) kable(mtcars[1:3,1:4], caption="\\label{tab:tab2}A `kable` table") ```