¿Cómo agregar una tabla de contenido en Rmarkdown?


88

Estoy usando RStudio para escribir documentos con rebajas y quiero agregar una tabla de contenido (TOC) en la parte superior de los documentos para que el usuario pueda hacer clic en la sección relevante para leer. Hubo algunos ejemplos relevantes en rpubs pero ahora parece que no puedo encontrarlos. Tenga en cuenta que no uso pandocy soy bastante nuevo en Rmd& knitr. ¿Hay alguna forma de agregar TOC sin usar pandoc? Si el uso pandoces obligatorio, ¿qué funciones son relevantes?

EDITAR

Aquí hay una pequeña página de muestra:

---
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.

Intenté ejecutar esto en RStudio v 0.98.864 y funcionó. pero lamentablemente no funcionó en 0.98.501 y 0.98.507. Estoy trabajando en mi tesis en 0.98.501 y después de actualizar RStudio, algunos de mis análisis no funcionaron. Entonces, volví a 0.98.501. ¿Qué debería hacer ahora? Realmente quiero TOC pero sin dañar los resultados de otros análisis.


2
Creo que el paquete rmarkdown utilizado por Rstudio es un envoltorio de pandoc, por lo que debería poder pasar la opción relevante. De hecho, toc: trueen el frente de YAML debería hacerlo.
baptiste

1
intente sangrar, siga los ejemplos en rmarkdown.rstudio.com y actualice Rstudio si todo lo demás falla
baptiste

1
@umairdurrani Ok. la muestra no tiene encabezados. ¿Qué quieres que esté en la tabla de contenido?
MrFlick

1
gracias @baptiste, también tuve un problema con esto, pero la sangría lo solucionó correctamente.
Alex

1
la sangría adecuada en el encabezado es clave
N Brouwer

Respuestas:


76

La sintaxis es

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

en la documentación . Asegúrese de que esté al principio de su documento. También asegúrese de que su documento realmente tenga encabezados, de lo contrario, R no puede decir lo que quiere en la tabla de contenido.


2
Esto es exactamente lo mismo que puse en la parte superior del archivo Rmd (antes del título) y hice clic en HTML tejido. El documento resultante no tiene tabla de contenido y fue creado sin ningún error. ¿Hay alguna otra opción para cambiar en alguna parte?
umair durrani

2
Ahora probé las versiones 0.98.501, .507 y .897 de RStudio (versión preliminar), pero esto de los metadatos no funcionó.
umair durrani

1
@umairdurrani puede editar su pregunta para incluir un pequeño documento de muestra que no le funcione. De esa manera podemos intentar exactamente lo mismo para ver qué sucede.
MrFlick

63

Sintaxis con más opciones:

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

4
Creo que esto es en toc_depthlugar dedepth
F. Privé

1
@ F.Privé Escribí esta respuesta hace un año. No estoy seguro de si el paquete ha realizado estos cambios. Gracias por actualizar.
Manoj Kumar

¿Cómo agregar un clic en cada sección para volver a TOC? gracias
Daniel

1
@Daniel: intente usar HTML de enlace de anclaje como: <a href="#top"> Back To Top </a>en la ubicación (las líneas de código) donde desea que aparezca. Espero que esto funcione.
Manoj Kumar

21

Si está utilizando pdf_document, es posible que desee agregar una tabla de contenido en una página nueva, lo toc: trueque no permite. Coloca la tabla de contenido justo después del título del documento, el autor y la fecha, porque está en yaml.

Si quieres tenerlo en una nueva página, tienes que usar algún lenguaje de látex. Aquí esta lo que hice.

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

Entonces, después de yaml (el fragmento entre ---), agregué una nueva página usando \newpage, luego una tabla de contenido usando \tableofcontents, una lista de figuras usando \listoffigures, una lista de tablas \listoftablesy una nueva página antes que todo lo demás.

Tenga \vspace{3in}en cuenta que en el título se agrega un espacio vertical de 3 pulgadas desde la parte superior antes de imprimir yaml (título, etc.).

Lea más aquí: https://www.sharelatex.com/learn/Table_of_contents

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.