2014-06-06 14 views
7

Mam problem z generowaniem \label{} dla działek, gdy używam knitr, aby przejść z pliku *.Rmd do pliku *.md przez knitr; a następnie przekształcenie na *.pdf poprzez pandoc.Nie mogę wygenerować label {rys: mwe-plot} z knitr

An MWe dla mojego *.Rmd znajduje się poniżej:

```{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 dzianiny:

knit("mwe.Rmd") 

Następnie używam pandoc

pandoc -o mwe.pdf mwe.md 

powinienem być w stanie wzajemnej odsyłającym działka z Figure \ref{fig:mwe-plot} w moim źródle *.Rmd. Ale wydaje się, że \label{fig:mwe-plot} nie został stworzony w mwe.tex jeśli biegnę:

pandoc -o mwe.pdf mwe.md 

Dziękujemy!

Odpowiedz

9

Kwestia polega na tym, że piszesz plik oceny R, a opcje związane z LaTeX nie działają (nie mają żadnego efektu) w takich dokumentach. fig.cap działa, ale nie będzie i nie dostaniesz żadnego \label{} dodanego w ogóle, ponieważ wyjściowy hak dla dokumentów Rmd to przecena i ogólnie nie ma tam etykiety itp.

W takim przypadku należy ręcznie wpisać \label{} w fig.cap, tak jakby to było wyraźnie dodawane w dokumencie LaTeX. Na przykład:

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

Teraz knitr zrzuci że podpis dosłownie do pliku wyprzedaży stosując konwencje Przecena obraz znaczników (musimy uciec backslash podczas wprowadzania znaków w R, stąd \\ w fig.cap argumentu). Pandoc będzie wtedy mógł pracować z tym podpisem, a etykieta i odniesienia do niego powinny same się rozwiązać.

Inna opcja jest bardziej skomplikowana; nic nie powstrzyma cię przed napisaniem własnych niestandardowych haczyków, aby zrobić to za ciebie, ale musisz nauczyć się haczyka LaTeX i haczyka MD, aby zobaczyć, jak połączyć elementy obu, których potrzebujesz.

Należy zauważyć, że ten problem (opcje porcji dotyczące wyjść LaTeX) dotyczy wszystkich takich opcji porcji podczas pisania pliku Rmd. Jest to w pewien sposób zasugerowane na stronie Opcje na stronie internetowej firmy KNITR, ale nadal zaskoczyło mnie to, gdy zacząłem używać Knitr z przeceną i renderowałem pandoc.

+0

Dzięki! Mam nadzieję pracować nad "drugą opcją", o której wspomniałeś i po prostu jeszcze nie znalazłem na to czasu :) –

+0

Uważam, że moje pytanie jest istotne dla twojej odpowiedzi (jest to nieco inne, ponieważ wyraźnie generuję etykiety dla odsyłacze wzajemne jako część dynamicznego generowania fragmentów). Chciałbym usłyszeć od ciebie, Gavina i/lub @Yihui o tym: http://stackoverflow.com/q/26883864/2872891. Dzięki! –