Я не могу сгенерировать \label{fig:mwe-plot} с помощью Knitr

У меня возникли проблемы с созданием \label{} для графиков при использовании вязания для перехода от файла *.Rmd к файлу *.md через knitr; а затем преобразовать в *.pdf через pandoc.

MWE для моего *.Rmd указан ниже:

```{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() 
```

Я вяжу:

knit("mwe.Rmd") 

Затем я использую пандок

pandoc -o mwe.pdf mwe.md 

Я должен иметь возможность сопоставить сюжет с Figure \ref{fig:mwe-plot} в моем источнике *.Rmd. Но кажется, что \label{fig:mwe-plot} не был создан в mwe.tex, если я запускаю:

pandoc -o mwe.pdf mwe.md

Благодарю вас!


person Tom    schedule 06.06.2014    source источник


Ответы (1)


Проблема в том, что вы пишете файл уценки R, и параметры, связанные с LaTeX, не работают (они не действуют) в таких документах. fig.cap работает, а fig.lp нет, и вы вообще не добавите \label{}, потому что выходной хук для документов Rmd - это уценка, и, как правило, там нет метки и т. Д.

В этом случае вам нужно написать \label{} вручную в fig.cap, как если бы вы явно добавляли это в документ LaTeX. Например:

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

Теперь Knitr дословно выгружает этот заголовок в файл уценки, используя соглашения разметки изображений уценки (нам нужно избегать обратной косой черты при вводе строки в R, поэтому \\ в аргументе fig.cap). После этого Pandoc сможет работать с этой подписью, а метка и ссылки на нее должны разрешиться сами собой.

Другой вариант более сложен; ничто не мешает вам написать свои собственные хуки, чтобы сделать это за вас, но вам придется изучить хук LaTeX и MD, чтобы понять, как комбинировать элементы обоих, которые вам нужны.

Обратите внимание, что эта проблема (параметры фрагментов, относящиеся к выходным данным LaTeX) применяется ко всем таким параметрам фрагментов при записи файла Rmd. Это как бы подразумевается на странице параметров веб-сайта KNitr, но это все равно застало меня врасплох, когда я впервые начал использовать Knitr с уценкой и использованием pandoc для рендеринга.

person Gavin Simpson    schedule 06.06.2014
comment
Спасибо! Я надеялся поработать над другим вариантом, о котором вы упомянули, и я просто еще не нашел на него времени :) - person Yihui Xie; 08.06.2014
comment
Я считаю, что мой вопрос имеет отношение к вашему ответу (хотя он немного отличается, поскольку я явно генерирую метки для перекрестных ссылок как часть динамического создания фрагментов). Хотелось бы услышать от вас, Гэвин, и/или @Yihui об этом: stackoverflow.com/q/26883864/2872891 . Спасибо! - person Aleksandr Blekh; 13.11.2014
comment
@GavinSimpson, пожалуйста, как вы потом сопоставите фигуру? Я попытался вызвать имя фрагмента \@ref{mwe-plot} в своем тексте, например «Посмотрите на рисунок \@ref{mwe-plot}», но он печатает его таким же образом, неправильно добавляет номер рисунка. Я использую output: bookdown::pdf_book: base_format: rticles::elsevier_article. Спасибо - person maycca; 28.07.2020