Как добавить оглавление в Rmarkdown?

88

Я использую RStudio для написания документов с уценкой и хочу добавить оглавление (TOC) вверху документов, чтобы пользователь мог щелкнуть соответствующий раздел для чтения. На rpub было несколько подходящих примеров, но сейчас я не могу их найти. Обратите внимание, что я не использую pandocи совсем новичок в Rmd& knitr. Есть ли способ добавить оглавление без использования pandoc? Если использование pandocобязательно, то какие функции актуальны?

РЕДАКТИРОВАТЬ

Вот небольшой образец страницы:

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

Я попробовал запустить это в RStudio v 0.98.864, и это сработало! но, к сожалению, это не сработало на 0.98.501 и 0.98.507. Я работаю над диссертацией в версии 0.98.501, и после обновления RStudio некоторые из моих анализов не сработали. Итак, я вернулся к 0.98.501. Что мне теперь делать? Мне действительно нужны оглавления, но без ущерба для результатов других анализов.

Умайр Дуррани
источник
2
Я считаю, что пакет rmarkdown, используемый Rstudio, является оболочкой вокруг pandoc, поэтому вы должны иметь возможность передать соответствующий параметр. Собственно, toc: trueв YAML это должно делать фронт-дело.
Батист
1
попробуйте отступы, следуя примеры в rmarkdown.rstudio.com и обновление Rstudio , если все остальное терпит неудачу
Батист
1
@umairdurrani Хорошо. в образце нет заголовков. Что вы хотите включить в оглавление?
MrFlick
1
спасибо @baptiste, у меня тоже была проблема, но отступы исправили ее.
Alex
1
правильный отступ в заголовке является ключевым
N Brouwer

Ответы:

76

Синтаксис

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

в документации . Убедитесь, что это находится в начале вашего документа. Также убедитесь, что у вашего документа действительно есть заголовки, иначе R не сможет сказать, что вы хотите от содержания.

MrFlick
источник
2
Это то же самое, что я поместил поверх файла Rmd (перед заголовком) и нажал связать HTML. В результате документ не имеет оглавления и был создан без ошибок. Есть ли другой вариант где-нибудь поменять?
умайр дуррани
2
Я попробовал RStudio версий 0.98.501, .507 и .897 (предварительная версия), но эта штука с метаданными не сработала.
умайр дуррани
1
@umairdurrani, можете ли вы отредактировать свой вопрос, включив в него небольшой образец документа, который вам не подходит. Таким образом, мы можем попробовать то же самое, чтобы увидеть, что произойдет.
MrFlick
63

Синтаксис с дополнительными параметрами:

---
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
Думаю, это toc_depthвместоdepth
F. Privé
1
@ F.Privé Я написал этот ответ около года назад. Не уверен, внесены ли в пакет эти изменения. Спасибо за обновление.
Manoj Kumar
Как добавить клик в каждый раздел, чтобы вернуться в оглавление? спасибо
Daniel
1
@Daniel - попробуйте использовать HTML-ссылку привязки, например: <a href="#top"> Back To Top </a>в том месте (строках кода), где вы хотите, чтобы она отображалась. Надеюсь, это сработает.
Манодж Кумар
22

Если вы используете pdf_document, вы можете добавить оглавление на новую страницу, что toc: trueне позволяет. Оглавление помещается сразу после названия документа, автора и даты - потому что оно написано на yaml.

Если вы хотите разместить его на новой странице, вы должны использовать латексный язык. Вот что я сделал.

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

Итак, после yaml (фрагмент между ---) я добавил новую страницу using \newpage, затем оглавление using \tableofcontents, список используемых фигур \listoffigures, список таблиц \listoftablesи новую страницу перед всем остальным.

Обратите внимание, что \vspace{3in}в заголовке перед печатью yaml (заголовок и т. Д.) Добавляется вертикальный интервал в 3 дюйма сверху.

Подробнее здесь: https://www.sharelatex.com/learn/Table_of_contents

MSD
источник