Comment ajouter une table des matières dans Rmarkdown?

88

J'utilise RStudio pour écrire des documents de démarquage et je souhaite ajouter une table des matières (TOC) en haut des documents afin que l'utilisateur puisse cliquer sur la section appropriée pour la lecture. Il y avait quelques exemples pertinents sur les rpubs mais maintenant je n'arrive pas à les trouver. Veuillez noter que je n'utilise pas pandocet que je suis assez nouveau dans Rmd& knitr. Existe-t-il un moyen d'ajouter des tables des matières sans utiliser pandoc? Si l'utilisation pandocest obligatoire, quelles fonctions sont pertinentes?

ÉDITER

Voici un petit exemple de page:

---
title: "Sample Document"
output:
  html_document:
    toc: true
    theme: united
---

Header 1
---------------
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>.
    
## Header 2
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}
summary(cars)
```

You can also embed plots, for example:

```{r, echo=FALSE}
plot(cars)
```
### Header 3
Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot.

J'ai essayé de l'exécuter dans RStudio v 0.98.864 et cela a fonctionné! mais malheureusement cela n'a pas fonctionné sur 0.98.501 et 0.98.507. Je travaille sur ma thèse en 0.98.501 et après la mise à jour de RStudio, certaines de mes analyses n'ont pas fonctionné. Donc, je suis revenu à 0.98.501. Qu'est-ce que je devrais faire maintenant? Je veux vraiment des TOC mais sans nuire aux résultats des autres analyses.

umair durrani
la source
2
Je pense que le package rmarkdown utilisé par Rstudio est un wrapper autour de pandoc, vous devriez donc pouvoir passer l'option appropriée. En fait, toc: truedans le front-matière YAML devrait le faire.
baptiste
1
essayez indenter, en suivant les exemples rmarkdown.rstudio.com et la mise à jour rstudio si tout le reste échoue
Baptiste
1
@umairdurrani Ok. l'échantillon n'a aucun en-tête. Que voulez-vous figurer dans la table des matières?
MrFlick
1
merci @baptiste, j'ai eu un problème avec cela aussi, mais l'indentation l'a correctement corrigé.
Alex
1
l'indentation correcte dans l'en-tête est la clé
N Brouwer

Réponses:

76

La syntaxe est

---
title: "Sample Document"
output:
  html_document:
    toc: true
    theme: united
---

dans la documentation . Assurez-vous que cela se trouve au début de votre document. Assurez-vous également que votre document a effectivement des en-têtes, sinon R ne peut pas dire ce que vous voulez dans la table des matières.

MrFlick
la source
2
C'est exactement la même chose que j'ai placée au-dessus du fichier Rmd (avant le titre) et que j'ai cliqué sur HTML tricoté. Le document résultant n'a pas de table des matières et a été créé sans aucune erreur. Y a-t-il une autre option pour en changer quelque part?
umair durrani
2
J'ai maintenant essayé les versions 0.98.501, .507 et .897 de RStudio (version préliminaire), mais ce truc de métadonnées n'a pas fonctionné.
umair durrani
1
@umairdurrani pouvez vous modifier votre question pour inclure un petit exemple de document qui ne fonctionne pas pour vous. De cette façon, nous pouvons essayer exactement la même chose pour voir ce qui se passe.
MrFlick
63

Syntaxe avec plus d'options:

---
title: "Planets"
author: "Manoj Kumar"
date: "`r format(Sys.time(), '%B %d, %Y')`"
output: 
  html_document:
    toc: true # table of content true
    toc_depth: 3  # upto three depths of headings (specified by #, ## and ###)
    number_sections: true  ## if you want number sections at each table header
    theme: united  # many options for theme, this one is my favorite.
    highlight: tango  # specifies the syntax highlighting style
    css: my.css   # you can add your custom css, should be in same folder
---
Manoj Kumar
la source
4
Je pense que c'est toc_depthau lieu dedepth
F. Privé
1
@ F.Privé J'ai écrit cette réponse il y a un an. Je ne sais pas si le package a apporté ces modifications. Merci pour la mise à jour.
Manoj Kumar le
Comment ajouter un clic dans chaque section pour revenir à la table des matières? merci
Daniel
1
@Daniel - Essayez d'utiliser le HTML de lien d'ancrage tel que: <a href="#top"> Back To Top </a>à l'emplacement (les lignes de code) où vous voulez qu'il apparaisse. J'espère que cela fonctionne.
Manoj Kumar
22

Si vous utilisez pdf_document, vous souhaiterez peut-être ajouter une table des matières dans une nouvelle page, ce toc: truequi ne permet pas. Il place la table des matières juste après le titre, l'auteur et la date du document - car elle est en yaml.

Si vous voulez l'avoir dans une nouvelle page, vous devez utiliser un langage latex. Voici ce que j'ai fait.

---
title: \vspace{3.5in}"Title"
author: "Name"
date: "`r Sys.Date()`"
output:
   pdf_document:
      fig_caption: true
      number_sections: true
---

\newpage # adds new page after title
\tableofcontents # adds table of contents
\listoffigures
\listoftables
\newpage

Donc, après yaml (le morceau entre ---), j'ai ajouté une nouvelle page en utilisant \newpage, puis une table des matières en utilisant \tableofcontents, une liste de figures utilisant \listoffigures, une liste de tableaux \listoftableset une nouvelle page avant tout le reste.

Remarque, \vspace{3in}dans le titre ajoute un espace vertical de 3 pouces à partir du haut avant d'imprimer yaml (titre, etc.).

En savoir plus ici: https://www.sharelatex.com/learn/Table_of_contents

MSD
la source