2014-06-06 5 views
7

Sto avendo difficoltà generare \label{} per i grafici quando si utilizza knitr per passare da un file a un file *.Rmd*.md via knitr; e quindi la conversione in *.pdf tramite pandoc.Non posso generare label {fig: MWe-plot} con knitr

Un MWE per il mio *.Rmd è incluso qui sotto:

```{r Setup, include=FALSE, results="hide", warning=FALSE} 
opts_chunk$set(dev="cairo_pdf", fig.lp="fig:", echo=FALSE, results="hide", 
       message=FALSE, warning=FALSE) 
``` 

```{r mwe-plot, fig.cap = "MWE plot."} 
library(ggplot2) 
ggplot(mtcars, aes(factor(cyl))) + 
    geom_bar() 
``` 

I maglia:

knit("mwe.Rmd") 

allora io uso Pandoc

pandoc -o mwe.pdf mwe.md 

dovrei essere in grado di riferimento incrociato la trama con Figure \ref{fig:mwe-plot} nella mia fonte *.Rmd. Ma sembra che il \label{fig:mwe-plot} non è stato creato in mwe.tex se corro:

pandoc -o mwe.pdf mwe.md 

Grazie!

risposta

9

Il problema è che si sta scrivendo un file R markdown e le opzioni relative a LaTeX non funzionano (non hanno alcun effetto) in tali documenti. fig.cap funziona, ma non lo sarà fig.lp e non verrà aggiunto alcun \label{} perché il gancio di output per i documenti Rmd è markdown e in generale non esiste un'etichetta ecc.

In questo caso è necessario scrivere manualmente lo \label{} in fig.cap come se lo si aggiungesse esplicitamente in un documento LaTeX. Per esempio:

```{r mwe-plot, fig.cap = "\\label{fig:mwe-plot}MWE plot."} 
library(ggplot2) 
ggplot(mtcars, aes(factor(cyl))) + 
    geom_bar() 
``` 

Ora knitr sarà il dump che caption testualmente nel file Markdown utilizzando le convenzioni immagine Markdown markup (abbiamo bisogno di sfuggire alla barra rovesciata quando si entra la stringa in R, da cui il \\ nell'argomento fig.cap). Pandoc sarà quindi in grado di lavorare con questa didascalia e l'etichetta e i riferimenti ad essa dovrebbero risolversi da soli.

L'altra opzione è più complicata; non c'è nulla che ti impedisca di scrivere i tuoi ganci personalizzati per farlo per te, ma dovrai studiare il gancio LaTeX e il gancio MD per vedere come combinare gli elementi di entrambi quelli di cui hai bisogno.

Si noti che questo problema (opzioni di blocco relative agli output LaTeX) si applica a tutte le opzioni di questo tipo durante la scrittura di un file Rmd. Questo è un po 'implicito nella pagina delle opzioni del sito web KNitr ma mi ha colto ancora di sorpresa quando ho iniziato a usare Knitr con markdown e usando pandoc per renderizzare.

+0

Grazie! Speravo di lavorare su "l'altra opzione" che hai menzionato e non ho ancora trovato il tempo per farlo :) –

+0

Credo che la mia domanda sia pertinente alla tua risposta (è un po 'diversa, dato che generano esplicitamente etichette per riferimenti incrociati come parte della generazione dinamica di blocchi). Mi piacerebbe avere tue notizie, Gavin e/o @Yihui su questo: http://stackoverflow.com/q/26883864/2872891. Grazie! –