tellis
tellis

Reputation: 162

Bookdown: Cross-reference figure in another file

I have taken the plunge and am preparing a manuscript for publication entirely in RStudio using bookdown. In the main text I would like to cross-reference figures in a separate supporting information .Rmd file.

Let's say this is my main text file called main.Rmd:

---
title: "Main text"
output:
  bookdown::pdf_book:
    toc: no
---
Here is the main text file. I would like to refer to \@ref(fig:supporting-figure).

Here is the supporting text called supporting.Rmd, and the figure to refer to, saved in the same folder:

---
title: "Supporting info"
output:
  bookdown::pdf_book:
    toc: no
---

Here is the supporting text.

```{r supporting-figure}
plot(cars)
```

How can I cross-ref supporting-figure in the main text?

I have checked the section on cross-references in Yihui's bookdown manual, but I cannot see how to extend this to cross-references between files.

I also found this question: Cross-reference figure in a separate Rmarkdown (PDF) file but the accepted answer does not work for me (perhaps because I am using bookdown rather than base Rmarkdown?)

Upvotes: 1

Views: 1530

Answers (2)

julou
julou

Reputation: 601

I ran into the same issue and came up with this solution if you aim at compiling 2 different pdfs. It relies on LaTeX's xr package for cross references: https://stackoverflow.com/a/52532269/576684

Upvotes: 1

Mikey Harper
Mikey Harper

Reputation: 15429

I am not entirely sure how you are compiling these two files into a single bookdown document, because as it stands they are just two separate R Markdown documents. But there are two issues:

  1. Figures need a caption to be cross-referenced

You can only cross-reference figures which have a caption assigned with fig.cap, as explained here:

If we assign a figure caption to a code chunk via the chunk option fig.cap, R plots will be put into figure environments, which will be automatically labeled and numbered, and can also be cross-referenced.

  1. Incorrectly configured bookdown project:

From what I can tell, you have not got the project configured correctly for bookdown:

  • The main file should be called index.Rmd
  • Supporting files should not have any YAML
  • You should include site: bookdown::bookdown_site in the YAML of the main documene

Check out this answer for some tips on a minimal bookdown file.


Solution

index.Rmd

---
title: "Main text"
site: bookdown::bookdown_site
output:
  bookdown::pdf_book:
    toc: no
---
Here is the main text file. I would like to refer to \@ref(fig:supporting-figure).

supporting.Rmd

Here is the supporting text.

```{r supporting-figure, fig.cap= "Some Figure"}
plot(cars)
```

enter image description here

Upvotes: 6

Related Questions