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
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}
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.
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
@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
来源:https://stackoverflow.com/questions/33913780/internal-links-in-rmarkdown-dont-work