Как я могу автоматизировать ссылки на рисунки в раздаточных материалах Tufte?

Я пытаюсь написать отчет, используя уценку R с выводом раздаточного материала Tufte для создания PDF-файла. Мне не удалось разместить ссылки на рисунки в тексте, используя любой из предложенных подходов. Я надеюсь, что кто-то может проиллюстрировать, как я могу это сделать. Буду признателен за любые предложения.

До сих пор я пробовал два широких подхода, описанных в этом ответ переполнения стека.

Вариант 1: базовый подход уценки с использованием \@ref(fig:chunk-label). Это приводит к тому, что PDF-файл имеет правильный формат в подписи к рисунку, но ссылка в тексте — @ref(fig:fig-margin).. Смотрите изображение под скриптом:

```
---
title: "Markdown example"
date: "`r Sys.Date()`"
output:
  tufte::tufte_handout:
    citation_package: natbib
link-citations: yes
---

```{r setup, include=FALSE}
library(tufte)

```

```{r fig-margin, fig.cap=("MPG vs horsepower, colored by transmission."), fig.height=3.5, fig.margin=TRUE, fig.width=3.5, message=FALSE, cache=FALSE}
library(ggplot2)
mtcars2 <- mtcars
mtcars2$am <- factor(
  mtcars$am, labels = c('automatic', 'manual')
)
ggplot(mtcars2, aes(hp, mpg, color = am)) +
  geom_point() + geom_smooth() +
  theme(legend.position = 'bottom')

```

Insert the figure reference here \@ref(fig:fig-margin).

Здесь скопировано изображение из pdf, но у меня нет точек, чтобы вставить его. Надеюсь, это видно
изображение

Я пробовал несколько вариантов формата \@ref(fig:fig-margin), например удаление обратной косой черты, но безрезультатно.

Вариант 2: Использование субтитров. В вариантах ответа по ссылке выше Captioner был предложен в качестве решения, и был предоставлен некоторый код.

Я реализовал эту опцию и на этот раз получил правильную встроенную ссылку, но Рисунок 1: часть подписи к рисунку была продублирована (т.е. она гласила Рисунок 1: Рисунок 1: MPG против лошадиных сил и т. д.).
Вот изображение из pdf с использованием подхода Captioner
image

```
---
title: "Captioner example"
date: "`r Sys.Date()`"
output:
  tufte::tufte_handout:
    citation_package: natbib
link-citations: yes
---

```{r setup, include=FALSE}
library(tufte)
library(captioner)
# invalidate cache when the tufte version changes
knitr::opts_chunk$set(tidy = FALSE, cache.extra = packageVersion('tufte'))
options(htmltools.dir.version = FALSE)

table_captions <- captioner::captioner()
figure_captions <- captioner::captioner(prefix="Figure.")
fig.cap <- captioner::captioner()

t.ref <- function(label){
  stringr::str_extract(table_captions(label), "[^:]*")
}

f.ref <- function(label){
  stringr::str_extract(figure_captions(label), "[^:]*")
}



```


```{r fig-margin, fig.cap=figure_captions("fig_one", "MPG vs horsepower, colored by transmission."), fig.height=3.5, fig.margin=TRUE, fig.width=3.5, message=FALSE, cache=FALSE}
library(ggplot2)
mtcars2 <- mtcars
mtcars2$am <- factor(
  mtcars$am, labels = c('automatic', 'manual')
)
ggplot(mtcars2, aes(hp, mpg, color = am)) +
  geom_point() + geom_smooth() +
  theme(legend.position = 'bottom')

```

Insert experiment ref here `r f.ref("fig_one")`.

Я бы предпочел использовать только базовый подход уценки, если это возможно, но если единственный способ сделать это - использовать Captioner, было бы хорошо, если бы кто-то мог посоветовать избавиться от дублирования (я попробовал некоторые корректировки определенных функций в блоке установки, но никто не работал.

Мы будем очень признательны за любые советы. План Б, конечно, просто сделать это вручную.

Заранее спасибо.


person user97371    schedule 25.05.2020    source источник


Ответы (2)


Я столкнулся с той же проблемой с раздаточными материалами tufte (PDF), поэтому я попробовал \ref и фигурные скобки { } без символа @, как это было предложено в примере rmarkdown № 1 из SO thread, на который вы ссылались выше. Кажется, работает.

\ref{fig:my_fig}
person mindonly    schedule 13.07.2020
comment
Спасибо @mindonly. Это сработало для меня. Он выдает только одно число (номер или идентификатор фигуры) без префикса фигуры, но это нормально и легко исправить. Я действительно ценю твою помощь. Спасибо. - person user97371; 30.07.2020

Я обнаружил, что дефисы (и я полагаю, что под счетами) создают проблемы для ссылок. Таким образом, \@ref(fig:fig-margin) не будет работать, а \@ref(fig:figMargin) будет работать, если вы переименуете фрагмент в figMargin.

person Jesse Brunner    schedule 23.07.2020
comment
Спасибо @Джесси Бруннер. К сожалению, это не сработало для меня. Я по-прежнему получаю @ref(fig:figMargin) в качестве вывода, когда использовал figMargin без дефиса в качестве имени фрагмента. - person user97371; 30.07.2020