Como adicionar índice no Rmarkdown?

88

Estou usando o RStudio para escrever documentos markdown e quero adicionar índice (TOC) na parte superior dos documentos para que o usuário possa clicar na seção relevante para leitura. Houve alguns exemplos relevantes em rpubs, mas agora não consigo encontrá-los. Observe que eu não uso pandoce sou muito novo em Rmd& knitr. Existe alguma maneira de adicionar TOCs sem usar pandoc? Se usar pandocé necessário, quais funções são relevantes?

EDITAR

Aqui está uma pequena página de amostra:

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

Tentei rodar no RStudio v 0.98.864 e funcionou! mas, infelizmente, não funcionou em 0.98.501 e 0.98.507. Estou trabalhando na minha tese em 0.98.501 e depois de atualizar o RStudio, algumas das minhas análises não funcionaram. Então, eu voltei para 0,98.501. O que eu deveria fazer agora? Eu realmente quero TOCs, mas sem prejudicar os resultados de outras análises.

umair durrani
fonte
2
Eu acredito que o pacote rmarkdown usado pelo Rstudio é um wrapper para o pandoc, então você deve ser capaz de passar a opção relevante. Na verdade, toc: truena frente do YAML deve fazê-lo.
baptiste
1
tente recuar, seguindo os exemplos em rmarkdown.rstudio.com e atualizando Rstudio se tudo mais falhar
baptiste
1
@umairdurrani Ok. a amostra não tem cabeçalhos. O que você deseja que apareça no índice?
MrFlick
1
obrigado @baptiste, eu também tive um problema com isso, mas o recuo corrigiu isso corretamente.
Alex
1
o recuo adequado no cabeçalho é a chave
N Brouwer

Respostas:

76

A sintaxe é

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

na documentação . Certifique-se de que esteja no início do seu documento. Além disso, certifique-se de que seu documento realmente tenha cabeçalhos, caso contrário R não poderá dizer o que você deseja no índice analítico.

MrFlick
fonte
2
Isso é exatamente a mesma coisa que coloquei em cima do arquivo Rmd (antes do título) e cliquei em tricotar HTML. O documento resultante não tem índice e foi criado sem erros. Existe alguma outra opção para mudar em algum lugar?
umair durrani
2
Já experimentei as versões do RStudio 0.98.501, .507 e .897 (versão prévia), mas essa coisa de metadados não funcionou.
umair durrani
1
@umairdurrani você pode editar sua pergunta para incluir um pequeno documento de amostra que não funciona para você. Dessa forma, podemos tentar exatamente a mesma coisa para ver o que acontece.
MrFlick
63

Sintaxe com mais opções:

---
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
fonte
4
Acho que isso é em toc_depthvez dedepth
F. Privé
1
@ F.Privé Escrevi esta resposta há cerca de 1 ano. Não tenho certeza se o pacote fez essas alterações. Obrigado pela atualização.
Manoj Kumar
Como adicionar um clique em cada seção para retornar ao TOC? obrigado
Daniel
1
@Daniel - Tente usar o HTML do link âncora, como: <a href="#top"> Back To Top </a>no local (as linhas de código) onde deseja que ele apareça. Espero que funcione.
Manoj Kumar de
22

Se você estiver usando pdf_document, convém adicionar índice em uma nova página, o que toc: truenão permite. Coloca o índice logo após o título do documento, autor e data - porque está no yaml.

Se você quiser tê-lo em uma nova página, deverá usar alguma linguagem látex. Aqui está o que eu fiz.

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

Então, depois de yaml (o pedaço entre ---), adicionei uma nova página usando \newpage, então um índice usando \tableofcontents, uma lista de figuras usando \listoffigures, uma lista de tabelas \listoftablese uma nova página antes de tudo mais.

Observe que \vspace{3in}no título adiciona um espaço vertical de 3 polegadas a partir do topo antes de imprimir o yaml (título, etc.).

Leia mais aqui: https://www.sharelatex.com/learn/Table_of_contents

MSD
fonte