Copyable links to sections in Rmarkdown (ideally with fontawesome link icon)

I'd love to have automatically generated links next to anchors in the document, so that someone looking at the HTML output can easily send a link to a particular section.

This is basically as headers work on github markdown README (and other documents). If you hover over them a link icon appears on the left and you can quickly copy that link (with a right click). I'd like to be able to do the hover to show or always show thing too :slight_smile:

Anyone have any idea how to do that?

(Here's a page describing an approach
https://ben.balter.com/2014/03/13/pages-anchor-links/ which links to Anchor-JS library, perhaps relevant?)

1 Like

Bookdown does this. For example, check out this link:

"https://geocompr.robinlovelace.net/spatial-class.html#raster-data"

The links are in the sidebar, not directly in the text, but I think it's most of the way there, so I'm guessing what you want to do is quite possible.

pkgdown does exactly this, but it’s not quite a drop-in approach (I don’t think?). After generating the HTML via rmarkdown, it processes it as XML in order to tweak various things, including adding section header links:

1 Like

Since you're using HTML, you can use the AnchorJS library to do what you need.

Create a file with the following code (I saved it as anchor.html). Also, make sure to read the documentation to see how to use the library.

<script src='https://cdnjs.cloudflare.com/ajax/libs/anchor-js/4.2.0/anchor.js'></script>
<script>
    anchors.add();
</script>

In the yaml header of your R Markdown document, include the above file after your body using includes (documented in the R Markdown book. Make sure the anchor.html is in the same folder as your .Rmd file:

---
title: "Anchored Links"
output: 
  html_document:
    includes:
      after_body: anchor.html
---

So using the example Rmd created by RStudio, this is what your Rmd file should look like:

---
title: "Anchored Links"
output: 
  html_document:
    includes:
      after_body: anchor.html
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

## R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see <http://rmarkdown.rstudio.com>.

When you click the **Knit** button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

```{r cars}
summary(cars)
```

## Including Plots

You can also embed plots, for example:

```{r pressure, echo=FALSE}
plot(pressure)
```

Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot.

And the output:

3 Likes