web-dev-qa-db-fra.com

Les liens internes dans rmarkdown ne fonctionnent pas

J'utilise rmarkdown pour rendre les documents pdf. Maintenant, je veux ajouter des liens internes dans les textes. 

Dans les pages d'aide de rmarkdown , il est indiqué qu'un lien interne est défini comme suit:

See the [Introduction](#introduction).

Quand j'utilise par exemple le code suivant, il devrait y avoir deux liens internes: link1 et link2. Les deux ne sont pas liés. Y a-t-il quelque chose d'évident que je fais mal? Merci d'avance!

   ---
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
20
rdatasculptor

Vous ne mettez pas les ancres correctement.

Essayez ce qui suit:

# 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}
28

Il existe des règles délicates pour les liens internes dans la sortie de Rmarkdown PDF, mal documentées sur les feuilles de triche, etc. 

Règles: 

  • Un seul # pour l'ancre, même si vous utilisez un en-tête avec plusieurs #.

    Exemple: ###header devient #header lors de la liaison.

  • Aucun espace entre # et le texte d'ancrage.

    Exemple: #header, pas # header.

  • Les ancres multi-mots doivent être séparées par des tirets.

    Exemple: #this is a header doit devenir #this-is-a-header dans le lien.

  • Les liens d'ancrage doivent être en minuscules, même si l'en-tête auquel vous vous associez est en majuscule.

    Exemple: #Section devient #section dans le lien. 

8
rPirate

Josh Paulson a publié un article sur le site Web de Rstudio dans les détails. Voici sa solution

Slide 1
====================================
id: slide1

Slide 2
====================================
[Go to slide 1](#/slide1)

Cela me fonctionne Le code d'une charrette à bras et de Mohair ne fonctionne pas sous RHTML

1
Junchen

@rPirate a une bonne liste, mais il manquait un cas qui me confondait. J'ai eu un en-tête de section comme ### 1.1.1 My Section Title qui doit être #my-section-title dans le lien.

Après quelques recherches, j'ai trouvé une liste officielle des règles de transformation dans le manuel Pandoc :

L'algorithme par défaut utilisé pour dériver l'identifiant à partir du texte d'en-tête est le suivant:

  • Supprimer tout le formatage, les liens, etc.
  • Supprimer toutes les notes de bas de page.
  • Supprimez tous les caractères non alphanumériques, à l'exception des traits de soulignement, des traits d'union et des points.
  • Remplacez tous les espaces et les nouvelles lignes par des traits d'union.
  • Convertissez tous les caractères alphabétiques en minuscules.
  • Supprimez tout jusqu'à la première lettre (les identifiants ne peuvent pas commencer par un chiffre ou un signe de ponctuation).
  • S'il ne reste plus rien après cela, utilisez la section identifiant.

Ainsi, par exemple,

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
0
dnlbrky