Jak dodać spis treści w Rmarkdown?

88

Używam RStudio do pisania dokumentów Markdown i chcę dodać spis treści (TOC) u góry dokumentów, aby użytkownik mógł kliknąć odpowiednią sekcję do czytania. Było kilka odpowiednich przykładów na rpubach, ale teraz nie mogę ich znaleźć. Należy pamiętać, że nie używam pandoci jestem całkiem nowy Rmdi knitr. Czy istnieje sposób na dodanie spisów treści bez użycia pandoc? Jeśli użycie pandocjest konieczne, to które funkcje są istotne?

EDYTOWAĆ

Oto mała przykładowa strona:

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

Próbowałem uruchomić to w RStudio v 0.98.864 i zadziałało! ale niestety nie działało na 0.98.501 i 0.98.507. Pracuję nad swoją pracą w 0.98.501 i po aktualizacji RStudio niektóre z moich analiz nie działały. Wróciłem więc do 0.98.501. Co mam teraz zrobić? Naprawdę chcę TOC, ale bez szkody dla wyników innych analiz.

umair durrani
źródło
2
Uważam, że pakiet rmarkdown używany przez Rstudio jest opakowaniem wokół pandoc, więc powinieneś być w stanie przekazać odpowiednią opcję. W rzeczywistości toc: truena froncie YAML powinno to zrobić.
baptysta
1
spróbuj wcięć, zgodnie z przykładami w rmarkdown.rstudio.com i aktualizowanie Rstudio jeśli wszystko inne zawiedzie
Baptiste
1
@umairdurrani Ok. próbka nie ma żadnych nagłówków. Co chcesz znaleźć w spisie treści?
MrFlick
1
dzięki @baptiste, też miałem z tym problem, ale wcięcie to poprawiło.
Alex,
1
prawidłowe wcięcie w nagłówku jest kluczowe
N Brouwer

Odpowiedzi:

76

Składnia to

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

w dokumentacji . Upewnij się, że jest to początek dokumentu. Upewnij się również, że twój dokument faktycznie ma nagłówki, w przeciwnym razie R nie będzie w stanie powiedzieć, czego chcesz w spisie treści.

MrFlick
źródło
2
To jest dokładnie to samo, co umieściłem na górze pliku Rmd (przed tytułem) i kliknąłem „knit HTML”. Wynikowy dokument nie ma spisu treści i został utworzony bez żadnego błędu. Czy jest jakaś inna opcja, aby zmienić gdzieś?
umair durrani
2
Próbowałem teraz RStudio w wersjach 0.98.501, .507 i .897 (wersja zapoznawcza), ale te metadane nie działają.
umair durrani
1
@umairdurrani, czy możesz edytować swoje pytanie, aby dołączyć mały, przykładowy dokument, który nie działa dla Ciebie. W ten sposób możemy spróbować dokładnie tego samego, aby zobaczyć, co się stanie.
MrFlick
63

Składnia z większą liczbą opcji:

---
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
źródło
4
Myślę, że to toc_depthzamiastdepth
F. Privé,
1
@ F.Privé Napisałem tę odpowiedź około 1 rok temu. Nie jestem pewien, czy pakiet wprowadził te zmiany. Dzięki za aktualizację.
Manoj Kumar
Jak dodać kliknięcie w każdej sekcji, aby wrócić do spisu treści? dzięki
Daniel
1
@Daniel - Spróbuj użyć kodu HTML linku kotwicy, takiego jak: <a href="#top"> Back To Top </a>w miejscu (wierszach kodu), w którym ma się pojawić. Mam nadzieję, że to zadziała.
Manoj Kumar
21

Jeśli używasz pdf_document, możesz chcieć dodać spis treści na nowej stronie, co toc: truenie pozwala. Umieszcza spis treści bezpośrednio po tytule dokumentu, autorze i dacie - ponieważ jest w yaml.

Jeśli chcesz mieć to na nowej stronie, musisz użyć jakiegoś języka lateksowego. Oto co zrobiłem.

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

Tak więc, po yaml (fragment między ---), dodałem nową stronę za pomocą \newpage, a następnie spis treści za pomocą \tableofcontents, listę rysunków przy użyciu \listoffigures, listę tabel \listoftablesi nową stronę przed wszystkim innym.

Uwaga, \vspace{3in}w tytule dodaje pionową odstęp 3 cali od góry przed wydrukowaniem yaml (tytuł itp.).

Przeczytaj więcej tutaj: https://www.sharelatex.com/learn/Table_of_contents

MSD
źródło