Cross-referencing 一个 table 或 rmarkdown 中另一个图的标题中的图或 table

Cross-referencing a table or figure in rmarkdown in the caption of another figure or table

我正在制作一个 rmarkdown 文档,编织成 PDF 并有一个图(图 1)和一个 table(table 1),其中 table 解释了更多的图细节。我没有问题给他们任何一个标准标题,但我想将 table 标题更改为 "Explanation of Figure 1"。有什么办法吗?

下面列出了代码块,如果我需要提供更多信息,请告诉我:

YAML:

- \usepackage{caption} #and several others

output:
  bookdown::pdf_document2:
    keep_tex: no
    latex_engine: xelatex

代码块: 图一:

```{r figure-1, fig.cap="Figure"}
ggplot()
```

Table 1:

```{r table, fig.cap="Explanation of Figure \@ref(fig:figure-1)"}
knitr
kableExtra::kable(caption = "Explanation of Figure \@ref(fig:figure-1)")
```

带有一个反斜杠的主要错误消息是 "Error: '@' is an unrecognized escape in character string",提示我忘记引用字符选项,这是不正确的。

文档使用两个反斜杠编织但生成标题 "Explanation of Figure reffig:table"

3 个反斜杠:与 1.

相同的错误

4个反斜杠:错误为"pandoc-citeproc: reference ref not found. ! Package caption Error: \caption outside float."

感谢任何建议!

我尝试了很多不同的方法 text references、块标题、kable 函数中的标题参数,我确信某处有一个聪明的解决方案,所以这里只是使用纯 Latex 的解决方法。

在带有数字的块之前添加带有label的乳胶块:

```{=latex}
\begin{figure}
\caption{Figure 1}
\label{Fig-1}
``` 
```{r figure-1, echo = FALSE}
ggplot(mtcars) +
  geom_point(aes(cyl, gear))
```
```{=latex}
\end{figure}
``` 

现在您可以参考 latex-caption 中的 Fig-1 以获得具有普通乳胶代码 \ref{Fig-1} 的 table:

```{=latex}
\begin{table}
\caption{Explanation of Figure \ref{Fig-1}}
``` 
```{r table}
kableExtra::kable(x = mtcars)
```

```{=latex}
\end{table}
``` 

备注: * 在我看来,这只是一种解决方法。 * 不可能同时使用块选项 fig.cap = "" 和乳胶代码

只是一种解决方法,但可能会有所帮助。 \@ref(fig:xxx) 选项在编织到 html_document2 时效果很好。 对我来说 pdf - 在终端中使用 pandoc 时创建工作正常。 例如:

---
title: "Cross ref"
output:
  bookdown::html_document2:
    collapsed: no
    theme: readable
    toc: yes
link-citations: yes
---

```{r firstplot, fig.cap = "A plot with points." }
library(ggplot2)

plot_A = ggplot(data = data.frame(x = c(1:10),
                         y = seq(3, 8, length.out = 10)),
       aes(x = x, y =y))+
  geom_point()

plot_A

```

Now a second plot with a reference to Fig.: \@ref(fig:firstplot).


```{r secondplot, fig.cap = "This is the same as Fig.: \@ref(fig:firstplot) 
but now with a red line." }
library(ggplot2)

plot_A + geom_line(alpha = .75,col = "red")

```

编织后只需移动到包含 html 的文件夹并使用 pandoc

pandoc mini_ex-crossref.html -o mini_ex.pdf