Internal links in rmarkdown don't work
Solution 1
You're not setting the anchors correctly.
Try the following:
# start
```{r results="asis",tidy=FALSE,eval=TRUE}
cat("click here: [link1](#test1)")
```
click here: [link2](#test1)
\pagebreak
# test 3 {#test3}
\pagebreak
#test 2 {#test2}
\pagebreak
#test 1 {#test1}
Solution 2
There are some tricky rules for internal links in Rmarkdown PDF output, not well documented on cheat sheets, etc.
Rules:
-
Only one
#
for anchor, even if you are using a header with multiple#
.Example:
###header
becomes#header
when linking. -
No spaces between # and anchor text.
Example:
#header
, not# header
. -
Multi-word anchors should be separated by dashes.
Example:
#this is a header
needs to become#this-is-a-header
in the link. -
Anchor links need to be lowercase, even if the header you are linking to has capitalization.
Example:
#Section
becomes#section
in the link.
Solution 3
@rPirate has a good list, but it was missing a case that was befuddling me. I had a section header like ### 1.1.1 My Section Title
that needs to be #my-section-title
in the link.
After some searching, I found an official list of transformation rules in the Pandoc manual:
The default algorithm used to derive the identifier from the header text is:
- Remove all formatting, links, etc.
- Remove all footnotes.
- Remove all non-alphanumeric characters, except underscores, hyphens, and periods.
- Replace all spaces and newlines with hyphens.
- Convert all alphabetic characters to lowercase.
- Remove everything up to the first letter (identifiers may not begin with a number or punctuation mark).
- If nothing is left after this, use the identifier section.
Thus, for example,
Header | Identifier -------------------------------------------------------- Header identifiers in HTML | header-identifiers-in-html Maître d'hôtel | maître-dhôtel *Dogs*?--in *my* house? | dogs--in-my-house [HTML], [S5], or [RTF]? | html-s5-or-rtf 3. Applications | applications 33 | section
Solution 4
Josh Paulson has an article on Rstudio website that goes into details. Here is his solution
Slide 1
====================================
id: slide1
Slide 2
====================================
[Go to slide 1](#/slide1)
This works me. A Handcart And Mohair's code does not work on RHTML
Solution 5
Here is a simple way of doing internal links/references in an RMarkdown PDF document:
A) Create a section header:
## Homework Assignments{#hwks}
B) After creating the section header. I can refer to it in my text like this:
If you are having a hard time with your [homework](#hwks), we have some tutors who can help you.
This creates a link back to the section header entitled "Homework Assignments".
Notice a couple of things in the way I set up the link:
"homework" ==> the word (or phrase) I use to call the header is in brackets
[homework] is immediately followed by the identifier "#hwks" that I created above, but the identifier is now in parentheses, as in: (#hwks)
This always works for me!
(This was my first post here; I hope it makes sense. :) )
rdatasculptor
Updated on June 04, 2022Comments
-
rdatasculptor about 2 years
I use rmarkdown to render pdf documents. Now I want to add internal links in the texts.
In the helping pages of rmarkdown, it says an internal link is defined as:
See the [Introduction](#introduction).
When I Use e.g. the next code there should be two internal links: link1 and link2. Both don't link. Is there something obvious that I am doing wrong? Many thanks in advance!
--- title: "Test" author: "test test" output: pdf_document: latex_engine: xelatex number_sections: yes toc: yes toc_depth: 3 html_document: css: tables.css number_sections: yes theme: cerulean toc: yes toc_depth: 3 subtitle: test test test mainfont: Calibri Light fontsize: 12pt header-includes: - \usepackage[dutch]{babel} - \usepackage{fancyhdr} - \pagestyle{fancy} - \fancyfoot[LE,RO]{this is a fancy foot} - \usepackage{dcolumn} - \usepackage{here} - \usepackage{longtable} - \usepackage{caption} - \captionsetup{skip=2pt,labelsep=space,justification=justified,singlelinecheck=off} --- # start ```{r results="asis",tidy=FALSE,eval=TRUE,echo=FALSE,message=FALSE, error=FALSE, warning=FALSE, comment = NA} cat("click here: [link1](#test 1)") ``` click here: [link2](#test 1) \pagebreak #test 3 \pagebreak #test 2 \pagebreak #test 1